[Powered by Google Translate] [კვირა 7] [დევიდ ჯ Malan - ჰარვარდის უნივერსიტეტი] [ეს არის CS50. - CS50.TV] ყველა უფლება. კეთილი იყოს. ეს არის CS50, და ეს არის დაწყების კვირაში 7. რამდენიმე პატარა განცხადებები: Pset5 არის პროგრესირებს, ან მალე უნდა იყოს, და მოდით ჩემთან ამბობენ, საკმაოდ პატიოსნად, ეს იმას ტენდენცია შორის უფრო რთული კურსის პრობლემა კომპლექტი, ნება მომეცით აღვნიშნო, ეს ახლა ასე რომ ამ კვირაში მეტი, ვიდრე ოდესმე თქვენ არ დაველოდოთ, ამბობენ, ოთხშაბათს საღამოს ან ხუთშაბათს ღამით ჩაყვინთვის სისტემაში ეს არის ნამდვილად საინტერესო pset. ჩვენ ვფიქრობთ, რომ ეს fun. თუ თქვენ ნამდვილად ვიცი სრულად სწორი და შეიძლება მაშინ გამოწვევას ე.წ. დიდი საბჭო, თქვენ შესაძლებლობა ემთხვევა wits ზოგიერთ კურსი თანამშრომლებისათვის და ზოგიერთი თქვენი თანაკლასელები. რა დიდი საბჭო არის ერთხელ თქვენ გაქვთ თქვენი მართლწერის შემოწმება-სამუშაო, თქვენ გექნებათ წასვლა cs50.net შემდეგ გაშვებული ბრძანება, წმინდა აირჩიონ წელს, ხოლო შემდეგ ოდენობით დრო და თანხა RAM და მეტი რომ თქვენ არ გამოიყენება თქვენი განხორციელების გამოიფინება აქ საგნის საწყისი გვერდი. თქვენ შეამჩნევთ, რომ მთელი bunch ამ FOLKS აქ ჩამოთვლილია როგორც პერსონალი მას შემდეგ, რაც მთელი კვირის განმავლობაში, პერსონალის ეგონა იქნებოდა fun ცდილობს outdo ერთმანეთს. ასე რომ მიხვდებიან, რომ მიზანი აქ არ არის outdo პერსონალი. მაშინაც კი, მე ვარ მხოლოდ აქ, ხმების 13. წმინდა აირჩიონ, მაგრამ ეს შესაძლებლობა ნახოთ თუ რამდენად პატარა RAM და როგორ რამდენიმე CPU წამში შეგიძლიათ გამოიყენოთ vis-a-vis ზოგიერთი თქვენი თანაკლასელები. მე კი ვაღიარებ, რომ კევინ მაიკლ შმიდი, ამჟამად ნომერი 1 პოზიციით როგორც ერთ TFs, ეს არის განხორციელება, რომ ჩვენ მოვუწოდებთ შეუძლებელია იმის გათვალისწინებით, რომ ის იყენებს თითქმის 0 RAM და თითქმის 0 წამი ჩატვირთვას. ამიტომ ჩვენ ზრუნვა კევინ გასულია. [სიცილის] არსებობს გარკვეული უნარები, რომ კევინ არის გამოსული გამოცდის აქ. ერთი რამ გვეგონა ჩვენ გვინდა გავაკეთოთ ძალიან არის CS50x არის კვირაში პროგრესირებს, და თქვენ ბიჭები არიან იმდენი ნაწილი ამ ექსპერიმენტი როგორც ის სტუდენტები არიან. ჩვენ ვთხოვეთ, როგორც ნაწილი მათი pset0, რომელიც ანალოგიურად წარუდგინოს Scratch პროექტი ინტერესთა მათ - თამაშის, ინტერაქტიული ნაჭერი ხელოვნების, ანიმაცია, ან მოსწონს - 1 - დან 2 წუთიანი ვიდეო, თუ ისინი მინდა და განაცხადა, რომ მოკითხვა მსოფლიოში და ვინც სინამდვილეში ვართ. ვფიქრობდი, მინდა გაგიზიაროთ მხოლოდ რამდენიმე ვიდეოები რომ არ არის წარმოდგენილი დღემდე რადგან ჩვენთვის, on პერსონალი მინიმუმ, ის მართლაც იყო საინტერესო and ინსპირირებით და ამ FOLKS მთელი მსოფლიოს - ქვეყნების მთელ მსოფლიოში - tuning წელს, ყველაფერი, რათა კომპიუტერულ მეცნიერებათა კურსი ინტერნეტი, თუ არა იმიტომ, რომ მათ სურთ გააგრძელონ თავიანთი კვლევები, მათ სურთ მიიღონ მათი კარიერის გააკეთა ახალი მიმართულებით, მათ სურთ შეავსოთ ხარვეზები საკუთარ ცოდნას, ამიტომ ზოგიერთი იმავე მიზეზის გამო, რომ თქვენ ბიჭები ალბათ უკვე აქ. ამიტომ მე გაძლევთ ერთი ასეთი სტუდენტი აქ. თქვენ შეიძლება ამაღლება მოცულობის მხოლოდ ცოტა. აქ არის ერთი ჩვენი სტუდენტური 1 წუთიანი წარდგინება. Hello, მსოფლიოში. ვარ სტუდენტი სამრეწველო საინჟინრო აქ ესპანეთის ქალაქ მალაგაში. მე მახარებს ამ ფორუმზე რა თქმა უნდა, რადგან მე მიყვარს კომპიუტერულ მეცნიერებათა, მართლაც, და მე ნამდვილად ვაფასებ რომ მივიღო შესწავლას. და ის ფაქტი, რომ მე სწავლა შეგვიძლია იგივე ყველა თქვენგანს ბიჭებს მაგრამ ნაცვლად ჰარვარდში ვარ ქალაქ მალაგაში, როგორ რა არის ეს? ისე, მე ვარ ფერნანდო, და ეს არის CS50. იხილეთ თქვენ ბიჭები. [სიცილის] კიდევ ერთი კლიპი ჩვენ განსაკუთრებით მინდა, თქვენ იპოვოთ რომ ეს ჯენტლმენი ს English ასე არ არის ძლიერი. როგორც ჩანს, იგი იყო ის მანქანა თარგმნილი, ისე თარგმანი თავად ცოტა არასრულყოფილი, მაგრამ ეს იყო ჩვენი ერთი სანიშნეს დღემდე ისევე. [♪ ♪] Hello, მსოფლიოში. [საუბარი იაპონიის] [მაქვს მოგესალმოთ იაპონიის რადგან ჩემი ინგლისელი ძალიან არასანდო.] [მე მიწოდება გაგზავნა თქვენ ქალაქ Gifu, იაპონია.] [მე შეიძლება იყოს სტუდენტი პირველად 20 წლის განმავლობაში, როგორც ჩანს.] [ძალიან მადლობელი ვარ, რომ ჰარვარდის უნივერსიტეტი, ვინც მომცა ეს შესაძლებლობა და EDX.] [Golf არის გიტარა და ჩემი საყვარელი რამ არის გაშვებული.] [სიცილის] [♪ ♪] [როგორ ფიქრობთ, რატომ მე ვცდილობდი დაესწრებიან cs50x.] [ჰარვარდის უნივერსიტეტი, ეს არის ჩემი ლტოლვის.] [მით უმეტეს, თუ მე ვარ შორეული ყოფნა ცხოვრობდა იაპონიაში.] [მინდოდა ვცდილობთ მაშინვე იცის ასეთის არსებობის EDX როდესაც.] [ხომ არ ფიქრობთ, ასე რომ თქვენ არ დაკავშირებული ასაკი სწავლის ი] [Cs50 არის ჩემი ლტოლვის. ჩემი სახელი არის Kazu, და ეს არის cs50.] [♪ ♪] [ტაში and cheering] სხვა საყვარელი ჩვენი იყო ამ წარდგენის აქ ვინმე. [♪ ♪] [Malan] Google თუ თქვენ იციან ამ meme. და მერე ბოლოს, რამდენიმე სხვები რომ ჩაერივნენ posted რომ შესაძლოა მოვიგოთ adorable ჯილდო. [სტუდენტი] Aww! >> [Malan] ჩვენ უნდა მოვუსმინოთ. ეს არის მოკლე, ასე რომ მოუსმინოს მჭიდროდ. [ქალი სპიკერი] რა არის შენი სახელი? >> გორი დიდია. [ქალი სპიკერი] რა არის ეს? >> [Giggles] CS50. [სიცილის] [Malan] მას ორი იღებს, თუმცა. აქ ჩვენ გადასვლა, ბოლო. ჩემი სახელი არის პატარა გორი დიდია, და ეს არის CS50. [სიცილის] ეს მაშინ არის CS50x. გმადლობთ ყველა იმ თქვენ ხოლო შემდეგ გასწვრივ სახლში რომლებიც partaking დღემდე. დღეს, ვთვლით, რომ ჩვენი განხილვის მონაცემები სტრუქტურების, მაინც ყველაზე ფუნდამენტური, და მაშინ ჩვენ გავაგრძელებთ საუბარი HTML და ვებ პროგრამირების. მართლაც, ჩვენ გაატარა გასული რამდენიმე კვირის განმავლობაში შვიდი ეძებს საფუძვლები პროგრამირების - ალგორითმები, მონაცემთა სტრუქტურები, და ანალოგიური - და C, როგორც თქვენ შეიძლება განიცადეთ ჯერჯერობით არ არის აუცილებლად საუკეთესო ხელმისაწვდომი ენების რომელთანაც განახორციელოს ზოგიერთი ასეთი იდეები. და ასე დაწყებული ამ კვირაში და მომავალ კვირას და შემდეგ შემდეგ, ჩვენ საბოლოოდ შეძლებს გადასვლას C, რომელიც საყოველთაოდ ცნობილია, როგორც საკმაოდ დაბალი დონის ენაზე to რამ მაღალ დონეზე, მათ შორის PHP, JavaScript, და მოსწონს, რომელიც ჩვენ დავინახავთ დაეყრდნოს და იგივე გაკვეთილი, რომ ჩვენ ვისწავლეთ უკანასკნელი რამდენიმე კვირის განმავლობაში, მაგრამ თქვენ იპოვით, რომ გამოცხადების რამ, როგორიცაა კოლექტორები და hash მაგიდები და ძებნას და დახარისხება გახდება თუ რამდენად ადვილი რადგან ენებზე თავად დავიწყებთ გამოყენებით გახდება უფრო ძლიერი. მაგრამ პირველი, გამოყენების ხეები. ძალიან გავრცელებული ამ დღეებში უნდა შეკუმშოს ინფორმაციას. რა კონტექსტში იქნებოდა გსურთ შეკუმშოს გარკვეული სახის ციფრული ინფორმაციის? Yeah. >> [სტუდენტი] როდესაც თქვენ უნდა გამოგვიგზავნოთ მეტი ვებ. ჰო, როდესაც გსურთ გააგზავნოთ რაღაც დასრულდა ვებ. თუ გსურთ ჩამოტვირთოთ დიდი ფაილი, ეს იდეალური თუ ვინმე მეორე ბოლომდე აქვს დაარქივებული ფაილების გამოყენებით zip ფორმატში, ან რაღაც მსგავსი რომ ასე, რომ თქვენ გაგზავნის ნაკლები ბიტი, ვიდრე შეიძლება სხვაგვარად გადაეცემა. ასე როგორ შეკუმშოს ინფორმაცია? ყველაფერი boils ქვემოთ გამოყენებით ნაკლები ბიტი, ვიდრე აუცილებელია იყოს. მაგრამ ეს არის სახის საინტერესო რამ, რადგან ვფიქრობ თავში კვირის 0 და 1 როდესაც ჩვენ ვისაუბრეთ ASCII და ორობითი და ჩვენ ვისაუბრეთ ASCII კერძოდ როგორც გამოყენებით 8 ბიტი წარმოადგენს ასო ანბანი ისე, რომ წერილში წარმოდგენილია 65, მხედრულ არის ნომერი 97, და თუმცა თქვენ წარმოადგენს 65 ან 97, თქვენ იყენებთ 7 ან 8 ბიტი. მაგრამ დაჭერა არის, რომ არსებობს ასო ინგლისურ ანბანში რომ არ არის ისეთი პოპულარული, როგორც სხვები. Z არ არის ყველა, რომ პოპულარული, Q არ არის ყველა, რომ პოპულარული, მაგრამ და E არის სუპერ პოპულარული. და მაინც, ყველა ამ წერილებს, იყოს მსოფლიოს იყენებს იგივე რაოდენობის ბიტი, მხოლოდ 8. ასე რომ არა იგი უკვე მსოფლიოს სასურველი სტუმარი გახდებით, თუ ნაცვლად გამოყენებით 8 ბიტი ყველა წერილი, თუნდაც ყველაზე იშვიათად გამოიყენება, როგორიცაა Q და Z, რა თუ ჩვენ გამოიყენება ნაკლები ბიტი ამისთვის და E და S და ყველაზე პოპულარული წერილების და გამოიყენება მეტი ბიტი რომელიც ნაკლებად პოპულარული წერილები, იდეა მყოფი მოდით ოპტიმიზაცია საერთო შემთხვევაში, რაც თემა კომპიუტერულ მეცნიერების ცდილობს ოპტიმიზაცია რა მოხდება საუკეთესო და ხარჯავენ ცოტა მეტი დრო, ცოტა მეტი სივრცე რამ, yeah, შეიძლება მოხდეს მაგრამ არა აუცილებლად, როგორც ხშირად. ასე რომ ავიღოთ მაგალითად. დავუშვათ, რომ ჩვენ გვინდა, encode ინფორმაციას საკმაოდ ეფექტურად. ალბათ გავიზარდე იცის პატარა რაღაც შესახებ Morse კოდი, და შანსი თქვენ არ იცოდა ფაქტობრივი კოდი, მაგრამ თქვენ შეიძლება გავიხსენოთ, რომ მინიმუმ ამ სერიას წერტილი და dashes. ეს არის საკმაოდ ეფექტური კოდირება, და გაითვალისწინეთ, რომ ყველაზე პოპულარული წერილი - მაგალითად, ელ - იყენებს უმოკლეს of beeps. Morse კოდი რაც შეეხება beep-beep-beep-beep-beep-beep და ჩატარების ტონა არც მოკლე დროში ან ხანგრძლივი დროის პერიოდის განმავლობაში. E, როგორც აღნიშნა მიერ dot, არის სუპერ მოკლე beep, უბრალოდ beep, და რომ წარმოადგენენ ე პირიქით, T იქნებოდა აღარ beep, როგორიცაა beep [prolongs sound], და რომ წარმოადგენენ თ მაგრამ ეს ჯერ კიდევ საკმაოდ მოკლე, რადგან, პირიქით, თუკი Z, გამოთქვას Z თქვენ წავიდოდა beep, beep [აღარ sound], beep, beep [მოკლე sound]. ასე რომ აღარ იმიტომ რომ ნაკლები საერთო. მაგრამ GOTCHA აქ არის ის, რომ Morse კოდი ოდნავ გაყალბდა რომ ის არ დაუყოვნებლივ decodable. მაგალითად, ვარაუდობენ, რომ გესმით ზოგიერთ ბოლოს მავთულის beep [მოკლე], beep [ხანგრძლივი]. რა გაგზავნა არც მე უბრალოდ მიიღოს? Dot და dash. რას წარმოადგენს? [სტუდენტი] A. >> [Malan] იქნებ. ისიც შეიძლება E მოჰყვა თ სხვა სიტყვებით, Morse კოდი, თუმცა ბერკეტი ამ პრინციპის ოპტიმიზაციის კუთხეში შემთხვევაში, ეს არ lend თავს დაუყოვნებლივ decodability. ანუ, ადამიანის რომელიც მოსმენის ან მიღების ეს წერტილები და dashes უნდა როგორმე გაერკვნენ, სადაც შეღავათები შორის წერილებს, რადგან თუ თქვენ არ იცით, სადაც შეღავათები, შესაძლოა აღრეული ამისთვის ET ან პირიქით. ასე რომ, თუ რა შეიძლება, რასაც აკეთებთ? In Morse კოდი შეგიძლიათ უბრალოდ პაუზის შორის თითოეული წერილებს. მაგრამ დაპაუზება არის სახის counter მთელ წერტილი სისწრაფეს რამ up. მერე რა, რომ ნაცვლად შევქმენით კოდი, სადაც არ იყო ამ ცუდ მდგომარეობას სადაც E არის პრეფიქსი, მაგალითად, საქართველოში - სხვა სიტყვებით, თუ ჩვენ შეგვიძლია დავრწმუნდეთ, რომ ნიმუშები ჯერ კიდევ მოკლე ამისთვის პოპულარული წერილების ხანგრძლივი ნაკლებად პოპულარული წერილები, მაგრამ იქ არ არის შესაძლებელი დაბნეულობა? კაცი მიერ სახელით Huffman წლის წინ გამოიგონეს ამ სქემის მოუწოდა Huffman კოდირებას რომ რეალურად ბერკეტი ერთ მონაცემები სტრუქტურები ჩვენ გაატარა ცოტა დრო ვსაუბრობთ ამ გასულ კვირას, რომ ხეები, ბინარული ხეები კონკრეტულად - ორობითი ხე მნიშვნელობა, რომ მას არ უნდა აღემატებოდეს 2 შვილი. მას აქვს იქნებ მარცხენა ბავშვი, იქნებ უფლება ბავშვი, და ამით ყველაფერი. ამიტომ ვარაუდობენ, მხოლოდ გულისთვის დისკუსია რომ ვინმეს უნდა გაგზავნოს გაგზავნა რომ ასე გამოიყურება. ეს სრული სისულელეა, მაგრამ ის შედგება როგორც, BS, Cs, DS და Es. და თუ თქვენ ნამდვილად ითვლიან up ყველა როგორც, BS, Cs, DS და Es და შემდეგ გაყავით მიერ საერთო რაოდენობის ასოები, ამ პატარა სქემა აქ ნათქვამია, რომ 45% ასო Es, 20% კი, 10% BS და სხვ. ასე რომ, სხვა სიტყვებით, ვივარაუდოთ, რომ ციტირებული სტრიქონი იქ არის რამოდენიმე გაგზავნა, რომ გსურთ გაგზავნას. ეს ხდება იყოს სისულელეა უბრალოდ ასე ჩვენ შეგვიძლია გამოვიყენოთ, როგორც რამდენიმე წერილებს, რაც შეიძლება, მაგრამ მართლაც შემთხვევაში, რომ E რჩება ყველაზე პოპულარული, და B და C უფრო ნაკლებად პოპულარულია, მინიმუმ ამ 5 ასო ანბანი. ასე რომ როგორ შეგვიძლია წავიდეთ შესახებ ახლოვდება ერთად კოდირების, ორობითი კოდირება, ნიმუში 0S and 1s თითოეული ამ წერილების იმგვარად, რომ E არის მოკლე ნიმუში და იქნებ B და C არის ოდნავ აღარ შაბლონებს, ერთხელ, იდეა იმისა, რომ ჩვენ გვინდა გამოვიყენოთ ნაკლები ბიტი უმეტესი დრო და უფრო ბიტი მხოლოდ ერთხელ, ხოლო. მიხედვით Huffman კოდირება, შეგიძლიათ შექმნათ ტყის ხეების. არსებობს ერთგვარი ამბავი ხაზი აქ რომ მოიცავს ხეები და ასევე მშენებლობის პროცესში მათ. დავიწყოთ. მე ვთავაზობ, რომ თქვენ იწყება ამ ტყის, ასე ვთქვათ, სულ 5 ხეები, რომელთაგან თითოეული არის საკმაოდ სულელური ხე. ხის შედგება მხოლოდ ერთი კვანძის, როგორც წარმოდგენილია აქ წრე. ასე რომ თითოეული ეს ყველაფერი შეიძლება იყოს C struct და შიგნით of C struct შეიძლება იყოს ათწილადი წარმოადგენს სიხშირის რაოდენობა და მერე იქნებ char წარმოადგენს წერილში. ამიტომ ვფიქრობ ამ კვანძების როგორც მხოლოდ ნებისმიერი ძველ C struct მაგრამ, ამ დროისთვის, მაღალ დონეზე. ეს არის ტყეში 5 ხეები, თითოეული, ვისაც მხოლოდ ერთი კვანძის. რა Huffman შემოთავაზებული ის არის, რომ ჩვენ ვიწყებთ დააკავშიროთ იმ ხეები რომ აქვს პატარა სიხშირე ითვლის შევიდა ოდნავ უფრო ხეები მიერ დამაკავშირებელი მათ ახალი root node. ამიტომ შორის წერილების აქ შეამჩნევთ, რომ მოხერხებულობის მე დახარისხებული მათ მარცხნიდან მარჯვნივ, თუმცა ეს არ არის მკაცრად აუცილებელია, და გავითვალისწინოთ რომ პატარა კვანძების ამჟამად 10% და 10%. ამიტომ Huffman შესთავაზა, რომ ჩვენ შერწყმა იმ 2 პატარა კვანძების შევიდა ახალი ხე შემოღების ახალი მშობელი კვანძი და შემდეგ მისცეს, რომ მშობელს მარცხენა ბავშვი და უფლება ბავშვის სადაც B არის თვითნებურად მარცხენა და C არის თვითნებურად უფლება. და შემდეგ Huffman შემდგომი შესთავაზა, რომ მოდით ახლა მხოლოდ ვფიქრობ მარცხენა ბავშვი ერთ ამ ხეები ყოველთვის, როგორც წარმოდგენილია 0 და უფლება ბავშვს ყოველთვის, როგორც წარმოდგენილია ხმების 1. არ აქვს მნიშვნელობა თუ თქვენ Flip მათ ცოტა ხნის როგორც თქვენ თანმიმდევრული. ახლა ჩვენ გვაქვს ოთხი ხეები ამ ტყეში. მე ვთქვა ოთხი რადგან ახლა ხე მარცხენა - და ეს არა იმდენად ხე იმ გაგებით, რომ იგი იზრდება ამ გზით, ეს უფრო მოსწონს ოჯახის ხე სად არის 0.2 არის ერთგვარი მშობელი ორი შვილი - შეამჩნევს, რომ რომ მშობელს ჩვენ შედგენილი 0.2. ჩვენ დასძინა სიხშირე ითვლის ორი შვილი და მიეცეს ახალი კვანძის საერთო თანხა. ახლა ჩვენ მხოლოდ გავიმეორო ეს პროცესი. მოძებნა ორი პატარა კვანძების და შემდეგ შეუერთდება მათ ახალი ხე და შემდეგ გაიმეოროს პროცესის შემდგომი. ამ დროისათვის ჩვენ გვყავს რამდენიმე კანდიდატი, 20%, 15%, ხოლო მეორე 20%. ამ შემთხვევაში, ჩვენ უნდა დაარღვიოს ჰალსტუხი. ჩვენ შეგვიძლია ამის გაკეთება თვითნებურად. ჩვენ უნდა უბრალოდ ეს მუდმივად. ამ შემთხვევაში, მე თვითნებურად წავიდეთ ერთად ერთი მარცხენა, და მე ახლა შერწყმა 20% და 15% მისცეს ჩემთვის ახალი მშობელი მოუწოდა 35%, რომლის მარცხენა ბავშვი 0, რომლის უფლება ბავშვი 1 და ახლა ჩვენ გვაქვს მხოლოდ სამი ხეები ტყეში. შეგიძლიათ ალბათ ვხედავთ, სადაც ეს ხდება. თუ ჩვენ ვიმეორებ ამ რამდენიმე ჯერ, ჩვენ ვაპირებთ აქვს მხოლოდ ერთი უფრო დიდი ხე, ყველა რომელთა კიდეები იარლიყით ერთად 0S and 1s. მოდით კიდევ ერთხელ. 35% არის ის, რომ ხე მისი ფესვი. 20% და 45%, ამიტომ ჩვენ ვაპირებთ შერწყმა 35% და 20%. ახლა ჩვენ გვაქვს ამ ხეს აქ. ჩვენ დაამატოთ იმ ერთად, ჩვენ გვაქვს 55%. ახლა მხოლოდ ორი ხეები ტყეში. ჩვენ ამას ვაკეთებთ, ერთი საბოლოო დრო და იმედია მათემატიკურად ყველა სიხშირეების დაამატოთ მდე რადგან მათ უნდა რადგან ჩვენ გამოთვლილია მათ მისაღებად-წასვლა დაამატოთ მდე 100%. და ახლა ჩვენ გვაქვს ერთი ხე. ასე რომ, ეს Huffman კოდირების ხე. იგი სახის აიღო ხოლო მისაღებად არსებობს სიტყვიერი, მაგრამ რეალობა ის არის, ერთად ამისთვის loop ან რეკურსიული ფუნქცია, თქვენ შეიძლება ააშენოს ამ რამ up საკმაოდ სწრაფად. ახლა ჩვენ გვაქვს ერთი ახალი კვანძის და ყველა ეს შიდა კვანძების უკვე malloc'd, სავარაუდოდ, გასწვრივ გზა. ახლა ზედა ამ ხეს გვაქვს 100%, მაგრამ ახლა შეამჩნია გვაქვს გეზი ამ ახალი დიდი დიდი დიდი grandparent ყველა დიდი დიდი დიდი შვილიშვილი ყველა გზა ბოლოში, ყველა ფოთლები. რა ჩვენ ვაპირებთ ახლა არის შესთავაზოს, რომ იმისათვის, რომ წარმოადგენენ წერილში E, ჩვენ უბრალოდ გამოიყენოთ ნომერი 1. რატომ? რადგან თუ ჩვენ traverse ამ ხე საწყისი საბოლოო root ქვემოთ ფოთოლი ცნობილია, როგორც E, მივყვებით მხოლოდ ერთი ზღვარი, მარჯვენა კიდეზე, და ეს შეაფასა, რა თქმა უნდა, ზედა მარჯვენა 1. ასე რომ გავლენა აქ Huffman იყო, რომ E ს კოდირება ორობითი უნდა იყოს მხოლოდ 1. და ეს საკმაოდ Damn ეფექტური. ნამდვილად ვერ მიიღოს ნებისმიერი ნაკლებია, რომ. პირიქით, იქნება წარმოდგენილია, თუ დაიცვას ლოგიკა, რა ნიმუში ბიტი ნაცვლად? 01. ასე მისაღებად, ჩვენ იწყება root და ჩვენ წავიდეთ დაუტოვებიათ, ხოლო შემდეგ ჩვენ უფლება, რაც იმას ნიშნავს, რომ ჩვენ მოჰყვა 0 და შემდეგ 1. ამიტომ, ჩვენ უნდა წარმოადგინოს წერილი ერთად ნიმუში 0 და 1. და ახლა შეამჩნია ჩვენ უკვე გვაქვს ქონების დაუყოვნებლივ decodability რომ ჩვენ არ აქვთ Morse კოდი. მიუხედავად იმისა, რომ ორივე ამ თარგების საკმაოდ მოკლე - E არის 1 bit, არის 2 ბიტი - შეამჩნია, რომ ისინი არ შეიძლება დაბნეული ერთი ან მეორე, რადგან თუ ხედავთ 1 ეს რაღაც უნდა იყოს E, თუ ხედავთ 0 შემდეგ 1 ის აშკარად რაღაც უნდა იყოს ა ანალოგიურად, რა D? 001. რა არის C? 0001. და რა არის B? 0000. ისევ და ისევ, რადგან ყველა წერილებს ჩვენ აღელვებს არიან ფოთლები და არცერთი მათგანი სახის middlemen in გზა, root to ფოთოლი, არ რისკი conflating 2 წერილების "განსხვავებული კოდირება რადგან ყველა ეს bit შაბლონებს are deterministic. 0000 ყოველთვის იქნება ბ იქ არ არის კვანძის სადღაც შორის, რომ თქვენ შეიძლება აღრეული ერთი წერილი სხვა. ასე რომ რა მნიშვნელობა აქ? ყველაზე პოპულარული წერილში - ამ შემთხვევაში E - აქვს მიღებული უმოკლეს კოდირების, უკვე მიღებული შემდეგი უმოკლეს კოდირების, და B და C, რაც ჩვენ უკვე ვიცოდით მისაღებად-go იყო სახის მაინც პოპულარული 10% სიხშირე თითოეული, მათ მიღებული გრძელი კოდირების. და მერე რა ეს იმას ნიშნავს, ახლა ის არის, რომ, თუ გსურთ გააგზავნოთ გაგზავნა რომ დაარქივებული ინტერნეტით ან ელექტრონული ფოსტის ან მოსწონს, ვიდრე გამოყენებით სტანდარტული ASCII, თქვენ შეგიძლიათ გააგზავნოთ Huffman კოდირებული გაგზავნა რის თუ გსურთ გააგზავნოთ წერილი ელ, თქვენ გააგზავნით მხოლოდ ერთი bit. თუ გსურთ გააგზავნოთ, თქვენ გააგზავნით 2 ბიტი, 01, ნაცვლად გაგზავნის 8 ბიტი მოჰყვა კიდევ ერთი 8 ბიტი, რომელსაც შემდეგ 8 ბიტი და სხვ. მაგრამ არსებობს GOTCHA აქ. ეს არ არის საკმარისი მხოლოდ მშენებლობა ხის და შემდეგ დაიწყოს გაგზავნის საწყისი Alice to ბობ მოკლე bit ნიმუში, string საწყისი ASCII, რადგან Alice ასევე უნდა აცნობოს ბობ, თუ რა თუ ბობ აპირებს შეძლებთ წაიკითხოთ მისი შეკუმშული გაგზავნა? [Inaudible სტუდენტი საპასუხოდ] >> რა არის რომ? [Inaudible სტუდენტი საპასუხოდ] >> თუ რა ხე არის. ან კიდევ უფრო კონკრეტულად, რა იმ კოდირება არიან, განსაკუთრებით მას შემდეგ, რაც ამ ამბავს ჩვენ მივიღეთ გადაწყვეტილება ზარის ერთ მომენტში. გახსოვდეთ, რომ ჩვენ უნდა აირჩიოთ თვითნებურად შორის 2 სხვადასხვა 20% კვანძების? ასე რომ არ შემთხვევაში, რომ ბობ, მიმღები, უბრალოდ აღდგენა ხე საკუთარი რადგან შესაძლოა, მან შევქმნით ხე ოდესმე ისე ოდნავ განსხვავებულად Alice. უფრო მეტიც, ბობ არც კი ვიცი, რა ორიგინალური გაგზავნა არის რადგან ერთადერთი, რაც Alice აგზავნის მას, რა თქმა უნდა, არის შეკუმშული გაგზავნა. ასე დაჭერა ერთად შეკუმშვის მოსწონს ეს ის არის, რომ, დიახ, Alice შეგიძლიათ შეინახოთ მთელი ბევრი ბიტი გაგზავნით 1 for E და 01 ამისთვის და ა.შ., თუმცა მან ასევე უნდა აცნობოს ბობ რა რუკების შორის წერილები და ბიტი იმიტომ, რომ ისინი ვერ ნათლად დაეყრდნოს მხოლოდ ASCII უქმნით თუ ჩვენ არ იყენებენ ASCII. ასე რომ, ის შეგიძლიათ ან მის ხე როგორღაც - დაწერა down, ჩაწეროთ იგი როგორც ორობითი მონაცემები ან რამე მაგდაგვარს - ან უბრალოდ მის პატარა cheat ფურცელი, Excel ფაილი, რომელიც აჩვენებს mappings. ამიტომ ეფექტიანობის შეკუმშვის ნამდვილად ვარაუდობს, რომ მესიჯები, რომ თქვენ გაგზავნის საკმაოდ დიდი, მინიმუმ საშუალო ზომის, რადგან თუ თქვენ გაგზავნის სუპერ მოკლე შეტყობინება, თუ გსურთ გააგზავნოთ გაგზავნა ცუდი, რაც ხდება, რომ იყოს სიტყვა შეგვიძლია მართლწერის აქ, B--D, თქვენ ალბათ აპირებს გამოიყენოს ნაკლები ბიტი, მაგრამ დაჭერა არის თუ ასევე უნდა აცნობოს ბობ რა ხე არის ან რა იმ კოდირება არიან, თქვენ აპირებს ალბათ გადაწონის ყველა დანაზოგების მქონე შეკუმშული რამ იწყება. ასე რომ, ეს შეიძლება რეალურად იყოს საქმე, რომ თუ თქვენ ცდილობენ compressing თუნდაც რაღაც zip ან ფორმატის თქვენ შეიძლება იცნობს - საკმაოდ პატარა ფაილი, თუნდაც ცარიელი ფაილები - ზოგჯერ იმ ფაილებს შესაძლოა უფრო დიდი და პატარა არ. მაგრამ რეალურად, ეს მოხდება მხოლოდ მცირე ზომის ფაილი, ამიტომ არ ვაპირებთ Gigabyte ფაილი იყოს 2 გბ; ჩვენ ნამდვილად საუბარი bytes ან უბრალოდ წყვილი kilobytes. ზოგიერთი პროგრამები, როგორიცაა ZIP არიან ჭკვიანი საკმარისი გააცნობიეროს, რომ, "თქვენ აპირებს მეტი დახარჯონ ბიტი compressing ამ." "ნება მომეცით არ გადაიტვირთოთ compressing იგი თქვენთვის ყველა." ასე რომ, ეს მხოლოდ ერთი გზა შემდეგ compressing ტექსტის ფორმატში. ჩვენ შეგვეძლო განახორციელოს მსგავსი რამ in C. მაგალითად, აქ არის თუ როგორ შეიძლება წარმოადგენდეს კვანძში ამ ხე რომელშიც ჩვენ char ამისთვის სიმბოლო, მცურავი მნიშვნელობა სიხშირე, და როგორც ჩვენ ვხედავთ ჩვენს სხვა მონაცემები სტრუქტურების, 2 პოინტერები, 1 მარცხნივ ბავშვი, 1 მარჯვნივ, არც რომელიც შეიძლება NULL, მაგრამ თუ არა, ეს ეხება მარცხენა ბავშვი და მარჯვნივ შვილი. ასე რომ, ეს მაშინ არის Huffman კოდირება, და ეს არის ერთ ერთი გზა, რომ შეგიძლიათ შესახებ compressing ინფორმაციით, და ეს რა თქმა უნდა ერთ ერთი ყველაზე მარტივი განხორციელება კონტექსტში, ამბობენ, გასულ კვირას მონაცემები სტრუქტურების, თუმცა, კიდევ უფრო დახვეწილი ალგორითმები არსებობს რომ შეგვიძლია გავაკეთოთ კიდევ უფრო დახვეწილი მუტაციების თქვენი მონაცემები. ნებისმიერი კითხვები მერე ხეები, ბინარული ხეები, ან კომპრესიას ტექსტი? [სტუდენტი] არის რაღაც გაურკვევლობა, მოსწონს თუ [inaudible] გაიყო 01, მაშინ 011 იქნება ორაზროვანი, არა? [Inaudible] >> კარგი კითხვაა. გაურკვევლობა. ნება მომეცით შეაჯამოს მიერ გულისხმობდა ამ სურათს აქ. იმის გამო, რომ გმირები თქვენ compressing, წარმომადგენლობების, ზოგადად ამ ალგორითმი ყოველთვის რჩება ფოთლები, თქვენ არასდროს შემთხვევით გამოიყენოთ იგივე ნიმუში ბიტი ამისთვის პრეფიქსი მრავალჯერადი წერილებს. ასე რომ, სხვა სიტყვებით, თქვენ შეშფოთებულია, ეს ჟღერს, გაურკვევლობის წარმოქმნილი რის 001 შეიძლება იყოს დაწყების B ან დაწყების C ან რამე მაგდაგვარს. მაგრამ, რომ არ შეიძლება იყოს საქმე, რადგან გაფრთხილების, რომ ყველა ასო ანბანი ჩვენ კოდირების არიან ფოთლები. გაურკვევლობა შეიძლება მხოლოდ წარმოიქმნება, როგორც იმ შემთხვევაში, Morse კოდი, თუ, მაგალითად, C იყო სადღაც სვლა საწყისი root to ბ [სტუდენტი] მარჯვენა. ასე რომ ამ შემთხვევაში, ამბობენ აქვს 2 ფოთლები. >> Say აქვს - ამბობენ, რომ ერთხელ. [სტუდენტი] Say აქვს 2 ფოთლები, F და G და შემდეგ G - >> Okay. მაგრამ მას არ შეუძლია. თავად ვერ აქვს ფოთლები F და G რადგან იმ წერილებს F და G რომ თავად იყოს წასვლამდე სადღაც მარცხნივ B ან უფლების ე ასე რომ ზოგადად, მათ უნდა ფოთლები. წინააღმდეგ შემთხვევაში, თქვენ სწორედ ჩვენ არ მოგვარდება პრობლემა, რომ Morse კოდი წინაშე დგას. კარგი კითხვაა. გაქვთ სხვა კითხვები? ყველა უფლება. ეს ცნება ბიტი, თურმე ჩვენ გვქონდა ძალა ყველა ერთად რომ ჩვენ რეალურად არ გამოიყენება როდესაც საქმე მანიპულირებენ ამ 0S და 1s. ჩვენ ვთხოვეთ ამ ერთი ადრეული პრობლემა კომპლექტი: კერძოდ, თუ როგორ დადიხართ შესახებ კონვერტაცია ზედა რომ ამას ან პირიქით? ან, უფრო კონკრეტულად, ერთი იმ პირველ psets სთხოვა რამდენი ბიტი გაქვთ რეალურად უნდა Flip, რათა შეცვალოს რომ ამას ან პირიქით? აი სწრაფი შეხსენება, თუ რა 65 და 97 გამოიყურებოდეს წელს ორობითი. და მაშინაც კი, თუ ეს საკითხი სახის faded თქვენს მეხსიერებაში, ხედავთ კვლავ აქ რომ რამდენი ბიტი უნდა იყოს flipped შეცვალოს Capital to მხედრულ? მხოლოდ ერთი. ისინი მხოლოდ განსხვავდება ერთ ადგილას, მესამე ცოტა მარცხნიდან. ვინაიდან აქვს 010, პატარა აქვს 011. ასე რომ როგორღაც, ჩვენ გვჭირდება უბრალოდ შეძლებთ Flip, რომ ცოტა, და ჩვენ შეგვიძლია მაშინ კაპიტალიზაცია ან მხედრულ ასოებით. ჩვენ გავაკეთეთ ეს წარსულში მიერ რეალურად გამოყენებით, თუ პირობები და შემოწმების თუ წერილში არის შორის კაპიტალის და კაპიტალის Z, მაშინ შედეგები, როგორიცაა - + 26 ან რამე მაგდაგვარს. ალბათ გააკეთა არითმეტიკული ცვლილების წერილები ანბანი. მაგრამ რა, თუ ჩვენ შეგვიძლია მხოლოდ Flip რომ ერთჯერადი bit? როგორ შეიძლებოდა მიდიხარ შესახებ აღების ერთი byte-ს ღირებულების ბიტი, ასე 8 ბიტი მოსწონს 01000001 და 01100001? თითქოს იმ ნიმუშების ბიტი, როგორ შეგვიძლია წავიდეთ შეცვლის შესახებ მხოლოდ ერთი მათგანი? რა მოხდება, თუ ჩვენ შემოიტანა ყვითელი აქ ამ სხვა ნიმუში ბიტი? თუ მე მთელი ყვითელი სიმებიანი 0S გარდა ერთი ცოტა რომ მინდა შეიცვალოს და მერე შემოიღონ ახალი ოპერატორი ცნობილია როგორც bitwise ოპერატორი - bitwise იმ გაგებით, რომ იგი მუშაობს ინდივიდუალური ბიტი, არა მთელი byte ან ოთხი ბაიტი ერთდროულად. ეს ვერტიკალური ბარი იქ ყვითელი ვარაუდობს, რომ რა თუ ავიღებთ წარმომადგენლობა კაპიტალი და bitwise ან ერთად ყვითელი თანმიმდევრობა ბიტი? სხვა სიტყვებით, ვფიქრობ უკან ჩვენი განხილვის ლოგიკური გამონათქვამები in Scratch ხოლო შემდეგ C. Doing ლოგიკური ან იმას ნიშნავს, რომ უნდა იყოს ჭეშმარიტი, ან პირველი, რაც უნდა იყოს ნამდვილი ან მეორე რამ უნდა იყოს ჭეშმარიტი ან ორივე უნდა იყოს ჭეშმარიტი, და მაშინ შედეგად გამომავალი თავისთავად მართალია. ამ შემთხვევაში აქ, რას მივიღებთ თუ ავიღებთ 0 "ან" ედ 0? ყალბი ან მცდარი? ეს ჯერ კიდევ ყალბი, ასე რომ ამას რჩება როგორც მოსალოდნელია. რა მოხდება, თუ ნაცვლად ჩვენ გავაკეთებთ 1 ან 0? ეს კიდევ რჩება 1, მაგრამ შეამჩნია რა უნდა მოხდეს აქ. თუ ჩვენ დავიწყებთ დედაქალაქში და ჩვენ ვაგრძელებთ "ან" მისი ცალკეული ბიტი როგორც ვაკეთებთ აქ, 0 ან ყვითელი ერთი გვაძლევს რა ქვევით აქ? ეს გვაძლევს 1. ფაქტობრივად, ვივარაუდოთ, ჩვენ არ ვიცით, რა ზედა ვერსია ცოტა რეალურად იყო. მოდით წავიდეთ ამის გაკეთება. ნება მომეცით გადავიდეს ამ თავში მეტი აქ. მოდით ეს კიდევ ერთხელ გავაკეთოთ. 0 ან 0 მაძლევს 0. 1 ან 0 მაძლევს 1. 0 ან 1 მაძლევს 1. 0 ან 0 მაძლევს 0. შემდეგი ერთი 0, შემდეგი ერთი 0, შემდეგი ერთი არის 0. 1 ან 0 მაძლევს 1. და ისე კი, თუ ჩვენ არ ვიცით წინასწარ რა მხედრულ იყო, უბრალოდ "ან" ING ამ მაგალითზე ბიტი, რომ ჩვენ აქ წარმოდგენილი ყვითელი, შეგიძლიათ მხედრულ კაპიტალის მიერ flipping რომ bit. ჩვენ გამოვიყენეთ ეს გამოთქმა კვირის წინ: flipping bit. როგორ რეალურად გავაკეთოთ, რომ პროგრამულად? თქვენ გამოიყენოს რა ზოგადად მოუწოდა ნიღაბი, თანმიმდევრობა ბიტი, რომ ამ შემთხვევაში ასე ხდება ასე გამოიყურება ნომერი აქ, და მაშინ "ან" ერთად გამოყენებისას ახალი C ოპერატორი, არ | |, თქვენ იყენებთ ერთი | და თქვენ ამას რეალურად მიიღოს პასუხი აქ იმიტომ რატომ? ეს არის 1s ადგილი, 2S ადგილი, 4S, 8S, 16s, 32s. გამოდის, რომ თუ თქვენ მიიღოს კაპიტალის წერილში და bitwise ან ერთად მთელი რიცხვი 32, რადგან მთელი რიცხვი 32, როდესაც თქვენ შეხედეთ მას, როგორც ბიტი, ასე გამოიყურება, რაც იმას ნიშნავს, თქვენ შეგიძლიათ Flip bit, რომ თქვენ ნამდვილად გინდათ. და ანალოგიურად - და ჩვენ შევხედოთ კოდი რაღაც მომენტში - ვარაუდობენ, გვინდა წასვლა სხვა მიმართულებით. როგორ გადადის ამას კაპიტალის? რომელიც ცოტა უნდა შეიცვალოს? ეს იგივე ერთი. ჩვენ გვინდა, რომ შეიცვალოს, რომ მესამე bit from 1 to 0. და როგორ შეიძლება ჩვენ შესახებ ამით? როგორ უნდა გამორთეთ ცოტა? რა ნიმუში ბიტი შეგვეძლო გამორთეთ ცოტა? რა მოხდება, თუ ჩვენ სახის ინვერტული ნიღაბი? ვინაიდან ადრე, ჩვენ მივიღეთ მთელი ყვითელი ნიღაბი 0S გარდა ერთი bit გვინდოდა ჩართოთ, რა, თუ ამ დროს, ჩვენ მთელ ნიღაბი 1s გარდა bit, რომ ჩვენ გვინდა გამორთეთ და შემდეგ გამოიყენოს რა ოპერატორს? რა მოხდება, თუ ჩვენ "და" რამ? ავიღოთ სახეს. თუ ჩვენ ახლა Flip ამ, ვივარაუდოთ, რომ ერთხელ შექმნა ნიღაბი რომ ყველა 1s გარდა ერთი ცოტა რომ მინდა გამორთეთ და მაშინ, ვიდრე "ან" თეთრი ნომრები up დაბრუნება ერთად ყვითელი ნომრები ქვემოთ აქ, მე ვფიქრობ ნაცვლად "და" მათ ერთად? ეს მოუწოდა bitwise და. ლოგიკურად, ეს იგივე როგორც ლოგიკური და. ეს მაძლევს 0 & 1 არის 0. ასე რომ ცრუ და ჭეშმარიტი არის ყალბი. ჭეშმარიტი და ნამდვილი ასეა. აქ არის ჯადოსნური: ჭეშმარიტი და ყალბი არის ყალბი, ასე რომ ჩვენ გამორთულია ცოტა. და ახლა დანარჩენი ამბავი გარკვეულწილად მარტივია. იმის გამო, რომ დანარჩენ ნიღაბი არის 1s, არა აქვს მნიშვნელობა, თუ რა რაოდენობით თეთრი. როდესაც თქვენ "და" რაღაც ერთად ასეა, თქვენ არ აპირებს შეცვალოს მისი ღირებულება. თუ ეს მართალია, იგი დარჩება ჭეშმარიტი. თუ ეს იყო ყალბი, დარჩება ყალბი. მაგრამ ჯადოსნური ხდება, როდესაც თქვენ მიიღოს რაღაც რომ იყო ჭეშმარიტი და მაშინ "და" ეს ყალბი. ეს ეფექტი შეწყვეტით, რომ ცოტა. ასე რომ ცოტა cryptic არსებობს. მოდით რეალურად შევხედოთ ზოგიერთი კოდი, რომელიც შესაძლოა რეალურად გამოიყურება კიდევ უფრო cryptic, მაგრამ მოდით შევხედოთ აქ tolower. თუ გავითვალისწინებთ tolower, ვაპირებთ საწყისი კაპიტალი უნდა ამას, ვნახოთ როგორ შეიძლება განახორციელოს ამ პროგრამის. აქ მთავარი და ეს არ რაიმე ბრძანების ხაზი არგუმენტები. მე გამოცხადების ხასიათი გ ამისთვის წერილში მომხმარებლის აპირებს აკრიფოთ სისტემაში მე მაშინ გამოიყენოთ ნაცნობი do ხოლო loop უბრალოდ დარწმუნდით, რომ მომხმარებლის ნამდვილად მაძლევს კაპიტალი ან B ან C. .. Z, ასე მომცეს რაღაც შორის და ზ და ახლა რა ვარ მე აქ აკეთებენ? მე "ან" ING ამ 0x20, მაგრამ ეს რეალურად იგივე როგორც - და ჩვენ დავბრუნდებით ამ წელს მომენტში - 32. ამიტომ ერთხელ, 32 არის ამ მაგალითზე ბიტი აქ. რატომ ვიცით ეს? უბრალოდ ფიქრობთ თავში კვირაში 0. ეს არის 1s ადგილი, 2S ადგილი, 4S, 8S, 16s, 32s ადგილი. ასე რომ, ეს ყვითელი ხმების ხდება იყოს 32. შემიძლია მერე წერილში მოსწონს char აქ, bitwise "ან" ეს სიტყვასიტყვით ნომერი 32, და რას არ დავიბრუნებ? ამას ვერსია რომ char. მომენტში წინ, თუმცა, მე გამოთქვა ამ წელს სხვადასხვა ბაზის ნოტაცია. რა ამ წარმოადგენენ? >> [სტუდენტი] თექვსმეტობითი. [Malan] ეს მოხდება, წარმოადგენენ თექვსმეტობითი. ჩვენ არ ისაუბრა თექვსმეტობითი ყველა რომ ბევრი რამ, მაგრამ სინამდვილეში მოსახერხებელი შემთხვევებში მოსწონს ეს. მიუხედავად იმისა, რომ იგი გამოიყურება უფრო რთული და მიუხედავად იმისა, რომ ჰგავს 20 და არა 32, აღმოჩნდება, რომ თექვსმეტობითი ფაქტიურად სუპერ მოსახერხებელი ნოტაცია რადგან თექვსმეტობითი ყველა ციფრი შემდეგ 0x - და ეს არაფერს ნიშნავს; ეს მხოლოდ ადამიანის კონვენცია, რომელიც ამბობს, აქ მოდის თექვსმეტობითი ნომერი - თითოეულ ამ ციფრებს, 2 და შემდეგ 0, თავად შეიძლება წარმოდგენილია ზუსტად 4 ბიტი. ასე რომ, თუ ჩვენ ამას ვაკეთებთ, ნება მომეცით გახსენით ტექსტური რედაქტორი აქ - უცნაური თვითდასრულება - თუ ჩვენ პატარა ტექსტური რედაქტორი აქ, ხმების 0x20 ნიშნავს აქ არის 4 ბიტი, აქ არის კიდევ ერთი 4 ბიტი. მოდით rightmost 4 ბიტი პირველი. 0 როდესაც წარმოდგენილი 4 ბიტი არის რა? სუპერ მარტივია. უბრალოდ ყველა 0S. ასე რომ 4 ბიტი როგორც 0S. როგორ წარმოადგენენ 2? უკვე ხოლო რადგან ეს გავაკეთეთ, მაგრამ 0100. ასე რომ, ეს 1s ადგილი, ეს არის 2S ადგილი, და მაშინ არ აქვს მნიშვნელობა რა სხვა ადგილებში არიან. სხვა სიტყვებით, წელს თექვსმეტობითი თქვენ შეიძლება ითქვას, 0x20, მაგრამ თუ მაშინ ვიფიქროთ რა არის 2 და როგორ არის წარმოდგენილი ორობითი, რა არის 0 და როგორ არის წარმოდგენილი ორობითი, პასუხი იმ კითხვებს რომლებიც ამ და ამ, შესაბამისად. ამიტომ 0x20 ხდება წარმოადგინოს ამ ნიმუში 8 ბიტი, რაც ზუსტად ნიღაბი რომ გვინდოდა. ასე რომ, ეს ამ ეტაპზე მხოლოდ ინტელექტუალური სწავლება, მაგრამ რეალობა კოდის ეს ტიპიურად უფრო საერთო დაწერა მუდმივები მოსწონს წელს თექვსმეტობითი რადგან მაშინ პროგრამისტი შეიძლება შედარებით ადვილად, მაშინაც კი, თუ ის მოითხოვს გარკვეული ქაღალდი და ფანქარი, გაერკვნენ, რა, რომ ნიმუში ბიტი არის იმიტომ, რომ თქვენ არ შეუძლიათ უბრალოდ გამოვხატოთ 0S და 1s ჩვეულებრივ კოდის. თქვენ ვერ 00010 და სხვ. თქვენ უნდა აირჩიოთ ათობითი ან თექვსმეტობითი ან octal ან სხვა notations. ადამიანების უმეტესობა ტენდენცია აირჩიოთ თექვსმეტობითი უბრალოდ ისე, რომ თითოეული ციფრი წარმოადგენს 4 ბიტი და ამისათვის სწრაფი მათემატიკის. მე კი ტალღის ჩემი ხელი toupper, რომელიც თითქმის იგივე, ის გამოიყურება თითქმის იდენტურია. Toupper ხდება გამოიყენოს არ ან ოპერატორის არამედ ამ ბიჭს და DF. რას DF წარმოადგენს? DF? ვინმე? >> [სტუდენტი] 255. 255? არ 255. ეს იქნება FF. ჩვენ დავტოვებთ ამ ერთი, როგორც პატარა exercise. მაგრამ თუ თქვენ გადასვლა 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 და მერე რა უძღოდა 9? ჩვენ სახის გარეთ ათობითი ციფრები, მაგრამ თექვსმეტობითი რა უძღოდა 9? [სტუდენტი]. >> ასე, B, C, D. შეგიძლიათ გაერკვნენ, იქიდან რა ნიმუში ბიტი დ რეალურად წარმოადგენს. და თუ მათემატიკის, ვნახავთ, რომ ნიღაბი თქვენ დასრულდება up მიღების უკან იდენტურია ამ. ეს არის F, ყველა 1s, და ეს არის დ. ამიტომ DF წარმოადგენს, რომ ნიღაბი. ყველა უფლება. და ბოლოს, არ მიიღოს რამ ხმის სუპერ, სუპერ ტექნიკური, მაგრამ ვარაუდობენ, გვინდოდა დაწერა პროგრამა, რომელიც აკეთებს ამას. ნება მომეცით წავიდეთ წინ და მიიღოს ორობითი, რომელიც პროგრამის ფაილი სახელად binary.c. და ახლა ნება მომეცით აწარმოებს ორობითი და მომეცი არასამთავრობო უარყოფითი რიცხვი. დავიწყოთ და ადვილი ტიპის 0. ეს არის არის პროგრამა, რომელიც ბეჭდავს out მთელი თავისი ბინარული წარმომადგენლობა. ასე რომ, თუ მე ითამაშე ერთხელ და აკრიფოთ მხოლოდ 1, მე უნდა მიიღოს 32-bit წარმომადგენლობა 1. თუ მე ეს კიდევ ერთხელ გავაკეთოთ, 2, მე უნდა მიიღოს, რომ. თუ 7, მე უნდა მიიღოს რამდენიმე 1s დასასრულს და სხვ. თურმე მე აღვნიშნო, რადგანაც ერთად bitwise ოპერაციების შეგიძლიათ მართლაც ერთი სხვა რამ ისევე. თქვენ შეგიძლიათ შექმნათ ეს ნიღბები დინამიურად ვითარდება. შეხედეთ ამ ერთი საბოლოო მაგალითად ჩართვის bitwise ოპერაციებში. აქ არის პირველი ნაწილი კოდი, შეეკითხება მომხმარებელს ამისთვის ნომერი, და ეს ამტკიცებს, რომ თქვენ მაძლევს არასამთავრობო უარყოფითი რიცხვი. ასე რომ ერთგვარი ძველი სკოლის პერსონალის. მაგრამ აქ არის რაღაც რომ სახის საინტერესო. როგორ შემიძლია წასვლა შესახებ ბეჭდვა რაოდენობის ორობითი? მე პირველად iterate რა, თუ რა? რა ზომის int როგორც წესი, მაინც ელექტრო? >> [სტუდენტი] 4. ეს 4. ასე რომ 4 * 8 არის 32 - 1 არის 31. ასე რომ, თუ მე დაწყებული დათვლა საწყისი 31, რომელიც წარმოადგენს, თურმე, მხოლოდ კონცეპტუალურად, 31 ბიტი ან უმაღლესი წესრიგის bit, რაც ამ ბიჭს მეტი აქ, ხოლო ამ იქნება bit 0. ასე რომ, ეს ცოტა 01 ... ცოტა 31. ასე რომ რა არის ეს კოდი აკეთებს? გაითვალისწინეთ ეს მარყუჟი, მიუხედავად იმისა, რომ გამოიყურება cryptic, მხოლოდ iterating 31 ქვემოთ 0. ეს არის ის. ასე რომ საინტერესო ნაწილი უნდა იყოს ამ 5 ხაზები აქ. გაითვალისწინეთ, რომ ამ ხაზის მე გამოცხადების ცვლადში ნიღაბი უნდა შეესაბამებოდეს ჩვენი ამბავი ამ ყვითელი ნომრები. და მერე რა არის ეს აკეთებს? ეს არის კიდევ ერთი bitwise ოპერატორის ჩვენ არ მინახავს ადრე, სავარაუდოდ. ეს მარცხენა Shift ოპერატორს. ეს ოპერატორი აკეთებს ამას. აქ არის ნომერი 1, და თუ დავტოვე ცვლა, მარცხენა Shift, როგორ ფიქრობთ, რომ აქვს ეფექტი აკეთებს, რომ ინდივიდუალური 1? სიტყვასიტყვით გადავიდა ეს დასრულდა. ასე რომ, თუ ნომერი 1 არის ის, რაც თქვენ გაქვთ მარცხენა და გავუშვით მიერ ინიციალიზაციისას I დან 31, რა არის, რომ აპირებდა? ის აპირებს ამ რაოდენობის 1 და გადაიტანოს ის 31 წერტილში, აქ. და რადგან იქ აშკარად სხვა ციფრები უკან, იმ ხელს იყოს უნდა შეიცვალოს 0S. ასე, რომ თქვენ დავიწყებთ ერთად ნომერი 1, რომელიც რა თქმა უნდა ასე გამოიყურება - და ნება მომეცით გავამახვილო ეს მეტი აქ ცენტრში. და მაშინ, როგორც თქვენ გადაეტანა რამ მარცხენა, ამ ბიჭს არსებითად მიდის ამ გზით. მაგრამ, როგორც კი თქვენ ამის გაკეთება, 0 იღებს შევსებული შემოსული თუ თქვენ გადაეტანა იგი მეორედ, ის მიდის ამ გზით და სხვა 0 იღებს შევსებული შემოსული თქვენ გადაეტანა იგი კვლავ და შემდეგ კიდევ ერთი 0 იღებს შევსებული შემოსული ასე რომ, თუ თქვენ ამის გაკეთება რამ: 1 << მე 31 ადგილები, თქვენ დასრულდება up მიღების ნიღაბი რომ არის 32 სიმბოლომდე leftmost რომელთაგან ერთი 1, ყველა დანარჩენი, რომლებიც 0. და თურმე, როგორც განზე დაიკავეს ნომრის მარცხენა მოსწონს ასევე ერთსა და ზოგჯერ მოხერხებულად, აქვს ეფექტი აკეთებს რა, რომ ნომერი? >> [სტუდენტი] დუბლირების იგი. გაორმაგება, რადგან თითოეული სვეტების - 1s ადგილი, 2S ადგილი, 4S ადგილი, 8S ადგილი, 16s ადგილი - they're ყველა გაორმაგება, როგორც თქვენ გადადით მარცხნივ. უფრო სწორად, როდესაც თქვენ გადაეტანა 1s თქვენ აპირებს მოხვდნენ გააორმაგოს ღირებულება ნომერი. თქვენ შეგიძლიათ დასრულდება მდე აკეთებს საინტერესო ტრანსფორმაციების ციფრების მიერ გადასვლის ყველაფერი მეტი ამ გზით მიერ უფლებამოსილების 2. მაშ როგორ აკეთებს ამას მუშაობს? ეს მაშინ მაძლევს ნიღაბი რომ ყველა 0S გარდა 1 ზუსტად ადგილი მინდა ეს, და მაშინ ეს გამოთქმა, რომელიც მოპარული toupper.c, უბრალოდ ვამბობ, მიიღოს ნომერი N რომ მომხმარებლის აკრეფილი, "და" იგი რომ ნიღაბი, და რას აპირებენ კიდევ? თქვენ აპირებს მიიღოს 1 თუ არსებობს 1 ამ ნიღბიანი საიდან, ან თქვენ აპირებს მიიღოს 0 თუ არ. და ა.შ. ყველა ამ პროგრამის ამჯამად ეფექტურად არის მას აქვს loop, და ეს ქმნის ნიღაბი ერთად 1 ზე აქ, მაშინ 1 ზე აქ, მაშინ 1 ზე აქ, და იგი იყენებს ამ bitwise და შეასრულა ვთქვა არის 1 წვლილი მომხმარებლის შეყვანის აქ? არის 1 წვლილი მომხმარებლის შეყვანის აქ? და თუ, სიტყვასიტყვით ბეჭდვა 1, სხვაგან ბეჭდვა 0. ვაკეთებთ ამ ints მხოლოდ იმიტომ, ამიტომაც ვაკეთებთ 32 ბიტი ნაცვლად 8, მაგრამ რა ჩვენ გააცნო მაშინ ეს bitwise და ამ bitwise ან, და ეს მარცხენა Shift ოპერატორი, რომლებიც არ არიან ხშირად საშინლად გამოსადეგი, მაგრამ აღმოჩნდება, ისინი შეიძლება. რეალურად, თუ თქვენ წარმოადგინოს რაღაც მასივი Booleans უბრალოდ წარმოადგინოს ჭეშმარიტი ან ცრუ, ვივარაუდოთ, თქვენ სურდა ტრეკზე თუ არა ოთახი სავსე 300 სტუდენტი იმყოფება, თქვენ შეიძლება განაცხადოს მასივი ზომა 300 ტიპის bool ისე, რომ თქვენ კიდევ 300 bools, და როდესაც თქვენ დააჭერთ ყოველი ჭეშმარიტი თუ ვინმე არის აქ და ცრუ სხვაგვარად. რატომ არის, რომ წარმომადგენლობა რომ მონაცემები სტრუქტურა არაეფექტური? რა არის ცუდი დიზაინი, რომ მონაცემები სტრუქტურა, მასივი 300 bools? რა არის bool, ფაქტობრივად, ქვევმოთ hood? ეს, ძალიან, არის რაღაც, რაც შესაძლოა არ იყოს ნაცნობი. თურმე არ არსებობს bool. დამახსოვრება ჩვენ სახის შექმნა რომ cs50.h ფაილი, რომელიც თავისთავად მოიცავს სტანდარტული bool. C არის სახის მუნჯები, თუმცა, როდესაც საქმე bool. იგი იყენებს 8 ბიტიან წარმოადგინოს ყველა bool, რომელიც მთლიანად wasteful რადგან ცხადია, რამდენი ბიტი გჭირდებათ წარმოადგინოს bool? მხოლოდ 1. გამოდის, რომ თუ თქვენ ახლა უკვე უნარს, bitwise ოპერატორები მანიპულირება ინდივიდუალური ბიტი კი char, თუნდაც ერთი ბაიტი, აღმოჩნდება, თქვენ შეიძლება შეამციროს მეხსიერების საჭირო წარმოადგენენ იმედი მოსწონს, რომ დასწრება ე.წ. მონაცემები სტრუქტურის მიერ ფაქტორი 8. ნაცვლად გამოყენებით რვა ბიტი წარმოადგენს ჭეშმარიტი ან ცრუ, შეგიძლიათ სიტყვასიტყვით გამოიყენოთ ერთი გამოყენებით ერთი byte ყველა რვა სტუდენტების კლასის და toggling საწყისი 0 დან 1 ინდივიდუალური ბიტი გამოყენებით ამ სახის დაბალი დონის ხრიკები. რომ ნამდვილად ბოლო მოეღოს ენერგია. არსებობს თუ არა რაიმე კითხვა bitwise ოპერაციების? Yeah. >> [სტუდენტი] არის განსაკუთრებული ან ოპერატორს? დიახ. არსებობს განსაკუთრებული ან ოპერატორს, რომ ასე გამოიყურება, ^, სტაფილოს სიმბოლო, რაც იმას ნიშნავს, მხოლოდ პირველი ნივთი ან მეორე რამ შეიძლება 1 for output უნდა იყოს 1. არსებობს ასევე არ, ~, რომელიც საშუალებას მოგცემთ ინვერსიის 0 დან 1 ან პირიქით, ისევე. და არსებობს ასევე მარჯვენა Shift ოპერატორი, >>, რომელიც საპირისპირო ერთი ვნახეთ. ყველა უფლება. ავიღოთ რამ არის მაღალ დონეზე. ჩვენ დავიწყეთ მიერ ვსაუბრობთ ტექსტი და შემდეგ compressing ეს და წარმოადგენს ტექსტი ნაკლები რაოდენობით ბიტი; ჩვენ ვისაუბრეთ ცოტა შესახებ, თუ როგორ შეგვიძლია ახლა დავიწყოთ მანიპულირება რამ on bitwise დონეზე. მოდით ახლა zoom უკან მდე 10,000 ფეხები გამოსახულებამდე უფრო კომპლექსური რამ, როგორიცაა გრაფიკა. აქ ჩვენ გვაქვს გერმანიის დროშა, აქ ჩვენ გვაქვს ერთი საფრანგეთის. ეს შეიძლება იყოს წარმოდგენილი ფორმატის მოგეხსენებათ - GIFs, მაგალითად. თუ თქვენ ოდესმე მინახავს გამოსახულება ინტერნეტში რომ მთავრდება. Gif, ეს არის გრაფიკული ცვლა ფორმატი. ეს ორი დროშები აქ სახის სარგებლის თავს შეკუმშვის რისთვისაც ალბათ აშკარა მიზეზი? >> [Inaudible სტუდენტი საპასუხოდ] არსებობს უამრავი განმეორება, არა? იმისათვის, რომ გაგზავნას გერმანიის დროშა, ვფიქრობ ამ, როგორც გამოსახულება ეკრანზე უკან თქვენი Scratch დღე. თქვენ შეიძლება გავიხსენოთ, რომ არსებობს ინდივიდუალური პიქსელი ან წერტილი, რომ დაკომპლექტებას გამოსახულება. არსებობს მთელი რიგი შავი წერტილების და სხვა მთელი რიგი შავი წერტილები. აქ bunch of რიგები შავი წერტილები, რომ ჩვენ ვხედავდით, თუ ჩვენ მართლაც zoomed წელს, ჰგავს, როდესაც ჩვენ zoomed წელს რობ სახე in Photoshop. როგორც კი მივიღეთ უფრო ღრმა და უფრო ღრმა და სიღრმეში გამოსახულება, თქვენ დაიწყო ხედავს pixelation, ყველა მოედნებზე, რომ შექმნა თავისი თვალი ამ შემთხვევაში. იგივე გარიგება აქ. თუ ჩვენ zoomed საკმაოდ ცოტა, თქვენ ამას ვხედავ ინდივიდუალური წერტილები. ისე, ეს არის სახის ნარჩენები ბიტი. თუ მესამე დროშის არის შავი და მესამედი დროშა არის ყვითელი და ა.შ., რატომ არ შეიძლება ჩვენ როგორღაც შეკუმშოს ეს დროშა? და მაშინაც კი, საფრანგეთის დროშა შეიძლება დაარქივებული მიუხედავად იმისა ნიმუში არის ცოტა განსხვავებული. თურმე GIF ფაილის ფორმატი არის უდანაკარგო შეკუმშვის ფორმატი, რაც იმას ნიშნავს, თქვენ შეუძლია იმიჯი მოსწონს გერმანიის დროშა აქ, შეგიძლიათ გადაყარეთ ბევრი თავისი ბიტი გარეშე ხარისხის ხარჯზე. ეს არის განსხვავებით რაღაც JPEGs, რომელთანაც ყველაზე ჩვენგანი ალბათ უფრო ნაცნობი. Facebook ფოტო და Flickr ფოტო და მოსწონს თითქმის ყოველთვის გადაარჩინა როგორც JPEGs როდესაც ისინი ატვირთული, მაგრამ JPEGs არის lossy - LOSSY - ფორმატი, რომლის დროსაც თქვენ ჩვენგან გადაყარეთ ბიტი მაგრამ თქვენ ასევე გადაყარეთ ხარისხი. და ასე თუ შეკუმშოს ფოტოები Photoshop ან ატვირთეთ მათ Facebook ან მიიღონ მათ მართლაც crappy ტელეფონი, თქვენ იცით, რომ სურათზე იწყებს ძალიან splotchy და pixelated, და ეს იმიტომ, რომ ის მიმდინარეობს შეკუმშული მიერ კომპიუტერის ან ტელეფონის მიერ სიტყვასიტყვით სროლა ინფორმაცია დაშორებით. მაგრამ GIF არის საოცარი, რომ ის შეიძლება გამოიყენოს ნაკლები ბიტი, ვიდრე ეს შეიძლება იყოს დაკარგვის გარეშე ნებისმიერი ინფორმაციის. და ეს არსებითად ასე იქცევა შემდეგნაირად. იმის ნაცვლად, რომ მაღაზიის ფაილი, როგორიცაა BMP რომ RGB სამმაგი შავი, შავი, შავი, შავი, შავი, შავი, შავი, შავი, შავი, შავი, შავი, შავი და ა.შ., საკმაოდ, GIF ფორმატში აპირებს ამბობენ, "შავი", და მაშინ, "გამეორება ამ 100 ჯერ," ან რაღაც მსგავსი რომ. "შავი, ვიმეორებ ამ 100 ჯერ, შავი, ვიმეორებ ამ 100 ჯერ ..." "ყვითელი, ვიმეორებ ამ 100 ჯერ." ამიტომ ახსოვს, არსებითად, leftmost pixel და შემდეგ encodes როგორღაც ცნება იმეორებს, რომ pixel ისევ და ისევ. ამიტომ GIFs შეიძლება მაშინ შეკუმშოს თავად დაკარგვის გარეშე ნებისმიერი ინფორმაციის. მაგრამ თუ ჰქონდა უნდა გამოიცნოს, თუ ეს ალგორითმი რომ gifs გამოყენების, რომელიც ამ დროშებით, მიუხედავად იმისა, ისინი იდენტური ზომის, იქნება პატარა როცა გადაარჩინა დისკზე როგორც GIF? >> [სტუდენტი] გერმანიაში. გერმანიაში იქნება პატარა? რატომ? [სტუდენტი] იმიტომ გავიმეორებ ბევრი, ბევრი ჯერ ჰორიზონტალურად და მაშინ ვიმეორებ სხვა დროს. >> ზუსტად. იმის გამო, რომ ადამიანები, რომლებიც გამოგონილი GIF მხოლოდ სახის თვითნებურად გადაწყვიტა რომ განმეორება იქნება leveraged ჰორიზონტალურად და არ laterally. არსებობს ბევრი გამეორების laterally აქ გერმანიის დროშა, ვიდრე საფრანგეთის დროშა. ასე რომ, თუ ჩვენ რეალურად გახსენით საქაღალდე ჩემი ხისტ დისკზე, რომელსაც აქვს ამ GIFs, შეგიძლიათ რეალურად ვხედავთ, რომ გერმანიის დროშა აქ არის 2 kilobytes და საფრანგეთის ერთი 4 kilobytes. ეს ხდება იყოს შემთხვევითი, რომ ერთი ორჯერ სხვა, მაგრამ სინამდვილეში საქმე, რომ საფრანგეთის დროშა არის გაცილებით. მიუხედავად იმისა, რომ ჩვენ ვსაუბრობთ აქ გრაფიკა, იგივე იდეები შეიძლება მიმართოს არ რამ, როგორიცაა დროშები მაგრამ სურათებით, რომლებიც პატარა უფრო რთული. თუ თქვენ მიიღოს სურათს ვაშლის, აუცილებლად არსებობს უამრავი დუბლირებას იქ, ამიტომ ვერ როგორღაც გვახსოვდეს, რომ ნაგულისხმევი ფონზე არის ლურჯი და არა, როგორც მარჯვენა ნახატზე ვარაუდობს, უნდა გვახსოვდეს, ფერი თითოეული პიქსელის ამ სურათს. ასე რომ ჩვენ შეგვიძლია ჩააგდოს ბიტი მოშორებით არსებობს დაკარგვის გარეშე ინფორმაციას. ვაშლის კვლავ გამოიყურება უბრალოდ იგივე. ამ მაგალითში აქ, თქვენ ალბათ ხედავთ რა ხდება ფილმის. ეს წარმოადგენს ძველი სკოლა ფილმი მასრები რის ზედა გამოსახულება არსებობს თქვენ გაქვთ RV მამოძრავებელი წარსულში სახლი და ხე. და როგორც რომ ვან დრაივები წარსულში მარცხნიდან მარჯვნივ, რა აშკარად არ იცვლება? სახლი არ აპირებს არსად, და ხე არ აპირებს არსად. ერთადერთი, რომ მოძრავი არის ვან ამ შემთხვევაში. ასე რომ, როგორც ფონის უცვლელი ვარაუდობს, რას გავაკეთებთ ფილმები ერთნაირად მხოლოდ გადაყარეთ ინფორმაცია, რომელიც არ შეიცვლება შორის ფარგლებში. ეს საყოველთაოდ ცნობილია, როგორც interframe შეკუმშვის რის თუ არა ეს ჩარჩო გამოიყურება თითქმის იდენტურია ამ ერთი, მოდით არ გადაიტვირთოთ შენახვა დისკზე ნებისმიერი იდენტური ინფორმაცია ამ შუალედური ფარგლებში, მოდით მხოლოდ გამოიყენოთ გასაღები ფარგლებში ერთხელ ხოლო რომ რეალურად შესანახად, რომ საინფორმაციო redundantly ისევე როგორც პატარა საღი აზრის შეამოწმოს. პირიქით, მეორე მიდგომა compressing ვიდეო არის ამ მეორე და ქვედა მაგალითად აქ, აქ ვიდრე მაღაზიაში 30 კადრი, რატომ არ უბრალოდ შეინახოს 15 კადრი მეორე ნაცვლად? იმის ნაცვლად, რომ ფილმის სახის მიედინება ლამაზად, შესანიშნავად, ეს შესაძლოა გამოიყურებოდეს ის stuttering ცოტა, ცოტა ძველი სკოლა, მაგრამ ნეტო ეფექტი იქნება გამოიყენოს შორს ნაკლები ბიტი, ვიდრე შეიძლება სხვაგვარად იყოს საჭირო. ასე რომ სად ეს მაშინ დაგვტოვებთ? ეს იყო ცოტა განზე სად სხვაგან შეგიძლიათ წავიდეთ ერთად შეკუმშვის. დამატებითი რომ მიიღოს კლასის მოსწონს CS175 აქ. აი კიდევ ერთი მაგალითი იმისა ფარგლებში ვიდეო. თუ ფუტკრის არის ერთადერთი მოძრავი, შეგიძლიათ ნამდვილად გადააგდებს ინფორმაცია იმ ახლო ფარგლებში რადგან ყვავილი და ცა და ფოთლები არ იცვლება. მაგრამ მოდით განვიხილოთ ერთი ბოლო რამ. მომდევნო 5 წუთი ჩვენ დატოვება C უკან სამუდამოდ ლექცია? დიახ. არ psets, თუმცა. ბოლო ამბავი C და შემდეგ მივიღებთ ძალიან sexy პერსონალის ჩართვის HTML და ვებ და WOO-Hoo. ყველა უფლება. Here We Go. სწორედ მოტივაცია. თურმე ყველა ამ დროს, როდესაც ჩვენ წერდა პროგრამების ჩვენ აწარმოებს Clang. და Clang, ჩვენ განაცხადა წლიდან პირველ კვირას საკმაოდ ბევრი იღებს კოდის და აკონვერტებს იგი ობიექტის კოდი. იგი იღებს C და აკონვერტებს იგი 0S და 1s. მე სახის იქნა ცრუობს თქვენ რამდენიმე კვირის განმავლობაში, რადგან ეს არ არის საკმაოდ მარტივია, როგორც რომ. არსებობს გაცილებით მეტი მიმდინარეობს ქვეშ hood როდესაც თქვენ აწარმოებს პროგრამა მოსწონს Clang. სინამდვილეში, პროცესის შედგენის პროგრამას შეუძლია ნამდვილად უნდა შეაჯამა, როგორც თქვენ შესაძლოა გავიხსენოთ საწყისი Rob-ს ვიდეო compilers, შევიდა ამ 4 ნაბიჯები: წინასწარ დამუშავებას, შედგენას თავად იკრიბებიან, და აკავშირებს. მაგრამ ჩვენ კლასში და საუკეთესო ხალხი მსოფლიოში, როგორც წესი, შეაჯამოს ყველა ამ ნაბიჯებს როგორც მხოლოდ "შედგენა." მაგრამ თუ ჩვენ დავიწყებთ კოდის მსგავსად, გავიხსენოთ ეს ალბათ უმარტივესი C პროგრამის ჩვენ წერილობითი დღემდე იხსენებენ, რომ როდესაც შედგენილი იგი მთავრდება ეძებს მოსწონს ეს. მაგრამ რეალურად შუალედური ნაბიჯს და იმ ნაბიჯების ასეთია. პირველი არის ეს საგანი დროს ძალიან ზევით და საუკეთესო ჩვენი პროგრამების, # Include რას # მოიცავს ნუ ჩვენთვის? ეს საკმაოდ ბევრი ასლები და პასტები შინაარსი stdio.h ჩემს ფაილი ისე, რომ რატომ? რატომაა აინტერესებს შინაარსი stdio.h? რა არის იქ საინტერესო? Printf განცხადებას, მისი პროტოტიპი, რათა შემდგენელი მაშინ იცის რას ვგულისხმობ როდესაც ვახსენებ ამ ფუნქციის printf. ასე ნაბიჯი 1 in შედგენის არის წინასწარ დამუშავებას, რომლის დროსაც პროგრამა მოსწონს Clang ან დამხმარე პროგრამა, რომელიც Clang გააჩნია ნათქვამია თქვენი კოდი ყველაზე ქვედა, მარცხნიდან მარჯვნივ, და ნებისმიერ დროს ამას მიზანშეწონილად მიიჩნევს # სიმბოლო მოჰყვა სიტყვით მოსწონს მოიცავს, იგი ასრულებს, რომ ოპერაცია, კოპირება და pasting ამ შემთხვევაში stdio.h თქვენი ფაილი. სწორედ ნაბიჯი 1. მაშინ თქვენ გაქვთ გაცილებით დიდია C ფაილი გამო უზარმაზარი ასლი, პასტა სამუშაოს ეს მხოლოდ მოხდა. ნაბიჯი 2 ახლა შედგენა. მაგრამ აღმოჩნდება, შედგენის იღებს კოდის რომ ასე გამოიყურება და თურმე ის, რომ რაღაც ასე გამოიყურება, რაც შეეხება იმ ნაცნობი ჰქვია? >> [სტუდენტი] ასამბლეა. >> ასამბლეის ენაზე. ეს არის რეალურად რაღაც თუ თქვენ მიიღოს CS61 თქვენ ჩაყვინთვის შევიდა უფრო დეტალურად. ეს არის მხოლოდ ახლოს, როგორც თქვენ შეგიძლიათ მიიღოთ წერას 0S და 1s თავის მაგრამ წერილობით რამ ისე, რომ ჯერ კიდევ იღებს მინიმუმ ცოტა გრძნობა. ეს არის მანქანა ინსტრუქციები, და თუ ჩვენ გადახვევა ქვემოთ მთავარი ფუნქცია აქ, შევნიშნოთ, რომ ეს ბიძგი დავალებით, გადაადგილება დავალებით, სხვაობა დავალებით, მოვუწოდებთ დავალებით, და სხვ. როდესაც გესმით, რომ თქვენი კომპიუტერი Intel შიგნით, თქვენ გაქვთ Intel CPU თქვენს Mac ან PC, რას ნიშნავს ეს? CPU მოდის მიერ აშენებული კომპანიები, მაგალითად Intel გაგება გარკვეული ინსტრუქციები. არ იციან, რა ფუნქციები, როგორიცაა სვოპი არის ან მთავარ არიან თავისთავად, მაგრამ ვიცით, რა დაბალი დონის მითითებებს, როგორიც დაამატოთ, სხვაობა, დააყენებს, გადაადგილება, მოვუწოდებთ, და ა.შ. არიან. ასე რომ, როდესაც თქვენ შედგენის C კოდი შევიდა ასამბლეის ენაზე თქვენი ძალიან მოსახერხებელი ორიენტირებული კოდი გარდაქმნადია რაღაც რომ ასე გამოიყურება, რომ სიტყვასიტყვით მოძრაობს bytes ან 4 ბაიტი გარშემო ასეთ მცირე ერთეულების და გარეთ CPU. მაგრამ საბოლოოდ, როცა Clang მზად არის ამ წარმომადგენლობა თქვენი პროგრამა შევიდა 0S და 1s, მაშინ ნაბიჯი უწოდა იკრიბებიან მოხდება, და ეს კიდევ ერთხელ ყველა ხდება blink of თვალის როდესაც გაშვებული Clang. ჩვენ დავიწყებთ აქ, ეს შედეგები შემდეგის მსგავსად, და შემდეგ ეს აკონვერტებს იგი ამ 0S და 1s. და თუ გინდათ წავიდეთ უკან რაღაც მომენტში და რეალურად ვხედავ ამ მოქმედებაში, თუ წასვლას hello1.c--ეს არის ერთ პირველივე პროგრამების ჩვენ შევხედეთ - ჩვეულებრივ ჩვენ შეადგინონ ამ Clang hello1.c და ეს გვაძლევს a.out. თუ პირიქით თქვენს ნაცვლად მისცეს მას-S დროშა, რაც თქვენ მიიღებთ არის hello1.s და თქვენ რეალურად ვხედავ ასამბლეის ენაზე. მე ამით ძალიან მოკლე პროგრამა, მაგრამ თუ დაბრუნდა Scramble ან მაშინ ნებისმიერი პროგრამის თქვენ დაწერილი და უბრალოდ გარეთ ცნობისმოყვარეობა გვინდა, რომ რასაც ის რეალურად გამოიყურება, რა მართლაც ყელში შევიდა CPU, შეგიძლიათ გამოიყენოთ, რომ-S დროშა Clang. მაგრამ შემდეგ ბოლოს, არსებობს კიდევ ერთი GOTCHA. აქ არის 0S და 1s რომ წარმოადგენენ ჩემი განხორციელების hello, world. მაგრამ მე სხვისი ფუნქციის ჩემი პროგრამა. ასე რომ მიუხედავად იმისა, რომ პროცესი უკვე მე hello.c, იგი იღებს შედგენილი შევიდა ასამბლეის კოდი, ხოლო შემდეგ იგი იღებს შეიკრიბნენ შევიდა 0S და 1s, მხოლოდ 0S და 1s, რომლებიც outputted ამ მომენტში არიან, რომ შედეგი საწყისი ჩემი კოდი. მაგრამ ადამიანი, რომელიც წერდა printf, ისინი შედგენილი მათი კოდი 20 წლის წინ და ეს არის დაყენებული სადღაც ელექტრო მოწყობილობების, ამიტომ ჩვენ როგორღაც უნდა შერწყმა თავისი 0S და 1s ერთად ჩემი 0S და 1s, და რომ მივყავართ მე -4 და საბოლოო ნაბიჯი შედგენის, რომელიც ცნობილია როგორც აკავშირებს. ა.შ. მარცხენა მხარეს გვაქვს ზუსტი იგივე სურათი, როგორც ადრე: hello.c ხდება ასამბლეის კოდი ხდება 0S და 1s. მაგრამ გავიხსენოთ, რომ მე გამოიყენება სტანდარტული I / O ბიბლიოთეკა ჩემი კოდი, და ეს ნიშნავს, რომ სადმე კომპიუტერში არსებობს ფაილი სახელად stdio.c ან თუნდაც შედგენილი ვერსია მათი იმიტომ, რომ ვიღაცას რამდენიმე წლის წინ შედგენილი stdio.c შევიდა ასამბლეის კოდი და შემდეგ მთელი bunch of 0S და 1s. ეს არის ის, რაც ცნობილია, როგორც სტატიკური ან დინამიური ბიბლიოთეკა. ეს ზოგიერთი ფაილის სხდომაზე სადღაც ელექტრო მოწყობილობების. მაგრამ ბოლოს, მე უნდა ჩემი 0S და 1s და რომ პირის 0S და 1s და როგორღაც დაუკავშირონ მათი ერთად, სიტყვასიტყვით დააკავშიროთ იმ 0S და 1s ერთ ფაილი სახელად a.out ან hello1 ან რასაც დავურეკე ჩემი პროგრამა ისე, რომ საბოლოო ჯამში აქვს ყველა 1s და 0S რომ უნდა დაკომპლექტებას ჩემი პროგრამა. ასე რომ მთელი ამ ხნის ამ სემესტრში, როდესაც თქვენ უკვე გამოყენებით Clang და კიდევ უფრო მეტი ხნის წინ გაშვებული შეტანა აწარმოებს Clang, ყველა ამ ნაბიჯებმა ხდებოდა სახის მომენტალურად მაგრამ სრულიად შეგნებულად. და ასე თუ გაგრძელდება კომპიუტერულ მეცნიერებაში, კერძოდ CS61, ეს ფენა რომ თქვენ კვლავაც კანი უკან off არსებობს ვსაუბრობთ ეფექტურობის, უსაფრთხოების მნიშვნელობა და მოსწონს ამ ქვედა დონეზე დეტალები. მაგრამ, რომ ჩვენ დაახლოებით დატოვონ C მიღმა. მოდით წავიდეთ წინ და მიიღოს ჩვენი 5 წუთიანი შესვენება ახლა, და როცა ჩვენ დავბრუნდებით: ინტერნეტი. ყველა უფლება. ჩვენ უკან. ახლა ჩვენ დავიწყოთ ჩვენი ნახვა არ მხოლოდ HTML, რადგან, როგორც ნახავთ, HTML თავისთავად რეალურად საკმაოდ მარტივია მაგრამ ნამდვილად დროს ვებ პროგრამირების უფრო ზოგადად, ქსელში საერთოდ, და როგორ ყველა ამ ტექნოლოგიების გავერთიანდეთ რათა საშუალებას მოგვცემს შევქმნათ ბევრად უფრო დახვეწილი პროგრამები atop ინტერნეტ ვიდრე დღემდე ჩვენ შევძელით ამ შავი და თეთრი ფანჯრები. მართლაც, ამ დროისთვის სემესტრის მიუხედავად იმისა ჩვენ გაატაროთ შედარებით ნაკლები დრო on PHP, HTML, CSS, JavaScript, SQL და მეტი, საუკეთესო სტუდენტებს გააკეთოს დასრულდება მდე აკეთებს საბოლოო პროექტები, რომლებიც ინტერნეტის მეშვეობით რადგან როგორც დაინახავთ, ფონზე თქვენ ახლა უკვე დო არის ძალიან გამოიყენება ამ უმაღლესი დონის ენებზე. და როგორც თქვენ დაიწყოს ფიქრი თქვენი საბოლოო პროექტი, რომელიც, ჰგავს პრობლემა Set 0, სადაც თქვენ წახალისება არა უმეტეს არაფერი საინტერესო თქვენ Scratch, საბოლოო პროექტი თქვენი შესაძლებლობა მიიღოს თქვენი newfound ცოდნა და საზრიანი ერთად C ან PHP ან JavaScript ან ანალოგიური გარეთ Spin და შექმნათ თქვენი ძალიან საკუთარი ნაჭერი პროგრამული უზრუნველყოფა, რომ მსოფლიომ დაინახოს. და სათესლე თქვენ იდეები, ვიცით, რომ თქვენ შეგიძლიათ უხელმძღვანელებს აქ, projects.cs50.net. ყოველ წელს, ჩვენ შუამდგომლობას იდეების ფაკულტეტი და პერსონალი და სტუდენტური ჯგუფების შესახებ კამპუსში მხოლოდ წარმოადგინონ იდეები საინტერესო რამ, რაც შეიძლება მოგვარდეს გამოყენებით კომპიუტერები, გამოყენებით საიტებზე გამოყენებით პროგრამული უზრუნველყოფა. ასე რომ, თუ თქვენ ცდილობენ ამუშავება იდეა საკუთარი, ყველა საშუალებით გადახვევა მეშვეობით იდეები იქ წელს და ბოლო. ეს შესანიშნავად okay დაძლევის პროექტი, რომელიც უკვე მოგვარება ადრე. ჩვენ ვნახეთ ბევრი apps for ხედავს სტატუსის სამრეცხაო წლის კამპუსში, ბევრი apps for ნავიგაცია სასადილოს მენიუში ბევრი apps for ნავიგაცია კურსი კატალოგი და მოსწონს. და მართლაც, მომავალი ლექცია და მომავალში სემინარების, ჩვენ წარმოგიდგინოთ ზოგიერთი საჯაროდ ხელმისაწვდომი APIs, ორივე კომერციულად ხელმისაწვდომი ისევე როგორც აქ მიიღონ CS50 წლის კამპუსში ისე, რომ თქვენ გაქვთ მონაცემები და შეგიძლიათ მაშინ ნუ საინტერესო რამ არის. ასე უფრო საბოლოო პროექტების რამდენიმე დღის, როდესაც ჩვენ გათავისუფლების სპეციფიკაცია, მაგრამ ახლა, ვიცით, რომ თქვენ შეგიძლიათ იმუშაოთ სოლო ან ერთი ან ორი მეგობარი ყველაზე ნებისმიერი პროექტის საინტერესო იყოს თქვენთვის. ინტერნეტი. თქვენ წავიდეთ წინ და გაიყვანოს თქვენი ლეპტოპი, მიდიხარ facebook.com პირველად, რომ არ ხართ შესული სისტემაში ცოტა ხნის წინ, და დააჭიროთ. რა ზუსტად ხდება? როდესაც თქვენ დააჭიროთ თქვენს კომპიუტერში, მთელი bunch of ნაბიჯები დავიწყოთ სახის magically ხდება. ასე, რომ თქვენ აქ მარცხენა, სერვერზე როგორიცაა Facebook არის აქ უფლება, და რატომღაც თქვენ იყენებთ ამ ენის მოუწოდა HTTP, სტილისტიკა გადაცემის პროტოკოლი. HTTP არ არის პროგრამირების ენა. ეს უფრო ოქმს. ეს კომპლექტი კონვენციების, რომ ვებ ბრაუზერები და ვებ სერვერების გამოყენება როდესაც intercommunicating. და რას ნიშნავს ასეთია. ჰგავს რეალურ ცხოვრებაში, ჩვენ გვაქვს ამ კონვენციების აქ თუ დააკმაყოფილონ რამდენიმე ადამიანის პირველად, თუ არ იბადება humoring ჩემთვის აქ, მე შეიძლება ამუშავება თქვენ, ვთქვათ, "Hi, ჩემი სახელი არის დავით." >> Hi, დავით. ჩემი სახელი არის Sammy. "Hi, დავით. ჩემი სახელია Sammy". ახლა ჩვენ მხოლოდ ჩაბმულნი ამ სახის სულელური ადამიანის ოქმი სადაც მე არ ინიცირებული ოქმი, Sammy გამოეხმაურა, ჩვენ შეირყა ხელში, და გარიგება არის სრული. HTTP ძალიან გავს სულითა. როდესაც ბრაუზერში მოითხოვს www.facebook.com, რა თქვენი ბროუზერი ნამდვილი ჩანაფიქრია გაგრძელების მისი მხრივ, ასე ვთქვათ, სერვერზე და ის გაგზავნის მას გაგზავნა. და რომ გაგზავნა არის ტიპიურად მსგავსი რამ მისაღებად - რას გვინდა? - get me მთავარი გვერდი, რომელიც, როგორც წესი, აღნიშნა ერთი ირიბის დასასრულს URL. და მხოლოდ ასე რომ თქვენ იცით რა ენაზე მე საუბარი, მე ბრაუზერის ვაპირებ გითხრათ რომ მე ვსაუბრობ HTTP ვერსია 1.1, ასევე კარგი ღონისძიება, მე ვაპირებ გითხრათ, რომ მასპინძელი რომ მინდა მთავარი გვერდი არის facebook.com. როგორც წესი, ბრაუზერში, unbeknownst თქვენ, ადამიანური, აგზავნის ამ გაგზავნა მთელს ინტერნეტში, როდესაც თქვენ უბრალოდ აკრიფოთ www.facebook.com, შეიყვანეთ, თქვენს ბრაუზერში. და რას Facebook უპასუხოს? იგი პასუხობს ზოგიერთ მსგავსი ორიენტირებული cryptic დეტალები, არამედ ბევრად უფრო. ნება მომეცით წავიდეთ წინ, რათა Facebook-ის საწყისი გვერდი აქ. ეს არის ეკრანზე, რომ ყველაზე მეტად ჩვენს ალბათ არასოდეს თუ თქვენ სესიის ხანგრძლივობა ყველა დროის, მაგრამ ეს მართლაც მათი საწყისი გვერდი. თუ ჩვენ ამას ვაკეთებთ in Chrome შეამჩნევთ, რომ თქვენ შეგიძლიათ დახევის up ამ პატარა კონტექსტში მენიუები. გამოყენება Chrome, თუ არა on Mac OS, Windows, Linux, ან მოსწონს, თუ თქვენ კონტროლი ან მარცხენა დაწკაპუნებით, თქვენ შეგიძლიათ ჩვეულებრივ დახევის up მენიუ, რომ ასე გამოიყურება, სადაც რამდენიმე პარამეტრები დაელოდება, რომელთაგან ერთი გვერდის წყაროს ნახვა. თქვენ ასევე შეგიძლიათ ჩვეულებრივ მიიღოთ ამ ნივთებზე აპირებს წევრის მენიუ და გააღიზიანოს გარშემო. მაგალითად, აქ ქვეშ დასაწყისში, შემქმნელი არის იგივე. მე ვაპირებ წავიდეთ წინ და შეხედეთ გვერდის წყაროს ნახვა. რა დაინახავთ არის HTML, რომ ჩანაწერები არ გაუკეთებია წარმოადგინოს facebook.com. ეს სრული არეულობა, მაგრამ ჩვენ ვხედავთ, რომ ამ ხდის უფრო გრძნობა, სანამ ხანგრძლივი. თუმცა არის გარკვეული ნიმუშების აქ. ნება მომეცით გადახვევა ქვემოთ პერსონალის მოსწონს ეს. ეს არის რთული ადამიანის იკითხება, მაგრამ შეამჩნია, რომ არსებობს ამ მაგალითზე დახრილი ფრჩხილები ერთად საკვანძო სიტყვა, როგორიცაა ვარიანტი, საკვანძო სიტყვები, როგორიცაა ღირებულება, ზოგიერთი ციტირებული სტრიქონები. ეს არის სადაც, როდესაც თქვენ ხელი მოაწერა up for ძალიან პირველად, მითითებული რა თქვენი დაბადების წელი არის. რომ ჩამოსაშლელი მენიუს დაბადების წელია როგორღაც კოდირებით აქ ამ ენაზე მოუწოდა HTML, ჰიპერტექსტური მარკირებას ენა. სხვა სიტყვებით, როდესაც თქვენი ბრაუზერის ითხოვს ვებ გვერდზე, ეს მეტყველებს ამ კონვენციის მოუწოდა HTTP. მაგრამ რას facebook.com რეაგირება, რომ თხოვნა? იგი პასუხობს ზოგიერთ ამ cryptic შეტყობინებები, როგორც ჩვენ ვხედავთ მომენტში. მაგრამ ყველაზე მეტად მისი პასუხი არის სახით HTML, ჰიპერტექსტური მარკირებას ენა. სწორედ ფაქტობრივი ენაზე, რომელიც ვებ გვერდზე წერია. და რა ბრაუზერში ნამდვილად არ არის მაშინ, მიღებიდან, რომ რაღაც ასე გამოიყურება, ნათქვამია ეს ყველაზე ქვედა, მარცხნიდან მარჯვნივ, და ნებისმიერ დროს ის ხედავს ერთი ამ დახრილი ფრჩხილები მოჰყვა სიტყვით მოსწონს ვარიანტი, იგი აჩვენებს, რომ მარკირებას ენაზე შესაბამისი გზა. ამ შემთხვევაში, ეს იქნებოდა ცარიელია ჩამოსაშლელი მენიუს წლის. თუმცა ისევ და ისევ, ეს არის სრული არეულობა შევხედოთ. ეს არის არა იმიტომ, რომ Facebook დეველოპერებს მანიფესტი 0, 5 ამისთვის სტილი, მაგალითად. ეს იმიტომ რომ ყველაზე მეტად კოდი, რომ ისინი წერენ არის, ფაქტობრივად, დაწერილი ლამაზად, ასევე კომენტარი გააკეთა, ლამაზად indented, და მოსწონს, თუმცა, რა თქმა მანქანები, კომპიუტერები, ბრაუზერები ნამდვილად არ მისცეს Damn თუ არა თქვენი კოდი კარგად ე.წ.. და ფაქტობრივად, ეს სრულიად wasteful მოხვდა tab გასაღები ყველა იმ ჯერ და დააყენოს კომენტარები მთელი თქვენი კოდი და აირჩიოს ნამდვილად აღწერითი ცვლადი სახელები რადგან თუ ბრაუზერს არ აღელვებს, ყველა თქვენ აკეთებს დღის ბოლოს არის გაყვანაა bytes. გამოდის, რა საუკეთესო საიტებზე გააკეთოთ მიუხედავად იმისა წყაროს კოდი facebook.com, ამისთვის cs50.net და ყველა ამ სხვა საიტებზე ინტერნეტში ტიპიურად კარგად დაწერილი და ასევე კომენტარი გააკეთა and ლამაზად indented და ანალოგიური ჩვეულებრივ ადრე ნახვა ისიც გადატანა ინტერნეტი, კოდი minified, რის HTML და CSS - რაღაც ჩვენ მალე ვხედავ - JavaScript კოდი ჩვენ მალე დაინახავთ არის შეკუმშული, რის ხანგრძლივი ცვლადი სახელები გახდეს X და Y და Z, და ყველა რომ whitespace ხდის ყველაფერი ასე იკითხება არის ყველა დააგდეს დაშორებით, რადგან თუ ფიქრობთ ამის შესახებ და ამ გზით Facebook იღებს მილიარდი გვერდზე ჰიტები დღე - რაღაც Crazy მოსწონს, რომ - მერე რა, რომ პროგრამისტი უბრალოდ უნდა იყოს anal მოხვდა სივრცეში ბარი ერთი დამატებითი დრო მხოლოდ აბზაცის რამდენიმე ხაზი კოდი ოდესმე ასე უფრო მეტი? რა გავლენა თუ Facebook ინარჩუნებს, რომ whitespace ყველა bytes მათ გაგზავნას თავში ხალხს ინტერნეტში? Hitting სივრცეში ბარი ერთხელ გაძლევთ დამატებით byte თქვენს ფაილს. და თუ მილიარდი ადამიანი მაშინ გააგრძელოთ ჩამოტვირთოთ საწყისი გვერდი იმ დღეს, რამდენად მეტი მონაცემები არ თქვენ გადამდები ინტერნეტში? Gigabyte არა კარგი მიზეზი. და მასზე გაიცემა, ამისთვის ბევრი საიტებზე ეს არ არის ისეთი საკითხი scalable, მაგრამ Facebook, ამისთვის Google, ზოგიერთი ყველაზე პოპულარული საიტებზე არსებობს დიდი სტიმული ფინანსურად რათა თქვენი კოდი ჰგავს სასადილო ასე რომ თქვენ იყენებთ როგორც რამდენიმე ბაიტი რაც შეიძლება დამატებით შემდეგ compressing ეს გამოყენებით რაღაც zip, ალგორითმი მოუწოდა GZIP, რომ ბრაუზერს არ თქვენთვის ავტომატურად. მაგრამ ეს საშინელი. ჩვენ ამას არასდროს ვისწავლოთ შესახებ არაფერი სხვა ადამიანების საიტებზე და როგორ, რათა შეიმუშავონ ვებ გვერდები თუ ჩვენ უნდა შევხედოთ მას მოსწონს ეს. ასე რომ საბედნიეროდ, ბრაუზერები, როგორიცაა Chrome and IE და Firefox ამ დღეებში ჩვეულებრივ მოდის ერთად ჩამონტაჟებული დეველოპერი ინსტრუმენტები. ფაქტობრივად, თუ დაცემას აქ შეამოწმოს Element ან თუ მივდივარ სანახავად, დეველოპერი, და გადადით შემქმნელი ინსტრუმენტები მკაფიოდ, ფანჯრის ბოლოში ჩემი ეკრანზე ახლა pops up. ეს პატარა დაშინებას თავდაპირველად რადგან არსებობს უამრავი უცხო ჩანართების აქ, მაგრამ თუ დააწკაპუნეთ Elements ყველა გზა ქვედა მარცხენა, Chrome აშკარად საკმაოდ ჭკვიანი. იგი დარწმუნებულია, როგორ ინტერპრეტაცია ყველა ამ კოდექსის. და მერე რა Chrome არ არის ის ასუფთავებს up ყველა Facebook-ის HTML. მიუხედავად იმისა, რომ იქ არ არსებობს whitespace, იქ არ არსებობს წანაცვლება, ახლა შეამჩნია, რომ მე შემიძლია დაიწყოს ნავიგაცია ამ ვებ გვერდზე ყველა უფრო იერარქიულად. თურმე ყველა ვებ გვერდზე დაწერილი ენის მოუწოდა HTML5 უნდა დაიწყოს ამ, ამ DOCTYPE დეკლარაცია, ასე ვთქვათ: ეს ერთგვარი სინათლის და ნაცრისფერი არსებობს, მაგრამ ეს ძალიან პირველი ხაზი კოდი ამ ფაილის, და რომ მხოლოდ ეუბნება ბრაუზერის, "Hey, აქ მოდის ზოგიერთი HTML5. აქ მოდის ვებ გვერდზე." პირველი ღია bracket მიღმა რაც ხდება, რომ იყოს ეს საგანი, ღია bracket HTML tag, და შემდეგ თუ ჩაყვინთვის უფრო ღრმა წელს - ამ ისრებით სრულიად უაზრო; ისინი მხოლოდ პრეზენტაცია ის გულისთვის, ისინი არ არიან რეალურად ფაილი - შეამჩნევთ, რომ შიგნით Facebook-ის HTML tag, არაფერი რომ იწყება ღია bracket და შემდეგ სიტყვა ეწოდება ტეგით. ასე რომ შიგნით HTML tag აშკარად ხელმძღვანელი tag და სხეულის ტეგით. შიგნით ხელმძღვანელი tag ახლა არის მთელი სასადილო Facebook- რადგან მათ ბევრი მეტადატის და სხვა რამ მარკეტინგული და სარეკლამო. მაგრამ თუ ჩვენ გადახვევა down, down, down, down, ვნახოთ, სადაც ეს არის. აი ისიც. ეს ერთი არის მინიმუმ გარკვეულწილად ნაცნობი. ტიტული Facebook-ის საწყისი გვერდი, თუ ოდესმე გამოიყურებოდეს in tab თქვენს სათაური ბარი, არის კეთილი Facebook - შესვლა, რეგისტრაცია ან გაიგეთ მეტი. რაც თქვენ ამას ვხედავთ Chrome ტიტულის ბარი, და ასე ის წარმოდგენილი კოდი. თუ ჩვენ იგნორირება ყველაფერი თავის არეში, ყველაზე guts of ვებ გვერდზე არიან ორგანოს, და ეს თურმე Facebook კოდია აპირებს გამოიყურებოდეს უფრო რთული ვიდრე ყველაზე რამ ჩვენ წერენ თავდაპირველად მხოლოდ იმიტომ, რომ ის აშენდა up წლების განმავლობაში, მაგრამ არსებობს მთელი ბევრი Script tags, JavaScript კოდი, ხდის ნახვა ძალიან ინტერაქტიული: ხედავს სტატუსები მომენტალურად გამოყენებით ენებს, როგორიცაა JavaScript. არსებობს რაღაც მოუწოდა div, რომელიც სამმართველოს გვერდზე. მაგრამ სანამ არ მივიღებთ, რომ დეტალურად, მოდით ვცდილობთ დააშორებს და მოუთმენლად ზე მარტივი ვერსია Facebook 1.0, ასე ვთქვათ. აქ არის hello, სამყაროში ვებ გვერდები. მას რომ DOCTYPE დეკლარაციის ძალიან დაბრუნება რომელიც ცოტა განსხვავებული ყველაფერი დანარჩენი. არაფერი ჩვენ წერს ვებ გვერდზე აპირებს იწყება ამისთვის თამამი. ერთხელ, ამბავი იგივე: Hello, მძიმით, დაიწყოთ ამ გაბედულ, მაშინ მსოფლიოში იღებს დაბეჭდილი გაბედულ, და ეს იმას ნიშნავს, შეწყვიტოს ბეჭდვა ეს თამამი. ნება მომეცით წავიდეთ წინ და შენახვა ჩემი ფაილი, დავუბრუნდეთ Chrome, მე zoom მხოლოდ ასე ვხედავთ მას უკეთესი, და განაახლეთ, და თქვენ ნახავთ, რომ მსოფლიოში ახლა თამამი. ვებ ყველაფერი არის ბმულებს, მოდით წავიდეთ წინ და ამის გაკეთება: ჩემი საყვარელი საიტი, ასე ვთქვათ, youtube.com. შენახვა, განაახლეთ. Okay. არსებობს რამდენიმე პრობლემების ახლა გარდა hideousness of ნახვა. 1, მე საკმაოდ დარწმუნებული ვარ დააჭიროთ აქ. და მე. მე არა მხოლოდ 'Enter, მე ასევე indented, პრაქტიკოსი რა ჩვენ ქადაგებდა შესახებ სტილის, მაგრამ ჩემი არის სწორი შემდეგ მსოფლიოში. მაშ რატომ არის ეს? ბრაუზერები მხოლოდ რა თქვენ ვუთხრა უნდა გააკეთოს. მე არ განუცხადა ბრაუზერის, "Break ხაზები აქ. ჩადეთ პუნქტის შესვენება აქ." ამიტომ ბრაუზერის, არა აქვს მნიშვნელობა თუ მოხვდა დაბრუნება 30 ჯერ, ის მაინც გეგმავს ჩემი უფლება შემდეგ მსოფლიოში. რა ნამდვილად უნდა გავაკეთოთ აქ ამბობენ რაღაც
, ჩადეთ ხაზი შესვენება. და ფაქტობრივად, ხაზი შესვენების არის სახის უცნაური რამ იმიტომ, რომ თქვენ ვერ დაიწყება გადასვლის მეორე ხაზი, მაშინ რაღაც, და შემდეგ შეწყვიტოს გადავდივართ ახალ ხაზზე. ეს ერთგვარი ატომური ოპერაცია. თქვენ არც ამის გაკეთება, ან თქვენ არ. თქვენ დააჭიროთ ან თქვენ არ. ამიტომ br არის ცოტა სხვადასხვა tag, და ა.შ. მე უნდა დასალაგებლად ორივე ღია და ვხურავთ მას ერთდროულად. სინტაქსი, რომ ეს. ტექნიკურად, თქვენ შეეძლო მსგავსი რამ ზოგიერთ ვერსიები HTML, მაგრამ ეს მხოლოდ სულელური, რადგან იქ არ არის მიზეზი, რომ დავიწყოთ და შეწყვიტოს რაღაც თუ შეგიძლიათ ნაცვლად გავაკეთებთ ერთდროულად. გააცნობიეროს, რომ HTML5 არ მკაცრად მოითხოვს ამ ხაზი, ასე რომ თქვენ დაინახავთ სახელმძღვანელოების და ინტერნეტ რესურსების, რომ არ გააჩნიათ, მაგრამ კარგი ღონისძიება მოდით პრაქტიკაში სიმეტრია, რომ ჩვენ ვნახეთ დღემდე. ეს ნიშნავს, რომ აქვს არის ორივე გაიხსნა და დაიხურა. ახლა ნება მომეცით გადარჩენა ჩემი ფაილი, დაბრუნდეს აქ. Okay, ამიტომ დაწყებული გამოიყურებოდეს უკეთესად, გარდა ვებ ვიცი არის სახის clickable, და ჯერ youtube აქ არ ჩანს გამოიწვიოს არაფერი. ეს იმიტომ, რომ მიუხედავად იმისა, რომ ჰგავს ლინკები, ბრაუზერს არ ვიცით, რომ თავისთავად, ასე რომ მე უნდა ვუთხრათ ბრაუზერის, რომ ეს არის ლინკი. გზა ამის გამოყენება წამყვანმა tag: და ნება მომეცით გადავიდეს ამ ახალ ხაზზე მხოლოდ ამიტომ ცოტა მეტი იკითხება, და მე shrink შრიფტის ზომა. ვარ გაკეთდეს არავის გაუკეთებია? არა, იქნება ეს dichotomy. ეს ტეგი, წამყვანმა tag, ამჯამად მართლაც მიიღოს ატრიბუტი, რაც modifies მისი საქციელი, და ღირებულება, რომ ატრიბუტი არის აშკარად YouTube-ის მისამართი. მაგრამ შეამჩნევს dichotomy ის არის, რომ მხოლოდ იმიტომ, რომ URL თქვენ აპირებს, ეს არ ნიშნავს, რომ უნდა იყოს სიტყვა, რომელიც თქვენ ხაზს უსვამს და მიღების ლინკები. პირიქით, რომ შეიძლება მსგავსი რამ. ასე უნდა ვთქვა, შეწყვიტოს მიღების ამ სიტყვის ჰიპერბმულის გამოყენებით მჭიდრო წამყვანმა ტეგით. გაითვალისწინეთ მე არ აკეთებენ. 1, ეს მხოლოდ ნარჩენები ყველას დრო და ეს საჭირო არ არის. დახუროს tag, თქვენ მხოლოდ ნახსენები სახელწოდება tag ერთხელ. თქვენ არ უხსენებია რომელიმე ატრიბუტს. მოდით გადარჩენა, რომ დაბრუნდეს. Okay, voila, ახლა ლურჯი და hyperlinked. თუ მე დაწკაპეთ იგი, მე მართლაც წავიდეს YouTube. ასე რომ მიუხედავად იმისა, რომ ჩემი ვებ გვერდზე არ არის ინტერნეტში, ეს არის მინიმუმ HTML, და თუ ჩვენ დავუშვებთ ინტერნეტ დაეწიოს, რომ ჩვენ ფაქტობრივად დასრულდება მდე აქ youtube.com. და შემიძლია უკან და აქ არის ჩემი ვებ გვერდი. მაგრამ შეამჩნია ეს. თუ თქვენ ოდესმე მიღებული spam ან ფიშინგი თავდასხმა, ახლა თქვენ გაქვთ უნარი შემდეგ მხოლოდ ხუთი წუთის იგივეს. ჩვენ შეგვიძლია წავიდეთ აქ და რაღაც მოსწონს www.badguy.com ან რასაც sketchy ნახვა არის, და შემდეგ შეიძლება ითქვას შეამოწმოს თქვენი PayPal ანგარიშზე. [სიცილის] და ახლა ამ აპირებს მისვლას badguy.com, რომელიც მე არ ვაპირებ დააჭირეთ რადგან არ ვიცი სად მივყავართ. [სიცილის] მაგრამ ჩვენ ახლა აქვს უნარი რეალურად დასრულდება up there. ასე რომ ჩვენ ნამდვილად მხოლოდ დაწყებული გადასაფხეკი ზედაპირზე. ჩვენ არ პროგრამირების თავისთავად; ჩვენ წერილობით მარკირებას ენაზე. მაგრამ როგორც კი ჩვენ გარშემო ჩვენი ლექსიკა in HTML, ჩვენ წარმოგიდგინოთ PHP, ფაქტობრივი პროგრამირების ენა რომელიც საშუალებას მოგვცემს გენერირება HTML ავტომატურად, გამოიმუშავებენ CSS ავტომატურად, ასე რომ, ჩვენ დავიწყებთ ოთხშაბათს განსახორციელებლად, ვთქვათ, ჩვენი საკუთარი საძიებო სისტემა და უფრო მეტი. მაგრამ უფრო, რომ რამდენიმე დღის განმავლობაში. ჩვენ დავინახავთ, თქვენ მაშინ. [CS50.TV]