SPEAKER: OK, vì vậy, bạn sẽ không tin điều đó, nhưng tuần trước, hôm thứ Hai, trong Pierce, tôi giảm trong tầng hầm. Tôi không bao giờ đi đến Pierce. Và tôi sẽ không bao giờ trở lại một lần nữa, bởi vì Tôi rời công cụ của tôi một mình, như, năm phút và ai đó lấy trộm máy tính và tôi của tôi điện thoại ra khỏi ba lô của tôi. Có nghĩa là tôi đã nhận nó trở lại, và sau đó chưa đầy một tuần sau nó đã bị đánh cắp một lần nữa. Và sau đó nó đã bật - Find My iPhone tiếp tục là vô ích. Vì vậy, tôi tiếp tục khuyến khích bạn không sử dụng nó. Nó bật một lần, và nó đã ở MIT, 15 phút sau đó, và người gọi số điện thoại này cho thấy trong AT & T nhật ký cuộc gọi của tôi. Vì vậy, tôi đã đi trực tuyến, gọi điện thoại mà số, và nó đã đi thẳng đến này máy trả lời trong tiếng Tây Ban Nha. Và tôi đã không nghe nói về nó từ đó. Vì vậy, tôi đã có để có được một mới máy tính và điện thoại. Tôi biết. Yeah. Nhưng nếu các bạn muốn chip vào của tôi Quỹ máy tính sau này, đó là lý do tại sao Tôi đã hỏi bạn ở đây. Chỉ đùa thôi. Nhưng đó là thực sự buồn và đau buồn. Nhưng đó là tất cả trở lại bây giờ, và đó là lý do tại sao p thiết lập 8 đã để lâu, bởi vì Tôi không có một máy tính. Và ai đó đã lấy nó. Và tôi gửi qua email, yêu cầu nếu họ sẽ cấp p-thiết lập 8 của bạn. Nhưng họ nói không. Và tôi nói, tôi có thể có máy tính của tôi trở lại? Và họ đang như thế, không có. Chỉ đùa thôi. OK. Đây là phần cuối cùng của chúng tôi, và tôi có một vài - chúng ta chỉ có ba những thứ trên chương trình nghị sự. Chúng ta sẽ nói chuyện một chút về hướng dẫn Q. Sau đó chúng ta sẽ dành 15 phút trên một bản demo mát mẻ. Sau đó chúng ta sẽ nói tất cả lời tạm biệt với nhau. Bạn không thực sự cần máy tính của bạn hoặc một cây bút hoặc giấy để ghi chép, hoặc theo cùng. Vì vậy, tôi giả sử nếu bạn có máy tính của bạn lên, sau đó bạn đang ở trên Facebook. Chỉ cần nói. Trừ khi bạn đang điền vào Q dẫn, đó là lần đầu tiên. Hướng dẫn Q mở cửa. Bạn đã có một email về nó. Một khi tất cả các công cụ Q được nộp tại cuối năm nay, tôi nhận được tất cả các Q ý kiến ​​trong điểm số từ tất cả mọi người người lựa chọn để cung cấp cho tôi thông tin phản hồi. Và vì vậy khi bạn đi trong Q - Tôi không biết nếu bạn có thể làm điều này, Jeff, bởi vì bạn và sinh viên mở rộng. Nhưng khi bạn đi trong Q, nếu bạn có không thực hiện nó trước, bạn chọn của bạn giáo viên, đó là David Malan. Bạn phải làm anh ta. Và sau đó bạn có thể chọn TF. Và bạn có thể chọn nhiều TF như bạn muốn. Nhưng có 60 người trong chúng ta. Bạn không phải chọn tất cả mọi người. Bạn chỉ có thể chọn tôi, hoặc chỉ cần chọn một vài người khác, nếu bạn muốn, cung cấp cho họ thông tin phản hồi là tốt. Và sau đó bạn có được điểm số trên tất cả các trục khác nhau, và sau đó bạn có thể để lại họ phản hồi. Và sau đó, như một tháng sau đó, Tôi sẽ nhận được tất cả những thông tin phản hồi. Và cũng giống như những phản hồi bạn đã đem lại cho tôi trong suốt học kỳ, tôi đọc tất cả. Và nó thực sự hữu ích, và nó giúp tôi phát triển như là một giáo viên và là một cá nhân. Vì vậy, xin vui lòng, mất một thời gian để làm điều đó. Chúng ta chỉ có được ở đây cho, như, 30 phút. Vì vậy, nếu bạn muốn, vào cuối này, để mất năm phút, và chỉ cần điền vào Q, bởi vì nó không mất bất cứ lúc nào nhiều hơn thế. Đó sẽ là tuyệt vời, và bạn cũng có được điểm của bạn trở lại một cách nhanh chóng hơn nếu bạn điền vào Q. Vì vậy, hầu hết các bạn đã làm điều đó trước khi - hoặc không có, khoảng một nửa của bạn đã làm điều đó trước đây. Nhưng nếu bạn là một sinh viên năm nhất, đó là đó là những gì. Nó sẽ là như nhau cho tất cả các lớp. Làm điều đó. Phải mất năm phút. Nhưng cũng có thể, nếu bạn làm điều đó một chút nghiêm túc, đó không phải là điều tồi tệ nhất trên thế giới, bởi vì tôi chắc chắn mang nó nghiêm túc. Vì vậy, nếu bạn để lại cho tôi một khuôn mặt cười, Tôi sẽ đánh giá cao điều đó. Nhưng tôi cũng sẽ đánh giá cao nếu bạn để lại cho tôi nhiều hơn một khuôn mặt cười. Nhưng nó thuộc vào bạn. Tôi không thể cho bạn biết - hoặc thích cười lớn phải đối mặt, với số vốn D. Điều đó muốn thậm chí còn tốt hơn. OK, đó là tất cả tôi có cho Q. Nếu bạn có thắc mắc, bạn có thể yêu cầu tôi, nhưng khá tự giải thích. Chỉ, xin vui lòng, điền đơn. Tôi thực sự sẽ đánh giá cao nó, và nó có nghĩa là rất nhiều cho tôi. OK, đây là những gì chúng ta sẽ dành 15 phút đi qua. Tôi sẽ cho bạn thấy một số mã. Tôi nghĩ rằng đây là thực sự mát mẻ, và điều này đã cho tôi nhiều hơn kích thích trong khoa học máy tính. Vì vậy, tôi hy vọng nó sẽ làm tương tự cho tất cả các bạn. Chúng tôi sẽ mở ra - và tất cả điều này mã tôi sẽ gửi cho bạn sau này. Nhưng chúng tôi chỉ cần đi để mở ra - Tôi đang ở thiết bị đầu cuối của tôi - chúng ta sẽ mở ra chương trình này được gọi là [? MySum. ?] Tất cả mọi người có thể đọc mà hay Tôi nên làm cho nó lớn hơn không? Ai cũng có thể cho tôi biết những gì mã này sẽ làm gì khi tôi chạy nó, hoặc những gì này chương trình sẽ làm gì khi tôi chạy nó? [? Avi,?] Những gì bạn nghĩ nó sẽ làm gì? Kết thúc nhai. Bạn không nên nói chuyện với miệng mở. ĐỐI TƯỢNG: Liệu nó có một loạt các lập luận, tìm tổng của họ trở về Tóm lại, và sau đó in nó ra? Hoặc phải mất trong hai đối số, và sau đó nó [không nghe được]. Và sau đó nó in ra bất cứ điều gì kết quả. SPEAKER: Đóng cửa, thực sự gần gũi. Bất kỳ ai muốn thêm vào [? những gì Avi?] nói? Bạn cần phải cung cấp cho chương trình này bất kỳ đối số dòng lệnh? ĐỐI TƯỢNG: số SPEAKER: số Điều gì xảy ra nếu bạn không cung cấp cho nó bất kỳ đối số dòng lệnh? Tôi chỉ cần viết dấu chấm dấu gạch chéo MySum. ĐỐI TƯỢNG: 1 cộng 2 bằng 3. SPEAKER: 1 cộng 2 bằng 3. Và nó sẽ in ra ngoài. Đó chính quyền. Bạn sẽ thấy rằng in f dòng ở phía dưới. Nó sẽ in ra a, b, và sau đó tổng của a và b. Và tôi đoán bạn cho rằng tổng hoạt động chính xác. Tốt giả định. OK, và những gì xảy ra nếu tôi cung cấp cho nó những lập luận gì? [? Manu? ?] ĐỐI TƯỢNG: Nó sẽ thêm bất cứ điều gì tham số đầu tiên là b. Hoặc 2, xin lỗi. SPEAKER: Đúng, 2. Không ai biết những gì strtol không? Đó là cơ bản atoi. Atoi thực sự là một phiên bản ưa thích của - hoặc một phiên bản đơn giản của strtol. Nhưng nó thực sự sử dụng strtol. Và tôi thấy rằng ra vì tôi muốn một cái gì đó như atoi, và sau đó khi tôi đã atoi, tôi đọc ở đây. Và tôi thấy "hành vi này cũng giống như "strtol. Vì vậy, về cơ bản nó cho atoi tất cả ý nghĩa và mục đích. Và bạn thấy tôi thậm chí sử dụng vô 10. Điều này thực sự cho phép bạn chụp một chuỗi, và biến nó thành một con số, và chọn cơ sở nào, bạn muốn làm nó in Vì vậy, đây là cơ sở 10 ngay tại đây. Tôi có thể làm cơ sở cho hai số thập phân, cơ sở 16 cho hệ thập lục phân. Nó khá mát mẻ. Nhưng câu chuyện dài ngắn, điều này có hai số và thêm chúng với nhau. Vì vậy, hãy chạy nó. Và bạn cũng sẽ nhận thấy, có một số điều - vì vậy tôi có một makefile ngay tại đây, và nếu bạn mở lên, một số điều bạn sẽ nhận thấy là khác nhau. Đặc biệt, lập luận này ngay tại đây, bạn có thể đã không thấy rằng trước. Nói chung, chúng tôi biên dịch điều với dấu gạch ngang không, không. Dash không, không, có nghĩa là không làm bất kỳ tối ưu, trình biên dịch. Đừng cố gắng và làm cho bất cứ điều gì ưa thích, hoặc làm bất cứ điều gì chạy nhanh hơn, hoặc được loại bỏ các biến đó là cần thiết. Không tối ưu hóa mã này ở tất cả, Tôi yêu cầu cấp thứ ba tối ưu hóa. Vì vậy, tôi yêu cầu biên dịch để làm rất nhiều tối ưu hóa. Bạn có thể thay đổi điều đó trong makefile khi bạn có mã này, nếu bạn muốn để xem công cụ khác nhau. Mà chúng tôi sẽ hiển thị trong một giây. Vì vậy, chúng tôi chạy tiền của tôi 1 cộng với 2 cộng với 3. Ai đó cho tôi hai đối số. ĐỐI TƯỢNG: 4 và 5. SPEAKER: 4 và 5. Cảm ơn bạn. Tuyệt vời, nó hoạt động. Một số đối số tốt khác là gì để cố gắng, để đảm bảo hoạt động này? Bất cứ ai? ĐỐI TƯỢNG: 0. SPEAKER: 0? ĐỐI TƯỢNG: Tiêu cực 3. SPEAKER: Nó hoạt động. Nhưng đó là những lựa chọn tốt. OK, vì vậy chúng ta hãy quay trở lại đây. Đây là mysum.c. Bạn sẽ nhận thấy cũng có một cái gì đó gọi là sumfunction.c. Và điều này cho biết, oh, có điều gì đó quy định tại sumfunction.c. Tôi không bao gồm tập tin này tại đây bởi vì tôi không cần. Nhưng tôi liên kết nó trong khi tôi biên dịch, mà bạn nhận thấy. Chúng ta hãy di chuyển lên. Chúng ta đã thấy khi chúng tôi biên soạn mysum, ngay ở đó, chúng tôi liên kết trong hệ nhị phân từ sumfunction.o. Và tôi không cần các tập tin tiêu đề bởi vì, tất nhiên, có những khai báo hàm. Vì vậy, sắc nét bao gồm bình thường chỉ cần puts trong một khai báo hàm. Ở đây tôi đã chỉ cần đặt nó thẳng trong các mã. Và vì vậy tôi cần phải làm là liên kết trong nhị phân, mà tôi làm. Bất kỳ dự đoán cho là những gì trong sumfunction.c? Mã những gì tôi đã viết trong sumfunction.c? ĐỐI TƯỢNG: [nghe được]. SPEAKER: Bất kỳ dự đoán? Yeah? ĐỐI TƯỢNG: Tôi nghĩ rằng, định nghĩa một số [không nghe được]. SPEAKER: Có. Vì vậy tôi viết int tổng int a. Tôi viết dòng này, và sau đó tôi đã mở ngoặc móc, đóng ngoặc móc. Bạn nghĩ gì tôi viết trong những dấu ngoặc nhọn, bên trong chức năng đó? Yeah? ĐỐI TƯỢNG: Quay trở lại bằng một. Bộ xử lý: Đó là một đoán thực sự tốt. Người nghĩ rằng [? Manu?] Là đúng? Nó nói trở lại a + b. OK, không mọi người. [? Akshar,?] bạn làm gì, quá? Bạn có chắc chắn? OK. Những gì? ĐỐI TƯỢNG: Bạn viết sai. SPEAKER: Không, tôi không. Yeah, chỉ đùa thôi. Bạn nói đúng. Đó là chính xác những gì nó nói. Nó trả về một cộng b. Điều đó làm cho rất nhiều ý nghĩa. OK, chúng ta hãy quay trở lại đây. Chúng ta thấy tiêu đề - đó là kiểu trả về. Hãy nhớ rằng, chúng ta đã thấy ngày hôm đó một, loại chức năng quay trở lại, nhưng đi trước tên của các chức năng int. Ở đây, tôi đã viết int. Bạn nghĩ gì sẽ xảy ra nếu trong này chức năng, tôi không viết int, nhưng Tôi viết không dấu? Sự khác biệt, tất nhiên, được rằng unsigned đại diện duy nhất tích cực số nguyên, và int có thể tích cực hay tiêu cực. Vì vậy, tôi đã thay đổi trở lại loại chức năng này. Mã này không phù hợp trở lại này nhập ở đây. Bạn nghĩ gì sẽ xảy ra khi tôi biên dịch? Bạn nên hét vào mặt tôi. Không la hét. Những gì về khi tôi chạy chương trình? Chúng ta hãy làm trước khi tiêu cực 0 3, hay tiêu cực 1. Nó vẫn hoạt động, mặc dù tôi đang nói nó trở về một số nguyên unsigned. Rõ ràng nó không trở về một số nguyên unsigned. Nó trở về một số nguyên ký. Nó trở về âm 1. OK, đó là lạ. Những gì về nếu tôi đi trong ở đây và làm điều đó? Vì vậy, tôi đã thay đổi tất cả mọi thứ từ int unsigned. Nó chỉ có thể đưa số nguyên unsigned. Nhưng chúng ta vẫn nghĩ rằng nó sẽ chạy? ĐỐI TƯỢNG: Có. SPEAKER: Nó sẽ. Thật điên rồ. Và chúng tôi vượt qua trong một phân công rõ ràng số nguyên, chúng ta có thể vượt qua hai ký số nguyên, nó vẫn hoạt động. OK, bất kỳ ý tưởng tại sao nó vẫn hoạt động, hoặc những gì đang xảy ra? Yeah, Jeff. ĐỐI TƯỢNG: Nó có cái gì để làm với tối ưu hóa của bạn mà bạn nhấn mạnh. SPEAKER: số Chúng tôi có thể thay đổi tối ưu hóa, nó vẫn sẽ làm việc. Tôi có thể làm điều đó cho bạn, nhưng - ĐỐI TƯỢNG: Tôi sẽ dùng từ ngữ của bạn cho nó. SPEAKER: Vâng. Nếu bạn mở makefile ngay tại đây, Tôi đã thay đổi tối ưu hóa. Vì vậy, bạn có thể làm dấu gạch ngang không, không. Nó sẽ vẫn làm việc. Suy nghĩ khác? Tất cả các bạn dự kiến ​​làm việc, vì vậy sao cậu lại mong đợi nó để làm việc? Không? Sự im lặng. OK. Tôi phải đợi bảy giây, bởi vì tôi hỏi một câu hỏi. Vì vậy, điều thú vị về C, và bạn đã có thể có kinh nghiệm trước - bạn có thể không có, sức mạnh này là lần đầu tiên. Nhưng như bạn đã biết, khi tôi viết một cái gì đó trong C, nó không lưu như này trên máy tính. Nó sẽ được lưu như những người thân và zero. Nó đi từ mã C để lắp ráp mã. Có ai nhìn thấy mã lắp ráp trước, mã lắp ráp máy? Chúng tôi sẽ xem xét trong một giây. Nó đi từ mã C để lắp ráp mã. Và các bạn biết các giai đoạn biên dịch. Bạn phải ghi nhớ rằng đối với bài kiểm tra một, và sau đó viết nó ra trên bài kiểm tra không. Hầu hết mọi người đã nhận nó sai. Tôi nghĩ các bạn đóng đinh nó. Nhưng, các bạn là những phần tốt nhất cho các câu đố, bằng cách này. Đó là tuyệt vời. Nó sẽ không làm tổn thương bạn. Đừng lo lắng. Nhưng nó thực sự mát mẻ. Tốt công việc. Vì vậy, nó đi vào ngôn ngữ lắp ráp, và sau đó nó đi đến những người thân và zero. Và những người thân và số không được lưu trên máy tính, và đó là những gì được lưu trong các a.out, hoặc trong trường hợp này, các tập tin thực thi. Và các máy tính chạy những người thân và zero. Phải không? Chúng tôi đã học được điều này trước đây. Vì vậy, điều thú vị là, unsigned này ý tưởng, ý tưởng của các loại số nguyên unsigned, vân vân, vân vân, đó là ở đây trong ngôn ngữ C. Những tồn tại. Nhưng loại không tồn tại những người và zero. Loại thậm chí không thực sự tồn tại cấp độ ngôn ngữ lắp ráp. Vì vậy, đó là một cái gì đó tồn tại trong C thế giới nhưng không tồn tại trong máy tính thế giới hoặc bộ vi xử lý thế giới. Đó là một số trừu tượng mà C ngôn ngữ đã bao gồm, để làm cho chúng tôi sống dễ dàng hơn. Vì vậy, vào cuối ngày, tôi có thể viết nhiều điều khác nhau ở đây, và nó không tạo sự khác biệt. Bởi vì đó chỉ tồn tại trong C trên thế giới. Nó không tồn tại trong những người thân và số không trên thế giới. Và chương trình của chúng tôi thực hiện trong những người và số không trên thế giới. Vì vậy, tâm trí của bạn rõ ràng không thổi được nêu ra. Nhưng tôi nghĩ rằng đó là mát mẻ. Yeah, Jeff. ĐỐI TƯỢNG: Vì vậy, nếu thay vì làm int, bạn làm char. Và bạn là - SPEAKER: Chúng ta hãy làm điều đó trong một giây. ĐỐI TƯỢNG: Bởi vì sau đó bạn nhận được một unsigned đi từ tiêu cực đến 128 127 hoặc 0 đến 255. SPEAKER: Vì vậy, char là có vấn đề. Không ai biết lý do tại sao char sẽ là có vấn đề, và nó sẽ thực sự thay đổi mọi thứ trong những và zero thế giới? ĐỐI TƯỢNG: Bởi vì kích thước của char. SPEAKER: Kích thước của char là 1. Vì vậy, không dấu cũng là 4 byte. Vì vậy, char sẽ vít những thứ lên. Nhưng 4 byte đó là những gì liên quan đến một char? Hoặc có thêm một bổ sung - bạn có thể đặt một nhân vật nhiều hơn sau khi char. ĐỐI TƯỢNG: sao Char. SPEAKER: sao Char có 4 byte. Vì vậy, hãy làm điều gì đó đó là một ngôi sao char. Vì vậy, điều này có lẽ sẽ làm việc, nhưng chúng tôi sẽ làm một cái gì đó thậm chí điên hơn này. Theo ý kiến ​​của tôi, điên. Bây giờ tôi đã viết một hàm trả về một con trỏ, và phải mất một con trỏ và một giá trị không dấu - chúng tôi sẽ thay đổi trở lại thành int vì vậy chúng tôi không làm quá nhiều thay đổi cùng một lúc. Và nó có một mảng gọi là, chỉ số vào mảng và trả về địa chỉ của. Chúng tôi đã nhìn thấy các nhà khai thác trước đây. Này, những gì bạn nghĩ rằng điều này sẽ để làm, ngược lại, khi tôi chạy nó? Bạn nghĩ những gì nó sẽ làm gì? Bất kỳ dự đoán? ĐỐI TƯỢNG: segfault. SPEAKER: Cái gì? Segfault? Đó là một đoán tốt. Tom nói điều tương tự. Bất kỳ dự đoán nào khác không? Người nghĩ rằng nó sẽ làm điều tương tự? Người nghĩ rằng nó sẽ segfault? Nó làm điều tương tự. Xin lôi. Nhưng, tất nhiên, chúng tôi đặt trong 1 và 2. Và đó là cả hai hợp lệ, phải không? Hãy xem, chúng ta có thể đi đến vị trí thứ hai của một mảng. Nhưng nếu chúng ta thực hiện b một số tiêu cực? Đó có lẽ là một đoán tốt hơn cho một cái gì đó segfaulting. Nó vẫn hoạt động. OK, đây là bây giờ điên. Đây là chức năng tổng giá trị ngang nhau. Điều này không chính xác cùng một như trở lại a và b. Ai cũng có thể giải thích lý do tại sao đây là một tốt tổng hợp chức năng, hoặc lý do tại sao công trình này? Những gì đang xảy ra ở đây? Tại sao điều này làm chính xác cùng điều như chức năng tổng cũ của chúng tôi? [? Akshar,?] những gì đang xảy ra? ĐỐI TƯỢNG: Bởi vì khi bạn có một một đó là một địa chỉ để vị trí bộ nhớ - và khi bạn làm các ký hiệu, nó đi đến địa chỉ bộ nhớ. Và khi bạn đi đến b, bạn loại di chuyển bước từ địa chỉ bộ nhớ, bạn đang quay trở lại đó. Vì vậy, bạn thực sự, trên thực tế, thêm a và b [nghe được]. Ở đâu hoạt động tiêu chuẩn trở về điều đó không? Như, nơi nào dấu ngoặc rơi? Là sự trở lại của địa chỉ trên một trước hoặc sau [không nghe được]? SPEAKER: Nó sẽ chỉ mục b - hoặc chỉ số vào một - và sau đó trả lại địa chỉ. OK, vì vậy đã mọi người hiểu những gì [? Akshar?] nói, và giải thích, lý do tại sao công trình này? Tôi không, lần đầu tiên người giải thích điều này với tôi. Ai muốn có một hình ảnh để giải thích điều này? Chúng ta sẽ vẽ một bức tranh, với không có dấu hiệu, đó là tuyệt vời. Tìm thấy một số. Vì vậy, chúng tôi có một mảng đó là một loạt các hộp. Người đầu tiên là một chỉ số 0, chỉ số 1, 2, 3, 4, dấu chấm, dấu chấm, dấu chấm. Một mảng điển hình. Và ngoài việc chỉ số, tất cả đều có địa chỉ bộ nhớ. Vì vậy, hãy cung cấp cho địa chỉ bộ nhớ này 13, 14, 15, 16, 17, vân vân. Tất cả mọi người ở đây cho đến nay. Vì vậy, một là một địa chỉ. Tên của một mảng, một con trỏ được lưu ở đó. Đó là một con trỏ, đó là một vị trí bộ nhớ, để bắt đầu của mảng. Vì vậy, nếu điều này là mảng, một sẽ là một giá trị 13. Và, tất nhiên, chúng tôi có thể cung cấp một giá trị nào chúng ta muốn. Char một ngôi sao, chúng ta có thể cung cấp cho bất kỳ một địa chỉ bộ nhớ chúng ta muốn. Chúng tôi có thể cung cấp cho nó 0, chúng ta có thể cung cấp cho nó tiêu cực 1 - 1 âm không tồn tại, để có thể là có vấn đề, nhưng bạn thấy rằng nó vẫn còn làm việc. Vì vậy chúng tôi có thể cung cấp cho một số bất kỳ chúng ta muốn, bất kỳ địa chỉ bộ nhớ chúng ta muốn. Sau đó, int b nói, OK, đi con số này của bước vào mảng. Vì vậy, nếu b bằng 2, và bằng 13, chúng tôi tại địa chỉ bộ nhớ 13. Và chúng tôi đi hai bước, và vì vậy chúng tôi đang ở đây. Và các ký hiệu có nghĩa là trở lại địa chỉ của địa điểm này. Và địa chỉ là, tất nhiên, 15. Vì vậy chúng tôi có được 13 cộng với 2, hoặc a + b, đó là 15. Câu hỏi đặt ra là, mặc dù - Tôi xin lỗi. Điều đó làm rõ sự vật cho lý do tại sao công trình này? ĐỐI TƯỢNG: Tại sao nó sẽ làm việc đi - để bạn có thể có một mảng và đi đến một chỉ số tiêu cực? SPEAKER: Đúng vậy. Vì vậy, chúng tôi đã làm số âm, vì vậy đó là - điều này không có ý nghĩa, mặc dù đầu tiên, [? Avi,?] cho bạn? ĐỐI TƯỢNG: Vâng tôi chỉ [Nghe được], nhưng - SPEAKER: Vâng, điều này sẽ trở lại 15. Nếu là 13, và b là 2, điều này sẽ trở lại 15. ĐỐI TƯỢNG: Vì vậy, việc lập chỉ mục không không trở thành một vấn đề, phải không? Bởi vì bạn đang di chuyển từ 0. SPEAKER: Đúng vậy. Vì vậy, bạn đang di chuyển - vì vậy nếu b là 0, bạn sẽ không di chuyển bất cứ nơi nào. Và bạn chỉ muốn quay trở lại địa chỉ - nếu b là 0, đó là bản chất trở về địa chỉ của một. Đi qua trong char sao một và trả lại địa chỉ của một chỉ đang quay trở lại một, cơ bản. OK, câu hỏi là tại sao số âm làm việc? Và đó là điều thực sự mát mẻ về này, bởi vì điều này nên segfault. Và nó sẽ segfault nếu chúng ta đã làm một cái gì đó như thế này. Hãy nói rằng, int. Vì vậy, mã này trông giống hệt nhau và nên cư xử giống nhau. Về cơ bản, x là một biến rác thải, và vì thế này nên cư xử giống nhau. Chúng ta hãy làm điều này - tiếc - trong sao. OK, chúng tôi đã nhận được lỗi ở đây, bởi vì nó đã được sẽ không nổi giận với tôi, bởi vì nó đã biết những gì sắp tới. Đặc biệt, điều thứ hai. Địa chỉ của bộ nhớ xếp chồng lên nhau liên quan với một biến địa phương. Về cơ bản, tôi sẽ không để biên dịch này, và sau đó tôi sẽ lùi lại làm những gì chúng ta chỉ cần làm. Nhưng vì chúng tôi không bao giờ thực sự truy cập vào những gì ở bộ nhớ vị trí, nó sẽ không segfault. Chúng tôi sẽ không bao giờ thực sự nhìn vào những gì trong hộp thứ hai hoặc những gì trong bất kỳ hộp của mảng này. Chúng tôi chỉ nói rằng, đây là địa chỉ trong những điều chúng tôi đang tìm kiếm và trở lại địa chỉ đó. Chúng tôi sẽ không bao giờ thực sự đi vào mảng nhìn vào vị trí đó. Và bởi vì chúng tôi không bao giờ chạm vào bộ nhớ, chúng tôi không gặp rắc rối. Chúng tôi không có được một segfault. Nếu chúng ta cố gắng, một lần nữa, chạm vào bộ nhớ, chạm vào những gì đã được tại một hoặc b - hoặc b khung, và giả sử một là 0 và - nếu là 0, thậm chí, đó sẽ là khá xấu, bởi vì chúng ta không thể đi xuống tất cả các cách đó. Nếu a và b đều 0, và chúng tôi đã cố gắng để chạm vào những gì đã có, sau đó chúng tôi sẽ gặp rắc rối. Nhưng nếu chúng ta không chạm vào những gì đang có, chúng tôi chỉ trả lại địa chỉ, đó là thực sự sẽ không segfault vì nó cho phép bạn thực hiện những hoạt động. Nó chỉ được giận bạn, và được siêu tức giận, khi bạn cố gắng và chạm bộ nhớ thực tế và trả lại những gì là ở vị trí bộ nhớ. Điều đó có ý nghĩa? Đó chỉ là một phần điên rồ của C. Vì vậy, chúng ta có thêm một trong số này. Người nghĩ rằng đây là mát mẻ? Nhiều người hơn. Đó là tốt. OK, đây là tác phẩm mới nhất của chúng tôi. Và tôi muốn bạn để cho tôi biết liệu hoặc không bạn nghĩ rằng điều này sẽ để làm một điều chính xác. Tôi đã viết ra những nơi nào đó. Tôi không ghi nhớ chúng. Chúng ta hãy xem, 8, b 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. Vì vậy, đây là một mảng, bây giờ, không phải là một chức năng. Và nó là một mảng, vì chúng tôi có vuông dấu ngoặc, niềng răng không nhọn. Và đó là một loạt các loại? Bất cứ ai, hmm? ĐỐI TƯỢNG: số thập lục phân của họ? SPEAKER: Nhưng loại C là những gì? Tất cả đều có số thập lục phân. Loại C là những gì? Nó cho bạn. ĐỐI TƯỢNG: Đó là ký tự không dấu. SPEAKER: Đúng, ký tự không dấu. Và hai số thập lục phân là một byte. Vì vậy, đây là 1, 2, 3, 4, 5, 6, 7, 8, 9 byte. Nó là một mảng của 9 byte. OK, bạn có thể đã biết câu trả lời cho câu hỏi này. Nhưng, những gì bạn nghĩ rằng sẽ xảy ra khi tôi chạy? Tôi nói, một lần nữa, trong mysum.c, Tôi đang mong đợi một chức năng mà phải mất hai số nguyên. Và tôi thay vì nói rằng khoản tiền đó là một mảng các ký tự. Điều gì sẽ xảy ra khi Tôi chạy. / Mysum và thực hiện? Vâng, đầu tiên, hầu hết các bạn sẽ có thể đồng ý làm điều đó - không có, chỉ đùa thôi. What'd tôi làm sai? Uh oh. Đó nên là dấu ngoặc nhọn. Đó là cách bạn khởi tạo một mảng. Xấu của tôi. Vì vậy, chúng tôi đã nhìn thấy trước rằng các loại là một khái niệm trừu tượng C cấp, không phải là một cấp máy tính trừu tượng. Vì vậy, hầu hết các bạn có thể mong đợi nó thực hiện, hoặc giả định rằng nó sẽ làm cho. Nhưng những gì khi tôi chạy. / Mysum? Điều gì sẽ xảy ra? Bất kỳ dự đoán? ĐỐI TƯỢNG: Nó sẽ in ra một từ. SPEAKER: Nó sẽ in ra một từ. Từ những gì? ĐỐI TƯỢNG: [nghe được]. SPEAKER: Bất kỳ dự đoán nào khác không? OK, in ra một cụm từ. Bạn có thể có bất kỳ cụm từ. Sẽ được phía bạn. Bất cứ ai có một đoán khác nhau? Anna, đoán của bạn là gì? ĐỐI TƯỢNG: Nó sẽ in ra - hai chữ cái, hoặc [nghe được] một chữ cái. SPEAKER: Một thư. ĐỐI TƯỢNG: Tôi có thể đếm có bao nhiều [nghe được]? SPEAKER: Chín. Vâng, tôi sẽ chạy nó. Nó làm điều chính xác. Nó cho biết thêm hai số với nhau. Vâng, chúng ta hãy vượt qua hai đối số. Nó không có đối số. Vì vậy, tôi không biết nó có thể có thể có được những lập luận này. Nhưng chúng ta hãy vượt qua 100 và 0. Và nó cho biết thêm 100 và 0. Đó là điên. Tôi nghĩ như vậy. Tiêu cực 4, làm việc quá. Bạn có thể làm bất cứ điều gì bạn muốn. Đây là một chức năng tổng giá trị ngang nhau. Đây là một chức năng tổng hợp. Nhưng, không, bạn đang nói nó một mảng byte. Vì vậy, những gì đang xảy ra ở đây? Vì vậy, một lần nữa, chúng ta hãy quay trở lại ý tưởng này mà chúng tôi đã nói ngay từ đầu. Bạn đi từ mã C cấp, để lắp ráp ngôn ngữ, để những người thân và zero. Đây là hệ thập lục phân. Nhưng điều này thực sự chỉ là một rất nhiều những người thân và zero. Đây là 72 người và số không, phải không? 72 người thân và zero. 9 byte. Mỗi byte có 8 bit. Mỗi bit là một hoặc một số không. Vì vậy, những người 72 hoặc zero. Tôi đã chỉ cần viết chúng như thế này - chứ không phải viết nó ra như rất nhiều những người thân và zero. Nhưng điều này sẽ đi từ C cấp ngôn ngữ, để lắp ráp ngôn ngữ, mã. Và điều này sẽ in ra trong mã, nơi nào đó, những 72 người và zero mà tôi đã viết ở đây. Vì vậy, nơi nào đó trong đó - chúng ta hãy đi đây - nơi nào đó trong mysum, chương trình, có là những 72 người và số không mà tôi đã viết và nói với nó để viết. Bây giờ, bất kỳ dự đoán cho những gì những 72 người thân và zero nghĩa là gì? ĐỐI TƯỢNG: Có lẽ là như nhau điều như trở về một cộng b. SPEAKER: Có lẽ là như nhau điều như trở về một cộng b. Chúng ta hãy xác minh rằng. Chúng ta hãy tìm ra cách tôi đã làm điều này. Vì vậy, nếu bạn quay trở lại đây, tôi nói với bạn để chạy lệnh này, objdump-S sumfunction.o. Chúng ta hãy đi chạy nó. objdump - obj, đổ. Về cơ bản nó có thể cho tôi bất cứ điều gì tôi muốn xem. Nó có thể cung cấp cho tôi những ngôn ngữ lắp ráp. Nó có thể cho tôi những người thân và zero. Nó có một tấn của lá cờ. Đây là một trong chúng ta sẽ để sử dụng cho bây giờ. Dot - như bạn thấy trong các slide - vốn gạch ngang S cho biết, vai ra, mã nguồn - dòng này là từ C - với lắp ráp mã và với những người thân và zero. Và chúng ta sẽ chạy nó trên sumfunction.o. Bởi vì nó sẽ được dễ dàng hơn để xem. Một lần nữa - hmm? ĐỐI TƯỢNG: Bạn viết sai. SPEAKER: Nhưng tôi thực sự đi để xóa nó trong một giây. Tôi đầu tiên sẽ mở chỉ sumfuntion.o. ĐỐI TƯỢNG: Bạn đánh vần sai lần đầu tiên. SPEAKER: Classic. Sum - đó là một từ khó khăn, mặc dù. Bạn sẽ ngạc nhiên. OK, vì vậy đây là sumfunction.o. Tôi thậm chí không thể cho bạn biết. Có rất nhiều số không, rõ ràng rất nhiều của zero, và có một số khác thứ đó không phải là zero. Nhưng chủ yếu là zero. Hình như có một số người. Vì vậy, rõ ràng, điều này là khó đọc. Đó là ngôn ngữ nhị phân. Chúng ta hãy mở nó bây giờ - những gì? Tôi đang làm gì sai? Tôi đã đánh vần chính xác? OK, đây là khó xử. Tôi cần một giây để tìm ra những gì tôi đang làm sai. Đó là một lỗi. Đó là lạ. Ồ, đó là lý do tại sao. Tôi sẽ quay trở lại ban đầu của chúng tôi một, vì vậy chúng ta có thể nhìn vào mã đối tượng này. Bởi vì có không thực sự sẽ được bất cứ điều gì khi chúng ta chỉ cần đặt những người thân và zero in Có chúng tôi đi. OK, vì vậy mọi người có thể thấy điều này. Chức năng này, như tôi đã nói, đưa ra các dòng C - nguồn dòng mã - với một số hướng dẫn lắp ráp. Đây là dòng mã nguồn của chúng tôi. Đây là một trong, đây là một. Đây là những hướng dẫn lắp ráp. Đó là những gì họ trông như thế. Hướng dẫn lắp ráp - bạn có thể tìm hiểu thêm về những nếu bạn có CS các lớp học khác, nhưng chúng nói chung là một hướng dẫn. Và sau đó một nguồn và một đích đến. Và sau đó ở đây là các mã nhị phân tương ứng với hội đồng hướng dẫn. Vì vậy, bạn có thể thấy, chức năng số tiền này, vào cuối ngày, là ba hướng dẫn lắp ráp. Chỉ có ba. Một mov - này m-o-v là viết tắt của một di chuyển. Thêm khán đài cho Add. Và r-e-t là viết tắt của Return. Vì vậy, một mov, một tiện ích, một trở lại. Và các, ở đây, là zero và những người tương ứng với mã đó. Vì vậy, những số không và những người thân, nếu bạn biết những người, bạn chỉ có thể đặt những thẳng vào Và sau đó nó sẽ làm cùng một điều chính xác. Bởi vì, vào cuối ngày, tất cả bạn đang thực hiện là một chuỗi dài các zero và những người thân. Và đó là những gì mã của bạn thực sự là. Và lý do - chúng ta hãy nhìn vào một điều. Tôi có makefile mở? Vì vậy, nếu chúng tôi trở về dấu gạch ngang bằng không, bằng không ở đây - xin lỗi, vốn o, vốn o không, không không, không. Và chúng tôi đã thực hiện, nó sẽ vẫn làm việc như nhau. Nhưng bây giờ bạn nhận thấy rằng có một rất nhiều hướng dẫn lắp ráp. Đó là bởi vì, một lần nữa, tôi hỏi những trình biên dịch không phải làm bất cứ tối ưu hóa. Vì vậy, tôi vẫn có thể mất tất cả các zero và những người thân, và ném chúng vào, và sẽ làm việc. Tôi chỉ cần làm tối ưu hóa, bởi vì đó là một chút dễ dàng hơn, sau đó, để viết mảng đó. Nhưng điều này sẽ chỉ làm việc tốt. OK, chúng ta sẽ làm một điều cuối cùng, bởi vì tôi nghĩ là phần thú vị nhất. Mặc dù tất cả mọi người rõ ràng đã thổi và không nói nên lời. Tâm trí của chúng tôi được thổi. [Nghe được] Vì vậy, đây là những từ một lớp CS khác nhau, mà là siêu thú vị, mà tôi đang thực hiện - CS61. Tôi rất khuyến khích bạn mang nó. Nhưng phần thú vị về thực tế này, mà mọi thứ chỉ là zero và những người thân, là tất cả mọi thứ là zero và những người thân. Vì vậy, bạn có thể mất một tập tin có zero chính xác và những người bạn muốn ở đâu đó trong nó, và sử dụng phần zero và những người thân như một chức năng tổng hợp. Tôi có ý nghĩa gì bởi điều đó không? Tôi có nghĩa là bạn có thể mất một tập tin hình ảnh có hàng loạt chính xác của zero và những người, mà in một cái gì đó ra một hình ảnh. Và một chương trình có thể giải thích là một hình ảnh, nhưng bạn có thể giải thích nó, nếu bạn muốn, như một chức năng tổng hợp. Vì vậy, nếu chúng tôi muốn mở, cho Ví dụ, hình ảnh này. Chúng ta hãy đi, Hello Kitty. Hình ảnh nhỏ tuyệt vời. Trong đây có chuỗi của zero và những người thân. Những 72 zero và những người thân tồn tại trong hình ảnh này. Vì vậy, những gì tôi có thể làm, sau đó, là viết - Tôi phải nhớ mà họ đang có. Tôi sẽ thấy rằng trong một giây. Nhưng chúng tôi - hãy để tôi tìm ra nơi mà họ đang có. Một giây. Chúng ta hãy làm - ĐỐI TƯỢNG: [nghe được]. SPEAKER: Cảm ơn. Vì vậy, nếu chúng ta thực hiện chương trình này, thay vì đọc trong một tập tin, sau đó nó đi chỉ số này trong tập tin. Và sau đó, một lần nữa, giống như mysum, có hai con số. Chúng ta có thể thêm số điện thoại chính xác giống như chúng tôi đã làm trước đây, mà đi vào chỉ cho bạn cách thực tế là, ở cuối trong ngày, tất cả những điều này là zero và những người thân. Và nó chỉ là cách bạn chọn để giải thích cho họ. Và nếu bạn thực sự nhìn vào hình ảnh này - chúng ta hãy phóng to một chút. Tất cả mọi người có thể nhìn thấy nó? Bạn sẽ nhận thấy ngay ở đây, có một số vết bẩn lạ. Chúng ta hãy đi - đây là hình ảnh ban đầu. Bạn sẽ nhận thấy đây không có vết bẩn. Đó là mã cho chức năng tổng hợp, là ít smudge ngay tại đó. Và trên thực tế, một lần nữa, nếu bạn tìm hiểu thêm về điều này, bạn sẽ nhận ra rằng điều này Hello Kitty, trong đó có cả một lớn hơn smudge, có mã có thể mất hơn một máy tính nếu nó không được bảo vệ thích hợp. Vì vậy, bạn thực sự có thể chạy này. Tôi sẽ không để chạy nó ngay bây giờ. Nhưng bạn có thể chạy Hello Kitty hình ảnh, và nó có thể mất trên máy tính của bạn. Vì vậy, đó là tất cả các bản demo. Không ai có bất kỳ câu hỏi, ý kiến, mối quan tâm? Tôi nghĩ rằng công cụ này là hấp dẫn. Nó cảm hứng cho tôi để tìm hiểu thêm. Tôi khuyên bạn nên, nếu bạn quan tâm ở tất cả các CS, nói chuyện với tôi. Mặc dù tôi là một Khoa học Xã hội Tập trung, tôi là một CS, trung học, vì vậy Tôi vẫn biết một chút ít. Nhưng tôi chắc chắn biết các lớp học bạn nên dùng. Tôi nghĩ rằng đó là tất cả thực sự thú vị, và tôi khuyến khích bạn, chắc chắn, để tìm hiểu thêm nếu bạn quan tâm. OK, tôi có một điều cuối cùng. Xin lôi. Bất kỳ câu hỏi? Tôi không dừng lại để chờ đợi nếu ai có bất kỳ câu hỏi về điều đó. Có ai sẽ là một CS tập trung không? Hoặc suy nghĩ về nó? Một, hai, ba, bốn. Một - chỉ có một. Anna là bàn tay duy nhất đó là tăng uy quyền. OK, đó là mát mẻ. Assam, những gì thì bạn sẽ làm gì? ĐỐI TƯỢNG: [nghe được]. SPEAKER: Constantine? ĐỐI TƯỢNG: Vật lý. SPEAKER: Whoa, đó là nhanh chóng. Bạn đã có một kinh nghiệm xấu trong CS50? [Nghe được], những gì thì bạn sẽ làm gì? ĐỐI TƯỢNG: Tôi không có ý tưởng. SPEAKER: Curt? ĐỐI TƯỢNG: Econ hay CS. SPEAKER: Econ hay CS. Tom? ĐỐI TƯỢNG: Tôi đang làm Stat. SPEAKER: Stat? OK. Bạn là gì? ĐỐI TƯỢNG: nhớ? SPEAKER: Vâng. ĐỐI TƯỢNG: Stat. SPEAKER: Stat. Oh, có bạn đi. Tom, nói chuyện với Alden. Emily, bạn là gì? ĐỐI TƯỢNG: Y Sinh - SPEAKER: Bạn có trong phần này? ĐỐI TƯỢNG: số SPEAKER: OK, đó là Emily. Cô ấy là bạn của tôi. Rõ ràng không phải là tốt của một người bạn, bởi vì cô ấy mang lại cho tôi một thời gian khó khăn. Bạn có thể đẹp hơn với tôi ở phía trước của tất cả mọi người, sinh viên của tôi - ĐỐI TƯỢNG: Tôi đang làm hướng dẫn Q của bạn. SPEAKER: Thật sao? Uh oh. OK, bạn tuyệt vời. Tôi yêu các bạn rất nhiều. Oh boy. Dù sao, tôi, đêm qua, như tất cả mọi thứ - Tôi chắc chắn tất cả mọi người dường như thực sự nhấn mạnh ngay bây giờ. Tôi không biết, là sinh viên năm nhất - là các bạn cảm thấy căng thẳng? Tôi đang cảm thấy căng thẳng. Nó giống như, khi về nhà cho Lễ Tạ Ơn. Bạn giống như, tôi sẽ làm tất cả những điều này. ĐỐI TƯỢNG: Thật là khác nhau. SPEAKER: Vâng, và bạn trở lại. Jeff, bạn không cảm thấy như vậy? ĐỐI TƯỢNG: Tôi chỉ nghĩ Tôi muốn làm một ít. SPEAKER: OK, tuyệt vời. Vì vậy, tôi trở lại, và tôi đã không thực hiện bất cứ điều gì. Và đó là tất cả siêu căng thẳng. Và tôi đang quan tâm, thực sự có liên quan, về việc có hay không tôi sẽ hoàn thành tất cả mọi thứ tôi phải. Nhưng đêm qua, tôi đã không nhấn mạnh, Tôi chỉ hơi buồn một chút. Vì vậy, tôi đã viết trong nhật ký về những gì tôi đã buồn. Và tôi rất buồn về phần này trong lớp học này sắp kết thúc. Vì vậy, tôi chỉ cần đi để đọc cho các bạn một đoạn nhỏ của tạp chí của tôi, từ đêm qua. Tôi có thể nhận được một số khăn ăn, một số mô từ Tom? Không, tôi sẽ khóc. Tôi không khóc. Không phải là bạn không thể khóc, Tôi chỉ không khóc. Tôi thậm chí không biết nếu nước mắt của tôi tuyến làm việc - ống dẫn nước mắt. Tôi đã không khóc trong một thời gian dài. ĐỐI TƯỢNG: [nghe được]. SPEAKER: OK, cảm ơn. OK, có một chút lời nói đầu - có một số bộ phận khác của tạp chí của tôi nhập cảnh, bởi vì tôi cố gắng mỗi tạp chí đêm trước khi tôi đi ngủ. Tôi khuyên bạn nên ghi nhật ký. Nó giúp bạn xử lý mọi thứ, và cũng rất đánh giá cao trong ngày của bạn. Và nó làm cho nó dễ dàng hơn nhiều để tìm trở lại trong ngày của bạn và nhận ra rằng đã có rất nhiều tốt điều đã xảy ra. Ngay cả khi bạn cảm thấy thực sự nhấn mạnh vào ban đêm hoặc thực sự khó chịu, hoặc thực sự buồn hay mệt mỏi. Oh, my god. Tôi thậm chí không biết nếu nó được viết rằng cũng bởi vì tôi không đọc lại nó. Nhưng chúng tôi sẽ đọc nó. Tôi thường không đọc của tôi tạp chí, rõ ràng. "Ngày mai, tôi sẽ dạy cuối cùng của tôi Phần CS50 năm. Thật là điên rồ như thế nào thời gian nhanh bay. Tuy nhiên, tôi ấn tượng bởi chỉ cách khác nhau kinh nghiệm của tôi dạy năm nay so với khi tôi còn là một sinh viên năm hai. Để bắt đầu, tôi chắc chắn biết tài liệu tốt hơn. Nhưng không nói cho nhóm đầu tiên của tôi của sinh viên đó. Quan trọng hơn, tuy nhiên, tôi nhận ra rằng niềm vui đến từ đứng ở phía trước của một căn phòng của những gì bắt đầu ra như những người xa lạ, nhưng kết thúc như là, tại ít nhất, bạn bè trên Facebook, là không phải là một sự may mắn đầu năm. Thay vào đó, nó là từ khi biết rằng, trong một số cách nhỏ, bạn đang giúp đỡ tài năng, chu đáo, thú vị, và những người đam mê tìm hiểu thêm một chút về khoa học máy tính. Bạn đang chuyển mà bóng đèn chỉ là một bit trong socket của nó, do đó, nó có thể tỏa sáng sáng hơn bạn, hoặc họ, có thể tưởng tượng ở học kỳ bắt đầu. Bạn đang giúp biến những cau mày ngược xuống và đặt câu hỏi rằng cung cấp hỗ trợ, nhưng vẫn cho phép học sinh đứng lên một mình. Đó chắc chắn không phải là một cường điệu nói rằng phần này là yêu thích của tôi một phần của tuần. Hoặc thậm chí là tôi ngần ngại nói, đó là tất cả, tại 05:30 mỗi tuần, biết rằng nó sẽ được cách quá dài cho đến khi chúng ta gặp lại. Tuy nhiên, tôi vô cùng biết ơn tất cả mọi người ai cho tôi điều này cơ hội để trả lại cho người khác. David, sự kiên nhẫn và niềm tin của mình. Để sản xuất phim và phi hành đoàn, cho làm cho tôi trông hơi đáng kính. Và quan trọng nhất, để sinh viên của tôi, không có người mà tôi muốn không có lý do để dành 10 giờ để tìm ra sản phẩm tốt nhất cách vẽ con trỏ, hoặc đặt ra một bảng của cá heo, thông qua JavaScript. Như mọi khi, nó được một phước lành. " Vì vậy, với điều đó, cảm ơn các bạn. Tôi sẽ thấy tất cả các bạn tại hội chợ CS50, và các hackathon, nếu bạn đang ở đó. Và nếu bạn có câu hỏi, tôi sẽ gắn bó xung quanh cho đến khi không có nhiều. Nhưng tôi cảm ơn các bạn cho một năm tuyệt vời. [Vỗ tay] SPEAKER: Tôi có thể khóc.