HANNAH Blumberg: Hi semua orang. Kita akan memulai hanya beberapa menit lebih awal karena kita memiliki seluruh banyak bahan untuk melewati. Aku Hannah. Aku TF a. Maria akan bergabung kita hanya dalam beberapa menit. Dia mengajarkan bagian kanan sebelumnya. Saya mengajar bagian kanan setelah, jadi kita akan untuk tetap ke satu setengah jam. Jadi seperti yang Anda akan melihat di sini, kita memiliki cukup beberapa topik kita perlu untuk melewati, jadi kami akan pergi sedikit cepat. Tetapi jika pada setiap titik kami mengatakan sesuatu terlalu cepat atau Anda tidak mengerti, merasa bebas untuk mengganggu dengan pertanyaan. Kami ingin dapat membuat ini meninjau sesi berguna untuk anda semua mungkin. Mengagumkan. Jadi mari kita melompat ke kanan dengan beberapa topik yang kita benar-benar sangat, sangat singkat tertutup untuk kuis 0 di kuis 0 sesi ulasan. Jadi dimulai dengan daftar terkait. Jadi pastikan Anda memiliki beberapa pengetahuan dasar tentang daftar terkait dan nyaman melakukan beberapa operasi dasar. Jadi hanya untuk meninjau, terkait daftar lebih baik dari array karena mereka dapat tumbuh secara dinamis. Jadi kita memiliki keuntungan besar. Kami telah melihat mereka digunakan dalam tabel hash ketika kita tidak tahu persis berapa banyak hal yang kita akan ingin untuk memasukkan ke dalam struktur data kami. Sayangnya, kita memiliki potongan linked list seluruh memori, jadi kita belum tentu mampu melakukan akses waktu yang konstan untuk setiap elemen dalam linked list. Dalam rangka untuk menemukan elemen tertentu, kita harus iterate semua cara dari awal. Jadi perlu diingat bahwa sebagian besar operasi dasar adalah omega dari 1. Jadi insert hanya akan mengambil 1. Hapus akan mengambil n karena kita harus pergi mencari dari daftar. Dan pencarian bisa mengambil, paling buruk, n. Kita tidak bisa melakukan sesuatu seperti pencarian biner pada linked list karena kita tidak bisa hanya acak melompat ke tengah. Keren. Mengagumkan. Sedikit tumpukan. Ini, sekali lagi, muncul di kuis 0, sehingga Anda harus menjadi super nyaman dengan itu. Tapi untuk tumpukan, kami meminta Anda mengingat tumpukan nampan. Dan itu akan menjadi yang pertama di, terakhir keluar. Jadi kita tumpukan hal-hal dalam tumpukan, dan kemudian jika kita mencoba untuk mengambil sesuatu off-- yang kita sebut bermunculan off stack-- kami datang dari atas. Dan jika kita ingin menempatkan sesuatu dalam tumpukan, kita menyebutnya mendorong. Jadi itu selalu akan tumbuh dari bawah seperti tumpukan nampan. Mengagumkan. Kami telah melihat tumpukan diimplementasikan dengan kedua daftar terhubung dan array. Jika Anda menerapkan dengan array, Anda ingin memastikan untuk melacak baik ukuran dan kapasitas. Sehingga ukuran akan menjadi arus beberapa hal di tumpukan Anda, sedangkan kapasitas adalah jumlah total hal yang dapat Anda simpan di stack. Keren. Sangat mirip, kita harus antrian. Dalam hal ini, bukan berpikir tentang tumpukan nampan, memikirkan garis. Ini akan menjadi yang pertama, keluar pertama. Jadi jika Anda sedang berbaris untuk sesuatu di toko, kami berharap bahwa orang pertama di line akan membantu pertama. Alih-alih mengatakan push dan pop seperti yang kita lakukan untuk stack, kita hanya mengatakan enqueue dan dequeue. Dan lagi, jika Anda menerapkan ini dengan array, kita perlu melacak tidak hanya ukuran dan kapasitas, tetapi juga kepala, yang akan menjadi bagian depan antrian kami. Keren. Pertanyaan semua itu? Mengagumkan. Bergerak kanan sepanjang. OK, tabel hash. Di sinilah ia mulai mendapatkan benar-benar menarik. Jadi tabel hash adalah salah satu implementasi array asosiatif. Jadi pada dasarnya apa yang terjadi adalah kita memiliki semua masukan ini, dan kami memberikannya kepada hash fungsi yang mengatakan, OK, ini adalah di mana dalam tabel hash itu milik. Jadi fungsi hash yang paling sederhana bahwa kita telah melihat hanya mengatakan, OK, misalkan kita ingin menempatkan string dalam tabel hash kami. Dan ide yang sangat sederhana mungkin untuk mengatakan, OK, mari kita mengurutkan oleh huruf pertama dari kata. Jadi Anda bisa lihat di sini, kita mengambil pisang, kita meletakkannya melalui fungsi hash, dan ia mengatakan, hei, yang harus pergi pada indeks 1. Jadi kita pada dasarnya bisa memikirkan hash tabel sebagai sekelompok ember yang berbeda. Dan masing-masing ember akan memegang kepala dari linked list. Dan di dalam linked list adalah di mana kita bisa benar-benar menempatkan potongan data yang berbeda. Jadi menyelam sedikit lebih menjadi fungsi hash, inilah contoh saya hanya dijelaskan di mana kita hanya mengatakan, OK, mengambil huruf pertama kata dan kami akan menyortir ke dalam ember. Jadi mungkin, akan ada 26 ember, satu untuk setiap huruf dari alfabet. Mengapa tidak ini fungsi hash yang besar? Apa yang membuat ini non-ideal? Ya. AUDIENCE: Kau akan untuk memiliki tabrakan. HANNAH Blumberg: Ya, persis. Anda akan memiliki tabrakan. Jadi itu satu hal. Dan kita akan berbicara tentang bagaimana kita bisa memperbaiki tabrakan hanya dalam satu detik. Masalah lain dengan ini fungsi hash tertentu adalah bahwa kami berbeda ember akan menjadi ukuran cukup drastis berbeda. Kita tahu bahwa ada banyak seluruh banyak kata yang dimulai dengan A dari X, sehingga kita akan memiliki sangat ember seimbang dalam tabel hash kami. Keren. Jadi ya, mari kita kembali ke titik tabrakan. Apa yang kita lakukan jika ada tabrakan? Kami memiliki beberapa pilihan yang berbeda. Jadi satu, jadi misalkan kita mencoba untuk menempatkan berry ke dalam tabel hash kami. Dan kita lihat, oh, kita ingin untuk memasukkannya ke dalam index 1, tapi pisang sudah tinggal di sana. Apa yang akan kita lakukan? Kami memiliki dua pilihan utama. Nomor satu adalah kita dapat mengatakan, OK, tidak ada ruang dalam indeks 1, tapi mari kita terus mencari melalui sampai kita dapat menemukan tempat lain yang terbuka. Jadi kita akan mengatakan, OK, mari kita meletakkannya di tempat 3. Itu salah satu pilihan. Itulah yang disebut linear menyelidik. Dan pilihan kedua mengatakan, OK, baik, mari kita membuat masing-masing ember ini menjadi kepala daftar terkait. Dan itu OK jika ada lebih dari satu hal dalam ember. Kami hanya akan tambahkan ke depan. Jadi di sini Anda dapat melihat, OK, ketika kita dimasukkan berry, kami hanya mengambil pisang, jenis mendorongnya lebih sedikit dan melemparkan berry di sana. Dan itu juga benar-benar baik-baik saja. Ini disebut chaining terpisah. Anda dapat menganggap ini sebagai jenis seperti array kepala ke daftar terkait. Pertanyaan hash tabel, fungsi hash? Mengagumkan. Pohon dan mencoba. Jadi pohon adalah apapun dari struktur data di mana ada semacam hirarki atau semacam dari peringkat ke objek yang berbeda Anda. Dan ini akan menjadi yang super jelas ketika kita melihat contoh. Dan kami melihat mencoba, bersama dengan tabel hash, di pset5-- yang, sekali lagi, permainan benar-benar adil untuk ini quiz-- sebagai data lain struktur yang kita bisa menyimpan hal yang berbeda. Dalam kasus kamus, kita disimpan sekelompok kata-kata. Jadi mari kita lihat beberapa pohon. Jadi ini adalah contoh dari pohon. Ia memiliki jenis struktur, bahwa struktur hirarkis, di mana Anda dapat melihat bahwa ini 1 simpul di bagian atas memiliki semacam peringkat di atas 2 dan 3, yang berada di atas 4, 5, dan 6 dan 7, yang berada di atas 8 dan 9. Jadi itu yang kita maksud dengan pohon, sehingga Anda dapat hanya jenis dari gambar ini di kepala Anda. Sekarang, kami memiliki beberapa pohon yang lebih khusus. Jadi salah satu contoh adalah pohon biner. Dan pohon biner adalah, lagi, hanya akan menjadi struktur data dengan semacam hirarki, tetapi setiap node dapat memiliki paling banyak dua anak. Di situlah biner kata berasal dari. Jadi ini adalah contoh dari sebuah pohon biner. Jadi itulah kategori lebih kecil dari pohon. Sekarang mari kita mendapatkan bahkan lebih spesifik dan berbicara tentang biner pencarian biner trees-- pohon, bukan. Jadi di sini ide tidak hanya melakukan setiap simpul memiliki paling banyak dua anak, tapi semua anak-anak ke kiri akan menjadi lebih kecil dan semua anak-anak ke tepat akan menjadi lebih besar. Jadi melihat di hanya kami pohon biner, ada tidak ada hubungan antara nomor. Namun dalam pencarian biner kami pohon, kita melihat, OK, inilah 44. Dan setiap nomor di sebelah kiri adalah 44 lebih kecil dan segala sesuatu ke kanan lebih besar. Dan yang memegang pada setiap tingkat pohon. Jadi di sini, ini lebih kecil dari 22 dan ini lebih besar dari 22. Dan itulah pohon pencarian biner. Mengapa kita pikir itu disebut pohon pencarian biner? Apa algoritma apakah itu mengingatkan Anda tentang? AUDIENCE: Pencarian biner. HANNAH Blumberg: pencarian biner. Karena jika Anda sedang mencari nomor tertentu di pohon ini, di setiap titik, Anda hanya dapat mengetuk off setengah dari pohon, yang besar. Dan sehingga akan memberikan kita sesuatu yang banyak seperti pencarian biner terlihat. Ada pertanyaan? Baiklah, keren. Baiklah, mencoba. Favorit semua orang. Jadi ini adalah contoh yang kita telah melihat banyak di kelas. Dan lagi, ini hanyalah cara itu kita dapat menyimpan data. Dalam kasus kamus, sekali lagi, ini hanya akan menjadi string. Jadi mari kita lihat apa ini sebenarnya Sepertinya pada tingkat yang sedikit lebih rendah. Jadi mari kita lihat di salah satu node dalam trie. Dan kita lihat, OK, ada akan menjadi Boolean dan node, pointer ke node. Dan kita melihat bahwa Boolean disebut is_word. Jadi pada dasarnya, itu akan sesuai untuk ini segitiga kecil yang mengatakan, jika Anda sudah mendapatkan di sini, Anda telah menemukan sebuah kata yang lengkap. Kita tahu bahwa "turing" lebih di sini adalah kata yang lengkap, sedangkan hanya T-U-R adalah bukan kata karena kita tidak melihat bahwa delta kecil. Dan bahwa delta kecil, lagi, sesuai dengan is_word ini, is_word Boolean ini. Dan kemudian kita memiliki sebuah array anak. Jadi pada setiap tingkat, Anda memiliki node tertentu, dan bahwa simpul poin ke array seluruh alfabet. Sehingga Anda dapat melihat, lagi, di picture-- ini saya akan terus melompat kembali dan forth-- yang bahwa array di atas memiliki banyak berbeda node datang dari itu. Memiliki 26, atau 27 jika Anda ingin untuk memasukkan karakter tambahan. Dan ini memberi kita cara untuk menyimpan data kami dengan cara yang dapat dilihat pada Anda dapat melihat super cepat. Apa waktu pencarian untuk trie? AUDIENCE: [tidak terdengar]. HANNAH Blumberg: Ya. Dalam teori, saatnya konstan. Itu hanya akan menjadi ukuran kata yang ingin Anda melihat ke atas. Bahkan jika kita menambahkan miliaran sebuah lebih kata-kata untuk trie kami, itu tidak akan membawa kita lagi untuk menentukan jika kata yang diberikan dalam trie. Jadi itu benar-benar bagus. AUDIENCE: Apakah Anda hanya menginisialisasi array? Anda melewatkan satu atau dua titik. Dapatkah Anda hanya berbicara tentang bahwa untuk kedua? HANNAH Blumberg: Tentu, benar-benar. Pertanyaan bagus. Pertanyaannya adalah, kita memiliki sebuah array yang akan memiliki bintang node sebagai lawan hanya node, kan? Keren. Jadi di sini apa yang kita katakan adalah array kita hanya akan menjadi pointer ke array lain. Jadi itu essentially-- itu jenis terasa seperti linked list dengan cara ini di mana masing-masing anak-anak ini hanya menunjuk ke node berikutnya. Dan cara yang kita sebenarnya menentukan, hey, OK, kami telah iterasi melalui seluruh kata, adalah kata ini dalam kamus, kami hanya memeriksa is_word ini. Pertanyaan besar. Ya. AUDIENCE: OK. Jadi apa adalah runtime untuk trie? HANNAH Blumberg: Tentu. Jadi runtime untuk trie untuk lookup akan menjadi waktu yang konstan. Jadi itu hanya akan menjadi jumlah huruf dalam kata. Ini tidak tergantung pada ukuran kamus atau ukuran struktur data. Jadi, inilah contoh yang sedikit lebih sederhana. Dalam hal ini, Anda dapat melihat bahwa kelelawar kata dalam kamus dan Anda memiliki zoom, tetapi Anda tidak memiliki sesuatu seperti kebun binatang. Bagaimana kita akan membuat kebun binatang? Bagaimana kita menambahkan kebun binatang untuk kami kamus, untuk trie kami? Ya. AUDIENCE: Membuat is_word berlaku untuk [tidak terdengar]. HANNAH Blumberg: Baik. Jadi kita akan mengatakan Z-O-O, dan kemudian kami akan ingin memeriksa off kotak itu juga. Besar. Mari kita bandingkan secara singkat mencoba vs tabel hash. Mencoba benar-benar hebat karena, seperti yang kita katakan, mereka menyediakan konstan-waktu pencarian. Tapi kerugian besar adalah mereka humongous. Anda bisa mendapatkan arti, bahkan dengan melihat itu, bahwa itu akan mengambil sejumlah besar memori. Jadi mereka akan menjadi jauh lebih besar dari tabel hash, tapi mereka akan memberikan kami kali lookup lebih cepat. Jadi itu semacam Anda tradeoff, apa yang Anda peduli, apakah itu kecepatan atau memori. Pertanyaan semua itu, semua struktur data C. Indah. OKE. Kita akan pindah ke sedikit sedikit pengembangan web dengan Maria. MARIA ZLATKOVA: Lovely. OKE. HANNAH Blumberg: Anda dapat menggunakan laptop saya. MARIA ZLATKOVA: Nice. OK keren. Ketika kita bergerak sekarang untuk web pengembangan, kami berbicara sedikit tentang perizinan berubah file dan direktori sehingga mereka dapat diakses ke pengguna lain, untuk dunia, dan sehingga kita dapat melihat bagaimana pada dasarnya kita bisa menyampaikan mereka ketika kita mengembangkan hal-hal seperti situs bahwa kita sudah sebagian besar telah melakukan. Jadi kita melihat perintah chmod, yang modus perubahan, pada dasarnya. Itu perintah Linux dan perubahan izin akses benda sistem file. Dan objek sistem berkas adalah hanya direktori, file, apa pun yang Anda bisa mengubah hak akses dari. Jadi untuk melihat hak akses file, kita ketik perintah ls, daftar, l. Dan ketika kita mengetik itu, kita biasanya melihat beberapa izin yang terlihat semacam seperti ini di depan nama direktori. Jadi d mengacu pada direktori. Dan kemudian kami memiliki tiga triad bahwa pada dasarnya mengacu pada izin baik pengguna, kelompok, atau dunia. Jenis-jenis perizinan yang kita dapat miliki untuk tiga kelompok orang yang baik r untuk membaca, w untuk menulis, dan x untuk mengeksekusi. Dan kita dapat memiliki orang-orang untuk kelompok dan dunia juga. Hal yang sulit adalah bahwa kadang-kadang ketika kita ketik perintah chmod, kita akan mengetik beberapa nomor yang terdiri dari tiga bit. Jadi kita bisa melakukan seperti 777 dan bahwa pada dasarnya mengacu pada nilai tambah dari masing-masing triad ini karena r akan merujuk ke 4, w akan mengacu pada 2, dan x akan merujuk ke 1, jadi ketika ditambahkan, masing-masing dari nomor akan turun ke sejumlah kumulatif ke nilai kumulatif antara 0 dan 7. Jadi kita juga bisa memiliki 0 tanpa izin sama sekali. Dan yang pada dasarnya akan memberi kita izin untuk baik pengguna, kelompok, atau dunia. Pertanyaan ini sejauh ini? AUDIENCE: Anda mengatakan membaca adalah 4? MARIA ZLATKOVA: Ya. AUDIENCE: [tidak terdengar]. HANNAH Blumberg: Yup. AUDIENCE: Dan kemudian dengan menambahkan semua orang lain akan menunjukkan nomor Anda. MARIA ZLATKOVA: Ya. Ya. Ini adalah pertanyaan besar. Indah. Berikutnya, kita melompat ke HTML dan sedikit tentang pengembangan web. Jadi HTML hanya berarti Hyper Text Markup Language. Dan itu adalah markup bahasa yang standar bahwa itu digunakan untuk membuat halaman web. Ini disebut bahasa markup karena itu tidak benar-benar disusun. Ia tidak mengatakan bagaimana beberapa kode harus dieksekusi atau sesuatu seperti itu. Itu hanya melukiskan dan menjelaskan bagaimana web Halaman harus dibentuk dengan masing-masing elemen dan bagaimana mereka harus melihat ke pengguna. Beberapa tag HTML yang kita pergi adalah sebagai berikut. Semua dokumen HTML kita mulai dengan html DOCTYPE. Kemudian kita selalu memiliki tag html. Kami memiliki kepala dan tubuh. Dan itu penting bahwa HTML memiliki semacam ini struktur bersarang karena itu sangat jelas. Dan kemudian menjadi sangat jelas ketika kita perlu membuka dan benar-benar tag dekat. Dan kita selalu perlu untuk menutup tag yang kita sudah dibuka. Dan di sini kita memiliki beberapa jenis hal depan yang kita ingin memiliki. Jadi kita memiliki, misalnya, judul CS50. Dan kemudian kita benar-benar dapat menghubungkan style sheet yang mendefinisikan bagaimana kita gaya website kami. Itulah CSS. Kami akan pergi ke dalam beberapa berikutnya slide juga. Dalam tubuh, kita menetapkan beberapa kelas dan ID. Dan sebagai pengingat, sekali lagi, ID unik dan kelas dapat ditugaskan untuk beberapa item. Dan itu hanya berarti bahwa kita dapat menggunakan kelas dan ID dalam structures-- lain sehingga, untuk Misalnya, dalam file CSS atau gaya sheets-- untuk merujuk ke elemen tertentu dan pada dasarnya mengatakan bahwa kita ingin bergaya atau merancang beberapa unsur dalam beberapa cara tertentu. Dan kita merujuk kepada mereka oleh ID dan kelas mereka. Dan kami juga dapat merujuk ke hal yang berbeda dengan tag juga, tapi ID dan kelas hanya memberikan kita beberapa fleksibilitas dan apa yang secara khusus kita ingin lihat. Jadi hanya sebuah contoh. Kita bisa, lagi, dalam file CSS di mana kita ingin mendefinisikan beberapa style-- sehingga warna, font, dan hal-hal seperti itu-- kita bisa menentukan gaya untuk tubuh. Sehingga akan mendefinisikannya untuk seluruh tag tubuh. Tapi kemudian kita juga dapat mendefinisikan gaya untuk #title a. Dan lagi, hashtag mengacu kami ID dan dot mengacu pada kelas kami. Dan kemudian untuk .info, kami juga dapat mengatur beberapa atribut. Dan lagi, ketika kita kembali, kami telah kami kelas yang disebut info dan judul ID kami. Dan kita dapat melihat bahwa kita merujuk kepada mereka oleh #title dan .info. AUDIENCE: Apakah Anda mengatakan tanda pagar [? mengadopsi saya? ?] MARIA ZLATKOVA: Maaf? AUDIENCE: Apakah Anda mengatakan tanda pagar [? mengadopsi saya? ?] MARIA ZLATKOVA: Hashtag berarti ID, sehingga #title mengacu pada unsur-unsur apa saja yang memiliki ID ini disebut judul. Dan kemudian dot mengacu pada kelas. Jadi .info mengacu pada elemen ini karena memiliki info kelas. Oke. AUDIENCE: Mengapa Anda membedakan mereka dalam HTML? Mengapa Anda mengatakan hal-hal tertentu ID dan hal-hal tertentu adalah kelas? MARIA ZLATKOVA: Itu hanya sampai you-- HANNAH Blumberg: Ulangi pertanyaan. MARIA ZLATKOVA: Oh, maaf. Mengapa kita membedakan unsur-unsur tertentu sebagai ID dan elemen lain sebagai kelas? Itu hanya karena itu benar-benar sering merupakan pilihan desain. Ini memberi Anda banyak fleksibilitas dalam menjadi bisa mengatakan saya ingin item tertentu ini untuk memiliki ID ini karena mereka ingin untuk melakukan banyak hal dengan itu, dan saya hanya ingin mendefinisikan gaya, gaya tertentu atau apa pun warna untuk item. Dan cara untuk melakukan itu hanya memberikan sebuah ID. Dan kemudian jika saya ingin memiliki beberapa item yang berbeda memiliki itu, bukannya pergi dan pengaturan their-- bukannya melakukan itu dengan tag karena tag akan mengatur sel untuk seluruh tag untuk setiap kali tag yang digunakan, Anda dapat mengatur kelas untuk beberapa item. Dan kemudian hanya mengakses kelas itu dan mengatakan Saya ingin gaya kelas ini dengan cara itu. Dan lagi, kelas dapat ada beberapa item yang berbeda dan ID harus unik. Pertanyaan besar. Ada pertanyaan lain? OK, mengagumkan. Sekali lagi, ini adalah bagaimana pemilih ini dirujuk dalam CSS, dengan hashtag, dengan dot, atau tanpa apa-apa untuk menugaskan gaya beberapa tag, seperti tubuh. Dan di sini kita memiliki umum sintaks dari bagaimana hal ini dilakukan. Untuk mengulang beberapa terbaik praktek untuk HTML dan CSS, kita perlu, sekali lagi, tutup semua tag HTML yang kita buka. Dan apa yang kami merekomendasikan Anda lakukan untuk proyek akhir Anda, serta untuk CS50 Keuangan, adalah untuk membuat memastikan bahwa semua HTML Anda memvalidasi. Dan itu dilakukan dengan W3 Validator. Dan kemudian apa yang kita lakukan dan apa yang kita lakukan merekomendasikan memisahkan gaya, sehingga CSS dari markup HTML. Jadi apa pun yang berkaitan dengan bagaimana halaman Anda akan terlihat secara visual dan bagaimana hal itu akan diubah harus pergi ke dalam dokumen CSS. Dan kemudian markup Anda mengatakan bagaimana hal-hal berada dalam hubungan satu sama lain adalah HTML, dan yang harus masuk ke dalam dokumen HTML Anda. Ada pertanyaan? Mhm. AUDIENCE: Apa sebenarnya yang terjadi pada dengan validasi halaman ketika kita memvalidasi HTML yang [tak terdengar] dibuat? MARIA ZLATKOVA: Jadi-UMPC pikir Anda. Jadi apa sebenarnya yang sedang terjadi pada halaman dengan validasi dan mengapa kita perlu melakukan itu? Pada dasarnya, kita perlu melakukan yang karena banyak kali, browser Anda, jika Anda tidak menutup tag atau semacam itu, browser Anda masih akan membuat halaman dan masih bisa bekerja, tapi praktek terbaik untuk memastikan bahwa Anda, sekali lagi, menutup semua tag Anda, bahwa semua elemen Anda cara yang mereka seharusnya, dan pada dasarnya bahwa itu oleh konvensi yang diatur. Ini, sekali lagi, hanya hal yang Anda harus akan belajar untuk melakukan, sebagai lawan untuk memiliki kode ceroboh dan hal-hal seperti itu. Ya. Oh maaf. Saya pikir Anda mengangkat tangan Anda. AUDIENCE: Tidak, saya hanya [tidak terdengar]. MARIA ZLATKOVA: OK. AUDIENCE: Terima kasih. MARIA ZLATKOVA: Tentu saja, terima kasih. Jadi sekali lagi, terjadi bagaimana Informasi ditransfer dan model komunikasi untuk mentransfer informasi. TCP / IP. TCP hanya berarti Transmisi Control Protocol dan IP mengacu pada Internet Protocol. Dan itu hanya mengacu cara data dikirimkan. Jika kita memiliki beberapa data yang perlu disampaikan ke you-- sehingga Anda membuat permintaan untuk server tertentu. Sebagai contoh, ketika kita mencoba untuk mengakses cs50.net, kami membuat permintaan untuk server CS50 dan kami melihat bahwa kita ingin mendapatkan informasi semacam ini. Dan kemudian didasarkan pada protokol ini bagaimana informasi ini disampaikan, server memberikan informasi kembali kepada kami, klien. Dan kemudian kami dapat melihat informasi untuk halaman dan kemudian menggunakannya. Jadi Hypertext Transfer Protocol hanya protokol lain atau setel konvensi yang mendefinisikan bagaimana web browser dan web server harus berkomunikasi. Dan menempatkan ini semua bersama-sama, HTTP, lagi, hanya mendefinisikan bagaimana hypertext ini didefinisikan oleh HTML yang kami telah bekerja itu, bagaimana harus dikirimkan kepada Anda dan bagaimana data yang dikirimkan kepada Anda sampai ke Anda. Dan itu sebabnya, jika kalian ingat dari kelas, kami memiliki banyak permintaan dan kami memiliki banyak sintaks untuk permintaan ini bahwa kita akan pergi ke sekarang. Jadi sekali lagi, ketika kita mengirim permintaan ke server, kita harus mendefinisikan beberapa hal. Jadi kita perlu menemukan jenis dari permintaan yang kita sedang menyiapkan. Dan lagi, kita memiliki, misalnya, GET adalah salah satu jenis metode yang kita miliki dalam permintaan kami. Dan kemudian HTTP / 1.1 adalah hanya protokol yang kita gunakan saat ini. Sebagian besar waktu, itu akan dengan protokol yang kita gunakan. Jadi jika Anda memiliki pertanyaan seperti itu pada kuis Anda. Itulah konvensi yang kita miliki sejauh ini. Backslash mengacu pada apa pun hal kita meminta. Kemudian, tuan rumah kami, misalnya, dalam hal ini kasus, kami mencoba untuk pergi ke google.com. Jadi ini adalah nilai untuk host. Ini adalah jenis permintaan yang bisa dikirim. Dan kemudian jenis respon yang bisa dikirim, lagi, berdasarkan protokol ini, lagi, HTTP / 1.1. Jadi itulah versi HTTP lagi. 200 OK hanya kode status. Dan itu OK hanya frase berdasarkan kode status. Dan kemudian Content-Type mengacu pada tipe yang dikembalikan kepada Anda bahwa adalah untuk halaman web yang Anda terima dan bahwa browser Anda dapat membuat sesudahnya. Dan itu adalah text / html. AUDIENCE: Apa 1.1 artinya? MARIA ZLATKOVA: Itu hanya Versi of-- oh, apa 1,1 berarti? Itu hanya versi, HTTP versi protokol yang kita gunakan. Pertanyaan besar. Pertanyaan lain? AUDIENCE: Bisakah Anda meringkas Content-Type cepat nyata? MARIA ZLATKOVA: Jadi yang adalah apa server. jenis information-- apa jenis konten adalah pertanyaan. Jadi itu jenis informasi yang Anda dapatkan kembali dari server, jenis Data bahwa browser kemudian dapat membuat yang Anda gunakan. AUDIENCE: Apakah itu yang ini protokol memberitahu Anda lakukan? MARIA ZLATKOVA: Maaf? AUDIENCE: Apakah itu yang dikatakan protokol? MARIA ZLATKOVA: protocol-- The AUDIENCE: --what yang Content-Type adalah atau-UMPC MARIA ZLATKOVA: protokol ini didasarkan on-- apa protokol memberitahu Anda? Itu hanya cara bahwa informasi ini disampaikan kepada Anda berdasarkan pada apa jenis protokol itu informasi ini mendapat disampaikan kembali kepada Anda. Apakah itu masuk akal semacam? HANNAH Blumberg: Anda bisa memikirkan protokol sebagai a-- saya pikir Profesor Malan menggambarkannya di kelas sebagai jenis seperti a-- itu seperti setara dengan handshaking manusia. Mengatakan, seperti, hei, aku permintaan dan saya tahu bagaimana menangani HTTP versi 1.1. Dan kemudian server mengatakan, oh, OK, aku-- dan kedua ada. Saya juga tahu bagaimana menangani HTTP / 1.1. Dan aku akan memberikan Anda kembali beberapa konten. Dalam hal ini, itu akan menjadi tipe text / html. Jadi itu semacam hanya cara dari mereka untuk communicating-- MARIA ZLATKOVA: Ini hanya mengkonfirmasikan bahwa Anda baik mengikuti yang sama protokol dan yang kedua klien dan server-- sehingga browser Anda dan server-- yang semacam tahu apa yang Anda bicarakan dan memiliki konvensi untuk melewati data. AUDIENCE: Jadi Content-Type part-- Content-Type text / html-- itu bagian terpisah dari pesan yang sama? Atau itu bagian dari katakanlah, 200? Apakah 200 memberitahu mereka bahwa atau is-- MARIA ZLATKOVA: 200 mengatakan itu semua pergi OK. Dan kemudian jenis konten adalah semacam bagian terpisah dari pesan yang sama, dan mengatakan hal yang saya Returned memiliki jenis text / html. Itu hanya memberikan informasi lebih lanjut. Memiliki sesuatu untuk menambahkan? OKE. Pertanyaan lain tentang hal ini? Mengagumkan. Jadi beberapa status HTTP lain yang kita bisa mendapatkan selain 200 OK, orang yang kita lihat mungkin mungkin banyak yang 403 dan 404. Jadi 404, jika Anda mencoba untuk Akses sesuatu yang tidak ada. Jadi misalnya, di Anda Psets CS50 Keuangan, jika Anda telah render quote.html dan Anda tidak memiliki file tersebut, namun Anda memiliki quote.php, yang akan menghasilkan 404 Tidak Ditemukan karena file mungkin tidak ada. Untuk 403 dilarang, yang mengacu pada izin. Jadi jika beberapa file tidak dapat dibaca oleh dunia, Anda mungkin akan 403 kembali. Beberapa orang lain bahwa Anda mungkin get-- 301, Pindah Permanen; 302, Ditemukan; 304, Modifikasi; 400 permintaan Buruk; dan Kesalahan Server kemudian Internal 500 dan 503, Service Unavailable. Iya nih. AUDIENCE: Akankah kita diharapkan untuk menghafal semua status mereka? MARIA ZLATKOVA: Saya akan mereka pada contekan Anda. [TAWA] AUDIENCE: Apakah kita diharapkan untuk tahu apa yang memicu masing-masing? MARIA ZLATKOVA: Apakah mereka? HANNAH Blumberg: Untuk orang-orang yang kita sudah menjalankan into-- jadi pertanyaannya was-- MARIA ZLATKOVA: Apakah mereka diharapkan tahu apa yang masing-masing status ini Kode mungkin dipicu oleh? Jadi untuk orang-orang yang kami telah digunakan dan berlari ke dalam, saya akan mengatakan, ya. Jadi kita pasti melihat 200 OK dan kuliah di psets. Kami telah melihat 403, 404. Untuk yang lain? HANNAH Blumberg: Saya akan mengatakan 500 tampaknya permainan yang adil. MARIA ZLATKOVA: 500, ya. HANNAH Blumberg: Ya. Hanya memiliki pengertian umum dari apa yang menyebabkan mereka. Dan juga hanya dengan ini nama, Anda dapat jenis seperti membuat tebakan sebagai untuk apa yang sebenarnya menyebabkan mereka. Misalnya, pindah secara permanen, mungkin file dipindahkan secara permanen. AUDIENCE: Tapi pada sebelumnya ujian, ada begitu bagaimana Anda mengharapkan kita untuk menjawab itu? HANNAH Blumberg: Itu layak nol poin. Pertanyaan di atas 418 teko secara teknis status HTTP, tapi itu layak nol poin. Jelas, Anda tidak diharapkan mengenal mereka. AUDIENCE: Apakah yang nyata? HANNAH Blumberg: Ini adalah nyata satu, tapi itu tidak berarti apa-apa. Ini hanya lelucon. Orang internet yang lucu. MARIA ZLATKOVA: pertanyaan besar, guys. Ada pertanyaan lain? AUDIENCE: Apa kesalahan internal server? MARIA ZLATKOVA: internal server error hanya berarti bahwa Anda telah tidak dapat berkomunikasi dengan server untuk beberapa alasan. Jadi itu belum tentu sesuatu yang ada hubungannya dengan klien atau sesuatu seperti itu. Saya tidak tahu apakah ada contoh spesifik bahwa kami telah pergi ke menjelaskan, tapi ya. HANNAH Blumberg: Tentu. Jadi misalnya, seperti mari mengatakan Anda bekerja pada mashup dan server Google turun untuk beberapa Alasannya, pemadaman listrik, katakanlah. Itu akan menjadi server internal error atau semacam of-- seperti Anda tidak akan mendapatkan respon balik. MARIA ZLATKOVA: Ya. Hanya saja ketika Anda tidak dapat berkomunikasi dengan server untuk beberapa alasan karena itu turun atau alasan lain. Jadi melompat ke PHP. PHP, tidak seperti HTML, adalah bahasa pemrograman. Dan kami mulai menggunakannya karena itu sangat berguna untuk pengembangan web. Kami pertama kali digunakan dalam CS50 Keuangan. Dan pada dasarnya membantu kita membawa bersama-sama markup ini, desain, dan bagaimana kita benar-benar menggunakan informasi untuk menampilkan hal-hal pada halaman web. Jadi PHP itu sendiri berarti PHP Hypertext Preprocessor, jadi itu adalah backnorym rekursif dengan sendirinya. Dan membuka tag untuk PHP kita kiri dan panah kanan dengan tanda tanya dan php. Jadi kita sudah melihat banyak dari itu. Sekarang, kami hanya akan pergi beberapa hal dasar tentang hal itu. Jadi dengan PHP, variabel namanya mulai dengan tanda dolar. Kami tidak menentukan, sekali lagi, variabel ketik lagi. Sama seperti yang kita lakukan dengan C, kita tidak perlu melakukan itu. Kita bisa melakukan banyak berbeda hal dengan variabel. Kita bisa menempatkan mereka bersama-sama dengan menggabungkan mereka dengan notasi dot, yang kita tidak bisa melakukan di C lagi. Sekali lagi, kami memiliki sedikit lebih fleksibilitas dengan PHP dalam hal variabel. Sekali lagi, kita tidak memiliki fungsi utama. Dan PHP ditafsirkan sebagai lawan disusun, Jadi hanya bagaimana kita membuat file C, kita tidak perlu melakukan itu untuk PHP. Melainkan, cara bahwa bahasa dijalankan dengan sendirinya, itu ditafsirkan. Dan kemudian longgar diketik hanya berarti bahwa kita tidak harus menentukan variabel Jenis dan jenis variabel dipahami pada saat runtime. AUDIENCE: Tapi apa kau maksud dengan dot Rangkaian? MARIA ZLATKOVA: Tentu. Ketika kita ingin menempatkan hal-hal together-- jadi jika kita memiliki beberapa variabel yang memiliki nilai 3 dan kami telah lain variabel yang memiliki nilai string, kita bisa menempatkan variabel bersama-sama dengan menempatkan sebuah titik di antara mereka dan concatenating mereka. Atau kita bisa membuat variabel yang disebut nama dan meletakkannya bersama-sama oleh concatenating dua string. Jadi jika kita memiliki string di ganda kutipan dan kami menempatkan titik setelah, dan kemudian kami memiliki string lain, yang akan membuat string sama sekali. AUDIENCE: OK. MARIA LATVIA: Apakah itu jelas? AUDIENCE: Ya. MARIA ZLATKOVA: OK. Iya nih. AUDIENCE: Ketika Anda mengatakan ditafsirkan bukan dikompilasi, Anda berbicara tentang Anda tidak perlu sebagai tertentu ketika datang ke PHP dibandingkan C? MARIA ZLATKOVA: Ketika kita mengatakan ditafsirkan sebagai lawan disusun, apa yang kita maksud? Jadi itu berarti bahwa kita tidak perlu file yang dapat dieksekusi untuk menjalankan PHP. Ini berarti bahwa ia berjalan sebagai kelanjutannya. Apakah itu masuk akal? Sedikit lagi. HANNAH Blumberg: Jadi Anda bisa memikirkan seorang penerjemah sebagai program lain yang bertanggung jawab untuk pergi baris demi baris melalui PHP dan benar-benar dijalankan, sebagai lawan untuk menyusun semua turun ke biner. Ini tidak benar-benar berarti apa-apa tentang bagaimana spesifik kita perlu. Kami masih harus tepat, dan tidak lupa titik koma Anda, dan pastikan Anda memiliki tanda dolar Anda, dan hal-hal seperti itu. Pertanyaan bagus. MARIA ZLATKOVA: Ya. Jadi baris demi baris, seperti lawan dengan file C, kita harus membuat seluruh akhir sebelum kita benar-benar bisa menjalankannya. Itulah perbedaan utama. Tapi sekali lagi, kita tidak bisa benar-benar menjadi kurang spesifik. Jadi array di PHP merupakan sebenarnya merupakan peta memerintahkan. Jadi nilai-nilai array asosiasi untuk kunci. Dua cara untuk mendeklarasikan array, berdasarkan sintaks ini, kita bisa lebih eksplisit mengatakan kami memiliki sebuah array dan kami memiliki key1 ini yang memetakan ke value1 ini, key2 yang memetakan nilai2. Atau kita hanya dapat membuat sebuah array yang berisi nilai-nilai itu sendiri dan kemudian tombol yang dipahami dengan cara. Pertanyaan ini? AUDIENCE: Apa yang akan tombol berada di contoh kedua? 0, 1, 2, 3? MARIA ZLATKOVA: Misalnya, itu hanya kunci dalam belum tentu membuat perbedaan. Mereka hanya menentukan bagaimana Anda bisa menggunakan nilai-nilai di dalamnya. Jadi jika kita memiliki foreach loop dalam PHP yang akan memungkinkan kita untuk pergi melalui semua nilai, kita bisa melalui semua nilai, bahkan jika kita memiliki atau tidak didefinisikan kunci tertentu dalam situs sintaks sebelumnya. Begitu pun dengan semacam ini array, kita masih bisa memiliki loop foreach yang melewati setiap dari nilai-nilai dalam kunci dalam array. Jadi sintaks foreach lingkaran, kita mulai dengan array. Variabel $ arr ini array kita yang sebenarnya bahwa kita ditetapkan dalam slide sebelumnya sebagai nilai yang benar-benar terjadi melalui masing-masing nilai, terlepas dari apa pun kami memiliki kunci atau tidak. Dan kemudian kita bisa melakukan sesuatu dengan nilai dalam loop foreach. Jadi sekali lagi, jika kita memiliki sebuah array seperti ini di sini created-- jadi kami memiliki kunci dari foo dan nilai bar, kunci baz dan nilai qux-- kita dapat memiliki loop foreach yang melewati array sebagai nilai kunci dan kemudian melakukan sesuatu dengan kunci dan / atau nilai. Tapi kita tidak harus selalu harus memiliki foreach loop yang melewati array sebagai peta kunci untuk nilai. Kita bisa pergi melalui loop foreach array sebagai nilai. HANNAH Blumberg: Dan saya pikir to-- adalah pertanyaan Anda, apa adalah indeks implisit? AUDIENCE: Kinda. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Ya, ya. Jadi pada dasarnya, jika Anda tidak menentukan kunci, itu akan menjadi 01. MARIA ZLATKOVA: Ya. Sama seperti dengan C, itu nol diindeks jika Anda tidak menentukan kunci. AUDIENCE: Maaf. Bisakah Anda mencoba berbicara sedikit lebih keras? Saya mengalami sedikit kesulitan mendengar segala sesuatu. MARIA ZLATKOVA: Aku sangat menyesal. Ya tentu saja. Jadi Anda ingin saya untuk pergi lebih ini lagi? Atau this-- AUDIENCE: Jadi pada slide-- sebelumnya jika Anda hanya bisa kembali untuk satu detik. MARIA ZLATKOVA: Tentu saja, maaf. AUDIENCE: Jadi yang kedua Array sini tidak tampaknya memiliki nilai untuk kunci, semacam [? hal menyebabkan. ?] MARIA ZLATKOVA: Benar, benar. AUDIENCE: Jadi bagaimana cara kerja yang ketika Anda mengatakan itu semua atau tidak. Bagi saya, yang terlihat seperti Sebuah [? foo?] sudah. MARIA ZLATKOVA: Ya, ya. Jadi sekali lagi, ini adalah memerintahkan peta dalam pengertian ini bahwa ada dipahami, misalnya, indeks di sini dapat dipahami sebagai 0, 1, 2, 3. Sekali lagi, itu memiliki orang- indeks setara kami memiliki kunci dipetakan ke nilai-nilai. Jadi jika kunci kami adalah 0-- maaf. HANNAH Blumberg: Tidak, ada yang kapur di sini. Ini sebenarnya benar-benar bagus. MARIA ZLATKOVA: Itu bagus. OKE. Jadi sekali lagi, $ arr 0 akan kunci untuk nilai 1. 0 akan menjadi kunci untuk nilai 1. AUDIENCE: Maaf. Ini terlihat. HANNAH Blumberg: Baiklah, Nevermind. Kapur adalah ide yang buruk. Aku mengambil kembali. Anda dapat menganggap tombol sebagai 0 peta dengan nilai 1. MARIA ZLATKOVA: Ya. Jadi ini adalah 0, ini 1, 2, 3. Ini dapat kunci Anda. Anda dapat menganggap mereka as-- ya. Jadi, bukannya memiliki kunci eksplisit, mereka semacam dipahami sebagai indeks mulai dari 0. Kapur tidak membantu. Ya. AUDIENCE: Untuk loop foreach, jika kita ingin melihat sebagai nilai, itu akan hanya secara otomatis indeks 0? MARIA ZLATKOVA: Ya. Ini akan pergi melalui masing-masing nilai. AUDIENCE: [tidak terdengar] sebagai 0 atau akan yang hanya melakukan 0? MARIA ZLATKOVA: Anda akan memiliki mengatakan sebagai tanda dolar dan kemudian beberapa nama variabel, nilai. AUDIENCE: [tidak terdengar]. MARIA ZLATKOVA: Maaf? AUDIENCE: Maaf, aku hanya mencoba untuk mengingat. Bagaimana Anda bahwa jika Anda dapat melakukannya otomatis pengindeksan hanya 0 dari? MARIA ZLATKOVA: Jadi bagaimana Anda melakukannya jika Anda tidak memiliki nama kunci tertentu? AUDIENCE: Ya. MARIA ZLATKOVA: Anda akan hanya define-- hanya mengatakan pada diri sendiri karena beberapa nama. Jadi dalam psets Anda, kalian mungkin ingat foreach $ row sebagai $ baris, kita buat diri kita $ row ini mengatakan kami ingin pergi melalui baris sebagai $ baris. Meskipun kita tidak memiliki $ ini eksplisit baris didefinisikan, kita hanya bisa pergi dan mengatakan ini bisa menjadi kunci kami, dan hanya pergi melalui masing-masing nilai. AUDIENCE: Jadi adalah nilai variabel baru kita menciptakan untuk menyimpan [tidak terdengar]? MARIA ZLATKOVA: Jadi bukan inheren variabel baru. Ini adalah variabel yang mengacu pada dalam array untuk masing-masing. HANNAH Blumberg: Ini nama variabel baru. MARIA ZLATKOVA: Ya, itu nama variabel baru, tapi itu tidak inherently-- ya. Ini hanya variabel baru Anda bisa melakukan itu. Jadi bagaimana kita lakukan $ baris sebagai $ baris, baris adalah nama variabel baru yang kita bisa menciptakan dalam lingkaran foreach kami. Itu tidak harus ada sebelumnya sebelum itu. AUDIENCE: Bisakah Anda pergi melalui logika untuk masing-masing, dengan menggunakan contoh di sana? MARIA ZLATKOVA: Mhm. Oh maaf. Berikut contoh. Yakin. Jadi untuk setiap array-- sehingga yang berarti pergi ke array ini sebagai kunci value-- yang akan untuk pergi melalui array ini dan pertama pergi dan mendapatkan foo, yang foo kunci dan bar nilai. Dan kemudian pada kedua iterasi dari loop, itu akan pergi melalui dan mengambil yang baz kunci dan nilai qux. Dan kemudian Anda dapat melakukan sesuatu dengan salah satu dari mereka atau keduanya. AUDIENCE: Jadi ide di balik memiliki titik kunci untuk nilai, apa yang Anda akhirnya mengakses? MARIA ZLATKOVA: Apa ide memiliki menunjuk kunci untuk menghargai? Ini hanya konvensi lain, lain cara melalui array dan mampu mengakses baik kunci atau nilai atau keduanya dan menggunakannya. AUDIENCE: Apa peran untuk memerintahkan agar foreach berjalan di? Jadi jika kita menambahkan elemen ke array kemudian, akan mereka menjadi orang-orang pertama disebut dalam array foreach, atau akan nanti? MARIA ZLATKOVA: Jadi apa urutan yang foreach lingkaran berjalan melalui array di? Ia pergi melalui pertama elemen ke elemen terakhir, ke elemen ditambahkan terakhir. Jika Anda menambahkan elemen di kemudian hari, mereka akan akan accessed-- elemen pertama akan diakses sebagai yang pertama elemen array, dan kemudian Anda akan pergi melalui masing-masing unsur sebagai semacam sebuah ordered-- bukan memerintahkan, tetapi cara yang mereka telah dimasukkan ke dalam array. AUDIENCE: elemen Jadi baru ditambahkan di kemudian hari? Jadi mereka added-- mereka akan menjadi yang terakhir di [? perulangan. ?] MARIA ZLATKOVA: elemen New can-- pada dasarnya, ketika unsur-unsur baru ditambahkan, yang mereka ditambahkan ke akhir array? AUDIENCE: Ya. MARIA ZLATKOVA: Saya percaya begitu. Iya nih. Dan kemudian dengan foreach loop Anda, setelah Anda menambahkan elemen baru dan Anda pergi melalui mereka, unsur-unsur baru akan menjadi accessed-- unsur baru, apakah itu ditambahkan terakhir, itu akan diakses terakhir. AUDIENCE: Dapatkah Anda hanya memberikan contoh sesuatu yang akan [tidak terdengar] dengan sesuatu dengan nilai seperti [tak terdengar] atau nilai, suka bagaimana Anda akan memformat itu? MARIA ZLATKOVA: Tentu. Dapatkah saya memberikan contoh dari apa yang kita akan melakukan dengan nilai? Jadi apa yang kalian mungkin akrab dengan adalah bahwa kita sudah melalui array dan pada dasarnya dicetak masing-masing elemen, misalnya, sebagai bagian dari daftar memerintahkan atau sesuatu yang. Apakah itu masuk akal atau kita ingin to-- AUDIENCE: Bisakah kita mencetak nilai-nilai ini keluar? MARIA ZLATKOVA: Ya, kita bisa mencetak dan kemudian pada dasarnya $ nilai karena pada bahwa nilai tertentu, kami akan mencetak nilai di dalamnya. Jadi jika kita berada di iterasi pertama kami itu dan kami dicetak $ nilai, kami akan mencetak bar. AUDIENCE: Apakah ada juga untuk loop dalam PHP atau hanya loop foreach? MARIA ZLATKOVA: Ada juga untuk loop di PHP. Dan logika mereka adalah sebagian besar sama seperti apa yang telah digunakan untuk. AUDIENCE: Jadi nilainya adalah nol. MARIA ZLATKOVA: Ini seperti sama. Ya. AUDIENCE: aku hanya akan bertanya. Jadi, ketika Anda mendeklarasikan array, Anda tidak perlu untuk mengatakan apa ukuran itu akan menjadi, yang berarti bahwa Anda hanya dapat menambah dan mengambil elemen [tidak terdengar]. MARIA ZLATKOVA: Yup. Oke. Persis. Ketika kita mendeklarasikan array, kita tidak perlu mengatakan apa ukuran itu, jadi kami hanya dapat menambahkan elemen ke atasnya kemudian juga. Pertanyaan lebih? Jadi membawa PHP dan HTML bersama-sama, apa yang kita telah seen-- baik, misalnya, dalam contoh ini, kita memiliki bentuk HTML yang memiliki field input. Dan field input hanya nama dan kemudian memiliki tombol Submit. Dan ketika Anda menekan Kirim tombol, dalam file hello.php kami, karena metode untuk form adalah mendapatkan, kita bisa mengakses apa pun di nama dengan ini mendapatkan variabel global yang is-- sintaks untuk itu adalah $ _GET. Dan kemudian kita dapat mengakses apapun input pengguna dalam bentuk nama yang dengan menentukan nama bidang itu. Pertanyaan lain atau pertanyaan pada contoh khusus ini? AUDIENCE: Dimana PHP? MARIA ZLATKOVA: Berikut. Jadi ini adalah tag pembuka untuk PHP. AUDIENCE: Oh, benar. MARIA ZLATKOVA: Ya. HANNAH Blumberg: The = adalah istilah untuk ini adalah PHP dan hanya gema. AUDIENCE: Oh. MARIA ZLATKOVA: Ya, maaf. Saya harus membuat yang jelas. HANNAH Blumberg: Print. MARIA ZLATKOVA: Ini hanya fungsi yang memungkinkan kita untuk mencetak sesuatu. Pertanyaan besar. Jadi going-- ya. AUDIENCE: Apakah ada akan cukup sedikit coding tangan PHP dan HTML pada kuis 1? MARIA ZLATKOVA: Ada bisa menjadi cukup banyak interpretasi PHP dan HTML, belum tentu seperti sejumlah besar coding, meskipun Anda mungkin harus menulis loop foreach, meskipun, untuk loop. Salah satu loop yang kita menutupi di sini adalah permainan yang adil. Dan itu sebagian besar itu. HANNAH Blumberg: Saya akan siap. Dengan cara yang sama bahwa kami meminta Anda untuk menulis sekelompok fungsi C pada kuis 0, Saya akan siap untuk melakukan sama di PHP dan JavaScript. MARIA ZLATKOVA: Ya. HANNAH Blumberg: Saya akan mengatakan sebuah little-- seperti kita tidak akan membuat Anda menulis HTML besar Halaman hanya karena itulah sedikit membosankan, tetapi Anda mungkin memiliki bagian-bagian. Itu pertandingan benar-benar adil. Seperti halaman HTML kecil, benar-benar adil. AUDIENCE: OK. Bagaimana di JavaScript juga? HANNAH Blumberg: Ya. Permainan yang adil JavaScript ini. MARIA ZLATKOVA: Ya. Itu pertandingan benar-benar adil. HANNAH Blumberg: Kita akan dengan yang di seperti 10 menit. MARIA ZLATKOVA: SQL, sekali lagi, Structured Query Bahasa. Pada dasarnya memungkinkan kita untuk mengelola data dalam manajemen database relasional sistem. Itu hanya pada dasarnya berarti bahwa kita punya tempat untuk menyimpan beberapa data yang kita mungkin ingin digunakan dalam website atau dalam bentuk lain. Dan kemudian kita memiliki pertanyaan untuk mendapatkan informasi dari database kami, atau untuk memasukkan informasi di dalamnya. Banyak umum UPDATE ones--, INSERT, SELECT, dan DELETE. Jadi untuk UPDATE, ini adalah sintaks untuk memperbarui data dalam database. Memperbarui tabel ini disebut meja dengan mengatakan SET, kita dapat mengatur beberapa nilai dalam semua baris ke sesuatu yang sama yang lain. Jadi kita juga bisa menentukan beberapa spesifik entri yang ingin kita memodifikasi dan yang dapat menggunakan MANA. Dan kita dapat menentukan bahwa kita hanya ingin memodifikasi beberapa baris di mana rumah untuk, jika kita memiliki meja siswa dan semua siswa memiliki rumah, jadi kami hanya akan memodifikasi beberapa nilai di mana rumah sama Currier, sebagai contoh. Untuk INSERT, kita dapat menyisipkan nilai-nilai tertentu ke dalam tabel. Jadi INSERT INTO tabel, dan kemudian nilai-nilai, dan kemudian di kurung, kita tentukan yang menghargai Anda ingin menyisipkan. Jadi INSERT INTO tabel, col1 dan col2, nilai VAL1 dan VAL2. Jadi ini menyisipkan dasarnya baris baru ke dalam tabel yang berisi nilai-nilai 1 dan 2 di bawah kolom 1 dan 2. Dan kemudian kita akan pergi contoh singkat tentang bagaimana ini terlihat seperti dalam database kami sedikit. Tetapi permintaan akhir ini bahwa saya pikir kita akan pergi, SELECT, itu hanya memungkinkan kita untuk memilih data dari tabel untuk mungkin menggunakannya setelah itu. Dan cara kita melakukan hal ini adalah kita hanya menyimpannya dalam beberapa variabel. Dan kemudian kita mungkin dapat menggunakannya lagi. Jadi Bintang SELECT berarti memilih semua. Itu hanya sebuah singkatan untuk memilih semua. DARI MANA meja, kami sedang mencari untuk beberapa kondisi tertentu, jadi di mana kolom sama sesuatu, misalnya. Jika kita hanya ingin pilih semua dari meja, ini hanya memilih semua kolom dan semua baris dari tabel. Dan kemudian DELETE FROM table MANA col sama sesuatu, ini hanya menghapus beberapa baris dari meja kami di mana kita memiliki beberapa kondisi tertentu. Dalam hal ini, kondisi adalah kolom sama dengan sesuatu. Jadi hanya contoh cepat dari ini. Jika kita memiliki tabel ini di sini dan kami masukkan ke dalam tabel, nilai-nilai ini, yang akan menyisipkan baris baru. Dan jika kita memiliki auto-increment, ini akan hanya selisih ID kita dari 0 1 sampai 2. Jika kita memilih semua dari siswa, itu hanya mengembalikan semua bidang dan semua baris. Dimana tahun lebih besar dari atau sama dengan 2016, yang hanya akan kembali Hannah dan diriku sendiri. Dan kemudian jika kita hanya dipilih tahun id dan tahun DARI siswa di mana rumah Cabot House, yang akan, lagi, kembali Hannah dan saya sendiri. Kemudian jika kita dihapus dari siswa di mana nama sama dengan Rob, yang akan menghapus seluruh baris. Dan kemudian jika kita mengatur Nama, siswa UPDATE Nama SET sama dengan Daven MANA rumah sama Cabot House, yang akan pergi ke baris itu dan kemudian memperbarui nama. Dan kemudian beberapa jenis SQL data CHAR, VARCHAR, INT, dan FLOAT. Ini adalah permainan yang adil. Aku akan pergi lagi dan pastikan Anda tahu dan mereka pada lembar contekan Anda, apa masing-masing karakter telah digunakan untuk, apa Anda menggunakan mereka pada psets Anda, dan pastikan Anda akrab dan nyaman dengan harus memilih dari jenis data yang berbeda dalam pset Anda. Iya nih. AUDIENCE: Apa yang tabel yang disimpan? Ya, di mana tabel ini disimpan? MARIA ZLATKOVA: Nah, sekarang, itu tidak disimpan. Pokoknya, di mana tabel ini disimpan? Tetapi dapat disimpan dalam database SQL. AUDIENCE: Dan di mana database SQL? Dalam komputer, secara online di suatu tempat, server? MARIA ZLATKOVA: Ini bisa menjadi beberapa hal yang berbeda. HANNAH Blumberg: Kami telah dihubungkan dengan Tabel SQL sebagian besar dengan phpMyAdmin. Jadi kita bisa meminta server untuk menyimpan mereka untuk kita. Kita bisa menyimpannya di komputer kita sendiri. MARIA ZLATKOVA: Ini tergantung pada bagaimana Anda ingin melakukannya sendiri. Tapi kami telah menyimpan mereka, sebagai Hannah disebutkan, pada phpMyAdmin, yang online. Dan kemudian cara kita menggunakan PHP dan SQL, kita menyimpannya ke dalam beberapa variabel apa yang telah kita tanya untuk. Jadi jika kita SELECT semua DARI sejarah dimana user_id sama dengan id SESI, yang akan memilih semua baris untuk orang tertentu yang login dari sejarah meja dan mengurutkan mereka ke dalam baris. Sebuah hal yang keren untuk tahu adalah bahwa fungsi permintaan CS50 ini melindungi terhadap tag SQL injection. Itu hanya berarti bahwa itu memastikan input yang dimasukkan sudah benar dan bahwa orang yang memasuki input tidak mencoba untuk memasukkan beberapa berbahaya kode untuk baik drop meja kami atau menghapus segala sesuatu dalam database kami. Sebuah gambaran singkat dari Model Model View Controller, itu hanya cara mengatur dan berpikir tentang kode. Ini lagi, paradigma desain. Apa itu artinya kita bahwa can-- dan itu praktek yang baik untuk memisahkan bagian-bagian yang berbeda dari kode kita dan apa yang mereka mengontrol ke dalam tiga paradigma. Jadi pandangan kami adalah yang paling sering kami template, tata letak kami, jalan bahwa kita menetapkan bagaimana kode kita terlihat. Itu sebagian besar file CSS kami dan cara bahwa kita mendefinisikan desain kode kita, dasarnya. Controller kita adalah sebagian besar apa kami sudah melakukan dengan file PHP. Jadi sekali lagi, bekerja dengan informasi yang kami miliki dan mendefinisikan bagaimana yang informasi yang digunakan, dan kemudian menyampaikan informasi yang baik ke tampilan atau model. Dan model, dengan cara yang kita sudah telah menggunakan yaitu telah database kami, jadi di mana informasi kami adalah disimpan sehingga memiliki suatu tempat tinggal di, dan salah satu kode yang berkaitan dengan cara bahwa kita mendapatkan informasi atau cara yang kami memperbarui informasi tersebut. Jadi dalam model MVC, HTTP permintaan dikirim ke web server. Kemudian, menafsirkan kontroler permintaan dari pengguna dan kemudian memvalidasi input pengguna. Ini opsional yang kita miliki controller berkomunikasi dengan model, jadi sesuatu seperti database kami atau beberapa fungsi lainnya yang relay informasi. Dan akhirnya, controller melewati informasi ke tampilan sehingga dapat diberikan dan bahwa hal itu dapat menjadi terlihat untuk setiap orang mengakses halaman web. Ada pertanyaan? Mengagumkan. Jadi sekali lagi, model, fungsinya, lagi, adalah penyimpanan persisten informasi, mengelola dan mengorganisasi data. Dan apa yang kita telah melihat begitu jauh adalah database MySQL dan file data yang dapat digunakan. View, penyajian informasi ke pengguna, UI, atau user interface. Dan contoh dari hal ini adalah HTML. Dan kemudian kita mungkin memiliki PHP minimal. Jadi untuk loop yang iterates atas data yang dicetak adalah bagian dari pandangan, sebagai lawan controller. Dan kemudian banyak file PHP kami masuk dalam kategori kontroler. Itu hanya menangani permintaan pengguna dan mendapat informasi dari model. Melompat ke Dokumen Object Model, ini hanya mengacu pada cara HTML dokumen diatur. Dan mereka disusun dalam pohon struktur yang memiliki hierarki. Jadi jika kita memiliki akses ke [tidak terdengar] representasi dari dokumen, kita dapat bekerja dengan dokumen, seperti kita memanipulasi objek pada dasarnya. Dan untuk membuat ini sedikit lebih jelas, ketika kami memiliki banyak kami tag yang berbeda merespon untuk rute yang berbeda di pohon kita. Dan kemudian untuk contoh ini, kita memiliki node dokumen mulai. Kami memiliki, kemudian, simpul HTML kami yang terbagi menjadi kepala dan tubuh. Kepala memiliki judul dan kemudian judul mengandung halo, dunia. Dan tubuh kita hanya berisi halo, dunia juga. Jadi pertanyaan pada salah satu hal-hal yang kita pelajari sejauh ini? Dan jika tidak, Hannah akan mengambil alih dengan JavaScript. Mengagumkan. HANNAH Blumberg: OK, keren. Jika sesuatu datang dengan PHP atau HTML, atau salah satu dari hal-hal Maria tertutup, kita selalu dapat menghentikan sebentar. Kami melakukan yang lebih baik di waktu lagi, begitu mengagumkan. Dan hanya untuk kembali benar-benar cepat untuk ini, jika Anda melihat setiap ujian tahun lalu, hal ini muncul either-- sini adalah beberapa HTML, membuat diagram ini. Atau inilah diagram ini, membuat beberapa HTML, jadi pasti berlatih itu. Dan kemudian itu satu dijamin pertanyaan yang dapat Anda mendapatkan hak. Keren. Jadi mari kita bicara tentang JavaScript dan bagaimana itu sedikit berbeda dari bahasa seperti PHP dan C, dua bahasa yang kita lihat sebelumnya. Jadi nomor satu, itu longgar diketik. Itu seperti PHP, tapi tidak seperti C. Ini bahasa ditafsirkan. Sekali lagi, itu seperti PHP, seperti C. Dan ini akan memungkinkan kita untuk use-- itu bekerja sangat baik dengan halaman web. Ini akan memungkinkan kita untuk memanipulasi konten dan bagaimana tampilannya dan apa yang dilakukannya. Kita akan melihat sedikit dari Ajax. Hal ini memungkinkan kita untuk berkomunikasi asynchronously dengan server yang berbeda dan mendapatkan informasi. Dan ini adalah hal yang yang benar-benar memisahkan JavaScript dari PHP dan C adalah bahwa itu adalah sisi klien. Kedua PHP dan C adalah biasanya server-side. Untuk sebagian besar, dan hampir seluruhnya apa kita lihat, setidaknya di kelas ini, JavaScript bekerja pada sisi klien, yang berarti bahwa browser sebenarnya bertanggung jawab untuk menjalankannya. Dan itu berarti bahwa kita tidak perlu berinteraksi dengan server. Jadi itu berarti itu bisa menjadi jauh lebih cepat karena itu sebenarnya hanya itu Chrome, itu Safari, Firefox itu, apa pun yang Anda menggunakan benar-benar menjalankan JavaScript. AUDIENCE: Apa asynchronous artinya? HANNAH Blumberg: Ah, apa tidak asynchronous berarti? Pertanyaan besar. Asynchronous means-- baik, konten yang kita gunakan itu, OK, kita menciptakan halaman web dan kita perlu untuk mendapatkan beberapa informasi. Jadi dengan contoh mashup, beberapa informasi yang kita mungkin ingin adalah judul artikel. Sekarang, kami could-- salah satu pilihan adalah melakukannya serentak dan itu berarti mari berhenti, pergi mendapatkan artikel, mendapatkan artikel kembali, dan kemudian membuat, tapi itu akan menjadi benar-benar lambat. Itu akan menjadi pengalaman pengguna yang buruk karena Anda hanya akan duduk ada menunggu sesuatu untuk merespon. Asynchronous berarti kami akan terus akan tentang bisnis kami, render halaman, dan kami akan mengirimkan permintaan yang jenis akan terjadi di latar belakang. Saya pikir kita menggunakan contoh di kuliah menelepon Rob dan mengatakan, hey, Anda bisa melihat hal ini bagi saya dan kembali ke saya, sebagai lawan hanya saya menunggu di telepon. Jadi asynchronous berarti terjadi di latar belakang jauh dari kita sejajar. Pertanyaan besar. ada lagi? Besar. Kami akan melompat lebih banyak ke permintaan asynchronous dengan Ajax. AUDIENCE: Apakah JavaScript-- mana tidak jatuh dengan model-view-controller? HANNAH Blumberg: pertanyaan besar. Mana JavaScript jatuh dengan model-view-controller? Hm. Saya kira itu bisa fall-- jadi kami biasanya tidak ingin squish menjadi yang paradigma, tapi saya kira saya akan mengatakan, OK, jadi JavaScript sebenarnya akan memungkinkan kita untuk mengumpulkan data, menafsirkan data, benar-benar melakukan hal yang bermakna dengan data. Dengan cara itu, itu sangat kontrol seperti. Tapi itu juga akan memungkinkan kita untuk menampilkan hal-hal dan hal-hal cetak. Dengan cara itu, itu sangat pandangan-seperti. Ya. Jadi jenis seperti PHP di di mana ia dapat jenis menjadi keduanya. Pertanyaan bagus. ada lagi? Baiklah, mengagumkan. Bergerak kanan sepanjang. Jadi mari kita lihat contoh bagaimana kita dapat menggunakan JavaScript di salah satu program web kami. Jadi saya akan mempertimbangkan ini index.html dengan sekelompok HTML. Dan hal yang saya ingin Anda fokus pada adalah tag script ini. Dan ini mengatakan, OK, saya ingin menjalankan beberapa JavaScript dan di sini adalah di mana ia tinggal. Ia tinggal di hello.js. Dan sangat banyak seperti CSS, kita bisa menempatkan JavaScript dalam HTML. Mengapa kita ingin memisahkan keluar? Ya. AUDIENCE: Mudah untuk menulis ulang? HANNAH Blumberg: Ya. Lebih mudah untuk menggunakan seluruh halaman web yang berbeda. Ini membuat hal-hal lebih bersih. Itu hanya praktek yang baik. Mengagumkan. Jawaban yang bagus. Begitu baik, jadi ini akan menjadi index.html kami. Dan kemudian di sini adalah kami File JavaScript kecil kecil. Dan semua yang dikatakannya adalah peringatan Halo, dunia. Jadi apa yang terjadi adalah ketika Halaman ini renders-- jadi jika Anda pergi ke situs web apapun ini is-- semua yang akan terjadi yang itu akan mengatakan, OK, aku akan menjalankan kode JavaScript ini. Dan kode JavaScript ini hanya mengatakan peringatan Halo, dunia. Jadi aku akan mendapatkan ini ramah sedikit pop-up. Keren? Itu jenis seperti kami pertama Program JavaScript, kami Halo, dunia. Mari kita lihat sedikit lebih banyak tentang apa sintaks JavaScript terlihat seperti. Dan secara khusus, mari kita bandingkan dengan C dan PHP, yang telah kita lihat sebelumnya. Dalam JavaScript, kita akan memiliki var, nama variabel, dan kemudian nilai sebenarnya. Dan kita tidak menentukan jenis, hanya seperti di PHP, tapi sangat tidak seperti di C. Jadi misalnya, jika kita ingin untuk menyimpan nilai 50, di C, kita harus mengatakan, hey, C, saya ingin integer, Aku akan menyebutnya i, dan nilainya adalah 50. Dalam PHP, itu sedikit lebih mudah. Kita mengatakan, hei, saya ingin variabel disebut i dan nilainya adalah 50. Sangat mirip, dalam JavaScript, kita mengatakan hey, saya ingin variabel yang disebut i, nilainya adalah 50. Setiap kali berikutnya yang saya gunakan i, saya tidak perlu menulis var. Hanya saja saya dari saat itu. Dengan cara yang sama, di C, di mana setelah kami mengatakan int i, kita hanya menggunakan i. Keren? Baiklah. Pindah ke loop, Untungnya, ini hampir melihat exactly-- Saya pikir mereka persis sama dengan apa yang loop akan terlihat seperti di sesuatu seperti C di mana Anda untuk loop akan memiliki tiga bagian- inisialisasi, kondisi, dan update. Sebuah loop sementara, terlihat sama persis. Kami hanya memberikan kondisi. Dan do a while, lagi, persis sama. Kami memberikan kondisi. Katakanlah saya ingin iterate over-- Saya ingin melakukan sesuatu yang lima kali. Dalam C, kita bisa menulis untuk init i sama dengan 0. i kurang dari 5, i ++. Hanya bedanya, dalam JavaScript, bukannya mengatakan int i sama dengan 0, kita katakan var i sama dengan 0. Indah. Itulah satu-satunya perbedaan. Pertanyaan semua itu? Iya nih. AUDIENCE: Jadi dalam PHP, itu sama hal, kecuali tapi seperti variabel? Atau adalah bahwa contoh var? HANNAH Blumberg: Ya. Jadi dalam PHP, itu akan menjadi tanda dolar. Jadi itu akan $ i equals 0, $ i kurang dari 5, $ i ++. Pertanyaan besar. Sekarang mari kita bicara tentang deklarasi fungsi. Dalam C, ketika kita mendeklarasikan fungsi, kami berikan itu nama dan kami memberikan beberapa parameter. Dan di awal, kami menulis jenis. Dalam JavaScript, semua yang kita harus lakukan adalah menulis fungsi kata kunci yang mengatakan, hey, JavaScript, Aku akan mendefinisikan fungsi. Dalam hal ini, ia memiliki nama sum. Dan itu membutuhkan dua argumen, x dan y. Perhatikan bahwa kita tidak peduli tentang jenis x dan y. Dan seperti C, kita memiliki ini kembali kata kunci, sehingga kita bisa melakukan sesuatu seperti return x dan y. Dan sekarang setelah kami telah menulis ini pertama fungsi, kita dapat menggunakan sum di mana saja. Dan itu benar-benar baik-baik saja. Satu hal yang benar-benar keren tentang JavaScript yang sangat tidak seperti C adalah bahwa fungsi dapat diperlakukan seperti nilai-nilai. Jadi kita bisa melakukan sesuatu seperti di sini di mana saya kira saya menutupi ini up-- Aku menutupi var sum part-- dan kami hanya mengatakan Fungsi xy sama pulang x ditambah y. Itulah yang akan disebut fungsi anonim. Ini fungsi tanpa nama. Sedangkan ini mengatakan fungsi sum, bla, bla, bla, ini hanya akan mengatakan fungsi. Tapi sekarang meskipun saya memiliki fungsi anonim ini, fungsi yang benar-benar hanya sebuah nilai. Kita bisa memperlakukannya seperti nilai. Jadi kita bisa menyimpannya dalam variabel yang sama cara kita bisa menyimpan 50 dalam variabel. Jadi kita bisa mengatakan, OK, saya ingin variabel, itu disebut sum, dan itu adalah fungsi ini. Jadi dua hal yang benar-benar akan melakukan hal yang sama persis, tetapi sintaks sedikit yang berbeda dan jenis yang menyenangkan catatan. Ya. AUDIENCE: Jadi Anda bisa menelepon fungsi yang anonim dengan mengatakan, sum kurung 2, 5? HANNAH Blumberg: Ya. Anda dapat menyebutnya anonim fungsi dengan cara yang sama. Anda akan melakukan sum (2, 5) ;. Itu akan benar-benar baik. Jika saya tidak melakukan var sum sama fungsi, jika aku hanya dihapus this-- Aku tahu itu di tangan saya, tapi berpura-pura aku dihapus this-- kemudian fungsi yang jenis saja pergi. Anda tidak pernah bisa menggunakannya lagi karena Anda tidak memiliki nama untuk itu. Sulit untuk menyebut sesuatu Anda tidak tahu apa yang harus menelepon. Pertanyaan bagus. Ya. AUDIENCE: Dapatkah Anda referensi sum di tempat-tempat lain dengan nilai x ditambah y? HANNAH Blumberg: Dapatkah Anda sum referensi di tempat lain dengan x nilai ditambah y? Saya tidak sepenuhnya yakin apa yang Anda maksud. AUDIENCE: Jadi masa lalu Anda semi-anonim fungsi sum sama dengan ini fungsi anonim, sehingga sum sekarang variabel yang Anda can-- HANNAH Blumberg: Benar. Jadi sum variabel, tapi itu actually-- sehingga jumlah adalah variabel yang nilai adalah fungsi. Jadi itu adalah fungsi, yang merupakan jenis hal yang aneh untuk membungkus kepala Anda sekitar karena kami sudah bermain dengan C dan Anda tidak bisa melakukan itu di C. Tapi sekarang kita bisa menyebut jumlah yang cara yang sama kita bisa menyebut sum di sini. AUDIENCE: OK. HANNAH Blumberg: Ya. Pertanyaan bagus. Ya. AUDIENCE: Jadi kita tidak menggunakan prototipe di PHP atau JavaScript? HANNAH Blumberg: Tidak, kami tidak perlu menggunakan prototipe, terutama dalam JavaScript. Jadi satu praktek hal yang buruk bahwa aku akan mengatakan bahwa Anda tidak harus melakukan adalah Anda tidak perlu menulis var i = 50. Anda hanya bisa mulai melakukan i = 50. Dan hanya akan membuat saya variabel global. Ini praktek yang sangat buruk untuk tidak pernah mengatakan explicity var i, tapi itu sesuatu yang dapat Anda lakukan. Penafsir tidak akan berteriak pada Anda. JavaScript cukup seperti, Anda dapat melakukan apa yang Anda inginkan. Oh maaf. Ada dua. Di celana oranye. Lanjutkan. AUDIENCE: Tidak, Anda pergi pertama. AUDIENCE: Tidak, aku hanya mengatakan Saya tidak punya tangan saya. OKE. Jadi jika Anda adalah untuk memanggil yang pertama kali, sekarang jumlah, kita menyebutnya dengan cara yang sama, x, y, seperti setiap kali? HANNAH Blumberg: Ya. Jadi kedua pada dasarnya melakukan hal yang sama. AUDIENCE: Dan apa keuntungan menggunakan satu atau yang lain? HANNAH Blumberg: Tidak ada keuntungan menggunakan satu atau yang lain. Saya hanya ingin menunjukkan dua bagian yang berbeda dari sintaks. Banyak kali di mana anonim fungsi memiliki tujuan adalah jika argumen lain Fungsi harus fungsi. Dan kita akan melihat bahwa di hanya kedua dengan Ajax. Jadi jika itu tidak masuk akal, menyimpannya di bagian belakang kepala Anda. Di situlah anonim Fungsi mungkin berguna karena itu tidak benar-benar layak memberikan nama karena kita hanya akan menggunakannya sekali. Ya. AUDIENCE: Jika x dan y perubahan kemudian pada, akan meringkas berubah juga? HANNAH Blumberg: Jika x dan y perubahan nanti, akan meringkas berubah juga? Jadi ini sebenarnya saya berpikir sesuatu yang, sekali lagi, itu hanya terasa sangat berbeda dari C. Ini bukan nilai. Ini bukan 5. Hanya saja fungsi itu sendiri. Jadi, segera setelah Anda memberikan parameter, maka Anda benar-benar akan menghitung nilai. MARIA ZLATKOVA: Dan kemudian Anda dapat memanggil fungsi dan menggunakannya untuk mendapatkan beberapa nilai. HANNAH Blumberg: Benar. Persis. Ya. AUDIENCE: Jadi jika Anda hanya menyimpannya dalam variabel, seperti var x sama jumlah dua values-- HANNAH Blumberg: Ya. Jadi Anda hanya bisa melakukan var sum sama jumlah dari dua nilai. Ya. Ada pertanyaan lain? Ya. AUDIENCE: Tapi alangkah baiknya membingungkan sum dan jumlah? Seperti jika Anda memanggil variabel sum Anda, akan Anda memanggil fungsi sum? HANNAH Blumberg: Mm. Mm. Jika Anda melakukan sesuatu seperti, sum sum sama 2, 5? AUDIENCE: Ya. HANNAH Blumberg: Saya percaya bahwa akan menimpa nilai sum. Jadi lain yang menarik hal tentang JavaScript adalah bahwa variabel tunggal dapat mengambil pada sekelompok jenis. Praktek yang buruk. Anda tidak harus melakukan sesuatu seperti apa yang Anda katakan. Tapi di C, jika saya diatur sama dengan integer, kita tahu bahwa itu tidak pernah akan menjadi string. Hal ini tidak terjadi di JavaScript. Ya, pertanyaan yang bagus. ada lagi? Baiklah. Melakukan semua tepat waktu. Menjaga pergi. Baiklah. Jika kita melihat sebuah array dalam JavaScript, inilah contoh cepat dari array dari string. Dan array dapat tumbuh secara dinamis. Mereka tidak memiliki ukuran tetap dengan cara yang sama yang mereka lakukan di C. Kita dapat mengakses elemen hanya dengan tanda kurung persegi. Yang banyak seperti PHP dan terlihat banyak seperti C, di mana kita dapat mengatakan, dalam kasus ini, jika saya ingin kata JavaScript, saya akan jangan arr kurung persegi dengan 0, 1, 2. Dan kemudian jika Anda ingat di C ketika kita ingin mendapatkan panjang dari sebuah array, itu benar-benar menjengkelkan. Namun dalam JavaScript, super mudah. Semua yang kita lakukan, .length. Memberikan panjang. Itu dia. AUDIENCE: Itu sederhana. HANNAH Blumberg: Ya, membuat hidup Anda jauh lebih mudah. OK, tidak object-- ada. Objek dalam JavaScript merasa banyak seperti struct di C dan array asosiatif di PHP. Jadi apa yang telah kita lihat sebuah banyak adalah JSON, yang singkatan JavaScript Object Notation. Dan itu pada dasarnya cara penataan data kami. Jadi mari kita lihat contoh, mungkin yang paling mudah. Jadi di sini adalah contoh dari sebuah objek yang menyimpan kelas, CS50. Dan ketika saya mengatakan kelas, maksudku tentu saja, tidak like-- ya, tentu saja, CS50. Dan Anda akan melihat bahwa segala sesuatu di objek akan dimuat kurung keriting. Dan kita mulai untuk mengasosiasikan nama field atau kunci dengan nilai yang berbeda. Sehingga Anda dapat mulai untuk melihat bagaimana jenis terasa seperti sebuah array asosiatif PHP. Jadi kita akan mengasosiasikan lapangan atau nama kunci, tentu saja, dengan string, CS50. Kita akan memiliki instruktur. Kita akan memiliki TF. Kita akan memiliki jumlah psets dan kita akan mencatat. Dan satu hal yang keren untuk diperhatikan adalah semua hal-hal ini memiliki berbagai jenis, dan itu benar-benar baik-baik saja. Ini baik untuk sebuah objek, pada kenyataannya, itu mungkin diharapkan untuk sebuah objek untuk memiliki kombinasi string dan angka dan Booleans dan array dan apa pun Anda mungkin ingin memiliki di dalam objek Anda. Dan perhatikan bahwa ini akan menjadi nama-nama atau tombol, dan kemudian kami hanya mengaturnya sama dengan usus kecil. AUDIENCE: Apa sebenarnya yang JSON berarti? HANNAH Blumberg: Apa persis berarti JSON? JSON hanya singkatan JavaScript Object Notation. Ini hanya cara format. Ya. Ini adalah cara format data kami. Dalam C, itu struct. Dalam PHP, itu array asosiatif. Dalam JavaScript, kita memiliki objek. AUDIENCE: Jadi CS50 sebuah objek? HANNAH Blumberg: CS50 adalah objek dalam kasus ini. Sekarang, bagaimana kita benar-benar akses bidang tersebut atau mengubah bidang-bidang. Misalnya, kami memutuskan bahwa Anda ingin satu lebih sedikit pset semester ini. Alih-alih sembilan, kami hanya akan memiliki delapan. Bagaimana kita akan mengubah itu? Oh, cara yang salah. Ada dua cara yang bisa kita lakukan itu. Nomor satu adalah dengan dot notasi dan nomor dua adalah dengan notasi braket persegi. Jadi, misalnya, jika saya ingin mengubah atau akses bidang psets di objek CS50 kami, apa yang akan saya lakukan adalah CS50.psets, sehingga nama objek dot nama lapangan atau kunci. Sangat mirip, itu persis setara dengan melakukan CS50, dan kemudian kurung siku, psets. Keren? Ya. AUDIENCE: Jadi itu JSON teknis JavaScript masih, meskipun di psets kami memisahkan itu [tidak terdengar]? HANNAH Blumberg: Tentu. Jadi pertanyaannya adalah, yang JavaScript dan JSON setara? Jadi JSON adalah notasi, pada dasarnya cara kita menulis objek dari JavaScript. Jadi mereka tidak persis sama. Saya akan mengatakan JavaScript, ada adalah objek dalam JavaScript. JSON mengambil benda-benda dan mencetak mereka dan menampilkannya atau menyimpan mereka dalam cara yang baik. Jadi JSON tidak pemrograman bahasa cara JavaScript. Itu hanya notasi untuk benda kami dalam JavaScript. Ya. AUDIENCE: Jadi apa sebenarnya [Tak terdengar] menyelesaikan? HANNAH Blumberg: Tentu. Jadi ini benar-benar tidak apa-apa. Ini hanya cara untuk mengakses. Jadi katakanlah kita ingin mengubah jumlah masalah set 9-8. Apa yang kita lakukan adalah melakukan sesuatu seperti CS50.psets = 8 ;. Ya, pertanyaan besar. Ini hanya menunjukkan sintaks. Tidak benar-benar melakukan sesuatu yang berguna. Ada pertanyaan? Bergerak kanan sepanjang. Jadi mari kita lihat contoh singkat tentang bagaimana JavaScript bekerja karena saya bilang itu melakukan semua hal ini dingin dan memungkinkan kita untuk memodifikasi halaman web. Mari kita benar-benar melihat dalam tindakan. Jadi mengambil, misalnya, file HTML ini. Dan hal yang saya ingin Anda fokus pada adalah tag tertentu, yang merupakan sebuah tombol, dengan id search_button. Hanya saja pada halaman. Jadi sekarang mari kita lihat apa kita benar-benar bisa melakukan. Nah, kira saat Anda klik tombol itu, kami ingin membuat alert-- Anda mengklik tombol. Mari kita lihat bagaimana kita bisa melakukan itu. Jadi window.onload-- ini bukan sesuatu yang bahwa Anda telah melihat di kelas, oleh karena itu tidak akan perlu tahu untuk kuis. Tapi ini pada dasarnya mengatakan, OK, panggilan fungsi ini ketika beban jendela. Jadi itu hanya semacam kode setup. Jangan khawatir begitu banyak tentang itu. Apa yang saya ingin Anda untuk fokus pada adalah di sini. Kita mengatakan var searchButton sama document.getElementById search_button. Jadi seperti yang Anda duga, apa yang dilakukan adalah ia mengatakan, OK, pergi mencari elemen dengan ID search_button. Dan sekarang kami memiliki yang elemen yang sebenarnya dan aku akan menyimpannya dalam searchButton variabel. Dan sekarang kita benar-benar bisa menggunakan elemen yang dan mengubahnya, atau mengakses nilai-nilainya, hal-hal seperti itu. Kami benar-benar dapat mulai terlibat dengan halaman web. Jadi di sini saya katakan, OK, sekarang aku memiliki tombol yang, ketika diklik, memanggil fungsi anonim ini. Jadi ini adalah di mana anonim fungsi menjadi berguna. Dan apa fungsi lakukan? Nah, itu hanya panggilan ini fungsi alert dan mengatakan, Anda mengklik tombol Search. Jadi apa yang akan terjadi jika saya pergi ke mana pun HTML ini hidup dan saya klik tombol, Aku akan mendapatkan peringatan sedikit mewah yang mengatakan Anda mengklik tombol. Jadi hal-hal untuk fokus pada sini-document.getElementById mendapat HTML tertentu elemen dengan ID yang diberikan. Dan sekarang kita dapat mengatur apa yang harus terjadi ketika bahwa elemen tertentu diklik. AUDIENCE: Kita harus menempatkan semua itu di? HANNAH Blumberg: Maaf? AUDIENCE: Apakah kita harus fisik kode semua itu? HANNAH Blumberg: Apakah kita harus fisik kode semua itu? Iya nih. Bukankah semacam ini mengganggu? Ini adalah banyak kode. AUDIENCE: Anda bisa mengimpor sesuatu. HANNAH Blumberg: Benar. Kita bisa menggunakan sesuatu. Dan di particular-- oh, itu mengatakan bahwa saya harus mengajar bagian. Secara khusus, mari kita menggunakan perpustakaan jQuery, karena itu benar-benar panjang dan benar-benar menjengkelkan dan saya ingin dapat menyederhanakannya dan membuatnya lebih pendek dan lebih mudah untuk menulis. Jadi jQuery adalah library JavaScript. Jadi JavaScript adalah pemrograman bahasa; jQuery adalah sebuah perpustakaan. Dan itu membuat banyak hal lebih mudah. Itu membuat perubahan dan akan di dokumen HTML lebih mudah. Itu membuat acara penanganan lebih mudah. Itu membuat animasi lebih mudah dan itu membuat Ajax lebih mudah. Jadi mari kita melompat ke dua hal-hal sekarang. Permisi. Sebelum kita lakukan, beberapa sintaks dasar. Inilah yang paling panggilan ke perpustakaan jQuery terlihat seperti. Kami menggunakan dolar ini sign-- ada tanda-tanda koneksi ke PHP, hanya inconvenient-- nama pemilih, dot, dan kemudian tindakan. Jadi mari kita lihat beberapa contoh-contoh konkret dari itu. Jadi ini sebenarnya sama kode dari slide acara. Jadi, hal ini panjang jelek menjadi jauh lebih baik, hal ini lebih kecil. Jadi mari kita coba untuk istirahat ini turun. Ini mengatakan, OK, jQuery-- dolar ini sign-- jQuery, menemukan saya jendela. Jadi itulah pemilih. Ketika beban, memanggil fungsi ini. Jadi itulah segala sesuatu di dalam. OKE. Sejauh ini bagus? Baiklah. Sekarang, jQuery, menemukan saya Hal dengan ID search_button. Dan apa yang diklik, memanggil fungsi ini. Dan maka ini fungsi ini persis sama. Hanya melakukan sedikit waspada, Anda mengklik tombol Search. Jadi itu benar-benar bagus. Itu benar-benar mengembun dan menyederhanakan kode kita. Bagaimana saya tahu bahwa itu ID search_button dan tidak seperti kelas search_button? AUDIENCE: Hashtag? HANNAH Blumberg: Ya. Simbol hash ini, itu hanya seperti CSS. Jadi ingat, dengan CSS, ketika kita ingin memilih sesuatu dengan ID, kami menggunakan tanda pound. Dan ketika kita ingin memilih sesuatu dengan kelas, kita menggunakan dot. Besar. Masuk akal? Jadi jQuery seharusnya hanya membuat hidup kita lebih mudah. Ya. AUDIENCE: Jadi aku agak bingung bagaimana fungsi anonim bekerja. Apakah Anda nama anonymouse ini fungsi, fungsi? Bagaimana disebut? HANNAH Blumberg: Tentu. Jadi fungsi hanya kata kunci yang mengatakan, saya akan mendefinisikan fungsi. AUDIENCE: Oh, OK. HANNAH Blumberg: OK? Dan kemudian kita lulus sebagai Argumen to-- mari satu-- batin ini untuk fungsi klik. Jadi ya, sehingga fungsi itu, fungsi anonim ini, menjadi argumen yang sebenarnya. Jadi ingat dalam JavaScript, kita dapat mengobati fungsi sebagai nilai-nilai. AUDIENCE: Oh, OK. HANNAH Blumberg: Ya. Saya suka bahwa "oh." Bagus. Pertanyaan lain? Waktu? MARIA ZLATKOVA: Baik. Baik. HANNAH Blumberg: Awesome. Beberapa jQuery berguna cepat. Aku tidak akan pergi melalui semua ini. Slide ini akan secara online sedikit kemudian, sehingga Anda dapat memeriksa itu sedikit kemudian. Tapi pada dasarnya, umum Pola memegang mana kita mengatakan, OK, hey, jQuery, inilah saya pemilih dan kemudian di sini adalah tindakan. Dan Anda dapat melakukan hal-hal seperti akses nilai bentuk, mengakses beberapa HTML, Kontrol apa yang terjadi ketika pengguna menyerahkan formulir, hal-hal seperti itu. Iya nih. AUDIENCE: Jadi dalam ujian, kita akan membutuhkan untuk mengetahui cukup banyak dari dokumentasi jQuery. Jadi mengingat bahwa kita copy / paste jQuery dokumentasi untuk lembar contekan kita, mana yang garis yang ditarik? Seperti berapa banyak yang kita perlu tahu? HANNAH Blumberg: pertanyaan besar. Pertanyaannya adalah dasarnya mengingat bahwa Anda tidak dapat mengakses dokumentasi jQuery selama pengujian, berapa banyak yang harus Anda tahu? Kami tidak akan mengharapkan Anda untuk datang dengan beberapa fungsi acak bahwa kita akan mengharapkan Anda untuk Google. Hal-hal yang permainan yang adil adalah saya akan mengatakan hanya jenis sintaks umum, mampu memilih dengan ID dan oleh class-- jadi seperti CSS. Dan kemudian fungsi yang sebenarnya dirinya sendiri, kami akan memberitahu Anda mungkin. Ya. AUDIENCE: Jadi, ketika Anda memilih oleh kelas berarti titik. HANNAH Blumberg: Ya, persis. Baik. Bila Anda memilih dengan kelas, itu akan untuk dot bukan tanda pound. Iya nih. AUDIENCE: Akan Anda pergi perbedaan antara memilih dengan ID dan dengan kelas? HANNAH Blumberg: Tentu. Perbedaan antara memilih ID dan pemilihan dengan kelas. Jadi sebagai Maria mengatakan sedikit sebelumnya, ada hanya bisa menjadi salah satu elemen HTML dengan ID yang diberikan, sedangkan kelas, memungkinkan kita untuk kelompok a bunch unsur yang berbeda bersama-sama, sehingga hal-hal yang terkait, tapi tidak persis sama. Apakah itu menjawab pertanyaan? Mengagumkan. Iya nih. AUDIENCE: Bagaimana jika Anda memiliki beberapa hal-hal yang di kelas yang sama? HANNAH Blumberg: Apa yang terjadi jika Anda memiliki beberapa hal yang adalah kelas yang sama? Jadi, misalnya, jika kita hanya menggunakan murni JavaScript, kita akan melakukan sesuatu seperti document.getElementsByClass. Dan kemudian apa yang sebenarnya adalah kembali array elemen. Dan Anda harus baik iterate atas mereka atau menemukan mana yang Anda inginkan. Ini tidak akan memberikan Anda satu elemen. Ini akan memberi Anda array elemen. Pertanyaan besar. ada lagi? Mengagumkan. Jadi saya pikir jika Anda terbiasa dengan setiap jQuery Anda lihat di pset itu, Anda harus baik untuk pergi. Pertanyaan? Oh tidak. Aku benar-benar harus mengajar. Bersantai. Ini akan baik-baik. Aku akan sampai di sana. Mari kita bicara tentang Ajax. Jadi Ajax akan menjadi a-- baik, mari kita mulai dengan apa singkatan. Ini akronim. Itu singkatan Asynchronous JavaScript dan XML. Dan XML pada dasarnya akan menjadi [Tak terdengar] dengan jenis data kami. Tapi kita belum benar-benar digunakan XML. Sebaliknya, kita hanya menggunakan JSON. Jadi pada dasarnya, itu beberapa data-- asynchronous, JavaScript, dan data, dalam kasus ini, JSON. Dan tujuan kami, seperti yang kami sebutkan sedikit sebelumnya, adalah untuk dapat membuat permintaan, telah permintaan yang melakukan hal tersebut di latar belakang, tetapi terus melakukan apapun yang kami berniat untuk melakukan. Dan kemudian ketika informasi yang siap, maka kita akan memasukkan. Jadi mari kita lihat apa ini benar-benar terlihat seperti. Dan ini, Anda harus sedikit familiar dari pset8, salah satu yang baru saja diaktifkan. Jadi, inilah jQuery valid fungsi yang kita mungkin ingin tahu about-- tanda dolar ini. Jadi ia mengatakan fungsi jQuery, GetJSON. Dan apa fungsi yang dilakukan adalah mengambil URL dan beberapa parameters-- jadi saya pikir dalam kasus dari pset8, itu seperti, URL itu articles.php dan parameter adalah pergi = beberapa kode pos. Dan mengatakan, OK, membuat permintaan untuk URL ini dengan parameter yang diberikan. Dan itu terjadi begitu saja. Ketika selesai, itu baik akan berhasil menyelesaikan atau itu akan gagal. Jadi ini adalah setara dengan panggilan Rob dan memintanya melakukan sesuatu. Dan kemudian ketika ia menyebut kembali, dia baik akan mengatakan saya sudah selesai atau saya gagal. Jadi dalam kasus di mana Anda dilakukan, Anda mengatakan, OK, aku sudah selesai. Dan kemudian Anda memanggil fungsi ini. Dalam hal ini, itu akan menjadi fungsi yang mengambil beberapa informasi. Yang biasanya kita pedulikan adalah data, data yang kita benar-benar kembali sebagai hasil dari panggilan GetJSON. Dan Anda dapat melakukan sesuatu dengan itu. Jadi dalam kasus pset8, kami ditampilkan sebagai daftar. Gagal akan menjadi fungsi yang disebut jika permintaan gagal untuk alasan apa pun. Dan dalam kasus pset8, kita hanya console.log itu. Pertanyaan itu? Ya. AUDIENCE: Bisakah kita menggunakan fungsi theta bukan fungsi, textStatus, jqHXR. HANNAH Blumberg: Tentu. Jadi ya, saya pikir dalam pset itu, kita hanya melihat fungsi data. Jadi itu hanya the-- ya, OK. Itulah yang kita lihat di pset tersebut. Itu benar-benar baik-baik saja. Ini hanya jika Anda ingin untuk menarik informasi lebih lanjut, ini adalah hal yang Anda bisa mendapatkan dari GetJSON. Pertanyaan bagus. ada lagi? Ya. AUDIENCE: Jadi GetJSON adalah Ajax? HANNAH Blumberg: OK. Jadi ini adalah jenis bagian yang sulit. Ini adalah fungsi jQuery yang memungkinkan Anda lakukan panggilan asynchronous. Dan orang-orang panggilan asynchronous, yang apa yang kita telah mengacu sebagai Ajax. Ya. Itu butuh waktu yang sangat lama untuk memisahkan ketika saya masih mahasiswa. AUDIENCE: Dapatkah Anda mengatakan itu lagi? HANNAH Blumberg: Ya. Bisa saya katakan itu lagi? Fungsi GetJSON ini, itu adalah fungsi jQuery. Dan itu akan membuat panggilan asynchronous. Dan ini panggilan asynchronous, kami telah telah mengacu kepada mereka sebagai Ajax. Ada pertanyaan lain? Kami memiliki hanya beberapa menit tersisa. Dan Maria akan membungkus dengan keamanan dan kemudian kita akan harus hanya tentang dilakukan. MARIA ZLATKOVA: Awesome, OK. Jadi ini is-- hanya mengambil beberapa detik untuk melihat lebih ini. Dan ini bukan sesuatu yang benar-benar hebat. Dan bisa seseorang mengatakan padaku mengapa? Apa yang terjadi di foo dan mungkin bisa berpotensi menghasilkan sesuatu yang buruk, dan apa yang disebut itu? Ya. AUDIENCE: Jika argumen itu disahkan pada lebih dari 12 karakter, itu bisa meluap. MARIA ZLATKOVA: Benar. Sempurna. Disebut apakah itu? Anda hanya disebutkan itu. AUDIENCE: Buffer overflow. MARIA ZLATKOVA: Yup, buffer overflow. Jadi ini adalah sesuatu yang kita sebut sebagai buffer overflow. Dan kita melihat bahwa dalam foo, kami telah didefinisikan penyangga kami, c, dengan ukuran 12. Namun, dalam utama, kita tidak periksa dengan cara apapun sama sekali apakah argv1-- sehingga adalah argumen kedua. Kami tidak memeriksa apakah ukuran adalah tepat. Jadi jika kita memiliki pengguna terutama berbahaya yang dimasukkan ke dalam beberapa argumen yang lebih dari 12, dan kemudian berpotensi di luar batas yang argumen, memiliki beberapa kode executable bahwa ia berusaha untuk melakukan sesuatu yang buruk dengan itu; maka ini, apa yang akan terjadi, akan menimpa pengembalian alamat fungsi foo, menyebabkan fungsi untuk saat kembali untuk mengeksekusi kode tersebut. Dan kemudian hal-hal buruk bisa terjadi. Apakah ini masuk akal untuk semua orang? Dan bagaimana kita dapat melindungi terhadap ini? Ada saran? Pada dasarnya, dalam berpotensi foo, bagaimana dapat kita periksa untuk memastikan bahwa tidak bisa terjadi? AUDIENCE: Jika ukuran 12 terlampaui, Anda akan mengalokasikan memori tambahan? MARIA ZLATKOVA: Saran adalah, mengalokasikan memori tambahan dari ukuran melebihi. Sebenarnya, kita bisa melakukan sesuatu yang banyak sederhana dari itu juga. Kami hanya bisa mendapatkan panjang string argumen yang masuk, memeriksa apakah yang kurang dari atau sama dengan 12-- yang adalah apa yang kita inginkan menjadi karena kita tidak ingin itu melebihi batas-batas penyangga kami. Dan kemudian jika tidak, kita dapat bekerja dengan argumen. Dan kemudian jika tidak, kita benar-benar ingin untuk Yello berpotensi di pengguna. Tapi ini adalah bagaimana kita akan melakukannya. Iya nih. AUDIENCE: Bisakah Anda menjelaskan cepat nyata memcpy? MARIA ZLATKOVA: Oh, maaf. Iya nih. Memcpy mengambil apapun is-- maaf, OK. Memcpy mengambil apa pun yang di bar, apa pun yang berlalu ke foo sebagai argumen baris perintah. Jadi itu akan mengambil argv1. Argv1 disebut bar di sini. Jadi itu akan mengambil bar dan itu akan menyalinnya ke dalam c. AUDIENCE: OK. MARIA ZLATKOVA: Dan itu akan copy-- argumen ketiga hanya mengacu berapa banyak itu akan menyalin ke c. AUDIENCE: Ah. Jadi yang satu ini menyalin semua itu kemudian. MARIA ZLATKOVA: Ya, itu menyalin semua itu. Ya. Pertama, kami pastikan bar tidak sama dengan nol karena pointer. Kemudian kami mendapatkan panjang string bar. Kami pastikan bahwa itu kurang dari atau sama dengan 12. Dan kemudian karena kita sudah memastikan, kita bisa benar-benar memcpy dan pastikan bahwa itu OK. Ada pertanyaan? Besar. Aku punya dua pertanyaan benar atau salah. Bisa ada yang bilang saya segera jika ini benar atau salah? Ya, itu palsu. Persis. Keduanya adalah palsu. Jadi menggunakan satu password adalah ide yang tidak pernah benar-benar baik karena jika seseorang tahu password Anda, mereka hanya bisa mengakses semua akun Anda yang lain. Dan kemudian melakukan apa-apa ikon untuk menjamin keamanan. Kami biasanya harus mencari HTTPS bukannya HTTP dan URL. Dan beberapa jenis lain serangan yang telah kami sebutkan, bahwa David telah disebutkan di kuliah, serangan injeksi SQL. Kita sudah melihat bahwa jika kita don't-- yang Fungsi permintaan CS50 memastikan bahwa SQL serangan injeksi tidak dapat terjadi. Tetapi jika kita tidak menggunakan CS50, kutipan, tanda kutip "dalam query," kita harus memastikan bahwa input pengguna tidak benar-benar beberapa SQL query yang akan menyebabkan semua meja kami akan dijatuhkan atau sesuatu yang buruk untuk terjadi dengan database kami. Pembajakan adalah jenis lain dari serangan itu terjadi ketika beberapa buruk orang menggunakan sesi beberapa korban ID untuk mengakses informasi login. Jadi contoh yang sangat sepele yang seperti jika kita memiliki komputer umum, maka orang jahat log in dan kemudian mereka memiliki cookie yang disimpan. Dan cookies tidak berubah untuk sesi. Kemudian kita telah korban masuk dan kemudian login ke situs web. Cookie tidak berubah untuk sesi tertentu. Dan kemudian korban log ke website dan kemudian meninggalkan. Dan kemudian orang yang kembali kemudian dapat menggunakan ID sesi masih mereka untuk mengakses informasi mereka. Jadi itulah salah satu contoh bagaimana itu bisa terjadi. Dan kemudian aku tidak akan terlalu khawatir tentang kode tertentu atau apapun seperti itu yang dapat menyebabkan ini, tetapi memiliki semacam tahu apa variabel yang terlibat dalam hal ini adalah. Dan kemudian memanipulasi sundulan Data adalah jenis lain dari serangan yang memiliki David telah berbicara tentang. Dan itu hanya mengacu apa yang bisa terjadi ketika respon, HTTP Tanggapan dalam header kami tidak dibersihkan dengan benar. Dan salah satu fields-- misalnya, jika seseorang menimpa salah satu header nilai mengandung sesuatu yang lebih dari apa yang mereka harus contain-- dan benar-benar mengandung, misalnya, 200 Kode status OK, maka mereka berpotensi melakukan berbahaya hal ketika mereka tidak seharusnya. Tapi aku tidak akan khawatir terlalu banyak tentang kode tertentu yang dapat menyebabkan ini, hanya semacam pemahaman hal-tingkat tinggi seperti itu. Saya rasa ini adalah semua bahwa kita harus menutup. Menakjubkan. Ada yang punya pertanyaan pada setiap dari hal-hal yang kita bahas? Iya nih. AUDIENCE: Jadi satu jenis Pertanyaan yang lebih logistik. Apakah konten terutama difokuskan pada hal-hal setelah kuis 1? MARIA ZLATKOVA: Jadi Pertanyaannya adalah, adalah konten difokuskan terutama pada hal-hal setelah kuis 1? Jadi fokusnya adalah pada setelah kuis 1, dengan pengecualian bahwa kita perlu fokus pada hal-hal di pset5 dan banyak struktur data yang kita bahas. Dan kita tidak bisa mengatakan bahwa kita bisa mengabaikan apa pun sebelum bahwa karena dibangun berdasarkan itu juga. Jadi fokus pada hal itu, ditambah bahan pset5 seperti termasuk terkait daftar, tumpukan, antrian, dan segala sesuatu bahwa Hannah pergi. HANNAH Blumberg: Benar. Ya, kami pergi semua hal C di bagian paling awal sangat cepat. Tapi pastikan untuk meninjau itu. Kembali dan menonton kuis 0 ulasan. Beberapa catatan yang lebih logistik, hanya sementara kita memiliki perhatian Anda. Kita akan memiliki jam kantor baik pada hari Senin dan Selasa malam. Mereka akan berada di MD 119. Ini semua pada website, sehingga jika Anda tidak mendengarnya, tidak ada kekhawatiran. MARIA ZLATKOVA: 8:30-11:00. HANNAH Blumberg: Ya, 8:30-11:00. Kami akan berada di sana. Kami akan berada di sana untuk menjawab pertanyaan. Itu cukup dingin dan menyenangkan. Kalian bisa mengajukan pertanyaan yang Anda miliki di kuis 1. Dan kuis 1 adalah pada Rabu, sehingga keberuntungan. Jika Anda memiliki pertanyaan, mungkin datang berbicara dengan kami di sini satu-satu. Keren. Terima kasih banyak. MARIA ZLATKOVA: Terima kasih banyak, guys. AUDIENCE: Yay. [TEPUK TANGAN]