[MUSIC PLAYING] DAVID Malan: Ini adalah CS50, dan ini adalah awal minggu delapan. Dan kami sangat bersemangat untuk menyambut kembali, kejutan besar, Ramon CS50 sendiri Galvan, seorang senior yang telah meningkat menghabiskan beberapa bulan terakhir sejak Juli di LA, di Hollywood, harfiah bekerja pada sebuah TV baru acara yang disebut Colony, pencipta yang sebenarnya Harvard tawas sendiri. Dan jadi kami sangat bersemangat untuk melihat ini Debut di jaringan USA Januari ini. Sehingga menantikan untuk itu, dan untuk lebih Ramon untuk minggu yang akan datang. Tahu sekarang bahwa akhir sudah dekat. Dan apa ini berarti bahwa tidak ada semua yang banyak tersisa dari CS50, sedih untuk mengatakan. Kami memiliki hanya tiga masalah set left-- ada Masalah mengatur six-- yang di tangan Anda sekarang atau akan segera, karena nanti ini week-- dimaksudkan untuk menjembatani dunia kita dari baris perintah, di mana kita telah menghabiskan sebagian besar waktu kita menggunakan C, dan dunia pemrograman web. Nah, Anda akan melihat banyak ide dipinjam dari pekerjaan baris perintah, tetapi juga banyak yang baru dan ide-ide menarik yang juga akan menjadi erat untuk aplikasi mobile dan teknologi, lebih umum, dengan mana Anda orang semua kenal saat ini pada laptop dan ponsel dan sejenisnya. Jadi, Anda akan menerapkan tidak halaman web, atau situs web per se, tetapi server web yang sebenarnya. Anda akan menulis sisa server web ditulis dalam C, yang tujuan dalam hidup adalah untuk menerima permintaan HTTP, yang amplop maya kita terus bicara tentang, dan benar-benar merespon baik dengan beberapa content-- statis seperti titik HTML file, atau titik JPEG atau nomor lain dari file, atau bahkan file PHP dimana web Anda server akan menginterpretasikan PHP yang kode dan meludahkan hasil. Sekarang, kami telah menyediakan Anda dengan sedikit kerangka untuk itu-- memang kode distribusi untuk masalah set enam adalah lebih dari 1.000 baris panjang, banyak yang komentar, menjadi fair-- tapi ini benar-benar dimaksudkan menjadi kesempatan untuk mendapatkan tangan Anda kotor menyelam menjadi proyek yang cukup besar bahwa kita sudah sangat khusus mengukir potongan untuk Anda, sehingga benar-benar ketika Anda keluar CS50 dan memasuki dunia nyata pemrograman dan ingin mencoba-coba di sejumlah proyek, Anda akan memiliki lebih besar kenyamanan men-download beberapa sumber kode, beberapa sumber terbuka proyek di web, dan menyelam di dan membuat perubahan yang Anda inginkan. Masalah mengatur tujuh akan menjadi sekitar pembuatan aplikasi berbasis web Anda sendiri yang mengambil masukan dinamis dan menghasilkan output yang dinamis dalam bentuk dari situs etrade.com-seperti. Dan masalah mengatur delapan akan fokus pada belum bahasa lain dikenal sebagai JavaScript. Sementara itu, final proyek di cakrawala. Yang disebut pra-proposal adalah karena seminggu dari hari ini. Pre-proposal-- per spesifikasi, yang pada website-- CS50 ini adalah kesempatan sangat kasual untuk Anda mengirim email cukup ringkas untuk mengajar sesama Anda hanya untuk memberi kabar kepadanya atau dia dari apa yang Anda pikirkan, untuk menggunakan dia sebagai papan terdengar. Dan memiliki kewarasan check-- apakah Anda berpikir tentang menggigit terlalu banyak atau mungkin terlalu sedikit, atau mungkin Anda tidak tahu apapun dan ingin terlibat dalam percakapan. Setelah itu adalah proposal dan laporan status, yang disebut CS50 hackathon di sini di Cambridge untuk Harvard dan Yale siswa sama. Proyek akhir ini implementasi kemudian karena. Dan kemudian adil CS50 sini, di Cambridge, serta lain di New Haven. Jadi proposal, lihatlah situs bagi mereka khusus. Tapi yang lebih menggairahkan, juga, adalah kesempatan untuk mendapatkan tangan Anda kotor, dan pikiran Anda terbuka untuk keseluruhan sekelompok topik dan alat-alat dan teknik yang tambahan untuk kursus ini inti silabus, tapi tetap berhubungan. Dan juga batu loncatan yang indah untuk melakukan proyek-proyek akhir yang benar-benar keren melampaui materi yang kita sudah dibahas secara resmi di masalah set atau kuliah. Jadi pergi ke situs web CS50 untuk seluruh daftar seminar. Jika Anda tidak mendaftar lagi, itu bagus. Silakan mendaftar masih dan kami akan menindaklanjuti dengan link live streaming, hari dan waktu di website. Dan semuanya akan dicatat dan dimasukkan online jika Anda tidak dapat membuat hari tertentu dan waktu. Seperti apa yang ada di depan thereafter-- baik, tentu saja, ada hackathon CS50. Ini foto, ingat, dari minggu nol diambil sekitar 04:00 satu malam di tahun terakhir. The CS50 adil, yang lagi-lagi akan berlangsung di kedua kota. Dan kemudian, hanya untuk menanam benih, meskipun kita masih memiliki satu bulan ditambah kiri semester, jika Anda ingin bergabung ajaran CS50 sendiri staf, dan Anda ingin memulai berpikir tentang menjadi seorang CA, atau mengajar sesama, tahu bahwa kita akan mulai berbicara lebih lanjut tentang itu kemudian semester ini. Tapi digambarkan di sini adalah sebagian besar tim tahun ini. Dan, PHP-- dan saya sangat sedih pekan lalu bahwa [? Allyse?] Silakan pergi ke upaya mendapatkan kita ini alat peraga indah bahwa saya tidak berakhir menggunakan, sehingga benar-benar hanya tampak agak bodoh bahwa kita memiliki sekop duduk di sini semua hari Rabu lalu, dan sendok kecil. Tapi ini adalah metafora saya cara mencoba untuk melukis gambar mengapa kita transisi dari C ke bahasa seperti PHP. Dan hal yang sama bisa dikatakan dari setiap jumlah languages-- Java, Python, Ruby atau tandan others-- tetapi sedangkan di C, misalnya, menulis sebuah program dalam C mungkin biasanya seperti mengambil sendok seperti ini dan menggali lubang di tanah, di pasir atau kotoran. PHP memungkinkan Anda untuk mengambil banyak gigitan besar keluar dari masalah, menulis kode jauh lebih sedikit menggunakan alat yang jauh lebih kecil, karena ada begitu banyak lagi fungsi potongan di. Sekarang, jika kita benar-benar dramatis, kita akan memiliki sesuatu untuk sekop di sini, tapi biarlah. Sementara itu, yang lain metafora kami datang dengan adalah, tentu saja, Anda bisa menggunakan sesuatu seperti kunci inggris palu dalam sesuatu seperti paku. Tapi tentu saja, kanan alat untuk digunakan akan menjadi tidak begitu banyak bahasa yang disebut C-- dan sekarang saya hanya kesal [? Sanders,?] Mungkin, kami akan memperbaikinya sehingga later-- alat yang tepat untuk digunakan sering tidak akan menjadi ini alat tingkat terendah. Dan memang, C bukan bahasa yang sebagian besar dari Anda pernah akan digunakan, atau harus selalu menggunakan lagi. Dan pada kenyataannya, sedikit secret-- satu-satunya waktu Saya menggunakan C sendiri cukup banyak antara September dan Desember setiap musim gugur semester. Dan itu karena kita menggunakannya sebagai kesempatan untuk mengajarkan dasar-dasar pemrograman, dan dengan itu komputer fundamental ilmu, data struktur, algoritma dan like-- tapi sangat cepat akan Anda melihat sekarang bahwa sintaks dan ide-ide yang mendasari C begitu mengagumkan dipindahtangankan ke yang lebih modern bahasa tingkat tinggi, seperti PHP dan Python dan Perl dan Jawa dan Objective-C-- sebenarnya, tidak begitu banyak Tujuan-C-- tapi Swift, rute baru bahasa bahwa banyak dari Anda akan kemudian mencoba-coba dengan Anda proyek akhir. Jadi tanpa basa-basi lagi, mari kita sebenarnya menggunakan PHP untuk memecahkan beberapa masalah. Ingat bahwa sejak awal, lalu Minggu, kami hanya menggunakan CS50 IDE, kita menulis sebuah program kecil mungil yang hanya berkata, "Halo dunia." Dan kemudian aku menyimpannya di file disebut hello.php. Dan kemudian aku berlari perintah ini. Dan mengapa? Dalam bahasa Inggris, apa yang terjadi di sini? Apa yang saya lakukan ketika Aku berlari perintah ini? Ya? AUDIENCE: Ada beberapa fungsi PHP yang berbunyi apa in-- memahami bahwa. DAVID Malan: Baik, ada beberapa fungsi PHP-- dan biarkan aku menjadi lebih spesifik, ada sebuah program yang disebut PHP, a.k.a. Penerjemah, yang memahami isi hello.php, dan menafsirkannya atas ke bawah, kiri ke kanan, dan melakukan apa yang mereka katakan perintah. Perintah dalam hello.php, tentu saja, hanya sumber fungsi code-- dan variabel dan loop dan sejenisnya, yang kita sendiri telah mulai menulis di PHP. Tapi tidak seperti C, yang merupakan bahasa yang dikompilasi, PHP Anda hanya menulis, dan menjalankannya. Anda melewatkan langkah perantara dari mengubahnya menjadi nol dan satu, dan kemudian menjalankannya. Dan jadi apa terbalik ini? Mengapa kita melewatkan langkah? Mengapa bahasa yang lebih modern cenderung mengabaikan langkah ini? Apa manfaatnya? Atau hanya intuitif? Bahkan jika kita sudah tidak ditulis banyak PHP sebelumnya, apa yang bermanfaat tentang tidak kompilasi kode Anda menurut Anda? Tidak? Tidak melakukan? Menggaruk-garuk kepala Anda? Ya. AUDIENCE: Lebih dinamis. DAVID Malan: Lebih dinamis? Apa maksudmu? AUDIENCE: [tidak terdengar] DAVID Malan: OK, baik, sehingga tergantung pada input, Anda tidak perlu melakukan kompilasi setiap kali. Dan itu benar-benar sebagai sederhana seperti itu-- apa adalah titik terus untuk mengkompilasi kode Anda? Ini hanya langkah yang making-- ini membutuhkan, untuk beberapa masa lalu minggu, dua kali lebih banyak langkah hanya sebagai menjalankan program Anda. Sudah berguna dalam melihat bahwa Anda melihat beberapa pesan kesalahan dan sebagainya, tapi masih hanya sebuah langkah menjengkelkan. Dan jadi programmer menyadari dari waktu ke waktu, kenapa tidak kita mulai menulis bahasa yang tidak membutuhkan langkah yang cukup mekanik, sehingga hanya bisa menulis kode Anda dan menjalankannya. Tapi apa adalah harga bahwa kita melihat kita dibayar pekan lalu, dengan satu contoh tertentu? Iya nih? Kecepatan. Jadi [? apa?] interpreter sedikit lebih lambat, dalam nol dan satu yang bagus dan cepat untuk komputer untuk memahami, karena Intel CPU, atau apapun itu, hanya mengerti apa yang terjadi pada dengan pola-pola bit. Sedangkan juru adalah sebuah program yang benar-benar harus membaca sumber Ascii kode yang telah Anda tulis, dan mengubahnya, sehingga untuk berbicara, atau mencari tahu bagaimana mengkonversi akhirnya untuk nol dan satu. Jadi itu hanya membutuhkan sedikit sedikit hit kinerja. Jadi sedikit trade-off. Sekarang jika kita melakukan ini di sini, biarkan aku pergi ke depan dan melakukan contoh sebagai berikut. Jika aku pergi di sini, file baru, aku akan untuk menyimpan ini lagi adalah hello.php. Dan sekarang aku akan pergi ke depan dan berkata, "cetak halo dunia" - dan ingat bahwa aku bisa menggunakan print, saya tidak harus menggunakan print-F. Dan sekarang di sini, jika saya melakukan PHP dari hello.php, huh-- saya tidak tampaknya telah ditafsirkan itu. Apa kesalahan yang telah aku perbuat? AUDIENCE: Gelang miring. DAVID Malan: Ya, Anda perlu bahwa atas sudut braket up. Jadi itu semacam menjengkelkan, tapi Anda bisa digunakan untuk itu dengan cepat. Jika saya harus menulis kode PHP, saya umumnya perlu memberitahu program, atau memberitahu penerjemah, hey PHP, di sini datang beberapa kode PHP. Dan kemudian untuk mengukur baik, saya akan menutup ini tidak dengan ini, melainkan hanya dengan tanda tanya angle braket, sehingga sekarang di sini, jika saya menjalankan ini lagi, sekarang Saya mendapatkan hasil yang diinginkan. Sekarang mari kita melakukan optimasi sedikit, hanya agar Anda pernah melihat itu sebelumnya. Ini adalah jenis mengganggu bahwa saya harus menjalankan PHP ruang hello.php, karena di masa lalu saya hanya bisa menulis dot slash nama program, yang merupakan jenis yang baik. Ini semacam pengalaman pengguna yang lebih baik. Jadi ternyata Anda dapat melakukan ini PHP dengan following-- saya dapat menggunakan ini cukup samar mantra di atas sini, yang umumnya disebut peristiwa yang, dimana ini adalah simbol yang tajam, sehingga untuk berbicara, ini bang atau tanda seru. Dan sekarang ini adalah jalan untuk program pada sistem Linux khas yang disebut lingkungan, atau env. Dan ini line-- cerita panjang short-- satu baris saja mengatakan, hey komputer, menemukan PHP interpreter bagi saya di lingkungan, menemukannya dalam memori Anda, sehingga untuk berbicara. Dan apa yang bagus sekarang, bahwa jika aku pergi ke sini, Aku bisa melakukan dot slash halo dot php, or-- hmm. Izin ditolak. Nah, Anda akan melihat lebih dari ini dengan masalah mengatur tujuh, jika Anda belum, dengan izin. Ternyata yang saya butuhkan untuk mengeksekusi perintah ini disebut [? chamod?] untuk perubahan mode-- plus x hello.php. Saya perlu [tidak terdengar] ini satu tambahan Langkah yang memberitahu komputer saya, membuat hello.php executable. Dan sekarang menonton apa happens-- dot slash hello.php, itu hanya berjalan. Saya tidak perlu menentukan penafsir lagi. Dan aku bisa membuatnya bahkan lebih cantik, masih, jika saya mengubah nama hal ini. Jika saya pindah hello.php hanya Hello-- sehingga melihat di kiri atas, Nama program ini adalah memang sekarang hanya Hello. Sekarang aku dapat membuatnya terlihat seperti sebuah program C, meskipun itu ditulis dalam PHP-- atau terus terang sejumlah dari bahasa lain. Jadi peningkatan marjinal, tidak ada perbedaan fungsional. Tapi itu hanya rasa ingin tahu sedikit sekarang, sehingga Anda dapat menulis program dalam bahasa apapun, dan pengguna tidak harus tahu atau peduli apa yang berada. Nah, mari kita lihat lebih Contoh menarik sekarang bahwa saya melecut di muka. Dan ini disebut quote.php. Dan itu tersedia secara online. Dan melihat bahwa itu cukup short-- tapi itu program baris perintah yang akan mencari harga saham bagi saya, yang benar-benar akan menjadi erat dengan masalah mengatur tujuh. Jadi mari kita lihat apa yang saya lakukan. Di bagian paling atas aku punya braket terbuka tanda tanya PHP. Kemudian saya punya baris ini, dimana saya membutuhkan file bernama functions.php-- kita akan melihat lebih lanjut tentang ini dalam sedikit, tapi ini adalah seperti C versi tajam termasuk, Kemana kau ingin pergi termasuk file lain. PHP menyebutnya membutuhkan, meskipun juga memiliki meliputi fungsi. Dan ternyata function.php adalah hanya sesuatu yang saya tulis sebelum kelas. Aku meletakkannya di direktori yang sama, karena Saya ingin faktor luar beberapa kode bahwa kita mungkin ingin menggunakan tempat lain. Sementara itu, Anda mungkin bisa menyimpulkan apa yang terjadi di sini. Ini sedikit berbeda dari C-- tapi apa yang saya maksud dengan memastikan penggunaan yang tepat? Menerjemahkan ini lebih teknis. Dalam keadaan apa aku berhenti program, atau keluar? Ya? AUDIENCE: Bila Anda tidak memiliki dua argumen baris perintah. DAVID Malan: Ketika saya tidak memiliki perintah argumen baris. Dan ingat bahwa salah satu dari mereka argumen adalah nama program itu sendiri. Dan yang kedua akan menjadi kata lain saya ketik setelah prompt. Jadi seperti C, ini adalah cara saya memeriksa, apakah pengguna bekerja sama dan menjalankan program seperti yang saya dimaksudkan? Sekarang, ada sesuatu beda tipis dengan C-- pertama-tama kita memiliki tanda dolar ini, dan apa yang satu dolar menandatangani menunjukkan di PHP? Hanya variabel. Itu all-- hanya variabel diikuti oleh apa pun yang Anda ingin benar-benar menyebutnya. Melihat ada sesuatu yang hilang dari program PHP saya, seperti itu hilang lalu Minggu, dibandingkan C, yang adalah apa? Sebuah jenis, tetapi juga sesuatu yang lain. Tidak ada sesuatu yang function-- fungsi utama. Tidak ada fungsi utama. Anda hanya mulai menulis kode Anda tanpa harus khawatir tentang cukup sewenang-wenang konvensi penamaan beberapa standar Fungsi utama. Jadi arg C hanya benar-benar variabel global bahwa penafsir membuat tersedia untuk saya. Sekarang, ini menarik. Jadi mencari barang-barang. Saham dolar tanda adalah pada kiri, itu variabel saya. Di sisi kanan, ada tampaknya fungsi di PHP yang disebut lookup yang Aku melewati baris perintah terakhir saya Argumen to-- apapun kata tersebut. Dan kita akan melihat bagaimana ini bekerja dalam sekejap. Dan kemudian terakhir saya melaporkan harga. Saya mencetak satu saham ini dan itu. Dan ingat, ini adalah cara PHP-- cara di PHP-- di mana Anda tidak perlu melakukan tanda dolar S lagi. Anda hanya dapat menggunakan kurung kurawal dan pasang di beberapa variabel. Anda tidak perlu khawatir tentang menggunakan printf dengan cara yang sama. Dan sebagai samping, ketika Anda meletakkan variabel dalam tanda kutip ganda seperti ini, Anda menggunakan teknik mewah disebut interpolasi variabel. Ini hanya berarti pasang variabel dalam sini. Dan sebagai samping, beberapa dari Anda yang datang dari latar belakang pemrograman lain, Anda mungkin tidak menggunakan tanda kutip tunggal sekitar string untuk melakukan hal ini. Anda harus menggunakan tanda kutip ganda untuk interpolasi variabel untuk bekerja. Jika tidak Anda akan benar-benar melihat orang-kurung kurawal. Jadi terakhir, mari kita pergi ke depan dan menjalankan ini. Biarkan saya membuat terminal saya sedikit lebih besar. Biarkan aku pergi ke depan dan menjalankan dalam direktori kutipan saya. [? CDsource?] [? AM?] [? quote?] PHP kutipan dot PHP, dan aku akan mencari sesuatu seperti GOOG, yang merupakan simbol ticker nya, dan satu saham dari nama baru, Alphabet Inc, biaya $ 717, untuk hari ini. Baiklah, jika kita ingin menjalankan ini lagi, siapa pun memiliki ticker saham lain mereka ingin mencari? Microsoft saya pikir satu ini, MSFT-- $ 53. Saya pikir Yahoo adalah mungkin itu. Dan Facebook adalah bahwa. Jadi apa program ini lakukan? Sihir tampaknya tertanam dalam fungsi lookup. Jadi mari kita lihat. Ternyata tidak datang dengan PHP, itu di functions.php. Dan kami tidak akan pergi melalui ini dengan sangat rinci, tapi melihat kata operasi di sini adalah yang on line enam functions.php-- Aku benar-benar mengatakan fungsi. Aku menentukan nama fungsi saya. Saya kemudian menentukan apapun argumen, atau parameter, Saya ingin fungsi yang ke take-- ada jenis. Dan kemudian saya menerapkannya. Dan aku akan melambaikan tangan saya di pelaksanaannya, karena tepat cukup canggih sekarang, tapi kita lihat lagi sebenarnya dalam seminggu di masalah ditetapkan tujuh. Tapi aku bisa membersihkan ini, juga. Saya juga termasuk dalam kode versi saat ini kutipan, yang tidak memiliki berkas dot PHP. Karena apa yang mungkin di atas program yang disebut hanya mengutip? Yang disebut-shebang-- yang mantra cukup samar yang mengatakan menemukan PHP dan kemudian menjalankannya pada kode saya di sini. Baiklah, sehingga membawa kita ke mana kita tinggalkan time-- terakhir meskipun dengan beberapa contoh yang lebih maju. Pertanyaan sejauh sekitar PHP atau apa yang kita lakukan? No---baik saja. Ya? AUDIENCE: Di dalam File HTML, lakukan you-- [? Apakah kamu ?] [? sebut saja?] a [tidak terdengar] PHP berkas? DAVID Malan: Pertanyaan yang bagus. Dalam konteks web, yang kami harfiah sekitar untuk transisi ke, Anda tidak menggunakan apa yang disebut shebang di atas, karena server-- web sering program yang disebut Apache atau Microsoft IIS, Internet Information Server, atau sejumlah perangkat lunak web server lain, tahu bahwa ketika melihat file dot PHP, bahwa itu harus menjalankan interpreter di atasnya. Itu tidak melihat bahwa baris pertama. Jadi trik baris pertama ini hanya ketika Anda menulis baris perintah programs-- yang kita tidak akan melakukan yang super sering, tapi itu cara kita menjembatani contoh C untuk sekarang PHP kami. Jadi mari kita memang menjembatani dunia ini dari dunia baris perintah ke web dengan melakukan hal berikut. Biarkan aku pergi ke depan dan menarik di sini untuk sesaat. Jadi jika kita memiliki sebuah server web, atau lebih tepatnya jika kita memiliki laptop saya di sini, yang saya akan menggambar seperti ini. Dan di sini kita memiliki internet dalam beberapa bentuk. Dan kemudian di sini, kita memiliki server di building-- sebuah ini adalah bagaimana internet works-- dan di sini adalah server dengan beberapa lampu mungkin. Apa yang sebenarnya terjadi antara dua koneksi ini? Jadi di gedung ini adalah server web. Itu hanya sebuah komputer yang menjalankan beberapa operasi system-- mungkin perangkat lunak gratis yang disebut Apache, yang CS50 IDE sedang berjalan. Jadi Anda benar-benar dapat memikirkan bangunan ini sebagai bangunan di yang CSt0 IDE disimpan. Di situlah semua yang Anda miliki account, di mana kalian semua memiliki server web Anda sendiri berjalan, kalian semua memiliki URL unik Anda sendiri, seperti yang kita mulai membahas, dan Anda akan melihat lebih banyak di P. mengatur enam. Berikut laptop saya di suatu tempat lain di internet. Dan jadi ketika saya mengunjungi URL yang dimiliki bagi saya, bahwa lalu lintas internet akan ke server, server menerima HTTP request-- seperti mendapatkan index.html dan itu membalas halaman web. Jadi itulah paradigma umum. Sedangkan semuanya hingga saat ini sekarang, semuanya yang terjadi hanya dalam batas-batas bangunan ini. Saya menggunakan laptop saya, tapi Saya terhubung ke CS50 IDE, sehingga semua program-program saya berjalan berada di dalam server itu, sendiri. Tapi sekarang, mari kita mulai menggunakan kembali PHP untuk menulis beberapa program yang sebenarnya yang dilayani oleh server web. Dan untuk melakukan hal ini, aku akan pergi ke sejumlah besar contoh yang memperkenalkan ide ini di sini. Jadi ini adalah jenis cara mewah menggambarkan paradigma pemrograman. Dan pada kenyataannya, saat Anda keluar CS50 atau bekerja pada proyek-proyek akhir, atau mengambil beberapa ikuti pada kelas, Anda akan mulai untuk melihat bahwa dunia-- yang terutama setelah dewasa dengan bahasa seperti C yang level-- rendah super menyadari bahwa ada yang lebih baik cara penulisan software. Ada tertentu pola Anda dapat mengikuti, cara-cara tertentu untuk mengatur file Anda dan cara penamaan fungsi Anda, sehingga cerita panjang pendek, dunia telah datang dengan sejumlah besar akronim dan nama cara pemrograman. Ini hanya teknik yang mungkin Anda gunakan. Dan salah satunya disebut MVC, untuk Model View Controller. Dan ini hanya, untuk sekarang, yang terlalu rumit cara untuk mengatakan bagaimana Anda harus lay out website berbasis PHP, dalam kasus kami. Bagaimana Anda mengatur file Anda, bagaimana Anda mengatur logika Anda, dengan cara yang membuatnya lebih mudah untuk menulis website lebih rumit? Dan memang, kita akan cepat sampai di sana dengan p-set tujuh. Jadi dalam dunia MVC, Anda akan untuk melihat bahwa kode kita dapat umumnya dicirikan sebagai baik kode model, atau kode controller, atau melihat kode. Dan aku akan menyederhanakan sebagai follows-- controller adalah otak dari program Anda, itu di mana semua logika yang menarik terjadi. Jadi segala sesuatu yang kita sudah menulis sejauh ini di kelas, adalah jenis seperti kontroler code-- itu mengendalikan program Anda, loop Anda, Anda kondisi, fungsi Anda dan variabel dan semua itu. Dilihat, sekarang, akan menjadi sedikit lebih jelas dalam dunia web. Lihat A adalah estetika dari website Anda. Itu yang pengguna sees-- gambar, tabel HTML, tag HTML, dan semua itu, semua estetika berbulu hal-hal yang tidak sulit untuk menulis, tapi hanya apa yang Anda menghasilkan, adalah apa yang disebut pandangan, estetika. Dan model, akhirnya, akan menjadi basis data yang stuff-- kita akan mulai menyelam ke dalam semua semakin Rabu ini. Jadi controller logika, pandangan adalah hal estetika, dan model akan menjadi tempat kami menyimpan data kami yang sebenarnya. Jadi mari kita lihat ini lebih konkret dengan contoh berikut. Aku akan pergi ke direktori saya di sini sumber hari ini code-- semua yang tersedia secara online. Dan aku akan pergi ke versi nol. Dan di sini is-- mari kita menyebutnya Versi nol dari situs CS50 ini. Tidak ada banyak di sini sama sekali. Ini adalah halaman web yang sangat sederhana itu mungkin menggunakan apa HTML tags-- hanya menebak dari contoh-contoh masa lalu? Apa itu? H1-- mungkin untuk itu tebal besar judul, bahwa logo di bagian atas, CS50. Dan apa lagi yang bermain? Ya? AUDIENCE: Daftar Unordered. DAVID Malan: list-- Unordered sehingga UL tag dan mungkin beberapa tag LI. Dan jika Anda tidak ingat ini, jujur ​​tidak masalah. Ini adalah semacam berbulu dari Rincian pelaksanaan HTML Anda cepat mencari dan Anda kembali di jalan. Kami akan lebih fokus pada pemrograman ide-ide yang potongan juicier. Jadi mari kita mengambil cepat melihat HTML-- dan memang jika saya membuka sumber pandangan di sini, yup, yang persis apa yang terjadi di sini. Ada tag UL. Bersarang di dalam itu adalah untuk tag LI. Dan kemudian saya meminjam URL silabus yang sebenarnya di sini. Dan kemudian di lectures.php tampaknya halaman lain yang dihasilkan secara dinamis yang akan memiliki, mari kita see-- ah, dua minggu pertama kuliah. Jadi minggu nol dan satu minggu, mari kita melihat this-- jika saya melihat sumber halaman, juga super sederhana. Ini mengarah ke dua halaman disebut week0.php, dan week1.php. Jadi pertimbangkan sekarang apa yang terjadi. Ketika saya klik pada week0.php, laptop saya membuat permintaan untuk week0.php. Web server, a.k.a., CS50 IDE, menerima amplop virtual. Ini melihat pesan seperti, dapatkan week0.php. Hal ini kemudian menafsirkan file, atas ke bawah, kiri ke right-- file disebut week0.php-- dan menyemburkan hasil. Jadi dalam file ini, week0.php, harus logika controller yang menghasilkan HTML ini, dan kami akan segera melihat bahwa. Tapi untuk saat ini, biarkan aku klik pada minggu nol, dan sekarang kami memiliki hari Rabu dan Jumat, dan sekarang kami memiliki slide perlahan dari seminggu nol. Dan Anda mungkin ingat ini dari jalan kembali ketika. Jadi itu semua website ini lakukan. Jadi mari kita mempertimbangkan bagaimana hal itu melakukan hal ini. Aku akan kembali ke kode sumber di sini, di CS50 IDE, dan aku akan membuka index.php. Di bagian atas file ini adalah sekelompok komentar. Dan kemudian di tengah-tengah file ini, itu Ternyata, ada kode PHP apapun. Karena jika Anda tidak memiliki salah satu braket terbuka tag tanda tanya PHP, Anda bebas untuk hanya menempatkan HTML. Karena apa PHP interpreter yang seharusnya dilakukan, adalah ketika ia membaca file-- ini atas ke bawah, kiri ke right-- hanya menafsirkan kode yang dilihatnya antara mereka kurung sudut mempertanyakan tanda. Dan hal lain yang tidak mengakui sebagai PHP, itu hanya meludah keluar. Dan HTML Apakah di antara barang-barang itu hanya akan meludahkan. Jadi file ini bisa memiliki disebut index.html, tapi aku penamaan segalanya dot PHP sebagai batu loncatan. Lectures.php-- sama underwhelming, itu hanya beberapa HTML. Week0.php, sama saja beberapa HTML. Tapi sekarang mari kita menempatkan pada topi rekayasa pepatah, dan mempertimbangkan bagaimana kita bisa memperbaiki ini. Ini tidak sulit untuk melakukan hal ini, tapi aku agak dari dilimpahkan ke copy dan paste. Dan pada kenyataannya, jika saya melakukan seminggu dua, Anda tahu apa yang saya mungkin akan lakukan? Aku akan pergi ke week1.php, aku akan menyoroti semua. Aku akan menyalinnya, paste ke file baru yang disebut week2.php, tweak beberapa URL, dan berada di jalan saya. Jadi berdasarkan apa yang kita sudah terlihat di C sudah, ini tidak merasa benar, mudah-mudahan. Copy, paste jarang solusi yang tepat. Jadi apa yang bisa kita mulai lakukan untuk memperbaiki ini? Di mana peluang untuk desain yang lebih baik? Pada saat saya sampai ke minggu delapan, itu akan menjadi benar-benar menjengkelkan jika saya ingin mengubah font setiap satu dari halaman saya, atau jika saya ingin untuk mengubah struktur tata letak. Jadi di mana kesempatan untuk desain yang lebih baik? Nah, mari kita mempertimbangkan apa dibagi di semua file tersebut. Berikut ini satu minggu, inilah minggu nol, inilah lectures.php, inilah index.php-- apa sama dan apa yang berbeda, berbicara kasar, di masing-masing file? Ya? AUDIENCE: [tidak terdengar] DAVID Malan: OK, baik. Jadi ada pola, pasti, dimana setiap kali saya memilih kuliah saya, Saya harus menghasilkan sangat mirip halaman mencari. Dan jadi mungkin aku bisa memanfaatkan fakta yang benar-benar, kami sengaja numerik diindeks lectures-- kami jika saya dapat menempatkan lebih kata-kata dalam jawaban Anda. Dan apa adalah satu-satunya hal, benar-benar, yang berubah antara minggu satu-- dan biarkan aku gulir ke bawah sehingga kira-kira di place-- yang sama jadi di sini adalah minggu nol, kira-kira di atas. Berikut ini adalah satu minggu, minggu nol, satu minggu, minggu nol. OK, secara harfiah jika Anda tahu tidak ada program apapun, ini sekarang hanya seperti pencocokan pola permainan. Jadi apa yang berbeda? Ya? AUDIENCE: [tidak terdengar] DAVID Malan: Baik, jadi judul berubah, yang sedikit. Nol akan, tentu saja, untuk satu. Hal yang sama terjadi di H1 tag. Dan kita tidak cukup melihatnya sebagai mudah, karena URL yang sedikit panjang. Tapi URL mereka berubah sedikit. Tapi apa yang tidak berubah adalah, saya berani mengatakan, sebagian besar isi page-- yang tag HTML yang sama, kepala adalah sama, judul hampir sama, tubuh adalah sama, dan hampir segala sesuatu yang lain adalah sama kecuali untuk mereka tweak sedikit. Jadi bagaimana kita bisa pergi tentang anjak beberapa hal ini? Nah biar mengusulkan persis bahwa dalam versi berikutnya. Jadi di sini dalam versi satu, saya memiliki tepat file yang sama, ditambah beberapa orang lain. Berikut index.php-- dan bahkan jika Anda belum pernah melihat PHP sebelumnya, apa yang saya mungkin melakukan untuk memecahkan ini problem-- berdasarkan pada apa yang Anda lihat di sini? Ya, adalah bahwa komitmen sedikit? Tidak? Ya, pergi. AUDIENCE: [tidak terdengar] DAVID Malan: Yep. AUDIENCE: [tidak terdengar] DAVID Malan: Aku ingin kau berbicara hanya sedikit lebih keras. AUDIENCE: [tidak terdengar] DAVID Malan: OK, baik. Dan saya think-- itu sulit untuk mendengar you-- tapi aku pikir apa yang Anda maksud adalah bahwa tag yang umum di bagian atas, dan tag yang umum di bawah, kini telah keluar diperhitungkan, atau diturunkan ke file apa? Header.php dan footer.php-- dan kita akan untuk membuat beberapa tweak untuk mengatasi kekhawatiran Anda hanya mengangkat tentang nomor berubah, untuk Misalnya, jika saya mendengar Anda benar. Tapi yang tampaknya menjadi inti dari itu. Jika ada sejumlah besar redundansi di bagian atas halaman, dan sejumlah besar redundansi di bagian bawah, mari kita benar-benar hanya sorot dan memotong konten yang keluar, memasukkannya ke dalam file-- terpisah seperti ide CSS, di mana kita diperhitungkan keluar estetika sangat mirip, menempatkan dalam file dot PHP terpisah, menggunakan membutuhkan mechanism-- yang seperti C include-- tajam yang pada dasarnya seperti mengatakan pergi ambil isi header.php, dan copy dan paste mereka di sini. Tapi apa artinya ini adalah bahwa sekarang di index.php, saya memiliki dua baris. Dalam lectures.php, saya juga memiliki dua baris. Dalam week0.php, saya juga memiliki dua baris. Jadi sekarang, jika saya ingin mengubah judul semua halaman saya, atau saya ingin mengubah struktur dasar, Aku bisa mengubahnya sekarang hanya dalam satu tempat, atau dua sundulan places-- dan footer, masing-masing. Sekarang kode itu awal untuk melihat sedikit lebih samar, kan? Tapi jika Anda berpikir tentang apa halaman adalah doing-- jika saya meminta week0.php, seperti pada gambar di atas sini-saat week0.php diminta, apa artinya? Secara harfiah, file ini adalah diminta oleh browser. Web server-- a.k.a. CS50 ID-- meraih ini File, week0.php, dan membaca itu atas ke bawah, kiri ke kanan. Di saluran satu, segera bertemu braket terbuka tanda tanya PHP, memerlukan sundulan dot PHP, dan sebagainya apa interpreter PHP does-- yang dibangun ke web Server, karena kita telah dikonfigurasi untuk you-- secara otomatis masuk ke header.php, salinan isi, pasta mereka di sini. Tapi kemudian pertemuan juru tanda tanya bracket dekat, sehingga itu semua dilakukan berpikir. Sekarang hanya membabi buta meludah keluar jalur dua melalui tujuh, karena itu hanya mentah HTML. Sampai ke garis delapan, dan apakah itu sihir yang sama again-- membuka file, meraih isi, dan mengharuskan mereka atau menyisipkan mereka saat itu atau ada. Tapi aku hanya disinggung bug. Ini adalah langkah mundur parsial, karena jika kita melihat di header.php, Aku sudah jenis memotong sudut. Fitur apa yang saya menyerah dalam rangka untuk mendapatkan desain ini diperdebatkan lebih baik? Ya? AUDIENCE: [tidak terdengar] DAVID Malan: Yeah, aku agak dari memotong sudut trivial. Anda menunjukkan bahwa apa yang berubah adalah judul, nomor dalam judul, dan jumlah di H1. Jadi solusi saya adalah, OK, mari kita mengubah nama halaman, dan tidak berurusan dengan itu masalah apa pun. Jadi itu parsial langkah mundur pasti. Tapi apa yang penting di sini adalah bahwa apa yang saya lakukan jika tidak diperhitungkan semua hal-hal yang umum. Dan di footer.php, melihat saya diperhitungkan semua itu, meskipun lebih rendah, hal umum. Jadi saya perlu entah bagaimana sekarang dapat mengambil langkah maju, dan memperbaiki bahwa isu-isu judul. Jadi mari kita lakukan itu. Biarkan aku masuk ke versi kedua saya di sini, yang, sekali lagi, memiliki file yang sama kecuali satu tambahan baru. Dan itu sedikit lebih verbose, tapi mari kita lihat apakah kita dapat menggoda selain apa yang terjadi di sini. Jadi bukan membutuhkan header.php, footer.php dan, Saya tampaknya hanya membutuhkan satu file-- disebut, tentu saja, helpers.php. Dan biarkan aku menetapkan sekarang, apa dalam helpers.php adalah hanya sekelompok fungsi yang saya tulis, seperti sebelumnya. Tapi saya menyebutnya helpers.php. Sekarang tampaknya, di garis tiga dan 10, saya memanggil dua functions-- membuat header, membuat footer. Mereka tidak datang dengan PHP, saya menulis mereka sendiri. Dan saya menempatkan mereka di helpers.php. Sekarang, kita hanya melihat sintaks ini sekali, dan itu super singkat. Tapi ini tampaknya argumen untuk membuat header, fungsi. Mengapa saya tahu itu? Nah inilah paren dekat, inilah paren terbuka. Dan tentu saja, seperti di C, sesuatu di antara mereka kurung adalah input-- atau argumen ke fungsi. Apa jenis data argumen ini, berdasarkan apa yang saya disorot? Apa mereka kurung menunjukkan, berdasarkan minggu lalu? Ya, itu adalah array-- khusus array asosiatif. Dan sintaks ini diakui adalah sedikit funky, tapi ini hanya lewat di salah satu kunci nilai pasangan. Kuncinya adalah, kutipan tanda kutip judul, dan nilai CS50. Jika kita telah melakukan ini di C, itu mungkin bukan terlihat lebih seperti ini, hanya kutipan tanda kutip CS50-- atau benar-benar akan keriting kawat gigi, atau sesuatu seperti itu di C, di mana kuncinya adalah nol, dan nilai CS50. Tapi sekali lagi, di PHP, meskipun sintaks adalah, sekali lagi, sedikit aneh, memungkinkan Anda untuk lulus dalam kata bukan nomor mengasosiasikan kunci dengan nilai-nilai. Jadi apa arti dari semua ini? Jika saya pergi ke helpers.php, mari kita lihat fungsi ini. renderHeader.php, bukan renderHeader adalah fungsi saya, dan aku tahu bahwa karena saya melihat fungsi kata kunci di sini. Ini baru dari C-- itu tampaknya membawa argumen yang disebut data-- tapi aku bisa menyebut ini apa-apa, tapi saya menyebutnya data, hanya untuk menjadi clean-- sedikit dan hanya mengambil menebak, terutama jika Anda telah diprogram dalam beberapa lainnya bahasa tingkat tinggi sebelumnya, sesuatu di atas C, konseptual. Apa braket terbuka sama braket persegi mungkin berarti? Atau apa yang mungkin artinya? Kami sudah tidak melihat ini di C. Ya? Array kosong. Secara khusus, ini berarti bahwa jika pengguna tidak memanggil renderHeader dengan argumen, aku masih akan memiliki argumen yang disebut data, namun nilai default adalah akan menjadi array kosong. Jadi itu hanya suatu kenyamanan yang baik. Saya tidak harus berteriak pada pengguna, atau mengatakan Anda menggunakan fungsi saya salah. Aku hanya bisa memberikan pengguna default nilai, jika saya tidak terlalu peduli. Sekarang fungsi ini, aku akan melambaikan tangan saya di. Tetapi fungsi ekstrak ini memungkinkan kita untuk lulus variabel tersebut dalam data ke header.php dengan cara berikut. Dan ini adalah bagian terakhir, Saya pikir, sintaks funky. Berikut ini adalah versi baru saya dari header.php-- itu digunakan untuk mengatakan, secara harfiah, terbuka braket judul CS50, dan itu saja. Dan hal yang sama untuk H1. Sekarang tampaknya kata sesuatu yang sangat funky. Dan biarkan aku menyederhanakan ini sejenak sebagai berikut. Ini adalah apa yang telah saya berubah judul saya menjadi. Namun, itu semakin sedikit jelek untuk kurung terus terbuka dengan PHP, dan kemudian menggunakan fungsi cetak. Ternyata PHP memiliki singkatan yang notasi untuk ini, yang hanya tanda sama, yang secara teknis fungsi yang disebut gema bukan cetak, tapi itu hal yang sama, secara efektif. Yang hanya terlihat lebih baik. Ini hanya sintaksis gula, jika Anda mau, yang membuat kode saya terlihat sedikit lebih baik. Tapi ternyata, dan kita akan melihat ini lagi sebelum lama, kita harus memanggil ini mengganggu fungsi panjang yang disebut HTML karakter khusus di PHP, karena ternyata ada masukan tertentu bahwa pengguna mungkin memberi kita, atau yang pengguna mungkin memberi kita, yang akan merusak situs kami. Tapi kita akan melihat bahwa selanjutnya minggu dengan JavaScript. Tapi untuk saat ini, hanya tahu bahwa file ini, headers.php, hanya mengambil judul yang Aku berlalu dalam, itu membuat yakin itu aman untuk disuntikkan ke web Halaman, dan meludah keluar sebagai judul saya dan sebagai H1 saya. Jadi jika saya pergi ke versi ini sekarang, melihat bahwa kuliah memiliki judul kembali, Minggu nol memiliki judul kembali, dan memang, HTML Aku menghasilkan identik dengan versi pertama saya was-- kecuali spasi saya, karena saya sudah mulai memformat kode saya sedikit berbeda. Tapi aku sudah dihasilkan semua kode saya peduli. Jadi biarkan aku berhenti sejenak untuk hanya sesaat dan melihat jika ada pertanyaan atau kebingungan saya buat. Baiklah, jadi mari kita memutar sedikit lebih keras di sini untuk melihat apakah ada sebuah kesempatan untuk perbaikan. Helpers.php juga punya ini fungsi, disebut renderFooter. Dan apa yang penting tentang renderHeader, dan renderFooter? Dan lagi, untuk tujuan hari ini, tahu bahwa fungsi ekstrak hanya cara saya argumen lewat ke header.php dan footer.php. Maaf? AUDIENCE: [tidak terdengar] DAVID Malan: Ya, saya hanya mengubah memerlukan line. Jadi secara harfiah, saya sudah melakukan dosa menyalin dan paste, lagi. Ini bukan jumlah yang besar garis, tapi datang on-- jika saya mengcopy paste semua hanya untuk mengubah satu kata kecil, dan satu kata kecil yang menunjuk Alan keluar adalah footer di sini, dibandingkan header di sini. Jika tidak, semuanya identik, kecuali untuk, tentu saja, nama-nama fungsi ini. Jadi apa yang bisa kita lakukan lebih baik? Nah biar membuka versi ini di sini, dimana di helpers.php, kenapa tidak saya hanya mendapatkan sedikit lebih pintar tentang hal ini? Menulis sedikit lebih rumit kode, tetapi menyebutnya membuat? Jadi apa yang saya fundamental berubah? Dibutuhkan argumen sekarang-- dua argumen, data masih. Dan kemudian apa yang pertama Nama mungkin digunakan untuk, berdasarkan pada apa yang Anda baca di sini? Bahkan jika beberapa sintaks masih baru. Apa dolar Template tanda? Maaf? AUDIENCE: Header atau footer. DAVID Malan: Header atau footer. Jadi tampaknya, saya memutuskan bahwa jika satu-satunya hal yang berubah adalah apa template yang saya inginkan untuk print-- dan oleh Template Maksud saya ini adalah cetak biru untuk kode yang saya ingin output, tapi saya ingin pasang di beberapa values-- jadi jika itu hanya sundulan atau footer, kenapa tidak saya parameterisasi itu dan menyebutnya tanda argumen dolar Template? Dan kemudian sintaks yang funky ini memungkinkan saya untuk membuat jalan dalam variabel sini. Jadi path tanda dolar adalah variabel. Apa sintaks ini lakukan, jika Anda terbiasa? Ya? AUDIENCE: [tidak terdengar] DAVID Malan: Tepat. Jika template, kutipan tanda kutip, header, atau jika template, kutipan tanda kutip, footer, bahwa garis ada bahwa saya telah disorot, baris delapan, hanya mengambil nama itu, seperti header, dan concatenating dengan dot PHP. Jadi kita tidak memiliki operator yang ini di C. dot operator ini hal yang menakjubkan di PHP-- jika Anda akrab dengan JavaScript atau Java, Anda dapat menggunakan ditambah menandatangani untuk melakukan Rangkaian. Dalam C, itu adalah rasa sakit di neck-- yang dan saya minta maaf, di p-set enam, Anda akan harus melakukan this-- itu adalah rasa sakit di leher untuk menggabungkan string. Mengapa? Nah, karena jika Anda punya string yang panjang ini, dan string lain yang selama ini, Anda tidak bisa hanya plug mereka bersama-sama. Apa yang Anda malah harus dilakukan di C? Ya? AUDIENCE: [tidak terdengar] DAVID Malan: Anda harus malloc memori, atau menggunakan sebuah array di stack. Dan Anda benar-benar harus membuat array cukup besar untuk menyesuaikan ini ditambah ini, ditambah backslash nol. Kemudian menyatukan mereka bersama-sama menggunakan aduk kucing atau secara manual dengan untuk loop, atau sejumlah teknik. Dan kami tunjukkan beberapa di p-set enam. Ini adalah rasa sakit di leher. Dan ini benar-benar apa yang saya maksud tentang ini dibandingkan this-- seperti C vs PHP. Anda hanya mendapatkan lebih banyak fungsi secara gratis, sehingga Anda dapat fokus, idealnya, pada menyenangkan bagian dari coding, Proyek Anda ingin memecahkan, daripada tingkat hal kecil yang rendah. Jadi ini hanya menghasilkan header.php atau footer.php berdasarkan mana yang saya sebut. Dan memang jika aku pergi ke index.php, pemberitahuan semua yang changed-- Daripada menelepon membuat header atau footer membuat, Saya menelepon membuat, diikuti oleh nama dari template yang ingin saya lakukan. Dan Anda akan melihat ini, juga, di masalah set tujuh, dimana kita memungkinkan Anda untuk menggunakan fungsi yang sama untuk membuat tandan dan tandan halaman web yang berbeda. Jadi, daripada tinggal terlalu lebih pada mereka details-- yang akan Anda lihat lagi di masalah set seven-- mari kita lihat pada saat awal solusi untuk masalah yang lebih menarik. Sejauh ini, tidak ada yang kami telah dilakukan memiliki data yang disimpan. Bahkan, satu-satunya waktu yang pernah kita diselamatkan sesuatu yang kita lakukan di kelas ini adalah ketika kami memiliki demo yang sangat sederhana sementara kembali, dimana kami menggunakan berkas IO di C, dan saya pikir saya mengetik dalam nama-Ku, dan Nama Hannah, dan nama Maria, atau mungkin nama Andy, dan maka kita menyelamatkan file-- CSV dipisahkan koma nilai berkas. Dan kami menggunakan fopen-- saya pikir kami menggunakan fprintf seperti yang saya ingat, dan kita diselamatkan file. Sekarang, yang paling sederhana yang bentuk database. Jika Anda ingin membuat website untuk Program Frosh IM, dimana mahasiswa baru dapat mendaftar untuk olahraga, Anda idealnya ingin melakukan sesuatu dengan data itu. Pekan lalu, kami tidak melakukan apa pun dengan data-- kita hanya berkata, Anda terdaftar, tidak benar-benar. Atau mungkin aku diemail pengawas, dan itu saja. Tetapi akan menyenangkan jika aku bisa memberikan pengawas bahwa file CSV, seperti file Excel. Atau lebih baik lagi, itu akan lebih baik jika aku bisa menempatkan nama para pengguna 'dan asrama nama dan semua itu ke dalam database yang hanya hidup selamanya, sampai aku memilih untuk menghapus data. Sebuah database yang memungkinkan saya untuk query informasi. Dan memang, itulah yang database adalah. Kami memperkenalkan hari ini, dan minggu depan, juga, teknologi disebut SQL-- Query Terstruktur Bahasa, yang merupakan bahasa lain. Ini pada dasarnya pemrograman bahasa, tapi untuk database. Dan database untuk saat ini, hanya anggap sebagai versi super mewah Microsoft Excel, atau Google Spreadsheet, atau Nomor Apple. Ini umumnya sebuah program yang memungkinkan Anda untuk menyimpan sejumlah besar data dalam baris dan kolom, cukup seperti Anda mungkin di Excel. Tapi apa yang bagus, terutama jika kami tidak super akrab dengan Excel, apa SQL memungkinkan Anda lakukan adalah query ini informasi dengan menulis baris kode di mana Anda bisa, bahkan jika Anda database memiliki juta baris di dalamnya, Anda dapat menemukan hal-hal super cepat. Bahkan, Excel sangat buruk di set data yang besar. Dan pada kenyataannya, sampai beberapa tahun lalu, ternyata Excel hanya akan memungkinkan Anda untuk menyimpan sampai dengan 65.535 baris data-- yang terdengar seperti banyak, tetapi pada waktu saya adalah seorang mahasiswa pascasarjana, dan saya ingat tersandung ini karena saya menghasilkan File CSV untuk penelitian saya dan saya ingin menganalisis mereka dengan cepat dengan hanya membuka di Excel. Tentu saja, komputer saya hanya jatuh, karena saya memiliki lebih dari 65.000 baris. Tapi dari mana yang 65.535 berasal? Apa yang Microsoft lakukan, mungkin? Jika Anda baik dengan kekuatan Anda dari dua? Ya, mereka menggunakan 16-bit Nilai untuk mewakili nomor baris. Dan dua untuk 16 adalah 65,536-- minus satu, karena jika Anda Indeks nol berarti bahwa adalah paling banyak baris saya bisa memiliki. Dan itu hanya keputusan desain. Dengan menyimpan 16 bit, mereka terbatas saya untuk 16.000 baris, bukannya 4 miliar, yang saya bisa memiliki idealnya. Tapi untuk saat ini, kita akan memperkenalkan ini lebih dalam konteks web. Dan apa yang baik tentang SQL adalah bahwa bahkan meskipun itu cukup kuat dan cukup canggih, itu benar-benar mendidih ke empat operasi utama, empat fungsi tombol, jika Anda will-- pilih, untuk mengambil data, pencarian untuk data; menghapus atau menghapus data; menyisipkan untuk menambahkan baris ke database; dan memperbarui. Jadi jika Anda pernah menggunakan Google Spreadsheet, Bilangan Apple, Microsoft Excel, Anda telah dieksekusi, kemungkinan besar, semua operasi ini sebagai manusia dengan hanya menggunakan keyboard Anda dan mouse-- memasukkan data, menggunakan mata Anda untuk memilih atau mencari data, atau update data, atau menghapus data. Jadi apa artinya ini? Nah, pra-instal di CS50 IDE adalah sebuah program yang disebut MySQL. Ini adalah gratis, open-source database yang super populer. Facebook, misalnya, menggunakannya untuk ini hari, antara alat-alat lain yang mereka gunakan. Dan banyak situs yang sangat populer digunakan itu sebagian besar karena itu cepat, dan karena gratis. Meskipun tentu ada alternatif. Dan beberapa dari Anda mungkin mencoba-coba dengan alternatif untuk proyek-proyek akhir. Ini adalah screenshot, sementara itu, dari alat berbasis web yang disebut phpMyAdmin. Ini adalah kebetulan yang alat berbasis web ini juga ditulis dalam bahasa, PHP, tapi apa itu dimaksudkan untuk melakukan adalah memberi kita berbasis web- antarmuka ke database. Karena MySQL biasanya adalah sesuatu, secara historis, Anda akan berinteraksi dengan hanya dengan baris perintah. Dan itu akan menjadi super mengganggu dan misterius untuk memiliki mengetikkan perintah tekstual untuk memilih data, memasukkan data, dan menghapus data. Sehingga beberapa orang di internet menulis sebuah program berbasis web yang hanya marilah kita mengelola data dalam database kami. Ini seperti mengklik ganda pada Excel, dan menjalankan versi berbasis web tersebut. Dan apa yang Anda akan menggunakan ini untuk akhirnya minggu depan, tidak di p-set enam, tetapi untuk membangun sesuatu disebut CS50 Keuangan, yang akan memiliki database pengguna, dengan nama pengguna dan password, Dolar jumlah yang mereka miliki di rekening bank mereka. Ini akan menjadi sesuatu yang Anda gunakan untuk menyimpan simbol dan jumlah saham pengguna yang telah membeli menggunakan virtual dolar yang akan Anda berikan kepada mereka. Dan itu akan memungkinkan pengguna untuk mendaftar untuk situs Anda, sehingga bahkan teman dapat menyetel ke website Anda dan benar-benar mendaftar, login, dan bermain-main dan mencoba untuk menemukan kesalahan dalam kode Anda, dan mencoba untuk menemukan bug di website Anda. Dan mereka hanya akan mendaftar dengan menambahkan sendiri, efektif, melalui kode Anda menulis ke database Anda. Misalnya, ini adalah screenshot cepat apa database mungkin terlihat seperti. Ini adalah salah satu dari solutions-- tahun lalu ini seperti mini Excel mengajukan, disimpan dalam database kami, disimpan dalam software ini disebut MySQL. Di sisi kiri, saya sudah rupanya diberikan setiap pengguna nomor unik. Dalam kolom kedua, saya berikan semua orang pengguna name-- saya sendiri diantara mereka. Dan di sisi kanan, Saya telah memberi mereka hash. Sekarang ini sebenarnya password, tapi itu bukan password teks biasa. Ini adalah password terenkripsi, jika Anda akan, atau password hash. Yang kita akan kembali ke sebelum lama. Tetapi jika Anda pernah membaca sebuah artikel tentang bagaimana sandi Anda di beberapa bank atau beberapa situs mungkin telah dikompromikan, umumnya dapat berarti salah satu dari dua hal. Jadi ini hanya kutipan dari pengguna enam. Semua Anda sekarang dapat mencari keluar melalui hacking atau retak apa password enam orang kami yang. Tetapi jika Anda pernah mendapatkan peringatan atau permintaan maaf dari sebuah perusahaan atau situs web mengatakan, Maaf, hacker masuk ke database kami, Anda mungkin harus mengubah Anda password, apa yang mungkin artinya? Nah, salah satu, bisa berarti Perusahaan telah lebih tolol, dan telah menyimpan kata sandi Anda dalam kolom seperti ini, tidak terenkripsi. Yang berarti musuh, yang mencuri database, harfiah tahu Anda nama pengguna dan password. Itu skenario terburuk. Dan seperti yang Anda akan melihat di p-set tujuh, sehingga mudah untuk menghindari. Sama sekali tidak ada alasan untuk itu bentuk kebodohan di internet hari ini. Two-- dan kami akan menemukan beberapa artikel untuk bersaksi fakta bahwa ini masih terjadi, nonetheless-- dua, mungkin musuh mencuri versi database. Yang masih jenis yang buruk, karena sekarang mereka tahu bahwa saya memiliki enam pelanggan, Aku tahu nama-nama pengguna dari enam pelanggan, dan aku tahu terenkripsi versi, atau versi hash, password enam pelanggan. Tapi salah satu dari Anda yang mungkin telah melakukan [? Hacker 2?] di mana Anda retak password, atau mengambil a melihat bahwa versi dari masalah set, mengapa masih mengkhawatirkan sedikit jika musuh tahu hash Anda password? AUDIENCE: Karena mereka bisa masukkan seluruh kamus ke dalam fungsi hash. Dan jika password Anda adalah kamus kata, [? mereka hanya bisa match--?] DAVID Malan: Tepat, musuh hanya bisa menulis kode, seperti beberapa dari Anda lakukan untuk [? Hacker?] 2, dimana Anda iterate atas semua kata-kata dalam kamus, atau semua kemungkinan kombinasi dari A melalui Z dan satu melalui nine-- yang terdengar seperti banyak, dan itu adalah. Tapi untuk komputer, itu pretty darn cepat. Dan pada kenyataannya, itu adalah titik [? Hacker 2,?] Adalah untuk mengambil hal-hal yang harfiah tampak seperti ini, dan balik apa sebenarnya itu. Jadi kita akan melihat bagaimana kita bisa menyimpan ini lebih efisien. Ternyata, untungnya di MySQL, ada akan menjadi tipe data. Dan salah satu bagian menyenangkan tentang desain database, jujur, sebenarnya memutuskan untuk diri sendiri bagaimana seharusnya Anda mewakili data? Jika Anda merupakan nomor telepon sebagai int, seperti nomor besar, atau panjang? Atau apakah Anda benar-benar melakukannya sebagai urutan karakter? Dan ada bisa sangat dampak non-sepele ini. Bahkan, salah satu awal, cerita erat menyenangkan adalah ketika Mark Zuckerberg sedang membangun Facebook, awalnya ditulis dalam, dan masih sebagian besar ditulis dalam PHP. Dan salah satu tantangan terbesar mereka menghadapi awal yang skala. Ketika mereka terus menambahkan sekolah setelah sekolah setelah sekolah, untuk pengetahuan saya, salah satu solusi asli pada dasarnya untuk copy dan paste beberapa database dan beberapa kode, sehingga Harvard adalah berjalan di server sendiri, dan MIT berjalan di server sendiri. Dan ini adalah mengapa, untuk beberapa Anda yang mungkin ingat, Anda tidak bisa memiliki teman di jaringan lain. Anda mungkin tidak memiliki teman-teman di MIT atau Harvard 10 atau lebih tahun yang lalu, tetapi Anda tidak bisa menjangkau jaringan untuk sebagian alasan itu. Dan salah satu tantangan terbesar bagi Mark dan untuk perusahaan seperti Facebook sebenarnya penanganan ratusan dan ribuan dan jutaan permintaan per detik. Jadi hal-hal yang kita akan mulai berbicara tentang minggu ini benar-benar akan menjadi erat dengan menulis perangkat lunak yang baik, dan populer alat sukses yang dapat menangani banyak pengguna. Jadi kita akan berbicara tentang hal-hal seperti pengindeksan dan pencarian, tapi itu saja untuk hari ini. Kita akan melihat Anda lebih pada hari Rabu. [MUSIK - "Seinfeld" THEME] DAVID Malan: Anda bisa untuk itu, dan kurangi dari itu. Dan Anda tidak harus tetap dengan beberapa jumlah yang telah ditentukan dari memori. Nah, apa yang yang akan dipanggil? SPEAKER 1: Nah, apa yang terjadi? SPEAKER 2: Apa maksudmu? Dia memberikan kuliah. DAVID Malan: Dan kita bisa menggunakan fungsi yang disebut malloc untuk memory-- SPEAKER 1: Mengapa tidak lengannya bergerak? SPEAKER 2: Yah that's-- Anda tahu, itu normal. Ini seperti dia baru saja sosis besar tergantung di sana. SPEAKER 1: Itu normal? SPEAKER 2: Ya, saya pikir kami hanya menganggap dia sengaja digantikan deodoran dengan superglue.