[MUSIC CHƠI] 

DAVID Malan: Đây là CS 50, và đây là sự bắt đầu của tuần chín. Và những gì chúng tôi nghĩ rằng chúng tôi làm hôm nay không phải là chỉ đóng chương về tuần trước các tài liệu mà chúng tôi tập trung trên máy chủ lập trình web với PHP và bên SQL, một số công cụ cơ sở dữ liệu. Chúng tôi sẽ nói về một chút an ninh hiện nay và sau đó chuyển đổi sang một lập trình phía khách hàng ngôn ngữ được gọi là JavaScript. Nhưng trước tiên, một số mua lại. 

Bạn có thể nhớ lại rằng vào Thứ tư, tôi đặt ra để viết một trang web mất trong đầu vào của người dùng bởi một mẫu mã HTML mà sau đó được lưu trữ rằng tên người sử dụng, điện thoại số, và điện thoại di động tàu sân bay trong cơ sở dữ liệu. Và sau đó tôi đã có một lệnh nhỏ dòng kịch bản được viết bằng PHP lẽ ra phải lặp trên các hàng trong cơ sở dữ liệu và gửi tin nhắn văn bản. Mặc dù nhiều, nhiều nỗ lực, chúng tôi không được làm việc đó bằng cách kết thúc. 

Vì vậy, tôi đã dành cả tuần làm việc này trên đoạn mã đó để có được chúng tôi qua các điểm nơi chúng tôi rời đi, theo đó tất cả Tôi có vào cuối thứ tư là tin nhắn văn bản này từ Margo như tôi đấu tranh, theo sau là một tin nhắn văn bản từ một bạn cùng lớp, bạn đã có David này. Tiếp theo là thế này, tuyệt vời đáng khích lệ. Tiếp tục đi, rất phấn khởi. Tôi gần như đã nhận nó cho đến khi then-- và đó là lưu ý chúng tôi kết thúc vào hôm thứ Tư. Và sau đó thực sự có lẽ yêu thích của tôi, một lúc sau, điều này bước vào. Chết tiệt Sống Stream. 

Vì vậy, ngày hôm nay, chúng tôi sửa lỗi này với một cách nhanh chóng nhìn vào những gì tôi đã làm được kể từ. Vì vậy, tất cả các mã này có sẵn trực tuyến từ tuần trước, tuần thứ tám, mã nguồn. Và bạn sẽ thấy rằng tôi đã đi qua, và tôi thực sự làm sạch mọi thứ một chút. Tôi giới thiệu một vài khác tính năng của một cơ sở dữ liệu SQL. Ví dụ, thay vì chỉ làm cho tàu sân bay của var char như tôi nghĩ rằng tôi đã làm trên bay tuần trước. Tôi thay vì định nghĩa nó như những gì được gọi là một enum. 

Và một số bạn có thể đã nhìn thấy điều này như chúng tôi khám phá C. Enum là thực sự một tính năng của C, nơi bạn có thể liệt kê một bó toàn bộ các hằng số và giao cho các giá trị tự động, như một, hai, ba, bốn mà không cần phải mã số khó khăn. Vì vậy, SQL hỗ trợ như nhau, theo đó nếu bạn có một trường cơ sở dữ liệu mà bạn chỉ muốn đi trên một trong những hữu hạn giá trị, bạn có nghĩa là có thể xác định nó như tôi đã làm có bốn phổ biến các hãng điện thoại di động Mỹ. 

Vì vậy, tôi đã làm điều đó. Và tôi đã thực hiện một số thay đổi như tốt, quan trọng nhất được để có được email làm việc vì thu hồi, rằng chương trình này dựa vào đó thường được gọi là một email đến Cổng SMS, mà chỉ là một cách ưa thích của nói rằng Verizon, và AT & T, và những người khác hỗ trợ một máy chủ, theo đó nếu nó nhận được email, nó chuyển đổi nó để tin nhắn SMS và gửi ra một văn bản tin nhắn đến điện thoại của một ai đó. Vì vậy, nếu tôi đã làm điều này một cách chính xác, đây là một hình thức mới và cải tiến có nghĩa là sẽ nói chuyện với mã mới và cải tiến, mà bạn có thể chơi với trực tuyến. Và hy vọng nó sẽ làm cho tôi tiếng bíp điện thoại chỉ trong một khoảnh khắc. 

Vì vậy, đầu tiên, tôi sẽ gõ vào tên của tôi. Thứ hai, tôi sẽ không để làm điều này thời gian này. Tôi sẽ không Kiểm tra Element. Và điều này chỉ là một là điều ít vì vậy tôi không tạo ra giờ sản xuất bài làm việc như tôi đã làm thời gian qua. Hiện nay là số điện thoại của tôi. 

Tôi sẽ chọn Verizon. Và ở đây, chúng ta hãy bật microphone này ở đây, và mục tiêu này vào điện thoại của tôi ở đây. Tôi sẽ nhấn Register, mà nên hy vọng đặt nó vào cơ sở dữ liệu. Bây giờ tôi sẽ đi đến chương trình dòng lệnh, mà thu hồi đã được gọi là dấu chấm dấu gạch chéo văn bản, và chéo ngón tay của bạn. Ở đây chúng ta đi. 

[PHONE dings] 

[Vỗ tay] DAVID Malan: Vì vậy, nhiều niềm vui hơn this-- nó là thú vị, tất nhiên, nếu tôi nhận được vào nó. Nhưng nó vui hơn, tôi nghĩ, nếu chúng ta tạo ra một trong những khoảnh khắc phim nơi giống như một cái gì đó thực sự xấu đã xảy ra trên thế giới, và giống như tất cả nhân dân NSA điện thoại di động bắt đầu bíp với tin nhắn văn bản cảnh báo họ về việc này. Vì vậy, tôi nghĩ rằng chúng tôi sẽ cố gắng để tái tạo tương tự ở đây, nhờ đó mà không sử dụng một cơ sở dữ liệu, Tôi thay vì trước viết một chương trình giống như thế này. 

Đây là một index.php-- và tôi đặt mã này trực tuyến như well-- mà dường chỉ làm cho form.php, sử dụng một phong cách mô hình MVC mà chúng ta nói về chi tiết hơn trong vấn đề thiết lập bảy. Đó là hình thức khá đơn giản. Nó sẽ gửi đến một tập tin gọi là here.php qua đường bưu điện. Và nó dường như sẽ hỏi cho một tên, và số điện thoại, và sau đó thông qua cái gọi là Chọn menu, đó là sẽ cung cấp cho bạn ít nhất bốn các hãng điện thoại di động Mỹ phổ biến, và sau đó cho phép bạn để có hiệu quả có tham dự bằng cách nhấn vào đây. 

Và ở đây, trong khi đó, sẽ vay một số các mã từ thời gian qua. Và nếu bạn chỉ đọc lướt này, bạn sẽ thấy rằng có một bó toàn bộ các kiểm tra lỗi. Nhưng vẻ đẹp ở cuối là chúng tôi không viết cho một cơ sở dữ liệu ngày hôm nay. Chúng tôi đang giữ nó đơn giản và chỉ cần gửi ra hy vọng một tin nhắn văn bản thông qua chức năng tôi đã viết trong vài ngày qua cuộc gọi Văn bản, mà là ở chức năng. php, đó là một lần nữa có sẵn trực tuyến. 

Vì vậy, nếu bạn muốn tham gia vào này. Chúng tôi sẽ không được lưu trữ bất cứ điều gì. Tới URL này ở đây trong thời gian thực. Không nộp nó chỉ được nêu ra, nhưng chúng ta hãy xem nếu chúng ta có thể có một trong những bộ phim khoảnh khắc mà điện thoại di động của mọi người bắt đầu bíp, hy vọng chỉ một lần trong năm nay không giống như trong năm 2011 nơi này đã méo kinh dị. Và một khi bạn đi đến địa chỉ đó, bạn sẽ thấy một hình thức siêu đơn giản rằng nếu bạn có một cái tên, một điện thoại di động số, và một tàu sân bay điện thoại di động mà phù hợp với danh sách đó, đi trước và điền vào mẫu. Nhưng không trúng trình chỉ được nêu ra. 

Các hình thức sẽ trông như thế này. Đi trước và gõ vào tên, số điện thoại. Oop, ai đó đi trước của đường cong. Đó là OK. OK, mọi người điền vào biểu mẫu. Điều này sẽ làm việc trên một điện thoại cũng vậy, nếu bạn muốn. Tất cả các bên phải, về nhãn hiệu của bạn, có được thiết lập, đi. Lượt đây. Gì? Không. Tôi thề với Chúa, tôi kiểm tra này nhiều lần ngày hôm nay. Bạn đã nhận nó? 

[Interposing GIỌNG NÓI] 

DAVID Malan: OK, có lẽ lỗi người dùng. Đó là hai. Nó làm việc cho hai trong một vài trăm, ba, bốn. OK, đó là tốt. Bốn trong số năm cho đúng đắn như thế nào về. 

Vì vậy, những gì đã xảy ra? Vì vậy, có lẽ, mà không nhìn thấy của bạn màn hình, tại sao nó có thể đã errored? Có thể nói rằng chúng tôi đã chỉ cố gắng để làm quá nhiều kết nối đến máy chủ mail Harvard của tất cả tại một lần từ các địa chỉ IP. Tôi chỉ đoán kể từ khi tôi đã không có sự sang trọng của thử nghiệm mã này với một số 300 người trước nhưng bây giờ nhận ra rằng ít nhất nên đã nhận được công việc làm lần này. 

Được rồi, vậy tại sao này tất cả các Gecman hơn với những gì đang xảy ra? Cũng lần đầu tiên, một cách nhanh chóng vài thông báo. Vì vậy, một, nếu bạn muốn tham gia Chang, và Nick, và những người khác vào buổi trưa thứ sáu này, làm RSVP tại URL bình thường có. Nếu bạn đang nghĩ đến việc tập trung hoặc làm một thứ trong CS, cho dù bạn đang học năm thứ hai, hoặc sinh viên năm nhất, hoặc thậm chí cơ sở hoặc cấp cao vào thời điểm này và vẫn có thể ép trong các khóa học, nhận ra rằng các trường kỹ thuật được thu thập miễn phí Ben và Kem Jerry và lời khuyên Thứ tư ngay sau khi lớp này tại 04:00 trong tòa nhà CS tại Maxwell Dworkin. Nếu điều này là quá nhanh trên màn hình, chỉ cần đi để cs50.harvard.edu cho một liên kết đến các sự kiện Facebook nơi bạn có thể xem chi tiết hơn. 

Trong khi đó, tôi nghĩ tôi sẽ sửa chữa một điều khác tôi goofed hôm thứ Tư. Chỉ ra rằng ID của Mark trên Facebook không phải là ba. Đó là bốn. Hóa ra ông đã thử nghiệm nhiều hơn tài khoản hơn tôi gọi lại. Nhưng điều này cảm thấy như một cơ hội làm là để kéo lên một URL như thế này. 

Vì vậy, nó chỉ ra rằng Facebook có một API, Application Programming Interface, mà là một cơ chế theo đó bạn có thể yêu cầu dữ liệu lập trình Facebook và nhận được trở lại máy thông tin có thể đọc được, không phải là trang web nhưng văn bản chỉ nguyên liệu, một cái gì đó gọi là JavaScript Object Notation. Và trên thực tế, nếu tôi truy cập này URL, và phóng to, theo mặc định, này là Mark công khai thông tin có thể truy cập. 

Và các chi tiết thú vị đây chỉ là ID của mình thực sự là, số bốn, mà tôi nhận ra ngay sau khi tôi đã làm điều này. Bạn có thể làm điều này cho mình nếu bạn biết Tên truy nhập Facebook của bạn nếu bạn có một. Chỉ cần gõ nó lên trên đó. Và không ai trong số này là tư nhân. Tôi chỉ làm điều này thậm chí ở chế độ ẩn danh. Vì vậy, tôi thậm chí không đăng nhập. Và bạn đang nhìn thấy tôi mà rõ ràng là sử dụng số 6454 trên Facebook, mà không phải là quá xấu những ngày này. Vì vậy, dù sao đi nữa, bạn cũng sẽ thấy thêm thông tin ở đó. 

Và các khía cạnh hữu ích đó là bạn có thể viết phần mềm của riêng bạn mà bằng cách nào đó tích hợp dữ liệu như thế này vào ứng dụng của riêng bạn. Bạn có thể trao quyền cho người sử dụng đăng nhập vào trang web của bạn, không sử dụng tên riêng của họ và mật khẩu nhưng có thể đăng nhập Facebook của họ và nhận được thông tin ngay cả về bạn bè của họ, nếu họ chấp thuận như vậy, hoặc tương tự. Vì vậy, lưu ý CS50 rằng, quá, có một số các API riêng của mình, một cho dữ liệu danh mục Tất nhiên, một số cho những cái ôm menu trong ăn uống hội trường, tất cả các các tòa nhà và địa điểm trong khuôn viên trường chúng tôi có một API cho là tốt mà bạn có thể truy vấn tương tự và nhận được lại dữ liệu văn bản mà bạn có thể tích hợp thành một PHP, hoặc JavaScript, hoặc thậm chí, mặc dù ít phổ biến hơn, một Dự án cuối cùng dựa trên C. 

Thật vậy trước cho trận chung kết Dự án là một vài sự kiện quan trọng. Bạn nhận được một email từ chúng tôi ngày khác. Nhận ra rằng đề xuất là do này thứ hai tới. Nó không nhất thiết phải ràng buộc, nhưng bạn cần phải nhận nghiên cứu sinh giảng dạy của bạn phê duyệt trước khi thực hiện bất kỳ thay đổi sau đó. Và sau đó phía trước là một số sự kiện quan trọng khác. 

Vì vậy, để trêu chọc bạn, quá, với một số khả năng, chúng tôi có một loạt các những bóng đèn màu sắc. Và một số các bạn bây giờ có một số trong số này trong phòng ký túc xá của bạn là tốt. Và họ cũng có một API. Vì vậy, nhớ lại những bóng đèn nhị phân tuần trước đây mà Dan Bradley và Ansel Duff tạo ra cho chúng ta. Họ đã sử dụng một giao diện phần mềm để bóng đèn này, mà tại thời điểm này được cắm vào điện và sau đó thông qua không dây được kết nối với một điều ít gọi là cầu xuống đây, giống như một bộ định tuyến ít độc quyền để thiết bị đặc biệt này. 

Nhưng hóa ra nếu tôi biết làm thế nào để gửi tin nhắn HTTP, như tất cả chúng ta bây giờ làm, Tôi có thể gửi một tin nhắn như thế này để bóng đèn này để bật hoặc tắt hoặc làm bất kỳ số lượng các hoạt động khác trên đó. Chú ý rằng nó không nhận được, nó không gửi. Có một số khác được gọi là thỏa thuận. Có thực sự là một vài động từ khác như vậy. Tuy nhiên, nhận thấy có một con đường đó, giảm API, giảm phát triển mới, giảm nhẹ, giảm một, dấu gạch chéo nhà nước. 

Đó dường như chỉ là con đường mà các công ty, Philips, đã quyết định bạn phải nhấn với một yêu cầu HTTP nếu bạn muốn thay đổi trạng thái của bóng đèn sử dụng HTTP 1.1. Sau đó, nhận thấy những dòng trống. Và rồi cuối cùng những gì trông giống như loại một mảng của một số loại, này một lần nữa sẽ được gọi là JavaScript Object Notation, hoặc Jason. Và những gì bạn thấy ở đây là có ba cặp giá trị quan trọng. 

Một quan trọng được gọi là trên. Và giá trị của nó rõ ràng sẽ là sự thật. Độ sáng là 128, trong đó là một số loại int. Và sau đó là thời gian chuyển tiếp bằng không, mà rõ ràng là bao lâu nó sẽ thực hiện để biến điều này trên. 

Vì vậy, ngay bây giờ bóng đèn này là tắt. Nhưng nếu tôi làm chính xác cho this-- tôi đi đến một chút cheat sheet rằng Dan thiết lập trong advance-- và tôi sẽ đi trước và sao chép lệnh sau đây. Curl, như một số bạn có thể lượm lặt trên CS50 Thảo luận là một tiện ích như Telnet như vậy mà bạn có thể mô phỏng các yêu cầu HTTP, đặc biệt đặt. Tôi có thể gửi dữ liệu này, cụ thể những gì chúng ta chỉ nhìn thấy một thời điểm trước đây đặc biệt URL này trên đây. Và sau đó Curl sẽ xử lý tất cả các tiêu đề cần thiết và phân tích có của. 

Vì vậy, tất cả tôi phải làm là sao chép này vào một cửa sổ terminal và sau đó nhấn Enter. Và bóng đèn đi về. Và đây là tất cả đi qua máy tính của tôi không dây bằng cách nào đó xuống cầu, mà sau đó nói chuyện với bóng đèn này. Tôi có thể làm cái gì khác. Tôi có thể làm điều này đi màu đỏ ví dụ. Tôi có thể ví dụ làm Điều này đi màu xanh lá cây. Tôi có thể làm cho nó đi màu xanh. 

Và thông báo trong mỗi trường hợp, tất cả những gì tôi đang thay đổi là cái gọi là giá trị màu sắc để thực sự cung cấp cho nó một số màu sắc. Vì vậy, hãy để tôi dán này là tốt. Bây giờ là màu xanh. 

Và bạn có thể làm ngay cả fancier điều where-- chúng ta hãy đi đến màu xanh lá cây. Và tôi có thể làm điều này trong Tất nhiên với mã của riêng tôi. Nhưng ngay cả các API bản thân hỗ trợ các hoạt động sôi nổi như thế này, bây giờ mà sẽ làm phiền chúng tôi trong 30 giây tiếp theo. 

Vì vậy, đó là một hương vị của những gì bạn có thể làm với một API, điều này liên quan đến bóng đèn. Lưu ý rằng CS50 có một cặp vợ chồng cặp của Google Glass nếu bạn muốn muốn giải quyết cái gì đó dọc các đường dây, Arduino unos, mà là các máy tính nhỏ bé, về cơ bản, trên một bảng mạch nhỏ mà bạn có thể kết nối dây điện và những thứ khác để và thực sự kiểm soát môi trường thế giới thực sự của bạn. Và sau đó có một cặp vợ chồng đồ chơi mới mà chúng tôi có. Điều này nghĩa là chỉ cần đến các ngày khác bằng cách mail, một Myo Armband. Và tôi nghĩ đó là một cách để giúp bạn có được vui mừng về dự án mà bạn có thể sử dụng với phần cứng này sẽ là để chơi clip ngắn này mà họ sử dụng để trêu chọc folks mà bây giờ chúng ta đang sống trong tương lai. 

[MUSIC CHƠI] 

DAVID Malan: Vì vậy, chỉ trong một vài tuần, bạn cũng có thể được mát mẻ tại hội chợ CS50. Thiết bị khác mà chúng tôi có một loạt các rằng chúng tôi hạnh phúc cho vay ra cho các dự án được gọi là một bộ điều khiển chuyển động. Đây là một thiết bị USB nhỏ bạn kết nối với một máy tính cho phép bạn tương tác với máy tính xách tay của bạn, Mac hoặc PC, như thể bạn có giống như một Xbox Kinect và thực sự làm cho chuyển động tay chân nhiều như chúng ta thấy trong này tầm nhìn của tương lai. 

[MUSIC CHƠI] 

DAVID Malan: Vì vậy, ngay cả khi bạn có không có ý tưởng như thế nào một cái gì đó như thế có thể có thể được tạo ra, hay công việc trên một cấp độ phần cứng, không có vấn đề. Thậm chí chỉ sau vài tháng CS50, và sự hiểu biết về lập trình nói chung, và lập trình web hơn gần đây, và sau đó cũng API, và HTTP, bạn sẽ có thể truy cập thông qua API phần mềm nếu bạn không muốn mượn một trong những thiết bị để thực sự nói chuyện với nó và không phải lo lắng về việc thực hiện cơ bản chi tiết, đó là hoàn toàn phù hợp với quan điểm này của lớp một trừu tượng mà chúng tôi đã nhìn thấy trong suốt học kỳ. 

Vì vậy, cũng vào cuối tuần qua, thấy một vài mẩu tin. Đi đầu tiên, đi đến hội thảo nếu bạn muốn tìm hiểu một cái gì đó thêm về bất kỳ số lượng các chủ đề. Xem các URL đó. Và điều này đã được gửi đến tôi bởi Chang, những người bạn biết, ai in quân đội của chúng ta về con voi. Và đó là một tiêu đề như sau. Tôi sợ hãi của truyền hình mới của tôi. Tại sao tôi sợ hãi để biến này điều trên và bạn muốn được quá. Vì vậy, chúng ta đang ở chỉ trong học kỳ, quá, mà ngay cả nếu bạn có chỉ một chút hiểu biết về cách làm việc các trang web, và HTTP, và an ninh, mọi thứ như thế này nên bắt đầu để bắt mắt của bạn. Nhưng cũng có thể, bạn sẽ hiểu cho dù những điều này là hay không mối đe dọa thực sự. 

Vì vậy tôi đã một vài trích đoạn từ bài viết này ở đây. Và những câu chuyện như sau. Hiện tại tôi là chủ sở hữu của TV thông minh mới, hứa hẹn sẽ cung cấp trực tuyến nội dung đa phương tiện, trò chơi, ứng dụng, phương tiện truyền thông xã hội và internet duyệt, oh và TV quá. Vấn đề duy nhất là tôi bây giờ ngại sử dụng nó, nói rằng tác giả. Bạn sẽ trở thành như vậy, nếu bạn đọc qua chính sách bảo mật 46 trang cho TV của bạn. Số lượng dữ liệu này thu thập những điều đáng kinh ngạc. Nó ghi ở đâu, khi nào, như thế nào, và cho bạn sử dụng TV trong bao lâu. Nó đặt cookies theo dõi, như chúng ta đã thảo luận, và các cảnh báo thiết kế để phát hiện khi bạn có xem nội dung cụ thể hoặc email message cụ thể nếu bạn muốn kiểm tra email trên TV của bạn. Nó ghi lại các ứng dụng bạn sử dụng, các trang web bạn truy cập, và cách bạn tương tác với nội dung, làm tất cả điều đó qua TV thông minh của bạn. Nó cũng có thể, yet-- creepier đó là addition-- của tôi đã được xây dựng trong máy ảnh với nhận dạng khuôn mặt. 

Mục đích là để cung cấp kiểm soát cử chỉ cho TV và cho phép bạn đăng nhập vào cá nhân hoá tài khoản sử dụng khuôn mặt của bạn. Ở phía trên, những hình ảnh lưu trên truyền hình thay vì tải lên đến một máy chủ của công ty. Mặt khác, internet kết nối làm cho toàn bộ TV dễ bị tin tặc người đã chứng minh khả năng để kiểm soát hoàn toàn của máy. 

Đáng ngại hơn, như thể đó là không đủ thông minh, là microphone. TV tự hào có một giọng nói tính năng nhận dạng cho phép người xem để kiểm soát màn hình bằng giọng nói. Nhưng các dịch vụ đi kèm với một cảnh báo chứ không đáng ngại. Xin lưu ý rằng nếu lời nói của bạn bao gồm cá nhân hoặc nhạy cảm khác thông tin, thông tin sẽ là những dữ liệu bị bắt và chuyển đến một bên thứ ba. Có mà? Đừng nói cá nhân hoặc nhạy cảm thứ ở phía trước của TV của bạn. 

Vì vậy, đây thực sự là thật. Và nó không khó để nhìn thấy nếu bạn đi đến Best Buy hoặc tương tự cho TV những ngày này. Tất cả họ đều thông minh trong một số cách. Và họ đang nhận được thông minh hơn và creepier. Và họ chỉ đơn giản là thu thập dữ liệu theo những cách mà chúng tôi đã nói chuyện về và sau đó tải nó thông qua HTTP hoặc một số giao thức khác với một số máy chủ. 

Vì vậy, đây là một bài viết vui vẻ trong trang web trực tuyến này ở đây, mà nói về một lỗi cụ thể hoặc nhầm lẫn mã rằng chúng tôi thực sự có thể buộc thảo luận vào tuần trước. Vì vậy, tiêu đề này là như sau, câu chuyện đi ở đây, Josh Breckman làm việc cho một công ty đã hạ cánh xuống một hợp đồng để phát triển một quản lý nội dung hệ thống, hoặc CMS như chúng được gọi, cho một trang web của chính phủ khá lớn. Phần lớn các dự án có liên quan phát triển một hệ thống quản lý nội dung để nhân viên sẽ có thể xây dựng và duy trì bao giờ thay đổi nội dung cho trang web của họ. Mọi thứ đã đi khá tốt cho một vài ngày sau khi đi sinh sống. Nhưng vào ngày sáu, mọi thứ không tốt lắm. Tất cả các nội dung trên trang web đã hoàn toàn biến mất. Và tất cả các trang dẫn đến việc mặc định, vui lòng nhập nội dung trang web. Lỗi chính. Josh đã được gọi đến để điều tra và nhận thấy rằng một trong những đặc biệt phiền hà địa chỉ IP bên ngoài có đi vào và xóa tất cả các nội dung trên hệ thống. 

Các địa chỉ IP không thuộc để một số hacker bẻ cong ở nước ngoài phá hủy hữu ích thông tin chính phủ. Nó giải quyết để googlebot.com, Bò mạng nhện rất riêng của Google. Lỗi chính. Sau một chút về nghiên cứu và xáo trộn xung quanh để tìm một bản sao lưu noncorrupt, Josh thấy được vấn đề. 

Một người sử dụng đã sao chép và dán một số nội dung từ một trang khác, bao gồm cả một Edit Hyperlink để chỉnh sửa các nội dung trên trang. Thông thường điều này sẽ không phải là một vấn đề kể từ khi một người dùng bên ngoài sẽ cần phải nhập tên và mật khẩu, nhưng hệ thống xác thực CMS, Hệ thống đăng nhập, không đưa vào tài khoản hack tinh vi kỹ thuật của Google Spider. Lỗi chính. 

Khi nó quay ra, Google Spider không sử dụng cookies, có nghĩa là nó có thể dễ dàng bỏ qua một kiểm tra cho được đăng nhập trên cookie bộ là sai lầm. Nó cũng không chú ý đến JavaScript, mà sẽ bình thường nhắc nhở và chuyển hướng người dùng người chưa đăng nhập. Tuy nhiên nó theo mỗi siêu liên kết trên mỗi trang mà nó tìm thấy, bao gồm cả những người có Xóa trang trong tiêu đề. Lỗi chính. 

Vì vậy, điều này có nghĩa là trong hơn Về mặt kỹ thuật nhưng khá dễ tiếp cận? Nó chỉ có nghĩa là trong suốt trang web của họ, họ có URL không giống như một này bạn có thể thấy trong vấn đề thiết lập bảy. Nhớ lại trong vấn đề thiết lập bảy hoặc biết trong vấn đề thiết lập bảy rằng bạn đang bị thách thức, trong số những thứ khác, bán cổ phiếu thay mặt cho người sử dụng. Nhưng việc thực hiện mà tính năng này bằng cách của nhận được thông qua các siêu liên kết trong sử dụng của bạn giao diện, có thể không phải là ý tưởng thông minh bởi vì nếu trang web của bạn là bằng cách nào đó truy cập, hoặc bởi một con người những người xung quanh cách nhấn vào hoặc mua một bot như của Google hay một Spider như chúng được gọi đó chỉ là thu thập dữ liệu web cố gắng để chỉ số web như một công cụ tìm kiếm, họ có thể rất dễ dàng nhấn qua nhận được loại URL. Và đó là chức năng tương đương với, trong trường hợp này, bán tất cả cổ phiếu của Google. 

Bây giờ thẳng thắn, nó hoàn toàn ngu si rằng CMS sử dụng JavaScript và cookie triển khai hệ thống đăng nhập của nó và không làm điều đó phía máy chủ, như các bạn làm và sẽ ở PSet 7-- có một login.php file-- luôn luôn, luôn luôn, luôn luôn an ninh nên thực hiện ở phía máy chủ, không về phía khách hàng bởi vì, như này bài viết gợi ý và bạn có thể tự mình nhìn thấy tại một số điểm, nó là tầm thường cho một người sử dụng, tốt hay xấu, chỉ cần tắt JavaScript không đề cập đến các tập tin cookie. Vì vậy, đó là WTF hàng ngày của bạn. 

Có một nhiều hơn, mà chỉ là loại đáng sợ, vì vậy tôi sẽ đề cập đến nó nếu chỉ như là một bài học cuộc sống. Bất cứ khi nào bạn sử dụng một ứng dụng gọi là như Snapchat hoặc tương tự nói rằng những bức ảnh này chỉ kéo dài năm giây, mười giây, hoặc không có điều gì. Họ là phù du Đó là hoàn toàn không phải là trường hợp. Giống như không có cách nào, kỹ thuật số, để thực hiện một số hình thức video, hoặc hình ảnh, văn bản hoặc chia sẻ như vậy rằng một người nhận ở đầu bên kia không thể bằng cách nào đó lưu dữ liệu. 

Trong cách ngây thơ nhất, một người nào đó có thể lấy điện thoại của họ. Và họ có một cửa sổ thứ hai 10 trong khi nhìn vào một số tích tắc chỉ có một số điện thoại khác và chụp ảnh nó, rõ ràng. Vì vậy, bạn có thể bảo quản một cái gì đó kỹ thuật số theo cách đó. Một số bạn biết làm thế nào để có ảnh chụp màn hình trên điện thoại của bạn. Trong thực tế, nếu bạn không biết điều này, nhận ra rằng ít nhất Snapchat, và tôi nghĩ khác ứng dụng những ngày này, ít nhất là cho bạn biết nếu người nhận có thực sự thực hiện một ảnh chụp màn hình của hình ảnh của bạn. 

Nhưng tệ hơn nữa, đây là snappening, như một người nào đó đặt ra thời gian gần đây, nơi mà một số 100.000 snaps đã được phát hành trong những gì được gọi là một tập tin torrent trên các trang web khác nhau cuối cùng. Và những chứa toàn bộ một loạt các tin nhắn và bài viết. Nó chỉ ra hầu hết trong số họ lành tính, vì vậy không phải những gì bạn có thể mong đợi. Nhưng bởi vì mọi người đã có sử dụng một trang web của bên thứ ba, đăng nhập với Snapchat của họ tên đăng nhập và mật khẩu và sau đó tiết kiệm tất cả các snaps của họ trên trang web này của bên thứ ba. Và nó là bên thứ ba trang web đã bị tấn công, mà chỉ có nghĩa là ai đó đã tìm ra cách để có được tất cả 100.000 cộng với những hình ảnh vào ổ đĩa cứng của mình để chia sẻ tiếp theo. Thành thật mà nói, ở đây cũng vậy, nó là loại của ngu si rằng Snapchat được thực hiện trong một cách như vậy mà một bên thứ ba có thể sắp xếp các đánh chặn dữ liệu và rằng nó không gắn liền với bạn ứng dụng của riêng chạy trên điện thoại. Nhưng ở đây, quá, nhận ra rằng những điều không nên bắt bạn bất ngờ, hoặc ít nhất là có nên là một bài học cuộc sống ở đây. Nếu bạn muốn các kỹ thuật chi tiết, hãy truy cập URL mà có đó là trên các trình diễn ngày hôm nay. Tất cả các bên phải, bất kỳ câu hỏi về bài học cuộc sống ngày hôm nay trong CS? Lần lượt là tắt. Bất cứ điều gì ở tất cả? Bất cứ điều gì ở tất cả? Tôi đã có rất nhiều người kiểm tra Snapchat hoặc một cái gì đó của họ bây giờ. 

Tất cả các quyền, do đó SQL, Structured Query Language. Hãy bọc này. Và cũng có thể, mặc dù chúng tôi chỉ trầy xước bề mặt này ngôn ngữ, chúng tôi sẽ cung cấp cho bạn đủ của ngôn ngữ trong các hình thức PSet 7 để bạn có thể giải quyết một số chức năng khá phổ biến. Nhưng nhận ra có một vài điều chúng ta không đòi hỏi các bạn, nhưng họ sẽ được quan trọng đến các dự án chính thức và chắc chắn đi làm thực tế các trang web với người sử dụng thực tế là quyết định thiết kế này. 

Nó chỉ ra rằng trong một cơ sở dữ liệu MySQL, bạn có chùm lựa chọn như các kiểu dữ liệu cho các cột của bạn và những thứ khác, nhưng bạn cũng có lựa chọn một lưu trữ được gọi là động cơ cho tất cả các dữ liệu của bạn, các loại hệ thống tập tin, nếu bạn đã quen thuộc, cho tất cả các dữ liệu của bạn. Định dạng gì là cuối cùng nó được lưu trữ trong? Và phổ biến nhất, có lẽ, đã được MyISAM và InnoDB, thuật ngữ kỹ thuật rằng chúng tôi sẽ quan tâm chỉ đến mức một trong đó có và một không có các tính năng sau đây. 

Giả sử bạn có một chút ký túc xá tủ lạnh. Và giả sử rằng bạn và của bạn bạn cùng phòng, những người chia sẻ tủ lạnh này, thực sự thích sữa nói. Và đây là, trên thực tế, làm thế nào câu chuyện đã nói với tôi con đường trở lại trong ngày khi tôi lấy một khóa học gọi CS 161 hệ điều hành, mà tương tự khám phá chủ đề này. Vì vậy, bạn đã có tủ lạnh này. Bạn ra khỏi sữa. Và bạn về nhà, bạn cùng phòng của bạn vẫn còn ở lớp học hoặc bất cứ điều gì, và bạn quyết định tôi sẽ đi ra ngoài và nhận được một số sữa. Vì vậy, bạn đóng tủ lạnh, giam các phòng ký túc xá, đi trên đường phố CVS hoặc bất cứ nơi nào, và nhận được xếp hàng để mua một ít sữa. 

Trong khi đó, người bạn cùng phòng của bạn được nhà từ lớp học, được vào phòng ký túc xá, mở tủ lạnh, cũng nhận ra ooph, chúng tôi ra khỏi sữa. Vì vậy, anh ta hoặc cô đóng tủ lạnh và sau đó xảy ra để đi đến CVS khác, đó sẽ xảy ra một khối đi từ CVS khác trong vuông, và được theo dòng có để có được một ít sữa. Bây giờ, tất nhiên, một vài phút sau đó, cả hai trở lại, và tồi tệ nhất của tất cả có thể kết quả đã xảy ra. Cả hai bạn có sữa. Và bạn không thực sự như sữa mà nhiều. Vì vậy, một trong số họ chỉ là sẽ chua tại một số điểm. Vì vậy, bây giờ bạn có một số tiền quá sữa trong tủ lạnh bởi vì tất cả các lý do tại sao? 

[Không nghe được] DAVID Malan: Yeah, bạn không bằng cách nào đó giao tiếp với nhau mà bạn đã nhận được sữa. Vì vậy, trong đơn giản nhất cách trong thế giới con người, làm thế nào bạn có thể tránh ngớ ngẩn này kịch bản xảy ra như vậy rằng bạn chỉ kết thúc với một. Văn bản họ, có tốt. Nhưng làm thế nào khác? Sau đó ghi chú. DAVID Malan: Một Giấy ghi việc. Bất kỳ hình thức giao tiếp mà nói với bạn cùng phòng của bạn không đi vào tủ lạnh cho sữa. Tôi sẽ đi trồng cây lại ngày của riêng tôi. Vì vậy, bằng cách nào đó bạn cần để khóa tài nguyên này. Vì vậy, chúng tôi có thể làm cho this-- chúng ta có thể loại làm hỏng những câu chuyện và biến thành một câu chuyện CS nhờ đó mà nghĩ về điều này như giống như một biến, được lưu trữ một số giá trị. Và ngay bây giờ, giá trị của sữa là số không, mà bạn không muốn của bạn bạn cùng phòng để kiểm tra biến và sau đó đưa ra quyết định chính mình dựa trên trạng thái của biến đó nếu bạn đang trong quá trình thay đổi trạng thái của biến đó. 

Vì vậy, một trong những dòng của SQL mà chúng ta cung cấp cho bạn trong PSet 7 đặc điểm kỹ thuật là một trong những điều này ở đây. Và chúng tôi không chi tiêu một lớn số lượng thời gian nói về nó. Nhưng hóa ra, nếu bạn đang cố gắng để mua một số cổ phiếu trong tài chính CS50 rằng bạn đã có một số cổ phần của bạn muốn để có thể làm một số thứ ngay lập tức với nhau. Bạn muốn để có thể hiệu quả, trên một mức độ cao, kiểm tra tất cả các bên phải, nếu tôi muốn mua thêm cổ phiếu của miễn phí chúng tôi cổ phiếu penny nói về trong spec, Tôi muốn kiểm tra đầu tiên có bao nhiêu cổ phiếu tôi có. Và giả sử nó năm. Và giả sử tôi muốn mua 10 hơn, tôi cuối cùng muốn có 15 cổ phiếu. Vì vậy, tôi có hỏi hai câu hỏi. Trạng thái của biến là gì? Trạng thái của hàng là gì? Làm thế nào nhiều cổ phiếu không Tôi hiện đang có? Sau đó, bạn muốn đi trước và cập nhật nó. Vì vậy, đó là tương tự đến sữa trong đó bạn kiểm tra hàng, và sau đó bạn muốn cập nhật nó bởi vì nếu bạn muốn mua 10 cổ phiếu, bạn không muốn thay đổi hàng đến 10, bạn muốn thay đổi nó để 5 cộng với 10 hoặc, tất nhiên, 15. 

Dòng mã này đảm bảo rằng hai ý tưởng khái niệm xảy ra cùng hoặc không gì cả. Không một ai, kể cả một số người dùng khác những người đăng nhập vào cùng một trang web, bằng cách nào đó có thể làm gián đoạn việc kiểm tra hàng và cập nhật hàng, các lựa chọn và cập nhật nếu bạn sẽ. Và cú pháp không phải là siêu rõ ràng, nhưng một trong những dòng này, dài là nó là, đảm bảo rằng hai hoạt động kiểm tra các biến hoặc kiểm tra hàng và cập nhật hàng xảy ra nguyên tử. 

Oh ở đây chúng tôi đi một lần nữa. Tin nhắn văn bản trên điện thoại của tôi. Vì vậy, chúng ta hãy làm một này ít hơn bê tông. Giả sử rằng bạn không thực hiện một tủ lạnh, và bạn không thực hiện PSet 7 nhưng một ngân hàng thực tế, hoặc máy ATM, một Teller tự động Máy, nhờ đó mà bạn bằng cách nào đó muốn để có thể trao quyền cho người sử dụng để chuyển tiền từ một tài khoản khác. OK, treo trên. Tôi sẽ tắt này ngay bây giờ, cảm ơn bạn. Vì vậy, chúng tôi muốn chuyển tiền từ một số tài khoản vào một tài khoản khác nhau số lượng, đặc biệt là $ 100. Vì vậy, đây là loại một tùy ý Ví dụ, nhờ đó mà bạn, các máy ATM, có thể muốn thực hiện hai SQL truy vấn, trừ từ một tài khoản, và thêm vào các tài khoản khác. Nhưng bạn muốn đảm bảo rằng những hai dòng cả hai xảy ra hoặc không gì cả. Bạn không muốn một cái gì đó bị gián đoạn. Bạn làm không phải là một chàng trai thông minh xấu bằng cách nào đó đứng ở Bank of America với hai máy ATM trước của ông và bằng cách nào đó loại bằng cách đánh vào lệnh cùng một lúc, hy vọng cố gắng để khấu trừ $ 200 thay vì $ 100 và chỉ có $ 100 ghi. Trong ngắn hạn, bạn muốn điều này cư xử chính xác như bạn mong đợi. 

Và cách bạn làm này trong cơ sở dữ liệu SQL là bạn bọc nó trong những gì được gọi là một giao dịch. Nghĩa là trong SQL, bạn có thể gọi CS50 của chức năng truy vấn với báo bắt đầu unquote giao dịch. Sau đó, bạn có thể thực hiện bất kỳ số các truy vấn SQL tiếp theo, nhưng không ai trong số họ mất ảnh hưởng trên cơ sở dữ liệu cho đến khi bạn gọi truy vấn quote unquote cam kết, nếu một lần nữa bằng cách sử dụng PHP. Và bằng cách này, bạn có thể đảm bảo rằng thậm chí nếu bạn có 1.000 người sử dụng tất cả đánh cơ sở dữ liệu của bạn đồng thời, SQL sẽ hứa hẹn rằng những hai truy vấn sẽ thực hiện một trong những quyền sau khi khác. Vì vậy, bạn không kết thúc với quá sữa hoặc một số tiền sai, cuối cùng, tiền. 

Vì vậy, giữ điều này trong tâm trí, không quá nhiều cho PSet 7 nhưng đối với các dự án chính thức nếu bạn thực sự cố gắng để di chuyển dữ liệu xung quanh trên bảng như bạn có thể ở đây. Nhưng có lẽ còn đơn giản hơn và nhiều hơn nữa rõ ràng để hiểu với một ví dụ là một trong những điều này ở đây. Và một người nào đó gửi qua email cho chúng tôi về này chỉ là ngày khác khi nhìn thấy một cái gì đó trực tuyến tương tự. 

Vì vậy, để hiểu biết của tôi, hệ thống pin không phải là dễ bị tấn công này. Và tôi không có ý tưởng nếu nó thậm chí sử dụng cơ sở dữ liệu SQL bên dưới mui xe. Nhưng chúng ta hãy sử dụng nó cho vì lợi ích của cuộc thảo luận. Dưới đây là màn hình Folks Harvard có xu hướng để xem khi đăng nhập với họ Số Harvard ID và pin của họ. Và giả sử rằng hệ thống pin là thực hiện trong PHP và MySQL với một cơ sở dữ liệu, mã mà một người nào đó năm có thể đã được viết trước có thể trông như thế này. Đầu tiên, khai báo một biến gọi là tên người dùng. Và chỉ nhận được rằng từ các superglobal POST. Sau đó nhận được một biến khác gọi là mật khẩu và làm tương tự. Và sau đó chỉ cần thực hiện truy vấn dài này ở đây, chọn sao từ những người dùng nơi Tên truy nhập bằng như vậy và như vậy và mật khẩu bằng như vậy và như vậy. 

Chú ý rằng xoăn Tôi đã sử dụng dấu ngoặc ở đây chỉ có nghĩa là để PHP, đi trước và thay thế giá trị của hai biến ngay tại đó. Chúng không hoàn toàn cần thiết, nhưng họ có xu hướng để tránh các lỗi cú pháp tinh tế. Vì vậy, điều này có vẻ hoàn toàn đúng ở cái nhìn đầu tiên. Và nó được. Bạn có thể thực hiện hệ thống pin theo cách này. 

Nhưng giả sử rằng một siêu sinh viên thông minh và độc hại đầu vào này như pin của mình. Vì vậy, tôi đã gỡ bỏ viên đạn dấu hiệu ở đây giả lên, và tôi đã thực sự tiết lộ những gì anh ta hoặc cô ấy có thể đánh máy. Và đó là một chút lạ. Nhưng những gì nhảy ra lúc bạn ở khả năng đáng lo ngại về đầu vào của người dùng, ngay cả khi bạn không có ý tưởng gì một cuộc tấn công SQL injection nghĩa. Tại sao điều này nhìn một chút tanh? Đó là những gì? [Không nghe được] DAVID Malan: Các hoặc là một chút nghi ngờ. Trong thực tế, đó là một từ khóa từ SQL. Vì vậy, đó không phải là điềm tốt. Thực tế là có tất cả những dấu nháy đơn there-- trên thực tế, một trong những đơn giản nhất cách để phá vỡ một số cơ sở dữ liệu là bằng cách gõ vào một tên như O'Reilly có một dấu nháy đơn trong nó bởi vì nếu con người đã viết mã đằng sau hậu trường không đưa vào tài khoản đó có có thể là dấu ngoặc đơn trong một của người sử dụng đầu vào, và người đó đang sử dụng dấu ngoặc đơn trong mã của họ, những điều xấu có thể xảy ra. 

Trong thực tế, tệ hơn nữa, xem xét việc này. Nếu đây là một lần nữa mã rằng một người nào đó tại Đại học Harvard năm trước đây đã viết cho pin hệ thống, chú ý những gì về để thay thế tên đăng nhập và mật khẩu nếu sử dụng các loại trong một lần nữa skroob như tên người dùng của họ và sau đó một, hai, ba, bốn, năm, trích dẫn hoặc trích dẫn unquote một equals trích dẫn một. Và hãy chú ý những gì quan trọng ở đây là người sử dụng đã không bắt đầu mật khẩu của họ hoặc pin của họ với một báo giá. Và họ đã không kết thúc nó với một báo vì anh ta hoặc cô là giả định rằng nếu lập trình viên không quá sắc nét, họ sẽ có những dấu ngoặc đơn trong mã của họ. 

Vì vậy, đây là các mã. Và thay thế mà bây giờ có thể xảy ra là điều này. Và tôi đã nhấn mạnh những gì người dùng đã gõ trong. Vì vậy, trước, sau. Và hãy chú ý những gì nhẹ nhàng đáng lo ngại hiện nay về nửa bên phải của mã SQL này? Đó là một chút phức tạp hơn, phải thừa nhận rằng, hơn các truy vấn, chúng tôi đã nhìn thấy. Nhưng điều này không có thể có thể là một điều tốt nếu bạn nói chọn ngôi sao, mà là chọn tất cả mọi thứ từ bảng của người dùng nơi tên người dùng bằng skroob và mật khẩu bằng một, hai, ba, bốn, năm hoặc một bằng với một. Hàm ý logic là gì trong đó điều khoản cuối cùng có lẽ? Nó chỉ là luôn luôn đúng. 

Và bởi vì chúng tôi đã loại đoán hoặc tìm ra bằng cách thử và sai mà các lập trình viên đã viết mã này đã không dự đoán một con người hay xấu gõ trong dấu ngoặc đơn là tốt, chúng ta có thể cú pháp hoàn thành các truy vấn SQL với một cái gì đó vô nghĩa nhưng cái gì đó là cú pháp không chính xác mà luôn luôn đánh giá đúng sự thật. Vì vậy, nếu mã này đang được sử dụng để trả lời các câu hỏi đúng hay sai nên người sử dụng này được cho phép để vượt qua, các Câu trả lời là luôn luôn rõ ràng đi là đúng vì đây là luôn luôn đi để chọn một cái gì đó từ cơ sở dữ liệu bởi vì một trong những quá trình luôn luôn tương đương với một. 

Vì vậy, giải pháp là gì? Cũng trong PSet 7, chúng tôi thực sự tránh điều này tất cả cùng nhau. Chúng tôi cung cấp cho bạn một chức năng truy vấn, và chúng tôi khuyến khích bạn sử dụng dấu hỏi như giữ chỗ, tương tự trong tinh thần của printf% s, nhưng những gì là quan trọng về các dấu hỏi ở đây là nếu bạn thực sự đọc qua functions.php, nơi chúng tôi chức năng truy vấn được thực hiện, những dấu hỏi đang trốn thoát, theo đó bất cứ điều gì nguy hiểm tiềm tàng như một giá duy nhất được bật vào một giá duy nhất trốn thoát. 

Vì vậy, đây là những gì thực sự xảy ra nếu bạn sử dụng chức năng truy vấn CS50 hoặc bất kỳ số của bên thứ ba thư viện miễn phí làm như vậy. Không quan trọng trong trường hợp này, màu xanh lá cây, nếu người dùng đã gõ vào một giá duy nhất vì các truy vấn chức năng mà chúng tôi đã viết là sẽ thêm gạch chéo ngược trước bất kỳ báo nguy hiểm như vậy. Vì vậy, đây không phải là, trong Trên thực tế, sẽ là hợp pháp. Điều này giống như cách gõ một tìm kiếm điên mật khẩu đó là, tất nhiên, sẽ không được mật khẩu thực tế của skroob. 

Vì vậy, các takeaway cho CS50 là một, hoàn toàn luôn luôn sử dụng một cái gì đó giống như chức năng truy vấn của CS50 hoặc các thư viện cơ bản, mà xảy ra được gọi là PDO. Nhưng không bao giờ, không bao giờ, không bao giờ làm mã như thế này mà không cần thoát ra hoặc cọ rửa như họ nói đầu vào của bạn. Và bạn sẽ ở một số điểm có thể đi qua một số trang web như thế này. Trong thực tế, nó có vẻ là trường hợp như tại các sân bay và khách sạn ở những nơi nơi họ có Wi-Fi miễn phí truy cập mà bạn có để đăng nhập vào, các trang web này là luôn luôn thực hiện khủng khiếp. Và do đó, một loại vui vẻ tại nhà tập thể dục, không nhằm mục đích độc hại hoặc nhiều hơn của một niềm vui trên đường tập thể dục, là để chỉ cần gõ một dấu nháy đơn, một giá duy nhất, thành một hình thức trên một số trang web và xem những gì sẽ xảy ra. Và nếu máy chủ bị treo hoặc cho bạn một số loại thông báo lỗi, nó rất tốt có thể là ai đó đã không dự đoán này. Và sau đó bạn nên cảnh báo thích hợp quyền hạn và tham gia thảo luận thêm. 

Vì vậy bây giờ các bạn nên hy vọng hiểu thêm một chút đam mê hài hước ở đây. 

[Cười] DAVID Malan: Bạn biết bạn là một geek. Đối với một số tiếp theo năm, bạn sẽ nhớ người ít Bobby Bàn là vì phim hoạt hình này ở đây. Vì vậy, giữ cho rằng trong tâm trí như chúng tôi bối cảnh chuyển đổi một lần cuối cùng ngày hôm nay để JavaScript. Chúng tôi đã dành tương đối ít thời gian về cú pháp của PHP bởi vì nó thực sự siêu tương tự như C. Và độc đáo đủ, JavaScript quá là siêu tương tự như cú pháp của C cũng như chúng ta sẽ thấy trong chỉ là một thời điểm và như chúng ta sẽ thấy xem cuối tuần này nói riêng. Những gì bạn có thể làm với ngôn ngữ này, Mặc dù vậy, là tất cả các mạnh hơn, đặc biệt là với các API. 

Nhưng đầu tiên một tour du lịch nhanh chóng. Vì vậy, một trong JavaScript, có không có chức năng chính, đó là tốt đẹp. Như với PHP, bạn chỉ có thể viết mã. Điều kiện giống như thế này. Và biểu thức Boolean might giống như thế này hoặc như thế này. Thiết bị chuyển mạch tồn tại, và họ có thể trông như thế này. Bốn vòng giống như thế này. Trong khi vòng giống như thế này. Làm tuy rằng giống như thế này. Và sau đó mảng trông giống như này, rất giống với PHP. Nhưng chú ý, rằng trong JavaScript bạn khai báo một biến không có một đồng đô la đăng ký, không phải với một kiểu dữ liệu nhưng theo nghĩa đen bằng cách nói var cho biến trước khi nó. Nó cũng là loại lỏng lẻo trong đó có các loại, nhưng bạn không khai báo rõ ràng họ. Và sau đó là một chuỗi, cho Ví dụ, có thể trông như thế này, chuỗi được gọi là s trong trường hợp này. Và sau đó một đối tượng. Và những chúng ta sẽ thấy nhiều hơn trước khi dài. Và một đối tượng có lẽ là một trong những phổ biến nhất là nhìn thấy cấu trúc dữ liệu trong một JavaScript dựa chương trình vì nó cho phép bạn kết hợp tùy ý cặp giá trị quan trọng chỉ như mảng kết hợp PHP và cũng giống như bảng băm của riêng bạn hoặc cố gắng như chúng tôi thực hiện một vài tuần trở lại. Vì vậy, hãy thực sự nhìn thấy những gì chúng ta có thể làm gì với JavaScript. Và đặc biệt, đây là một danh sách dài dằng dặc các tính năng mà các trình duyệt có mà cho phép chúng tôi để treo JavaScript vào một trang web theo cách sau. JavaScript thường được sử dụng như một phía khách hàng ngôn ngữ kịch bản. Nó không được biên dịch. Nó cũng được giải thích. Nhưng không giống như PHP, đã được chạy trên máy chủ, trong máy chủ web, hoặc bên trong sâu sắc của khách hàng, JavaScript là khác nhau ở chỗ nó thường chạy trong trình duyệt. 

Vì vậy, bất kỳ mã JavaScript bạn bắt đầu viết cho PSet 8, hoặc dự án cuối cùng của bạn, hoặc trong thế giới thực thường đi được lưu trên máy chủ, hoàn toàn trong một HTML dấu chấm hoặc dấu chấm JS cho tập tin JavaScript. Tuy nhiên, trình duyệt sẽ để tải về JavaScript mã để dụ của riêng bạn của Chrome, hoặc IE hoặc Firefox, hoặc bất cứ điều gì. Và đang thực sự sẽ nhận được thực hiện bên trong trình duyệt của bạn. Chỉ cần thực hiện điều này thực tế hơn, chúng ta thấy điều này trong hình thức cụ thể. 

Chúng tôi không có ý tưởng những gì mã này không mà không thực sự đọc qua nó. Nhưng hãy để tôi đi đến Facebook.com mà không cần đăng nhập. Hãy để tôi đi đến Kiểm tra Element và đi đến, hãy nói, mạng và nạp lại trang. Và chúng ta sẽ see-- cho tôi chuyển Nạp lại các Trang để có được tất cả các yêu cầu mới. Và đầu tiên tập tin tôi thấy là CSS, CSS. Đây là lần đầu tiên Tập tin JavaScript, và tôi có không biết điều này không, nhưng ở đây là một số mã JavaScript mà các ổ đĩa Facebook. Nó thậm chí không thực sự tiết lộ để phóng to. Nó vẫn chỉ là vô nghĩa. 

Nhưng bạn sẽ thấy thậm chí xuống dưới, có thậm chí nhiều hơn các tập tin JavaScript. Lỗi chính. Đó là một ping. Hãy đi xuống một chút hơn nữa, hơn nữa, hơn nữa. Có một. Có một. Có một. 

Vì vậy, mặc dù Facebook, đằng sau cảnh, được viết bằng một phần trong PHP và phiên bản riêng đó của Facebook, có một số tiền rất lớn của JavaScript. Trong thực tế, bất kỳ trò chuyện bạn làm trên Facebook, bất kỳ bản cập nhật nội tuyến thời gian điều đó xảy ra trong thời gian thực, tất cả điều đó được thúc đẩy bởi JavaScript. Yeah? 

Đung Tôi không chắc chắn nếu điều này là Facebook, nhưng tôi nghĩ rằng Facebook phát triển ngôn ngữ trong nhà mã? riêng mình DAVID Malan: Họ đã làm. Vì vậy, đó là lý do tại sao tôi nói một phương sai của PHP gọi là Hip Hop rằng họ thực sự tính năng thêm vào như vậy mà khi Đánh dấu đầu tiên thực hiện Facebook, nó được viết bằng PHP. Và đó là loại vẫn các loại ngôn ngữ kết thúc trước mà họ sử dụng cho nhiều mã hóa của họ, nhưng nó không phải là một ngôn ngữ đó là quy mô đặc biệt tốt với tỷ của người dân. Và vì vậy họ đã thêm của mình cải tiến đằng sau hậu trường. Và họ sử dụng bất kỳ số các ngôn ngữ khác cho phần khác nhau của cơ sở hạ tầng của họ. Vì vậy, có, đó là một sai của những gì chúng ta biết như PHP. 

Vì vậy, chúng ta hãy có một cái nhìn ở một vài ví dụ làm thế nào chúng ta có thể sử dụng JavaScript ở đây. Trong mã nguồn của ngày hôm nay, chúng ta có một bó của tập tin, người đầu tiên trong số đó, chúng ta hãy gọi là DOM không. Vì vậy, DOM không trông như sau. Hãy để tôi đi vào thư mục này và mở ra domzero.html, đầu trong đó có một loại doc tuyên bố, nói rằng ở đây có HTML 5. Và giờ đây là một thẻ HTML. Đây là thẻ đầu. Và đây là những gì ngày hôm nay là mới. 

Bây giờ chúng ta có một thẻ script bên trong của người đứng đầu của trang. Và điều này dường như không rất ít, nhưng thông báo mà tôi đã xác định một kịch bản, một JavaScript. Và như một sang một bên, vì đây là một quan niệm sai lầm phổ biến, JavaScript đã hoàn toàn không có gì để làm với Java, ngôn ngữ rằng một số bạn có thể đã học được ở APCS. Đó là chi tiết của một thị điều hơn bất cứ điều gì, cưỡi coattails của Java năm trước. Nhưng JavaScript, không có gì để làm với Java, chỉ tương tự, và khó chịu, gây nhầm lẫn với tên. 

Vì vậy, đây là cách bạn khai báo một hàm trong JavaScript, nghĩa là nói năng, sau đó tên của các chức năng, sau đó bất kỳ đối số nó có thể mất, giống như trong PHP. Hóa ra trong JavaScript, một trong những nhất chức năng gây phiền nhiễu mà tồn tại là thông báo. Đây là một cửa sổ nhỏ mà sẽ bật lên và cảnh báo bạn một số mẩu thông tin. Nó thường được tán thành. Nhưng chúng tôi sẽ sử dụng nó như của chúng tôi tập thể dục đầu tiên ở đây. 

Chú ý một vài tính năng của JavaScript. Dấu nháy đơn và dấu ngoặc kép không thực sự là vấn đề nữa. Dấu nháy đơn và đôi dấu ngoặc kép có thể được thay đổi cho nhau, trong khi ở C, bạn phải sử dụng dấu ngoặc kép cho chuỗi, và bạn có hai đơn trích dẫn cho các ký tự. Trong thế giới JavaScript, nhiều người, hầu hết mọi người sử dụng dấu ngoặc kép xung quanh dây chỉ vì nó là một điều phong cách. Tuy nhiên, các nhà điều hành cộng với những gì ở đây, mà chúng tôi đã không nhìn thấy trước? 

Đung Nối. DAVID Malan: Nối. Vì vậy, C thậm chí không có điều này. PHP có dấu chấm, thực hiện điều này. JavaScript có các nhà điều hành cộng, đó gây nhầm lẫn là giống như Java. Bây giờ những gì đang xảy ra ở đây? 

Vì vậy, đây là nơi mà một cơ bản sự hiểu biết về hình ảnh mà chúng tôi đã ném lên một vài ngày trước đến chơi. Nhớ khi chúng ta đã có một đơn giản phiên bản của một HTML page-- nó chỉ nói, xin chào thế giới. Và sau đó chúng tôi đã vẽ một cây bên phải, mà đã có một loạt các hình chữ nhật và dòng kết nối chúng như một cây gia đình. Vì vậy, đó là cái gọi là DOM hoặc Document Object Model. Và nó chỉ ra rằng bạn có thể truy cập hình chữ nhật ở cây đó với cú pháp như sau. Bạn có nghĩa là nói tài liệu, mà là một biến toàn cầu đặc biệt trong JavaScript chương trình có một chức năng liên kết với nó mà bạn có thể truy cập tương tự như một cấu trúc, nhưng bạn chỉ đơn giản nói dấu chấm và sau đó tên của chức năng, có được yếu tố của ID. 

Các yếu tố tôi muốn nhận được là rõ ràng trích dẫn tên unquote. Và sau đó tôi muốn để có được giá trị của nó. Bây giờ chúng tôi đang nhận trước của mình. Tôi thậm chí không chắc chắn những gì tất cả điều này là về. Hãy đến HTML nhanh về phía trước trên trang, mà là siêu đơn giản. 

Chú ý rằng tôi đã xác định một hình xuống đây. Thông báo của tôi đã cho nó một độc đáo ID, mặc dù chúng tôi đã không được sử dụng thuộc tính này trước đây. Nhưng điều này tồn tại trong HTML. Bạn duy nhất có thể xác định một số đoạn của HTML với một định danh như thế này. 

Thông báo tại this-- quay ra HTML hỗ trợ, mỗi rằng danh sách giặt ủi một thời điểm trước đây, toàn bộ loạt các xử lý sự kiện. Và xử lý sự kiện này nói trên nộp. Trên trình sử dụng này hình thức, gọi đoạn mã sau. Và mã số đó đang xảy ra để được gọi là hoặc thực hiện là chính xác này, Hy Lạp chức năng sau đó trở về sai. Mọi thứ khác nên được khá quen thuộc. 

Dưới đây là một đầu vào của các loại văn bản, mà ID, trong trường hợp này, là có được tên. Chúng tôi không có một thuộc tính tên thực tế time-- này và một nút gửi. Vì vậy, trang kết quả sẽ như thế này. Và hành vi đưa, bạn sẽ thấy, trông như thế này. Các trang web nó host địa phương cho biết, hello David, hầu như không một thẩm mỹ cách để chào đón một người sử dụng. Nhưng những gì đang thực sự xảy ra? 

Vâng, hãy xem xét điều này. Đây là một lĩnh vực văn bản. Và theo HTML ở đây, tôi đã cho nó một định danh duy nhất gọi là quote tên unquote. Trong khi đó, tôi đã nói khi người dùng gửi biểu mẫu này bằng cách nhấn Enter hoặc nhấp chuột Gửi nút, gọi hàm gọi là Greet và sau đó trở về False. Hãy xem xét những ngược lại. Chú ý khi tôi bấm Submit, URL của trang này không thay đổi. Biểu tượng của trình duyệt đã không bắt đầu quay. Tôi đã không đi bất cứ nơi nào, và đó là nghĩa đen bởi vì tôi nói trở lại False. Quay trở lại mạch ngắn False hoặc dừng hành vi mặc định của một hình thức. Vì vậy mà sau đó lại cho chúng ta một câu hỏi cuối cùng này. Không Greet làm gì? Vâng, chào rõ ràng gọi một chức năng được gọi là Alert, đi qua một tranh luận dài đó là kết quả của việc ghép lại với nhau một loạt các chuỗi con, xin chào không gian dấu phẩy, sau đó bất cứ điều gì này trả về. Vì vậy, tài liệu giống như một toàn cầu biến cho rằng gốc rễ của cây, gọi một chức năng đặc biệt, nếu không thì bây giờ được gọi là một phương pháp. Một chức năng mà bên trong của một biến là được gọi là một phương pháp thay vì một chức năng. 

Vì vậy, có được yếu tố của ID. Yếu tố gì làm bạn muốn nhận được bằng ID của nó? Trích dẫn tên và unquote sau đó đặc biệt có giá trị. Vì vậy, nói cách khác, quy tắc mà chỉ đơn giản tìm thấy lĩnh vực văn bản có ID là tên và sau đó nhận được giá trị của nó. Vì vậy, nếu tôi được là để thay đổi điều này và nói Davin thay vì David, và nhấn Submit, bây giờ chúng tôi có một lời chào cho Davin. 

Tất cả các bên phải, vì vậy tất cả tốt và tốt. Nhưng chúng ta hãy xem nếu chúng ta có thể làm cho này một chút sạch hơn kể từ khi chỉ viết code như thế này là nói chung sẽ được tán thành. Điều này sẽ trông đáng sợ. Nhưng điều đầu tiên sự khác biệt mà bạn lưu ý ở đây trong phiên bản này ngoài tên thay đổi để DOM một? Những gì cấu trúc trông khác nhau về điều này so với người khác? Yeah? Đung là các hình thức trên đầu của kịch bản bây giờ? DAVID Malan: Yeah, hình thức là trên đầu trang của kịch bản cho một số lý do tò mò. Vì vậy, đó là điều đầu tiên mà nhảy ra khỏi tôi, quá. Và may mắn ít nhất, phần này là giống hệt nhau. Vì vậy, điều duy nhất có thể là khác nhau là điều này. 

Vì vậy, đây là những gì gọn gàng về JavaScript 2. Và nó làm cho nó khó khăn để hiểu ở cái nhìn đầu tiên, đặc biệt là cho các dự án cuối cùng nếu bạn đang tìm kiếm mẫu mã trực tuyến, nhưng nó nắm đến một số tính năng cơ bản cú pháp. Ở đây một lần nữa là tài liệu biến toàn cầu. Ở đây lại là phương pháp hay chức năng mà nói được những yếu tố của ID. Thời gian này tôi muốn có được ID gọi là demo. Ở đâu đó? Đó là rõ ràng ngay ở đây, hình thức riêng của mình. 

Và bây giờ nhận thấy rằng dường như nếu tôi lấy lại nút đó từ cây đại diện cho các hình thức chính nó, không phải là một trường văn bản, nó quay ra hình thức đó, mà nút hoặc hình chữ nhật từ cây, có những gì chúng ta sẽ gọi một tài sản, rất, rất, rất tương tự trong tinh thần một cấu trúc trong C. Nó chỉ một thành viên dữ liệu bên trong của hình chữ nhật này. 

Vì vậy, tôi đã có những hình thức ở đây, và tôi đang gắn, hoặc tôi giao, để On của nó Gửi xử lý hoặc thay On Gửi tài sản các chức năng sau đây. Và đây là, bởi đến nay, điên rồ nhất Điều vậy, đến nay cú pháp. Hóa ra trong JavaScript và trong PHP, và thẳng thắn cho rằng vấn đề trong C, mặc dù chúng ta không làm điều đó, bạn có thể thêm vô danh, vô danh, hoặc AKA lambda chức năng mà không có một tên nhưng có thể được gọi là dù sao. 

Vì vậy, những gì tôi đang làm ở đây là tôi đang giao Ngày này Gửi tài sản, mà là bên trong của nút này của cây DOM của tôi, một chức năng, chức năng con trỏ nếu bạn sẽ. Đó là chức năng không có tên, nhưng điều đó không quan trọng bởi vì chúng ta sẽ thấy trong một thời điểm như thế nào để gọi nó. Khi chức năng này được gọi là, mã này được thực thi, sau đó false được trả về giống như trước đây. 

Nhưng cần chú ý những gì tôi đã làm. Tại thời điểm này trong câu chuyện, tôi có một hình thức. Nó có một ID duy nhất được gọi là demo. Xuống đây, tôi có một thẻ script thực thi đoạn mã sau. Nó gắn với nút trong cây để nó On Gửi sở hữu chức năng này tại đây. Và chỉ bằng cách tự nhiên như thế nào trình duyệt làm việc, khi tôi bây giờ nhấn Submit hoặc nhấn Enter, chức năng có nghĩa là sẽ được gọi. Nó không cần một tên bởi vì người có hề quan tâm đến những gì nó được gọi là. Thời gian duy nhất nó bao giờ sẽ nhận được gọi là khi tôi nộp đơn. Không cần phải cho tôi, phát triển con người, để thực sự gọi nó bất cứ nơi nào khác. 

Bây giờ chỉ cần là một lời trêu ghẹo, như thể đó đã không quan tâm uốn đủ, chúng tôi thậm chí có thể thực hiện điều này nhìn khó hiểu hơn khi sử dụng một thư viện siêu phổ biến được gọi là jQuery. Trong thực tế jQuery và JavaScript thường được đem lồng. Và những gì chúng tôi sẽ làm vào ngày thứ tư bắt đầu là sử dụng ngôn ngữ này và các thư viện để xây dựng ngày càng đồng bộ và các ứng dụng năng động như bản đồ nhận được các ứng dụng, các ứng dụng đó cập nhật các trang web trong thời gian thực thời gian, giống như Facebook hay Gchat làm, và không còn nhốt mình với nhấn Gửi bởi một nhận hoặc chỉ bài một mình. Vì vậy, tôi sẽ nhìn thấy bạn vào ngày thứ Tư. 

[MUSIC CHƠI]