[Powered by Google Translate] [7 सप्ताह] [डेविड जे Malan हार्वर्ड विश्वविद्यालय] [यह CS50 है. - CS50.TV] सही सभी. वापस स्वागत है. इस CS50 है, और यह 7 सप्ताह की शुरुआत है. छोटे घोषणाओं के एक जोड़े: Pset5 अब प्रगति में है, या जल्दी ही होगा, और मुझे कहते हैं, बहुत ईमानदारी से, यह अधिक चुनौतीपूर्ण के बीच होते हैं पाठ्यक्रम की समस्या सेट की है, तो मुझे उल्लेख अब इस इतना है कि इस सप्ताह से अधिक कभी आप जब तक नहीं इंतजार नहीं करते हैं, कहते हैं, बुधवार रात या गुरुवार रात अंदर गोता यह निश्चित रूप से एक दिलचस्प pset है. हमें लगता है कि यह मजेदार है. यदि आप वास्तव में यह पूरी तरह से सही हो और फिर तथाकथित बिग बोर्ड को चुनौती दे सकता है, आप एक कोर्स के कर्मचारियों की कुछ के साथ दिमाग मैच का अवसर होगा और अपने सहपाठियों के कुछ. बिग बोर्ड क्या है एक बार आप अपने काम के जादू चेकर है, आप एक कमांड चलाने के बाद cs50.net करने के लिए जाने के लिए सक्षम हो जाएगा, विशुद्ध रूप में चुनते हैं, और फिर समय की राशि है और राम की राशि और अधिक आप अपने कार्यान्वयन में प्रयोग किया जाता है कि पाठ्यक्रम के मुख पृष्ठ पर यहाँ प्रदर्शित किया जाएगा. तुम नोटिस हूँ कि यहाँ इन लोगों की एक पूरी गुच्छा कर्मचारियों के रूप में सूचीबद्ध कर रहे हैं के बाद सप्ताहांत में, स्टाफ सोचा था कि यह करने के लिए एक दूसरे से आगे बढ़ना की कोशिश करने के लिए मजेदार होगा. तो पता है कि यहाँ लक्ष्य करने के लिए कर्मचारियों को आगे बढ़ना नहीं है. मैं भी केवल 13 नंबर पर यहाँ हूँ. विशुद्ध रूप में चुनते हैं, लेकिन यह देखने का अवसर है कैसे बस थोड़ा रैम और कैसे कुछ सीपीयू सेकंड आप विज़ावी अपने सहपाठियों के कुछ का उपयोग कर सकते हैं. और मुझे लगता है कि केविन माइकल Schmid मानता हूँ, वर्तमान में नंबर एक TFS के रूप में 1 की स्थिति में, यह एक कार्यान्वयन है कि हम संभव फोन नहीं है यह देखते हुए कि वह लोड करने के लिए लगभग 0 रैम और लगभग 0 सेकंड का उपयोग कर रहा है. तो हम केविन ऑफ़लाइन का ख्याल रखना होगा. [हँसी] वहाँ कुछ कौशल है कि केविन का परीक्षण करने के लिए डाल रहा है यहाँ हैं. बातें हमने सोचा कि हम करना चाहते हैं में से एक भी अब CS50x प्रगति में एक सप्ताह है, और तुम लोगों के रूप में ज्यादा के इस प्रयोग के रूप में उन छात्रों का एक हिस्सा हैं. हम उन्हें उनके pset0 के भाग के रूप में कहा गया है, जो इसी तरह एक स्क्रैच परियोजना प्रस्तुत उनके हित - एक खेल, कला का एक इंटरैक्टिव टुकड़ा, एक एनीमेशन, या जैसे - एक 1 - 2 मिनट वीडियो, अगर वे पसंद है, दुनिया को हैलो कह रही है और जो वे वास्तव में हैं. मैंने सोचा कि मैं तुम बस के साथ वीडियो की एक जोड़ी है कि इस प्रकार अब तक प्रस्तुत किया गया है का हिस्सा था क्योंकि हमारे लिए, कर्मचारियों पर कम से कम, यह वास्तव में रोमांचक कर दिया गया है और प्रेरणादायक सभी दुनिया भर से इन लोगों को देखते हैं - दुनिया भर के देशों - ट्यूनिंग, सब बातों के बारे में इंटरनेट पर एक कंप्यूटर विज्ञान पाठ्यक्रम, चाहे वह है क्योंकि वे अपने स्वयं के अध्ययन को जारी रखना चाहते हैं, वे करने के लिए एक नई दिशा में अपने करियर को ले जाना चाहता हूँ, वे अपने स्वयं के ज्ञान में अंतराल में भरने के लिए चाहते हैं, एक ही कारण है कि तुम लोगों को शायद यहाँ किया गया है में से कुछ तो. तो मैं तुम्हें एक ऐसे छात्र यहाँ दे. तुम मात्रा सिर्फ एक छोटा सा उठा सकता है. यहाँ हमारे छात्र एक मिनट प्रस्तुतियाँ के एक है. हैलो, दुनिया. मैं यहाँ मैलेगा, स्पेन में औद्योगिक इंजीनियरिंग के एक छात्र हूँ. मैं इस ऑनलाइन पाठ्यक्रम के बारे में उत्साहित हूँ क्योंकि मैं कंप्यूटर विज्ञान से प्यार है, मैं वास्तव में करते हैं, और मैं वास्तव में खुशी है कि मैं यह पता लगाने के लिए मिलता है. और सच तो यह है कि मैं तुम सब लोग एक ही सीख सकते हैं लेकिन हार्वर्ड में होने के बजाय मैं मैलेगा में हूँ, कैसे भयानक है कि? खैर, मैं फर्नांडो हूँ, और इस CS50 है. तुम लोगों को देखें. [हँसी] एक और क्लिप हम विशेष रूप से पसंद है, तो आप पाएंगे कि इस सज्जन अंग्रेजी इतनी मजबूत नहीं है. ऐसा लगता है कि वह यह मशीन अनुवाद था तो खुद को अनुवाद एक बिट अपूर्ण हैं, लेकिन यह हमारी पसंदीदा में से एक इस प्रकार अब तक के रूप में अच्छी तरह से किया गया था. [♪ ♪] हैलो, दुनिया. [जापानी में बोल] [मैं जापानी में स्वागत है क्योंकि मेरी अंग्रेजी बहुत अविश्वसनीय है.] [मैं तुम्हें करने के लिए संदेश दिया है Gifu, जापान के शहर से. [मैं 20 साल में पहली बार के लिए एक छात्र हो सकता है, के रूप में देखा जा सकता है.] [मैं हार्वर्ड विश्वविद्यालय बहुत आभारी हूँ जिन्होंने मुझे इस अवसर और EDX दिया.] [गोल्फ एक गिटार है और मेरा पसंदीदा बात चल.] [हँसी] [♪ ♪] [आप क्यों सोचते हैं कि मैं एक cs50x में भाग लेने की कोशिश कर रहा था.] [हार्वर्ड विश्वविद्यालय, यह मेरी लालसा है.] [खासकर अगर मैं कर रहा हूँ दूर उपस्थिति जापान में रहते थे.] [मैं तुरंत जैसे जब. EDX के अस्तित्व के बारे में पता करने की कोशिश करना चाहता था] [आपको ऐसा लगता है मैं सीखने की उम्र से संबंधित नहीं करते मत] CS50 [मेरी लालसा है. Kazu मेरा नाम है, और इस CS50 है.] [♪ ♪] [वाहवाही और जयकार] हमारा एक और पसंदीदा यहाँ किसी से प्रस्तुत किया गया था. [♪ ♪] [Malan] गूगल यह अगर आप इस meme के साथ अपरिचित हैं. और फिर अंत में, दूसरों है कि तैनात है कि शायद आराध्य पुरस्कार जीतने के एक जोड़े. [छात्रों] ओ! >> [Malan] हम सुनना पड़ेगा. यह कम है, तो ध्यान से सुनो. [महिला स्पीकर] आपका नाम क्या है? >> Louie. [महिला स्पीकर] यह क्या है? >> [गिगल्स] CS50. [हँसी] [Malan] वह दो था, हालांकि लेता है. यहाँ हम चले, पिछले. मेरा नाम Louie है, और इस CS50 है. [हँसी] यह तो CS50x है. आप में से उन लोगों के लिए धन्यवाद, जबकि घर पर साथ निम्नलिखित जो इस प्रकार दूर किया भाग लेना है. आज, हम डेटा संरचनाओं की हमारी चर्चा समाप्त, कम से कम कुछ सबसे मौलिक, और फिर हम HTML और वेब प्रोग्रामिंग के बारे में हमारी बातचीत जारी है. दरअसल, हम पिछले कुछ सात सप्ताह बिताया है प्रोग्रामिंग की बुनियादी बातों पर देख - एल्गोरिदम, डाटा संरचनाओं, और जैसे - और सी, के रूप में आप इस प्रकार अब तक का अनुभव हो सकता है, जरूरी भाषा का सबसे सुलभ नहीं है जिसके साथ उन विचारों के कुछ को लागू. और इसलिए इस सप्ताह और अगले सप्ताह के शुरू और फिर निम्नलिखित, हम अंत में सी, जो आम तौर पर एक काफी कम स्तर की भाषा के रूप में जाना जाता है से संक्रमण के लिए सक्षम होगा, उन्हें PHP, जावास्क्रिप्ट के बीच उच्च स्तर, और चीजों की तरह, जो हम एक ही सबक है कि हम पिछले कुछ हफ्तों में सीखा है पर आकर्षित देखेंगे, लेकिन आप पाएंगे के कि arrays और हैश तालिकाएँ तरह बातें की घोषणा और खोज और छँटाई इतना आसान हो गया है क्योंकि खुद भाषाओं हम का उपयोग शुरू करेंगे अधिक शक्तिशाली हो जाएगा. लेकिन पहले, पेड़ों की एक आवेदन. यह बहुत आम है इन दिनों करने के लिए जानकारी सेक करने की आवश्यकता है. किस संदर्भ में आप डिजिटल जानकारी के कुछ प्रकार सेक करना चाहते है? हाँ. >> [छात्र] जब आप इसे वेब पर भेजने की जरूरत है. हाँ, जब आप वेब पर कुछ भेजना चाहते हैं. यदि आप एक बड़ी फ़ाइल डाउनलोड करना चाहते हैं, यह दूसरे छोर पर किसी को अगर आदर्श है उस फ़ाइल संकुचित एक ज़िप प्रारूप या उस तरह कुछ का उपयोग इतनी है कि आप कम बिट्स से अन्यथा प्रेषित किया जा सकता है भेज रहे हैं. तो आप कैसे जानकारी सेक करते हैं? यह कम बिट्स से डिफ़ॉल्ट रूप से आवश्यक हैं का उपयोग करने के लिए नीचे फोड़े. लेकिन इस एक जिज्ञासु बात की तरह है, क्योंकि 0 और 1 सप्ताह के लिए वापस लगता है जब हम ASCII और बाइनरी के बारे में बात की थी और हम के बारे में विशेष रूप से ASCII बात वर्णमाला के अक्षरों का प्रतिनिधित्व करने के लिए 8 बिट का उपयोग के रूप में तो यह है कि पत्र 65 द्वारा प्रतिनिधित्व किया है, एक संख्या 97 है, लोअरकेस और फिर भी आप 65 या 97 का प्रतिनिधित्व करते हैं, आप 7 या 8 बिट का उपयोग कर रहे हैं. लेकिन पकड़ है कि वहाँ अंग्रेजी वर्णमाला में कुछ पत्र हैं है कि दूसरों के रूप में लोकप्रिय नहीं हैं. Z कि सभी लोकप्रिय नहीं है क्यू कि सभी लोकप्रिय नहीं है, लेकिन एक और ई लोकप्रिय सुपर रहे हैं. और अभी तक इन पत्रों में से सभी के लिए, डिफ़ॉल्ट रूप से दुनिया बिट्स की एक ही नंबर का उपयोग करता है, सिर्फ 8. तो यह नहीं हर पत्र के लिए 8 बिट का उपयोग करने के बजाय अगर होशियार हो गया होता, भी सबसे कभी कभी क्यू और जेड की तरह प्रयोग किया जाता है, क्या हुआ अगर हम एक और ई और एस और सबसे लोकप्रिय पत्र के लिए कम बिट्स का इस्तेमाल किया और कम लोकप्रिय अक्षरों के लिए अधिक बिट्स का इस्तेमाल किया है, आम मामले के लिए चलो अनुकूलन विचार किया जा रहा है, जो कंप्यूटर विज्ञान के क्षेत्र में अनुकूलन करने के लिए क्या करने के लिए सबसे अधिक होने जा रहा है की कोशिश कर के एक विषय है और चीजें हैं जो, हाँ, हो सकता है, हो सकता है पर एक छोटे से अधिक समय, एक छोटे से अधिक स्थान खर्च लेकिन जरूरी नहीं के रूप में अक्सर. तो चलो एक उदाहरण लेते हैं. मान लीजिए कि हम जानकारी काफी कुशलता से सांकेतिक शब्दों में बदलना चाहते हैं. तुम बड़े हो गए हो सकता है मोर्स कोड के बारे में कुछ जानने, और बाधाओं रहे हैं आप वास्तविक कोड नहीं पता था, लेकिन आपको याद हो सकता है कि यह कम से कम डॉट्स और डैश की इस श्रृंखला है. उदाहरण के लिए, ई - यह एक काफी कुशल कोडिंग, और सूचना है कि सबसे लोकप्रिय पत्र - beeps के कम से कम उपयोग करता है. मोर्स कोड बीप - बीप - बीप - बीप - बीप - बीप के बारे में और टन पकड़े हुए है या तो समय या समय की लंबी अवधि से कम अवधि के लिए. ई, के रूप में डॉट द्वारा चिह्नित, एक सुपर छोटी बीप, बस बीप है, और है कि ई. का प्रतिनिधित्व करेंगे इसके विपरीत, टी एक लंबी बीप बीप की तरह [ध्वनि prolongs] और कि टी. का प्रतिनिधित्व करेंगे लेकिन यह है कि अभी भी बहुत कम है क्योंकि इसके विपरीत, यदि आप Z को देखो, Z व्यक्त बीप बीप [अब ध्वनि], बीप, बीप [कम ध्वनि] जाना होगा. तो यह रह गया है क्योंकि यह कम आम है. लेकिन यहाँ पकड़ लिया है कि मोर्स कोड एक बिट त्रुटिपूर्ण है में है कि यह तुरंत decodable नहीं है. उदाहरण के लिए, मान लीजिए कि आप तार बीप की कुछ अंत पर सुना [लघु], बीप [लंबे समय]. क्या संदेश मैं सिर्फ प्राप्त किया? एक डॉट और एक पानी का छींटा. कि क्या दर्शाता है? [छात्र] ए >> [Malan] हो सकता है. यह भी टी. द्वारा पीछा ई हो सकता है दूसरे शब्दों में, मोर्स कोड, हालांकि यह कोने मामले के अनुकूलन के इस सिद्धांत का लाभ उठाता है, यह ही तत्काल decodability को उधार नहीं करता. यही कारण है, मानव जो सुनने या प्राप्त इन डॉट्स और डैश किसी तरह बाहर निकालने जहां टूट अक्षरों के बीच हैं, क्योंकि अगर आप जहां उन टूट रहे हैं पता नहीं है, तो आप एट या ठीक इसके विपरीत के लिए भ्रमित हो सकता है. तो आप क्या कर सकते हैं? मोर्स कोड में आप सिर्फ प्रत्येक पत्र के बीच में रोक सकता है. लेकिन pausing बातें तेजी से ऊपर की पूरी बात करने के लिए काउंटर की तरह है. तो क्या बजाय अगर हम एक कोड के साथ आया था, जहां इस बुरी स्थिति में नहीं था ई एक उपसर्ग जहां है, उदाहरण के लिए एक - दूसरे शब्दों में, हमें यकीन है कि कर सकता है कि पैटर्न अभी भी लोकप्रिय पत्र के लिए कम कर रहे हैं तो कम लोकप्रिय पत्र के लिए लंबे समय से है, लेकिन वहाँ कोई संभव भ्रम है? Huffman के नाम से एक आदमी साल पहले इस Huffman कोडन नामक योजना का आविष्कार कि वास्तव में डेटा संरचनाओं के हम समय का एक सा खर्च किया है के बारे में बात कर एक leverages यह पिछले सप्ताह, पेड़, द्विआधारी पेड़ विशेष रूप से की है कि - एक द्विआधारी पेड़ जिसका अर्थ है कि यह कोई 2 बच्चों की तुलना में अधिक है. यह शायद एक बच्चे को छोड़ दिया है, शायद एक सही बच्चे, और यह बात है. तो सिर्फ चर्चा के लिए लगता है कि किसी को एक संदेश भेजना चाहता है कि इस तरह दिखता है. यह पूरी तरह बकवास है, लेकिन यह रूप से बना है, बी, सी, डी एस, और Es. और अगर आप वास्तव में सभी के रूप में की गिनती, बी, सी, डी एस, और Es और फिर पत्रों की कुल संख्या से विभाजित हैं, इस छोटे से यहाँ चार्ट का कहना है कि पत्र की 45% तों कर रहे हैं, 20% के रूप में कर रहे हैं, 10%, बी, और बहुत आगे है. तो दूसरे शब्दों में, मान लें कि उद्धृत वहाँ स्ट्रिंग बस कुछ संदेश है कि आप के लिए भेजना चाहते है. यह बकवास हो सिर्फ इतना होता है कि हम संभव के रूप में कुछ पत्र के रूप में उपयोग कर सकते हैं, लेकिन यह वास्तव में मामला है कि ई सबसे लोकप्रिय बनी हुई है, और बी और सी लोकप्रिय कम से कम, वर्णमाला के इन 5 पत्र के कम से कम. तो हम एक एन्कोडिंग के साथ आने के बारे में कैसे जा सकते हैं, एक द्विआधारी कूटबन्धन, 0s और 1s के इन पत्रों में से प्रत्येक के लिए एक पैटर्न इस तरह है कि ई एक छोटी पैटर्न है और शायद बी और सी अब थोड़ा पैटर्न में, फिर से विचार किया जा रहा है कि हम कम बिट्स समय के सबसे अधिक उपयोग करना चाहते हैं और अधिक बिट्स केवल एक समय में एक बार. Huffman कोडिंग के अनुसार, आप पेड़ों की एक जंगल बना सकते हैं. यहाँ एक कहानी लाइन की तरह है कि और भी उन्हें निर्माण की प्रक्रिया के पेड़ शामिल है. शुरू करते हैं. मैं प्रस्ताव करता हूं कि आप इस जंगल के साथ शुरू करते हैं, तो 5 पेड़ों की बात करने के लिए, जिनमें से प्रत्येक एक बहुत बेवकूफ पेड़ है. पेड़ सिर्फ एक नोड है, के रूप में एक चक्र से यहाँ का प्रतिनिधित्व से बना है. तो इन बातों के प्रत्येक एक सी struct हो सकता है और सी struct के अंदर एक नाव आवृत्ति गणना का प्रतिनिधित्व हो सकता है और तब शायद एक पत्र का प्रतिनिधित्व चार. तो सिर्फ किसी भी पुराने सी struct के रूप में इन नोड्स के बारे में सोचना है, लेकिन अब के लिए, उच्च स्तर है. यह 5 पेड़, जो केवल एक नोड में से प्रत्येक का एक जंगल है. Huffman प्रस्तावित यह है कि हम उन पेड़ों गठबंधन शुरू कि थोड़ा बड़ा पेड़ में छोटी आवृत्ति मायने रखता है उन्हें एक नया रूट नोड के साथ जोड़ने के द्वारा. तो यहाँ पत्र के बीच सूचना है कि सुविधा के लिए मैं उन्हें सही करने के लिए बाएँ से हल किया है, हालांकि यह है कि सख्ती से आवश्यक है, और नोटिस नहीं है कि छोटी से छोटी नोड्स वर्तमान में 10% और 10% हैं. तो Huffman का प्रस्ताव किया है कि हम एक नया पेड़ में उन 2 छोटी नोड्स मर्ज एक नई माता पिता के नोड शुरू करने और फिर से है कि माता पिता एक बाएँ बच्चे और एक सही बच्चे दे जहां बी मनमाने ढंग से छोड़ दिया है और सी मनमाने ढंग से सही है. और फिर Huffman आगे का प्रस्ताव है कि चलो अब बस छोड़ दिया बच्चे के बारे में सोच इन पेड़ों में से एक के रूप में हमेशा 0 द्वारा प्रतिनिधित्व किया जा रहा है और सही बच्चे को हमेशा के रूप में एक संख्या से प्रतिनिधित्व किया जा रहा है. यह अगर तुम उन्हें इतने लंबे समय के रूप में आप लगातार हो फ्लिप कोई फर्क नहीं पड़ता. तो अब हम इस जंगल में चार पेड़ है. और मैं कहना है कि चार क्योंकि अब बाईं तरफ पेड़ - और यह इतना समझ में आता है कि यह इस तरह बढ़ता में एक पेड़ नहीं है, यह एक परिवार के पेड़ जहां अब 0.2 दो बच्चों के माता पिता की तरह है और अधिक की तरह है - सूचना है कि माता - पिता में हम 0.2 खींचा है. हम दो बच्चों की आवृत्ति की गिनती जोड़ दिया है और नए नोड कुल योग दिया. तो अब हम सिर्फ इस प्रक्रिया को दोहराने. दो छोटी नोड्स और फिर उन्हें एक नया पेड़ में शामिल और फिर आगे की प्रक्रिया को दोहराएँ. अभी हम कुछ उम्मीदवारों, 20%, 15%, और दूसरा 20% है. इस मामले में, हम करने के लिए टाई तोड़ने के लिए है. हम यह मनमाने ढंग से कर सकते हैं. हम सिर्फ यह लगातार करना चाहिए. इस मामले में, मैं मनमाने ढंग से बाईं तरफ एक साथ जाना होगा, और अब मैं 20% और 15% से मिलने के लिए मुझे एक नए माता पिता के 35% बुलाया दे, छोड़ दिया जिसका बच्चे 0, जिसका सही बच्चे 1 है, और अब हम सिर्फ जंगल में तीन पेड़ है. आप शायद देखने के लिए जहां यह जा रहा है कर सकते हैं. अगर हम इस एक जोड़े को और अधिक बार दोहराने के लिए, हम सिर्फ एक बड़ा पेड़ के लिए जा रहे हैं, के सभी जिसके किनारों 0s और 1s के साथ लेबल कर रहे हैं. चलो इसे फिर से करना. 35% है कि पेड़ की जड़ है. 20% और 45% है, तो हम करने के लिए 35% और 20% मर्ज करने के लिए जा रहे हैं. अब हम इस पेड़ यहाँ है. हम उन लोगों के साथ जोड़ने के लिए, हम 55% है. अब वहाँ जंगल में केवल दो पेड़ों है. हम इस एक अंतिम समय करते हैं, और उम्मीद है कि गणितीय सभी आवृत्तियों को जोड़ने क्योंकि वे के बाद से हम से उन्हें computed 100% तक जोड़ने के मिल जाने चाहिए. और अब हम एक पेड़ है. तो यह एक Huffman कोडन पेड़ है. यह किस तरह का एक समय लिया मौखिक रूप से करने के लिए वहाँ पाने, लेकिन वास्तविकता पाश के लिए एक साथ है या एक पुनरावर्ती समारोह के साथ, आप इस बात को बहुत तेजी से का निर्माण कर सकता है. तो अब हम एक नए नोड है, और इन आंतरिक नोड्स के सभी malloc'd किया गया है, मुमकिन है, जिस तरह से अपने साथ. अब तो इस पेड़ के शीर्ष पर हम 100% है, लेकिन अब नोटिस हम एक रास्ता है इस नए महान महान महान grandparent से महान महान महान पोते के सभी के लिए नीचे सभी तरह पत्तियों के सभी के लिए,. हम अब करने जा रहे हैं कि क्या का प्रस्ताव क्रम में अक्षर E का प्रतिनिधित्व करने के लिए है, हम बस 1 नंबर का उपयोग करेगा. क्यों? क्योंकि अगर हम अंतिम जड़ से ई के रूप में जाना जाता पत्ते को इस पेड़ के नीचे पार, हम सिर्फ एक किनारे, दाएँ किनारे का पालन करें, और है कि इस पाठ्यक्रम के शीर्ष सही 1 में लेबल. तो यहाँ Huffman के लिए निहितार्थ था कि बाइनरी में ई कूटबन्धन सिर्फ 1 होगा. और कहा कि बहुत बहुत कुशल है. उस की तुलना में किसी भी छोटे वास्तव में नहीं मिल सकता है. इसके विपरीत, एक के लिए प्रतिनिधित्व किया जा सकता है अगर आप तर्क का पालन हो रहा है, बिट्स के बजाय पैटर्न क्या है? 01. तो एक करने के लिए प्राप्त करने के लिए, हम रूट पर शुरू और हम जाना छोड़ दिया और फिर हम सही जाओ, जिसका मतलब है कि हम एक 0 पीछा किया और फिर एक 1. तो हम 0 और 1 पैटर्न के साथ एक पत्र का प्रतिनिधित्व करेगा. और अब हम पहले से ही तत्काल decodability की एक संपत्ति है नोटिस कि हम मोर्स कोड में नहीं था. हालांकि इन दोनों पैटर्न के बहुत कम कर रहे हैं - ई 1 बिट, 2 बिट्स है - सूचना है कि वे एक या एक से दूसरे भ्रमित नहीं कर सकते हैं, क्योंकि अगर आप एक 1 यह देखने के लिए एक ई हो, अगर आप देख मिल गया है तो एक 0 1 यह स्पष्ट रूप से एक ए हो गया है इसी तरह, डी क्या है? 001. क्या सी है? 0001. और बी क्या है? 0000. और फिर, क्योंकि हम के बारे में परवाह पत्र के सभी पत्ते और उनमें से कोई भी जड़ से पत्ती के लिए रास्ते में बिचौलियों की तरह कर रहे हैं, वहाँ 2 'पत्र के विभिन्न संकेत लिपियां conflating का कोई खतरा नहीं है क्योंकि इन सा पैटर्न के सभी नियतात्मक हैं. 0000 बी हमेशा होगा वहाँ कोई कहीं बीच में नोड है कि आप एक दूसरे के लिए पत्र भ्रमित हो सकता है. तो यहाँ निहितार्थ क्या है? सबसे लोकप्रिय पत्र - इस मामले में ई - कम से कम एन्कोडिंग मिल गया है, कम से कम अगले एन्कोडिंग मिल गया है, और बी और सी, जो हम पहले से ही मिल जाने के कम से कम लोकप्रिय थे तरह से जानता था 10% आवृत्ति प्रत्येक में, वे सबसे लंबे समय तक कूटबन्धन मिल गया है. और इसलिए अब इस का मतलब क्या है कि यदि आप के लिए एक संदेश है कि संकुचित है भेजना चाहते हैं इंटरनेट पर या एक ईमेल या ऐसे में, मानक आस्की का उपयोग करने के बजाय, आप एक Huffman कूट संदेश भेज सकते हैं अगर आप अक्षर E भेजना चाहते हैं, जिससे आप सिर्फ एक एकल बिट भेजने. यदि आप एक एक को भेजना चाहते हैं, तो आप 2 बिट्स, 01 के बजाय 8 बिट भेजने भेजने के लिए एक और 8 बिट और 8 बिट और इतना आगे द्वारा पीछा द्वारा पीछा किया. लेकिन वहाँ एक पकड़ लिया है. यह करने के लिए पर्याप्त सिर्फ इस पेड़ का निर्माण और तो ऐलिस से बॉब भेजने शुरू नहीं है कम बिट पैटर्न, ASCII से तार, क्योंकि ऐलिस भी क्या बॉब को सूचित किया है अगर बॉब के लिए उसे संकुचित संदेश पढ़ने में सक्षम होने जा रहा है? [अश्राव्य छात्र प्रतिक्रिया] >> वह क्या है? [अश्राव्य छात्र प्रतिक्रिया] >> पेड़ क्या है. भी विशेष रूप से या उन encodings क्या कर रहे हैं, खासकर के बाद से इस कहानी के दौरान हम एक बिंदु पर एक निर्णय फोन बनाया है. याद रखें कि हम 2 अलग नोड्स के बीच 20% मनमाने ढंग से लेने के लिए किया था? इसलिए यह मामला नहीं है कि बॉब, प्राप्तकर्ता, सिर्फ अपने दम पर पेड़ फिर से संगठित कर सकते हैं क्योंकि हो सकता है कि वह पेड़ कभी तो थोड़ा ऐलिस से अलग पैदा करेगा. इसके अलावा, बॉब भी मूल संदेश क्या है पता नहीं है क्योंकि केवल एक चीज ऐलिस उसे भेज रहा है, निश्चित रूप से, संकुचित संदेश है. तो इस तरह से संपीड़न के साथ पकड़ रही है कि, हाँ, ऐलिस बिट्स की एक पूरी बहुत कुछ बचा सकते हैं के लिए एक ई के लिए 1 01 भेजने और इसलिए आगे से, लेकिन वह भी बॉब सूचित मानचित्रण पत्र और बिट्स के बीच क्या है क्योंकि वे स्पष्ट रूप ASCII बस अब और भरोसा नहीं अगर हम ASCII का उपयोग नहीं कर रहे हैं कर सकते हैं. तो वह या तो उसे पेड़ किसी भी तरह भेज सकते हैं - यह लिख, यह बाइनरी डेटा या ऐसा कुछ के रूप में दुकान - या सिर्फ उसे भेजने के एक छोटे से धोखा शीट, एक Excel फ़ाइल, कि मैपिंग से पता चलता है. तो संपीड़न के प्रभाव को सच मान लिया गया है कि संदेश भेज रहे हैं कि आप बहुत बड़ा कर रहे हैं, कम से कम मध्यम आकार के,, यदि आप एक सुपर लघु संदेश भेज रहे हैं क्योंकि, अगर तुम सिर्फ खराब संदेश भेजना चाहते हैं, जो करने के लिए एक शब्द भी हम यहाँ जादू कर सकते हैं हो होता है, बी - ए - डी, तो आप शायद कम बिट्स का उपयोग करने जा रहे हैं, लेकिन पकड़ है अगर आप भी बॉब सूचित पेड़ क्या है या उन encodings क्या कर रहे हैं, तो आप शायद बचत के सभी पल्ला झुकना करने के लिए जा रहे हैं के साथ शुरू करने के लिए संकुचित होने बातें की. तो यह वास्तव में मामला हो सकता है कि अगर तुम कोशिश compressing ज़िप या फ़ाइल स्वरूपों की तरह कुछ के साथ भी आप के साथ परिचित हो सकता है - बहुत छोटी फाइलों को भी खाली फ़ाइलें - कभी कभी उन फ़ाइलों को बड़ा और छोटे नहीं मिल सकता है. लेकिन वास्तविक, कि छोटे फ़ाइल आकार के लिए ही होता है, तो इसे बनाने के लिए एक गीगाबाइट फ़ाइल 2 गीगाबाइट करने के लिए नहीं जा रहा है; हम वास्तव में बाइट या सिर्फ एक जोड़ी किलोबाइट में बात कर रहे हैं. ज़िप जैसे कुछ कार्यक्रमों काफी स्मार्ट एहसास है कि कर रहे हैं, "आप अधिक compressing बिट्स खर्च करने जा रहे हैं." "मुझे यह सब तुम्हारे लिए compressing परेशान नहीं है." तो यह सिर्फ पाठ स्वरूप compressing की तो एक तरीका है. हम सी. में कुछ इस तरह लागू कर सकता है उदाहरण के लिए, यहाँ है कि हम कैसे इस पेड़ में एक नोड का प्रतिनिधित्व कर सकते हैं जहां हम प्रतीक के लिए एक चार आवृत्ति के लिए एक अस्थायी मान है, और जैसा कि हम हमारे अन्य डेटा संरचनाओं, 2 संकेत के साथ देखा है, 1 बाईं बच्चे, 1 सही करने के लिए, या तो जिनमें से रिक्त हो सकता है, लेकिन यदि नहीं, यह एक बाएं बच्चे और एक सही बच्चे को संदर्भित करता है. तो यह तो Huffman कोडन है, और यह एक तरीका है कि आप जानकारी compressing के बारे में जा सकते हैं, और यह निश्चित रूप से एक सबसे करने के लिए लागू करने के लिए आसान कहते हैं, पिछले हफ्ते के डेटा संरचनाओं संदर्भ में, भले ही अधिक परिष्कृत एल्गोरिदम मौजूद कि अपने डेटा का भी और अधिक परिष्कृत परिवर्तन कर सकते हैं. पेड़, द्विआधारी पेड़, या पाठ के संपीड़न पर कोई सवाल? [छात्र] वहाँ कुछ अस्पष्टता में 01 की तरह अगर [अश्राव्य] विभाजन, तो 011 अस्पष्ट सही होगा? [अश्राव्य] >> अच्छा सवाल है. अस्पष्टता. इस तस्वीर के लिए यहाँ जिक्र करके मुझे संक्षेप में प्रस्तुत करना. क्योंकि वर्ण आप compressing हैं, का निरूपण है, इस एल्गोरिथ्म की परिभाषा द्वारा हमेशा पत्तियों रहते हैं, आप गलती से कई पत्र के उपसर्ग के लिए बिट्स के एक ही पैटर्न इस्तेमाल कभी नहीं होगा. तो दूसरे शब्दों में, आप के बारे में चिंतित हैं, यह की तरह लगता है, एक उत्पन्न होने वाली अस्पष्टता जिससे 001 बी के शुरू या सी या ऐसा कुछ के शुरू हो सकता है. लेकिन उस मामले क्योंकि सूचना है कि वर्णमाला के अक्षरों के सभी हम एन्कोडिंग रहे हैं नहीं किया जा सकता पत्तियों पर हैं. अस्पष्टता केवल मोर्स कोड के मामले में के रूप में पैदा कर सकते हैं, अगर, उदाहरण के लिए, सी बी जड़ से करने के लिए मार्ग के किनारे कहीं था [छात्र] ठीक है. तो उस मामले में कहना है, एक 2 पत्ते. >> का कहना है कि एक - फिर से कहो. [छात्र] कहते हैं कि 2 पत्ते, एफ और जी, और फिर जी - >> ठीक है. लेकिन यह नहीं कर सकते. एक ही पत्तियों और उन पत्रों क्योंकि एफ जी एफ और जी नहीं हो सकता खुद की बाईं बी या ई का अधिकार होगा कहीं पत्ते तो परिभाषा के द्वारा, वे पत्ते होना चाहिए. अन्यथा, आप बिल्कुल सही कह रहे हैं, हम इस समस्या है कि मोर्स कोड चेहरों नहीं हल कर दिया है. अच्छा सवाल है. अन्य प्रश्न? सही सभी. बिट्स की यह धारणा है, यह बाहर हम सत्ता लिया है चला है कि सभी के साथ हम वास्तव में इस्तेमाल नहीं किया है जब यह इन 0s और 1s से छेड़छाड़ करने के लिए आया था. हम जल्द से जल्द समस्या सेट पर इस बारे में पूछा: अर्थात्, कैसे आप अपरकेस लोअरकेस या उपाध्यक्ष विपरीत परिवर्तित करने के बारे में जाना है? या, और अधिक concretely, एक उन पहले psets के लिए कहा कितने बिट्स आप वास्तव में करने के क्रम में बदलने के लिए एक या ठीक इसके विपरीत लोअरकेस फ्लिप है? यहाँ 65 और 97 क्या बाइनरी में की तरह लग रहे एक त्वरित अनुस्मारक है. और अगर यह भी है कि प्रश्न की तरह अपनी स्मृति में फीका है, फिर आप यहाँ देख सकते हैं कि कितने बिट्स फ़्लिप किया जा की जरूरत के लिए पूंजी बदलने लोअरकेस करने के लिए? बस एक. वे केवल एक स्थान, बाएं से तीसरे बिट में अलग हैं. जबकि एक 010 छोटे, एक 011 एक है. तो किसी भी तरह, हम सिर्फ कि बिट फ्लिप करने में सक्षम होने की जरूरत है, और हम तो भुनाने या पत्र लोअरकेस कर सकते हैं. हम वास्तव में का उपयोग करके अतीत में इस किया है स्थिति अगर और जाँच अगर पत्र राजधानी के एक और राजधानी Z के बीच है, तो एक तरह outputs - एक 26 + या ऐसा कुछ. तुम्हें शायद एक अंकगणितीय वर्णमाला के अक्षरों के लिए परिवर्तन किया. लेकिन क्या होगा अगर हम सिर्फ इतना है कि एक सा फ्लिप सकता है? 01000001 और 01100001 तरह बिट्स, तो 8 बिट के एक बाइट लेने के लायक के बारे में कैसे जा सकता है? यदि आप बिट्स के उन पैटर्न था, हम उनमें से सिर्फ एक को बदलने के बारे में कैसे जा सकते हैं? क्या होगा अगर हम यहाँ पीले रंग में बिट के इस दूसरे पैटर्न शुरू? यदि मैं एक बिट के लिए छोड़कर पूरे पीले स्ट्रिंग 0s करना है कि मैं बदलना चाहते हैं और फिर मैं एक नए ऑपरेटर एक bitwise ऑपरेटर के रूप में जाना जाता है परिचय इस अर्थ में है कि यह व्यक्तिगत बिट पर संचालित bitwise एक संपूर्ण बाइट या चार बाइट्स के एक बार में सभी पर नहीं. पीले रंग में इस ऊर्ध्वाधर बार वहाँ से पता चलता है कि क्या होगा अगर हम राजधानी का प्रतिनिधित्व और बिटवाइस या बिट्स के पीले अनुक्रम के साथ? दूसरे शब्दों में, खरोंच में बूलियन अभिव्यक्ति की हमारी चर्चा के लिए वापस लगता है और फिर सी में एक बूलियन कर रहे हैं या करने का मतलब है कि सच हो सकता है, या तो पहली बात सच हो गया है या दूसरी बात सच हो गया है या वे दोनों के लिए सच हो सकता है, और फिर जिसके परिणामस्वरूप उत्पादन ही सच है. इस मामले में, क्या हम अगर हम 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 देता है. और तो भी अगर हम पहले से नहीं पता था कि एक था, लोअरकेस बस "या" आईएनजी एक बिट है कि हम यहाँ से पीले रंग में प्रस्तुत किया है की इस पद्धति के साथ, आप कि बिट flipping द्वारा एक राजधानी एक छोटे कर सकते हैं. हम इस अभिव्यक्ति सप्ताह पहले प्रयोग किया है: एक बिट flipping. कैसे आप वास्तव में है कि प्रोग्राम करते हैं? आप का उपयोग करते हैं जो आम तौर पर एक मुखौटा, बिट्स के एक दृश्य कहा जाता है, कि इस मामले में सिर्फ इतना होता है इस संख्या की तरह यहाँ देखो, और फिर आप "या" यह एक साथ इस नए ऑपरेटर का उपयोग, |, आप एक का उपयोग करें | | और आप वास्तव में इस जवाब यहाँ मिल जाएगा क्योंकि क्यों नहीं? यह 1s जगह, 2s जगह, 4s, 8s, 16s, 32s है. तो यह पता चला है कि अगर आप एक पूंजी पत्र लेने के लिए एक और बिटवाइस या पूर्णांक 32 के साथ, पूर्णांक 32, क्योंकि जब आप बिट के रूप में इसे देखो, इस तरह दिखता है, इसका मतलब है कि आप सा है कि आप वास्तव में चाहते फ्लिप कर सकते हैं. और इसी प्रकार और हम कोड में बस एक पल में देखता हूँ - लगता है कि हम अन्य दिशा में जाना चाहते हैं. आप लोअरकेस एक पूंजी के लिए एक से कैसे जाना है? बिट को बदलने की जरूरत है? यह वही है. हम एक 1 से 0 कि 3 थोड़ा परिवर्तन करना चाहते हैं. और हम ऐसा करने के बारे में कैसे जा सकता है? हम कैसे एक बिट की बारी है? बिट्स के पैटर्न क्या हम से दूर एक सा बदल सकता है? क्या होगा अगर हम मुखौटा पलटना की तरह? से पहले जबकि, हम पूरे पीले मुखौटा 0s बनाया एक बिट के लिए छोड़कर हम पर बारी चाहता था, क्या इस समय अगर हम बिट के लिए छोड़कर पूरे मुखौटा 1s कि हम बंद करना चाहते और फिर क्या ऑपरेटर का उपयोग करें? क्या होगा अगर हम "और" बातें? चलो एक नज़र रखना. अगर हम अब इस फ्लिप करने के लिए, मान लीजिए कि मैं फिर से एक मुखौटा है कि सभी 1s एक सा है कि मैं बंद करना चाहते हैं के लिए छोड़कर और फिर बजाय "या" यहाँ नीचे पीले रंग की संख्या के साथ शीर्ष सफेद संख्या, क्या मैं बजाय "और" उन्हें एक साथ? यह एक बिटवाइस कहा जाता है और. तार्किक रूप से, यह एक बूलियन के रूप में एक ही बात है और. यह मुझे देता है 0 और 1 0 है. तो झूठी और सच झूठी है. यह सच है और सच सच है. और यहाँ है जादू: अब यह सच है और झूठे झूठा है, तो हम दूर है कि थोड़ा बदल गया है. और अब कहानी के बाकी कुछ सरल है. क्योंकि मुखौटा के बाकी 1s है, यह बात नहीं है संख्या सफेद में क्या कर रहे हैं. जब आप "और" सच के साथ कुछ, तो आप अपने मूल्य को बदलने के लिए नहीं जा रहे हैं. अगर यह सच है, यह सच रहेगा. अगर यह गलत है, यह गलत रहेगा. लेकिन जादू होता है जब आप कुछ है कि सच था और फिर "और" आप यह गलत है. यह कि बिट बंद का प्रभाव पड़ता है. तो एक छोटे से वहाँ गुप्त. चलो वास्तव में कुछ कोड को देखो, जो वास्तव में और भी अधिक गूढ़ लग सकता है, लेकिन यहाँ tolower पर एक नज़र रखना. यदि मैं tolower में लग रही है, राजधानी से जाने के एक एक लोअरकेस चलो देखते हैं कैसे हम इस कार्यक्रम को लागू हो सकता है. यहाँ मुख्य है, और यह किसी भी कमांड लाइन तर्क को नहीं ले जा रहा है. मैं इस पत्र के लिए एक चरित्र ग घोषणा कर रहा हूँ कि उपयोगकर्ता के लिए प्रकार अंदर जा रहा है मैं तो एक परिचित do जबकि पाश बनाने के लिए सुनिश्चित करें कि उपयोगकर्ता निश्चित रूप से मुझे एक राजधानी देता है या बी या सी. .. Z, तो वे मुझे एक और जेड के बीच कुछ दे और अब मैं यहाँ क्या कर रहा हूँ? हूँ मैं "या" 0x20 साथ इस आईएनजी, लेकिन है कि वास्तव में के रूप में एक ही है - और हम एक क्षण में इस वापस आया हूँ - 32. तो फिर, 32 बिट्स के इस पैटर्न यहाँ है. हम यह क्यों क्या जानते हो? बस 0 सप्ताह के लिए वापस लगता है. इस 1s जगह, 2s जगह, 4s, 8s, 16s, 32s जगह है. तो इस पीले संख्या 32 हो होता है. मैं तो यहाँ चार तरह एक पत्र ले जा सकते हैं, बिटवाइस "या" यह सचमुच 32 संख्या के साथ, और मैं क्या मिलता है? कि चार लोअरकेस संस्करण. एक पल पहले, हालांकि, मैं एक अलग आधार संकेतन में व्यक्त की है. यह क्या प्रतिनिधित्व किया था? >> [छात्र] हेक्साडेसिमल. [Malan] यह षोडश आधारी प्रतिनिधित्व करते हैं होता. हम बहुत है कि सभी षोडश आधारी के बारे में बात नहीं की है, लेकिन यह वास्तव में इस तरह के मामलों में सुविधाजनक है. हालांकि यह और अधिक जटिल लग रहा है और फिर भी यह नहीं 20 और 32 की तरह लग रहा है, यह पता चला है कि षोडश आधारी वास्तव में सुपर सुविधाजनक अंकन है क्योंकि हेक्ज़ाडेसिमल में 0x के बाद हर अंक - और यह कोई मतलब नहीं है; यह सिर्फ मानव परंपरा है कि यहाँ एक हेक्साडेसिमल संख्या आता है कहते हैं - इन अंकों के प्रत्येक 2, 0 और फिर, खुद को प्रतिनिधित्व किया जा सकता बिल्कुल 4 बिट के साथ. तो अगर हम ऐसा कर, मुझे एक पाठ संपादक यहाँ खोलने - अजीब autocomplete - अगर हम एक छोटे पाठ संपादक यहाँ, संख्या 0x20 यहाँ 4 बिट्स का मतलब है, यहाँ एक और 4 बिट्स है. चलो rightmost 4 बिट्स 1. 0 जब 4 बिट्स के साथ प्रतिनिधित्व किया क्या है? आसान सुपर. बस सभी 0s. तो 0s के रूप में 4 बिट्स. आप 2 कैसे प्रतिनिधित्व करते हैं? यह एक समय हो गया है जब से हम यह किया है, लेकिन यह 0100 है. तो यह 1s जगह है, इस 2s जगह है, और फिर यह बात नहीं है कि अन्य स्थानों पर क्या कर रहे हैं. दूसरे शब्दों में, हेक्ज़ाडेसिमल में आप 0x20 कह सकते हैं, लेकिन अगर तुम तो क्या 2 है के बारे में सोचते हैं और कैसे यह द्विपदीय में प्रतिनिधित्व किया है, 0 क्या है और यह कैसे बाइनरी में प्रतिनिधित्व किया है, उन सवालों के जवाब और इस क्रमशः रहे हैं. तो 0x20 8 बिट के इस पैटर्न का प्रतिनिधित्व करने के लिए होता है, जो ठीक है कि हम चाहते थे मुखौटा है. तो इस पल के लिए सिर्फ एक बौद्धिक व्यायाम है, लेकिन वास्तविकता यह है कि कोड में यह आम तौर पर अधिक आम है इस तरह स्थिर लिखने हेक्ज़ाडेसिमल में क्योंकि तब प्रोग्रामर अपेक्षाकृत आसानी से कर सकते हैं, भले ही वह कुछ कागज और पेंसिल की आवश्यकता है, यह पता लगाने कि बिट्स के पैटर्न क्या है क्योंकि तुम सिर्फ 0s और 1s नहीं कोड में आम तौर पर व्यक्त कर सकते हैं. आप 00010 जाना नहीं है और इतना आगे कर सकते हैं. आप दशमलव या षोडश आधारी या अष्टाधारी या अन्य notations लेने की है. ज्यादातर लोगों के लिए षोडश आधारी बस इतना है कि प्रत्येक अंक 4 बिट का प्रतिनिधित्व ले जाते हैं और आप इस जल्दी गणित कर सकते हैं. और मैं toupper, जो लगभग एक ही है पर मेरे हाथ की लहर हूँ, यह लगभग समान लग रहा है. Toupper बल्कि या नहीं है, लेकिन इस आदमी ऑपरेटर और df का उपयोग होता है. Df क्या दर्शाता है? df? कोई है? >> [छात्र] 255. 255? नहीं 255. कि एफएफ होगा. हम थोड़ा अभ्यास के रूप में यह एक छोड़ देंगे. लेकिन अगर आप 0 से जाना, 1, 2, 3, 4, 5, 6, 7, 8, 9 और फिर 9 के बाद क्या आता है? हम दशमलव अंक के बाहर की तरह कर रहे हैं, लेकिन हेक्ज़ाडेसिमल में 9 के बाद क्या आता है? [छात्र] एक. >> तो एक, ख, ग, घ. तुम बाहर बिट्स घ वास्तव में प्रतिनिधित्व करता है की क्या पैटर्न से समझ सकते हैं. और अगर हम गणित करते हैं, हम देखेंगे कि मुखौटा आप में अंत में वापस हो रही है इस के लिए समान है. यह च, सभी 1s है, और यह घ है. तो df कि मुखौटा का प्रतिनिधित्व करता है. सही सभी. और अंत में, बातें नहीं ध्वनि सुपर, सुपर तकनीकी, लगता है, लेकिन हम एक प्रोग्राम है कि इस करता लिखना चाहता था. मुझे आगे जाना है और बाइनरी, जो एक binary.c नामक एक फाइल में एक कार्यक्रम है. और अब मुझे बाइनरी चलाने के लिए और मुझे एक गैर नकारात्मक पूर्णांक दे. चलो 0 में आसान और प्रकार शुरू. यह अब एक प्रोग्राम है कि बाहर अपनी द्विआधारी प्रतिनिधित्व में एक पूर्णांक प्रिंट है. तो अगर मैं इस खेल को फिर से खेलते हैं और सिर्फ 1 में टाइप करने के लिए, मैं 1 के एक 32-bit प्रतिनिधित्व मिलना चाहिए. अगर मैं इस 2 के साथ फिर से करते हैं, मुझे लगता है कि मिलना चाहिए. अगर मैं 7 करते हैं, तो मैं अंत में कुछ 1s और इतना आगे चाहिए. यह निकलता है कि मैं bitwise कार्यों के साथ, क्योंकि यह उल्लेख आप वास्तव में एक अन्य बात के रूप में अच्छी तरह से कर सकते हैं. आप इन मास्क गतिशील बना सकते हैं. इस एक अंतिम बिटवाइस आपरेशनों को शामिल उदाहरण पर एक नज़र रखना. यहाँ कोड का पहला हिस्सा है, एक नंबर के लिए उपयोगकर्ता prompt, और यह कहना है कि आप मुझे एक गैर नकारात्मक पूर्णांक दे. तो कि पुराने स्कूल सामान की तरह है. लेकिन यहाँ कुछ है कि दिलचस्प की तरह है. मैं द्विआधारी में एक संख्या मुद्रित करने के बारे में कैसे जाना है? मैं पहली बार क्या से क्या पुनरावृति? क्या एक आम तौर पर int के आकार के उपकरण में, कम से कम है? >> [छात्र] 4. यह 4 है. तो 4 8 * 32 - 1 31. तो अगर मैं 31 से गिनती शुरू कर रहा हूँ, कि यह पता चला है, का प्रतिनिधित्व करता है, बस धारणात्मक, 31 बिट या सर्वोच्च क्रम बिट, जो यहाँ पर इस आदमी है, जबकि इस बिट 0 होने जा रहा है. तो यह 01 बिट है ... 31 बिट. तो इस कोड क्या कर रहा है? पाश के लिए यह सूचना है, भले ही यह गुप्त लग रहा है, सिर्फ 31 से नीचे 0 iterating है. बस. तो दिलचस्प हिस्सा अब इन 5 लाइनों में होना चाहिए. सूचना है कि इस लाइन में मैं एक चर बुलाया मुखौटा घोषणा कर रहा हूँ इन पीले संख्या के बारे में हमारी कहानी के साथ संगत होना. और फिर यह क्या कर रही है? यह हम से पहले, सबसे अधिक संभावना नहीं देखा है एक और बिटवाइस ऑपरेटर है. यह बाईं बदलाव ऑपरेटर है. यह ऑपरेटर इस करता है. यहाँ 1 संख्या है, और अगर तुम मुझे पाली, बाएँ बदलाव छोड़ दिया है, आपको क्या लगता है कि कि कि 1 व्यक्ति के लिए कर के प्रभाव पड़ता है? वस्तुतः यह स्थानांतरण पर. तो अगर नंबर 1 है तुम क्या बाईं तरफ है और आप मैं 31 के लिए आरंभ करने के दौरान शुरू, कि क्या हो रहा है करने के लिए? यह करने के लिए इस संख्या 1 ले और यह यहाँ 31 से अधिक स्थानों को शिफ्ट करने के लिए जा रहा है. और क्योंकि वहाँ जाहिर है, इसके पीछे कोई अन्य अंक है, डिफ़ॉल्ट रूप से उन 0s के साथ प्रतिस्थापित किया जाएगा. तो तुम बाहर संख्या 1 है, जो निश्चित रूप से इस तरह दिखता है के साथ शुरू करेंगे - और मुझे यह आकर्षित केंद्र में यहाँ. और फिर जैसा कि आप बाईं करने के लिए चीजें बदलाव, इस आदमी को अनिवार्य रूप से इस तरह से चला जाता है. लेकिन जैसे ही आप करते हैं कि, एक 0 अंदर भरा हो जाता है यदि आप इसे एक दूसरी बार बदलाव, इसे इस तरह से चला जाता है और एक और 0 अंदर भरा हो जाता है आप इसे फिर से पारी और फिर एक और 0 अंदर भरा हो जाता है तो अगर आप 1 मैं 31 स्थानों << की इस बात करते हैं, तो आप अंत में एक मुखौटा हो रही है कि 32 वर्ण लंबा है, leftmost जिनमें से एक है 1 जिसमें से बाकी के सभी 0 हैं. और यह पता चला, एक अलग रूप में, इस तरह बाईं ओर एक संख्या स्थानांतरण भी संयोग से, और कभी कभी सुविधा, उस नंबर के लिए क्या कर का प्रभाव पड़ता है? >> [छात्र] दोहरीकरण. दोहरीकरण क्योंकि प्रत्येक के कॉलम - 1s जगह 2s जगह, 4s जगह, 8s जगह, -16 जगह - सभी दोहरीकरण they're के रूप में आप के लिए जाना छोड़ दिया. या बल्कि, जब आप 1s शिफ्ट करने के लिए आप को समाप्त करने के लिए संख्या के मूल्य को दोगुना करने जा रहे हैं. आप अंत अंकों के दिलचस्प परिवर्तनों कर सकते हैं 2 की शक्तियों द्वारा इस तरह से सब कुछ स्थानांतरण. तो यह कैसे काम करता है? यह तो मुझे एक मुखौटा है कि एक ठीक जगह मैं यह चाहता हूँ में 1 के लिए छोड़कर सभी 0s देता है, और फिर इस अभिव्यक्ति, जो toupper.c से चोरी हो रही है, बस कह संख्या ले n है कि उपयोगकर्ता में टाइप, "और" यह कि नकाब के साथ, और तुम क्या करने के लिए जा रहे हैं? आप एक 1 पाने के लिए अगर वहाँ एक है 1 कि नकाबपोश स्थान में जा रहे हैं, या आप एक 0 अगर वहाँ नहीं है के लिए जा रहे हैं. और इसलिए इस कार्यक्रम को प्रभावी ढंग से करता है यह एक पाश है, और यह 1 एक साथ यहाँ पर एक मुखौटा बनाता है तो यहाँ पर 1, तो यहाँ पर 1, और यह इस बिटवाइस और चाल का उपयोग करता है कहने के लिए वहाँ उपयोगकर्ता इनपुट में 1 सा है? वहाँ उपयोगकर्ता इनपुट में 1 सा है? और यदि ऐसा है तो, सचमुच 1 मुद्रित करने के लिए, और 0 मुद्रित करने के लिए. हम ints के साथ कर रहे हैं, सिर्फ इसलिए कि यही कारण है कि हम 8 के बजाय 32 बिट कर रहे हैं, लेकिन क्या हम फिर से शुरू की है इस बिटवाइस और, इस बिटवाइस या है, और इस बाएं बदलाव ऑपरेटर है, जो अक्सर बहुत मददगार नहीं हैं, लेकिन यह निकलता है वे हो सकता है. वास्तव में, यदि आप Booleans की एक सरणी की तरह कुछ का प्रतिनिधित्व करने के लिए करने के लिए गए थे बस सही है या गलत का प्रतिनिधित्व करने के लिए लगता है, आप चाहे या नहीं का ट्रैक रखने के लिए चाहता था 300 छात्रों के भरे कमरे मौजूद है, आप bool प्रकार के 300 आकार की एक सरणी की घोषणा इतनी है कि आप 300 bools मिल सकता है, और आप प्रत्येक सही करने के लिए सेट कर सकते हैं अगर किसी को यहाँ और अन्यथा झूठी है. उस डेटा संरचना में कि प्रतिनिधित्व अक्षम क्यों है? कि डेटा संरचना, 300 bools की एक सरणी के डिजाइन के बारे में बुरा क्या है? क्या एक bool है, वास्तव में हुड के नीचे? यह भी कुछ है कि परिचित नहीं हो सकता है. यह जाता है वहाँ कोई bool है. याद है हम तरह से बनाया है कि फ़ाइल के साथ cs50.h, जो खुद मानक bool शामिल हैं. सी तरह का गूंगा, हालांकि, जब यह bool करने के लिए आता है. यह 8 बिट का उपयोग करता है हर bool का प्रतिनिधित्व करते हैं, जो पूरी तरह से बेकार है क्योंकि जाहिर है, कितने बिट्स आप एक bool प्रतिनिधित्व की क्या ज़रूरत है? बस 1. तो यह पता चला है कि अगर आप अब बिटवाइस ऑपरेटरों के साथ करने की क्षमता है एक चार में भी एक बाइट में भी अलग - अलग बिट्स, हेरफेर, यह निकलता है कि आप बेवकूफ कुछ का प्रतिनिधित्व करने के लिए आवश्यक स्मृति कम हो सकता है 8 के एक कारक के द्वारा कि उपस्थिति स्टाइल डेटा संरचना की तरह. आठ बिट का उपयोग करने के लिए सही है या गलत का प्रतिनिधित्व करने के बजाय, आप सचमुच एक का उपयोग कर सकते हैं हर आठ छात्रों के लिए कक्षा में एक बाइट का उपयोग करके और 0 से 1 व्यक्ति बिट से कम स्तर चाल के इन प्रकार का उपयोग करके toggling. यह वास्तव में ऊर्जा के लिए एक अंत डाल दिया. वहाँ bitwise के संचालन के बारे में किसी भी सवाल है? हाँ. >> [छात्र] वहाँ एक विशेष या ऑपरेटर है? हां. वहाँ एक विशेष या ऑपरेटर है कि इस तरह दिखता ^, गाजर का प्रतीक है, जो केवल पहली बात का मतलब है या दूसरी बात एक 1 उत्पादन के लिए एक 1 हो सकता है. वहाँ भी एक नहीं, ~, जो आप एक 1 या उपाध्यक्ष विपरीत के रूप में अच्छी तरह से करने के लिए एक 0 पलटना करने की अनुमति देगा. और वहाँ भी एक सही बदलाव ऑपरेटर, >>, जो हमने देखा है के विपरीत है. सही सभी. चलो बातें एक उच्च स्तर पर अब ले. हम पाठ के बारे में बात कर रही द्वारा शुरू कर दिया और फिर यह compressing और बिट्स की कम संख्या के साथ पाठ का प्रतिनिधित्व; हम कैसे हम अब एक बिटवाइस स्तर पर बातें जोड़ तोड़ शुरू कर सकते हैं के बारे में एक सा बात की थी. चलो अब वापस प्रतिनिधित्व करने के लिए 10,000 पैर ज़ूम ग्राफिक्स की तरह अधिक जटिल बातें की. यहाँ हम जर्मनी के एक ध्वज है, यहाँ हम एक फ्रांस की है. इन फ़ाइल स्वरूपों आप जानते हो सकता में प्रतिनिधित्व किया जा सकता है - GIFs उदाहरण के लिए,. यदि आप कभी भी वेब पर है है कि gif. में समाप्त होता है एक छवि देखा, यह एक ग्राफिक्स इंटरचेंज प्रारूप है. ये दोनों यहाँ सॉर्ट के झंडे खुद संपीड़न के लिए उधार देने के शायद स्पष्ट कारण के लिए? >> [अश्राव्य छात्र प्रतिक्रिया] पुनरावृत्ति की एक बहुत, है ना? आदेश में जर्मनी के ध्वज भेजने के लिए, स्क्रीन पर एक छवि होने के रूप में इस के बारे में सोच अपने स्क्रैच दिनों में वापस. आप याद कर सकते हैं कि वहाँ व्यक्तिगत पिक्सल या डॉट्स कि एक छवि रचना है. काले डॉट्स और काले डॉट्स की एक और पूरी पंक्ति की एक पूरी पंक्ति है. काले डॉट्स की पंक्तियों का एक गुच्छा है कि हम देख सकता है अगर हम वास्तव में तेजी से बढ़ी है, बहुत पसंद है जब हम रोब चेहरे पर में फ़ोटोशॉप में तेजी से बढ़ी है. जैसे ही हम गहरा और गहरा और छवि में गहरी है, आप pixelation देख, सभी वर्गों है कि उस मामले में उसकी आंख की रचना शुरू कर दिया. वही यहाँ सौदा है. यदि हम काफी एक बिट में तेजी से बढ़ी है, तो आप व्यक्तिगत डॉट्स देखना होगा. खैर, यह बिट्स की बर्बादी की तरह है. यदि ध्वज का एक तिहाई काला है और ध्वज का एक तिहाई पीले और बहुत आगे है, इसलिए हम किसी भी तरह इस ध्वज नहीं सेक कर सकते हैं? और भी फ्रेंच झंडा भले ही पैटर्न थोड़ा अलग है संकुचित किया जा सकता है. यह पता चला है फ़ाइल फ़ॉर्मेट एक दोषरहित संपीड़न प्रारूप है, जिसका मतलब है कि आप यहाँ जर्मन ध्वज की तरह एक छवि ले जा सकते हैं, आप गुणवत्ता का त्याग किए बिना अपने बिट के एक बहुत दूर फेंक सकते हैं. यह JPEGs की तरह कुछ के विपरीत है, जिसके साथ हम में से शायद सबसे अधिक परिचित. Facebook तस्वीरें और Flickr तस्वीरें और इस तरह लगभग हमेशा JPEGs के रूप में सहेजा है जब वे अपलोड कर रहे हैं, हानिपूर्ण - प्रारूप जिससे आप दूर बिट्स फेंक JPEGs लेकिन एक हानिपूर्ण लेकिन आप भी दूर गुणवत्ता फेंक देते हैं. और यदि ऐसा है तो आप फ़ोटोशॉप के साथ फोटो सेक या उन्हें फेसबुक के लिए अपलोड या उन्हें एक सचमुच गंदे फोन पर ले लो, आप जानते हैं कि तस्वीर बहुत धब्बेदार और pixelated पाने के लिए शुरू, और है कि क्योंकि यह कंप्यूटर या फोन के द्वारा संकुचित किया जा रहा है सचमुच जानकारी दूर फेंक. लेकिन GIF अद्भुत है कि यह कम बिट का उपयोग कर सकते हैं की तुलना में यह डिफ़ॉल्ट रूप से हो सकता है किसी भी जानकारी को खोने के बिना. और यह अनिवार्य रूप से करता है तो इस प्रकार है. एक बीएमपी की तरह एक फ़ाइल में दुकान के बजाय काले, काले, काले, काले रंग के लिए एक आरजीबी ट्रिपल, काले, काले, काले, काले, काले, काले, काले, काले और बहुत आगे है, बल्कि, GIF प्रारूप कहते हैं, जा रहा है "ब्लैक" और फिर, "यह 100 बार दोहराएँ," या ऐसा कुछ. "ब्लैक, यह 100 गुना, काले दोहराने के लिए, यह 100 बार दोहराने ..." "पीला, यह 100 बार दोहराएँ." और इसलिए यह याद है, अनिवार्य रूप से, leftmost पिक्सेल और फिर किसी भी तरह कि पिक्सेल फिर से और फिर से दोहराने की धारणा encodes. तो GIFs तो खुद को किसी भी जानकारी को खोने के बिना सेक कर सकते हैं. लेकिन अगर आप को लगता है, कि अगर एल्गोरिथ्म है कि प्रयोग GIFS है, जो इन झंडे के, भले ही वे आकार में समान लग रही है, छोटे होने जा रहा है जब एक GIF के रूप में डिस्क पर सहेजा? >> [छात्र] जर्मनी. जर्मनी के लिए छोटे होने जा रहा है? क्यों? क्षैतिज [छात्र] क्योंकि आप इसे दोहराने, कई बार और फिर तुम एक समय दोहराएँ. वास्तव में. >> क्योंकि जो लोग GIF का आविष्कार बस की तरह मनमाने ढंग का फैसला किया कि पुनरावृत्ति को क्षैतिज और laterally नहीं leveraged किया जाएगा. जर्मन ध्वज में एक बहुत अधिक laterally यहाँ फ्रेंच ध्वज की तुलना में पुनरावृत्ति है. इसलिए यदि हम वास्तव में मेरे हार्ड ड्राइव पर एक फ़ोल्डर है कि इन GIFs खोलने के लिए, वास्तव में आप देख सकते हैं कि जर्मन ध्वज 2 किलोबाइट और फ्रेंच एक 4 किलोबाइट कर सकते हैं. यह एक संयोग हो सकता है होता है कि एक दो बार अन्य है, लेकिन यह वास्तव में मामला है कि फ्रेंच झंडा बहुत बड़ा है. हालांकि हम यहाँ ग्राफिक्स के बारे में बात कर रहे हैं, एक ही विचारों को लागू कर सकते हैं झंडे, लेकिन चित्र है कि एक छोटे से अधिक जटिल हैं जैसे बातें नहीं. यदि आप एक सेब के एक तस्वीर लेने के लिए, निश्चित रूप से वहाँ के दोहराव की एक बहुत वहाँ है, इसलिए हम किसी भी तरह से याद है कि डिफ़ॉल्ट पृष्ठभूमि नीला है हो सकता है और दाएँ हाथ के चित्र के रूप में नहीं चलता है, इस चित्र में हर एक पिक्सेल का रंग याद है. तो हम दूर बिट्स जानकारी खोने के बिना फेंक कर सकते हैं. सेब अभी भी सिर्फ एक ही लग रहा है. इस उदाहरण में, आप देख सकते हैं कि एक फिल्म में क्या होता है. पुराने स्कूल फिल्म जिससे वहाँ शीर्ष छवि में रीलों का प्रतिनिधित्व करते हैं आप एक घर के पिछले एक आर.वी. ड्राइविंग और एक पेड़ है. और कि वैन के रूप में सही करने के लिए बाएँ से पिछले ड्राइव, क्या जाहिर नहीं बदल रहा है? घर कहीं भी नहीं जा रहा है, और पेड़ कहीं भी नहीं जा रहा है. केवल एक चीज है कि बढ़ रहा है इस मामले में वैन है. इसलिए अपरिवर्तित पृष्ठभूमि के रूप में पता चलता है, क्या आप फिल्मों में कर सकते हैं इसी तरह अभी दूर फेंक जानकारी है कि फ्रेम के बीच में परिवर्तन नहीं करता. यह आम तौर पर interframe सम्पीडन के रूप में जाना जाता है जिससे अगर इस फ्रेम लगभग एक इस के समान दिखता है, चलो परेशान नहीं डिस्क पर समान जानकारी के किसी भी भंडारण के इन मध्यवर्ती तख्ते पर, हम केवल चाबी तख्ते एक समय में एक बार उपयोग कि वास्तव में जानकारी redundantly बस के रूप में एक छोटे से विवेक की जांच की दुकान. इसके विपरीत करके, compressing वीडियो के लिए एक और तरीका है इस 2 और कम उदाहरण यहाँ में है, जहां दुकान के बजाय 30 तख्ते, तुम सिर्फ क्यों नहीं 15 एक दूसरे फ्रेम के बजाय दुकान? खूबसूरती से पूरी तरह से बहने की तरह फिल्म की तुलना में, यह पसंद है यह एक छोटा सा, एक थोड़ा पुराने स्कूल stuttering लग सकता है, लेकिन शुद्ध प्रभाव अब तक कम बिट्स से अन्यथा आवश्यक हो सकता है का उपयोग करने के लिए किया जाएगा. कहाँ है यह तो हमें छोड़ करता है? और जहाँ आप संपीड़न के साथ जा सकते हैं पर एक अलग सा हो गया था. उस पर अधिक जानकारी के लिए, CS175 यहाँ तरह एक वर्ग ले. यहाँ वीडियो के भीतर एक और उदाहरण है. यदि मधुमक्खी बात ही चलती है, आप वास्तव में दूर उन मध्यम फ्रेम में जानकारी फेंक कर सकते हैं क्योंकि फूल और आकाश और पत्तियों नहीं बदल रहे हैं. लेकिन अब एक आखिरी बात पर विचार करते हैं. अगले 5 मिनट में हम पीछे सी हमेशा के लिए छोड़ व्याख्यान में? हां. , हालांकि psets में नहीं. सी के बारे में अंतिम कहानी और तो हम बहुत सेक्सी सामान मिलता है HTML और वेब और लुभाने हू शामिल. सही सभी. यहाँ हम चले. यही प्रेरणा है. यह यह सब समय बदल जाता है जब हम कार्यक्रमों हम बजना चलाने लिख रहा है. और हम पहले सप्ताह के बाद से बहुत ज्यादा कहा है बजना, स्रोत कोड लेता है और यह वस्तु कोड में धर्मान्तरित. यह सी लेता है और यह 0s और 1s में धर्मान्तरित. मैं एक तरह से कुछ हफ्तों के लिए किया गया है आप के लिए झूठ बोल रही है क्योंकि यह काफी है कि जितना सरल नहीं है. वहाँ एक बहुत अधिक हुड के नीचे जा रहा है जब आप बजना की तरह एक कार्यक्रम चलाने की है. वास्तव में, एक कार्यक्रम संकलन की प्रक्रिया वास्तव में संक्षेप किया जा सकता है, के रूप में आप compilers पर रोब वीडियो से याद हो सकता है, इन 4 चरणों में: पूर्व प्रसंस्करण, ही संकलन, संयोजन, और जोड़ने. लेकिन कक्षा में है और हम दुनिया में सबसे अधिक लोगों को आम तौर पर इन सभी चरणों के संक्षेप में प्रस्तुत बस के रूप में "संकलन है." लेकिन अगर हम इस तरह स्रोत कोड के साथ शुरू याद है, यह शायद सबसे आसान सी कार्यक्रम हम इस प्रकार अब तक लिखा है, याद है कि जब संकलित यह इस तरह लग रही है. लेकिन वहाँ वास्तव में एक मध्यवर्ती कदम है, और उन कदम इस प्रकार हैं. पहले वहाँ बहुत इस और हमारे कार्यक्रमों की अधिकांश के शीर्ष पर यह बात है, # शामिल # क्या हमारे लिए शामिल करने के लिए क्या करता है? मेरी फाइल में यह बहुत ज्यादा प्रतियां और चिपकाता stdio.h की सामग्री इतनी है कि क्यों? मैं stdio.h की सामग्री के बारे में क्यों परवाह करूँ? ब्याज की वहाँ में क्या है? Printf घोषणा, इसके प्रोटोटाइप, तो इसलिए कि संकलक जानता है कि मैं क्या मतलब जब मैं इस समारोह printf उल्लेख. तो संकलन में 1 कदम है जिससे पूर्व प्रसंस्करण, बजना की तरह एक कार्यक्रम या कुछ सहायक प्रोग्राम है कि बजना साथ आता है नीचे करने के लिए अपने कोड शीर्ष पढ़ता है, सही करने के लिए छोड़ दिया है, और किसी भी समय यह एक प्रतीक # देखता शामिल करना एक कीवर्ड के द्वारा पीछा किया, यह कि कार्रवाई करता है, नकल और अपनी फ़ाइल में इस मामले stdio.h में चिपकाने. यह 1 कदम है. तो फिर तुम एक बहुत बड़ा विशाल कॉपी, पेस्ट काम है कि सिर्फ हुआ है की वजह से सी फाइल है. चरण 2 अब संकलन है. लेकिन यह पता चला है संकलन स्रोत कोड है कि इस तरह दिखता है लेता है और यह कुछ है कि इस तरह दिखता में बदल जाता है, जो उन परिचित के लिए कहा जाता है? >> [छात्र] विधानसभा. >> विधानसभा भाषा. यह वास्तव में कुछ है अगर आप CS61 लेने के आप में और अधिक विस्तार में डुबकी हूँ है. यह बस के बारे में के रूप में बंद के रूप में आप अपने आप को 0s और 1s लिखने के लिए मिल सकता है लेकिन इस तरह है कि अभी भी कम से कम भावना का एक छोटा सा बनाता में बातें लिखने. ये मशीन निर्देश हैं, और अगर हम मुख्य समारोह के लिए यहाँ नीचे स्क्रॉल, सूचना है कि इस धक्का अनुदेश है, निर्देश ले जाने के लिए, अनुदेश घटाना, अनुदेश कहते हैं, और बहुत आगे है. जब आप सुनते हैं कि आपके कंप्यूटर इंटेल के अंदर आप अपने मैक या पीसी में एक इंटेल सीपीयू है, इसका क्या मतलब है? एक सीपीयू इंटेल कुछ निर्देश को समझने जैसी कंपनियों द्वारा निर्मित आता है. वे कोई विचार स्वैप की तरह कार्य करता है क्या कर रहे हैं या मुख्य प्रतिशत से कर रहे हैं, लेकिन वे जानते हैं की तरह बहुत कम स्तर के निर्देशों का क्या जोड़, घटाना, धक्का, ले जाने के लिए, कहते हैं, और बहुत आगे हैं. इसलिए, जब आप विधानसभा भाषा में सी कोड संकलन अपने बहुत उपयोगकर्ता के अनुकूल दिखने कोड है कि कुछ इस तरह दिखता में बदल जाता है, कि सचमुच में और CPU के बाहर ऐसी छोटी इकाइयों में लगभग बाइट या 4 बाइट्स चालें. लेकिन अंत में, जब बजना अपने कार्यक्रम के इस प्रतिनिधित्व लेने के लिए तैयार है में 0s और 1s, तो कोडांतरण बुलाया कदम होता है, और इस बार फिर सब एक आँख की झपकी में होता है जब बजना चल रहा है. हम यहाँ शुरू, यह इस तरह एक फ़ाइल outputs, और फिर इसे इन 0s और 1s धर्मान्तरित. और अगर आप कुछ बिंदु पर वापस जाने के लिए और वास्तव में कार्रवाई में यह देखने के लिए चाहते हैं, - अगर मैं hello1.c यह एक बहुत पहले हम कार्यक्रमों को देखा है में जाने आम तौर पर हम बजना hello1.c साथ इस संकलन और यह हमें a.out देना होगा. इसके विपरीत यदि आप के बजाय यह झंडा दे, क्या आपको मिलेगा hello1.s है और आप वास्तव में विधानसभा भाषा देखेंगे. मैं एक बहुत ही कम कार्यक्रम के लिए यह कर रहा हूँ, लेकिन अगर आप हाथापाई के लिए वापस जाओ या स्वस्थ या किसी भी प्रोग्राम लिखा है और आप बस बाहर जिज्ञासा की देखने के लिए क्या यह वास्तव में दिखती है, तो क्या वास्तव में सीपीयू में खिलाया जा रहा है चाहते हैं, आप बजना के साथ कि - एस ध्वज का उपयोग कर सकते हैं. लेकिन फिर अंत में, वहाँ अभी भी एक पकड़ लिया है. यहाँ 0s और 1s कि हैलो दुनिया के अपने कार्यान्वयन का प्रतिनिधित्व करते हैं. लेकिन मैं अपने कार्यक्रम में किसी और के समारोह का इस्तेमाल किया. तो भले ही प्रक्रिया किया गया है मैं hello.c ले, यह विधानसभा कोड में संकलित किया जाता है, और फिर इसे 0s और 1s में इकट्ठा हो जाता है, केवल 0s और 1s है कि समय में इस बिंदु पर outputted अपने कोड से परिणाम है कि लोगों को कर रहे हैं. लेकिन उस व्यक्ति जो printf ने लिखा है, वे अपने कोड 20 साल पहले संकलित और यह अब उपकरण पर कहीं स्थापित, इसलिए हम किसी भी तरह से मेरे 0s और 1s के साथ उसके या उसके 0s और 1s मर्ज है, और कहा कि हमें संकलन के 4 और अंतिम कदम है, को जोड़ने के रूप में जाना जाता है के लिए लाता है. तो बाईं ओर पर हम पहले के रूप में सटीक एक ही तस्वीर है: hello.c हो जाता है विधानसभा कोड 0s और 1s हो जाता है. लेकिन याद करते हैं कि मैं अपने कोड में मानक पुस्तकालय मैं / ओ का इस्तेमाल किया है, और कहा कि कहीं कंप्यूटर पर मतलब है कि वहाँ एक stdio.c नामक एक फाइल या कम से कम उसके संकलित संस्करण क्योंकि कुछ साल पहले किसी विधानसभा कोड में stdio.c संकलित और फिर 0s और 1s की एक पूरी गुच्छा. यह वही है जो एक स्थिर या एक गतिशील पुस्तकालय के रूप में जाना जाता है. यह कुछ फ़ाइल उपकरण में कहीं बैठे है. लेकिन अंत में, मैं मेरे 0s और 1s ले और उस व्यक्ति के 0s और 1s और किसी तरह उन्हें एक साथ लिंक, सचमुच गठबंधन उन 0s और 1s a.out या hello1 या जो कुछ भी कहा जाता है एक एकल फ़ाइल में मैं अपने कार्यक्रम बुलाया ताकि अंत परिणाम 1s और 0s कि मेरे कार्यक्रम रचना चाहिए की सभी है. यह सब समय जब आप बजना का उपयोग किया गया तो इस सेमेस्टर और भी अधिक हाल ही चल कर क्रम में बजना को चलाने के लिए, इन सभी चरणों के तुरंत के किया गया है तरह हो रहा है, लेकिन बहुत जानबूझकर. और यदि ऐसा है तो आप कंप्यूटर विज्ञान में पर जारी है, अर्थात् CS61, इस परत है कि आप छील वहाँ बंद वापस जारी रखेंगे दक्षता, सुरक्षा निहितार्थ है, और इन कम स्तर के विवरण की तरह के बारे में बात कर रहा है. लेकिन उस के साथ, हम सी पीछे छोड़ने के बारे में कर रहे हैं. चलो आगे जाना है और अब हमारे 5 मिनट का ब्रेक ले, और जब हम वापस आ गया. सही सभी. हम वापस आ रहे हैं. अब हम न सिर्फ HTML पर हमारे देखो शुरू, क्योंकि जैसा कि आप देखेंगे, HTML ही वास्तव में बहुत आसान है लेकिन वेब प्रोग्रामिंग में आम तौर पर और अधिक वास्तव में, आम तौर पर और अधिक नेटवर्किंग, और कैसे इन प्रौद्योगिकियों के सब एक साथ आए हमें इंटरनेट के ऊपर और अधिक परिष्कृत कार्यक्रमों को बनाने के लिए अनुमति इस प्रकार अब तक की तुलना में हम इन काले और सफेद खिड़कियों में करने में सक्षम किया गया है. दरअसल, भले ही सेमेस्टर में इस बिंदु पर हम अपेक्षाकृत कम समय खर्च करेगा PHP, HTML, सीएसएस, जावास्क्रिप्ट, एसक्यूएल और अधिक पर, अधिकांश छात्रों को अंत अंतिम परियोजनाओं है कि वेब आधारित हैं कर क्योंकि जैसा कि आप देखेंगे, पृष्ठभूमि अब आप सी में है बहुत ज्यादा है इन उच्च स्तर भाषाओं के लिए लागू है. और जैसा कि आप अपने अंतिम परियोजना के बारे में सोचना शुरू, जो है, ज्यादा समस्या 0 सेट की तरह है, जहां आप प्रोत्साहित किया गया स्क्रैच में ब्याज की आप सबसे कुछ भी करते हैं, अंतिम परियोजना सी के साथ अपने newfound ज्ञान और प्रेमी लेने का अवसर है या PHP या जावास्क्रिप्ट या एक स्पिन के लिए बाहर की तरह और अपने सॉफ्टवेयर की दुनिया देखने के लिए बहुत ही टुकड़ा बना. और आप विचारों के साथ बीज के लिए पता है कि तुम यहाँ सिर कर सकते हैं, projects.cs50.net. हर साल, हम परिसर पर संकाय और स्टाफ से विचारों और छात्र समूहों मांगना सिर्फ दिलचस्प बातें है कि कंप्यूटर का उपयोग कर हल किया जा सकता है के लिए अपने विचारों को प्रस्तुत करने के लिए, वेबसाइटों का उपयोग, सॉफ्टवेयर का उपयोग. तो अगर आप अपनी खुद की एक विचार के साथ आने के लिए संघर्ष कर रहे हैं, हर तरह से विचारों के माध्यम से इस वर्ष और पिछले से स्क्रॉल. यह पूरी तरह से करने के लिए एक परियोजना है कि पहले से घेरने की कोशिश की है से निपटने के लिए ठीक है. हम परिसर में कपड़े धोने की स्थिति को देखने के लिए कई क्षुधा को देखा है, डायनिंग हॉल मेनू नेविगेट करने के लिए कई क्षुधा, पाठ्यक्रम सूची और इस तरह नेविगेट करने के लिए कई क्षुधा. और वास्तव में, एक भविष्य व्याख्यान में और भविष्य सेमिनारों में, हम आपको कुछ सार्वजनिक रूप से उपलब्ध एपीआई के लिए परिचय, दोनों व्यावसायिक रूप से उपलब्ध होगा के रूप में यहाँ के रूप में अच्छी तरह से उपलब्ध CS50 परिसर में इतनी है कि आप डेटा तक पहुँच है और फिर इसके साथ दिलचस्प बातें कर सकते हैं. तो कुछ ही दिनों में अंतिम परियोजनाओं पर अधिक जब हम विनिर्देश जारी, लेकिन अब के लिए पता है, कि तुम अकेले या एक या दो मित्रों के साथ काम कर सकते हैं सबसे अधिक ब्याज की आप किसी भी परियोजना पर. इंटरनेट. तुम आगे जाओ और अपने लैपटॉप खींच, आप facebook.com करने के लिए पहली बार के लिए जाना है, हाल ही में लॉग इन नहीं और हिट दर्ज करें. वास्तव में क्या होता है? जब आप अपने कंप्यूटर पर दर्ज करें मारा, कदम की एक पूरी गुच्छा जादुई हो रहा की तरह शुरू. तो छोड़ दिया, फेसबुक जैसी वेब सर्वर पर यहाँ आप सही पर यहाँ है, और किसी भी तरह आप इस HTTP, हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल बुलाया भाषा का प्रयोग कर रहे हैं. HTTP एक प्रोग्रामिंग भाषा नहीं है. यह एक प्रोटोकॉल का अधिक है. यह सम्मेलनों का एक सेट है कि वेब ब्राउज़र और वेब सर्वर का उपयोग करें जब intercommunicating है. और इसका मतलब यह है कि क्या इस प्रकार के रूप में है. ज्यादातर असली दुनिया में पसंद करते हैं, तो हम इन सम्मेलनों जहां अगर आप पहली बार के लिए कुछ मानव को पूरा करने के लिए, यदि आप मुझे यहाँ humoring मन नहीं है, मैं आप के लिए आते हैं, कहते हैं, हो सकता है "हाय, मेरा नाम दाऊद है." >> हाय, डेविड. मेरा नाम सैमी है. "हाय, मेरा नाम दाऊद. सैमी है." तो अब हम सिर्फ मूर्ख मानव प्रोटोकॉल के इस प्रकार में लगे हुए हैं जहाँ मैं प्रोटोकॉल शुरू की है, सैमी प्रतिक्रिया व्यक्त की है, हम हाथ हिलाकर रख दिया है, और लेन - देन पूरा हो गया है. HTTP बहुत भावना में समान है. जब अपने वेब ब्राउज़र अनुरोध www.facebook.com, अपने ब्राउज़र वास्तव में क्या कर रहा है अपने हाथ बढ़ा रहा है, तो बात करने के लिए, सर्वर और यह संदेश भेज रहा है. आप क्या प्राप्त करना चाहते हैं और उस संदेश को आम तौर पर मिल की तरह कुछ है? मेरे मुख पृष्ठ पर, जो आम तौर पर एक यूआरएल के अंत में एक एकल स्लेश से चिह्नित है. और बस इतना पता है मैं क्या भाषा बोल रहा हूँ, मैं ब्राउज़र तुम्हें बताने के लिए जा रहा हूँ कि मैं HTTP संस्करण 1.1 बोल रहा हूँ, और भी अच्छे उपाय के लिए, मैं तुम्हें बताने के लिए जा रहा हूँ कि मेजबान है कि मैं घर के पृष्ठ चाहते facebook.com है. आमतौर पर, एक वेब ब्राउज़र, आप के लिए अनजान, मानव, इंटरनेट भर में इस संदेश भेजता जब आप बस www.facebook.com लिखें, अपने ब्राउज़र में दर्ज करें. और क्या Facebook के साथ प्रतिक्रिया नहीं करता है? यह कुछ समान दिखने वाले गुप्त, लेकिन यह भी बहुत अधिक विवरण के साथ प्रतिक्रिया करता है. मुझे फेसबुक के मुख पृष्ठ के लिए आगे यहाँ जाना. यह स्क्रीन है कि हम में से अधिकांश शायद देखने के लिए अगर आप समय के सभी में लॉग इन रहने कभी नहीं है, लेकिन यह वास्तव में उनके घर पृष्ठ है. अगर हम क्रोम में इस करते हैं, सूचना है कि आप इन छोटी संदर्भ मेनू को खींच सकते हैं. क्रोम का उपयोग करते हुए, चाहे मैक ओएस, लिनक्स, या की तरह, यदि आप क्लिक करें या छोड़ दिया क्लिक नियंत्रण, आप आमतौर पर एक मेनू है कि इस तरह दिखता खींच सकते हैं, जहां कुछ विकल्पों का इंतजार है, जिनमें से एक दृश्य पृष्ठ स्रोत है. तुम भी आमतौर पर दृश्य मेनू के लिए जा रहा है और आसपास poking द्वारा इन बातों के लिए मिल सकता है. उदाहरण के लिए, यहाँ देखें के तहत, डेवलपर एक ही बात है. मुझे आगे जाना है और देखें पृष्ठ स्रोत पर देखने के लिए जा रहा हूँ. आप देखेंगे क्या HTML है कि मार्क facebook.com का प्रतिनिधित्व करने के लिए लिखा है. यह एक पूरी गड़बड़ है, लेकिन हम देखेंगे कि यह समझ में आता है और एक छोटे से अधिक लंबे समय से पहले. लेकिन वहाँ कुछ पैटर्न यहाँ हैं. मुझे नीचे स्क्रॉल करने के लिए इस तरह से सामान. यह मुश्किल है के लिए एक मानव पढ़ने के लिए, करने के लिए, लेकिन सूचना है कि वहाँ angled कोष्ठक के इस पैटर्न विकल्प, मूल्य जैसे खोजशब्दों, कुछ उद्धरित स्ट्रिंग जैसे खोजशब्दों के साथ. यह वह जगह है जहाँ, जब आप बहुत पहले समय निर्दिष्ट अपने जन्म वर्ष क्या है के लिए साइन अप. जन्म साल की है कि ड्रॉप - डाउन मेनू किसी भी तरह यहाँ encoded है इस HTML, HyperText मार्कअप भाषा बुलाया भाषा में. दूसरे शब्दों में, जब अपने ब्राउज़र एक वेब पेज का अनुरोध यह इस सम्मेलन बुलाया HTTP बोलती है. लेकिन facebook.com के साथ क्या करता है कि अनुरोध करने के लिए जवाब है? यह इन गुप्त संदेशों में से कुछ के साथ जवाब है, के रूप में हम एक पल में देखेंगे. लेकिन इसकी प्रतिक्रिया की HTML, HyperText मार्कअप भाषा के रूप में सबसे अधिक है. कि वास्तविक जिस भाषा में एक वेब पेज लिखा है. और एक वेब ब्राउज़र क्या वास्तव में तो कुछ है कि इस तरह दिखता के प्राप्त होने पर करता है, यह ऊपर से नीचे पढ़ता है, सही करने के लिए छोड़ दिया है, और यह किसी भी समय इन angled कोष्ठक के देखता विकल्प की तरह एक कीवर्ड के द्वारा पीछा किया, यह उचित तरीके से कि मार्कअप भाषा को प्रदर्शित करता है. इस मामले में, यह एक साल के ड्रॉप डाउन मेनू प्रदर्शित होगा. लेकिन फिर, यह एक पूरी गंदगी को देखने के है. इसका कारण यह है Facebook डेवलपर्स उदाहरण के लिए शैली के लिए 0 5 के लिए प्रकट नहीं है. इसका कारण यह है कि कोड है कि वे लिखते हैं की सबसे अधिक है, वास्तव में, खूबसूरती से लिखा है, अच्छी तरह से टिप्पणी की, अच्छी तरह से दांतेदार बना, और इस तरह, लेकिन पाठ्यक्रम मशीन, कंप्यूटर, ब्राउज़रों वास्तव में एक लानत नहीं देना नहीं है चाहे अपने कोड अच्छी तरह से स्टाइल है. और वास्तव में, यह पूरी तरह से बेकार है टैब कुंजी उन सभी बार मारा और टिप्पणियों डाल सभी अपने कोड भर और वास्तव में वर्णनात्मक चर नाम का चयन क्योंकि अगर ब्राउज़र परवाह नहीं करता, सभी बाइट्स आप दिन के अंत में कर रहे हैं बर्बाद कर रहे है. तो यह पता चला क्या सबसे वेबसाइटों है भले ही कोड के लिए स्रोत facebook.com और इंटरनेट पर cs50.net इन अन्य वेबसाइटों के सभी के लिए आम तौर पर अच्छी तरह से लिखा है और अच्छी तरह से टिप्पणी की है और अच्छी तरह से दांतेदार बना हुआ है और इस तरह, आम तौर पर पहले वेबसाइट इंटरनेट पर डाला जाता है, कोड minified है, जिससे HTML और सीएसएस - कुछ और हम जल्द ही देखेंगे - जावास्क्रिप्ट कोड हम जल्द ही देखेंगे संकुचित है, जिससे लंबी चर नाम बन एक्स और वाई और जेड, और कि खाली स्थान के सभी बनाता है कि सब कुछ इतना पठनीय देखो सब दूर फेंक दिया है, क्योंकि अगर आप इसे इस तरह के बारे में सोचते हैं, फेसबुक हो जाता है एक अरब पृष्ठ पर एक दिन हिट - की तरह है कि कुछ पागल - तो क्या एक प्रोग्रामर बस गुदा होने के लिए अगर सिर्फ कोड की कुछ पंक्ति इंडेंट इतना अधिक कभी अंतरिक्ष बार एक अतिरिक्त समय मारा? निहितार्थ क्या है अगर Facebook बरकरार रखता है कि रहितसफेद बाइट्स की सभी में वे इंटरनेट पर लोगों के लिए वापस भेज? अंतरिक्ष बार मार एक बार आप अपनी फ़ाइल में एक अतिरिक्त बाइट देता है. और अगर एक अरब लोग तो उस दिन मुख पृष्ठ डाउनलोड करने के लिए आगे बढ़ना है, कितना अधिक डेटा आप इंटरनेट पर प्रसारित किया है? कोई अच्छा कारण के लिए एक गीगाबाइट. और दी, वेबसाइटों की एक बहुत कुछ करने के लिए इस तरह के एक स्केलेबल मुद्दा नहीं है, लेकिन Facebook के लिए, गूगल के लिए सबसे लोकप्रिय वेबसाइटों में से कुछ के लिए वहाँ महान प्रोत्साहन आर्थिक अपने कोड एक गड़बड़ की तरह लग इतनी है कि आप संभव के रूप में कुछ बाइट्स के रूप में तो यह compressing के अलावा का उपयोग कर रहे हैं ज़िप की तरह कुछ का उपयोग करते हुए, एक एल्गोरिथ्म gzip कहा जाता है, कि ब्राउज़र आप के लिए स्वचालित रूप से करता है. लेकिन इस भयानक है. हम अन्य लोगों की वेबसाइटों के बारे में कुछ भी जानने के लिए कभी नहीं और कैसे वेब पेज डिजाइन अगर हम इस तरह से इसे देखो. तो सौभाग्य से, क्रोम और IE और Firefox जैसे ब्राउज़रों इन दिनों आम तौर पर इस में निर्मित डेवलपर उपकरण के साथ आते हैं. वास्तव में, यदि मैं यहाँ से नीचे जाने के लिए निरीक्षण तत्व या यदि मैं करने के लिए देखें, डेवलपर जाओ, और डेवलपर उपकरण के लिए स्पष्ट रूप से जाना, अब अपनी स्क्रीन के नीचे इस विंडो को चबूतरे. यह पहली बार में एक छोटे से डराना है क्योंकि वहाँ अपरिचित टैब का एक बहुत यहाँ है, लेकिन अगर मैं तत्वों पर नीचे छोड़ दिया पर सभी रास्ते पर क्लिक करें, क्रोम जाहिर है बहुत चालाक है. यह जानता है कि कैसे इस कोड की व्याख्या करने के लिए. और इसलिए क्रोम क्या करता है यह फेसबुक के HTML के सभी साफ. हालांकि वहाँ रहितसफेद वहाँ नहीं है, वहाँ खरोज वहाँ नहीं है, अब लगता है कि मैं इस वेब पेज के सभी अधिक पदानुक्रम नेविगेट शुरू कर सकते हैं. यह पता चला है कि हर वेब HTML5 बुलाया भाषा में लिखित इस के साथ शुरू करना चाहिए, इस DOCTYPE घोषणा, इतनी बात करने के लिए: यह प्रकाश और भूरे रंग की तरह है, लेकिन है कि इस फाइल में कोड की बहुत पहली पंक्ति है, और है कि बस ब्राउज़र बताता है, "अरे, यहाँ कुछ HTML5 आता है यहाँ एक वेब पेज आता है." से परे है कि पहले खुले वर्ग के लिए इस बात को एक खुला ब्रैकेट HTML टैग होना होता है, और फिर अगर मैं गहराई में गोता - इन तीरों पर पूरी तरह से व्यर्थ कर रहे हैं; वे सिर्फ प्रस्तुति के लिए कर रहे हैं, वे वास्तव में फ़ाइल में नहीं कर रहे हैं - Facebook HTML टैग के अंदर, कुछ भी है कि एक खुले वर्ग के साथ शुरू होता है नोटिस और फिर एक शब्द एक टैग कहा जाता है. HTML टैग के अंदर तो जाहिरा तौर पर एक सिर टैग और एक शरीर टैग है. सिर टैग के अंदर अब Facebook के लिए एक पूरी गड़बड़ है क्योंकि वे मेटाडाटा और विपणन और विज्ञापन के लिए अन्य बातों के एक बहुत कुछ है. लेकिन अगर हम नीचे स्क्रॉल, नीचे, नीचे, नीचे चलो, देखने के लिए जहां यह है. यह यहाँ है. यह एक कम से कम कुछ हद तक परिचित है. फेसबुक के मुख पृष्ठ का शीर्षक है, अगर तुम कभी अपने शीर्षक पट्टी में टैब में देखो, फेसबुक के लिए आपका स्वागत है - में प्रवेश करें, साइन अप या अधिक जानें. क्या आप क्रोम शीर्षक पट्टी में देखना होगा, और है कि कैसे यह कोड में प्रतिनिधित्व किया है. अगर हम सिर में और कुछ की अनदेखी, एक वेब पेज की हिम्मत की सबसे शरीर में हैं, और यह पता चला है कि फेसबुक के कोड के लिए और अधिक जटिल लग रहा है ज्यादातर चीजों की तुलना में हम शुरू में लिखने के लिए सिर्फ इसलिए कि यह वर्षों में बनाया गया है हूँ, लेकिन वहाँ स्क्रिप्ट टैग, जावास्क्रिप्ट कोड की एक पूरी बहुत है, कि बहुत इंटरैक्टिव वेबसाइट बनाता है: स्थिति तुरंत जावास्क्रिप्ट जैसी भाषाओं का उपयोग कर अद्यतन देखने. वहाँ एक div कुछ कहा जाता है, जो एक पृष्ठ के एक प्रभाग है. लेकिन इससे पहले कि हम कि विस्तार करने के लिए मिलता है, चलो बाहर ज़ूम करने की कोशिश और Facebook 1.0 का एक सरल संस्करण को देखो, इतनी बात करने के लिए. यहाँ नमस्ते दुनिया, वेब पृष्ठों की है. यह बहुत शीर्ष पर कि DOCTYPE घोषणा है जो एक थोड़ा बाकी सब से अलग है. और कुछ भी नहीं है हम एक वेब पेज में लिखने <के साथ शुरू करने के लिए जा रहा है! उस लाइन को छोड़कर वहाँ और कुछ HTML में टिप्पणी बुलाया के लिए छोड़कर. लेकिन सबसे अधिक भाग के लिए, एक वेब पेज में सब कुछ खुला ब्रैकेट, कीवर्ड, बंद कोष्ठक है. इस मामले में आप वेब संभव पृष्ठों की सरलतम देख सकते हैं. HTML टैग एक सिर टैग होता है और यह शरीर टैग होता है, लेकिन नोटिस कि शुरू करने और रोकने के टैग की इस धारणा है. यह HTML के लिए शुरू टैग है, यह करीब टैग या अंत टैग है. सूचना है कि वे समझ में विपरीत की तरह कर रहे हैं कि करीब टैग या अंत टैग यह आगे खुद के अंदर स्लेश. इस बीच, वहाँ एक खुला सिर टैग और यहाँ एक करीबी सिर टैग यहाँ है. वहाँ एक खुला शीर्षक और एक करीबी शीर्षक टैग यहाँ है. तथ्य यह है कि मैं एक लाइन, विशुद्ध रूप से मनमाना पर शीर्षक डाल दिया है. यह सिर्फ जैसे कि यह अच्छी तरह से एक लाइन पर फिट होगा देखा, तो मैं एक दो बार दर्ज करें से टकराने की जहमत नहीं उठाई. इस बीच, शरीर मैंने किया था बस कभी इतना स्पष्ट हो इंडेंट. सूचना है कि HTML एक सुंदर गूंगा भाषा है. वास्तव में, पहले दिन में वापस WYSIWYG संपादक थे और माइक्रोसॉफ्ट वर्ड जहाँ आप कह सकते हैं, "इस साहसिक तिर्छा बनाने के लिए" आप वास्तव में निबंध में थोड़ा आदेश टाइप 20 + साल पहले जिससे आप कहेंगे, "इस पाठ को बोल्ड बनाने शुरू इस पाठ को बोल्ड बनाना बंद करो." "इस पाठ तिर्छा बनाने शुरू इस पाठ तिर्छा बनाना बंद करो." यही कारण है कि HTML या किसी भी मार्कअप भाषा क्या है. यह पहली टैग कहते हैं, "अरे, ब्राउज़र यहाँ कुछ HTML आता है." अगले टैग कहते हैं, "अरे, ब्राउज़र यहाँ सिर, अपने वेब पेज के हैडर आता है." "अरे, ब्राउज़र. शीर्षक आता है." और फिर यहाँ पर, "अरे, ब्राउज़र कि यह खिताब के लिए है." तो यह है कि ब्राउज़र के लिए नहीं रह हैलो से अधिक अक्षर प्रदर्शित जानता है, दुनिया शीर्षक पट्टी में. इस बीच, यह कहता है, "यह सिर के लिए है." यह कहते हैं, "यहाँ शरीर आता है यहाँ वास्तविक शरीर है." सचमुच, शब्दों हैलो दुनिया. और, यह यहाँ का कहना है कि यह शरीर के लिए है कि यह HTML के लिए है. " तो ब्राउज़र सुंदर गूंगा कर रहे हैं. वे सिर्फ यह ऊपर से नीचे सामान, सही करने के लिए छोड़ दिया पढ़ा है, और वास्तव में वे क्या करने के लिए कहा जाता है. वास्तव में यहाँ एक छोटा सा उदाहरण है. चलो मुझे अपने मैक पर कार्यक्रमों का सरलतम यहाँ खोलने, अर्थात् TextEdit. विंडोज पर आप Notepad.exe का उपयोग कर सकते हैं. लेकिन यह सब आप वेब पेज बनाने शुरू करने की जरूरत है. मुझे आगे जाना है और बस कॉपी और इस फाइल में इस कोड को पेस्ट करने के लिए जा रहा हूँ. मुझे आगे जाना है और इसे अपने डेस्कटॉप पर बचाने के लिए जा रहा हूँ, और मैं लिए hello.html के रूप में इस को बचाने के लिए जा रहा हूँ, और अब फ़ाइल hello.html नाम है. यहाँ यह अपने डेस्कटॉप पर है. मुझे अब एक ब्राउज़र में जाने के लिए और ब्राउज़र में फ़ाइल खींचें. और देखा, यहाँ मेरी बहुत पहले वेब पेज है. सूचना है कि टैब के शीर्षक हैलो है, शीर्षक टैग के अनुसार दुनिया, नोटिस और कि हैलो, दुनिया में अपने वेब पेज के शरीर है, और लुभाने हू, मैं इंटरनेट पर हूँ. मैं वास्तव में सही नहीं कर रहा हूँ, क्योंकि इंटरनेट पर इस फाइल नहीं है. यह है कि विशेष रूप से पथ पर अपने स्थानीय हार्ड ड्राइव पर होना होता है. लेकिन विचार ही है. अब हम सभी की जरूरत है एक वेब सर्वर जो इसे अपलोड करने के लिए है. लेकिन पहले हम वास्तव में एक छोटे से अधिक जटिलता और एक छोटे से अधिक stylization परिचय. यह एक सरल, अगर बोरिंग, वेब पेज है. यह जाता है वहाँ टैग हम का उपयोग कर सकते हैं, अन्य प्रकार के होते हैं. उदाहरण के लिए, पीले रंग में यहाँ मैं 2 नए टैग शुरू की है. हम बहुत इन आज के साथ खेलने के लिए नहीं है, लेकिन नोटिस जाएगा कि लिंक टैग किसी भी तरह बाकी सब से अलग दिखता है. लिंक टैग लेता है क्या गुण कहा जाता है, और एक विशेषता कुछ है कि एक टैग के व्यवहार को संशोधित है. नाम, लिंक के इस मामले में यह सबसे अच्छा विकल्प नहीं है, क्योंकि यह व्यर्थ की तरह, लेकिन इस कड़ी टैग कहते हैं, अनिवार्य रूप से, अपने वेब पेज के अंदर styles.css बुलाया फ़ाइल में शामिल हैं. आप इस के रूप में अनुरूप लगता है कि सी # निर्देश शामिल कर सकते हैं. Styles.css एक अलग भाषा में बात कर रहा है पूरी तरह से है कि हम आज के साथ नहीं खेलेंगे, लेकिन यह सौंदर्यशास्त्र के लिए है: फ़ॉन्ट आकार, रंग, padding, खरोज, मार्जिन, और सौंदर्यशास्त्र विस्तार की उस तरह की सभी. इस बीच, स्क्रिप्ट टैग कार्यात्मक समान है, बजाय शामिल सीएसएस, उस भाषा है, लेकिन यह एक और भाषा, जावास्क्रिप्ट शामिल हैं. तो दूसरे शब्दों में, इन 2 टैग के साथ मैं अंत में करने के लिए अपने वेब पेज लिखने में सक्षम हो जाएगा लेकिन यह भी कोड में खींच कि मैं या किसी और लिखा है इतना है कि हम अन्य लोगों के कंधों पर खड़े हो सकते हैं, हम अच्छा डिजाइन अभ्यास कर सकते हैं, आम कोड बाहर फैक्टरिंग. यदि मैं 10 अलग वेब पृष्ठों मिल गया है, इसका मतलब है कि मेरे कुछ सौंदर्यशास्त्र # एक अलग फाइल में शामिल हैं, जैसे बहुत सकारात्मक असर बाहर हो सकता है. इसलिए हम वहाँ हो रही है. लेकिन वास्तव में पहले इस फाइल के साथ और अधिक दिलचस्प कुछ करते हैं. फिर, यह सिर्फ TextEdit है. मैं तकनीकी रूप से इंटरनेट पर अभी तक नहीं कर रहा हूँ, लेकिन हम वहाँ मिल जाएगा. मैं हैलो, दुनिया एक छोटे से bolder की तुलना में यह है करना चाहते हैं. तो हैलो, मनमाने ढंग से बोल्ड के लिए कहना. फिर, कहानी एक ही है: हैलो, अल्पविराम, इस साहसिक शुरू करते हैं, दुनिया तो बोल्ड में मुद्रित हो जाता है, और इस का मतलब है बोल्ड में इस मुद्रण बंद करो. मुझे आगे जाना है और मेरी फाइल को बचाने, क्रोम करने के लिए वापस जाओ, मैं सिर्फ इतना हम इसे बेहतर देख सकते हैं में ज़ूम करेंगे, और पुनः लोड करें, और आप देखेंगे कि दुनिया बोल्ड में अब है. वेब hyperlinks के बारे में है, तो चलो आगे जाना है और इस करते हैं: मेरी पसंदीदा वेबसाइट है, चलो कहते हैं, youtube.com. सहेजें, पुनः लोड. ठीक है. वहाँ वेबसाइट की भयानकता के अलावा अब कुछ समस्या है. 1, मुझे यकीन है कि मैं यहाँ दर्ज मारा हूँ. और मैंने किया. मैं न केवल हिट दर्ज करें, मैं भी दांतेदार बना, अभ्यास हम शैली के बारे में क्या किया गया उपदेश है, लेकिन मेरी दुनिया के लिए है. तो यह क्यों होता है? ब्राउज़र्स केवल क्या तुम उन्हें बताने के लिए. मैं ब्राउज़र नहीं बताया है, "तोड़ यहाँ लाइनों डालें. पैरा यहाँ को तोड़ने के." ब्राउज़र तो, यह अगर मैं 30 बार वापसी का मारा कोई फर्क नहीं पड़ता है, यह अभी भी दुनिया के लिए मेरा अधिकार बगल में रखा जा रहा है. क्या मैं वास्तव में यहाँ क्या करना है कुछ ऐसा कहना है,
एक पंक्ति विराम डालने. और वास्तव में, एक पंक्ति विराम एक अजीब बात की तरह है क्योंकि तुम सच में एक और लाइन करने के लिए आगे बढ़ नहीं शुरू कर सकते हैं, तो कुछ करते हैं, और फिर एक नई लाइन के लिए आगे बढ़ बंद करो. यह एक परमाणु आपरेशन की तरह है. आप या तो इसे करते हैं या नहीं. आप हिट दर्ज करें या नहीं. तो br एक अलग टैग का एक छोटा सा है, और इसलिए मैं दोनों खोलने की तरह है और इसे बंद करने की जरूरत है सभी में एक बार. वाक्यविन्यास के लिए है कि यह है. तकनीकी तौर पर, आप HTML के कुछ संस्करणों में इस तरह से कुछ कर सकता है, लेकिन यह सिर्फ मूर्ख है क्योंकि वहाँ कोई कारण नहीं है शुरू करने के लिए और कुछ रोक अगर आप के बजाय एक ही बार में यह सब कर सकते हैं. एहसास है कि HTML5 सख्ती से इस स्लेश की आवश्यकता नहीं है, ताकि आप पुस्तकों और ऑनलाइन संसाधनों है कि यह नहीं है देखेंगे, लेकिन अच्छे उपाय के लिए चलो समरूपता है कि हम इस प्रकार अब तक देखा है अभ्यास. इसका मतलब यह है कि दोनों टैग खोला और बंद है. तो अब मुझे मेरी फाइल को बचाने के लिए, यहाँ वापस जाना है. ठीक है, तो यह बेहतर छोड़कर वेब मुझे पता है, देखने के लिए शुरू हो रहा है तरह के क्लिक करने योग्य है, और अभी तक यहाँ यूट्यूब के लिए कुछ भी करने के लिए नेतृत्व की नहीं लगती. ऐसा इसलिए है क्योंकि भले ही यह एक कड़ी की तरह लग रहा है, से प्रति ब्राउज़र है कि पता नहीं, तो मैं ब्राउज़र का कहना है कि यह एक कड़ी है. तरीका यह करने के लिए एक लंगर टैग का उपयोग करने के लिए है: <अति संदर्भ है, जो कह रही है एक लिंक के पुराने स्कूल तरीका है के लिए एक href, = "Http://www.youtube.com"> और मुझे एक नई लाइन के लिए यह सिर्फ इतना कदम यह थोड़ा और अधिक पठनीय है, और मैं फ़ॉन्ट का आकार छोटा होगा. हूँ मैं अभी तक किया है? नहीं इस विरोधाभास होने जा रहा है. इस टैग, लंगर टैग, वास्तव में एक विशेषता ले करता है, जो अपने व्यवहार को संशोधित करने, और उस विशेषता के मूल्य जाहिरा तौर पर यूट्यूब यूआरएल है. लेकिन (वन और प्राणि) डाइकोगैमी नोटिस है कि सिर्फ इसलिए कि यूआरएल आप जा रहे हैं, इसका मतलब यह नहीं है कि शब्द है कि आप underlining कर रहे हैं और एक लिंक बनाने है. बल्कि, यह कुछ इस तरह हो सकता है. तो मैं इस शब्द के करीब लंगर टैग का उपयोग करके एक हाइपरलिंक बनाने को रोकने के लिए कहना है. मैं यह नहीं कर रहा हूँ. 1, यह बस हर समय की बर्बादी हो सकता है और यह आवश्यक नहीं है. एक टैग को बंद करने के लिए, आप केवल टैग के नाम पर फिर से उल्लेख है. आप गुण के किसी भी उल्लेख नहीं है. तो चलो बचाने के लिए है कि, वापस जाओ. ठीक है, देखा, अब यह नीले और hyperlinked. अगर मैं इसे क्लिक करें, मैं वास्तव में YouTube पर जाए. तो भले ही अपने वेब पेज इंटरनेट पर नहीं है, यह HTML कम से कम है, और अगर हम इंटरनेट को पकड़ने के, हम वास्तव में youtube.com पर यहीं खत्म होगा. और मैं वापस जाने के लिए और यहाँ अपने वेब पेज है. लेकिन इस नोटिस. यदि आप कभी भी स्पैम या फिशिंग आक्रमण मिल गया है, अब आप सिर्फ पांच मिनट के बाद क्षमता के लिए भी ऐसा ही है. हम यहाँ से जाने के लिए और www.badguy.com की तरह कुछ कर सकते हैं या जो भी ढांचे के रूप में वेबसाइट है, तो आप कह सकते हैं कि अपने पेपैल खाते सत्यापित. [हँसी] और अब इस badguy.com, जो मैं पर क्लिक करने के लिए नहीं जा रहा हूँ करने के लिए जाना जा रहा है क्योंकि मुझे पता नहीं है जहां जाता है कि है. [हँसी] लेकिन अब हम वास्तव में वहाँ अंत करने की क्षमता है. तो हम वास्तव में सिर्फ सतह खरोंच करने के लिए शुरू कर रहे हैं. हम से प्रति नहीं प्रोग्रामिंग कर रहे हैं, हम मार्कअप भाषा में लिख रहे हैं. लेकिन जैसे ही हम बाहर HTML में हमारे शब्दावली दौर, हम PHP, एक वास्तविक प्रोग्रामिंग भाषा मिलवा देंगे कि हमें HTML उत्पन्न करने के लिए स्वचालित रूप से अनुमति के लिए, सीएसएस स्वतः उत्पन्न होगा, तो हम बुधवार को शुरू करने के लिए लागू कर सकते हैं का कहना है कि, अपने स्वयं के खोज इंजन और अधिक. लेकिन दिन के एक जोड़े में उस पर अधिक है. हम आप तो देखेंगे. [CS50.TV]