1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Tuần 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Đại học Harvard 3 00:00:04,740 --> 00:00:07,170 [Đây là CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Được rồi. Chào mừng trở lại. Đây là CS50, và đây là sự bắt đầu của tuần 9. 5 00:00:12,350 --> 00:00:16,600 Hôm nay chúng tôi tập trung đặc biệt về thiết kế, không còn trong bối cảnh của C 6 00:00:16,600 --> 00:00:20,010 nhưng trong bối cảnh của PHP và một chút của SQL và một chút của JavaScript, 7 00:00:20,010 --> 00:00:23,730 đặc biệt là hướng tới một kết thúc của cả hai pset 7 và cũng là dự án cuối cùng của bạn. 8 00:00:23,730 --> 00:00:26,310 Trong thực tế, nếu bạn là tại thời điểm đó trong dự án cuối cùng của bạn 9 00:00:26,310 --> 00:00:30,100 mà có lẽ là của một giờ hoặc lâu hơn trước ít nhất là bắt đầu đưa ra một số suy nghĩ 10 00:00:30,100 --> 00:00:33,730 dự án cuối cùng của bạn và bạn đang nghĩ bạn muốn cộng tác với 1 hoặc 2 bạn cùng lớp, 11 00:00:33,730 --> 00:00:36,150 nếu bạn gặp vấn đề kết nối với bạn cùng lớp, 12 00:00:36,150 --> 00:00:40,570 cảm thấy tự do để điền vào các mẫu đơn tại cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 Nó chỉ yêu cầu bạn bạn là ai, những gì loại dự án bạn đang suy nghĩ về, 14 00:00:42,880 --> 00:00:44,870 nơi bạn sống chỉ vì lý do hậu cần. 15 00:00:44,870 --> 00:00:49,510 Và sau đó nếu bạn muốn để giữ một mắt trên tuần tới hoặc URL bảng tính có, 16 00:00:49,510 --> 00:00:53,520 sau đó bạn có thể thấy một phiên bản chỉ đọc của Google doc 17 00:00:53,520 --> 00:00:56,010 trong đó chúng ta đang thu thập thông tin đó. 18 00:00:56,010 --> 00:00:58,930 Vì vậy, nếu bạn muốn làm việc với một người nào đó, bởi tất cả các phương tiện cảm thấy tự do để tiếp cận với mọi người 19 00:00:58,930 --> 00:01:00,480 thông qua cơ chế đó. 20 00:01:00,480 --> 00:01:02,690 Tuy nhiên, đa số người làm solo của công việc. Đó là hoàn toàn tốt. 21 00:01:02,690 --> 00:01:06,120 Vì vậy, không cảm thấy rằng điều này là trong bất kỳ cách nào bắt buộc. 22 00:01:06,120 --> 00:01:09,680 Ngày thứ sáu, nó chỉ là tôi và một vài đội bóng ở đây, 23 00:01:09,680 --> 00:01:11,100 nhà hát trống cho hầu hết các phần. 24 00:01:11,100 --> 00:01:14,600 Có được 3 khách du lịch ngồi đó, vì vậy đó là một chút vụng về. 25 00:01:14,600 --> 00:01:18,970 Những gì chúng tôi nói về cơ sở dữ liệu và chúng tôi nói chuyện về pset 7 một chút. 26 00:01:18,970 --> 00:01:22,200 Và nếu bạn đã không xảy ra để bắt trên video chỉ được nêu ra, đó là tốt. 27 00:01:22,200 --> 00:01:26,770 Tôi sẽ cố gắng để xác định bất kỳ điều khoản mà chúng tôi nếu không sẽ đưa cho các cấp 28 00:01:26,770 --> 00:01:28,840 dựa trên các bài giảng hôm thứ Sáu. 29 00:01:28,840 --> 00:01:32,550 >> Nhưng hôm nay chúng tôi sẽ cố gắng để có được bạn điểm 30 00:01:32,550 --> 00:01:34,990 không chỉ có thể làm một cái gì đó như pset 7 31 00:01:34,990 --> 00:01:37,360 nhưng thực sự hiểu những gì đang xảy ra bên dưới mui xe, 32 00:01:37,360 --> 00:01:41,910 đặc biệt là một số các khái niệm trừu tượng mà chúng tôi đưa ra trong file functions.php 33 00:01:41,910 --> 00:01:45,780 để làm cho cuộc sống của bạn dễ dàng hơn một chút, nhưng để cuối cùng bạn hiểu 34 00:01:45,780 --> 00:01:48,760 để khi các bánh xe đào tạo đến trong một vài tuần, bạn vẫn có thể tồn tại 35 00:01:48,760 --> 00:01:53,750 trong thế giới thực và làm công cụ này mà không có bất kỳ khuôn khổ CS50 bên dưới bạn. 36 00:01:53,750 --> 00:01:57,500 Này $ _SESSION, cho những người bạn đã quen thuộc 37 00:01:57,500 --> 00:02:01,960 hoặc những người đã bắt được video vào thứ Sáu, PHẦN những gì cho chúng tôi làm 38 00:02:01,960 --> 00:02:04,330 trong một ứng dụng web dựa trên PHP? 39 00:02:04,330 --> 00:02:09,650 Đây là một biến superglobal, có nghĩa là nó tương tự như trong tinh thần GET và POST 40 00:02:09,650 --> 00:02:13,970 và một vài người khác, nhưng điều này là những gì hữu ích cho? 41 00:02:13,970 --> 00:02:18,320 >> PHẦN dùng để làm gì? Yeah. [Sinh viên] Đăng nhập. 42 00:02:18,320 --> 00:02:21,040 Xin lỗi? [Sinh viên] Đăng nhập. Đang đăng nhập thực tế. 43 00:02:21,040 --> 00:02:25,100 Trong pset 7, chúng tôi đang sử dụng này superglobal SESSION để tạo điều kiện thuận lợi cho đăng nhập. 44 00:02:25,100 --> 00:02:28,600 Và những gì tốt đẹp về superglobal này là nó là một mảng kết hợp. 45 00:02:28,600 --> 00:02:33,190 Một mảng kết hợp, thu hồi, chỉ là một mảng nhưng có chỉ số không còn phải là con số 46 00:02:33,190 --> 00:02:37,670 như 012. Họ có thể là số hoặc họ thậm chí có thể là chuỗi. 47 00:02:37,670 --> 00:02:44,890 Và vì vậy nếu bạn đã nhảy vào pset 7, bạn có thể nhớ lại rằng chúng tôi đang lưu trữ một ID được gọi là chìa khóa 48 00:02:44,890 --> 00:02:50,330 bên trong của mảng kết hợp này có giá trị là một cái gì đó giống như 123 - 49 00:02:50,330 --> 00:02:53,780 bất cứ điều gì hiện đang đăng nhập ID của người sử dụng. 50 00:02:53,780 --> 00:02:59,470 Động lực cho việc này là ngay cả sau khi người dùng đã truy cập localhost 51 00:02:59,470 --> 00:03:02,720 hoặc trang web của tôi nói chung và sau đó họ đã đăng nhập, 52 00:03:02,720 --> 00:03:07,320 ngay cả khi họ không bấm vào một liên kết hoặc quay trở lại trang web của tôi trong 5 phút 53 00:03:07,320 --> 00:03:10,730 hoặc thậm chí là một giờ hoặc thậm chí một ngày nhưng họ để lại mở cửa sổ trình duyệt của họ, 54 00:03:10,730 --> 00:03:14,370 thông qua superglobal này, tôi có thể nhớ rằng họ đang đăng nhập. 55 00:03:14,370 --> 00:03:21,140 >> Nói cách khác, nó cho phép tôi để lưu trữ hơi dài hạn bất cứ điều gì tôi muốn về người sử dụng. 56 00:03:21,140 --> 00:03:24,390 Và bạn có thể nghĩ rằng nó thực sự là hóa thân của một giỏ mua hàng. 57 00:03:24,390 --> 00:03:27,740 Những nơi như Amazon rõ ràng là cho phép bạn đặt mọi thứ vào một giỏ mua hàng, 58 00:03:27,740 --> 00:03:32,230 nhưng HTTP, giao thức rằng quyền hạn Web, là quốc tịch 59 00:03:32,230 --> 00:03:34,230 trong ý nghĩa rằng khi bạn ghé thăm một trang web, 60 00:03:34,230 --> 00:03:37,290 cho hầu hết các phần, bạn không có một số kết nối mạng liên tục 61 00:03:37,290 --> 00:03:39,270 giữa trình duyệt và máy chủ. 62 00:03:39,270 --> 00:03:42,190 Ngay sau khi bạn đã tải về HTML và các hình ảnh JPEG và GIF và tất cả đó, 63 00:03:42,190 --> 00:03:48,200 kết nối đi xa và bạn chỉ có một bản sao của HTML và whatnot từ máy chủ. 64 00:03:48,200 --> 00:03:53,000 Nhưng nếu máy chủ muốn ghi nhớ một cái gì đó về bạn, 65 00:03:53,000 --> 00:03:57,580 gánh nặng trên máy chủ để thực sự ghi lại các thông tin đó. 66 00:03:57,580 --> 00:04:00,130 Và như vậy bạn lập trình viên có kiểm soát máy chủ 67 00:04:00,130 --> 00:04:04,400 có thể đặt bất cứ điều gì nhất mà bạn muốn bên trong của mảng kết hợp này superglobal 68 00:04:04,400 --> 00:04:06,850 và nó sẽ có mặt ở đó trong thời gian tới người sử dụng trở lại, 69 00:04:06,850 --> 00:04:12,070 cho dù đó là phút hoặc thậm chí vài ngày sau đó, trừ khi họ đóng cửa sổ trình duyệt của họ, 70 00:04:12,070 --> 00:04:14,360 PHẦN điểm mà tại đó biến mất. 71 00:04:14,360 --> 00:04:17,779 Vì vậy, nó là lưu trữ tạm thời, nó không liên tục, và nó có nghĩa là để đi xa 72 00:04:17,779 --> 00:04:22,360 ngay khi người dùng đóng trình duyệt của họ - không chỉ là tab, thường là toàn bộ trình duyệt, 73 00:04:22,360 --> 00:04:24,930 do đó hiệu quả đăng nhập người sử dụng ra. 74 00:04:24,930 --> 00:04:28,000 Vì vậy, làm thế nào điều này thực sự thực hiện? 75 00:04:28,000 --> 00:04:31,360 Chúng ta hãy xem nhanh một ví dụ đơn giản, chúng tôi nhìn vào thứ Sáu. 76 00:04:31,360 --> 00:04:33,340 Đối với những người không quen, nó đơn giản như này. 77 00:04:33,340 --> 00:04:35,910 Đây là một trang web có mục đích duy nhất trong cuộc sống là để cho tôi biết 78 00:04:35,910 --> 00:04:38,000 bao nhiêu lần tôi đã truy cập trang này. 79 00:04:38,000 --> 00:04:41,670 Đây là lần đầu tiên ở đây vào hôm thứ Hai rằng tôi đến thăm nó, vì vậy nó nói 0 lần. 80 00:04:41,670 --> 00:04:46,940 >> Nhưng nếu tôi bắt đầu tải lại trang này, nó nói 1 lần, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 và điều này sẽ cuối cùng chỉ tiếp tục đếm lên, tăng, tăng, tăng, tăng 82 00:04:49,800 --> 00:04:53,130 mỗi lần tôi thực sự kích Nạp lại trên đó. 83 00:04:53,130 --> 00:04:58,830 Vì vậy, làm thế nào là làm việc này? Hãy để tôi đi vào bên trong của tập tin này được gọi là counter.php. 84 00:04:58,830 --> 00:05:02,490 Phần trên cùng của nó là tất cả các ý kiến ​​xanh biển, nhưng phần thú vị là ở đây. 85 00:05:02,490 --> 00:05:06,670 Trên dòng 13, chúng tôi gọi đây là session_start chức năng, 86 00:05:06,670 --> 00:05:09,600 và điều đó có nghĩa là tất cả các bạn cần phải làm gì nếu bạn muốn truy cập 87 00:05:09,600 --> 00:05:13,610 này superglobal đặc biệt được gọi là $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 Điều đó làm cho nó tất cả có thể, và chúng ta sẽ thấy trong một khoảnh khắc làm thế nào mà tất cả có thể. 89 00:05:17,430 --> 00:05:20,350 Trong thông báo 16 dòng những gì tôi đang làm. 90 00:05:20,350 --> 00:05:25,960 Nếu chìa khóa, được gọi là truy cập - nói cách khác, giá trị chỉ số "phản" 91 00:05:25,960 --> 00:05:32,310 tồn tại bên trong của mảng này được gọi là PHẦN, sau đó những gì tôi làm với nó trong hàng dưới đây? 92 00:05:32,310 --> 00:05:36,650 Dòng 18 đang làm gì? 93 00:05:36,650 --> 00:05:40,360 >> [Không nghe được sinh viên phản ứng] đó là gì? [Sinh viên] Lưu trữ các giá trị. Tốt. 94 00:05:40,360 --> 00:05:45,800 Nó lưu trữ các giá trị trong phiên giao dịch ngay bây giờ trong một biến cục bộ tạm thời mới, 95 00:05:45,800 --> 00:05:48,250 $ Truy cập trong tất cả các chữ thường. 96 00:05:48,250 --> 00:05:50,770 Chú ý rằng PHP là đã được một chút lười biếng ở đây. 97 00:05:50,770 --> 00:05:55,550 Chú ý chúng tôi không có bất kỳ đề cập đến int hoặc float hoặc chuỗi hoặc bất cứ điều gì như 98 00:05:55,550 --> 00:06:00,480 bởi vì PHP là yếu gõ, nhờ đó mà bạn không phải định rõ loại của một biến, 99 00:06:00,480 --> 00:06:03,310 và trong trường hợp này ở đây tôi đã thậm chí không tuyên bố nó. 100 00:06:03,310 --> 00:06:08,980 Tôi tuyên bố nó bên trong các dấu ngoặc nhọn và không giống như C, điều này thực sự là không sao. 101 00:06:08,980 --> 00:06:13,800 Không có vấn đề làm thế nào sâu lồng nhau khai báo một biến trong PHP - 102 00:06:13,800 --> 00:06:16,650 bên trong của xoăn đôi, bên trong xoăn cú đúp và các loại tương tự - 103 00:06:16,650 --> 00:06:21,230 nó sẽ ở thời điểm đó trong thời gian tồn tại cho phần còn lại của chương trình, 104 00:06:21,230 --> 00:06:22,680 cho tốt hơn hoặc tồi tệ hơn. 105 00:06:22,680 --> 00:06:26,930 Vì vậy, nó ngay lập tức trở thành toàn cầu ngay sau khi bạn xác định nó như chúng ta đang làm ở đây. 106 00:06:26,930 --> 00:06:31,620 >> Nếu không, nếu tôi không thấy có bất cứ điều gì trong các superglobal PHẦN, 107 00:06:31,620 --> 00:06:34,680 Tôi dường như khởi tạo biến này truy cập đến 0, 108 00:06:34,680 --> 00:06:37,580 do đó chỉ là giả định người sử dụng đã không bao giờ được ở đây trước. 109 00:06:37,580 --> 00:06:40,030 Và sau đó điều này tất nhiên incrementing truy cập như thế nào? 110 00:06:40,030 --> 00:06:44,480 Tôi đang cập nhật giá trị bên trong của mảng kết hợp này 111 00:06:44,480 --> 00:06:49,530 bằng cách thiết lập nó bằng bất cứ điều gì truy cập hiện nay là + 1. 112 00:06:49,530 --> 00:06:53,520 Nếu tôi di chuyển xuống đây để HTML của trang, nó thực sự khá đơn giản. 113 00:06:53,520 --> 00:06:58,920 Tất cả những gì tôi có trong cơ thể của trang này là: "Bạn đã truy cập trang web lần và vì vậy." 114 00:06:58,920 --> 00:07:00,350 Và đây là một cấu trúc PHP. 115 00:07:00,350 --> 00:07:06,080 Nếu bạn làm <=, điều này là có hiệu quả tương đương với những gì chức năng? 116 00:07:07,920 --> 00:07:12,600 Nó thực sự tương đương với một cái gì đó giống như printf, mà chúng tôi đã nhìn thấy nhiều lần trong C, 117 00:07:12,600 --> 00:07:15,940 mặc dù như bạn có thể đã biết từ các spec trong pset 7, 118 00:07:15,940 --> 00:07:20,160 in cũng là một chức năng mà chỉ cần in một cái gì đó, nó không thực sự sử dụng mã định dạng, 119 00:07:20,160 --> 00:07:23,270 và bạn thực sự có thể nói tiếng vọng là tốt. 120 00:07:23,270 --> 00:07:27,460 Tất cả chúng nó bao giờ nên hơi khác nhau, mặc dù ảnh hưởng thực cuối cùng là như nhau. 121 00:07:27,460 --> 00:07:31,270 Vì vậy, sử dụng các dấu bằng chỉ là loại một cách thanh lịch làm việc đó 122 00:07:31,270 --> 00:07:34,910 cách ngắn gọn hơn hơn bạn có thể có thể. 123 00:07:34,910 --> 00:07:38,370 Vì vậy, đó là tất cả các trang web này. Nó in ra các giá trị của truy cập. 124 00:07:38,370 --> 00:07:40,550 Như thế nào tất cả điều này thực sự xảy ra? 125 00:07:40,550 --> 00:07:43,250 Bạn có thể nhớ lại một tuần hoặc lâu hơn trước đây chúng tôi bắt đầu tìm kiếm bên dưới mui xe 126 00:07:43,250 --> 00:07:47,910 làm thế nào một trang web hoạt động bằng cách sử dụng tab này Thanh tra. 127 00:07:47,910 --> 00:07:51,900 >> Chrome có cả hai điều này trong phiên bản Mac, phiên bản Windows, và thậm chí phiên bản Linux, 128 00:07:51,900 --> 00:07:59,510 và Firefox và IE có cơ chế tương tự nhờ đó mà bạn có trình gỡ lỗi này được xây dựng trong 129 00:07:59,510 --> 00:08:01,400 bên trong trình duyệt. 130 00:08:01,400 --> 00:08:03,040 Chúng ta hãy xem xét sau đây. 131 00:08:03,040 --> 00:08:06,960 Chúng tôi đã có một bó toàn bộ các tab ở đây, và nhớ lại rằng một trong những tận cùng bên trái là các yếu tố, 132 00:08:06,960 --> 00:08:10,700 và không có vấn đề như thế nào godawful HTML và JavaScript trong một trang, 133 00:08:10,700 --> 00:08:15,710 nhớ lại rằng với các tab Elements bạn thực sự có thể điều hướng các HTML phân cấp 134 00:08:15,710 --> 00:08:17,050 và tốt đẹp và gọn gàng. 135 00:08:17,050 --> 00:08:19,370 Vì vậy, nếu bạn đang cố gắng để học hỏi từ một trang web như Google hay Facebook 136 00:08:19,370 --> 00:08:22,370 hoặc thực sự bất kỳ trang web, nhận ra rằng bạn có lẽ tốt hơn 137 00:08:22,370 --> 00:08:26,360 nhìn vào mã nguồn theo cách này như trái ngược để xem mã nguồn nguyên liệu, 138 00:08:26,360 --> 00:08:29,580 mà có thể là một mớ hỗn độn, như chúng ta đã nhìn thấy đặc biệt là trên trang web của Google. 139 00:08:29,580 --> 00:08:32,220 Vì vậy, nếu tôi thay vì click vào tab Network ở đây, 140 00:08:32,220 --> 00:08:34,830 hãy xem những gì đang xảy ra khi tôi truy cập trang này. 141 00:08:34,830 --> 00:08:38,669 Trước tiên cho tôi rõ ràng bộ nhớ cache của tôi. 142 00:08:38,669 --> 00:08:43,570 Tôi sẽ đi vào Settings trong Chrome và sau đó đi đến Lịch sử 143 00:08:43,570 --> 00:08:46,420 và sau đó Xóa tất cả các dữ liệu duyệt web. 144 00:08:46,420 --> 00:08:48,170 Bạn có thể được sử dụng để làm điều này cho các mục đích khác, [cười] 145 00:08:48,170 --> 00:08:51,990 nhưng khi nói đến các trang web phát triển, nó thực sự hữu ích - 146 00:08:51,990 --> 00:08:55,980 nếu bạn đang cười bạn biết. [Cười] 147 00:08:55,980 --> 00:08:59,310 Nó thực sự là thực sự hữu ích khi phát triển trang web bởi vì thực tế là 148 00:08:59,310 --> 00:09:04,100 những thứ như bánh quy và những thứ như các tập tin lưu trữ HTML, lưu trữ các tệp JavaScript 149 00:09:04,100 --> 00:09:06,390 thực sự có thể trở thành một nhức đầu lớn, bởi vì nếu vì lý do gì 150 00:09:06,390 --> 00:09:11,500 trình duyệt quyết định để cache một số tập tin và bạn đã thực hiện thay đổi đến tập tin đó trên máy chủ 151 00:09:11,500 --> 00:09:14,670 nhưng trình duyệt đã không thực sự nhận ra rằng các tập tin đã thay đổi 152 00:09:14,670 --> 00:09:19,060 và do đó không thực sự lại tải về nó ngay cả khi bạn nhấp vào nút Reload, 153 00:09:19,060 --> 00:09:23,210 một trong những cách chắc chắn nhất để chỉ cần đảm bảo lỗi là không phải với mã của bạn, 154 00:09:23,210 --> 00:09:26,480 nó với các hành vi của trình duyệt, là để đi ở đây trong trình duyệt của bạn 155 00:09:26,480 --> 00:09:29,950 và chỉ cần xóa toàn bộ lịch sử để có sự nhầm lẫn. 156 00:09:29,950 --> 00:09:33,210 >> Và sau đó nếu bạn thực sự muốn được hoang tưởng, thoát khỏi trình duyệt, khởi động lại nó, 157 00:09:33,210 --> 00:09:35,660 và sau đó hãy chắc chắn rằng tất cả đang làm việc như mong đợi. 158 00:09:35,660 --> 00:09:38,820 Vì vậy, trong ngắn hạn, thanh toán bù trừ bộ nhớ cache là tốt khi thực hiện phát triển. 159 00:09:38,820 --> 00:09:40,690 Vì vậy, ở đây chúng tôi có vào tab Network. 160 00:09:40,690 --> 00:09:46,020 Tôi trước đây đã truy cập trang web 9 lần, nhưng hãy để tôi đi trước và nhấn Reload. 161 00:09:46,020 --> 00:09:47,500 Và tôi lại xuống đến 0. 162 00:09:47,500 --> 00:09:52,100 Hãy để thực sự thấy làm thế nào mà superglobal PHẦN này đang được thực hiện. 163 00:09:52,100 --> 00:09:55,990 Tôi sẽ phải bấm vào các yêu cầu HTTP 1 đã được thực hiện, 164 00:09:55,990 --> 00:09:58,810 và cửa sổ gỡ lỗi này cho phép tôi nhìn vào bên trong đó. 165 00:09:58,810 --> 00:10:01,970 Ở đây tôi chỉ thấy phản hồi từ máy chủ, mà không phải là thú vị. 166 00:10:01,970 --> 00:10:04,030 Tôi đã nhìn thấy điều này trong bất kỳ số cách khác nhau. 167 00:10:04,030 --> 00:10:06,350 Nhưng những gì là kỹ thuật thú vị là các tiêu đề. 168 00:10:06,350 --> 00:10:11,770 Nếu tôi di chuyển xuống ở đây và tập trung vào các tiêu đề yêu cầu và nhấp vào xem mã nguồn, 169 00:10:11,770 --> 00:10:14,400 những gì tôi sẽ xem là thật sự là yêu cầu HTTP 170 00:10:14,400 --> 00:10:17,250 chỉ cần đi từ trình duyệt của tôi đến máy chủ, 171 00:10:17,250 --> 00:10:21,400 GET là từ tác và sau đó / counter.php là tên tập tin, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 chỉ là các phiên bản của HTTP mà trình duyệt của tôi đang sử dụng. 173 00:10:25,670 --> 00:10:31,070 Dòng này ở đây là một lời nhắc nhở ít từ trình duyệt đến máy chủ tên của máy chủ là gì 174 00:10:31,070 --> 00:10:33,020 rằng nó muốn nói chuyện với. 175 00:10:33,020 --> 00:10:38,200 Và sau đó phần còn lại của việc này là đôi khi thú vị, nhưng không liên quan ngay bây giờ. 176 00:10:38,200 --> 00:10:40,090 >> Đây chỉ là một sự tò mò. 177 00:10:40,090 --> 00:10:43,530 Khó hiểu mặc dù chuỗi này là, bất cứ lúc nào, trình duyệt của bạn truy cập một trang web 178 00:10:43,530 --> 00:10:47,110 nó được thông báo cho máy chủ trình duyệt bạn đang sử dụng 179 00:10:47,110 --> 00:10:50,040 và hệ điều hành bạn đang sử dụng và những gì phiên bản của nó. 180 00:10:50,040 --> 00:10:52,650 Vì vậy, nếu bạn đã bao giờ tự hỏi làm thế nào các trang web như CNN và whatnot 181 00:10:52,650 --> 00:10:56,860 biết những gì tỷ lệ phần trăm của người sử dụng Mac vào người sử dụng Web trên máy PC,, 182 00:10:56,860 --> 00:11:00,820 IE người sử dụng, người sử dụng Chrome và như thế, đó là bởi vì tất cả các trình duyệt của chúng tôi 183 00:11:00,820 --> 00:11:04,300 đang nói với tất cả các trang web duy nhất ra có những gì chúng ta đang có. 184 00:11:04,300 --> 00:11:07,410 Nó không nhất thiết chứa thông tin nhận dạng cá nhân, 185 00:11:07,410 --> 00:11:13,060 nhưng nó bảo với máy chủ địa chỉ IP của bạn và những gì trình duyệt và hệ điều hành bạn đang sử dụng. 186 00:11:13,060 --> 00:11:14,720 Vì vậy, đó là nơi thông tin này. 187 00:11:14,720 --> 00:11:19,960 Nhưng những gì thú vị hơn khi nói đến các phiên họp này được đáp ứng tiêu đề. 188 00:11:19,960 --> 00:11:22,530 Hãy để tôi nhấp vào xem mã nguồn để đáp ứng. 189 00:11:22,530 --> 00:11:24,590 Điều thú vị ở đây là một vài điều. 190 00:11:24,590 --> 00:11:27,580 1, chúng tôi đã trở lại một mã trạng thái 200. 191 00:11:27,580 --> 00:11:29,840 Chúng tôi không bao giờ nhìn thấy mã trạng thái này bởi vì điều đó có nghĩa là tất cả là tốt. 192 00:11:29,840 --> 00:11:32,920 Nó có nghĩa là ổn trong tương phản với cái gì khác. 193 00:11:32,920 --> 00:11:36,380 Một số đôi khi chúng ta thấy đó là xấu là gì? [Sinh viên] 404. 194 00:11:36,380 --> 00:11:39,860 404, không tìm thấy file, 403 bạn có thể vấp ngã khi đã có, 195 00:11:39,860 --> 00:11:43,660 bị cấm, có nghĩa là bạn quên chmod một cái gì đó, nhiều khả năng. 196 00:11:43,660 --> 00:11:45,190 Và có một bó của những người khác. 197 00:11:45,190 --> 00:11:47,760 >> Xuống đây, đây là một chút điên. 198 00:11:47,760 --> 00:11:52,340 Tôi thực sự chỉ viết tập tin này một vài phút trước đây bằng cách dán nó vào gedit. 199 00:11:52,340 --> 00:11:57,100 Tại sao trang này hết hạn vào năm 1981 trước khi có thực sự là một Web? 200 00:11:58,010 --> 00:12:00,730 Điều gì đang xảy ra ở đó? 201 00:12:00,730 --> 00:12:04,390 >> [Không nghe được sinh viên phản ứng] tem thời gian. Nhưng tại sao? 202 00:12:06,110 --> 00:12:09,120 Đó là hơi độc đoán, nhưng nó thực sự hữu ích. 203 00:12:09,120 --> 00:12:15,500 Điều này nói cho trình duyệt của tôi là file PHP này bạn vừa yêu cầu đã hết hạn. 204 00:12:15,500 --> 00:12:18,580 Trong thực tế, nó hết hạn 30 năm trước. 205 00:12:18,580 --> 00:12:20,260 Nhưng điều đó không những gì thực sự có nghĩa là gì? 206 00:12:20,260 --> 00:12:22,500 Nó chỉ có nghĩa là trong thời gian tới người dùng truy cập trang này, 207 00:12:22,500 --> 00:12:25,540 cho dù bằng cách tải lại hoặc gõ URL vào thanh địa chỉ, 208 00:12:25,540 --> 00:12:28,010 chắc chắn rằng bạn đi và lấy một bản sao mới của nó. 209 00:12:28,010 --> 00:12:30,840 Đây là loại một ví dụ về bộ nhớ cache busting, 210 00:12:30,840 --> 00:12:33,790 một từ ngu ngốc mà chỉ có nghĩa là cố gắng để ngăn cản các trình duyệt 211 00:12:33,790 --> 00:12:37,260 từ HTML bộ nhớ đệm thực sự đó là được gửi từ một máy chủ 212 00:12:37,260 --> 00:12:41,490 để bạn không vô tình nhấn tải lại và sau đó xem cùng một phiên bản của tập tin. 213 00:12:41,490 --> 00:12:43,730 Bạn thực sự muốn máy chủ để gửi một bản sao mới. 214 00:12:43,730 --> 00:12:47,440 Vì vậy, thực tế là nó là 1981 chỉ có nghĩa là đó là những gì thiết bị là lựa chọn 215 00:12:47,440 --> 00:12:50,280 như là một ngày tùy ý trong quá khứ. 216 00:12:50,280 --> 00:12:53,380 Nhưng dòng ngon ngọt thực sự bây giờ là một trong những điều này. 217 00:12:53,380 --> 00:12:57,550 Ngay cả trước khi 50 có lẽ bạn đang mơ hồ quen thuộc với cookie. 218 00:12:57,550 --> 00:13:01,820 Đến ngay bây giờ, đặc biệt là trong số những người ít thoải mái hoặc ở giữa, 219 00:13:01,820 --> 00:13:04,120 cookie trong sự hiểu biết của bạn là những gì ngay bây giờ 220 00:13:04,120 --> 00:13:06,980 thậm chí dù chúng tôi về để làm cho sự hiểu biết của bạn kỹ thuật? 221 00:13:08,150 --> 00:13:10,070 Một cookie là gì? Yeah. 222 00:13:10,070 --> 00:13:13,890 [Sinh viên] Thông tin về người dùng, nếu như họ đã viết tên người dùng hoặc một cái gì đó của họ. 223 00:13:13,890 --> 00:13:17,370 >> Tốt. Đó là thông tin về người sử dụng, cho dù họ đã nhập vào tên người dùng của họ đã. 224 00:13:17,370 --> 00:13:21,190 Cookie là một cách theo đó các máy chủ có thể nhớ một cái gì đó về người sử dụng. 225 00:13:21,190 --> 00:13:25,810 Và những gì một cookie sẽ thực sự là một tập tin văn bản hoặc một số trình tự của byte 226 00:13:25,810 --> 00:13:28,340 trồng bởi các máy chủ bên trong trình duyệt của bạn, 227 00:13:28,340 --> 00:13:31,960 và bên trong tập tin đó hoặc trong số những byte là một số loại định danh. 228 00:13:31,960 --> 00:13:35,640 Có lẽ đó là nghĩa đen tên người dùng của bạn, nhưng thường xuyên hơn nó là một cái gì đó khó hiểu nhìn 229 00:13:35,640 --> 00:13:43,700 như thế này điều ở đây - bo8dal3ct và vv - chuỗi chữ số này thực sự lớn 230 00:13:43,700 --> 00:13:47,050 đó là thực sự chỉ có nghĩa là một định danh duy nhất cho bạn. 231 00:13:47,050 --> 00:13:49,790 Hoặc bạn có thể nghĩ về nó như sắp xếp của một con tem tay ảo. 232 00:13:49,790 --> 00:13:53,020 Nếu bạn đi đến một số câu lạc bộ hay một khu vui chơi giải trí, hãy nhớ rằng bạn đã thực sự trả tiền 233 00:13:53,020 --> 00:13:55,850 và đi vào, họ đặt một sticker nhỏ màu đỏ trên bàn tay của bạn của một số loại, 234 00:13:55,850 --> 00:13:59,270 và nhắc nhở người dân tại quầy mà bạn đã trả tiền 235 00:13:59,270 --> 00:14:01,340 và bạn có thể đến và đi tùy ý. 236 00:14:01,340 --> 00:14:04,250 Cookies là một chút tương tự như trong tinh thần đó. 237 00:14:04,250 --> 00:14:08,070 Lần đầu tiên tôi đến thăm trang web này, tôi chỉ cần làm sau khi xoá bộ nhớ cache của tôi, 238 00:14:08,070 --> 00:14:11,620 các máy chủ web, các thiết bị trong trường hợp này, hãy đặt một dấu trên tay tôi 239 00:14:11,620 --> 00:14:15,030 có tên là PHPSESSID, ID phiên, 240 00:14:15,030 --> 00:14:18,260 có giá trị là chuỗi chữ số này thực sự lâu dài. 241 00:14:18,260 --> 00:14:22,470 >> Vì vậy, đó là bây giờ loại trang trí phù hiệu trên tay tôi để trong thời gian tới tôi nhấn tải lại 242 00:14:22,470 --> 00:14:25,230 hoặc tự truy cập URL này trong trình duyệt, 243 00:14:25,230 --> 00:14:29,230 trình duyệt của tôi bằng cách định nghĩa của HTTP là sẽ trình bày các dấu tay 244 00:14:29,230 --> 00:14:31,940 một lần nữa và một lần nữa và một lần nữa. 245 00:14:31,940 --> 00:14:34,550 Vì vậy, mặc dù các máy chủ không nhất thiết phải biết tôi là ai, 246 00:14:34,550 --> 00:14:39,610 họ ít nhất biết rằng tôi cùng một người dùng hoặc ít nhất, cụ thể hơn, cùng một trình duyệt. 247 00:14:39,610 --> 00:14:45,660 Và do đó, điều này là cuối cùng superglobal PHIÊN được thực hiện như thế nào. 248 00:14:45,660 --> 00:14:51,200 Các máy chủ không có ý tưởng bạn là ai khi bạn vào lại một trang web cho thứ hai hoặc lần thứ ba 249 00:14:51,200 --> 00:14:53,410 trừ khi bạn giới thiệu con tem này tay. 250 00:14:53,410 --> 00:14:55,530 Và ngay sau khi bạn trình bày rằng dấu tay, 251 00:14:55,530 --> 00:14:59,370 các máy chủ web cơ bản đi vào một cơ sở dữ liệu nhỏ của riêng của mình 252 00:14:59,370 --> 00:15:06,040 và kiểm tra, okay, tôi vừa nhìn thấy dấu tay của người sử dụng bo8dal3ct và vv. 253 00:15:06,040 --> 00:15:09,850 Hãy cho tôi thấy các lập trình viên những thông tin đã được lưu trữ 254 00:15:09,850 --> 00:15:12,380 bên trong superglobal về người sử dụng này, 255 00:15:12,380 --> 00:15:17,000 và sau đó cho phép tôi đảm bảo rằng dữ liệu đó là một lần nữa bên trong của phiên superglobal 256 00:15:17,000 --> 00:15:19,830 để các lập trình có thể truy cập lại dữ liệu đó 257 00:15:19,830 --> 00:15:23,360 ngay cả khi nó đã được thiết lập một vài phút hoặc vài giờ trước đây. 258 00:15:23,360 --> 00:15:26,150 Vì vậy, trong Nói cách khác, cookies, trong đó có một rap xấu trong một thời gian 259 00:15:26,150 --> 00:15:29,990 vì thiếu tự tin trong các trình duyệt và họ thực sự có thể vi phạm sự riêng tư của chúng tôi và tất cả những điều này, 260 00:15:29,990 --> 00:15:31,900 họ thực sự có tiện ích tuyệt vời bởi vì nếu không có họ 261 00:15:31,900 --> 00:15:36,110 bạn liên tục sẽ được đăng nhập vào mỗi trang Facebook bạn truy cập 262 00:15:36,110 --> 00:15:40,680 hoặc tất cả các email Gmail bạn đọc nếu trình duyệt không có một số cách ghi nhớ 263 00:15:40,680 --> 00:15:43,320 mà bạn đã đã được xác thực. 264 00:15:43,320 --> 00:15:46,640 >> Vì vậy, theo cách này các cookie được gửi trở lại và ra trên dây. 265 00:15:46,640 --> 00:15:52,470 Một sự tò mò về tập tin cookie, đặc biệt là ở đây, là điều này là hoàn toàn trong cleartext. 266 00:15:52,470 --> 00:15:54,930 Không có mã hóa xảy ra ở đây nào, 267 00:15:54,930 --> 00:15:57,240 và thực sự tôi đang sử dụng HTTP tại thời điểm này. 268 00:15:57,240 --> 00:16:00,890 Một trong những mục yêu thích những khoảnh khắc của chúng tôi trong CS50, mà bây giờ là 2 năm trước, 269 00:16:00,890 --> 00:16:04,750 được khoảng thời gian một công cụ được gọi là Firesheep ra. 270 00:16:04,750 --> 00:16:08,320 Đây là một mảnh miễn phí của phần mềm đã được thực hiện bởi một nhà nghiên cứu bảo mật 271 00:16:08,320 --> 00:16:13,250 như một cuộc gọi đánh thức cho cộng đồng để nói như thế nào atrociously thực hiện 272 00:16:13,250 --> 00:16:17,900 một số cơ chế xác thực trên Web. 273 00:16:17,900 --> 00:16:22,880 Vì vậy, một thời gian, Facebook gần như hoàn toàn qua HTTP, không HTTPS. 274 00:16:22,880 --> 00:16:25,640 Và thậm chí nếu bạn không có ý tưởng làm thế nào mật hoạt động, S là an toàn 275 00:16:25,640 --> 00:16:27,950 do đó, nó có nghĩa là có ít nhất một số mật mã. 276 00:16:27,950 --> 00:16:30,610 Facebook đã được sử dụng để mã hóa tên người dùng và mật khẩu, 277 00:16:30,610 --> 00:16:33,560 nhưng ngay sau khi bạn nhìn của bạn chọc hoặc tin nhắn của bạn hoặc nguồn cấp dữ liệu tin tức của bạn, 278 00:16:33,560 --> 00:16:35,360 tất cả điều đó đã được mã hóa. 279 00:16:35,360 --> 00:16:37,870 Vì vậy, Gmail cho đến khi chỉ một năm hoặc 2 trước đây. 280 00:16:37,870 --> 00:16:41,100 Bất cứ lúc nào bạn đăng nhập vào, có, họ sử dụng mã hóa an toàn, 281 00:16:41,100 --> 00:16:44,300 nhưng sau đó họ không. Và tại sao có thể được? 282 00:16:44,300 --> 00:16:49,210 Tại sao không chỉ sử dụng mật mã tất cả thời gian trong trường hợp sử dụng như thế này? 283 00:16:49,210 --> 00:16:53,700 Đó là những gì? Tôi nghĩ rằng tôi nghe thấy một cái gì đó. [Sinh viên] Speed. 284 00:16:53,700 --> 00:16:56,250 Tốc độ, phải không? Có khoảng cách này. 285 00:16:56,250 --> 00:16:59,610 Nhưng nếu bạn chỉ cần loại suy nghĩ về nó một cách hợp lý, nếu bạn mã hóa một cái gì đó, 286 00:16:59,610 --> 00:17:01,820 bạn phải làm ít nhất một công việc ít hơn. 287 00:17:01,820 --> 00:17:05,460 Trong pset 2 khi bạn thực hiện Caesar hoặc Vigenere hoặc thậm chí Crack, 288 00:17:05,460 --> 00:17:07,760 chỉ cần in một chuỗi là tương đối dễ dàng. 289 00:17:07,760 --> 00:17:12,040 Mã hoá và sau đó in một chuỗi tối thiểu đòi hỏi phải làm việc nhiều hơn một chút. 290 00:17:12,040 --> 00:17:14,520 >>  Đối với các trang web siêu phổ biến như Google và Facebook, 291 00:17:14,520 --> 00:17:18,839 nếu bạn có làm thêm công việc cho mỗi người dùng cho mỗi trang web duy nhất họ truy cập, 292 00:17:18,839 --> 00:17:20,520 mà chỉ cần mất nhiều thời gian của CPU. 293 00:17:20,520 --> 00:17:22,920 Và nếu bạn cần thêm thời gian CPU, bạn có thể cần nhiều máy chủ, 294 00:17:22,920 --> 00:17:24,270 có nghĩa là bạn có thể cần nhiều tiền hơn. 295 00:17:24,270 --> 00:17:27,579 Và như vậy trong nhiều năm chỉ thực sự là không phải thực hành tốt nhất. 296 00:17:27,579 --> 00:17:31,440 Mọi người sẽ sử dụng mã hóa SSL chỉ khi họ cần. 297 00:17:31,440 --> 00:17:34,960 Nhưng hóa ra, và vì điều này đồng hương với Firesheep siêu rõ ràng, 298 00:17:34,960 --> 00:17:37,920 khi bạn đang trên Facebook ngay bây giờ - 299 00:17:37,920 --> 00:17:39,880 Ra khỏi tò mò, chúng ta hãy xem nếu bạn sẽ fess lên. 300 00:17:39,880 --> 00:17:42,620 Nếu bạn đang ở trên Facebook ngay bây giờ ở một số tab, thậm chí nếu nó không nổi bật, 301 00:17:42,620 --> 00:17:46,610 URL của bạn HTTP hoặc HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Nhiều học sinh] S. S? [Cười] 303 00:17:50,560 --> 00:17:55,510 Okay. Bất kỳ HTTP? Chỉ cần 1? Okay. 304 00:17:55,510 --> 00:17:58,940 Vì vậy, tất cả chúng ta có thể hack tài khoản Facebook của anh chàng đó ngay bây giờ. 305 00:17:58,940 --> 00:18:04,100 Đối với hầu hết các phần này đã trở thành bật theo mặc định, ít nhất là trong một số trang web. 306 00:18:04,100 --> 00:18:08,120 Và câu chuyện dài ngắn, nếu lưu lượng truy cập web của bạn không được mã hóa, 307 00:18:08,120 --> 00:18:12,960 không chỉ làm cho HTML trở lại và ra trên các WiFis không được mã hóa, 308 00:18:12,960 --> 00:18:16,760 do đó, những thứ như cookie đi lại trong suốt không khí 309 00:18:16,760 --> 00:18:18,940 mà không có bất kỳ hình thức mã hóa. 310 00:18:18,940 --> 00:18:23,540 Vì vậy, nếu bạn có chỉ là một chút hiểu biết về lập trình hoặc một chút kỹ năng Googling 311 00:18:23,540 --> 00:18:27,410 để tìm phần mềm miễn phí mà thực hiện điều này, tất cả những gì bạn phải làm là ngồi trong Starbucks 312 00:18:27,410 --> 00:18:30,680 hay ngồi trong một sân bay, nơi có thường không được mã hóa WiFi 313 00:18:30,680 --> 00:18:36,070 và chỉ xem cho các từ khóa như Set-Cookie: PHPSESSID 314 00:18:36,070 --> 00:18:39,300 bởi vì nếu bạn có hiểu biết kỹ thuật chỉ cần xem WiFi 315 00:18:39,300 --> 00:18:43,010 cho tất cả các bit mà dòng chảy trong suốt không khí cho mô hình này, 316 00:18:43,010 --> 00:18:50,840 sau đó bạn có thể nói rằng anh chàng PHPSESSID sẽ xảy ra là bo8dal và vv. 317 00:18:50,840 --> 00:18:53,890 Và sau đó một lần nữa nếu bạn đủ hiểu biết về kỹ thuật hoặc có công cụ bên phải, 318 00:18:53,890 --> 00:18:58,890 Sau đó bạn có thể chỉ cần cấu hình lại trình duyệt của bạn để bắt đầu trình bày rằng dấu tay 319 00:18:58,890 --> 00:19:05,030 Facebook.com, và Facebook sẽ cho rằng bạn là anh chàng 320 00:19:05,030 --> 00:19:09,880 bởi vì tất cả những gì họ biết là không phải bạn là ai nhưng mà bạn có định danh duy nhất. 321 00:19:09,880 --> 00:19:14,650 Vì vậy, nếu bạn ăn cắp định danh duy nhất và hiện tại nó đến máy chủ web như là của riêng của bạn, 322 00:19:14,650 --> 00:19:16,860 họ chỉ là sẽ cho bạn thấy nguồn tin của người đó 323 00:19:16,860 --> 00:19:18,980 hoặc tin nhắn của người đó hoặc chọc. 324 00:19:18,980 --> 00:19:23,190 >> Và tôi sẽ Google bây giờ làm thế nào để kích hoạt HTTPS cho Facebook có lẽ. 325 00:19:23,190 --> 00:19:25,150 Nhưng nó thực sự là đơn giản như vậy. 326 00:19:25,150 --> 00:19:27,660 Và do đó, Facebook và Google và như thế đã nhận được thực sự tốt lúc này, 327 00:19:27,660 --> 00:19:31,870 nhưng giữ một mắt ra hơn đối với bất kỳ trang web mà bạn truy cập không sử dụng HTTP 328 00:19:31,870 --> 00:19:35,020 và có một số loại thông tin nhạy cảm trên chúng, 329 00:19:35,020 --> 00:19:37,490 cho dù đó là tài chính hoặc cá nhân hoặc tương tự. 330 00:19:37,490 --> 00:19:43,180 Nếu chúng không sử dụng này, rất có thể cookie như thế này có thể rất dễ dàng bị đánh cắp 331 00:19:43,180 --> 00:19:46,270 và sau đó giả mạo, và đó chính xác là những gì Firesheep đã làm. 332 00:19:46,270 --> 00:19:48,250 Bạn không cần phải là một lập trình viên. 333 00:19:48,250 --> 00:19:51,680 Tất cả những gì bạn phải làm là có kết nối Internet, tải về công cụ miễn phí này, 334 00:19:51,680 --> 00:19:56,490 và những gì nó sẽ làm là bạn đăng nhập và sau đó nó sẽ hiển thị cho bạn tên Facebook 335 00:19:56,490 --> 00:20:00,170 của tất cả mọi người trong Sanders, trong cuộc biểu tình này cụ thể, xung quanh bạn 336 00:20:00,170 --> 00:20:03,260 và tất cả các bạn phải làm là click vào tên của họ và các phần mềm tự động hóa quá trình 337 00:20:03,260 --> 00:20:05,970 sniffing rằng cookie, trình bày nó để Facebook là của riêng bạn, 338 00:20:05,970 --> 00:20:07,990 và, thì đấy, bạn đang đăng nhập. 339 00:20:07,990 --> 00:20:11,190 Vì vậy, đây là một trong những người "không làm điều này" chính thức. 340 00:20:11,190 --> 00:20:14,660 Nếu bạn có mạng lưới nhà riêng của bạn và bạn muốn "chọc ngoáy", bằng mọi cách, 341 00:20:14,660 --> 00:20:17,530 nhưng nhận ra điều này không băng qua đường dây trên một môi trường đại học. 342 00:20:17,530 --> 00:20:20,030 >> Tuy nhiên mục tiêu ở đây thực sự là để nhấn mạnh không phải làm thế nào để làm điều này 343 00:20:20,030 --> 00:20:22,320 nhưng làm thế nào để bảo vệ chống lại các loại của sự vật. 344 00:20:22,320 --> 00:20:26,180 Và các giải pháp tầm thường ở đây, mặc dù bản thân nó là thiếu sót, 345 00:20:26,180 --> 00:20:31,360 là để thực sự làm giảm sử dụng bất kỳ trang web mà không phải sử dụng HTTPS liên tục. 346 00:20:31,360 --> 00:20:34,520 Vì vậy, các trang web như Facebook và Google ngày càng có hộp kiểm tra 347 00:20:34,520 --> 00:20:36,200 nơi bạn có thể chọn tham gia vào các loại điều này, 348 00:20:36,200 --> 00:20:40,000 và các ngân hàng đã có này trong nhiều năm vì lý do tương tự. 349 00:20:40,000 --> 00:20:43,580 Vì vậy, chỉ là một chút của một yếu tố sợ hãi nếu chúng ta có thể. Nhưng đó là nó trong một nutshell. 350 00:20:43,580 --> 00:20:46,420 Đó là làm thế nào một máy chủ nhớ bạn là ai. 351 00:20:46,420 --> 00:20:50,760 Và ngay khi họ có thể nhớ bạn là ai, họ có thể nhớ bất cứ điều gì về bạn 352 00:20:50,760 --> 00:20:56,140 các lập trình viên đã được lưu trữ bên trong này superglobal đặc biệt gọi là $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 Và cho pset 7, chúng tôi đang sử dụng nó trivially chỉ nhớ một int, 354 00:20:59,750 --> 00:21:02,260 cụ thể là ID duy nhất của người dùng đã đăng nhập, 355 00:21:02,260 --> 00:21:05,880 vì vậy mà chúng ta biết họ đã từng có trước đây. 356 00:21:05,880 --> 00:21:12,450 Bất kỳ câu hỏi sau đó phiên hoặc cookie hoặc các loại tương tự? 357 00:21:12,450 --> 00:21:15,130 Firesheep không làm việc như tốt nữa, 358 00:21:15,130 --> 00:21:18,310 và bạn cần phải đặt máy tính của bạn vào một chế độ promiscuous đặc biệt 359 00:21:18,310 --> 00:21:20,700 do đó, bạn đang thực sự lắng nghe cho giao thông bên cạnh mình. 360 00:21:20,700 --> 00:21:23,940 Vì vậy, nếu bạn đang tải Firesheep, nhận ra nó không phải là khá dễ dàng 361 00:21:23,940 --> 00:21:26,850 như trước đây để chứng minh. 362 00:21:26,850 --> 00:21:29,070 Được rồi. Và đừng làm nó trong Sanders. Làm điều đó ở nhà. 363 00:21:29,070 --> 00:21:30,890 Cơ sở dữ liệu. 364 00:21:30,890 --> 00:21:33,580 Một trong những điều chúng tôi đã làm trong pset 7 rất cố tình 365 00:21:33,580 --> 00:21:37,780 đã được chúng tôi cung cấp cho bạn một bảng cơ sở dữ liệu mẫu cho người sử dụng có một số ID của người dùng, 366 00:21:37,780 --> 00:21:41,020 một số tên người dùng, và một số mật khẩu được mã hóa trong đó. 367 00:21:41,020 --> 00:21:44,520 Và như bạn sẽ thấy, nếu bạn chưa có, bạn sẽ phải thay đổi bảng một chút. 368 00:21:44,520 --> 00:21:47,710 Bạn sẽ có thêm một số bộ nhớ cache để mỗi người sử dụng trong bảng đó, 369 00:21:47,710 --> 00:21:51,130 và bạn sẽ có thêm một bảng lịch sử, một bảng danh mục đầu tư, 370 00:21:51,130 --> 00:21:53,310 hoặc có thể gọi nó là cái gì khác. 371 00:21:53,310 --> 00:21:56,740 Tuy nhiên, trong điều kiện suy nghĩ về việc làm thế nào để làm điều này, chúng ta hãy mở công cụ này 372 00:21:56,740 --> 00:22:00,570 mà chúng tôi sử dụng trên Thứ Sáu, nhưng nếu không quen thuộc, thiết bị đi kèm với một công cụ 373 00:22:00,570 --> 00:22:04,680 gọi là phpMyAdmin được tình cờ viết bằng PHP, 374 00:22:04,680 --> 00:22:07,950 nhưng mục đích của nó trong cuộc sống, sau khi tôi đăng nhập vào đây như jharvard với màu đỏ thẫm, 375 00:22:07,950 --> 00:22:15,160 là để cung cấp cho tôi một cách thân thiện với người sử dụng xem và thay đổi cơ sở dữ liệu của tôi. 376 00:22:15,160 --> 00:22:18,040 >> Các cơ sở dữ liệu mà tôi đang chạy trên thiết bị được gọi là MySQL. 377 00:22:18,040 --> 00:22:23,420 Điều này là rất phổ biến, và đó là một cơ sở dữ liệu mã nguồn mở tuyệt vời dễ dàng sử dụng, 378 00:22:23,420 --> 00:22:25,620 đặc biệt là với trước kết thúc như thế này. 379 00:22:25,620 --> 00:22:29,350 Công cụ này cho phép tôi làm, ví dụ, là poke xung quanh bảng. 380 00:22:29,350 --> 00:22:30,890 Hãy để tôi đi trước và làm điều này. 381 00:22:30,890 --> 00:22:36,580 Ngày thứ sáu, chúng tôi tạo ra một bảng gọi là học sinh đó là siêu đơn giản. 382 00:22:36,580 --> 00:22:41,680 Nó có 3 cột id, tên, và email - và tôi tự chèn một vài dòng 383 00:22:41,680 --> 00:22:44,420 như David và Mike trong ví dụ cụ thể. 384 00:22:44,420 --> 00:22:47,290 Chúng ta hãy thêm một chút nữa, và chúng ta hãy giả sử rằng chúng ta muốn nhớ nhiều hơn 385 00:22:47,290 --> 00:22:49,660 hơn là chỉ tên và email về người sử dụng. 386 00:22:49,660 --> 00:22:53,090 Hãy để tôi nhấp vào cấu trúc ở đầu trang. 387 00:22:53,090 --> 00:22:55,440 Và một lần nữa, pset sẽ hướng dẫn bạn qua các bước cần thiết ở đây, 388 00:22:55,440 --> 00:22:58,150 do đó, không lo lắng nếu một số trong số này là một chút nhanh chóng. 389 00:22:58,150 --> 00:22:59,690 Sau đó, tôi sẽ nhấp chuột vào đây. 390 00:22:59,690 --> 00:23:02,270 Tôi sẽ thêm một số số cột sau khi email 391 00:23:02,270 --> 00:23:04,130 bởi vì tôi muốn thêm một cái gì đó giống như nhà. 392 00:23:04,130 --> 00:23:06,640 Tôi quên ghi lại một ngôi nhà của học sinh. 393 00:23:06,640 --> 00:23:11,400 Hãy để tôi nhấn Go, và bây giờ chúng ta đã có hình thức mà không may là một chút rộng từ trái sang phải, 394 00:23:11,400 --> 00:23:13,710 nhưng tôi sẽ gọi tên của nhà trường, 395 00:23:13,710 --> 00:23:16,050 và sau đó loại tôi bây giờ có để lựa chọn. 396 00:23:16,050 --> 00:23:18,870 Vì vậy, hãy có một cuộc trò chuyện ngắn gọn về các loại khác nhau trong MySQL 397 00:23:18,870 --> 00:23:24,590 bởi vì trong khi PHP là yếu gõ và loại đóng nhanh chóng và lỏng lẻo với các loại, 398 00:23:24,590 --> 00:23:29,430 trong một cơ sở dữ liệu, đặc biệt là siêu quan trọng thực sự sử dụng đánh máy để lợi thế của bạn 399 00:23:29,430 --> 00:23:33,260 bởi vì một điều MySQL và các công cụ cơ sở dữ liệu khác có thể làm cho bạn 400 00:23:33,260 --> 00:23:37,910 là đảm bảo rằng bạn không đưa dữ liệu không có thật vào cơ sở dữ liệu của bạn. 401 00:23:37,910 --> 00:23:41,850 Đây là loại lỗi miễn phí kiểm tra có sẵn cho bạn. 402 00:23:41,850 --> 00:23:46,250 >> Cho ngôi nhà của chúng tôi rõ ràng là không muốn nó phải là một int, mà là một giá trị 32-bit trong MySQL. 403 00:23:46,250 --> 00:23:49,810 Chúng tôi đã nói chuyện một thời gian ngắn vào thứ sáu về varchar, viết tắt cho chiều dài biến char. 404 00:23:49,810 --> 00:23:54,720 Này là gì? Điều này cho phép bạn chỉ định rằng bạn muốn điều này là một chuỗi của một số loại. 405 00:23:54,720 --> 00:23:56,840 Bạn không thực sự biết trước độ dài của nó, 406 00:23:56,840 --> 00:24:00,100 vì vậy chúng tôi tự ý sẽ nói một tên nhà có thể được 255 ký tự, 407 00:24:00,100 --> 00:24:04,190 nhưng bạn có thể đi với 32, 64 - bất kỳ số lượng thực sự. 408 00:24:04,190 --> 00:24:10,700 Nhưng lợi thế của việc sử dụng một varchar trong một lĩnh vực được gọi char là gì? 409 00:24:10,700 --> 00:24:15,110 Chỉ cần trực giác nếu tôi di chuyển xuống ở đây, nhận thấy có char và varchar. 410 00:24:15,110 --> 00:24:19,520 Varchar là chiều dài thay đổi char, char là một chiều dài cố định char. 411 00:24:19,520 --> 00:24:24,730 Vì vậy, chỉ dựa trên định nghĩa đó, lợi thế hay bất lợi của từng là những gì? 412 00:24:24,730 --> 00:24:30,490 Nói cách khác, những người quan tâm về sự phân biệt, hoặc lý do tại sao bạn nên chăm sóc? 413 00:24:31,660 --> 00:24:35,750 >> Yeah. [Sinh viên] Varchar có tính linh hoạt hơn, nhưng chiếm nhiều bộ nhớ hơn. 414 00:24:35,750 --> 00:24:40,730 Tốt. Varchar chiếm hơn - Hãy xem. Tôi không chắc chắn nếu tôi nghe rằng quyền. 415 00:24:40,730 --> 00:24:42,360 Bạn có thể nói rằng một lần nữa? 416 00:24:42,360 --> 00:24:45,850 [Sinh viên] tôi đã nói varchar có thể linh hoạt hơn, nhưng nó chiếm nhiều bộ nhớ hơn. 417 00:24:45,850 --> 00:24:51,170 Thú vị. Okay. Varchar có thể cung cấp cho bạn linh hoạt hơn nhưng chiếm nhiều bộ nhớ hơn. 418 00:24:51,170 --> 00:24:53,220 Sau đó là không nhất thiết phải đúng. 419 00:24:53,220 --> 00:24:56,290 Nó phụ thuộc vào ngữ cảnh, nhưng chúng ta hãy trở lại đó. 420 00:24:56,290 --> 00:25:03,230 >> [Sinh viên không nghe được đáp ứng] Chính xác. 421 00:25:03,230 --> 00:25:06,900 Nó thực sự là trường hợp đó char thường sẽ sử dụng nhiều bộ nhớ hơn 422 00:25:06,900 --> 00:25:10,950 vì char a, giống như trong C, cũng giống như một chuỗi, nó là một mảng các ký tự. 423 00:25:10,950 --> 00:25:13,690 Vì vậy, nếu bạn nói một lĩnh vực char chiều dài 255, 424 00:25:13,690 --> 00:25:16,910 cơ sở dữ liệu là nghĩa đen sẽ cung cấp cho bạn 255 ký tự. 425 00:25:16,910 --> 00:25:22,290 Và nếu nhà kết thúc lên được tổng cộng Mather và 6 ký tự, 426 00:25:22,290 --> 00:25:25,090 bạn đang lãng phí hơn 200 ký tự. 427 00:25:25,090 --> 00:25:29,640 >> Vì vậy, một varchar hiệu quả chỉ sử dụng nhiều ký tự như là cần thiết 428 00:25:29,640 --> 00:25:31,590 đến một số lượng tối đa. 429 00:25:31,590 --> 00:25:35,470 Tuy nhiên, giá bạn phải trả thực sự là hiệu suất, khả năng. 430 00:25:35,470 --> 00:25:39,740 Nếu bạn biết trước rằng tất cả các chuỗi của bạn sẽ là 8 ký tự - 431 00:25:39,740 --> 00:25:43,090 Ví dụ, giả sử rằng bạn yêu cầu mật khẩu có độ dài 8 - 432 00:25:43,090 --> 00:25:47,350 xu hướng tăng giá bằng cách sử dụng một lĩnh vực char nhân dịp, dù không thường xuyên, 433 00:25:47,350 --> 00:25:51,100 là để xác định một chiều dài cố định cho một cái gì đó giống như một mật khẩu 434 00:25:51,100 --> 00:25:53,300 vì hiện nay các cơ sở dữ liệu có thể được thông minh hơn. 435 00:25:53,300 --> 00:25:58,160 Nếu nó biết rằng tất cả các lĩnh vực char, tất cả các chuỗi trong một cột là chiều dài tương tự, 436 00:25:58,160 --> 00:26:00,780 bạn sẽ có được các tính năng của truy cập ngẫu nhiên. 437 00:26:00,780 --> 00:26:05,110 Bạn có thể nhảy xung quanh trong số các lĩnh vực char khác nhau trong bảng cơ sở dữ liệu của bạn 438 00:26:05,110 --> 00:26:07,940 bởi vì suy nghĩ của một cơ sở dữ liệu như là các hàng và cột. 439 00:26:07,940 --> 00:26:11,670 Vì vậy, nếu mỗi một trong các chuỗi là chiều dài tương tự, 440 00:26:11,670 --> 00:26:17,820 Bạn có biết rằng một trong những đầu tiên là byte 0, tiếp theo là byte 8 441 00:26:17,820 --> 00:26:20,240 và sau đó 16 và sau đó 24 và vv. 442 00:26:20,240 --> 00:26:24,500 Vì vậy, nếu tất cả các chuỗi có chiều dài tương tự, bạn có thể nhảy xung quanh hiệu quả hơn. 443 00:26:24,500 --> 00:26:26,710 Vì vậy, đó có thể là một lợi ích về hiệu suất, 444 00:26:26,710 --> 00:26:29,420 nhưng thông thường bạn không có sự sang trọng của biết trước, 445 00:26:29,420 --> 00:26:32,170 để varchar là con đường để đi. 446 00:26:32,170 --> 00:26:36,030 Đây là một chi tiết mà thậm chí cả Facebook chạy vào cuối cùng. 447 00:26:36,030 --> 00:26:39,670 Ints là rất lớn, và chúng tôi sử dụng loại họ theo mặc định bất cứ lúc nào chúng tôi muốn có một số, 448 00:26:39,670 --> 00:26:41,750 nhưng nó chỉ có 32 bit. 449 00:26:41,750 --> 00:26:46,210 >> Và mặc dù Facebook không khá có 4 tỷ người sử dụng hiện nay, 450 00:26:46,210 --> 00:26:48,680 chắc chắn có một số người ra khỏi đó với nhiều tài khoản 451 00:26:48,680 --> 00:26:50,960 hoặc tài khoản đã được mở ra và sau đó đóng cửa, 452 00:26:50,960 --> 00:26:55,130 và do đó, chính Facebook Tôi tin rằng một vài năm trước đây phải chuyển từ int 453 00:26:55,130 --> 00:27:00,010 , như được mang tên, bigint, đó là chỉ 64 bit thay vì. 454 00:27:00,010 --> 00:27:02,230 Vì vậy, đây cũng là một quyết định thiết kế. 455 00:27:02,230 --> 00:27:06,570 Bạn sẽ ngạc nhiên may mắn nếu dự án cuối cùng của bạn quay khởi động, 456 00:27:06,570 --> 00:27:10,010 đã 4 tỷ đồng và 1 người sử dụng, cho hay phải mất, 457 00:27:10,010 --> 00:27:13,200 ints sử dụng trong trường hợp có thể là một chút thiển cận. 458 00:27:13,200 --> 00:27:16,230 Nhưng trong thực tế, bảng người dùng của bạn có lẽ là tốt với ints. 459 00:27:16,230 --> 00:27:19,340 Nhưng đối với một cái gì đó như pset 7, giống như bảng lịch sử của bạn, 460 00:27:19,340 --> 00:27:23,700 bạn có thể có hàng ngàn, hàng triệu người sử dụng nếu bạn phát triển thành etrade.com. 461 00:27:23,700 --> 00:27:26,020 Vì vậy, trong khi bạn có thể không có hơn 4 tỷ người sử dụng, 462 00:27:26,020 --> 00:27:30,070 những người sử dụng bạn có thể có hơn 4 tỷ đồng giao dịch theo thời gian - 463 00:27:30,070 --> 00:27:33,200 mua và bán và những điều trong lịch sử của họ. 464 00:27:33,200 --> 00:27:38,090 Vì vậy, nếu bạn làm dự đoán - một lần nữa, đây là những vấn đề tốt để có nếu bạn có nhiều dữ liệu - 465 00:27:38,090 --> 00:27:40,920 nếu bạn làm dự đoán dữ liệu vượt quá kích thước của một int, 466 00:27:40,920 --> 00:27:47,740 đi với một cái gì đó như bigint là một định hướng không đủ thường xuyên thông qua bởi nhà thiết kế 467 00:27:47,740 --> 00:27:49,710 bởi vì những người con số đó sẽ không là một vấn đề, 468 00:27:49,710 --> 00:27:51,930 nhưng nó dễ dàng để chọn một cái gì đó lớn hơn thế này. 469 00:27:51,930 --> 00:27:55,380 Decimal chúng tôi đang sử dụng trong 7 pset, xác định chính xác cố định 470 00:27:55,380 --> 00:27:59,840 vì vậy bạn có thể tránh các vấn đề liên quan đến các phao nổi và tăng gấp đôi và số thực và như thế. 471 00:27:59,840 --> 00:28:02,440 >> Và sau đó có một số lĩnh vực khác ở đây. Chúng tôi sẽ vẫy tay của chúng tôi tại một số phạm vi. 472 00:28:02,440 --> 00:28:07,270 Tuy nhiên, ngày, giờ tất cả đều có một định dạng quy định trong MySQL, 473 00:28:07,270 --> 00:28:10,830 và những lợi thế của ngày tháng lưu trữ như ngày tháng và không varchars 474 00:28:10,830 --> 00:28:15,730 có nghĩa là các cơ sở dữ liệu thực sự có thể định dạng chúng sang các định dạng khác nhau, 475 00:28:15,730 --> 00:28:18,800 cho dù một định dạng hoặc định dạng châu Âu hoặc các loại tương tự - tuy nhiên bạn muốn nó - 476 00:28:18,800 --> 00:28:22,700 nhiều hơn nữa hiệu quả hơn nếu nó đã được chỉ là một số varchar chung chung. 477 00:28:22,700 --> 00:28:25,150 Và sau đó có một số nhị phân khác, varbinary, các đốm màu. 478 00:28:25,150 --> 00:28:28,580 Đây là những đối tượng nhị phân lớn, và bạn cũng có thể lưu trữ dữ liệu nhị phân 479 00:28:28,580 --> 00:28:30,750 cũng như các dữ liệu hình học trong một cơ sở dữ liệu. 480 00:28:30,750 --> 00:28:34,350 Nhưng với chúng tôi, chúng tôi thường quan tâm về ints và varchars và như thế. 481 00:28:34,350 --> 00:28:36,230 Hãy kết thúc ví dụ này với ngôi nhà. 482 00:28:36,230 --> 00:28:40,030 Nhà tôi sẽ tự ý nói sẽ là 255 ký tự. 483 00:28:40,030 --> 00:28:42,850 Sau đó, giá trị mặc định, chúng ta có thể làm điều này. 484 00:28:42,850 --> 00:28:47,440 Chúng ta có thể theo mặc định đưa tất cả mọi người trong Mather House, ví dụ. 485 00:28:47,440 --> 00:28:49,710 Đó là làm thế nào chúng ta có thể xác định rằng các cơ sở dữ liệu 486 00:28:49,710 --> 00:28:52,460 cần đảm bảo rằng ai đó luôn luôn có một giá trị. Nhưng tôi sẽ rời khỏi đó được. 487 00:28:52,460 --> 00:28:55,270 Trong thực tế, đối với những người sống ngoài trường học và không phải trong một ngôi nhà, 488 00:28:55,270 --> 00:28:59,590 có lẽ tôi thực sự muốn để xác định rằng giá trị mặc định cho ngôi nhà là NULL, 489 00:28:59,590 --> 00:29:04,890 và sau đó tôi cần phải kiểm tra hộp này và cho biết các cơ sở dữ liệu nó okay nếu nhà của người dùng là NULL. 490 00:29:04,890 --> 00:29:07,270 >> Một lần nữa, đây là một cơ chế bảo vệ, bạn có thể đưa ra 491 00:29:07,270 --> 00:29:10,590 do đó, bạn thậm chí không phải đặt nó trong mã PHP của bạn nhất thiết. 492 00:29:10,590 --> 00:29:14,630 Các cơ sở dữ liệu sẽ đảm bảo rằng mọi thứ không phải là NULL. 493 00:29:14,630 --> 00:29:17,310 Và rồi cuối cùng, Attributes. 494 00:29:17,310 --> 00:29:18,920 Không ai trong số này là thực sự có liên quan. 495 00:29:18,920 --> 00:29:22,880 Nhị phân, unsigned - không ai trong số những người có liên quan đến một varchar. 496 00:29:22,880 --> 00:29:24,220 Index. 497 00:29:24,220 --> 00:29:27,320 Có ai biết hoặc nhớ hoặc có một đoán là một chỉ số là gì 498 00:29:27,320 --> 00:29:29,510 cho một cái gì đó giống như nhà? 499 00:29:29,510 --> 00:29:35,240 Điều này cũng thực sự là một quyết định thiết kế quan trọng và tương đối dễ dàng. 500 00:29:35,240 --> 00:29:39,200 Đối với những người chưa nhìn thấy nó, vào thứ sáu, chúng tôi nói chuyện ngắn gọn về khóa chính. 501 00:29:39,200 --> 00:29:43,240 Trong một bảng cơ sở dữ liệu, một khóa chính là lĩnh vực hoặc cột 502 00:29:43,240 --> 00:29:46,270 xác định duy nhất các hàng trong bảng. 503 00:29:46,270 --> 00:29:49,150 Vì vậy, trong bảng hiện thời chúng tôi có ID, chúng ta có tên và email. 504 00:29:49,150 --> 00:29:52,050 Trong số đó là các ứng cử viên tốt nhất để có một khóa chính, 505 00:29:52,050 --> 00:29:55,810 có vai trò là để nhận diện hàng? 506 00:29:55,810 --> 00:29:57,530 Có lẽ ID. 507 00:29:57,530 --> 00:29:59,930 Người ta có thể cho rằng, chúng tôi cũng có thể sử dụng những gì mặc dù? 508 00:29:59,930 --> 00:30:02,860 Có lẽ bạn có thể sử dụng email vì trong lý thuyết nó là duy nhất 509 00:30:02,860 --> 00:30:05,380 trừ khi mọi người đang chia sẻ tài khoản email. 510 00:30:05,380 --> 00:30:09,980 Nhưng thực tế là nếu bạn đang sử dụng một ID số như 1234, 511 00:30:09,980 --> 00:30:14,170 đó là chỉ 32 bit, trong khi một địa chỉ email có thể là nhiều byte hoặc nhiều byte này. 512 00:30:14,170 --> 00:30:16,610 Vì vậy, về mặt hiệu quả để định danh duy nhất, 513 00:30:16,610 --> 00:30:19,270 nó có xu hướng được thực hành tốt chỉ để sử dụng một int 514 00:30:19,270 --> 00:30:23,090 ngay cả khi bạn có một số ứng cử viên chuỗi mà bạn cho là có thể sử dụng. 515 00:30:23,090 --> 00:30:26,760 >> Đối với một cái gì đó giống như ngôi nhà, điều này không phải là một khóa chính 516 00:30:26,760 --> 00:30:30,770 bởi vì sau đó chỉ có 1 người có thể sống ở Mather và 1 người trong Currier và các loại tương tự. 517 00:30:30,770 --> 00:30:32,790 Tương tự như vậy, điều này không phải là duy nhất. 518 00:30:32,790 --> 00:30:37,830 Sự khác biệt giữa tiểu học và độc đáo đó là trong trường hợp của bảng hiện tại của chúng tôi, 519 00:30:37,830 --> 00:30:42,620 ID sẽ là chính, nhưng email không phải là chính lý do chúng tôi chỉ đề cập đến - 520 00:30:42,620 --> 00:30:44,740 hiệu suất - nhưng nó vẫn nên là duy nhất. 521 00:30:44,740 --> 00:30:47,200 Vì vậy, bạn vẫn có thể thực thi độc đáo mà không yêu cầu bồi thường 522 00:30:47,200 --> 00:30:49,520 rằng đó là một siêu trường tiểu học quan trọng. 523 00:30:49,520 --> 00:30:52,610 Nhưng một trong những điều này là khá hữu ích: Index. 524 00:30:52,610 --> 00:30:56,180 Nếu bạn biết trước cho dự án cuối cùng của bạn, cho pset 7, hay nói chung, 525 00:30:56,180 --> 00:30:59,480 lĩnh vực căn nhà này là có được một cái gì đó bạn tìm kiếm ngày một nhiều 526 00:30:59,480 --> 00:31:01,910 bằng cách sử dụng các từ khoá lựa chọn hay cái gì khác, 527 00:31:01,910 --> 00:31:05,180 sau đó bạn preemptively có thể cho biết cơ sở dữ liệu để làm việc kỳ diệu của nó 528 00:31:05,180 --> 00:31:10,510 và chắc chắn rằng nó tạo ra trong bộ nhớ bất kỳ cấu trúc dữ liệu ưa thích cần thiết 529 00:31:10,510 --> 00:31:13,770 để tiến hành tìm kiếm dựa trên ngôi nhà. 530 00:31:13,770 --> 00:31:17,860 Có lẽ nó sẽ sử dụng một bảng băm, có thể nó sẽ sử dụng một danh sách liên kết. 531 00:31:17,860 --> 00:31:21,260 Trong thực tế, nó có xu hướng sử dụng một cây, thường là một cấu trúc gọi là B-cây 532 00:31:21,260 --> 00:31:24,090 không phải là một cây nhị phân nhưng một cây B - đó là một cây rất rộng 533 00:31:24,090 --> 00:31:27,370 mà bạn có thể thấy trong một lớp học như CS124, các dữ liệu cấu trúc lớp. 534 00:31:27,370 --> 00:31:31,800 Nhưng trong ngắn hạn, bạn không phải lo lắng về điều đó khi sử dụng phần mềm cơ sở dữ liệu thông minh. 535 00:31:31,800 --> 00:31:35,890 Bạn chỉ có thể nói với nó, "Index lĩnh vực này để tôi có thể tìm kiếm trên nó hiệu quả hơn." 536 00:31:35,890 --> 00:31:40,250 >> Nếu bạn bỏ ra và bạn cố gắng tìm kiếm cho tất cả mọi người trong cơ sở dữ liệu những người sống trong Mather, 537 00:31:40,250 --> 00:31:42,710 nó sẽ devolve vào tìm kiếm tuyến tính. 538 00:31:42,710 --> 00:31:45,360 Và nếu bạn đã có 6.000 các sinh tất cả sống trong nhà một số, 539 00:31:45,360 --> 00:31:47,900 bạn sẽ tìm kiếm toàn bộ bảng để tìm Matherites, 540 00:31:47,900 --> 00:31:52,190 trong khi đó nếu bạn nói Index, hy vọng nó sẽ là một cái gì đó gần với một tìm kiếm lôgarít 541 00:31:52,190 --> 00:31:54,510 để tìm những loại sinh viên. 542 00:31:54,510 --> 00:31:56,750 Đây chỉ là một tính năng miễn phí để bật, 543 00:31:56,750 --> 00:31:59,530 mặc dù nó không đi kèm ở một mức giá của một số lượng không gian. 544 00:31:59,530 --> 00:32:02,690 Cuối cùng, tự động thặng dư, lĩnh vực này AI, 545 00:32:02,690 --> 00:32:05,830 mà chỉ có nghĩa nếu nó là một int và bạn không muốn quan tâm để tăng nó cho mình 546 00:32:05,830 --> 00:32:07,570 mỗi khi có một người dùng mới, kiểm tra, 547 00:32:07,570 --> 00:32:11,910 và mỗi người sử dụng được chèn sẽ tự động nhận được một ID mới. 548 00:32:11,910 --> 00:32:15,620 Hãy nhấp vào Lưu, và bây giờ chúng ta hãy tìm lỗi với thiết kế này. 549 00:32:15,620 --> 00:32:20,200 Nếu tôi đi vào Browse, thông báo rằng cả Mike và nhà tôi là NULL. 550 00:32:20,200 --> 00:32:22,420 Tôi có thể sử dụng phpMyAdmin để chỉnh sửa điều này bằng tay. 551 00:32:22,420 --> 00:32:25,110 Tôi có thể đi ở đây và loại Mather và sau đó nhấn Enter, 552 00:32:25,110 --> 00:32:27,740 và bây giờ nhận thấy bàn là khác nhau. 553 00:32:27,740 --> 00:32:29,270 Nhưng nhận thấy tôi có thể làm cái gì khác cũng. 554 00:32:29,270 --> 00:32:33,530 ID của David là 1, do đó, phpMyAdmin một lần nữa chỉ là một công cụ hành chính; 555 00:32:33,530 --> 00:32:35,970 đây không phải là một cái gì đó người dùng của bạn đã bao giờ đi xem. 556 00:32:35,970 --> 00:32:38,810 Vì vậy, nếu tôi thay vì nhấp vào tab SQL lên hàng đầu - 557 00:32:38,810 --> 00:32:41,450 và một lần nữa, pset 7 sẽ giới thiệu cho bạn nhiều các truy vấn này - 558 00:32:41,450 --> 00:32:45,260 Tôi có thể tự thực hiện các câu lệnh SQL ngôn ngữ truy vấn cấu trúc 559 00:32:45,260 --> 00:32:56,410 Người sử dụng UPDATE SET nhà = 'Pfoho' WHERE id = 1. 560 00:32:56,410 --> 00:33:00,830 Các truy vấn SQL, độc đáo đủ, khá dễ đọc từ trái sang phải. 561 00:33:00,830 --> 00:33:04,350 Cập nhật bảng người sử dụng, thiết lập các trường được gọi là nhà Pfoho 562 00:33:04,350 --> 00:33:06,830 ID của người sử dụng là 1. 563 00:33:06,830 --> 00:33:11,480 Hoặc tôi thậm chí có thể làm nơi email = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 Vì vậy, miễn là xác định duy nhất, mà có thể làm việc tốt. 565 00:33:14,860 --> 00:33:18,810 Nhưng ID có xu hướng được hiệu suất cao, vì vậy hãy làm điều đó. 566 00:33:18,810 --> 00:33:22,950 Hãy nhấp Go. Được rồi, lecture.users không tồn tại. Lỗi của tôi là gì? 567 00:33:22,950 --> 00:33:26,220 Bảng thực sự được gọi ở đây là gì? 568 00:33:26,220 --> 00:33:28,770 Nó được gọi là học sinh chỉ vì đó là những gì chúng ta đã làm ở trên cùng bên trái. 569 00:33:28,770 --> 00:33:31,860 Nó được gọi là sinh viên, không phải người dùng. Vì vậy, Go. 570 00:33:31,860 --> 00:33:34,330 1 hàng bị ảnh hưởng. Query mất 0.01 giây. 571 00:33:34,330 --> 00:33:38,010 Nếu tôi nhấn Browse, bây giờ cuộc sống Malan trong Pfoho. 572 00:33:38,010 --> 00:33:42,070 Vì vậy, đó là một hương vị của SQL, nhưng pset sẽ dẫn bạn qua hơn một chút của. 573 00:33:42,070 --> 00:33:44,710 >> Là một quyết định ngu ngốc tôi đã thực hiện ở đây. 574 00:33:44,710 --> 00:33:47,820 Tôi cho rằng thiết kế cơ sở dữ liệu này là không hiệu quả 575 00:33:47,820 --> 00:33:51,650 bởi vì những người tôi thêm vào bảng sinh viên, 576 00:33:51,650 --> 00:33:54,730 nhiều người trong chúng ta bắt đầu thêm, TFs tôi bắt đầu thêm các chi tiết của, 577 00:33:54,730 --> 00:33:58,320 chúng ta sẽ bắt đầu nhìn thấy những gì dư thừa trong bảng này? 578 00:34:00,840 --> 00:34:06,020 >> Yeah. [Sinh viên] Thấy trong sinh viên, chúng tôi đang sử dụng cùng [không nghe được] 579 00:34:06,020 --> 00:34:07,360 Cùng Quyền, chính xác. 580 00:34:07,360 --> 00:34:10,400 Vì vậy, nếu 400 người sống trong Mather, cho hay phải mất, 581 00:34:10,400 --> 00:34:15,000 cuối cùng bảng này sẽ có khoảng 400 hàng nói rằng "Mather," "Mather," 582 00:34:15,000 --> 00:34:16,590 "Mather," "Mather," "Mather". 583 00:34:16,590 --> 00:34:19,820 Chúng tôi đang lãng phí tất cả các byte, và có một vài takeaways. 584 00:34:19,820 --> 00:34:23,080 1, có trường hợp góc điên mà nếu ai đó trả rất nhiều tiền 585 00:34:23,080 --> 00:34:25,949 và đặt lại tên Mather, bây giờ chúng ta phải thay đổi toàn bộ bảng cơ sở dữ liệu của chúng tôi. 586 00:34:25,949 --> 00:34:29,730 Điều đó sẽ không xảy ra thường xuyên, mặc dù Pfoho đã từng được gọi Bắc House 15 năm trước đây, 587 00:34:29,730 --> 00:34:32,310 do đó, nó sẽ xảy ra. Nhưng đó không phải là tất cả những gì hấp dẫn. 588 00:34:32,310 --> 00:34:36,000 Hấp dẫn hơn so với một trường hợp góc như thế cần phải cập nhật dữ liệu với số lượng lớn 589 00:34:36,000 --> 00:34:41,150 cho một cơ sở dữ liệu là lý do tại sao bạn đang lưu trữ Mather một lần nữa và một lần nữa và một lần nữa và một lần nữa? 590 00:34:41,150 --> 00:34:43,020 Đó là rất nhiều ký tự, 6 ký tự. 591 00:34:43,020 --> 00:34:45,500 Chúng ta không thể làm thậm chí còn tốt hơn, đặc biệt là đối với Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Chắc chắn chúng ta có thể làm tốt hơn so với rất nhiều nhân vật. 593 00:34:48,320 --> 00:34:51,790 Tại sao không chỉ kết hợp một định danh duy nhất với mỗi nhà 594 00:34:51,790 --> 00:34:55,020 và cửa hàng cho mỗi người dùng? Vì vậy, hãy thử này. 595 00:34:55,020 --> 00:35:00,610 Thay vì chỉ cần sử dụng bảng học sinh, để tôi đi đến cơ sở dữ liệu bài giảng của tôi lên đây ở trên cùng bên trái. 596 00:35:00,610 --> 00:35:02,600 Chú ý ở đây nó nói Tạo bảng. 597 00:35:02,600 --> 00:35:04,550 Hãy để tôi tạo một bảng mới gọi là nhà. 598 00:35:04,550 --> 00:35:08,880 Số cột sẽ là 2. Enter. 599 00:35:08,880 --> 00:35:11,200 Bây giờ tôi có 2 lĩnh vực. 600 00:35:11,200 --> 00:35:14,600 Tôi sẽ gọi này, tên, và nó sẽ là một varchar chiều dài 255, 601 00:35:14,600 --> 00:35:18,770 >> nhưng đó là hơi tùy tiện. Hãy để tôi đặt xuống đây theo quy ước. 602 00:35:18,770 --> 00:35:22,840 Vì vậy, đặt một ID ở đây. Hãy để cung cấp cho mỗi nhà một định danh duy nhất. 603 00:35:22,840 --> 00:35:25,360 Hãy để cung cấp cho mỗi nhà một tên. 604 00:35:25,360 --> 00:35:30,980 Hãy xác định định danh sẽ unsigned chỉ theo quy ước để chỉ sử dụng các số dương. 605 00:35:30,980 --> 00:35:35,020 Hãy cho đi trước và cho đây là một lĩnh vực tự động thặng dư cho bây giờ. 606 00:35:35,020 --> 00:35:38,160 Và chúng ta cần bất cứ điều gì khác? 607 00:35:38,160 --> 00:35:41,010 Hãy cho đi trước và nhấp vào Lưu. 608 00:35:41,010 --> 00:35:42,480 Bây giờ tôi có một bảng thứ hai. 609 00:35:42,480 --> 00:35:45,860 Chú ý một sang một bên, đây là hơi khó hiểu lệnh SQL 610 00:35:45,860 --> 00:35:50,280 mà bạn sẽ phải gõ bằng tay nếu không sử dụng một công cụ hành chính như phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 Vì vậy, một lý do khác mà chúng ta sử dụng nó. 612 00:35:51,990 --> 00:35:55,480 Đó là loại sư phạm tuyệt vời hữu ích vì bạn có thể nhấp vào xung quanh 613 00:35:55,480 --> 00:36:01,050 và tìm ra cách làm việc bằng cách chỉ cần sao chép và dán phpMyAdmin đã làm gì. 614 00:36:01,050 --> 00:36:04,150 Nhưng bảng lệnh Create là những gì đã được thực hiện, và đây là bàn của tôi. 615 00:36:04,150 --> 00:36:11,370 Hãy để tôi đi trước và sử dụng SQL nguyên chứ không phải là đơn giản hóa bằng cách nhấn vào tab Insert. 616 00:36:11,370 --> 00:36:15,040 Hãy để tôi làm INSERT INTO nhà, 617 00:36:15,040 --> 00:36:22,230 và tôi sẽ nói tên của ngôi nhà là sẽ có một giá trị của 'Mather'. 618 00:36:22,230 --> 00:36:24,790 Có bấy nhiêu thôi. Cú pháp này là nhiều hơn một chút khó hiểu. 619 00:36:24,790 --> 00:36:26,660 Đây là tên của các lĩnh vực mà chúng tôi muốn chèn. 620 00:36:26,660 --> 00:36:30,390 Đây là những giá trị chúng ta muốn chèn vào các lĩnh vực này. Hãy để tôi nhấn Go. 621 00:36:30,390 --> 00:36:34,410 1 hàng chèn mất 0.02 giây. Hãy để tôi nhấn Browse. 622 00:36:34,410 --> 00:36:42,020 >> Chú ý nếu tôi nhấn Browse, Mather, có ID là bằng cách tự động hóa số 1. 623 00:36:42,020 --> 00:36:45,000 Hãy để tôi làm một số khác. Hãy để tôi đi vào tab SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO nhà. Tên của ngôi nhà là sẽ có một giá trị Pfoho và vv. 625 00:36:52,950 --> 00:36:56,350 Go. Và tôi có thể làm điều này một lần nữa và một lần nữa và một lần nữa. 626 00:36:56,350 --> 00:36:59,470 Hoặc nếu bạn nhận được chán bằng cách sử dụng phpMyAdmin, bạn chỉ có thể sử dụng tab Insert 627 00:36:59,470 --> 00:37:01,000 và không phải gõ câu lệnh SQL. 628 00:37:01,000 --> 00:37:04,690 Bạn chỉ có thể đập nó ra nhanh hơn bằng cách gõ, ví dụ, Currier, Enter, 629 00:37:04,690 --> 00:37:07,610 và bây giờ nếu chúng ta nhấn Browse, có Currier với một ID của 3. 630 00:37:07,610 --> 00:37:09,920 Vì vậy, đây là những gì chúng tôi có nghĩa là tự động tăng. 631 00:37:09,920 --> 00:37:12,280 Nhưng bây giờ chúng tôi phải sửa chữa một cái gì đó trong học sinh. 632 00:37:12,280 --> 00:37:16,240 Sinh viên kiểu dữ liệu của lĩnh vực nhà nên làm gì bây giờ? 633 00:37:16,240 --> 00:37:19,450 Nó phải là một int, phải không? 634 00:37:19,450 --> 00:37:23,950 Vì vậy, các mục tiêu ở đây là yếu tố ra, nếu không được biết đến như là bình thường, các bảng 635 00:37:23,950 --> 00:37:27,940 để chúng tôi không lưu trữ thông tin dư thừa trong bất kỳ bảng của tôi. 636 00:37:27,940 --> 00:37:31,130 Và một lần nữa, con đường chúng ta ở đây sẽ nói Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, mà là rất dư thừa 638 00:37:34,220 --> 00:37:36,240 về của lãng phí của các ký tự. 639 00:37:36,240 --> 00:37:40,820 Vì vậy, hãy để tôi đi trước và thay đổi điều này bằng cách cấu trúc cách nhấn, 640 00:37:40,820 --> 00:37:44,620 và cho tôi đi trước và đánh dấu vào các lĩnh vực nhà, nhấn vào Change, 641 00:37:44,620 --> 00:37:46,990 và bây giờ tôi sẽ thay đổi điều này để có một int. 642 00:37:46,990 --> 00:37:49,490 255 là không còn phù hợp nữa. 643 00:37:49,490 --> 00:37:54,010 Hãy để tôi đi trước và nói rằng đó là tiền phạt nếu nó vẫn còn NULL. Lưu. 644 00:37:54,010 --> 00:37:55,870 Bây giờ sinh viên bảng đã được thay đổi thành công, 645 00:37:55,870 --> 00:37:59,090 và thông báo lại nhà là một int. 646 00:37:59,090 --> 00:38:02,220 Một sang một bên, bỏ qua các số trong dấu ngoặc đơn khi nói đến ints. 647 00:38:02,220 --> 00:38:03,770 >> Đây là lý do di sản. 648 00:38:03,770 --> 00:38:06,920 Trở lại trong ngày khi bạn không có ảnh minh hoạ, thay vào đó bạn có một môi trường dòng lệnh, 649 00:38:06,920 --> 00:38:11,580 10 và 11 tương ứng quy định bao nhiêu ký tự sẽ hiển thị 650 00:38:11,580 --> 00:38:13,950 trong cửa sổ thiết bị đầu cuối để thực sự hiển thị các trường. 651 00:38:13,950 --> 00:38:19,150 Nó không có gì để làm với độ dài bit của trường thực sự, vì vậy chúng ta sẽ bỏ qua mà cho bây giờ. 652 00:38:19,150 --> 00:38:20,990 Bây giờ tôi phải đi vào bảng này. 653 00:38:20,990 --> 00:38:24,610 Và nếu David sống trong Mather, nhà không phải là 0, 654 00:38:24,610 --> 00:38:27,350 mà là một int giá trị mặc định gần nhất để NULL. 655 00:38:27,350 --> 00:38:29,810 Ông phải sống trong nhà ở 1. 656 00:38:29,810 --> 00:38:36,870 Hãy tùy tiện nói rằng Mike sống ở Pfoho, do đó, số nhà 2. 657 00:38:36,870 --> 00:38:40,160 Bây giờ bàn của tôi trông nhiều hơn một chút khó hiểu. 658 00:38:40,160 --> 00:38:41,960 Nhưng xem xét hiệu quả. 659 00:38:41,960 --> 00:38:44,860 Tôi bây giờ chỉ sử dụng 32 bit để xác định các ngôi nhà, 660 00:38:44,860 --> 00:38:49,530 có nghĩa là có chỉ có 1 định nghĩa kinh điển của nhà Mather của tôi và Pfoho 661 00:38:49,530 --> 00:38:52,090 và đó là trong bảng nhà. 662 00:38:52,090 --> 00:38:55,880 Vì vậy, nếu bây giờ tôi muốn tái gia nhập các bảng, nghĩ về nó theo cách này. 663 00:38:55,880 --> 00:39:01,980 Ở đây tôi có bàn học sinh của tôi, và ở phía bên tay phải có những con số này, 1 và 2. 664 00:39:01,980 --> 00:39:04,180 1 là Mather, 2 là Pfoho. 665 00:39:04,180 --> 00:39:08,580 Chúng tôi có những con số trong bảng này khác, được gọi là nhà, 666 00:39:08,580 --> 00:39:11,020 1 và 2 và 3 cho 3 nhà. 667 00:39:11,020 --> 00:39:14,990 Những gì chúng tôi muốn làm là có khả năng trong các mã, PHP và SQL, 668 00:39:14,990 --> 00:39:18,800 để sắp xếp của tái gia nhập các bảng này, nếu đây là những sinh viên và những nhà 669 00:39:18,800 --> 00:39:22,050 bằng cách nào đó chúng tôi muốn kết hợp chúng để 1 dòng lên với 1, 670 00:39:22,050 --> 00:39:25,670 2 dòng với 2, và để chúng tôi có thể tìm ra nơi mà David 671 00:39:25,670 --> 00:39:28,000 và nơi Mike và nơi mà mọi người sống. 672 00:39:28,000 --> 00:39:31,850 Để làm điều này, chúng ta có thể thực thi một truy vấn SQL như sau. 673 00:39:31,850 --> 00:39:40,470 SELECT * TỪ học sinh THAM GIA nhà VỀ - 674 00:39:40,470 --> 00:39:43,000 Và giờ đây, những lĩnh vực nào chúng tôi muốn tham gia? 675 00:39:43,000 --> 00:39:49,520 Vì vậy, students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> Một chút khó hiểu, nhưng một phần điều này có nghĩa là nghĩa đen tạo một bảng mới tạm thời 677 00:39:54,150 --> 00:39:56,690 đó là kết quả của việc gia nhập các sinh viên và nhà ở. 678 00:39:56,690 --> 00:40:00,340 Và làm thế nào bạn muốn kết hợp những lời khuyên của các ngón tay của tôi ở đây? 679 00:40:00,340 --> 00:40:05,280 Đặt nhà bằng nhà 'học sinh trường ID. 680 00:40:05,280 --> 00:40:10,220 Và nếu tôi Go, tôi nhận được trở lại chính xác những gì tôi hy vọng. 681 00:40:10,220 --> 00:40:15,890 David là trong Mather, Mike là ở Pfoho, và tôi cũng thấy các định danh duy nhất. 682 00:40:15,890 --> 00:40:18,640 Nhưng vấn đề là bây giờ tôi có một bảng đầy đủ. 683 00:40:18,640 --> 00:40:23,020 Và như vậy takeaway đây để pset 7 hoặc thực sự cho các dự án cuối cùng: 684 00:40:23,020 --> 00:40:25,830 Nếu bạn thấy rằng bạn đang lưu trữ bất cứ mảnh thông tin dư thừa, 685 00:40:25,830 --> 00:40:28,850 cho dù đó là một ngôi nhà, có thể đó là một thành phố, tiểu bang, và ZIP 686 00:40:28,850 --> 00:40:32,050 ZIP có thể thường nhưng không phải luôn luôn được sử dụng như là một định danh duy nhất, 687 00:40:32,050 --> 00:40:35,810 làm đi qua các bài tập tinh thần và sau đó với một cái gì đó giống như phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 bao thanh toán ra rằng dữ liệu phổ biến bởi vì đặc biệt là khi trang web của bạn được sử dụng tốt hơn 689 00:40:40,660 --> 00:40:45,440 và phổ biến hơn, đây là cách bạn hãy chắc chắn rằng tất cả mọi thứ là siêu nhanh, 690 00:40:45,440 --> 00:40:51,930 bằng cách đưa ra các cơ sở dữ liệu như nhiều gợi ý như tính độc đáo nhất có thể. 691 00:40:51,930 --> 00:40:53,860 Đó là rất nhiều. 692 00:40:53,860 --> 00:40:59,010 Bất kỳ câu hỏi nào? Được rồi. Hãy nghỉ ngơi 5-phút và tập hợp lại. 693 00:41:01,600 --> 00:41:03,540 Được rồi. 694 00:41:03,540 --> 00:41:08,680 Sau đây là một ví dụ đã được sử dụng một vài năm trước đây khi tôi đã CS161, 695 00:41:08,680 --> 00:41:10,960 đó là hệ điều hành lớp học tại trường 696 00:41:10,960 --> 00:41:15,160 được biết đến là tuyệt vời nhưng một số tiền điên rồ của công việc, 697 00:41:15,160 --> 00:41:19,810 và nó tập trung thực sự trên một số trong những vấn đề ở mức độ thấp phát sinh trong hệ điều hành 698 00:41:19,810 --> 00:41:22,700 và cũng có thể ngay cả trong thế giới của cơ sở dữ liệu. 699 00:41:22,700 --> 00:41:27,040 >> Câu chuyện đã nói với giáo sư của tôi, Margo Seltzer, năm đó là như sau. 700 00:41:27,040 --> 00:41:30,990 Giả sử rằng bạn có một tủ lạnh ký túc xá nhỏ cho bạn và người bạn cùng phòng của bạn 701 00:41:30,990 --> 00:41:34,030 và cả hai bạn thực sự thích sữa. 702 00:41:34,030 --> 00:41:36,360 Vì vậy, bạn trở về nhà từ ngày một lớp, bạn cùng phòng của bạn chưa có, 703 00:41:36,360 --> 00:41:39,650 bạn mở tủ lạnh, và bạn nhận ra, "Oh damn, chúng tôi ra sữa". 704 00:41:39,650 --> 00:41:42,070 Vì vậy, bạn đóng tủ lạnh, bạn đi bộ trên đường phố để CVS 705 00:41:42,070 --> 00:41:45,830 và nhận được trong các đường ngày càng dài để mua một số sữa ở CVS. 706 00:41:45,830 --> 00:41:48,470 Trong khi đó, người bạn cùng phòng của bạn trở về nhà từ lớp học của cô, 707 00:41:48,470 --> 00:41:51,690 đi vào phòng, mở tủ lạnh thực sự muốn một ít sữa, 708 00:41:51,690 --> 00:41:54,130 mở tủ lạnh và, "Chết tiệt, không sữa." 709 00:41:54,130 --> 00:41:57,890 Vì vậy, họ đóng cửa tủ lạnh, đi ra khỏi cửa, và đi vào ABP 710 00:41:57,890 --> 00:42:00,910 hoặc một nơi nào đó khác hơn CVS nơi mà bạn sẽ không va đập vào nhau 711 00:42:00,910 --> 00:42:02,790 đi lấy một ít sữa. 712 00:42:02,790 --> 00:42:04,820 Tất nhiên một vài phút sau đó, cả hai bạn trở về nhà 713 00:42:04,820 --> 00:42:07,740 và bây giờ bạn có sữa hai lần nhiều như bạn thực sự muốn. 714 00:42:07,740 --> 00:42:10,670 Và là sữa, bây giờ nó sẽ xấu đi vì bạn thích sữa 715 00:42:10,670 --> 00:42:14,200 nhưng bạn không thực sự như sữa, vì vậy bây giờ bạn có sữa quá nhiều, do đó, nó sẽ là chua. 716 00:42:14,200 --> 00:42:16,830 Đây là một tình trạng khủng khiếp khủng khiếp. 717 00:42:16,830 --> 00:42:22,920 Điều gì có thể giải quyết khó khăn này nếu bạn đã về nhà người bạn cùng phòng đầu tiên? Vâng. 718 00:42:22,920 --> 00:42:25,970 [Sinh viên] Bạn nên đã để lại một lưu ý. [Cười] 719 00:42:25,970 --> 00:42:28,090 Tốt. Bạn nên đã để lại một lưu ý. 720 00:42:28,090 --> 00:42:32,320 Bạn nên đã đặt một ghi chú Post-it giống như nói rằng, "Gone sữa" 721 00:42:32,320 --> 00:42:36,830 và sau đó bạn cùng phòng của bạn khái niệm sẽ bị khóa thực sự làm điều đó. 722 00:42:36,830 --> 00:42:38,010 Hoặc bạn có thể đi thêm 1 bước nữa. 723 00:42:38,010 --> 00:42:41,060 Bạn có nghĩa là có thể khóa tủ lạnh với một số loại ổ khóa, 724 00:42:41,060 --> 00:42:44,870 và bây giờ bạn cùng phòng của bạn nghĩa là sẽ bị khóa ra khỏi tủ lạnh. 725 00:42:44,870 --> 00:42:48,520 Nếu chúng ta khái quát để lập trình, 726 00:42:48,520 --> 00:42:51,610 bạn gần như có thể suy nghĩ của tủ lạnh như một số loại biến hoặc một cấu trúc, 727 00:42:51,610 --> 00:42:53,500 một số loại container cho các thông tin. 728 00:42:53,500 --> 00:42:58,290 Vấn đề cơ bản ở đây là cả hai bạn được phép kiểm tra 729 00:42:58,290 --> 00:43:02,370 hoặc đọc trạng thái của cấu trúc dữ liệu này, 730 00:43:02,370 --> 00:43:08,050 nhưng bạn xem nó ở những thời điểm khác nhau và cả hai bạn đã thực hiện một quyết định 731 00:43:08,050 --> 00:43:11,920 dựa trên trạng thái của thế giới những khoảnh khắc khác nhau trong thời gian. 732 00:43:11,920 --> 00:43:15,570 Vì vậy, bạn đã khóa tủ lạnh, bạn sẽ có ít nhất tránh cùng phòng của bạn 733 00:43:15,570 --> 00:43:19,070 đã có thể kiểm tra trạng thái của thế giới, 734 00:43:19,070 --> 00:43:22,530 do đó, em đã không thể đưa ra quyết định tương tự. 735 00:43:22,530 --> 00:43:25,780 Vì vậy, cơ sở dữ liệu, khi nó quay ra, có vấn đề này liên tục. 736 00:43:25,780 --> 00:43:31,050 >> Hãy xem nếu chúng ta có thể xây dựng một kịch bản. 737 00:43:31,050 --> 00:43:34,310 Giả sử rằng bạn đang sắp xếp của một kẻ xấu và bạn đi đến Bank of America 738 00:43:34,310 --> 00:43:37,950 hoặc một trong các nơi khác trong quảng trường có một vài máy ATM bên cạnh, 739 00:43:37,950 --> 00:43:41,200 và bằng cách nào đó bạn đã tìm ra cách nhân bản một thẻ ATM - không phải tất cả là khó khăn. 740 00:43:41,200 --> 00:43:42,730 Nó chỉ là một dải từ. 741 00:43:42,730 --> 00:43:45,180 Và vì vậy những gì bạn muốn để cố gắng làm là chơi trò chơi này 742 00:43:45,180 --> 00:43:49,060 nhờ đó mà bạn đặt 1 card vào 1 máy, một thẻ khác vào máy khác, 743 00:43:49,060 --> 00:43:51,980 và bạn thực chất muốn thử để rút tiền cùng một lúc, 744 00:43:51,980 --> 00:43:54,930 bởi vì tưởng tượng câu chuyện đó diễn ra như sau. 745 00:43:54,930 --> 00:43:57,350 Máy bên trái mất thẻ và mã số PIN của bạn, 746 00:43:57,350 --> 00:44:00,240 và sau đó bạn nói, "Hãy cho tôi $ 100." 747 00:44:00,240 --> 00:44:04,790 ATM được lập trình đầu tiên làm một lựa chọn trên cơ sở dữ liệu của nó hoặc tương đương - 748 00:44:04,790 --> 00:44:10,780 bất cứ cơ sở dữ liệu nó bằng cách sử dụng - để xem điều này người sử dụng có ít nhất $ 100 trong tài khoản của mình? 749 00:44:10,780 --> 00:44:16,180 Nếu vậy, sau đó nhổ ra $ 100 và trừ đi $ 100 từ cân đối của họ. 750 00:44:16,180 --> 00:44:20,470 Nhưng tất nhiên nếu có nhiều máy tính ở đây hoặc nhiều cách kiểm tra 751 00:44:20,470 --> 00:44:23,560 trạng thái của thế giới đó, kho tiền ngân hàng, để xem bạn có bao nhiêu tiền, 752 00:44:23,560 --> 00:44:26,780 giả sử rằng chỉ bằng máy cơ hội ở bên trái và bên phải 753 00:44:26,780 --> 00:44:30,140 hỏi câu hỏi đó vào lúc này gần như cùng trong thời gian. 754 00:44:30,140 --> 00:44:34,160 >> Và điều này chắc chắn có thể xảy ra. ATM là máy tính những ngày này. 755 00:44:34,160 --> 00:44:37,670 Vì vậy, nếu máy bên trái nói, "Vâng, bạn có ít nhất $ 100," 756 00:44:37,670 --> 00:44:42,150 trong khi đó các máy bên phải nói, "Vâng, bạn có ít nhất $ 100," 757 00:44:42,150 --> 00:44:47,420 sau đó cả hai người trong số họ tiến hành để hoàn thành chương trình của họ và thực sự nhổ ra $ 100 758 00:44:47,420 --> 00:44:50,820 và nói, "Trước đây bạn đã có $ 200." 759 00:44:50,820 --> 00:44:54,890 "Hãy để tôi cập nhật các biến đến nay là $ 100 còn lại trong tài khoản." 760 00:44:54,890 --> 00:44:58,780 Nhưng nếu cả hai người trong số họ đã kiểm tra số dư tài khoản của bạn và thấy rằng nó là $ 200 761 00:44:58,780 --> 00:45:02,000 và cả hai người trong số họ sau đó làm toán và nói 200 - 100, 762 00:45:02,000 --> 00:45:06,990 các máy đã có khả năng nhổ ra hai dự luật $ 100 mỗi máy, 763 00:45:06,990 --> 00:45:11,360 nhưng họ đã chỉ cập nhật tổng số dư tài khoản của bạn là $ 100. 764 00:45:11,360 --> 00:45:15,130 Nói cách khác, bạn đã đưa ra $ 200, nhưng vì họ kiểm tra trạng thái của thế giới 765 00:45:15,130 --> 00:45:18,840 cùng một lúc và sau đó thực hiện một quyết định dựa trên giá trị đó, 766 00:45:18,840 --> 00:45:21,930 họ có thể không làm toán cuối cùng một cách chính xác. 767 00:45:21,930 --> 00:45:25,520 Vì vậy, trong một tình huống ngân hàng bạn thực sự muốn có một số loại khóa 768 00:45:25,520 --> 00:45:28,450 vì vậy ngay sau khi bạn đã kiểm tra trạng thái của một số biến 769 00:45:28,450 --> 00:45:31,220 đó là thực sự quan trọng, như số dư tài khoản của bạn, 770 00:45:31,220 --> 00:45:36,070 không để cho bất cứ ai khác đưa ra quyết định trên cơ sở đó cho đến khi bạn thực hiện làm việc của bạn, 771 00:45:36,070 --> 00:45:38,920 trong trường hợp này là các máy ATM bên trái. 772 00:45:38,920 --> 00:45:41,160 Khóa tất cả những người khác. 773 00:45:41,160 --> 00:45:44,650 Bạn thực sự có thể đạt được hiệu ứng này trong một vài cách khác nhau. 774 00:45:44,650 --> 00:45:48,660 >> Cách đơn giản nhất trong MySQL là một dòng của SQL mà chúng tôi đã cho bạn 775 00:45:48,660 --> 00:45:52,030 các đặc điểm kỹ thuật thiết lập vấn đề trông giống hệt như thế này. 776 00:45:52,030 --> 00:45:57,420 Chèn vào bảng - bất cứ điều gì nó được gọi là một id, một biểu tượng, và chia sẻ, một số cổ phiếu, 777 00:45:57,420 --> 00:45:59,660 các giá trị sau, ví dụ. 778 00:45:59,660 --> 00:46:03,370 Nếu bạn không đọc spec, đây là một ví dụ liên quan đến làm thế nào để bạn đi về 779 00:46:03,370 --> 00:46:07,340 mua 10 cổ phần của các cổ phiếu penny này cho Tổng thống Skroob, 780 00:46:07,340 --> 00:46:10,340 ID người dùng có sẽ xảy ra là số 7? 781 00:46:10,340 --> 00:46:14,070 Điều này nói INSERT INTO bảng id sau đây, biểu tượng, và số cổ phần 782 00:46:14,070 --> 00:46:18,200 7, DVN.V ', và 10. 783 00:46:18,200 --> 00:46:21,510 Nhưng - nhưng, nhưng, nhưng dòng thứ hai là quan trọng nhất. 784 00:46:21,510 --> 00:46:26,310 Về cổ phiếu CẬP NHẬT KEY DUPLICATE = cổ phần + giá trị (cổ phiếu). 785 00:46:26,310 --> 00:46:28,350 Vì vậy, hoàn toàn khó hiểu ở cái nhìn đầu tiên. 786 00:46:28,350 --> 00:46:31,990 Nhưng thực tế là truy vấn SQL này, mặc dù nó kết thúc tốt đẹp vào 2 dòng, 787 00:46:31,990 --> 00:46:35,920 là 1 dài truy vấn, nó có nghĩa là nó là nguyên tử 788 00:46:35,920 --> 00:46:41,000 trong ý nghĩa rằng truy vấn này hoặc là sẽ được thực hiện tất cả cùng nhau hay không ở tất cả. 789 00:46:41,000 --> 00:46:45,100 Và theo định nghĩa của MySQL, đó là cách họ thực hiện truy vấn này. 790 00:46:45,100 --> 00:46:51,010 Đó là theo định nghĩa trong cuốn hướng dẫn đảm bảo thực hiện tất cả cùng một lúc hoặc không gì cả. 791 00:46:51,010 --> 00:46:54,020 Động lực cho điều này là như sau. 792 00:46:54,020 --> 00:46:58,540 Nếu trong trường hợp này, bạn đang cố gắng để mua 10 cổ phiếu, 793 00:46:58,540 --> 00:47:02,260 đó là loại của câu chuyện tương tự như sữa, đó là loại câu chuyện tương tự như các máy ATM. 794 00:47:02,260 --> 00:47:04,970 >> Nếu bạn mắc sai lầm khi không sử dụng cú pháp này 795 00:47:04,970 --> 00:47:09,610 nhưng thay vì lựa chọn từ cơ sở dữ liệu để xem có bao nhiêu cổ phần của các cổ phiếu penny này 796 00:47:09,610 --> 00:47:13,750 Tổng thống Skroob có, và giả sử ông có 10 cổ phiếu, 797 00:47:13,750 --> 00:47:19,330 và sau đó một số phân chia thứ hai sau đó bạn sau đó làm một tuyên bố UPDATE, 798 00:47:19,330 --> 00:47:24,810 mà là một tuyên bố trong SQL nói rằng đi trước và thêm 10 cổ phiếu 799 00:47:24,810 --> 00:47:28,700 thứ 10 của mình để lý tưởng tổng số là 20, 800 00:47:28,700 --> 00:47:33,490 vấn đề là bởi vì trong hệ thống cơ sở dữ liệu của ngày hôm nay và bởi vì trong máy tính ngày nay 801 00:47:33,490 --> 00:47:35,990 bạn có nhiều bộ xử lý đa lõi - 802 00:47:35,990 --> 00:47:38,920 nói cách khác, máy tính nghĩa là có thể được làm nhiều điều cùng một lúc - 803 00:47:38,920 --> 00:47:44,270 không đảm bảo rằng SELECT và UPDATE của bạn trong trường hợp này 804 00:47:44,270 --> 00:47:46,150 sẽ xảy ra trở lại trở lại. 805 00:47:46,150 --> 00:47:49,140 Vì vậy, một kịch bản xấu sẽ làm SELECT 806 00:47:49,140 --> 00:47:51,670 để xem có bao nhiêu cổ phần của các cổ phiếu penny này không Skroob có, 807 00:47:51,670 --> 00:47:54,710 và sau đó chỉ cần một cơ hội khác truy vấn cơ sở dữ liệu được thực hiện - 808 00:47:54,710 --> 00:47:57,740 có thể Skroob của nó trong một cửa sổ trình duyệt khác cố gắng để mua 10 cổ phần 809 00:47:57,740 --> 00:48:00,700 trong một cửa sổ hoàn toàn, giống như các máy ATM 810 00:48:00,700 --> 00:48:05,410 và giả sử rằng truy vấn khác được giữa SELECT và UPDATE. 811 00:48:05,410 --> 00:48:10,210 Nó có thể là trường hợp đó Skroob giờ mất đi một số lượng cổ phiếu 812 00:48:10,210 --> 00:48:14,340 bởi vì một quá trình kiểm tra trạng thái của thế giới của mình, 813 00:48:14,340 --> 00:48:17,800 hoặc anh ta được thêm cổ phiếu hơn ông cần phải có. 814 00:48:17,800 --> 00:48:23,250 Chúng tôi sẽ không đi vào cụ thể của chính xác những đường dây câu chuyện cụ thể sẽ là, 815 00:48:23,250 --> 00:48:28,380 nhưng vấn đề là nếu bạn có để kiểm tra một giá trị biến và sau đó đưa ra quyết định, 816 00:48:28,380 --> 00:48:32,500 nếu có một rủi ro của người khác làm một cái gì đó ở giữa 2 báo cáo, 817 00:48:32,500 --> 00:48:36,220 như có thể xảy ra trong các hệ thống đa xử, trong các hệ thống đa lõi, 818 00:48:36,220 --> 00:48:41,220 máy tính với khả năng để làm những việc cùng một lúc, những điều xấu có thể xảy ra 819 00:48:41,220 --> 00:48:44,530 như các tài khoản ngân hàng được ghi nợ không chính xác, mua sữa gấp đôi, 820 00:48:44,530 --> 00:48:46,730 hoặc trong trường hợp này sai số cổ phiếu. 821 00:48:46,730 --> 00:48:48,370 Nhưng có một cách dễ dàng hơn để nghĩ về điều này. 822 00:48:48,370 --> 00:48:53,290 >> Nó chỉ ra rằng SQL cũng hỗ trợ, nếu bạn cấu hình bảng của bạn một cách chính xác, 823 00:48:53,290 --> 00:48:56,920 một cái gì đó gọi là giao dịch, mà tôi sẽ tranh luận thực sự là thậm chí còn dễ dàng hơn để hiểu 824 00:48:56,920 --> 00:49:00,650 hơn này, nhưng nó không phải là một 1-liner, do đó, nó thực sự là một chút liên quan. 825 00:49:00,650 --> 00:49:04,960 Có nghĩa là một tuyên bố trong SQL được gọi là bắt đầu giao dịch. 826 00:49:04,960 --> 00:49:08,300 Cũng giống như SELECT, UPDATE, INSERT, DELETE, và ghép và một bó của những người khác, 827 00:49:08,300 --> 00:49:10,970 có các từ khóa như GIAO DỊCH ĐẦU. 828 00:49:10,970 --> 00:49:13,560 Và những gì bạn sau đó làm trong bối cảnh của pset 7 - 829 00:49:13,560 --> 00:49:17,270 bạn không phải làm điều này cho pset 7, nó rõ ràng phủ nhận là không cần thiết, 830 00:49:17,270 --> 00:49:18,830 nhưng đối với các dự án cuối cùng, nó có thể có ích - 831 00:49:18,830 --> 00:49:22,820 nếu bạn gọi một truy vấn giao dịch bắt đầu và sau đó một truy vấn 832 00:49:22,820 --> 00:49:25,620 và sau đó một truy vấn và sau đó một, khác, và một người khác, 833 00:49:25,620 --> 00:49:31,860 những truy vấn sẽ không thực sự được thực hiện cho đến khi bạn gọi các câu lệnh SQL COMMIT, 834 00:49:31,860 --> 00:49:37,220 tại thời điểm đó, cho dù đó là 2 báo cáo hoặc 20 báo cáo, tất cả họ đều sẽ được thực hiện cùng một lúc, 835 00:49:37,220 --> 00:49:42,770 có nghĩa là không có ai khác có thể vô tình mua sữa quá nhiều hoặc ghi nợ quá nhiều tiền 836 00:49:42,770 --> 00:49:46,340 hoặc mua cổ phần quá nhiều bởi vì tất cả các truy vấn của bạn sẽ thực hiện 837 00:49:46,340 --> 00:49:48,410 trở lại trở lại để sao lưu để sao lưu. 838 00:49:48,410 --> 00:49:51,580 Và đây là siêu quan trọng, đặc biệt là khi bạn đang làm một cái gì đó như thế này. 839 00:49:51,580 --> 00:49:54,900 Đây là một ví dụ tùy ý nói rằng chúng ta hãy cập nhật tài khoản ngân hàng 840 00:49:54,900 --> 00:50:00,200 bằng cách thiết lập một sự cân bằng tương đương để cân bằng - $ 1000 số tài khoản là 2. 841 00:50:00,200 --> 00:50:04,260 Và sau đó báo cáo thứ hai là bây giờ hãy gửi tiền là $ 1000 842 00:50:04,260 --> 00:50:07,310 vào người khác là tài khoản ngân hàng có số tài khoản là 1. 843 00:50:07,310 --> 00:50:10,400 >> Nói cách khác, đây là một ví dụ hoàn hảo về nơi bạn muốn chắc chắn 844 00:50:10,400 --> 00:50:13,590 rằng cả hai của các báo cáo này xảy ra hoặc không gì cả 845 00:50:13,590 --> 00:50:15,450 bởi vì nếu không khách hàng sẽ nhận được hơi say 846 00:50:15,450 --> 00:50:17,670 và bạn đang đi để lấy tiền của họ và không gửi nó ở nơi khác, 847 00:50:17,670 --> 00:50:20,470 hoặc Ngân hàng sẽ nhận được hơi say nơi bạn đang đi để gửi tiền 848 00:50:20,470 --> 00:50:23,140 nhưng không thực sự trừ nó từ tài khoản của người dùng. 849 00:50:23,140 --> 00:50:25,810 Vì vậy, bạn muốn cả hai người trong số họ để thực hiện cùng nhau. 850 00:50:25,810 --> 00:50:29,140 Vì vậy, vào các giao dịch thế giới. 851 00:50:29,140 --> 00:50:31,360 Vì vậy, đó là một cái gì đó để giữ cho mặt sau của tâm trí của bạn, 852 00:50:31,360 --> 00:50:34,710 không quá nhiều cho các mục đích của dự án chỉ là một thức, 853 00:50:34,710 --> 00:50:36,700 nhưng nếu bạn muốn để có dự án cuối cùng của bạn một nơi nào đó, 854 00:50:36,700 --> 00:50:39,040 nếu bạn muốn bắt đầu lên một số công ty xung quanh nó, 855 00:50:39,040 --> 00:50:41,270 nếu bạn muốn giải quyết vấn đề một số nhóm sinh viên trong khuôn viên trường 856 00:50:41,270 --> 00:50:45,210 và thực sự có một trang web, sống và hoạt động, đây là những loại lỗi vi tế có thể phát sinh 857 00:50:45,210 --> 00:50:49,480 nếu bạn không hoàn toàn nghĩ rằng thông qua những gì có thể xảy ra nếu 2 người 858 00:50:49,480 --> 00:50:54,190 đang cố gắng để truy cập vào trang web của bạn nghĩa là tại thời điểm này tương tự trong thời gian, 859 00:50:54,190 --> 00:50:56,890 theo đó các truy vấn của họ nếu không có thể nhận được đan xen. 860 00:50:58,840 --> 00:51:01,420 >> Sẵn sàng cho một số mã JavaScript, một lời trêu ghẹo của nó? 861 00:51:01,420 --> 00:51:04,320 Đây là ngôn ngữ cuối cùng của chúng tôi cho học kỳ. Được rồi. 862 00:51:04,320 --> 00:51:09,940 Rất may, JavaScript trông rất, rất, rất giống với 2 ngôn ngữ, C và PHP, 863 00:51:09,940 --> 00:51:11,140 chúng tôi đã thực hiện cho đến nay. 864 00:51:11,140 --> 00:51:14,340 Không có JavaScript trong pset 7, nhưng nó là một công cụ vô cùng hữu ích 865 00:51:14,340 --> 00:51:18,840 khi nói đến thực hiện dự án dựa trên web cuối cùng hoặc thực sự chỉ là lập trình web nói chung. 866 00:51:18,840 --> 00:51:20,950 Vì vậy, một cái nhìn tổng quan nhanh chóng của một cái gì đó gọi là DOM. 867 00:51:20,950 --> 00:51:23,600 Dưới đây là một siêu trang web đơn giản mà thực sự chỉ nói hello, thế giới 868 00:51:23,600 --> 00:51:25,970 trong tiêu đề và trong cơ thể. 869 00:51:25,970 --> 00:51:29,270 Như thụt đầu dòng đã được đề xuất trong một thời gian, 870 00:51:29,270 --> 00:51:31,380 có thực sự là một hệ thống phân cấp cho các trang web. 871 00:51:31,380 --> 00:51:34,220 Tôi có thể rút ra cùng một đoạn của HTML như một cái cây, 872 00:51:34,220 --> 00:51:37,470 nghĩ lại các cuộc thảo luận của chúng ta về cấu trúc dữ liệu trong C như sau. 873 00:51:37,470 --> 00:51:40,710 Tôi có một số nút gốc đặc biệt được gọi là các nút tài liệu, 874 00:51:40,710 --> 00:51:43,650 và chúng ta sẽ thấy tương tự của điều này trong JavaScript trong thời điểm này chỉ là một. 875 00:51:43,650 --> 00:51:48,330 Đứa trẻ đầu tiên và đứa con duy nhất của thế trong trường hợp này là thẻ HTML. 876 00:51:48,330 --> 00:51:49,880 Không có ánh xạ trực tiếp của DOCTYPE. 877 00:51:49,880 --> 00:51:53,170 Đó là một điều đặc biệt, do đó, chúng ta chỉ nên bỏ qua nó khi nó đi kèm này DOM, 878 00:51:53,170 --> 00:51:55,810 Document Object Model cây. 879 00:51:55,810 --> 00:51:59,530 Chú ý rằng các tag HTML, mà tôi đã mô tả tùy tiện như một hình chữ nhật, 880 00:51:59,530 --> 00:52:02,890 có 2 con: đầu và thân. 881 00:52:02,890 --> 00:52:04,840 >> Những người được rút ra tương tự như hình chữ nhật. 882 00:52:04,840 --> 00:52:08,970 Nó có ý nghĩa những bức tranh đầu là bên trái của cơ thể. 883 00:52:08,970 --> 00:52:11,960 Điều này có nghĩa là đầu đến trước trong cây. 884 00:52:11,960 --> 00:52:14,910 Vì vậy, có thực sự là một sắp đặt vào một cái cây khi bạn vẽ nó như thế này, 885 00:52:14,910 --> 00:52:17,460 mặc dù hình dạng và whatnot là tùy ý. 886 00:52:17,460 --> 00:52:20,360 Đầu trong khi đó có một đứa con duy nhất được gọi là tiêu đề, 887 00:52:20,360 --> 00:52:25,170 và danh hiệu thực sự có con riêng của mình, đó là "hello, thế giới", 888 00:52:25,170 --> 00:52:32,210 Tôi cố tình vẽ như một hình bầu dục ở đây để làm cho nó hơi khác nhau từ hình chữ nhật. 889 00:52:32,210 --> 00:52:37,420 Những hình chữ nhật là những yếu tố, trong khi hello, thế giới thực sự là một nút văn bản. 890 00:52:37,420 --> 00:52:39,850 Vì vậy, đó là một nút trong cây, nhưng nó là một loại khác nhau của nút 891 00:52:39,850 --> 00:52:41,730 vì vậy tôi đã vẽ nó tùy tiện khác nhau. 892 00:52:41,730 --> 00:52:45,000 Tương tự như vậy cơ thể có một đứa trẻ được gọi là hello, thế giới cũng, 893 00:52:45,000 --> 00:52:47,910 rất khác nhau nút mặc dù họ tình cờ cùng một văn bản, 894 00:52:47,910 --> 00:52:52,100 nhưng tôi đã vẽ nó bằng cách sử dụng cùng một hình dạng. Vì vậy, những người quan tâm? 895 00:52:52,100 --> 00:52:56,820 Vâng, những gì tốt đẹp về HTML là nó có tính chất phân cấp này. 896 00:52:56,820 --> 00:53:01,010 Và những gì tốt đẹp về JavaScript và đặc biệt là thư viện được tự do có sẵn 897 00:53:01,010 --> 00:53:07,120 và phổ biến như jQuery, bạn có thể điều hướng cơ cấu cây amazingly dễ dàng. 898 00:53:07,120 --> 00:53:11,790 Bất kỳ những thứ chúng tôi đã làm trong C với con trỏ và cây traversing và recursing trên các nút 899 00:53:11,790 --> 00:53:15,300 trái trẻ con phải, tất cả các của một bất ngờ, chúng tôi có thể sắp xếp đưa cho các cấp 900 00:53:15,300 --> 00:53:19,450 là đáng kinh ngạc làm sáng tỏ nếu không một chút bực bội 901 00:53:19,450 --> 00:53:22,470 nhưng không gần một cách hiệu quả để đi về lập trình. 902 00:53:22,470 --> 00:53:24,470 Và như vậy với các ngôn ngữ cấp cao hơn như JavaScript 903 00:53:24,470 --> 00:53:28,340 chúng tôi sẽ có thể để di chuyển cây này trực giác hơn rất nhiều. 904 00:53:28,340 --> 00:53:30,430 >> Và thực sự là cú pháp sẽ là khá quen thuộc. 905 00:53:30,430 --> 00:53:32,950 Nếu bạn đã bao giờ thấy JavaScript trước, đây là một tài liệu tham khảo thực sự tốt đẹp 906 00:53:32,950 --> 00:53:35,910 từ folks Mozilla, những người làm cho Firefox, 907 00:53:35,910 --> 00:53:38,370 do đó, cảm thấy tự do để duyệt đó một cách thuận tiện. 908 00:53:38,370 --> 00:53:41,590 Những gì bạn sẽ tìm thấy - và những slide này giống hệt với những gì chúng ta sử dụng ngày khác 909 00:53:41,590 --> 00:53:44,030 tương tự như vậy, chính là đi. 910 00:53:44,030 --> 00:53:47,010 Vì vậy, khi bạn viết một chương trình trong JavaScript, không có chức năng chính. 911 00:53:47,010 --> 00:53:48,690 Bạn chỉ cần bắt đầu viết code. 912 00:53:48,690 --> 00:53:51,660 Tuy nhiên, một sự khác biệt quan trọng giữa JavaScript và C và PHP 913 00:53:51,660 --> 00:53:55,890 là trong khi C và PHP vậy, đến nay đã được thực hiện ở phía máy chủ 914 00:53:55,890 --> 00:53:59,180 thiết bị trong trường hợp này hay rộng hơn bởi một máy chủ, 915 00:53:59,180 --> 00:54:04,270 JavaScript bằng cách thiết kế thường được thực hiện bởi một trình duyệt. 916 00:54:04,270 --> 00:54:08,440 Nói cách khác, bạn có thể viết mã JavaScript, như chúng ta đang về để, 917 00:54:08,440 --> 00:54:13,080 trên một máy chủ trong thiết bị, nhưng bạn bao gồm nó trong số HTML của bạn, trong số các CSS của bạn, 918 00:54:13,080 --> 00:54:16,100 trong số GIF và PNG và JPEG của bạn 919 00:54:16,100 --> 00:54:19,170 để khi người dùng truy cập trang web của bạn, nếu bạn đang sử dụng JavaScript, 920 00:54:19,170 --> 00:54:21,770 rằng mã JavaScript từ máy chủ cho trình duyệt, 921 00:54:21,770 --> 00:54:24,540 và đó là trình duyệt mà thực sự thực hiện nó. 922 00:54:24,540 --> 00:54:27,960 Vì vậy, điều này có ý nghĩa có ý nghĩa đối với tài sản, ngay cả trí tuệ. 923 00:54:27,960 --> 00:54:32,600 Đó là loại ngớ ngẩn ngay cả suy nghĩ về việc bảo vệ IP của bạn khi nói đến mã JavaScript 924 00:54:32,600 --> 00:54:37,560 bởi vì bản chất của ngôn ngữ thường được thực thi phía trình duyệt. 925 00:54:37,560 --> 00:54:40,360 >> Bạn có thể xáo trộn nó, có nghĩa là bạn có thể làm cho nó trông điên và xấu xí 926 00:54:40,360 --> 00:54:45,400 không có khoảng trắng, khủng khiếp tên biến, để làm cho nó khó khăn hơn cho người dân để ăn cắp IP của bạn, 927 00:54:45,400 --> 00:54:48,120 nhưng quan trọng là nó được thực thi phía trình duyệt. 928 00:54:48,120 --> 00:54:51,790 Mặc dù như là một máy chủ bên ngoài JavaScript có thể được sử dụng, 929 00:54:51,790 --> 00:54:54,480 trường hợp sử dụng phổ biến nhất hiện nay là vẫn còn trên trình duyệt. 930 00:54:54,480 --> 00:54:59,800 Và đây là những gì nó trông giống như. Dưới đây là một if-else if-else xây dựng giống như C, giống như PHP. 931 00:54:59,800 --> 00:55:02,420 Đây là một biểu thức Boolean khi bạn "hoặc" 2 thứ với nhau. 932 00:55:02,420 --> 00:55:04,330 Ở đây là khi bạn "và" 2 thứ với nhau. 933 00:55:04,330 --> 00:55:08,300 Dưới đây là một tuyên bố chuyển đổi, mà là tương tự như PHP 934 00:55:08,300 --> 00:55:10,810 trong đó bạn có thể chuyển đổi trên các loại khác nhau của các giá trị. 935 00:55:10,810 --> 00:55:15,180 Loops tương tự có cho các vòng lặp ở đây, mà được cấu trúc giống hệt với những gì chúng ta đã thấy trước đây. 936 00:55:15,180 --> 00:55:18,110 Trong khi vòng, chúng tôi đã đã làm trong khi vòng lặp. 937 00:55:18,110 --> 00:55:20,290 Biến, bao giờ nên hơi khác nhau. 938 00:55:20,290 --> 00:55:24,560 Bạn khai báo các biến như bạn làm trong PHP và C, 939 00:55:24,560 --> 00:55:27,860 nhưng tương tự như JavaScript yếu gõ. 940 00:55:27,860 --> 00:55:32,730 Bạn không chỉ định int hoặc float hoặc chuỗi hoặc bất cứ điều gì giống như thường. 941 00:55:32,730 --> 00:55:34,240 Bạn có thể chỉ định var. 942 00:55:34,240 --> 00:55:38,040 Bạn không cần phải chỉ định var, nhưng nó có ý nghĩa nếu bạn không. 943 00:55:38,040 --> 00:55:42,000 Thông thường nếu bạn bỏ qua var, bạn vô tình tạo ra một biến toàn cầu thay vì của địa phương. 944 00:55:42,000 --> 00:55:46,420 Vì vậy, hãy để tôi đề nghị bạn hầu như luôn luôn chỉ nói var và sau đó là tên của biến. 945 00:55:46,420 --> 00:55:48,740 Nó không phải một loại, nó chỉ là var cho biến. 946 00:55:48,740 --> 00:55:52,930 Điều này sẽ là một ví dụ, cho dù đó là 123 hoặc "hello thế giới,". 947 00:55:52,930 --> 00:55:58,910 Mảng là hiện tại và cú pháp tương tự như PHP. 948 00:55:58,910 --> 00:56:03,690 Tôi sẽ nói số var và sau đó tôi sử dụng dấu ngoặc vuông một lần nữa để khai báo một biến 949 00:56:03,690 --> 00:56:08,870 có loại là mảng mà có những con số cụ thể cách nhau bằng dấu phẩy. 950 00:56:08,870 --> 00:56:11,740 Và rồi cuối cùng, điều này là người duy nhất thực sự có vẻ khác. 951 00:56:11,740 --> 00:56:16,700 Nhớ lại trong PHP, chúng tôi đã thực hiện một mảng kết hợp cho một học sinh 952 00:56:16,700 --> 00:56:20,220 như Zamyla rằng có thể trông như thế này, nơi mà biến được gọi là sinh viên. 953 00:56:20,220 --> 00:56:23,370 Các dấu ngoặc vuông có nghĩa là ở đây có một mảng. 954 00:56:23,370 --> 00:56:28,500 >> Thực tế là tôi không sử dụng chỉ số, nhưng chuỗi - id, nhà ở, và tên - 955 00:56:28,500 --> 00:56:30,990 có nghĩa rằng đây là một mảng kết hợp, 956 00:56:30,990 --> 00:56:34,490 và những mũi tên với dấu bằng và khung góc cạnh 957 00:56:34,490 --> 00:56:37,310 có nghĩa rằng chính là "id", giá trị là 1; 958 00:56:37,310 --> 00:56:39,310 chính là "nhà", giá trị là Winthrop House; 959 00:56:39,310 --> 00:56:41,800 chính là "tên", giá trị là Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 Vì vậy, có 3 phím bên trong của mảng kết hợp, mỗi trong số đó có giá trị riêng của nó. 961 00:56:47,110 --> 00:56:52,880 Chúng tôi đã nhìn thấy rằng trong 7 pset, hoặc bạn sẽ sớm, trong cùng một ý tưởng JavaScript, 962 00:56:52,880 --> 00:56:55,220 nhưng nó sẽ trông như thế này. 963 00:56:55,220 --> 00:57:00,070 Vì vậy, var sinh viên - không có dấu hiệu đồng đô la và không đề cập đến loại vẫn còn, nhưng var - 964 00:57:00,070 --> 00:57:05,860 bằng và sau đó mở dấu ngoặc nhọn vì trong JavaScript khi bạn có cặp giá trị quan trọng, 965 00:57:05,860 --> 00:57:08,900 bạn thực sự sử dụng một cái gì đó được gọi là một đối tượng. 966 00:57:08,900 --> 00:57:13,490 Và những người bạn của những người đã mất APCS hoặc tương tự có thể nhớ lại các đối tượng từ Java 967 00:57:13,490 --> 00:57:15,140 hoặc tương tự như ngôn ngữ. 968 00:57:15,140 --> 00:57:17,880 JavaScript không phải là Java, đầu tiên của tất cả. 969 00:57:17,880 --> 00:57:21,600 Đó là cách đây một năm thiết kế có chủ ý quyết định đánh bật cái gì khác mà đã được phổ biến, 970 00:57:21,600 --> 00:57:25,640 tên của nó, mặc dù nó không có mối quan hệ cơ bản Java chính nó. 971 00:57:25,640 --> 00:57:31,490 JavaScript có đối tượng, và bạn tạo ra chúng bằng cách của các ký hiệu cú đúp xoăn. 972 00:57:31,490 --> 00:57:36,710 Đối tượng trong JavaScript đang có khá nhiều tương đương với mảng kết hợp trong PHP 973 00:57:36,710 --> 00:57:40,030 khi nói đến việc lưu trữ dữ liệu bên trong của họ. 974 00:57:40,030 --> 00:57:44,100 >> Tuy nhiên, thậm chí còn mạnh mẽ hơn trong JavaScript, bạn có thể kết hợp rất dễ dàng các chức năng 975 00:57:44,100 --> 00:57:48,040 bên trong của một đối tượng, và mặc dù bạn có thể làm điều này trong các ngôn ngữ khác, 976 00:57:48,040 --> 00:57:50,040 đó là một mô hình khá phổ biến, như chúng ta sẽ thấy. 977 00:57:50,040 --> 00:57:54,380 Trong ngắn hạn, đối tượng này đại diện cho một học sinh, người đặc biệt Zamyla, 978 00:57:54,380 --> 00:58:00,380 và nó tương tự như khái niệm, chỉ cú pháp khác nhau từ này. 979 00:58:00,380 --> 00:58:03,840 Hãy để thực sự sử dụng JavaScript trong một tập tin. 980 00:58:03,840 --> 00:58:05,570 Nó chỉ ra có một thẻ script. 981 00:58:05,570 --> 00:58:08,180 Chúng tôi đã nhìn thấy một từ khóa phong cách và chúng tôi đã nhìn thấy thẻ HTML khác. 982 00:58:08,180 --> 00:58:11,510 Các thẻ script sẽ thực sự có chứa một số mã JavaScript. 983 00:58:11,510 --> 00:58:15,500 Hãy để tôi đi vào thiết bị mà chúng tôi có một số mã nguồn tạo trước. 984 00:58:15,500 --> 00:58:18,700 Tôi đã không đăng nó trên trang web, nhưng tôi sẽ làm điều đó sau giờ học. 985 00:58:18,700 --> 00:58:21,770 Hãy mở cửa sổ này, blink.html. 986 00:58:21,770 --> 00:58:27,560 Trở lại những năm 1990, có nghĩa là một thẻ HTML được gọi là thẻ nhấp nháy, 987 00:58:27,560 --> 00:58:30,340 và điều này là một trong các thẻ tuyệt vời lạm dụng nhất trên Internet 988 00:58:30,340 --> 00:58:36,140 nhờ đó mà bạn muốn truy cập vào một số phong cách những năm 1990 trang web và bắt đầu nhìn thấy văn bản nhấp nháy như thế này, 989 00:58:36,140 --> 00:58:39,810 các kết quả của thẻ hầu tước, các văn bản đi như thế này. 990 00:58:39,810 --> 00:58:45,070 Một trong số ít lần mà cả thế giới đã thực sự đồng ý trên một tiêu chuẩn web, 991 00:58:45,070 --> 00:58:48,250 tất cả mọi người trên diện rộng đã giết chết thẻ chớp mắt một vài năm trước đây. 992 00:58:48,250 --> 00:58:52,860 Nhưng chúng ta có thể phục hồi lại với JavaScript như là một minh chứng về sức mạnh mà bạn có 993 00:58:52,860 --> 00:58:56,660 khi bạn có thể viết một chương trình bên trong của một trang web. 994 00:58:56,660 --> 00:59:00,240 Trước tiên chúng ta hãy bỏ qua những thứ mới và chỉ tập trung vào cái cũ. 995 00:59:00,240 --> 00:59:01,780 >> Dưới đây là những thứ cũ trong ví dụ này. 996 00:59:01,780 --> 00:59:06,350 Tôi có một thẻ HTML, tag một cái đầu và một thẻ tiêu đề. 997 00:59:06,350 --> 00:59:11,210 Sau đó, tôi có một thẻ cơ thể ở đây với một div, thu hồi chỉ là một bộ phận hình chữ nhật của trang 998 00:59:11,210 --> 00:59:14,720 mà tôi đã cho một ID duy nhất tùy tiện "lời chào", 999 00:59:14,720 --> 00:59:18,320 chỉ cần như vậy tôi có một cách duy nhất đề cập đến nó, mà có một số văn bản rất đơn giản: 1000 00:59:18,320 --> 00:59:20,220 hello, thế giới. 1001 00:59:20,220 --> 00:59:23,940 Bây giờ hãy để tôi di chuyển lên trên cùng của tập tin này và xem những gì mới. 1002 00:59:23,940 --> 00:59:27,710 Điều đầu tiên đó là đầu lên mới là các thẻ script, 1003 00:59:27,710 --> 00:59:31,280 và bên trong được thông báo thẻ script, tôi đã tuyên bố một chức năng. 1004 00:59:31,280 --> 00:59:34,610 Để khai báo một hàm trong JavaScript, khá tương tự như PHP, 1005 00:59:34,610 --> 00:59:37,930 bạn có nghĩa là viết chức năng sau đó tên của hàm, dấu ngoặc đơn, 1006 00:59:37,930 --> 00:59:40,400 và có thể một số đối số nếu phải mất bất kỳ. 1007 00:59:40,400 --> 00:59:43,510 Sau đó, tôi đã có cú đúp xoăn của tôi là bình thường, và bây giờ chúng tôi có một số mã hơi mới, 1008 00:59:43,510 --> 00:59:45,230 nhưng chúng ta hãy xem điều này có nghĩa là gì. 1009 00:59:45,230 --> 00:59:48,670 Vì vậy, div var, điều này chỉ có nghĩa là cho tôi một div biến được gọi là. 1010 00:59:48,670 --> 00:59:50,530 Tôi có thể gọi nó là foo, nhưng tôi muốn nó được gọi là div 1011 00:59:50,530 --> 00:59:52,620 vì lý do sẽ được rõ ràng trong một giây. 1012 00:59:52,620 --> 00:59:57,480 Sau đó, nó quay ra trong JavaScript - và đây là mã JavaScript được nhúng trong trang web của tôi - 1013 00:59:57,480 --> 01:00:01,760 có một biến toàn cầu đặc biệt của các loại được gọi là tài liệu. 1014 01:00:01,760 --> 01:00:04,780 JavaScript là trong thực tế, một ngôn ngữ hướng đối tượng. 1015 01:00:04,780 --> 01:00:07,230 Chúng tôi sẽ không đi vào chi tiết trong 50 điều đó có nghĩa là gì, 1016 01:00:07,230 --> 01:00:11,180 nhưng bây giờ biết rằng một đối tượng là khá nhiều giống như một cấu trúc. 1017 01:00:11,180 --> 01:00:14,740 Giống như chúng ta đã thấy cách trở lại khi một trong những vấn đề đầu tiên đặt ra 1018 01:00:14,740 --> 01:00:17,150 nơi mà chúng tôi đặt rất nhiều thông tin trong một cấu trúc, 1019 01:00:17,150 --> 01:00:21,330 tương tự là tài liệu một cấu trúc đặc biệt đi kèm với trình duyệt, 1020 01:00:21,330 --> 01:00:24,810 đi kèm với bất kỳ trang web nào. Đó không phải là một cái gì đó tôi tạo ra. 1021 01:00:24,810 --> 01:00:28,210 Bên trong cấu trúc tài liệu này, tuy nhiên, bạn có không chỉ dữ liệu 1022 01:00:28,210 --> 01:00:30,010 nhưng bạn cũng có chức năng. 1023 01:00:30,010 --> 01:00:34,090 >> Và bất cứ lúc nào bạn có một chức năng bên trong của một cấu trúc, bên trong của một đối tượng, 1024 01:00:34,090 --> 01:00:36,490 nó được gọi là một phương pháp. Nhưng đó là điều tương tự. 1025 01:00:36,490 --> 01:00:40,110 Một phương thức là một chức năng mà chỉ để xảy ra để được bên trong của cái gì khác. 1026 01:00:40,110 --> 01:00:42,990 Vì vậy, điều này có nghĩa là tài liệu gọi là biến toàn cầu đặc biệt này 1027 01:00:42,990 --> 01:00:47,690 một chức năng được gọi là getElementById mà nghĩa đen nào đó. 1028 01:00:47,690 --> 01:00:52,460 Nó sẽ giúp bạn có một phần tử từ DOM Document Object Model cây, 1029 01:00:52,460 --> 01:00:55,520 có ID là trong trường hợp thiệp này. 1030 01:00:55,520 --> 01:00:59,200 Nói cách khác, tất cả thời gian đó chúng tôi đã dành trên cấu trúc dữ liệu đi vào chơi ở đây. 1031 01:00:59,200 --> 01:01:01,400 Hình ảnh về một DOM rằng chúng tôi đã có một chút thời gian trước đây, 1032 01:01:01,400 --> 01:01:06,100 mặc dù trang là một chút khác nhau, nếu tôi đã có một div trong bức hình này, 1033 01:01:06,100 --> 01:01:11,180 những gì document.getElementById sẽ trở lại để tôi có hiệu quả sẽ là một con trỏ 1034 01:01:11,180 --> 01:01:15,440 hình chữ nhật trong cây, một tham chiếu đến hình chữ nhật trong cây. 1035 01:01:15,440 --> 01:01:18,410 Vì vậy, đó là những gì nó có nghĩa là để thực sự gọi một trong những chức năng. 1036 01:01:18,410 --> 01:01:21,960 Trong trường hợp này, một lần nữa nó là một div. Nó không phải là một cơ quan, một tiêu đề. 1037 01:01:21,960 --> 01:01:26,480 Vì vậy, chúng ta hãy xem những gì tôi sau đó làm với div này bây giờ mà tôi có nó bên trong thẻ div này được gọi là biến. 1038 01:01:26,480 --> 01:01:32,580 Hóa ra với JavaScript bạn có khả năng để tinh chỉnh CSS của trang của bạn tự động. 1039 01:01:32,580 --> 01:01:39,060 Cho đến bây giờ, tất cả các của CSS chúng tôi đã thực hiện, mặc dù hạn chế, là trong các thuộc tính phong cách, 1040 01:01:39,060 --> 01:01:41,730 hoặc nơi nào khác chúng ta đặt CSS? 1041 01:01:42,730 --> 01:01:45,810 Tôi loại hư hỏng là một trong những. Trong thẻ phong cách ở phía trên cùng của tập tin. 1042 01:01:45,810 --> 01:01:49,180 Hoặc vị trí thứ ba đã được trong? 1043 01:01:50,710 --> 01:01:54,590 >> Một tập tin bên ngoài, một cái gì đó. Css. 1044 01:01:54,590 --> 01:01:56,730 Vì vậy, những người đang có 3 địa điểm chúng tôi đã thực hiện CSS vậy, đến nay, 1045 01:01:56,730 --> 01:01:59,310 nhưng bắt chúng tôi đã cứng mã hoá tất cả. 1046 01:01:59,310 --> 01:02:04,060 Bạn đã quyết định như lao vào pset 7, chúng tôi đã quyết định trước khi giảng dạy CSS của chúng tôi sẽ được. 1047 01:02:04,060 --> 01:02:07,380 Nhưng nếu bạn muốn thay đổi CSS của bạn, bạn thực sự có thể làm điều đó 1048 01:02:07,380 --> 01:02:09,370 một khi bạn có một ngôn ngữ lập trình thực tế. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - không phải là ngôn ngữ lập trình. JavaScript là. 1050 01:02:13,910 --> 01:02:18,200 Vì vậy, nó chỉ ra rằng ngay sau khi bạn có một trong những hình chữ nhật từ cây 1051 01:02:18,200 --> 01:02:23,050 được gọi là DOM, nó có một số dữ liệu bên trong của nó. 1052 01:02:23,050 --> 01:02:27,820 Vì vậy, các div mà tôi chỉ lấy từ cây có những gì chúng ta sẽ gọi một tài sản bên trong của nó 1053 01:02:27,820 --> 01:02:34,390 được gọi là phong cách, và tài sản phong cách có một tài sản được gọi là khả năng hiển thị. 1054 01:02:34,390 --> 01:02:37,330 Tôi sẽ biết điều này chỉ bằng cách nhìn lên hướng dẫn sử dụng của một người sử dụng CSS. 1055 01:02:37,330 --> 01:02:41,160 Nó chỉ ra có một sở hữu khả năng hiển thị CSS mà những gì nó nói. 1056 01:02:41,160 --> 01:02:44,530 Nó làm cho một cái gì đó có thể nhìn thấy hoặc không nhìn thấy hay không. 1057 01:02:44,530 --> 01:02:46,810 Và làm thế nào bạn làm điều đó. 1058 01:02:46,810 --> 01:02:50,510 Tôi đang yêu cầu lập trình, nếu khả năng hiển thị của div này được ẩn, 1059 01:02:50,510 --> 01:02:53,390 tôi phải làm gì thay đổi nó? Nhìn thấy được. 1060 01:02:53,390 --> 01:02:58,840 Khác nếu khả năng hiển thị của trang này không phải là ẩn, một cách logic tôi làm cho nó ẩn. 1061 01:02:58,840 --> 01:03:04,070 Tôi không có ý tưởng tại sao nó có thể nhìn thấy và ẩn và không thể nhìn thấy và vô hình. 1062 01:03:04,070 --> 01:03:06,000 Đây là một quyết định thiết kế nghèo trên đường đi. 1063 01:03:06,000 --> 01:03:09,530 Nhưng những người thực sự đối lập trong CSS: nhìn thấy và ẩn. 1064 01:03:09,530 --> 01:03:15,520 Tất cả những điều này là nó có nghĩa là thay đổi CSS của tập tin của tôi và tắt, và tắt 1065 01:03:15,520 --> 01:03:16,870 cho rằng div cụ thể. 1066 01:03:16,870 --> 01:03:20,630 Nhưng một lần nữa, đây là một chức năng được gọi là chớp mắt. Khi chức năng chớp được gọi là? 1067 01:03:20,630 --> 01:03:24,080 Nó chỉ ra rằng có một cửa sổ toàn cầu đặc biệt khác được gọi là biến, 1068 01:03:24,080 --> 01:03:28,220 tương tự trong tinh thần tài liệu, nhưng trong khi tài liệu đề cập đến trang web của bạn, 1069 01:03:28,220 --> 01:03:31,700 giống như cây DOM, HTML bạn gửi từ máy chủ, 1070 01:03:31,700 --> 01:03:35,250 cửa sổ đề cập đến chrome xung quanh nó, thanh địa chỉ, thanh tiêu đề, 1071 01:03:35,250 --> 01:03:37,880 và tất cả những thứ xung quanh trang web của bạn. 1072 01:03:37,880 --> 01:03:42,800 >> Và nó chỉ ra rằng đối tượng cửa sổ có một chức năng đặc biệt bên trong của nó được gọi là setInterval 1073 01:03:42,800 --> 01:03:44,360 mà thực hiện những gì nó nói. 1074 01:03:44,360 --> 01:03:48,600 Nó sẽ thiết lập một khoảng thời gian - trong trường hợp này mỗi 500 mili giây - 1075 01:03:48,600 --> 01:03:52,270 và có nhiều phán đoán, nó là những gì sẽ làm mỗi 500 mili giây? 1076 01:03:52,270 --> 01:03:55,240 Nó sẽ thực hiện blink chức năng đó. 1077 01:03:55,240 --> 01:03:58,560 Và những gì tốt đẹp ở đây là rằng chúng tôi có thể làm điều này trong C mặc dù chúng ta không bao giờ làm. 1078 01:03:58,560 --> 01:04:01,580 C không có một cái gì đó gọi là con trỏ chức năng nơi bạn có thể vượt qua chức năng xung quanh 1079 01:04:01,580 --> 01:04:03,140 như các đối số. 1080 01:04:03,140 --> 01:04:07,620 Tương tự như vậy trong JavaScript, bạn có thể vượt qua các tên của một chức năng vào chức năng khác. 1081 01:04:07,620 --> 01:04:10,630 Và chú ý những gì tôi đang làm. Tôi không làm điều này. 1082 01:04:10,630 --> 01:04:14,380 Nếu tôi đặt dấu ngoặc đơn sau khi nhấp nháy, điều đó sẽ có nghĩa là gọi hàm chớp. 1083 01:04:14,380 --> 01:04:17,430 Nếu tôi bỏ qua chúng, có nghĩa là đây là chức năng nhấp nháy 1084 01:04:17,430 --> 01:04:21,330 để setInterval có thể gọi nó mỗi 500 mili giây. 1085 01:04:21,330 --> 01:04:28,200 Vì vậy, kết quả cuối cùng, tồi tệ mặc dù nó là, là nếu tôi đi vào localhost và đi đến blink.html, 1086 01:04:28,200 --> 01:04:32,120 Tôi đã có điều này xảy ra một lần nữa và một lần nữa. 1087 01:04:32,120 --> 01:04:34,950 Và nếu tôi thực sự kiểm tra nguyên tố, chúng ta hãy xem nếu chúng ta có thể thấy điều này. 1088 01:04:34,950 --> 01:04:38,550 Hãy để tôi kiểm tra nguyên tố, hãy để tôi di chuyển xuống chỉ là một chút, 1089 01:04:38,550 --> 01:04:44,320 hãy để tôi lựa chọn các yếu tố trên đây, và nhận thấy bên trong DOM thanh tra của Chrome. 1090 01:04:44,320 --> 01:04:48,840 Nó nghĩa là thay đổi qua lại mỗi 500 mili giây. 1091 01:04:48,840 --> 01:04:55,660 Nếu chúng ta đi cho bạn bè của chúng tôi Nate, 1092 01:04:55,660 --> 01:05:00,020 nếu bạn đã bao giờ tự hỏi làm thế nào điều này đang làm việc, ý tưởng tương tự với khoảng thời gian một, 1093 01:05:00,020 --> 01:05:04,810 nhưng Nate thực sự làm cho sử dụng rất hiệu quả của màu sắc trong trường hợp này cụ thể ở đây. 1094 01:05:04,810 --> 01:05:07,350 Vì vậy, nhiều hơn những gì chúng ta có thể thực sự làm gì với điều này? 1095 01:05:07,350 --> 01:05:09,990 Hãy mở ra một ví dụ khác và thử một cái gì đó 1096 01:05:09,990 --> 01:05:12,940 đó là chương trình hữu ích hơn hơn là làm những điều chớp. 1097 01:05:12,940 --> 01:05:17,990 Hãy để tôi đi vào thư mục hình thức của chúng tôi ngày hôm nay và đi vào form0. 1098 01:05:17,990 --> 01:05:20,820 Đây là hình thức xấu nhất có thể là tôi có thể đưa ra, 1099 01:05:20,820 --> 01:05:23,290 và hãy để tôi chỉ cho bạn thấy những gì nó trông giống như trong một trình duyệt. 1100 01:05:23,290 --> 01:05:28,960 >> Hãy để tôi đi vào localhost / hình thức, và điều này là form0. 1101 01:05:28,960 --> 01:05:33,400 Đây là một siêu mẫu HTML xấu xí mà có một vài lĩnh vực cho email, mật khẩu, 1102 01:05:33,400 --> 01:05:37,190 mật khẩu, và sau đó một hộp kiểm nhỏ phải đồng ý với một số điều khoản và điều kiện. 1103 01:05:37,190 --> 01:05:41,350 Việc nắm bắt là nếu tôi truy cập vào mẫu đơn này và tôi không muốn cung cấp cho bạn địa chỉ email của tôi, 1104 01:05:41,350 --> 01:05:44,730 Tôi không muốn để đồng ý với các điều khoản và điều kiện có thể, tôi có thể nhấn Đăng ký 1105 01:05:44,730 --> 01:05:46,920 và nó cho phép tôi qua anyway. 1106 01:05:46,920 --> 01:05:50,800 Điều này xảy ra trình file PHP ngu ngốc gọi là dump.php. 1107 01:05:50,800 --> 01:05:58,420 Tất cả nó là in ra các nội dung của $ _GET chỉ dành cho mục đích chẩn đoán. 1108 01:05:58,420 --> 01:06:01,580 Đó là những gì đã được gửi bởi người sử dụng chỉ cần ngay bây giờ. 1109 01:06:01,580 --> 01:06:05,010 Nhưng giả sử chúng tôi thực sự muốn để xác nhận hình thức trình của người sử dụng. 1110 01:06:05,010 --> 01:06:06,530 Hãy để tôi đi vào phiên bản 1. 1111 01:06:06,530 --> 01:06:11,420 Đây là form1.html. Có vẻ thẩm mỹ chỉ là xấu, nhưng nhận thấy nó là lạ mắt như thế nào. 1112 01:06:11,420 --> 01:06:15,450 Nếu tôi nhấp vào đăng ký mà không hợp tác, tôi bị mắng. 1113 01:06:15,450 --> 01:06:17,320 "Bạn phải cung cấp địa chỉ email của bạn." 1114 01:06:17,320 --> 01:06:21,670 Được rồi. Vì vậy, hãy để tôi thử. Vì vậy, malan@harvard.edu. Tôi không cần một mật khẩu. 1115 01:06:21,670 --> 01:06:25,100 Đăng ký. "Bạn phải cung cấp một mật khẩu." Được rồi. 1116 01:06:25,100 --> 01:06:28,470 Vì vậy, tôi sẽ cung cấp một mật khẩu màu đỏ thẫm. Đăng ký. 1117 01:06:28,470 --> 01:06:32,300 "Mật khẩu không khớp." Tôi phải gõ đỏ thẫm đây. 1118 01:06:32,300 --> 01:06:35,710 Tôi vô tình kiểm tra đó. Đăng ký. 1119 01:06:35,710 --> 01:06:39,860 "Bạn phải đồng ý với các điều khoản và điều kiện." Được rồi. Đồng ý. Đăng ký. 1120 01:06:39,860 --> 01:06:43,700 Và bây giờ nó cho thấy tôi chẩn đoán sản lượng trên đó. 1121 01:06:43,700 --> 01:06:45,630 >> Vì vậy, những gì vừa xảy ra? 1122 01:06:45,630 --> 01:06:48,330 Chúng tôi đã có khả năng này để xác nhận hình thức đệ trình. 1123 01:06:48,330 --> 01:06:51,420 Trong thực tế, nếu bạn đã bổ nhào vào pset 7, có một chức năng xin lỗi 1124 01:06:51,420 --> 01:06:54,620 mà làm cho nó khá dễ dàng để la lên với người sử dụng với một tin nhắn trên màn hình. 1125 01:06:54,620 --> 01:06:57,580 Tôi đang sử dụng một cơ chế hơi khác nhau, chức năng cảnh báo, 1126 01:06:57,580 --> 01:07:03,690 mà không phải là một chức năng đó là mỉm cười khi vì nó làm cho thông báo người dùng rất xấu xí. 1127 01:07:03,690 --> 01:07:05,710 Nhưng chúng ta hãy xem những gì tôi đang làm ở đây. 1128 01:07:05,710 --> 01:07:09,620 Đây là form1.html, và nhận thấy rằng tôi có một số cú pháp khá quen thuộc: 1129 01:07:09,620 --> 01:07:12,920 body, mẫu thẻ, thuộc tính hành động, phương pháp thuộc tính. 1130 01:07:12,920 --> 01:07:17,050 Nhưng hãy chú ý tôi đã đưa ra hình thức của tôi một ID duy nhất cho thuận tiện. 1131 01:07:17,050 --> 01:07:19,190 Sau đó, tôi đã có một trường email có kiểu là văn bản, 1132 01:07:19,190 --> 01:07:23,780 một lĩnh vực mật khẩu có loại là mật khẩu, xác nhận lĩnh vực có loại là mật khẩu, 1133 01:07:23,780 --> 01:07:28,070 và sau đó một hộp kiểm có tên là thỏa thuận trên đây, là loại hộp kiểm. 1134 01:07:28,070 --> 01:07:30,380 Và sau đó tôi đã có một nút submit. 1135 01:07:30,380 --> 01:07:33,050 Nhưng hãy chú ý ở phía trên tôi nhiều hơn những gì có. 1136 01:07:33,050 --> 01:07:35,810 Trước hết, có một sử dụng các thẻ script. 1137 01:07:35,810 --> 01:07:40,520 Nếu bạn có một số mã JavaScript trong tập tin khác, giống như với CSS, bạn có thể bao gồm nó. 1138 01:07:40,520 --> 01:07:44,530 Và bạn làm điều đó với nguồn kịch bản, và sau đó nhận thấy tôi đang kết nối rõ ràng 1139 01:07:44,530 --> 01:07:50,349 googleapis.com một con đường rất dài nhưng kết thúc tên tập tin có trong jquery.min 1140 01:07:50,349 --> 01:07:52,420 cho tối thiểu js. 1141 01:07:52,420 --> 01:07:55,969 jQuery là một thư viện phổ biến JavaScript siêu cho đó chỉ làm cho JavaScript 1142 01:07:55,969 --> 01:07:58,230 tất cả các thân thiện với người sử dụng để sử dụng. 1143 01:07:58,230 --> 01:08:00,610 Hiệu quả trở thành một tiêu chuẩn de facto. 1144 01:08:00,610 --> 01:08:04,090 Vì vậy, mặc dù những gì bạn đang về để xem không phải là tinh khiết JavaScript cho mỗi gia nhập, 1145 01:08:04,090 --> 01:08:09,340 nó là một thư viện trên đầu trang của JavaScript giống như các thư viện CS50 là một lớp 1146 01:08:09,340 --> 01:08:13,670 trên đầu trang của mã C ở mức độ thấp, thực tế là hầu như tất cả mọi người trên Internet sử dụng nó. 1147 01:08:13,670 --> 01:08:18,030 Vì vậy, đây không phải là bánh xe đào tạo. Đây chỉ là tốt nhất thực hành những ngày này. 1148 01:08:18,030 --> 01:08:22,830 Bây giờ chú ý dưới đây là thẻ script riêng của tôi, và chú ý những gì tôi đã thực hiện ở đây. 1149 01:08:22,830 --> 01:08:27,450 Nó chỉ ra rằng jQuery không ưa thích một cái gì đó một chút. 1150 01:08:27,450 --> 01:08:29,660 JavaScript có dấu hiệu đồng đô la, nhưng họ là vô nghĩa. 1151 01:08:29,660 --> 01:08:32,870 >> Họ giống như những chữ cái A hoặc B hoặc C. 1152 01:08:32,870 --> 01:08:36,670 jQuery đã chỉ đơn giản là thông qua các hội nghị hoặc yêu cầu bồi thường đặt thực tế 1153 01:08:36,670 --> 01:08:40,280 rằng $ sẽ là biểu tượng đặc biệt của họ. 1154 01:08:40,280 --> 01:08:44,950 Vì vậy, ngay sau khi bạn tải tập tin này JavaScript toàn cầu ở đây với các thẻ script, 1155 01:08:44,950 --> 01:08:49,080 bạn có quyền truy cập vào một biến toàn cầu đặc biệt được gọi là $. 1156 01:08:49,080 --> 01:08:53,009 Nó đúng hơn là jQuery, nhưng điều đó không nhìn gần như là sexy như là $. 1157 01:08:53,009 --> 01:08:56,250 Nhưng $ không có ý nghĩa đặc biệt. Trong PHP, nó có ý nghĩa đặc biệt. 1158 01:08:56,250 --> 01:08:58,440 Bạn phải có nó ở phía trước của một biến. 1159 01:08:58,440 --> 01:09:01,670 Đây chỉ là một điều gợi cảm mà họ đã. 1160 01:09:01,670 --> 01:09:03,389 Điều gì đang xảy ra ở đây? 1161 01:09:03,389 --> 01:09:08,830 Thông báo tôi đang đi qua để các chức năng jQuery tài liệu biến toàn cầu của tôi 1162 01:09:08,830 --> 01:09:10,860 và sau đó tôi gọi điện thoại đã sẵn sàng. 1163 01:09:10,860 --> 01:09:15,480 Gì jQuery cơ bản là nó cho phép bạn để có những điều một vài JavaScript vani 1164 01:09:15,480 --> 01:09:17,889 như đối tượng tài liệu, đối tượng cửa sổ, 1165 01:09:17,889 --> 01:09:20,790 và nếu bạn vượt qua nó trong chức năng jQuery - 1166 01:09:20,790 --> 01:09:24,429 và một lần nữa, để được rõ ràng, đây là một chức năng được gọi là jQuery - 1167 01:09:24,429 --> 01:09:28,240 những gì nó là nó sẽ trả về cho bạn một phiên bản đặc biệt của tài liệu 1168 01:09:28,240 --> 01:09:30,700 có nhiều chức năng hơn liên kết với nó. 1169 01:09:30,700 --> 01:09:34,760 Vì vậy, trong JavaScript liệu có là không có chức năng sẵn sàng, 1170 01:09:34,760 --> 01:09:37,810 nhưng nếu bạn vượt qua tài liệu để chức năng jQuery đầu tiên, 1171 01:09:37,810 --> 01:09:40,960 nó sẽ trả về cho bạn một phiên bản đặc biệt của đối tượng tài liệu 1172 01:09:40,960 --> 01:09:43,030 có các tính năng ưa thích hơn. 1173 01:09:43,030 --> 01:09:48,230 Và đó là lý do tại sao mọi người thích nó. Nó chỉ làm cho mọi thứ dễ dàng hơn để làm, như chúng tôi đang về để xem. 1174 01:09:48,230 --> 01:09:49,820 Vì vậy, dòng mã này có nghĩa gì? 1175 01:09:49,820 --> 01:09:52,690 Dòng mã này ở đây có nghĩa là khi tài liệu đã sẵn sàng - 1176 01:09:52,690 --> 01:09:56,830 nói cách khác, một khi trình duyệt được thực hiện đọc sách này trên tập tin xuống dưới - 1177 01:09:56,830 --> 01:09:59,200 đi trước và thực hiện các chức năng sau đây. 1178 01:09:59,200 --> 01:10:03,540 Những gì thực sự thú vị trong JavaScript và PHP có điều này là tốt 1179 01:10:03,540 --> 01:10:05,450 là chức năng ẩn danh. 1180 01:10:05,450 --> 01:10:10,560 Trong JavaScript, bạn có thể khai báo các chức năng mà không có tên nhưng họ không có một cơ thể. 1181 01:10:10,560 --> 01:10:12,570 Chú ý những gì đang xảy ra ở đây. 1182 01:10:12,570 --> 01:10:16,220 >> Đây là một chức năng gọi là sẵn sàng, và nó chỉ có nghĩa là làm như sau 1183 01:10:16,220 --> 01:10:20,220 khi toàn bộ trang web đã sẵn sàng, khi tất cả được đọc trong từ máy chủ. 1184 01:10:20,220 --> 01:10:23,090 Những gì bạn muốn làm gì? Tôi muốn thực hiện một đoạn mã. 1185 01:10:23,090 --> 01:10:27,120 Chú ý rằng chúng tôi không muốn thực thi mã này ngay lập tức. 1186 01:10:27,120 --> 01:10:34,350 Nếu tôi bỏ qua điều này, điều này có nghĩa là ngay lập tức bắt đầu thực hiện các dòng mã. 1187 01:10:34,350 --> 01:10:39,040 Tuy nhiên, thực tế là tôi đang nói không, không, không, bọc này trong một chức năng vô danh như thế này 1188 01:10:39,040 --> 01:10:43,000 có nghĩa là không thực hiện nó được nêu ra, gọi nó là cuối cùng. 1189 01:10:43,000 --> 01:10:45,430 Chúng tôi thấy điều này một chút thời gian trước đây trong ví dụ trước đây của chúng tôi. 1190 01:10:45,430 --> 01:10:49,990 Những gì chức năng mà chúng ta gọi là cuối cùng, 500 mili giây sau đó? Nhấp nháy. 1191 01:10:49,990 --> 01:10:51,480 Vì vậy, cùng ý tưởng. 1192 01:10:51,480 --> 01:10:53,950 Một lần nữa, ngay cả khi điều này có vẻ một chút lạ, chỉ cần mang về đức tin 1193 01:10:53,950 --> 01:10:57,060 rằng để khai báo một chức năng ẩn danh được gọi là cuối cùng, 1194 01:10:57,060 --> 01:11:01,720 bạn chỉ cần viết function () { 1195 01:11:01,720 --> 01:11:05,380 Vì vậy, những gì mã chúng ta sẽ thực hiện cuối cùng? Sau đây. 1196 01:11:05,380 --> 01:11:10,460 Điều này cũng có vẻ một chút, nhưng điều này có nghĩa là ở đây là chức năng jQuery, 1197 01:11:10,460 --> 01:11:13,430 và điều này là một phím tắt. 1198 01:11:13,430 --> 01:11:18,830 Đoạn mã HTML này ở dưới cùng của màn hình tất nhiên có một số cây đại diện. 1199 01:11:18,830 --> 01:11:21,730 Nó không phải điều này. Trang này là thú vị hơn ví dụ này, thế giới hello,. 1200 01:11:21,730 --> 01:11:25,210 Nhưng có một số cây tương ứng với tập tin HTML này. 1201 01:11:25,210 --> 01:11:28,910 Nó sẽ là một cơn đau ở cổ phải thực hiện một số loại chức năng đệ quy 1202 01:11:28,910 --> 01:11:34,380 bắt đầu từ nút gốc và sau đó tìm nút có ID là đăng ký. 1203 01:11:34,380 --> 01:11:38,340 Vì vậy, những gì jQuery làm cho siêu dễ dàng đối với chúng tôi là nghĩa đen. 1204 01:11:38,340 --> 01:11:43,000 Đi trước và làm cho tôi bất cứ điều gì div hoặc hình thức bất cứ điều gì, bất cứ phần tử HTML 1205 01:11:43,000 --> 01:11:45,820 có một ID đăng ký. 1206 01:11:45,820 --> 01:11:52,440 Điều này tương đương với document.getElementById ('đăng ký'). 1207 01:11:52,440 --> 01:11:54,170 >> Tại sao những người như jQuery? 1208 01:11:54,170 --> 01:12:00,110 Bởi vì nó ngắn hơn để loại. Nhưng đó là tất cả nó được. Đó là ý tưởng tương tự. 1209 01:12:00,110 --> 01:12:02,630 Hãy cho tôi thẻ có ID là đăng ký. 1210 01:12:02,630 --> 01:12:06,300 Và khi điều đó tag, mà sẽ xảy ra là một hình thức, được gửi, 1211 01:12:06,300 --> 01:12:08,300 đi trước và thực thi mã này. 1212 01:12:08,300 --> 01:12:11,320 Vì vậy, chúng ta hãy một cái nhìn hiện tại như thế nào chúng tôi đang làm hình thức xác nhận. 1213 01:12:11,320 --> 01:12:15,950 Cú pháp là thừa nhận khó hiểu lúc đầu, nhưng những gì đang xảy ra? 1214 01:12:15,950 --> 01:12:21,050 Nếu dòng mã này là sự thật, tôi sẽ la lên với người sử dụng để cung cấp địa chỉ email của mình. 1215 01:12:21,050 --> 01:12:22,970 Vì vậy, dòng mã này là những gì? 1216 01:12:22,970 --> 01:12:25,560 $ Có nghĩa là jQuery. Bây giờ nhận thấy điều này. 1217 01:12:25,560 --> 01:12:27,920 Đây là loại giống như CSS. 1218 01:12:27,920 --> 01:12:33,370 Nếu bạn đã nhảy vào CSS, bạn sẽ biết rằng điều này có nghĩa là các yếu tố có ID đăng ký. 1219 01:12:33,370 --> 01:12:39,840 Không gian có nghĩa là tìm thấy một con hoặc con cháu đăng ký có tên là đầu vào. 1220 01:12:39,840 --> 01:12:42,970 Và sau đó điều này trong dấu ngoặc vuông là một bộ lọc nhỏ. 1221 01:12:42,970 --> 01:12:47,010 Và thậm chí nếu điều này có vẻ khó hiểu, điều này chỉ có nghĩa là đi mẫu có ID đăng ký, 1222 01:12:47,010 --> 01:12:51,230 đi đến các yếu tố đầu vào bên trong đó có tên là email, 1223 01:12:51,230 --> 01:12:55,440 và sau đó nhận được giá trị của nó, giá trị của nó bất cứ điều gì sẽ xảy ra là - 1224 01:12:55,440 --> 01:12:59,670 asdf nếu đó là tất cả những gì tôi đánh máy hoặc malan@harvard.edu nếu đó là những gì tôi đã gõ. 1225 01:12:59,670 --> 01:13:05,250 Vì vậy, nếu giá trị của lĩnh vực email không có gì == của hình thức, la lên với người sử dụng. 1226 01:13:05,250 --> 01:13:09,700 Khác nếu giá trị của lĩnh vực mật khẩu == không có gì, la lên với người sử dụng. 1227 01:13:09,700 --> 01:13:19,520 >> Khác nếu giá trị của lĩnh vực mật khẩu không bằng giá trị của trường xác nhận, 1228 01:13:19,520 --> 01:13:22,850 đó là yếu tố hình thức khác, la lên với người sử dụng. 1229 01:13:22,850 --> 01:13:25,680 Và sau đó cuối cùng - và một trong những điều này quá có một số cú pháp mới của riêng nó, 1230 01:13:25,680 --> 01:13:29,270 nhưng một khi bạn đã nhìn thấy nó, nó ít nhất là một chút hợp lý hơn - 1231 01:13:29,270 --> 01:13:34,060 nếu người nào khác dưới hình thức có ID là đăng ký có một yếu tố đầu vào có tên là thỏa thuận 1232 01:13:34,060 --> 01:13:39,720 và nó được kiểm tra, đi trước và la lên với người sử dụng. 1233 01:13:39,720 --> 01:13:42,520 Vì vậy, tôi hoàn toàn thừa nhận điều này là hoàn toàn áp đảo ở cái nhìn đầu tiên. 1234 01:13:42,520 --> 01:13:46,530 Đó là rất nhiều cú pháp mới. Nhưng tất cả của jQuery theo các kiểu mẫu. 1235 01:13:46,530 --> 01:13:49,880 Và trung thực, tôi đã thậm chí không biết điều này tồn tại cho đến khi một vài phút trước đây. 1236 01:13:49,880 --> 01:13:53,640 Tôi google, "Làm thế nào để bạn kiểm tra nếu hộp kiểm được kiểm tra trong jQuery?" 1237 01:13:53,640 --> 01:13:55,680 và đây là cú pháp, bởi vì có nhiều cách khác nhau để làm việc đó 1238 01:13:55,680 --> 01:13:58,010 với mã JavaScript liệu thực tế. 1239 01:13:58,010 --> 01:14:01,030 Vì vậy, khi trang đầu tiên của 7 Set Vấn đề nhấn mạnh, 1240 01:14:01,030 --> 01:14:04,500 pset 7 là rất nhiều một bài tập trong bootstrapping mình 1241 01:14:04,500 --> 01:14:08,650 nơi mà chúng tôi đã cung cấp, hy vọng, một khung khái niệm để giải quyết pset. 1242 01:14:08,650 --> 01:14:12,280 >> Tuy nhiên, như thường là trường hợp với thiết kế web, đó là vào bạn thực sự để poke xung quanh, 1243 01:14:12,280 --> 01:14:16,680 kết hợp các đoạn mã và các ví dụ từ trang web miễn là bạn trích dẫn 1244 01:14:16,680 --> 01:14:17,960 theo các điều khoản trên rằng trang thông tin đầu tiên, 1245 01:14:17,960 --> 01:14:21,460 và nhận ra rằng việc học HTML, CSS, JavaScript và thậm chí SQL 1246 01:14:21,460 --> 01:14:26,020 thực sự có nghĩa là bài tập này tại nhà như chúng ta bắt đầu có những bánh xe đào tạo. 1247 01:14:26,020 --> 01:14:29,150 Và nhận ra quá có rất nhiều điều bạn có thể làm với một trình duyệt. 1248 01:14:29,150 --> 01:14:33,790 Bên trong của hầu hết các yếu tố này có những thứ khác được gọi là xử lý sự kiện. 1249 01:14:33,790 --> 01:14:37,140 Và mặc dù chúng ta chỉ cần nhìn vào những người được gọi là onsubmit và onready, 1250 01:14:37,140 --> 01:14:40,310 bạn có thể làm những việc như OnKeyDown, onkeyup, 1251 01:14:40,310 --> 01:14:43,410 như khi người dùng chạm vào một phím, bạn có thể lắng nghe và lên khóa. 1252 01:14:43,410 --> 01:14:45,940 Gmail có phím tắt. 1253 01:14:45,940 --> 01:14:49,490 Làm thế nào để Google thực hiện các phím tắt như C cho sáng tác? 1254 01:14:49,490 --> 01:14:54,120 Họ lắng nghe cho các sự kiện, như chúng được gọi, như OnKeyPress hoặc onkeyup và OnKeyDown. 1255 01:14:54,120 --> 01:14:56,360 Nếu bạn đã từng quét chuột qua một số tùy chọn trình đơn 1256 01:14:56,360 --> 01:15:00,180 và tất cả của một đột ngột, thì đấy, một trình đơn xuất hiện hoặc thay đổi màu sắc đồ họa, 1257 01:15:00,180 --> 01:15:01,920 làm thế nào họ làm điều đó? 1258 01:15:01,920 --> 01:15:06,940 Thay vì lắng nghe cho onready hoặc onsubmit, bạn lắng nghe cho onmouseover hoặc onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> Vì vậy, trong ngắn hạn, với những điều cơ bản rất đơn giản mà chúng tôi đã bắt đầu làm xước bề mặt của ngày hôm nay 1260 01:15:10,920 --> 01:15:13,940 và chúng tôi sẽ đi sâu vào hơn nữa để ngày Thứ tư, bạn có, càng, 1261 01:15:13,940 --> 01:15:17,530 sức mạnh để thực hiện các loại của những điều mà bạn đã quen thuộc với. 1262 01:15:17,530 --> 01:15:21,620 Vì vậy, chúng ta hãy dừng lại ở đó, và chúng tôi sẽ tiếp tục điều này hôm thứ tư. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]