[MUSIC PLAYING] DAVID J. Malan: Baiklah. Ini adalah CS50, dan ini adalah akhir minggu Four. Dan salah satu topik hari ini adalah bahwa forensik digital, seni memulihkan informasi. Dan memang, meskipun Anda berada di tengah-tengah sekarang Damai di Tiga dan Breakout, minggu depan, fokus akan berada di tepatnya domain ini. Jadi salah satu pekerjaan paling keren yang pernah memiliki kembali di sekolah pascasarjana, ketika saya bekerja untuk lokal Middlesex County Jaksa ini kantor, melakukan forensik bekerja. Jadi pada dasarnya, Massachusetts Kepolisian Negara, pada kesempatan, ketika bekerja pada kasus akan membawa hal-hal seperti hard drive dan floppy disk dan kartu memori dan sejenisnya. Dan mereka akan menyerahkan mereka kepada saya dan mentor saya, dan tujuan kami adalah untuk menemukan bukti, jika ada, pada media ini. Sekilas Sekarang, Anda mungkin telah melihat dunia ini forensik di media, TV dan film. Tapi pekerjaan aku, dan berani bilang dunia itu, tidak cukup seperti Anda akan melihatnya. Mari kita lihat apa Anda mungkin pernah melihat. [VIDEO PEMUTARAN] -OK. Sekarang, mari kita melihat baik Anda. [MUSIC PLAYING] -Tahan Itu. Jalankan itu kembali. -Tunggu Menit. Ke kanan. -Ada. Bekukan itu. -Full Layar. -OK. Bekukan itu. -Tighten Pada itu, ya? -Vector Dalam pada itu pria dengan roda belakang. -Zoom Di sini di tempat ini. -Dengan Peralatan yang tepat, yang gambar dapat diperbesar dan dipertajam. Apa itu? -Itu Program peningkatan. Bisa kau jelas bahwa apa pun? Aku tidak tahu. Mari kita meningkatkannya. -Enhance Bagian A6. Aku ditingkatkan detail, dan-- -Saya pikir ada cukup untuk meningkatkan. Melepaskannya ke layar saya. -Aku Meningkatkan refleksi di matanya. -Biarkan Dijalankan melalui peningkatan video. -Edgar, Dapat menyempurnakan ini? -Hang Pada. -Aku Telah bekerja pada refleksi ini. Refleksi -Ada seseorang. -Reflection. -Ada Refleksi dari wajah pria itu. Refleksi -The! -Ada Refleksi. -Zoom Di atas cermin. Anda dapat melihat refleksi. -Dapatkah Menyempurnakan gambar dari sini? -Dapatkah Menyempurnakan itu? -Dapatkah Menyempurnakan itu? -Dapatkah Kita meningkatkan ini? -Dapatkah Menyempurnakan itu? -Tahan Sebentar. Aku akan meningkatkan. -Zoom Di pintu. -Times 10. -Zoom. -pergilah Di. -Lebih. Tunggu, berhenti. Hentikan. -Pause Itu. -Rotate Kita 75 derajat sekitar vertikal, silakan. Hentikan. Kembali ke bagian tentang pintu lagi. -Punya Peningkat gambar yang dapat bitmap? -Mungkin Kita dapat menggunakan Pradeep Singh metode untuk melihat ke jendela. Software -The adalah keadaan seni. Eigenvalue -The tidak aktif. -Dengan Kanan kombinasi algorithms-- -Dia Pencahayaan diambil algoritma ke tingkat berikutnya, dan saya dapat menggunakannya untuk meningkatkan foto ini. -Lock Dan memperbesar sumbu z. -Enhance. Meningkatkan. -Enhance. -Freeze Dan meningkatkan. [END VIDEO PUTAR] DAVID J. Malan: Jadi mereka adalah semua kata-kata, tapi mereka tidak digunakan dalam kalimat dengan benar. Dan memang di masa depan, setiap saat, silahkan, Anda mendengar seseorang mengucapkan kata, "Menyempurnakan," tawa hanya sedikit. Karena ketika Anda mencoba untuk meningkatkan, misalnya, ini adalah apa yang terjadi. Jadi, inilah foto cantik. Ini adalah Daven CS50 sendiri. Dan misalkan kita ingin fokus pada binar di matanya, atau refleksi dari orang jahat yang jelas ditangkap oleh kamera keamanan. Inilah yang terjadi ketika Anda memperbesar gambar yang hanya memiliki jumlah terbatas bit yang terkait dengan itu. Itu adalah apa yang Anda dapatkan. Dan memang, di mata Daven ini hanyalah empat, mungkin enam piksel yang membentuk apa yang itu berkilauan di sana. Jadi Masalah Set Empat akhirnya akan memiliki Anda menjelajahi dunia ini, khususnya oleh sifat sesuatu kita sebut file i / o, di mana i / o adalah cara mewah mengatakan input dan output. Jadi sejauh ini, semua interaksi kami sudah dengan komputer telah banyak dengan Anda keyboard dan layar, tetapi tidak begitu banyak dengan hard disk, atau menyimpan file melebihi dari yang Anda diri menulis. Program Anda sejauh memiliki tidak membuat, dan menyimpan, dan memperbarui file mereka sendiri. Nah, apa file? Nah, sesuatu seperti JPEG. Ini adalah gambar Anda mungkin memiliki atau meng-upload ke Facebook, atau melihat di mana saja di web. Memang, foto yang baru saja kita melihat dari Daven adalah JPEG a. Dan apa yang menarik tentang file seperti JPEG adalah bahwa mereka dapat diidentifikasi, biasanya, berdasarkan pola-pola tertentu bit. Dengan kata lain, apa itu yang membedakan JPEG dari GIF dari PING dari Word dokumen dari file Excel? Yah, itu hanya berbeda pola bit. Dan pola-pola yang berbeda biasanya pada awal file tersebut. Sehingga ketika komputer Anda membuka Word doc, atau ketika komputer membuka JPEG sebuah, terlihat biasanya di pertama beberapa bit dalam file. Dan jika mengakui pola, ia mengatakan, oh, ini adalah sebuah gambar. Biarkan aku menampilkannya ke pengguna sebagai grafis. Atau, oh, ini tampak seperti Word doc. Mari saya menunjukkan kepada pengguna sebagai sebuah esai. Jadi misalnya, JPEG, ternyata, adalah cukup canggih di bawah tenda. Tapi tiga byte pertama di sebagian besar setiap JPEG mulai dengan tiga nomor tersebut. Jadi byte nol, satu, dan dua, di paling setiap JPEG, 255, lalu nomornya 216, maka jumlah 255. Dan apa yang Anda akan dapat untuk mulai melakukan minggu depan sebenarnya menusuk bawah kap file seperti JPEG dan seperti file bitmap, dan melihat apa yang selalu ada selama Anda sudah menggunakan komputer. Tapi apa tidak ada biasanya ditulis seperti angka desimal seperti ini. Ilmuwan komputer tidak cenderung berbicara dalam desimal. Mereka tidak benar-benar berbicara dalam biner. Biasanya, ketika kita ingin untuk mengekspresikan angka, kita benar-benar menggunakan heksadesimal, yang Anda mungkin ingat dari, katakanlah, masalah Set Satu, yang menantang Anda berpikir tentang sistem yang berbeda. Kami, tentu saja, yang akrab dengan desimal, nol sampai sembilan. Kami berbicara tentang biner. Dan kita tidak benar-benar memiliki untuk menggunakan banyak di sini pada keluar, karena komputer akan menggunakan itu. Tapi programmer akan sangat sering, namun tidak selalu, menggunakan heksadesimal, yang hanya berarti Anda memiliki 16 huruf dalam alfabet Anda, sebagai lawan dua atau 10. Jadi bagaimana Anda menghitung sampai lebih tinggi dari sembilan dalam heksadesimal? Anda pergi 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, hanya dengan konvensi. Tapi apa kuncinya adalah bahwa setiap ini adalah satu simbol. Tidak ada 10. Tidak ada 11, per se, karena masing-masing digit Anda, persis seperti dalam desimal dan seperti di biner, seharusnya hanya menjadi karakter tunggal, berdasarkan konvensi. Sehingga kemudian adalah alfabet yang kita miliki kita miliki untuk heksadesimal. Jadi apa JPEG terlihat seperti jika Anda adalah untuk menulis mereka tiga pertama byte bukan sebagai desimal tetapi, misalnya, sebagai heksadesimal? Dan mengapa hex bahkan semua yang berguna? Nah, cepat melihat contoh. Jadi jika saya menulis bit yang mewakili ini Numbers desimal ini mungkin sedikit berkarat sekarang dari beberapa minggu lalu, tapi yang kiri dan benar cukup mudah. 255 adalah yang terbesar nomor kami bisa mewakili dengan delapan bit. Itu semua yang. Jadi satu-satunya yang agak menarik adalah yang di tengah. Dan jika Anda jenis lakukan keluar matematika, Anda akan menyimpulkan bahwa, memang, bahwa pola satu dan nol mewakili 216. Jadi mari kita menetapkan untuk sekarang bahwa ini adalah benar. Tapi mengapa ini menarik? Nah, byte, tentu saja, adalah delapan bit. Dan ternyata bahwa jika Anda berpikir dari byte sebagai dua potongan empat bit, seperti ini. Mari saya hanya menambahkan beberapa ruang. Jadi sebelum, sesudah. Aku baru saja menambahkan beberapa ruang putih demi visualisasi di sini. Bagaimana mungkin kita sekarang mewakili di, mengatakan, heksadesimal setiap quad bit, setiap rangkaian empat bit? Jadi misalnya, di sebelah kiri sekarang, kami memiliki 1.111 dalam biner. Apa itu nomor dalam desimal, jika Anda melakukan out matematika? Anda memiliki tempat yang, tempat berpasangan, tempat merangkak, dan tempat delapan. AUDIENCE: 15. DAVID J. Malan: Ini 15. Jadi jika kita melakukan delapan ditambah empat ditambah dua ditambah satu, kita mendapatkan 15. Jadi saya bisa menuliskan 15 di bawah 1111, tetapi seluruh titik di sini adalah heksadesimal, bukan desimal. Jadi alih-alih menulis turun 15, 1-5, Aku akan menulis bahwa dalam hex, yang jika Anda berpikir kembali, jika Anda memiliki nol sampai f, apa yang 15 akan menjadi? AUDIENCE: f. DAVID J. Malan: Jadi ternyata itu f. Dan Anda dapat bekerja di luar itu dengan mengatakan, baik, jika adalah 10, lalu OK, f adalah 15. Jadi memang, kita bisa menulis ulang ini set yang sama angka sebagai f f. Dan kemudian jika kita melakukan sedikit matematika, kita akan menyimpulkan bahwa itu d. Delapan cukup mudah, karena kita memiliki satu di tempat delapan. Dan kemudian, kami memiliki beberapa lebih f f ini. Jadi apa manusia cenderung melakukan dengan konvensi ketika mereka menggunakan heksadesimal adalah mereka hanya menulis ini sedikit lebih ringkas, menyingkirkan sebagian besar dari ruang putih. Dan hanya untuk menjadi super jelas untuk pembaca bahwa ini adalah heksadesimal, konvensi sederhana antara manusia adalah Anda menulis nol x, yang tidak memiliki arti lain daripada identifier visual, inilah nomor hex. Dan kemudian, Anda menempatkan dua digit, f f dalam kasus ini, maka d, maka f f. Jadi cerita panjang pendek, heksadesimal hanya cenderung berguna karena masing-masing perusahaan digit, nol sampai f, sempurna garis dengan pola empat bit. Jadi jika Anda memiliki dua digit heksadesimal, nol sampai F, lagi dan lagi, yang memberikan Anda sempurna delapan bit atau satu byte. Jadi itu sebabnya ia cenderung menjadi konvensional berguna. Tidak ada intelektual konten benar-benar di luar itu, selain utilitas yang sebenarnya. Sekarang JPEG bukan satu-satunya format file untuk grafis. Anda mungkin ingat bahwa ada file seperti ini di dunia, setidaknya dari beberapa tahun yang lalu. Jadi ini benar-benar dipasang di Windows XP pada jutaan PC di seluruh dunia. Dan ini adalah sebuah file bitmap, BMP. Dan file bitmap, seperti yang akan Anda lihat selanjutnya minggu, hanya berarti pola titik-titik, pixel karena mereka disebut, a map pada bit, benar-benar. Jadi apa yang menarik, meskipun, tentang format file ini, BMP, adalah bahwa di balik kap mesin, itu memiliki lebih dari sekedar tiga byte yang membentuk header, sehingga untuk berbicara, beberapa gigitan pertama. Itu benar-benar terlihat sedikit rumit pada pandangan pertama. Dan Anda akan melihat ini di P set. Dan mendapatkan sesuatu out tertentu ini sekarang tidak begitu penting, karena hanya fakta bahwa pada awal setiap bitmap berkas, format grafis, ada sejumlah besar nomor. Sekarang Microsoft, penulis format ini, cenderung untuk memanggil orang-orang hal tidak int dan karakter dan mengapung tapi kata-kata dan d kata-kata dan rindu dan byte. Jadi mereka hanya tipe data yang berbeda. Mereka nama yang berbeda untuk hal yang sama. Tapi Anda akan melihat bahwa di P Set Empat. Tapi ini hanya untuk mengatakan bahwa jika manusia double-klik beberapa berkas BMP pada-Nya atau hard drive, dan jendela terbuka up menunjukkan dia gambar itu, yang terjadi karena operasi Sistem mungkin melihat tidak hanya ekstensi file BMP dalam nama file, tetapi juga fakta bahwa ada beberapa konvensi untuk pola bit pada awal dari file bitmap. Tapi mari kita sekarang fokus pada seperti file yang rumit, melainkan pada sesuatu seperti ini. Misalkan di sini di gedit, saya hanya memiliki awal dari sebuah program yang cukup sederhana. Aku punya beberapa termasuk bagian atas. Sekarang aku punya # include "structs.h" tapi Aku akan kembali ke suatu saat. Tapi ini berguna untuk saat ini. Jadi ini adalah program yang akan mengimplementasikan seperti database registrar. Jadi database siswa, dan setiap siswa di dunia memiliki nama dan rumah dan mungkin beberapa hal-hal lain, namun kami akan tetap sederhana. Setiap siswa memiliki nama dan rumah. Jadi jika saya ingin menulis Program yang tujuannya dalam hidup hanya untuk beralih dari nol pada hingga tiga, jika ada tiga mahasiswa di Harvard University. Dan saya hanya ingin mendapatkan, menggunakan GetString, Nama masing-masing siswa dan rumah, dan kemudian hanya mencetak orang-orang keluar. Ini adalah semacam seperti Minggu Satu, Minggu Dua hal sekarang, di mana saya hanya ingin untuk lingkaran atau sesuatu seperti itu. Dan aku ingin menelepon GetString beberapa kali, dan kemudian mencetak f beberapa kali. Jadi bagaimana mungkin saya melakukan ini, meskipun, ketika kedua nama dan rumah terlibat untuk setiap siswa? Jadi insting pertama saya mungkin adalah untuk melakukan sesuatu seperti ini. Aku mungkin pertama mengatakan, baik, beri aku, mengatakan, sebuah array dari string disebut nama. Dan aku tidak ingin hardcode tiga di sini. Apa yang saya ingin diletakkan di sana? Jadi MAHASISWA, karena itu hanya konstan dinyatakan di atas, hanya jadi saya tidak perlu hardcode tiga di banyak tempat. Dengan cara ini, saya bisa mengubahnya satu tempat, dan itu mempengaruhi perubahan di mana-mana. Dan kemudian, saya mungkin melakukan String rumah MAHASISWA. Dan sekarang, aku mungkin melakukan sesuatu seperti for (int i = 0; i