1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [週7] 2 00:00:02,440 --> 00:00:04,730 [デビッド·J·マラン - ハーバード大学] 3 00:00:04,730 --> 00:00:07,490 [これはCS50です。 - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 かしこまりました。お帰りなさい。これはCS50であり、これは7週の始まりです。 5 00:00:12,280 --> 00:00:14,690 ちょっとアナウンスのカップル: 6 00:00:14,690 --> 00:00:18,150 Pset5は、現在進行中である、またはすぐにしなければならない 7 00:00:18,150 --> 00:00:21,590 とはっきり言って、私に言わせて、これは、より厳しいレベルになる傾向がありません 8 00:00:21,590 --> 00:00:24,460 コー​​スの問題セットのため、これが今の私が言っておきます 9 00:00:24,460 --> 00:00:28,190 今週はこれまで以上にあなたがするまで待機しないように、水曜日の夜は、言う 10 00:00:28,190 --> 00:00:29,920 または木曜日の夜はインチダイブする 11 00:00:29,920 --> 00:00:32,369 これは間違いなく面白いPSETです。我々は、それが楽しいことだと思います。 12 00:00:32,369 --> 00:00:36,110 あなたは実際にそれが完全に正しい取得し、いわゆるビッグボードに挑戦することができた場合は、 13 00:00:36,110 --> 00:00:39,830 あなたはもちろんのスタッフの何人かと知恵と一致する機会があるでしょう 14 00:00:39,830 --> 00:00:41,620 とクラスメートの一部。 15 00:00:41,620 --> 00:00:44,670 何がビッグボードであることは、一度、あなたのスペルチェッカが動作するようになったです 16 00:00:44,670 --> 00:00:48,860 あなたは、次のコマンドを実行した後cs50.netに行くことができるでしょう 17 00:00:48,860 --> 00:00:52,430 純粋にオプトインした後、時間の量とRAMの量より 18 00:00:52,430 --> 00:00:56,130 あなたの実装で使用されていることを当然のホームページにここに展示されます。 19 00:00:56,130 --> 00:00:59,740 あなたはここで、これらの人々の全体の束がスタッフとしてリストされていることに気づくでしょう 20 00:00:59,740 --> 00:01:04,220 週末以来、スタッフはお互いを出し抜こうとするの楽しいだろうと思った。 21 00:01:04,220 --> 00:01:07,390 だからここでの目標は、スタッフをしのぐことではないことを認識しています。 22 00:01:07,390 --> 00:01:09,790 でも、私は13番でここだけです。 23 00:01:09,790 --> 00:01:13,790 純粋に選ぶが、それはどれだけ少ないRAM見る機会だ 24 00:01:13,790 --> 00:01:16,790 とどのようにいくつかのCPU秒あなたは向かいあってクラスメートの一部を使用することができます。 25 00:01:16,790 --> 00:01:20,540 >> そして私は、そのケヴィンマイケル·シュミットを認めるよ 26 00:01:20,540 --> 00:01:23,750 現在TFの一つとしてナンバー1の位置では、 27 00:01:23,750 --> 00:01:28,120 これは我々が不可能と呼んでいる実装です 28 00:01:28,120 --> 00:01:32,700 彼はローディングのためにほぼ0のRAMとほぼ0秒を使っていることを考えれば。 29 00:01:32,700 --> 00:01:35,670 だから我々は、ケビン·オフラインの世話をします。 [笑い] 30 00:01:35,670 --> 00:01:40,950 ケビンはここのテストに入れていることは確かなスキルがあります。 31 00:01:40,950 --> 00:01:45,280 我々はあまりにもやるだろうと思っていたことの一つは、CS50xが進行中の週であるようになりました 32 00:01:45,280 --> 00:01:49,520 そしてあなたたちはできるだけ多くのこれらの学生であるように、この実験の一部です。 33 00:01:49,520 --> 00:01:53,720 私たちは、まっさらのプロジェクトを提出することも同様であった、彼らのPSET0の一部としてそれらを求めてきました 34 00:01:53,720 --> 00:01:58,280 のそれらへの関心 - ゲーム、インタラクティブアートの作品、アニメーションなど - 35 00:01:58,280 --> 00:02:03,700 1から2分のビデオに、彼らが希望した場合、世界に挨拶している人は、実際にされています。 36 00:02:03,700 --> 00:02:06,780 私はあなたと一緒にこれまで提出されているビデオだけのカップルを共有したいと思っ 37 00:02:06,780 --> 00:02:10,759 私たちのために、少なくともスタッフに、それは本当にエキサイティングだったため 38 00:02:10,759 --> 00:02:14,220 そして世界中からこれらの人々を見て感激 - 世界中の国々 - 39 00:02:14,220 --> 00:02:18,160 インターネット上のコンピュータサイエンスのコースに、すべてのものの多くが、チューニング、 40 00:02:18,160 --> 00:02:20,410 彼らは自分の研究を継続したいので、それがあるかどうか、 41 00:02:20,410 --> 00:02:22,300 彼らは、新しい方向に自分のキャリアを利用したい 42 00:02:22,300 --> 00:02:24,390 彼らは、自分の知識のギャップを埋めたい 43 00:02:24,390 --> 00:02:27,190 君たちは、おそらくここにいたのと同じ理由のいくつかはあまり。 44 00:02:27,190 --> 00:02:31,090 >> だから私はここであなたに、そのような生徒を与える。あなたは、ボリュームを少しだけ上げることができる。 45 00:02:31,090 --> 00:02:35,520 ここに私たちの学生の1分提出の一つです。 46 00:02:35,520 --> 00:02:40,380 こんにちは、世界。私はここマラガ、スペインのインダストリアル·エンジニアリングの学生です。 47 00:02:40,380 --> 00:02:45,840 私はコンピュータ科学を愛しているので、私は、私は本当に、このオンラインコースで興奮しています 48 00:02:45,840 --> 00:02:48,880 と私は本当に私はそれを探るために得ることを感謝しております。 49 00:02:48,880 --> 00:02:51,940 そして、私はあなたたちと同じすべてを学ぶことができるという事実は、やる 50 00:02:51,940 --> 00:02:57,040 その代わり、私はマラガで午前ハーバードにいるかのような、それがどのように素晴らしいですか? 51 00:02:57,040 --> 00:03:02,040 まあ、私はフェルナンドですが、これはCS50です。君たちを見てください。 52 00:03:02,040 --> 00:03:07,100 [笑い]私たちが特に気に入って別のクリップには、この紳士の英語が強くないことがわかります。 53 00:03:07,100 --> 00:03:11,520 彼はそれを機械翻訳していたように見え、翻訳自体は少し不完全であるので、 54 00:03:11,520 --> 00:03:15,790 しかし、これは、これまで同様に私たちのお気に入りの一つであった。 55 00:03:25,080 --> 00:03:29,980 [♪♪] 56 00:03:29,980 --> 00:03:32,370 こんにちは、世界。 [日本語で話し] 57 00:03:32,370 --> 00:03:39,830 [私の英語は非常に信頼性がないので、私は日本語であいさつをしなければなりません。] 58 00:03:39,830 --> 00:03:45,380 [私は岐阜の街からあなたへのメッセージをお届けしています。] 59 00:03:45,380 --> 00:03:49,820 [私が見られるように、20年ぶりに学生であることができます。] 60 00:03:49,820 --> 00:03:54,640 [私はこの機会とEDXを行ったハーバード大学に非常に感謝しています。] 61 00:03:54,640 --> 00:04:01,510 [ゴルフは連続したギターと私の好きな​​ものがあります。] [笑い] 62 00:04:01,510 --> 00:04:05,750 [♪♪] 63 00:04:05,750 --> 00:04:10,790 [なぜあなたは、私がcs50xに出席しようとしていたと思います。] 64 00:04:10,790 --> 00:04:14,990 [ハーバード大学、それは私の憧れです。] 65 00:04:14,990 --> 00:04:19,740 [私は日本に住んでいた遠い存在です場合は特に。] 66 00:04:19,740 --> 00:04:26,680 [私は、そのようなEDX時の存在を知ってすぐに試してみたかった。] 67 00:04:26,680 --> 00:04:32,500 [あなたがIの学習の年齢に関係しないそう思わない] 68 00:04:32,500 --> 00:04:38,350 [CS50は私の憧れです。私の名前はカズであり、これはCS50です。] 69 00:04:38,350 --> 00:04:43,090 [♪♪] [拍手と歓声] 70 00:04:43,090 --> 00:04:49,220 私たちのもう一つのお気に入りはここで誰かからこの提出しました。 71 00:04:51,070 --> 00:04:55,380 [♪♪] [マラン] Googleはこのミームに慣れていない場合。 72 00:04:55,380 --> 00:05:01,480 >> そして、最後に、多分愛らしい賞を獲得することを掲載してしまった他のカップル。 73 00:05:01,480 --> 00:05:06,820 [学生] AWW! >> [マラン]我々は、聞かなければならないだろう。これは短いですが、非常に密接に聞く。 74 00:05:08,580 --> 00:05:11,150 [女性話]あなたの名前は何ですか? >>ルイ。 75 00:05:11,150 --> 00:05:16,120 [女性話]これは何? >> [笑い] CS50。 [笑い] 76 00:05:16,120 --> 00:05:19,510 [マラン]彼はしかし、かかる2でした。 77 00:05:19,510 --> 00:05:22,240 ここでは、最後に行く。 78 00:05:23,030 --> 00:05:26,980 私の名前はルイであり、これはCS50です。 79 00:05:26,980 --> 00:05:30,250 [笑い]これはその後CS50xです。 80 00:05:30,250 --> 00:05:33,230 自宅に沿って続いている間あなたのそれらのすべてに感謝する 81 00:05:33,230 --> 00:05:35,620 誰がこれまで参加者をされています。 82 00:05:35,620 --> 00:05:39,510 今日、我々は、データ構造の議論を締めくくる 83 00:05:39,510 --> 00:05:41,160 最も基本的な、少なくともいくつかの、 84 00:05:41,160 --> 00:05:44,760 それから私達は、HTMLとWebプログラミングについての私達の会話を続ける。 85 00:05:44,760 --> 00:05:48,520 実際、我々はプログラミングの基礎を見ていくつかの過去7週間を費やしてきた - 86 00:05:48,520 --> 00:05:50,450 アルゴリズム、データ構造など - 87 00:05:50,450 --> 00:05:53,050 あなたがこれまで経験してきた可能性があるとC、 88 00:05:53,050 --> 00:05:57,060 必ずしも言語のほとんどはアクセスできません 89 00:05:57,060 --> 00:05:59,090 これらのアイデアのいくつかを実装すると。 90 00:05:59,090 --> 00:06:01,880 そこで、今週と来週出発してから、次の 91 00:06:01,880 --> 00:06:07,110 我々は最終的に、一般的にかなり低レベルの言語として知られている、Cからの移行ができるようになります 92 00:06:07,110 --> 00:06:11,190 物事レベルが高ければ高いほど、それらの間の、PHP、JavaScript、および様へ 93 00:06:11,190 --> 00:06:14,850 我々は過去数週間に渡って学んできたのと同じレッスンに頼るわかり、これ 94 00:06:14,850 --> 00:06:19,430 しかし、あなたは配列とハッシュテーブルのようなものを宣言し、検索やソートがわかります 95 00:06:19,430 --> 00:06:23,370 言語自体は、我々が使用して開始しますので、そんなに簡単になる 96 00:06:23,370 --> 00:06:25,290 より強力になるだろう。 97 00:06:25,290 --> 00:06:27,410 しかし、最初に、木々のアプリケーション。 98 00:06:27,410 --> 00:06:30,240 それは、情報を圧縮する必要があるとし、これらの日は非常に一般的です。 99 00:06:30,240 --> 00:06:34,770 どのようなコンテキストでは、デジタル情報のいくつかの種類を圧縮したいのでしょうか? 100 00:06:37,190 --> 00:06:39,670 >> うん。 >> [学生]は、Web経由で送信する必要がある場合。 101 00:06:39,670 --> 00:06:41,450 ええ、あなたがWeb上で何かを送信するときに使用します。 102 00:06:41,450 --> 00:06:44,950 あなたが大きなファイルをダウンロードする場合は、もう一方の端の誰かなら、それは理想的です 103 00:06:44,950 --> 00:06:48,760 zip形式、またはそのような何かを使用してそのファイルを圧縮した 104 00:06:48,760 --> 00:06:53,760 ので、そうでなければ伝えられるかもしれないより少ないビットを送信している。 105 00:06:53,760 --> 00:06:55,500 それでは、どのように情報を圧縮しますか? 106 00:06:55,500 --> 00:07:00,540 デフォルトで必要とされるよりも少ないビットを使用することにそれはつまるところ。 107 00:07:00,540 --> 00:07:03,220 週0と1に戻ると思うので、しかし、これは奇妙なことの一種である 108 00:07:03,220 --> 00:07:07,370 我々は、約ASCIIおよびバイナリ話し、我々は、特に約アスキー話したとき 109 00:07:07,370 --> 00:07:10,690 アルファベットの文字を表現するために8ビットを使用するなど、 110 00:07:10,690 --> 00:07:16,120 手紙は65で表されるように、数97です小文字 111 00:07:16,120 --> 00:07:21,210 しかし、あなたが65または97を表すとすると、7ビットまたは8ビットを使用しています。 112 00:07:21,210 --> 00:07:24,120 しかし、漁獲量は、英語のアルファベットのいくつかの文字があるということです 113 00:07:24,120 --> 00:07:26,230 他の人と同じくらい普及していないこと。 114 00:07:26,230 --> 00:07:31,600 Zは人気のある、Qはその人気のすべてではないことをすべてではありませんが、Eは超人気があります。 115 00:07:31,600 --> 00:07:37,280 そして、まだこれらの文字のすべてのために、デフォルトでは、世界は、8ビットの同じ番号を使用しています。 116 00:07:37,280 --> 00:07:42,690 だから、賢くあれば、代わりにすべての文字に8ビットを使用するのではなく、しなかったでしょう 117 00:07:42,690 --> 00:07:47,440 も、最もまれに、QとZのように使用 118 00:07:47,440 --> 00:07:51,910 私たちは何とEとSと最も人気のある文字に対してより少ないビットを使用した場合 119 00:07:51,910 --> 00:07:55,000 と、あまり人気の手紙のためのより多くのビットを使用 120 00:07:55,000 --> 00:07:57,770 一般的なケースのために最適化されてみましょうアイデア、 121 00:07:57,770 --> 00:08:01,160 これは、ほとんど起こるか最適化しようとのコンピュータサイエンスのテーマです 122 00:08:01,160 --> 00:08:05,310 そして、ええ、起こるかもしれないという事にもう少し時間が、もう少しスペースを費やす 123 00:08:05,310 --> 00:08:07,680 必ずしもそうではないように頻繁に。 124 00:08:07,680 --> 00:08:09,330 それでは例を見てみましょう。 125 00:08:09,330 --> 00:08:12,610 >> 我々は、かなり効率的に情報をエンコードする必要があるとします。 126 00:08:12,610 --> 00:08:15,090 あなたは、モールス信号について少し何かを知って育ってきたかもしれない 127 00:08:15,090 --> 00:08:17,450 とオッズは、あなたが実際のコードを知りませんでしたアール 128 00:08:17,450 --> 00:08:21,750 しかし、あなたはそれがドットとダッシュの少なくともこのシリーズのことを思い出すかもしれない。 129 00:08:21,750 --> 00:08:26,640 例えば、E - これはかなり効率的なコーディング、予告その最も人気のある手紙です - 130 00:08:26,640 --> 00:08:28,980 ビープ音の最短を使用しています。 131 00:08:28,980 --> 00:08:31,740 モールス信号は、すべてのビープ·ビープ·ビープ·ビープ·ビープ音以外について、トーンを保持している 132 00:08:31,740 --> 00:08:34,799 時間または長い期間の短い期間のために。 133 00:08:34,799 --> 00:08:40,330 のようなドットで示されるEは、超短いビープ音、ビープ音だけであり、それがEを表すことになります 134 00:08:40,330 --> 00:08:43,960 これとは対照的に、Tはビープ音のように、長いビープ音であろう[音長引か] 135 00:08:43,960 --> 00:08:45,710 それがTを表すことになります 136 00:08:45,710 --> 00:08:48,840 あなたはZを見れば、対照的に、しかし、そのためには、まだかなり短いです 137 00:08:48,840 --> 00:08:52,690 Zを表現するためには、ビープ音、ビープ音[長い音]、ビープ音、ビープ音[短い音]に行くだろう。 138 00:08:52,690 --> 00:08:55,360 それはあまり一般的ではないですので、だからそれは長いです。 139 00:08:55,360 --> 00:08:58,150 しかし、ここに落とし穴がモールス符号がビット欠陥があるということです 140 00:08:58,150 --> 00:09:00,610 という点で、それはすぐに解読可能ではありません。 141 00:09:00,610 --> 00:09:07,350 例えば、あなたがワイヤーのビープ音のいくつかの終わりに聞くと仮定[短い]、ビープ音[長い]。 142 00:09:07,350 --> 00:09:12,480 私はどのようなメッセージを受け取りましたか?ドットとダッシュ。それは何を表しているのでしょうか? 143 00:09:12,480 --> 00:09:15,330 [学生] A. >> [マラン]たぶん。 144 00:09:15,330 --> 00:09:18,270 また、TでEを続くことが 145 00:09:18,270 --> 00:09:23,390 言い換えれば、モールス信号、それはコーナーケースを最適化する、この原理を活用しても 146 00:09:23,390 --> 00:09:26,250 それは即時のdecodabilityに自分自身を貸すことはありません。 147 00:09:26,250 --> 00:09:29,850 すなわち、これらのドットとダッシュを聞いまたは受信している人間である 148 00:09:29,850 --> 00:09:34,540 改行は文字の間にあるどこに、どういうわけか、把握する必要があります 149 00:09:34,540 --> 00:09:39,660 それらの改行がどこにいるかわからない場合は、ET(またはその逆)のために混乱する可能性があるためです。 150 00:09:39,660 --> 00:09:43,880 >> だから、あなたは何を行う可能性があります?モールスコードであなただけの各文字間の休止でした。 151 00:09:43,880 --> 00:09:47,660 しかし、一時は物事をスピードアップの全体のポイントにカウンターのようなものです。 152 00:09:47,660 --> 00:09:52,880 この悪い状況にはありませんでしたどこに私たちはコードを思い付いたので、代わりに何かあれば 153 00:09:52,880 --> 00:09:56,570 ここで、Eは、接頭辞、例えば、です - 154 00:09:56,570 --> 00:10:00,020 言い換えれば、我々はパターンが人気のある手紙にはまだ不足していることを確認して作ることができれば 155 00:10:00,020 --> 00:10:04,850 あまり人気のない手紙は長いですが、どんな可能な混乱はありません? 156 00:10:04,850 --> 00:10:08,930 ハフマンの名前で男は何年も前にハフマン符号化と呼ばれるこの方式を考案 157 00:10:08,930 --> 00:10:12,390 実際に私たちが話して少しの時間を費やしてきたデータ構造の一つを利用している 158 00:10:12,390 --> 00:10:16,560 この一週間、特に木、バイナリツリーのその - 159 00:10:16,560 --> 00:10:19,710 それはもう2人もの子供を育てていることをバイナリツリーの意味。 160 00:10:19,710 --> 00:10:22,720 それは多分多分左の子、右の子を持っており、それはそれだ。 161 00:10:22,720 --> 00:10:26,510 だから、誰かがメッセージを送信しようとしているだけの議論のために仮定し 162 00:10:26,510 --> 00:10:31,270 それはこのようになります。それは完全なナンセンスだが、それはように、BS、CS、DS、そしてESの構成だ。 163 00:10:31,270 --> 00:10:34,890 そして、あなたが実際にように、BS、CS、DS、とEsのすべてをカウントアップする場合 164 00:10:34,890 --> 00:10:36,870 その後、手紙の総数で割る 165 00:10:36,870 --> 00:10:42,710 ここで、この小さなグラフは、文字の45%がESであり、20%のようだと言っている 166 00:10:42,710 --> 00:10:45,010 10パーセントペンションなど。 167 00:10:45,010 --> 00:10:47,330 だから、他の言葉で、そこにその引用符で囲まれた文字列を想定して 168 00:10:47,330 --> 00:10:49,080 あなたが送信するだけでいくつかのメッセージです。 169 00:10:49,080 --> 00:10:52,180 それは、我々はできるだけ少ない文字として使用できるだけので、ナンセンスであることを起こる 170 00:10:52,180 --> 00:10:55,220 それは、Eは最も人気のあるままであることを確かにそうだと 171 00:10:55,220 --> 00:11:01,450 AとBとCはアルファベットのこれら5文字の、少なくとも、少なくとも人気があります。 172 00:11:01,450 --> 00:11:04,040 だから、どのように我々は、エンコーディングを考え出すについて行くことができる 173 00:11:04,040 --> 00:11:08,430 バイナリエンコーディング、これらの文字のそれぞれについて、0と1のパターン 174 00:11:08,430 --> 00:11:14,820 Eは短いパターンであり、もしかしたらBとCは、わずかに長いパターンであるような方法で 175 00:11:14,820 --> 00:11:19,270 もう一度、アイデアは、我々はほとんどの時間より少ないビットを使用したいということである 176 00:11:19,270 --> 00:11:21,790 とだけたまに多くのビット。 177 00:11:21,790 --> 00:11:26,070 ハフマン符号化によると、あなたは木の森を作成することができます。 178 00:11:26,070 --> 00:11:31,190 木々やまたそれらを構築​​するプロセスを含むここにストーリーラインのソートがあります。 179 00:11:31,190 --> 00:11:32,420 始めましょう。 180 00:11:32,420 --> 00:11:36,140 >> 私は、あなたがこの森で開始することを提案する、いわば、5木の、 181 00:11:36,140 --> 00:11:38,260 これらの各々は、かなり愚かなツリーです。 182 00:11:38,260 --> 00:11:42,800 サークルによってここに表されるように、ツリーは、1つのノードで構成されています。 183 00:11:42,800 --> 00:11:45,310 だから、これらのものの各々は、C言語の構造かもしれない 184 00:11:45,310 --> 00:11:50,200 と内部のC言語の構造体は、周波数カウントを表すfloatかもしれない 185 00:11:50,200 --> 00:11:52,510 その後多分文字を表すChar。 186 00:11:52,510 --> 00:11:56,470 だから、今は、より高いレベルのただの古いC言語の構造体として、これらのノードを考えるけど。 187 00:11:56,470 --> 00:12:01,230 これは、5木、単一のノードだけを持っている人のそれぞれの林です。 188 00:12:01,230 --> 00:12:06,830 ハフマン提案は、我々はそれらの木を組み合わせるために開始することは何ですか 189 00:12:06,830 --> 00:12:11,140 少し大きい木に最小の度数を持っている 190 00:12:11,140 --> 00:12:13,490 新しいルートノードとそれらを接続することにより、。 191 00:12:13,490 --> 00:12:17,560 そこでここでは手紙の中で、利便性のために、私は左から右に並べたことがわかり、 192 00:12:17,560 --> 00:12:21,420 それは厳密には必要であり、予告とは限りませんが、その最小のノード 193 00:12:21,420 --> 00:12:23,930 現在、10%と10%である。 194 00:12:23,930 --> 00:12:28,940 だからハフマンは、我々は新しい木にそれらの最小2ノードをマージすることを提案 195 00:12:28,940 --> 00:12:34,450 新しい親ノードを導入することにより、次にその親の左の子と右の子を与える 196 00:12:34,450 --> 00:12:37,720 ここで、Bは任意の左であり、Cは任意に右です。 197 00:12:37,720 --> 00:12:41,590 そして、ハフマンはさらにレッツは今ちょうど左の子を考えることを提案した 198 00:12:41,590 --> 00:12:44,790 0で表されるように、常にこれらの木の一つで 199 00:12:44,790 --> 00:12:47,890 番号1で表される、いつものように、右の子。 200 00:12:47,890 --> 00:12:50,680 >> あなたはあまりにも長い間あなたが一貫しているとして、それらを裏返すかどうかは関係ありません。 201 00:12:50,680 --> 00:12:54,650 それで、今、私たちはこの森の中で4本の木を持っている。 202 00:12:54,650 --> 00:12:58,050 そして、私は、左側のツリーなぜなら今や4と言う - 203 00:12:58,050 --> 00:13:00,570 そしてそれは、あまりそれがこのように成長するという意味では木ではありません 204 00:13:00,570 --> 00:13:05,170 それが今では0.2が二人の子供の親の一種である家系図のようなもっとだ - 205 00:13:05,170 --> 00:13:07,930 その親で我々は0.2を描いていることがわかります。 206 00:13:07,930 --> 00:13:13,370 私たちは、二人の子供の度数を追加し、新しいノードの総和与えてくれた。 207 00:13:13,370 --> 00:13:15,310 だから今我々は、ちょうどこのプロセスを繰り返します。 208 00:13:15,310 --> 00:13:19,490 2つの最小のノードを検索し、新しいツリーに参加する 209 00:13:19,490 --> 00:13:21,380 し、さらにこのプロセスを繰り返します。 210 00:13:21,380 --> 00:13:26,390 今、私たちはいくつかの候補者、20%、15%、さらに20%を持っています。 211 00:13:26,390 --> 00:13:29,780 この場合において、我々は均衡を破る必要があります。我々は、任意にそれを行うことができます。 212 00:13:29,780 --> 00:13:31,540 私達はちょうどそれを一貫して行う必要があります。 213 00:13:31,540 --> 00:13:33,760 このケースでは、私が勝手に、左に1と行くよ 214 00:13:33,760 --> 00:13:39,880 と私は今、私に35パーセントという新しい親を与えるために、20%と15%をマージ 215 00:13:39,880 --> 00:13:46,310 その右の子1であり、そして、今、私たちは森の中に、わずか3本の木を持っている0は、その左の子です。 216 00:13:46,310 --> 00:13:47,960 あなたは、おそらくこれがどこに行っているか見ることができます。 217 00:13:47,960 --> 00:13:51,150 我々はこのカップルを複数回繰り返す場合、我々は、ちょうど1つの大きなツリーを持っているつもりです 218 00:13:51,150 --> 00:13:53,900 辺が0と1で標識されているすべての。 219 00:13:53,900 --> 00:13:55,710 もう一度やってみましょう。 220 00:13:55,710 --> 00:14:02,600 35%は、そのツリーのルートです。 20パーセントと45パーセントなので、我々は35%および20%をマージしようとしている。 221 00:14:02,600 --> 00:14:05,610 今、私たちはここに、このツリーを持っています。私たちは一緒にそれらを追加して、我々は55%を持っています。 222 00:14:05,610 --> 00:14:07,910 今では森の中で2つだけの木があります。 223 00:14:07,910 --> 00:14:11,900 私たちは、この最後の1時間を行う、そして、できれば数学的にすべての周波数まで追加 224 00:14:11,900 --> 00:14:15,570 彼らは以来、私たちは、からそれらを計算しなければならないので100%にするには、Get-行く。 225 00:14:15,570 --> 00:14:17,960 そして今、我々は一本の木を持っています。 226 00:14:17,960 --> 00:14:20,580 だから、これはハフマン符号木です。 227 00:14:20,580 --> 00:14:24,400 それは一種の言葉にそこに到着する時間がかかったが、現実には、forループを使用することです 228 00:14:24,400 --> 00:14:27,620 または再帰関数を使用すれば、かなり速く、このことを構築することができました。 229 00:14:27,620 --> 00:14:32,440 だから今我々は、1つの新しいノードを持っており、これらの内部ノードのすべてがmallocされています 230 00:14:32,440 --> 00:14:34,690 おそらく、道に沿って。 231 00:14:34,690 --> 00:14:38,650 だから今、このツリーの最上部に、我々は100%を持っていますが、今、私たちはパスを持って気付く 232 00:14:38,650 --> 00:14:43,780 この新しい曾曾曾孫祖父母からひ孫曾曾孫のすべてに 233 00:14:43,780 --> 00:14:45,930 葉の全ての下部にある[すべての方法、。 234 00:14:45,930 --> 00:14:52,840 >> 私たちが今やろうとしていることは、順番に文字Eを表現することを提案されている 235 00:14:52,840 --> 00:14:55,670 我々は、単に数字の1を使用します。なぜですか? 236 00:14:55,670 --> 00:15:01,000 我々はEとして知られている葉への最終的なルートからこのツリーの下方向にトラバースしている場合があるため、 237 00:15:01,000 --> 00:15:06,050 ただ1つのエッジ、右端に従っており、右上の1で、もちろんラベルが付いていること。 238 00:15:06,050 --> 00:15:11,550 だからハフマンはこちら含意はバイナリでEのエンコーディングはわずか1でなければならないということでした。 239 00:15:11,550 --> 00:15:14,490 そして、それはかなり気に効率的です。本当にそれよりも小さいを取得することはできません。 240 00:15:14,490 --> 00:15:18,350 これとは対照的に、あなたは論理に従うならば、表現されようとしている 241 00:15:18,350 --> 00:15:21,610 代わりにビットのどのパターンで? 01。 242 00:15:21,610 --> 00:15:25,500 だからに到達するために、我々はルートから開始し、我々は左に行くと、次に我々は右に行く 243 00:15:25,500 --> 00:15:28,580 それは我々が0に続いて、次に1を意味します。 244 00:15:28,580 --> 00:15:32,810 だから我々はパターン0と1の文字を表すものとする。 245 00:15:32,810 --> 00:15:36,010 そして今、我々は既に即時decodabilityのプロパティを持って気付く 246 00:15:36,010 --> 00:15:38,090 我々は、モールスコードで持っていなかったこと。 247 00:15:38,090 --> 00:15:42,840 これらのパターンの両方がかなり不足しているにもかかわらず - Eは、1ビット、2ビットです - 248 00:15:42,840 --> 00:15:45,080 彼らはどちらか一方を、混同してはならないことに気付いた 249 00:15:45,080 --> 00:15:54,870 あなたは1を見ればそれはあなたが表示された場合は、Eがあるはずだため、0、それは明らかにAになるように持っている1 250 00:15:54,870 --> 00:15:58,410 同様に、Dは何ですか? 001。 251 00:15:58,410 --> 00:16:01,440 C言語とは何ですか? 0001。 252 00:16:01,440 --> 00:16:05,320 AとBは何ですか? 0000。 253 00:16:05,320 --> 00:16:09,550 そして再び、我々は気にすべての文字が葉であるため、 254 00:16:09,550 --> 00:16:13,890 そしてそれらのどれも、ルートからリーフへのパスに仲買人の一種ません 255 00:16:13,890 --> 00:16:18,760 2文字 '異なるエンコーディングをconflatingの危険性はありません 256 00:16:18,760 --> 00:16:22,300 これらのビットパターンのすべては決定論的であるためです。 257 00:16:22,300 --> 00:16:25,280 0000は常にBになります 258 00:16:25,280 --> 00:16:29,480 あなたが他の一文字を混乱させるかもしれないどこかの間にはノードがありません。 259 00:16:29,480 --> 00:16:31,150 だからここでの意味は何ですか? 260 00:16:31,150 --> 00:16:35,080 >> 最も人気のある手紙 - この場合にはEは - 最短符号化をたどっている、 261 00:16:35,080 --> 00:16:37,430 次の最短のエンコーディングを得ている、 262 00:16:37,430 --> 00:16:41,390 我々はすでに最初から知っていたBとCは、最も人気のない一種のだっ 263 00:16:41,390 --> 00:16:45,390 10%の周波数それぞれで、彼らは最長のエンコーディングを頂いております。 264 00:16:45,390 --> 00:16:49,410 それで、これは圧縮されたメッセージを送信したい場合は、ということである今では何を意味するのか 265 00:16:49,410 --> 00:16:51,950 インターネットや電子メール等で、 266 00:16:51,950 --> 00:16:56,730 むしろ標準のASCIIを使用するのではなく、ハフマンコード化されたメッセージを送ることができます 267 00:16:56,730 --> 00:17:01,720 あなたは文字Eを送信したい場合、それによってあなただけの単一ビットを送信します。 268 00:17:01,720 --> 00:17:05,680 送信したい場合は、2ビット、01の代わりに、8ビットの送信を送信 269 00:17:05,680 --> 00:17:10,190 別の8ビットなどに続いて別の8ビットが続きます。 270 00:17:10,190 --> 00:17:11,940 しかし、落とし穴がここにあります。 271 00:17:11,940 --> 00:17:17,079 それはちょうど、このツリーを構築し、AliceからBobに送信を開始するのに十分ではありません 272 00:17:17,079 --> 00:17:20,010 短いビットパターンは、ASCII文字列から、 273 00:17:20,010 --> 00:17:23,140 アリスはまた何のボブを通知しなければならないので、 274 00:17:23,140 --> 00:17:26,880 ボブは彼女の圧縮されたメッセージを読み取ることができることを行っている場合はどうなりますか? 275 00:17:26,880 --> 00:17:30,770 [聞き取れない生徒の応答] >>これは何ですか? 276 00:17:30,770 --> 00:17:32,310 [聞き取れない生徒の応答]木が何であるか。>> 277 00:17:32,310 --> 00:17:35,160 あるいはもっと具体的には、それらのエンコーディングが何であるか、 278 00:17:35,160 --> 00:17:39,010 この物語の中に、我々は1の時点で審判の判定を行った、特に以来。 279 00:17:39,010 --> 00:17:43,640 我々は2つ​​の異なる20%のノード間で任意に選択しなければならなかったことを覚えていますか? 280 00:17:43,640 --> 00:17:49,800 だから、ボブ、受信者は、単に自分でツリーを再構築することができそうではありません 281 00:17:49,800 --> 00:17:53,390 多分彼はほんの少し違ったアリスからツリーが作成されますので。 282 00:17:53,390 --> 00:17:56,670 また、ボブも、元のメッセージが何であるかを知らない 283 00:17:56,670 --> 00:18:00,770 アリスは彼を送信している唯一のものは、もちろん、圧縮されたメッセージであるた​​め。 284 00:18:00,770 --> 00:18:05,900 >> このような圧縮による漁獲量は、はい、アリスがビットの全体の多くを保存することができます、ということであるので、 285 00:18:05,900 --> 00:18:09,900 に対してEの1と01を送信することにより、等 286 00:18:09,900 --> 00:18:15,180 彼女はまた、マッピングは文字とビットの間には何かボブに知らせる必要があります 287 00:18:15,180 --> 00:18:19,620 私たちはASCIIを使用していないのであれば、彼らは明らかにもはや単にASCIIに依存することはできませんので。 288 00:18:19,620 --> 00:18:22,200 だから彼女はどちらか何とかして彼に木を送信することができます - 289 00:18:22,200 --> 00:18:26,600 のようなバイナリデータか何かのようにそれを保存して、それを書き留めて - 290 00:18:26,600 --> 00:18:30,280 それとも彼にマッピングを示し少しチートシート、Excelファイルを、送信してください。 291 00:18:30,280 --> 00:18:36,480 だから、圧縮の効果は本当にあなたが送信していることを前提としていたメッセージ 292 00:18:36,480 --> 00:18:40,230 、かなり大きいですが、少なくとも中規模 293 00:18:40,230 --> 00:18:42,180 あなたはスーパーショートメッセージを送信している場合があるため、 294 00:18:42,180 --> 00:18:45,390 あなたはちょうど私達がここに綴ることができる言葉であることを起こるBADのメッセージを、送信したい場合は、 295 00:18:45,390 --> 00:18:49,550 B-D、あなたはおそらく少ないビットを使用するつもりだ、 296 00:18:49,550 --> 00:18:53,130 あなたも木が何であるボブを知らせなければならない場合が、漁獲量はある 297 00:18:53,130 --> 00:18:57,530 またはそれらのエンコーディングが何であるかを、あなたはおそらく貯蓄のすべてを上回るとしている 298 00:18:57,530 --> 00:19:00,110 で始まるように圧縮されたものを持っていることの。 299 00:19:00,110 --> 00:19:02,210 だからそれは実際にあなたがしようとした場合に圧縮した場合することができます 300 00:19:02,210 --> 00:19:05,330 でもzipまたはファイル形式のようなもので、あなたは慣れているかもしれません - 301 00:19:05,330 --> 00:19:07,780 かなり小さなファイルであっても空のファイル - 302 00:19:07,780 --> 00:19:10,930 時には、これらのファイルは大きくなり、小さくないことがあります。 303 00:19:10,930 --> 00:19:14,320 しかし、現実的に、それは、唯一の小さなファイルサイズのために起こる 304 00:19:14,320 --> 00:19:16,920 ので、ギガバイトのファイルが2ギガバイトになることはないだろう; 305 00:19:16,920 --> 00:19:19,480 私たちは本当にバイトまたはほんのキロバイトを話している。 306 00:19:19,480 --> 00:19:22,330 >> ZIPのようないくつかのプログラムは、それを実現するのに十分スマートです 307 00:19:22,330 --> 00:19:24,590 "あなたはこれを圧縮して、より多くのビットを費やすつもりだ。" 308 00:19:24,590 --> 00:19:27,460 "私はすべてであなたのためにそれを圧縮する気ないようにしましょう​​。" 309 00:19:27,460 --> 00:19:30,160 だから、これはテキスト形式の圧縮、ちょうど一つの方法です。 310 00:19:30,160 --> 00:19:32,300 我々は、C言語でこのような何かを実装することができます 311 00:19:32,300 --> 00:19:35,370 例えば、ここに我々はこのツリー内のノードを表すかもしれませんどのように 312 00:19:35,370 --> 00:19:39,320 どこで我々が​​シンボルのchar型、周波数の浮動小数点値を持つ 313 00:19:39,320 --> 00:19:42,250 そして我々は、他のデータ構造、2ポインタ、と見てきたように 314 00:19:42,250 --> 00:19:47,080 NULLを指定することもでき、どちらを選んで左の子、右に1から1、 315 00:19:47,080 --> 00:19:50,850 しかしそうでない場合は、左の子と右の子を指します。 316 00:19:50,850 --> 00:19:55,130 ですから、これはその後、ハフマン符号化であり、それはあなたが情報を圧縮して行くことができる一つの方法だ 317 00:19:55,130 --> 00:19:57,880 そしてそれは確かに実装するのが最も簡単なの一つだ 318 00:19:57,880 --> 00:20:00,830 先週のデータ構造、言う、の文脈では、 319 00:20:00,830 --> 00:20:03,250 さらに洗練されたアルゴリズムが存在するのに 320 00:20:03,250 --> 00:20:08,220 それはあなたのデータをより洗練された突然変異を行うことができます。 321 00:20:08,220 --> 00:20:11,640 その後、木、バイナリツリー、またはテキストの圧縮に何か質問はありますか? 322 00:20:11,640 --> 00:20:15,590 [学生] 01への[聞こえない]分割する場合のように、そこにいくつかの曖昧さ 323 00:20:15,590 --> 00:20:19,160 その後、011は右、あいまいなのでしょうか? 324 00:20:19,160 --> 00:20:22,730 [聞こえない] >>良い質問です。曖昧。 325 00:20:22,730 --> 00:20:25,940 私はここにこの絵を参照することによって、まとめてみましょう。 326 00:20:25,940 --> 00:20:29,650 そのため、圧縮している文字の表現、 327 00:20:29,650 --> 00:20:32,850 このアルゴリズムの定義により、常に、葉のまま 328 00:20:32,850 --> 00:20:41,870 誤って複数の文字のプレフィックスのビット数と同じパターンを使用することは決してないだろう。 329 00:20:41,870 --> 00:20:46,740 だから、他の言葉で、あなたが心配している、それが生じるあいまいさ、のように聞こえる 330 00:20:46,740 --> 00:20:51,580 それによって001はBの開始またはCまたはそのような何かの始まりかもしれない。 331 00:20:51,580 --> 00:20:56,780 しかし、それは、アルファベットの文字のすべての我々はコード化していることに注意してくださいので、ケースにすることはできません 332 00:20:56,780 --> 00:20:58,290 葉にある。 333 00:20:58,290 --> 00:21:01,910 >> あいまいさが唯一の、モールス信号のように、発生する可能性があります 334 00:21:01,910 --> 00:21:06,770 例えば、CはルートからBへのパスに沿ってどこかにあった場合 335 00:21:06,770 --> 00:21:12,290 [学生]右。だから、その場合には、2つの葉を持っていると言う。 >>は持っていると言う - もう一度言って。 336 00:21:12,290 --> 00:21:18,760 さて>> - [学生]は、2葉、FとG、次にGを持っていると言う。しかし、それはできません。 337 00:21:18,760 --> 00:21:23,230 自体は、これらの文字FとGなぜなら葉FとGを持っていませんでした 338 00:21:23,230 --> 00:21:27,560 自身がBの左側またはEの右にどこかに残すであろう 339 00:21:27,560 --> 00:21:28,900 だから定義によると、彼らは葉でなければなりません。 340 00:21:28,900 --> 00:21:32,940 そうでなければ、あなたはまさにそうだね、我々は、モールス信号が直面する問題を解決していませんでした。 341 00:21:32,940 --> 00:21:38,150 良い質問です。その他の質問は?かしこまりました。 342 00:21:38,150 --> 00:21:42,050 このビットの概念は、それは我々が力を我々が実際に使用されていませんでしたすべてのことに沿って持っていた判明 343 00:21:42,050 --> 00:21:44,200 それはこれらの0と1を操作するに来たとき。 344 00:21:44,200 --> 00:21:46,600 我々は、最も早い問題セットのいずれかでこのことについて質問した。 345 00:21:46,600 --> 00:21:52,340 すなわち、あなたは、大文字から小文字への変換、またはその逆の方法を教えてください。 346 00:21:52,340 --> 00:21:55,460 または、より具体的には、それらの最初のpsetの一つは尋ねた 347 00:21:55,460 --> 00:22:01,090 どのように多くのビットは、実際に、またはその逆を小文字に変更するために反転する必要がありますか? 348 00:22:01,090 --> 00:22:05,580 ここで、65と97はバイナリでどのように見えるかの迅速なリマインダーです。 349 00:22:05,580 --> 00:22:08,060 そしてその質問には、ソートのため、あなたの記憶に薄れている場合でも、 350 00:22:08,060 --> 00:22:11,290 あなたはどのように多くのビットを反転する必要があることをここでもう一度見ることができます 351 00:22:11,290 --> 00:22:15,810 小文字に資本を変更するには?ちょうど1。 352 00:22:15,810 --> 00:22:19,650 >> 彼らは1つの場所のみ、左から三番目のビットが異なります。 353 00:22:19,650 --> 00:22:24,240 010を持っているのに対し、少しの011を持っています。 354 00:22:24,240 --> 00:22:26,250 だから何とかして、私達はちょうど、そのビットを反転できるようにする必要があります 355 00:22:26,250 --> 00:22:29,410 そして我々はその後の文字を大文字または小文字にすることができます。 356 00:22:29,410 --> 00:22:32,720 私たちは、実際に使用して、過去にこれをやった、条件が一致した場合 357 00:22:32,720 --> 00:22:35,930 手紙は資本Aおよび資本Zとの間である場合にチェックし、 358 00:22:35,930 --> 00:22:41,480 その後のような出力 - A + 26またはそのような何か。 359 00:22:41,480 --> 00:22:46,130 おそらく、アルファベットの文字に算術変更されました。 360 00:22:46,130 --> 00:22:49,270 我々はちょうどその単一のビットを反転させることができるが、どうでしょう? 361 00:22:49,270 --> 00:22:59,080 どのように01000001と01100001のようなので、ビット、8ビットの1バイト分を取って行くことができる? 362 00:22:59,080 --> 00:23:03,170 あなたはビットのこれらのパターンを持っていた場合、我々はその中の1つだけを変更するにはどうしたらできますか? 363 00:23:03,170 --> 00:23:07,610 我々はここに黄色でビットのこの他のパタ​​ーンを導入したらどう? 364 00:23:07,610 --> 00:23:13,420 私が変更したい1ビットを除いて全体の黄色の文字列0sを行った場合 365 00:23:13,420 --> 00:23:17,900 それから私は、ビット単位の演算子とも呼ばれ、new演算子を導入する - 366 00:23:17,900 --> 00:23:21,210 それは個々のビットを操作するという意味で、ビット演算子、 367 00:23:21,210 --> 00:23:25,360 全体ではなく、バイトまたは4バイトすべてを一度に。 368 00:23:25,360 --> 00:23:31,170 黄色であり、この縦棒は、我々が資本の表現に何を取ることを示唆している場合 369 00:23:31,170 --> 00:23:37,060 およびビットの黄色シーケンスとのビット和でそれ? 370 00:23:37,060 --> 00:23:41,300 言い換えれば、スクラッチのブール式の我々の議論に戻って考えると、次にCの 371 00:23:41,300 --> 00:23:47,520 >> ブールをやったり、最初のものが真でなければならないか、真実であることを意味します 372 00:23:47,520 --> 00:23:50,700 または、第二のものは真でなければならないか、またはそれらの両方が真でなければならない 373 00:23:50,700 --> 00:23:53,270 し、結果の出力は真そのものです。 374 00:23:53,270 --> 00:24:00,230 ここでは、このケースでは、我々は0で何を我々は0を取る場合get "または" EDでしょうか?偽またはfalse? 375 00:24:00,230 --> 00:24:04,280 それはとても、期待どおりのまま小文字偽です。 376 00:24:04,280 --> 00:24:07,540 代わりに、私たちは1または0を何をしたら? 377 00:24:07,540 --> 00:24:12,640 これは今1のままだが、ここで発生しようと何にも注意してください。 378 00:24:12,640 --> 00:24:18,630 私たちは、大文字で始め、我々がここで行っているように我々は、その個々のビットを続行する "または"した場合、 379 00:24:18,630 --> 00:24:25,180 0または黄色の1は私たちにここに何を与える?これは私たちに1を与える。 380 00:24:25,180 --> 00:24:35,120 実際には、我々は少しの大文字バージョンが実際に何かも知らなかったと仮定します。 381 00:24:35,120 --> 00:24:38,270 のこれを行うに行こう。私はここの上にこのバックを動かしてみましょう。 382 00:24:38,270 --> 00:24:42,340 再びこれを行うにしてみましょう。 0または0が私に0を与えます。 383 00:24:42,340 --> 00:24:45,020 1または0は私に1を与える。 384 00:24:45,020 --> 00:24:48,020 0または1は私に1を与える。 385 00:24:48,020 --> 00:24:52,880 0または0が私に0を与えます。次のいずれかが0の場合、次のいずれかが0の場合、次の1は0です。 386 00:24:52,880 --> 00:24:55,660 1または0は私に1を与える。 387 00:24:55,660 --> 00:24:59,140 それで、我々があった小文字を事前に知らなかった場合でも、 388 00:24:59,140 --> 00:25:04,770 単にINGが "または"我々は黄色でここで紹介したことをこのビットのパターンで、 389 00:25:04,770 --> 00:25:09,400 あなたはそのビットを反転することで資本を小文字にすることができます。 390 00:25:09,400 --> 00:25:11,580 我々は数週間前に、この表現を使用しましたビットを反転。 391 00:25:11,580 --> 00:25:13,710 あなたが実際にどのようにプログラムで行うのですか? 392 00:25:13,710 --> 00:25:16,390 一般的には、マスク、ビットのシーケンスを、と呼ばれるものを使う 393 00:25:16,390 --> 00:25:19,980 このケースではちょうどので、ここでは、この数値のように見えるためにそれが生じると、 394 00:25:19,980 --> 00:25:22,980 してから "または"それは一緒にこの新しいC言語の演算子を使用して、 395 00:25:22,980 --> 00:25:29,940 |、単一を使用| |そしてなぜので、実際にはここでこの答えを得る思いませんか? 396 00:25:29,940 --> 00:25:35,120 これは4S 1S場所、2sの場所、8S、16S、32Sです。 397 00:25:35,120 --> 00:25:42,280 だからそれはつまり、あなたが大文字を取る場合と整数32とのビット和でそれが判明 398 00:25:42,280 --> 00:25:47,520 整数32ので、あなたはビットとしてそれを見たときに、次のようになります。 399 00:25:47,520 --> 00:25:50,860 あなたが実際にしたいビットを反転させることができますを意味します。 400 00:25:50,860 --> 00:25:52,630 と同様に - と我々は一瞬でコードを見てみましょう - 401 00:25:52,630 --> 00:25:54,210 我々は、他の方向に行ってしたいとしましょう​​。 402 00:25:54,210 --> 00:25:58,210 >> あなたは小文字に首都からどのように行くのですか?変更する必要のあるビット? 403 00:25:58,210 --> 00:25:59,820 これは、同じ一つだ。 404 00:25:59,820 --> 00:26:03,970 私たちは、1から0に、その第三ビットを変更したい。 405 00:26:03,970 --> 00:26:06,310 そして、どのように我々はこれをやって行くのでしょうか? 406 00:26:06,310 --> 00:26:10,130 どのように我々はビットをオフにしますか?ビットのどのパターンで我々はビットをオフにできますか? 407 00:26:11,580 --> 00:26:14,070 我々はマスク反転の並べ替え場合はどうなりますか? 408 00:26:14,070 --> 00:26:17,350 前のに対し、我々は全体の黄色のマスクを作った0 409 00:26:17,350 --> 00:26:19,930 1ビットを除いて、我々は、オンにしたかった 410 00:26:19,930 --> 00:26:25,580 この時間は、我々はオフにしたいビットを除いて、マスク全体の1を作る場合はどうでしょう 411 00:26:25,580 --> 00:26:28,330 その後何の演算子を使用するのか? 412 00:26:28,330 --> 00:26:30,560 どのようなもの我々if "と"?のは、見てみましょう。 413 00:26:30,560 --> 00:26:34,880 我々は今これにフリップした場合は、再度、私はすべて1のマスクを作成したと 414 00:26:34,880 --> 00:26:37,650 私はオフにする1ビットを除いて 415 00:26:37,650 --> 00:26:43,860 その後ではなく "または"ここに黄色の下向きの数字でトップアップ白の数字、 416 00:26:43,860 --> 00:26:46,940 何一緒に私が代わりにif "と"削除しますか?これは、ビット単位と呼ばれている。 417 00:26:46,940 --> 00:26:49,450 論理的に、それはブールと同じことだと。 418 00:26:49,450 --> 00:26:55,160 これは、0と1が0である私を与える。だからfalseとtrueはfalseです。 419 00:26:55,160 --> 00:26:58,160 真と真はtrueです。 420 00:26:58,160 --> 00:27:04,020 そして、ここでマジック:真と偽今や偽であるので、我々はそのビットをオフにしている。 421 00:27:04,020 --> 00:27:06,560 そして今、物語の残りの部分はやや簡単です。 422 00:27:06,560 --> 00:27:11,970 マスクの残りの部分は1秒ですので、数字は白であるかは重要ではありません。 423 00:27:11,970 --> 00:27:15,580 あなた "と"真で何かするときは、その値を変更するつもりはない。 424 00:27:15,580 --> 00:27:20,200 それが本当であるなら、それは真のままになります。それが偽だった場合は、falseのままになります。 425 00:27:20,200 --> 00:27:23,190 >> あなたは本当だった何かを取るときが、魔法が起こる 426 00:27:23,190 --> 00:27:25,430 偽としてから "と"それ。 427 00:27:25,430 --> 00:27:30,030 これは、ビットをオフにするという効果があります。 428 00:27:30,030 --> 00:27:31,980 そこに少し不可解なので。 429 00:27:31,980 --> 00:27:35,390 、実際にはさらに不可解に見えるかもしれない、実際にはいくつかのコードを見てみましょう 430 00:27:35,390 --> 00:27:38,220 しかし、ここではtolowerはここで見てみましょう。 431 00:27:38,220 --> 00:27:45,880 私はtolowerを見れば、小文字に資本から行く、 432 00:27:45,880 --> 00:27:47,730 我々は、このプログラムを実装する方法を見てみましょう。 433 00:27:47,730 --> 00:27:51,280 ここではメインだし、それはすべてのコマンドライン引数を取っていない。 434 00:27:51,280 --> 00:27:55,980 私は、ユーザーがインチ入力しようとしていることを手紙の文字cを宣言しています 435 00:27:55,980 --> 00:28:00,690 ループは単にユーザーが間違いなく私に資本提供していることを確認している間、私はその後の作業に精通を使用 436 00:28:00,690 --> 00:28:05,010 またはBまたはC .. Z、そう彼らは私とZの間に何かを与える 437 00:28:05,010 --> 00:28:08,580 そして今、私はここで何をやっている? 438 00:28:08,580 --> 00:28:14,870 アイム "または" 0x20を使ってり、この、それは実際には同じだ - 439 00:28:14,870 --> 00:28:19,500 そして我々は一瞬にしてこれに戻ってくる - 32。 440 00:28:19,500 --> 00:28:24,830 だから、もう一度、32はここでこのビットのパターンです。なぜ我々はこのことを知っていますか? 441 00:28:24,830 --> 00:28:26,320 ちょうど一週間に0に戻って考える。 442 00:28:26,320 --> 00:28:31,010 これは1秒位、2秒の場所、4S、8S、16S、32Sの場所です。 443 00:28:31,010 --> 00:28:33,470 だから、この黄色の数は32であることを起こる。 444 00:28:33,470 --> 00:28:40,570 私はその後、文字通り数32で、ここでビット単位 "または"それをcharのような手紙を取ることができます 445 00:28:40,570 --> 00:28:45,250 と私は戻って何を得るのですか?そのcharの小文字バージョン。 446 00:28:45,250 --> 00:28:48,830 一瞬前に、しかし、私は別のベース表記でこれを表明した。 447 00:28:48,830 --> 00:28:51,370 これは何を表したのでしょうか? >> [学生] 16進数。 448 00:28:51,370 --> 00:28:53,050 [マラン]これは16進数を表現するために起こります。 449 00:28:53,050 --> 00:28:55,170 我々は、それほど進数について話をしていない 450 00:28:55,170 --> 00:28:57,330 しかし、それは、このような場合に実際に便利です。 451 00:28:57,330 --> 00:29:01,730 >> それはより複雑に見えるにもかかわらず、それが20と32ではない、見えたとしても 452 00:29:01,730 --> 00:29:06,240 それは、16進数は、実際に超便利な表記法であることが判明 453 00:29:06,240 --> 00:29:10,810 進数ですべての0xの後の桁ので - これは何の意味もありません; 454 00:29:10,810 --> 00:29:13,960 これは、ここで16進数が来ると言うだけで人間の慣習です - 455 00:29:13,960 --> 00:29:18,590 これらの数字の各々、2、次に0、自分自身を表現することができます 456 00:29:18,590 --> 00:29:20,800 正確に4ビットである。 457 00:29:20,800 --> 00:29:27,840 我々はこれを行う場合だから、私はここで、テキストエディタを開いてみましょう - 奇妙なオートコンプリート - 458 00:29:27,840 --> 00:29:35,940 我々はここで少しテキストエディタをすれば、数0x20の4ビットであることを意味し、ここ、ここには別の4ビットです。 459 00:29:35,940 --> 00:29:38,050 第一下位4ビットを実行してみましょう。 460 00:29:38,050 --> 00:29:44,690 4ビットで表現0は何ですか?超簡単。ちょうどすべて0。 461 00:29:44,690 --> 00:29:46,780 だから、0として4ビット。 462 00:29:46,780 --> 00:29:53,510 どのようにして2を表すのですか?それは、我々はこれをしなかったので、しばらくして、それは0100だだ。 463 00:29:53,510 --> 00:29:57,310 だから、これは1秒の場所であり、これは2秒の場所であり、それは他の場所が何であるかは関係ありません。 464 00:29:57,310 --> 00:30:00,610 言い換えれば、16進数では0x20を言うかもしれない、 465 00:30:00,610 --> 00:30:04,340 しかし、あなたが2であるのかを考えるとそれがどのようにバイナリで表現されている場合は、 466 00:30:04,340 --> 00:30:07,130 何0で、どのようにバイナリで表現され、 467 00:30:07,130 --> 00:30:10,440 これらの質問への回答はそれぞれ、これとこれです。 468 00:30:10,440 --> 00:30:14,380 だから0x20は、8ビットのこのパターンを表すために起こる 469 00:30:14,380 --> 00:30:16,880 これは正確に我々が望んでいたマスクです。 470 00:30:16,880 --> 00:30:20,140 だから、これは、ちょっと知的な運動です 471 00:30:20,140 --> 00:30:24,520 しかし現実には、コード内では、このような定数を書くことが一般的に、より一般的です 472 00:30:24,520 --> 00:30:28,360 進数で、プログラマが比較的容易にできるので、 473 00:30:28,360 --> 00:30:32,560 それはいくつかの紙と鉛筆が必要な場合でも、そのビットパターンが何であるかを把握 474 00:30:32,560 --> 00:30:35,960 あなただけのコードで、典型的には、0と1を表現することはできませんので。 475 00:30:35,960 --> 00:30:38,540 あなたは00010に行くなどすることはできません。 476 00:30:38,540 --> 00:30:42,380 >> あなたは、10進数または16進数や8進数または他の表記を選択する必要があります。 477 00:30:42,380 --> 00:30:47,540 ほとんどの人は単純に各桁は4ビットを表した16進を選択する傾向がある 478 00:30:47,540 --> 00:30:49,320 そしてあなたは、この簡単な計算を行うことができます。 479 00:30:49,320 --> 00:30:54,990 と私はほとんど同じですtoupperが、で私の手を振るよ、それはほとんど同じに見えます。 480 00:30:54,990 --> 00:31:01,900 toupperはいないか、または演算子ではなく、この男とdfを使用して行われます。 481 00:31:01,900 --> 00:31:09,300 dfは何を表しているのでしょうか? DF?誰ですか? >> [学生] 255。 482 00:31:09,300 --> 00:31:12,780 255?ではない255。それがFFだろう。 483 00:31:12,780 --> 00:31:15,210 我々は少しの練習として、このいずれかを残しておきます。 484 00:31:15,210 --> 00:31:23,460 しかし、あなたはどのような9の後に来るし、0、1、2、3、4、5、6、7、8、9から行くとしたら? 485 00:31:23,460 --> 00:31:26,510 私たちは、小数点以下の桁のうちの一種だが、16進数で何が9の後に来る? 486 00:31:26,510 --> 00:31:29,510 [学生] A。 A、B、C、Dだから。>> 487 00:31:29,510 --> 00:31:33,470 あなたは、dは実際に表すビットパターンから何があるかを把握することができます。 488 00:31:33,470 --> 00:31:38,850 我々は数学を行う場合と、我々はあなたが戻ってきてしまうマスクはこれと同じであることがわかります。 489 00:31:38,850 --> 00:31:45,580 これは、f、すべて1であり、これはdです。だからdfはそのマスクを表します。かしこまりました。 490 00:31:45,580 --> 00:31:50,980 そして最後に、物事が聞こえるようにしないスーパー、スーパーテクニカル、 491 00:31:50,980 --> 00:31:53,840 しかし、我々はこれを行うプログラムを書きたいとしましょう​​。 492 00:31:53,840 --> 00:31:58,960 binary.cと呼ばれるファイル内のプログラムである、私が先に行くと、バイナリを作ってみましょう。 493 00:31:58,960 --> 00:32:02,050 そして今、私はバイナリを実行すると私の非負の整数を与えることができます。 494 00:32:02,050 --> 00:32:03,960 0で、簡単かつタイプから始めましょう。 495 00:32:03,960 --> 00:32:09,010 これは今、そのバイナリ表現の整数を出力するプログラムです。 496 00:32:09,010 --> 00:32:13,470 私は再びこのゲームをプレイし、ちょうど1で入力した場合、だから、私は1の32ビット表現を取得する必要があります。 497 00:32:13,470 --> 00:32:15,490 私は2で再びこれを行う場合、私はそれを取得する必要があります。 498 00:32:15,490 --> 00:32:19,310 私は7をすれば、私はそう述べ終わりにいくつかの1を取得してください。 499 00:32:19,310 --> 00:32:22,740 私が原因で、ビットごとの演算とこれを言及アウトそれは回り 500 00:32:22,740 --> 00:32:25,490 あなたは実際にだけでなく、もう一つのことを行うことができます。 501 00:32:25,490 --> 00:32:29,130 あなたは、動的にこれらのマスクを作成することができます。 502 00:32:29,130 --> 00:32:32,800 ビットごとの演算を含むこの1最後の例を見てみましょう。 503 00:32:32,800 --> 00:32:35,490 ここでは、コードの最初の部分は、数字の入力をユーザーに求める 504 00:32:35,490 --> 00:32:38,130 、それはあなたが私に非負の整数を与えると主張している。 505 00:32:38,130 --> 00:32:39,780 だからそれは古い学校のもののようなものだ。 506 00:32:39,780 --> 00:32:41,980 しかし、ここで興味深いのようなものだものです。 507 00:32:41,980 --> 00:32:44,910 >> 私がバイナリ形式で番号を印刷する方法を教えてください。 508 00:32:44,910 --> 00:32:48,970 私が最初に何から何まで反復する? 509 00:32:48,970 --> 00:32:52,270 少なくともアプライアンスで、通常はintのサイズは何ですか? >> [生徒] 4。 510 00:32:52,270 --> 00:32:57,130 それは4です。だから4 * 8 32 - 1月31日です。 511 00:32:57,130 --> 00:33:02,590 私は31からカウントし始めているのであれば、それは、それは結局、表し 512 00:33:02,590 --> 00:33:07,630 こっちにこの男はただ概念的に、31ビットまたは最上位ビット、 513 00:33:07,630 --> 00:33:09,650 これは、ビット0であることを行っているのに対し。 514 00:33:09,650 --> 00:33:12,850 だから、これは01ビットです...ビット31。 515 00:33:12,850 --> 00:33:14,950 ので、このコードは何をやっている? 516 00:33:14,950 --> 00:33:20,140 それは不可解に見えるにもかかわらず、ちょうどダウン31から0に反復処理され、ループのためにこれを注意してください。それはそれだ。 517 00:33:20,140 --> 00:33:24,530 だから興味深い部分は、今ここにこれらの5行でなければなりません。 518 00:33:24,530 --> 00:33:28,110 この行で、私はマスクと呼ばれる変数を宣言していることに注意してください 519 00:33:28,110 --> 00:33:30,790 これらの黄色の数字の私たちの物語と一貫性があるように。 520 00:33:30,790 --> 00:33:32,200 そして、これは何をやっている? 521 00:33:32,200 --> 00:33:35,720 これは、ほとんど、我々は前に見ていない別のビット単位の演算子です。 522 00:33:35,720 --> 00:33:38,300 それは、左シフト演算子です。 523 00:33:38,300 --> 00:33:40,060 この演算子は、これを行います。 524 00:33:40,060 --> 00:33:44,920 ここ1番であり、もしそうなら私は、シフト、左シフト、左 525 00:33:44,920 --> 00:33:49,260 あなたは、個々の1にすることの効果を持つことをどう思いますか? 526 00:33:49,260 --> 00:33:51,290 文字通りそれを上にずらす。 527 00:33:51,290 --> 00:33:57,540 1番は、左にあるものであり、あなたは、31日にiを初期化することによって開始するのであれば 528 00:33:57,540 --> 00:34:03,490 やろうとしていることは何ですか?これは数字の1を取ると、ここの上に31の場所をシフトするだろう。 529 00:34:03,490 --> 00:34:06,210 そしてその背後には明らかに他の数字はありませんので、 530 00:34:06,210 --> 00:34:10,350 それらは、デフォルトでは0に置き換えられます。 531 00:34:10,350 --> 00:34:15,120 だから、もちろん、このように見える数字の1、アウトを開始します - 532 00:34:15,120 --> 00:34:18,659 と私が中心にここでそれを上に描画できます。 533 00:34:18,659 --> 00:34:22,139 そして、あなたが左に物事をシフトとして、この男は、本質的にこ​​の道を行く。 534 00:34:22,139 --> 00:34:24,659 しかし、すぐにあなたがそれを行うと、0が記入される 535 00:34:24,659 --> 00:34:28,360 あなたは、2回目のシフトなら、それはこの道を行くと別の0インチ満たされる 536 00:34:28,360 --> 00:34:31,000 >> あなたは再びそれをシフトしてから、別の0インチ満たされる 537 00:34:31,000 --> 00:34:37,900 あなたは1 << iが31の場所のこの事をもしそうなら、マスクを得ることを終える 538 00:34:37,900 --> 00:34:42,550 32文字の長さであること、の左端の1は1であり、 539 00:34:42,550 --> 00:34:45,199 の残りの部分のすべてが0である。 540 00:34:45,199 --> 00:34:50,880 そして、それは次のように左側の番号をずらす、余談ですが、結局 541 00:34:50,880 --> 00:34:53,530 また偶然にも、時には便利に、 542 00:34:53,530 --> 00:34:57,520 その番号に何をしているという効果があります? >> [生徒]それを倍にする。 543 00:34:57,520 --> 00:35:00,980 各列のためにそれを倍増 - 1S場所、2sの場所、4sの場所は、 544 00:35:00,980 --> 00:35:05,030 8sの所、16sの場所 - あなたが左に行くように、すべての倍増をすばらしいスタイル。 545 00:35:05,030 --> 00:35:09,500 あるいはむしろ、あなたが1をシフトするときには、数値の値を倍に終わるつもりです。 546 00:35:09,500 --> 00:35:12,070 あなたは数字の面白い変換をやってしまうことができます 547 00:35:12,070 --> 00:35:15,640 2の累乗で、このようにすべてのものを上にずらすことによって。 548 00:35:15,640 --> 00:35:17,150 それでは、どのように動作しますか? 549 00:35:17,150 --> 00:35:22,580 そして、これは、私がそれをしたい正確な場所に1を除くすべて0のマスクを与え 550 00:35:22,580 --> 00:35:27,920 toupper.cから盗まれ、その後、この表現、 551 00:35:27,920 --> 00:35:31,770 単に、ユーザーが入力した番号nを取ると言っている 552 00:35:31,770 --> 00:35:34,730 "と"それはそのマスクであり、あなたは何を得ようとしている? 553 00:35:34,730 --> 00:35:39,200 あなたは、マスクされた場所に1がある場合は1を取得するつもりだ、 554 00:35:39,200 --> 00:35:41,570 またはあなたはそこではない場合は0を取得するつもりだ。 555 00:35:41,570 --> 00:35:44,370 ので、すべてのこのプログラムは効果的に、それはループを持っていないです 556 00:35:44,370 --> 00:35:48,340 そして、それはこっちに1その後、こっちに1その後、こっち1でマスクを作成し、 557 00:35:48,340 --> 00:35:52,950 そしてそれは、ここでユーザの入力では1ビットがあると言うために、このビット単位の論理積(AND)のトリックを使っていますか? 558 00:35:52,950 --> 00:35:59,220 >> ここでユーザの入力では1ビットはありますか?そうだとすれば、文字通り0を印刷し、他の1を印刷してください。 559 00:35:59,220 --> 00:36:03,780 我々は、我々が32ビットの代わりに8をやっている理由だという理由だけでint型がこれをやっている 560 00:36:03,780 --> 00:36:06,900 しかし、私たちが次に導入したと、このビット単位の論理積(AND)、このビット単位の論理和(OR)、ある 561 00:36:06,900 --> 00:36:10,450 しばしばひどく役に立ちませんし、この左シフト演算子、 562 00:36:10,450 --> 00:36:12,230 彼らがすることができますが、それはアウトになります。 563 00:36:12,230 --> 00:36:16,560 実際には、ブール値の配列のようなものを表現するためにあたかも 564 00:36:16,560 --> 00:36:21,260 ただ、trueまたはfalseを表すために、あなたがするかどうかを追跡したいと仮定します 565 00:36:21,260 --> 00:36:24,630 300人の学生でいっぱいの部屋が存在し、 566 00:36:24,630 --> 00:36:29,420 あなたは300 boolsを得られるようにするには、bool型のサイズが300の配列を宣言することができた 567 00:36:29,420 --> 00:36:33,090 誰かがここで、それ以外の場合はfalseである場合、あなたはtrueにそれぞれ設定することができます。 568 00:36:33,090 --> 00:36:37,550 なぜ、そのデータ構造内のその表現は効率が落ちるのでしょうか? 569 00:36:39,370 --> 00:36:44,800 、300 boolsの配列、そのデータ構造の設計についての悪い何ですか? 570 00:36:46,190 --> 00:36:49,600 フードの下に、実際には、ブール値とは何ですか? 571 00:36:49,600 --> 00:36:52,310 これも、慣れていないかもしれない何かである。 572 00:36:52,310 --> 00:36:53,720 全くboolが存在しなかったものに変わります。 573 00:36:53,720 --> 00:36:56,620 我々が作成したソートのことを覚えておいてくださいcs50.hファイルを使用して、 574 00:36:56,620 --> 00:36:58,630 それ自体は、標準的なブール値が含まれています。 575 00:36:58,630 --> 00:37:00,930 それはboolに来るとき、Cは、しかし、ダムのようなものです。 576 00:37:00,930 --> 00:37:04,880 それは完全に無駄になっている、すべてのブール値を表すために8ビットを使用 577 00:37:04,880 --> 00:37:09,040 明らかに、あなたはboolを表現するために何ビット必要がないので、?わずか1。 578 00:37:09,040 --> 00:37:13,190 だから、あなたが今、ビット演算子と能力を持っていることが判明した場合 579 00:37:13,190 --> 00:37:17,760 でも、1バイトであってもchar型の個々のビットを操作するためには、 580 00:37:17,760 --> 00:37:21,380 あなたが愚かな何かを表現するのに必要なメモリが減少する可能性がアウトそれは回り 581 00:37:21,380 --> 00:37:25,490 8倍にして、その出席スタイルのデータ構造が好きです。 582 00:37:25,490 --> 00:37:29,820 代わりにtrueまたはfalseを表すために8ビットを使用するのではなく、文字通り1を使用することができます 583 00:37:29,820 --> 00:37:34,500 クラス内のすべての学生のための8つのバイトを使用して 584 00:37:34,500 --> 00:37:41,990 そして、これらの種類の低レベルのトリックを使って、0から1までの個々のビットから切り替える。 585 00:37:43,850 --> 00:37:49,460 それは本当にエネルギーに終止符を打つ。ビット単位の操作に関するご質問はありますか? 586 00:37:49,460 --> 00:37:52,710 >> うん。 >> [生徒]が排他的OR演算子を表します? 587 00:37:52,710 --> 00:37:56,440 はい。このようになります排他的OR演算子^、ニンジンのシンボルがあるが、 588 00:37:56,440 --> 00:38:02,070 これは、最初のものを意味するか、第二のものは、1になるように出力の1にできます。 589 00:38:02,070 --> 00:38:07,750 あなたにも1、またはその逆に0を反転することができます〜は、そこにもありません。 590 00:38:07,750 --> 00:38:11,600 そして、我々が見たものの反対で右シフト演算子、>>は、もあります。 591 00:38:11,600 --> 00:38:13,850 かしこまりました。のは、より高いレベルになりました事を見てみましょう。 592 00:38:13,850 --> 00:38:16,770 我々は、テキストの話をして、それを圧縮することによって開始された 593 00:38:16,770 --> 00:38:19,650 およびビットの少ない番号を記載したテキストを表す; 594 00:38:19,650 --> 00:38:22,890 我々は今、ビット単位のレベルで物事を操作を開始する方法について少し話をしました。 595 00:38:22,890 --> 00:38:26,640 Let 'sは、今や表現に最大10,000フィートをズームイン 596 00:38:26,640 --> 00:38:29,250 グラフィックのようなもっと複雑なものを。 597 00:38:29,250 --> 00:38:32,950 ここではドイツの国旗を持って、ここでは、フランスのいずれかを持っている。 598 00:38:32,950 --> 00:38:36,350 例えば、GIFファイル - これらは、あなたが知っている可能性のあるファイル形式で表されることがあります。 599 00:38:36,350 --> 00:38:40,030 あなたは今まで。gifで終わるWeb上で画像を見てきた場合は、 600 00:38:40,030 --> 00:38:43,000 これは、グラフィックスインターチェンジ形式です。 601 00:38:43,000 --> 00:38:47,530 圧縮に自分自身を貸すの一種ここでこれら二つのフラグ 602 00:38:47,530 --> 00:38:52,050 何恐らく明白な理由のために? >> [聞こえない学生の応答] 603 00:38:52,050 --> 00:38:53,440 繰り返しの多くは右、そこですか? 604 00:38:53,440 --> 00:38:57,270 ドイツのフラグを送信するためには、画面上の画像であると考える 605 00:38:57,270 --> 00:38:59,030 戻ってあなたのスクラッチ日間インチ 606 00:38:59,030 --> 00:39:02,380 あなたは、画像を構成する個々のピクセルまたはドットがあることを思い出すかもしれない。 607 00:39:02,380 --> 00:39:06,650 >> 黒のドットと黒ドットの別の行全体の全体の行があります。 608 00:39:06,650 --> 00:39:10,110 黒のドットの行の束は、我々は本当に、ズームインした場合我々は見ることがあります 609 00:39:10,110 --> 00:39:13,370 我々は、Photoshopでロブの顔にズームインしたときにずっと好きです。 610 00:39:13,370 --> 00:39:15,500 我々がイメージに深く、深く深くなった途端、 611 00:39:15,500 --> 00:39:19,990 あなたは、その場合には、彼の目を作曲正方形のすべて、ピクセレーションを見始めた。 612 00:39:19,990 --> 00:39:24,130 ここでは、同じ取引。我々はかなりにズームインした場合は、個々のドットを見ることができます。 613 00:39:24,130 --> 00:39:27,110 まあ、これはビットの無駄のようなものです。 614 00:39:27,110 --> 00:39:32,120 フラグの三分の一は黒で、フラグの三分の一は黄色などとある場合は、 615 00:39:32,120 --> 00:39:34,860 なぜ我々は何とかしてこのフラグを圧縮することはできませんか? 616 00:39:34,860 --> 00:39:39,560 パターンは少し異なっていても、さらにはフランス国旗を圧縮することができた。 617 00:39:39,560 --> 00:39:44,120 これは、GIFファイル形式は可逆圧縮形式であると判明 618 00:39:44,120 --> 00:39:48,420 それはあなたが、ここにドイツ国旗のような画像を撮影することができることを意味 619 00:39:48,420 --> 00:39:53,540 あなたは、品質を犠牲にすることなく多数のビットを捨てることができます。 620 00:39:53,540 --> 00:39:55,340 これは、JPEGのようなものとは対照的である 621 00:39:55,340 --> 00:39:57,050 私たちのほとんどは、おそらくより使い慣れている。 622 00:39:57,050 --> 00:39:59,000 Facebookの写真やFlickrの写真など 623 00:39:59,000 --> 00:40:02,200 彼らがアップロードしているとき、ほとんどの場合、JPEGファイルとして保存され、 624 00:40:02,200 --> 00:40:08,100 LOSSY - - あなたがビットを捨てないそれによって形式が、JPEGは非可逆です 625 00:40:08,100 --> 00:40:10,430 しかし、あなたはまた、品質を捨てる。 626 00:40:10,430 --> 00:40:13,890 そしてあなたはPhotoshopで写真を圧縮したり、Facebookにアップロードした場合 627 00:40:13,890 --> 00:40:15,580 または、本当にくだらない電話でそれらを取る 628 00:40:15,580 --> 00:40:19,510 あなたは、画像が非常に斑点とピクセル化され得るために開始することを知っている 629 00:40:19,510 --> 00:40:22,290 それは、コンピュータまたは電話で圧縮されているので、それはだ 630 00:40:22,290 --> 00:40:24,550 文字通り情報を投げることによって。 631 00:40:24,550 --> 00:40:28,500 But GIFは、それはデフォルトでいるよりも、より少ないビットを使用することができるという点で素晴らしいです 632 00:40:28,500 --> 00:40:30,750 任意の情報を失うことなく。 633 00:40:30,750 --> 00:40:32,410 >> そして、それは本質的に次のようにそうします。 634 00:40:32,410 --> 00:40:38,740 むしろ、BMPなどのファイル内の店舗よりも黒、黒、黒、黒のRGBトリプルだろう、 635 00:40:38,740 --> 00:40:42,570 黒、黒、黒、黒、黒、黒、黒、黒など、 636 00:40:42,570 --> 00:40:45,640 むしろ、GIF形式は、 "黒"、言おうとしている 637 00:40:45,640 --> 00:40:48,330 その後、 "これを100回繰り返し"またはそのような何か。 638 00:40:48,330 --> 00:40:52,280 "黒、これを100回繰り返し、黒、これを100回繰り返して..." 639 00:40:52,280 --> 00:40:54,530 "イエロー、これを100回繰り返してください。" 640 00:40:54,530 --> 00:40:57,200 そしてそれは左端のピクセルが、本質的には、記憶しています 641 00:40:57,200 --> 00:41:02,160 その後何とか何度も何度もそのピクセルを繰り返すという概念をエンコードします。 642 00:41:02,160 --> 00:41:06,110 だからGIFは、任意の情報を失うことなく、自分自身を圧縮することができます。 643 00:41:06,110 --> 00:41:09,510 しかし、あなたはそれが使用をGIFのアルゴリズムであれば、推測しなければならない場合、 644 00:41:09,510 --> 00:41:13,180 彼らはサイズが同じに見えるにもかかわらず、これらのフラグは、これ、 645 00:41:13,180 --> 00:41:19,620 GIFとしてディスク上に保存したときに小さくなるだろうか? >> [生徒]ドイツ。 646 00:41:19,620 --> 00:41:21,660 ドイツは小さくなるだろうか?なぜですか? 647 00:41:21,660 --> 00:41:26,620 [学生]あなたがそれを繰り返しているので何度も何度水平に 648 00:41:26,620 --> 00:41:29,010 そして、あなたは別の時間を繰り返す。まさに>>。 649 00:41:29,010 --> 00:41:32,020 GIFを発明し、人々だけの種類のは、任意に決めたので 650 00:41:32,020 --> 00:41:36,040 繰り返しは、水平ではなく横方向に活用されるようにします。 651 00:41:36,040 --> 00:41:40,900 フランス国旗に比べてドイツの国旗で横方向にここでより多くの繰り返しがあります。 652 00:41:40,900 --> 00:41:44,430 私たちは実際に、これらのGIFを持って私のハードドライブ上のフォルダを開くのであれば 653 00:41:44,430 --> 00:41:51,920 あなたは実際にここにドイツ国旗が2キロバイトで、フランス語つは4キロバイトであることがわかります。 654 00:41:51,920 --> 00:41:54,080 それは、1つは他の倍であることが偶然であることを起こる 655 00:41:54,080 --> 00:41:57,960 しかし、それはフランス国旗がはるかに大きいという事実にケースです。 656 00:41:57,960 --> 00:42:01,250 >> 我々はグラフィックスについて話を進めているにもかかわらず、同じアイデアはに適用することができます 657 00:42:01,250 --> 00:42:05,150 もう少し複雑なフラグが、画像のようなものではない。 658 00:42:05,150 --> 00:42:08,170 あなたはリンゴの写真を撮る場合は、確実に重複がたくさんあり​​、 659 00:42:08,170 --> 00:42:11,040 ので、我々は何とかデフォルトの背景色は青であることを覚えることができる 660 00:42:11,040 --> 00:42:13,230 そして、右側の絵のように示唆しているではない 661 00:42:13,230 --> 00:42:16,830 この写真の中の一つ一つのピクセルの色を覚えておく必要があります。 662 00:42:16,830 --> 00:42:21,060 だから我々は情報を失うことなく、そこに離れてビットをスローすることができます。 663 00:42:21,060 --> 00:42:23,340 リンゴはまだちょうど同じように見えます。 664 00:42:23,340 --> 00:42:27,510 ここでは、この例では、映画の中で何が起こるかを見るかもしれません。 665 00:42:27,510 --> 00:42:31,970 それによってそこに上の画像では、これらは古い学校のフィルムリールを表す 666 00:42:31,970 --> 00:42:36,900 あなたは家の過去のRVの運転とツリーを持っています。 667 00:42:36,900 --> 00:42:42,130 そのバンが左から右に過去ドライブとして、また、何が明らかに変化していないのですか? 668 00:42:42,130 --> 00:42:45,320 家はどこにも行かれず、木はどこにも行かれません。 669 00:42:45,320 --> 00:42:47,700 動いている唯一のことは、この場合にはバンです。 670 00:42:47,700 --> 00:42:51,650 変わらない背景が示唆するように、あなたは映画の中で何を行うことができます 671 00:42:51,650 --> 00:42:56,530 同様にフレームだけの間に変化しない情報を捨てている。 672 00:42:56,530 --> 00:42:58,900 これは一般的にフレーム間圧縮として知られています 673 00:42:58,900 --> 00:43:02,120 このフレームは、この1とほぼ同じに見えるができる場合は、 674 00:43:02,120 --> 00:43:05,390 ディスク上に同一の情報のいずれかを格納する気のないようにしましょう 675 00:43:05,390 --> 00:43:09,250 これらの中間のフレームに、唯一たまにキーフレームを使用してみましょう 676 00:43:09,250 --> 00:43:13,420 ことは、実際ほんの少しのサニティ·チェックとして重複してその情報を格納します。 677 00:43:13,420 --> 00:43:18,620 >> これとは対照的に、圧縮ビデオへの別のアプローチは、ここでは、この第二と下の例にある 678 00:43:18,620 --> 00:43:23,970 むしろ店よりも30フレームは、なぜあなたはその代わりに15フレーム秒を格納しませんどこですか? 679 00:43:23,970 --> 00:43:27,070 むしろ美しく、完璧に流れるムービーの種類より、 680 00:43:27,070 --> 00:43:30,060 それは少し、少し古い学校を、吃音しているようには見えるかもしれません 681 00:43:30,060 --> 00:43:37,190 しかし正味の影響は、特に必要があるかもしれないよりはるかに少ないビットを使用することでしょう。 682 00:43:37,190 --> 00:43:39,240 だからここでは、この後、私たちを残しますか? 683 00:43:39,240 --> 00:43:41,700 それはあなたが圧縮で行くことができます他にどこに脇のビットだった。 684 00:43:41,700 --> 00:43:45,140 これについては、こちらをCS175のようなクラスを取る。 685 00:43:45,140 --> 00:43:46,990 ここでは、ビデオ内の別の例です。 686 00:43:46,990 --> 00:43:49,190 蜂が動く唯一のものである場合、 687 00:43:49,190 --> 00:43:51,790 あなたは本当にそれらの中間のフレーム内の情報を捨てることができます 688 00:43:51,790 --> 00:43:55,260 花と空と葉が変更されていないため。 689 00:43:55,260 --> 00:43:57,960 しかし、今は最後にひとつを考えてみましょう。 690 00:43:57,960 --> 00:44:03,890 次の5分では、講義の中で永遠に後ろCを残す?はい。ではないのpsetで、しかし。 691 00:44:03,890 --> 00:44:10,210 最後のCの話した後、我々は非常にセクシーなものを取得する 692 00:44:10,210 --> 00:44:13,870 HTMLやWebおよび宇、ホーを含む。かしこまりました。 693 00:44:13,870 --> 00:44:16,050 ここに私達は行く。それが動機だ。 694 00:44:16,050 --> 00:44:20,020 それは、我々はClangのを実行するプログラムを書いてきたすべての時間が判明した。 695 00:44:20,020 --> 00:44:23,890 とClangのは、我々はかなり最初の週以来言ってきた、ソースコードを取り 696 00:44:23,890 --> 00:44:25,740 とオブジェクト·コードに変換します。 697 00:44:25,740 --> 00:44:28,540 これは、Cをとり、0と1に変換します。 698 00:44:28,540 --> 00:44:32,150 それはそれとして非常に簡単ではないので、私は一種の数週間のためにあなたに嘘をついてきた。 699 00:44:32,150 --> 00:44:36,750 >> あなたはClangのようなプログラムを実行するときにフードの下で起こってもっとたくさんある。 700 00:44:36,750 --> 00:44:39,560 実際には、プログラムをコンパイルするプロセスは、本当にまとめることができ、 701 00:44:39,560 --> 00:44:42,210 あなたは、コンパイラではロブのビデオから思い出すかもしれないと 702 00:44:42,210 --> 00:44:47,580 これらの4つのステップに:前処理、自身をコンパイル、アセンブル、リンク。 703 00:44:47,580 --> 00:44:51,950 しかし、クラスで私たちと世界のほとんどの人は、一般に、これらのステップをすべてまとめる 704 00:44:51,950 --> 00:44:54,410 としてだけで "コンパイル"。 705 00:44:54,410 --> 00:44:58,070 しかし、我々はこのようなソースコードで開始する場合、これはおそらく最も簡単なCプログラムですリコール 706 00:44:58,070 --> 00:45:03,530 我々はこれまで書いてきた、それはここまでのように見て終了したときにコンパイルされていることを思い出してください。 707 00:45:03,530 --> 00:45:07,310 しかし、そこに中間のステップは実際だし、それらの手順は次のとおりです。 708 00:45:07,310 --> 00:45:10,750 まず、このことは、この我々のプログラムの大部分の最上部にあり 709 00:45:10,750 --> 00:45:13,550 #を含める 710 00:45:13,550 --> 00:45:17,210 #私たちのために何が含まれていますか? 711 00:45:17,210 --> 00:45:24,150 それはかなりのコピーとその理由は?ので、私のファイルにstdio.hの内容を貼り付け 712 00:45:24,150 --> 00:45:27,220 なぜ私はstdio.hの内容については気にしない?興味のあるそこに何があるか。 713 00:45:27,220 --> 00:45:32,310 コンパイラは次に私が何を意味するか知っているように、printfの宣言は、そのプロトタイプ、 714 00:45:32,310 --> 00:45:34,900 私は、printf、この機能について触れたとき。 715 00:45:34,900 --> 00:45:39,390 だからそれによってClangのようなプログラムをコンパイルするに1人が、前処理であるステップ 716 00:45:39,390 --> 00:45:43,450 またはClangのは付属していますいくつかのヘルパープログラムは、一番下にあなたのコードを読み取ってトップ 717 00:45:43,450 --> 00:45:47,740 左から右へ、そしてそれをincludeのようなキーワードが続く#記号を認識する任意の時間 718 00:45:47,740 --> 00:45:53,980 それはあなたのファイルにこの場合、stdio.hでコピーして貼り付けるのは、その操作を実行します。 719 00:45:53,980 --> 00:45:55,510 すなわち、ステップ1です。 720 00:45:55,510 --> 00:45:59,620 その後、なぜなら巨大コピー、ちょうど起こっ貼り仕事のはるかに大きなCファイルを持っています。 721 00:45:59,620 --> 00:46:01,710 >> ステップ2は現在コンパイルされています。 722 00:46:01,710 --> 00:46:04,880 しかし、それはコンパイルが判明し、このように見えるソースコードを取り 723 00:46:04,880 --> 00:46:08,160 そして、このようなものに変換します 724 00:46:08,160 --> 00:46:12,560 呼ばれ慣れている人のためになる? >> [生徒]総会。 >>アセンブリ言語。 725 00:46:12,560 --> 00:46:16,700 これは実際にあなたがCS61取る場合は、より詳細に飛び込むだろう何かである。 726 00:46:16,700 --> 00:46:22,380 これは、ちょうどあなたが、0と1を自分で書くことに得ることができるのと同じくらい近い 727 00:46:22,380 --> 00:46:25,850 それでも感覚の少なくとも少しを作るような方法で物事を書く。 728 00:46:25,850 --> 00:46:30,760 、これらは、マシン命令されており、我々はここで、main関数までスクロールダウンしている場合 729 00:46:30,760 --> 00:46:35,470 このプッシュ命令、移動命令は、命令を差し引き、そこにあることに気づく 730 00:46:35,470 --> 00:46:38,550 命令を呼び出すなど。 731 00:46:38,550 --> 00:46:42,930 お使いのコンピュータは、Intel内部を持っていることを聞くと、 732 00:46:42,930 --> 00:46:46,180 あなたがお使いのMacまたはPCでインテルのCPUを持って、それは何を意味するのでしょうか? 733 00:46:46,180 --> 00:46:51,200 CPUはIntelが特定の命令を理解するような企業によって建設されています。 734 00:46:51,200 --> 00:46:55,770 彼らは、スワップのような機能があるか、またはメイン自体が何であるか見当がつかない 735 00:46:55,770 --> 00:47:00,060 しかし、彼らは、のような非常に低レベルの命令をプッシュ加算、減算、何を知っていますか 736 00:47:00,060 --> 00:47:02,430 呼び出し、移動などがあります。 737 00:47:02,430 --> 00:47:06,170 ですから、アセンブリ言語にCの​​コードをコンパイルするときに、 738 00:47:06,170 --> 00:47:11,820 あなたの非常にユーザーフレンドリーに見えるコードは、このようなものに変換され、 739 00:47:11,820 --> 00:47:21,670 それは文字通りCPUの内と外このような小さな単位で周りバイトまたは4バイトを移動します。 740 00:47:21,670 --> 00:47:26,820 しかし、最後に、Clangのは、プログラムのこの表現を取る準備ができているとき、 741 00:47:26,820 --> 00:47:30,940 0と1に、その後のステップは組み立てが起こると呼ばれる、 742 00:47:30,940 --> 00:47:33,850 Clangのを実行しているときに、これは再びすべての瞬きする間に発生します。 743 00:47:33,850 --> 00:47:39,300 我々は、ここから始めて、それはこのようなファイルを出力し、それはこれらの0と1に変換します。 744 00:47:39,300 --> 00:47:42,000 そして、あなたはいくつかの点で戻って実際の動作を確認したい場合は、 745 00:47:42,000 --> 00:47:48,220 私が入る場合hello1.c-これは我々が見て、非常に最初のプログラムの一つです - 746 00:47:48,220 --> 00:47:53,710 通常、私たちはカーンという音hello1.cでこれをコンパイルすると、これは私たちにa.outを与えるだろう。 747 00:47:53,710 --> 00:47:59,890 あなたが代わりにそれを-Sフラグを与える対照的にした場合、何を買ってあげることはhello1.sです 748 00:47:59,890 --> 00:48:02,750 そして実際にアセンブリ言語が表示されます。 749 00:48:02,750 --> 00:48:05,750 >> 私は非常に短いプログラムのためにこれをやっているんだけど、あなたはスクランブルのために戻ってしまったら 750 00:48:05,750 --> 00:48:08,740 または回復またはあなたが書いた任意のプログラムとちょうど好奇心から 751 00:48:08,740 --> 00:48:13,240 、それは実際に実際にCPUに供給されているのか、どのように見えるかを確認したい 752 00:48:13,240 --> 00:48:15,700 あなたはClangのでその-Sフラグを使用することができます。 753 00:48:15,700 --> 00:48:17,770 しかし、その後、最後に、1つの落とし穴は、まだあります。 754 00:48:17,770 --> 00:48:21,810 ここでこんにちは、世界の私の実装を示していることに、0と1です。 755 00:48:21,810 --> 00:48:25,530 しかし、私は自分のプログラム内の他の誰かの関数を使用しました。 756 00:48:25,530 --> 00:48:28,710 だから処理がされているにもかかわらず、私は、hello.cを取る 757 00:48:28,710 --> 00:48:34,280 それはアセンブリコードにコンパイルされ、その後は、0と1に組み立てされる 758 00:48:34,280 --> 00:48:37,460 この時点で出力されているのみ、0と1 759 00:48:37,460 --> 00:48:40,270 私のコードの結果そのものです。 760 00:48:40,270 --> 00:48:44,400 しかし、printfを書いた人は、彼らが20年前に自分のコードをコンパイル 761 00:48:44,400 --> 00:48:47,000 そしてそれが今では、アプライアンス上のどこかにインストールされている 762 00:48:47,000 --> 00:48:51,610 ので、我々は何らかの形で、私の0と1で彼または彼女の0と1をマージする必要があり 763 00:48:51,610 --> 00:48:56,160 それはリンクとして知られ、コンパイルの4番目と最後のステップに私たちをもたらします。 764 00:48:56,160 --> 00:48:58,680 だから左側に我々は以前とまったく同じ画像を持っている: 765 00:48:58,680 --> 00:49:02,580 hello.cのは、アセンブリ·コードは0と1になりますになります。 766 00:49:02,580 --> 00:49:05,960 しかし、私は私のコードで標準I / Oライブラリを使用したことを思い出す 767 00:49:05,960 --> 00:49:10,350 それはstdio.cというファイルがあるコンピュータ上のどこかに意味 768 00:49:10,350 --> 00:49:13,980 または少なくともコンパイルされたバージョンは、そのために何年か前に誰か 769 00:49:13,980 --> 00:49:18,530 アセンブリコードにstdio.cコンパイルされてから、0と1の全体の束。 770 00:49:18,530 --> 00:49:21,130 これは、静的または動的ライブラリとして知られているものです。 771 00:49:21,130 --> 00:49:23,350 これは、アプライアンス内のどこかに座っているいくつかのファイルです。 772 00:49:23,350 --> 00:49:28,710 >> しかし、最後に、私は私の0と1を取らなければならないと、その人の0と1 773 00:49:28,710 --> 00:49:32,760 そしてどういうわけか、0と1をそれらを組み合わせて、文字通り、それらをリンク 774 00:49:32,760 --> 00:49:37,900 a.outまたはhello1または何と呼ばれる単一のファイルに私は私のプログラムを呼び出し 775 00:49:37,900 --> 00:49:43,320 ので、最終的な結果は私のプログラムを構成する必要があり、1と0のすべてを持っていること。 776 00:49:43,320 --> 00:49:45,660 あなたはClangのを使用してきたので、すべてのこの時間、この学期 777 00:49:45,660 --> 00:49:48,750 さらに最近では、Clangのを実行するためにmakeを実行 778 00:49:48,750 --> 00:49:53,580 これらの手順のすべてが瞬時に、非常に意図的に一種の起こっている。 779 00:49:53,580 --> 00:49:57,830 そしてあなたは、すなわち、CS61、コンピュータサイエンスを続ける場合 780 00:49:57,830 --> 00:50:00,850 これは、あなたがそこから戻って剥がし続けるだろうという層です 781 00:50:00,850 --> 00:50:06,980 効率性、セキュリティへの影響、およびこれらの下位レベルの詳細のような話。 782 00:50:06,980 --> 00:50:09,220 しかし、それとともに、私たちは後ろにCを出ようとしている。 783 00:50:09,220 --> 00:50:11,420 先に進み、今では私たちの5分間の休憩を取りましょう、 784 00:50:11,420 --> 00:50:14,190 そして我々が戻ってくるとき:インターネット。 785 00:50:17,280 --> 00:50:19,170 かしこまりました。我々は戻ってきた。 786 00:50:19,170 --> 00:50:23,590 あなたが見るように、ので、今、私たちは、HTML形式ではない、弊社の外観を開始 787 00:50:23,590 --> 00:50:26,050 HTML自体は、実際にはかなり単純です。 788 00:50:26,050 --> 00:50:29,270 しかし実際にはWebプログラミングにおいて、より一般的には、より一般的にネットワーキング、 789 00:50:29,270 --> 00:50:31,770 そして、これらの技術のすべては、一緒にどのように来る 790 00:50:31,770 --> 00:50:35,400 私たちはインターネットの上にはるかに洗練されたプログラムを作成できるように 791 00:50:35,400 --> 00:50:38,690 これまでよりも、我々はこれらの黒と白の窓にすることができました。 792 00:50:38,690 --> 00:50:42,140 確かに、学期のこの時点で、我々は比較的短い時間を過ごすことになりますにもかかわらず 793 00:50:42,140 --> 00:50:46,200 PHPは、HTML、CSS、JavaScriptやSQLともっと上の、 794 00:50:46,200 --> 00:50:48,480 ほとんどの学生は、Webベースである最終的なプロジェクトをやってしまうの操作を行い 795 00:50:48,480 --> 00:50:51,230 お分かりのように、背景があなたは今、Cで持っているので、 796 00:50:51,230 --> 00:50:54,450 これらの高レベルの言語に適用することが非常によく似ている。 797 00:50:54,450 --> 00:50:56,800 >> そして、あなたは、あなたの最終的なプロジェクトについて考え始めるように 798 00:50:56,800 --> 00:50:59,940 その、はるかにあなたが奨励された問題セット0、のような 799 00:50:59,940 --> 00:51:02,160 スクラッチであなたに関心のほとんど何もする、 800 00:51:02,160 --> 00:51:05,790 最終的なプロジェクトは、Cを使って新しく得た知識と手腕をとることができます 801 00:51:05,790 --> 00:51:09,850 またはPHPやJavaScriptやスピンに出たい 802 00:51:09,850 --> 00:51:12,330 と見て、世界のためのソフトウェアの非常に独自の作品を作る。 803 00:51:12,330 --> 00:51:17,770 とアイデアを持つ種子をするには、ここでprojects.cs50.netを率いることができることを知っている。 804 00:51:17,770 --> 00:51:21,800 毎年、私たちはキャンパスに教職員や学生のグループからアイデアを募る 805 00:51:21,800 --> 00:51:27,330 ただ、コンピュータを使用して解決することができる興味深いもののために自分たちのアイデアを提出する 806 00:51:27,330 --> 00:51:29,860 ソフトウェアを使用して、ウェブサイトを使用して。 807 00:51:29,860 --> 00:51:32,360 だから、あなたがあなた自身のアイデアを思い付くのに苦労しているならば、 808 00:51:32,360 --> 00:51:35,790 是非とも今年、最後そこからアイデアをスクロールします。 809 00:51:35,790 --> 00:51:39,990 それは前に取り組まれたプロジェクトに取り組むために完全に大丈夫です。 810 00:51:39,990 --> 00:51:44,540 私たちは、キャンパス内での洗濯物の状態を見るため多くのアプリを見てきました 811 00:51:44,540 --> 00:51:47,000 ダイニングホールのメニューをナビゲートするための多くのアプリ、 812 00:51:47,000 --> 00:51:49,540 コー​​スカタログなどをナビゲートするための多くのアプリ。 813 00:51:49,540 --> 00:51:53,680 そして実際、将来の講演と今後のセミナーでは、 814 00:51:53,680 --> 00:51:57,750 我々は両方の市販されている、いくつかの公に利用可能なAPIを紹介します 815 00:51:57,750 --> 00:52:02,520 ここでも同様に利用できるCS50からキャンパス内のデータへのアクセスを持っているように、 816 00:52:02,520 --> 00:52:04,910 その後、それに面白いことを行うことができます。 817 00:52:04,910 --> 00:52:09,380 我々は仕様を離し、数日後に最終的なプロジェクトに、より多く、 818 00:52:09,380 --> 00:52:12,990 しかし今のところ、あなたはソロか1つまたは2つの友人と仕事ができることを知っている 819 00:52:12,990 --> 00:52:16,010 あなたに関心のほとんどすべてのプロジェクトで。 820 00:52:16,010 --> 00:52:18,080 インターネット。 821 00:52:18,080 --> 00:52:22,300 あなたが先に行くとあなたのラップトップを引き出し、あなたが初めてfacebook.comに行く 822 00:52:22,300 --> 00:52:27,020 最近ログインしていて、ヒットが入力したことはない。正確には何でしょうか? 823 00:52:27,020 --> 00:52:30,150 >> ステップのあなたのコンピュータ上でEnterをヒット、全体の束 824 00:52:30,150 --> 00:52:32,600 魔法のように起こっているのソートを開始します。 825 00:52:32,600 --> 00:52:35,960 だから、ここで左側には、FacebookなどのWebサーバーは右側にここにある、 826 00:52:35,960 --> 00:52:42,500 そして、どうにかして、HTTPと呼ばれるこの言葉は、Hypertext Transfer Protocolを使用しています。 827 00:52:42,500 --> 00:52:46,770 HTTPは、プログラミング言語ではありません。それはプロトコルのより多くのです。 828 00:52:46,770 --> 00:52:52,310 それが相互通信する場合は、WebブラウザとWebサーバが使用する一連の規則です。 829 00:52:52,310 --> 00:52:54,360 そしてこれが何を意味は次のとおりです。 830 00:52:54,360 --> 00:52:56,790 はるかに現実の世界のように、我々はこれらの規則を持っている 831 00:52:56,790 --> 00:53:00,140 どこで私をここhumoring気にしない場合は、初めていくつかの人間を満たしていれば、 832 00:53:00,140 --> 00:53:03,980 私は、あなたに出てくる、と言うかもしれない "こんにちは、私の名前はデビッドです。" >>こんにちは、デビッド。私の名前はサミーです。 833 00:53:03,980 --> 00:53:05,770 "やあ、デビッド。私の名前はサミーです。" 834 00:53:05,770 --> 00:53:08,310 だから今我々は愚かな人間のこの種のプロトコルのに従事している 835 00:53:08,310 --> 00:53:12,200 私はプロトコルを開始したところ、サミーは、対応してきました 836 00:53:12,200 --> 00:53:15,060 私たちは手を振とうしてきたが、トランザクションは完了します。 837 00:53:15,060 --> 00:53:18,260 HTTPは、心の中で非常によく似ています。 838 00:53:18,260 --> 00:53:23,350 Webブラウザの要求はwww.facebook.comとき、 839 00:53:23,350 --> 00:53:27,020 どのブラウザが本当にやっていることは、いわば、その手を広げてい 840 00:53:27,020 --> 00:53:29,960 サーバーとそれにメッセージを送信している。 841 00:53:29,960 --> 00:53:34,220 そして、そのメッセージは通常得るようなものです - あなたが得るために何をしたいですか? - 842 00:53:34,220 --> 00:53:38,740 私、通常はURLの末尾に、単一スラッシュで示されているホームページ、取得します。 843 00:53:38,740 --> 00:53:43,790 そして、ちょうどので、私が話しているどのような言語を知って、私はブラウザがあなたを伝えるつもりです 844 00:53:43,790 --> 00:53:46,930 私は、HTTPバージョン1.1を話していることを、 845 00:53:46,930 --> 00:53:51,980 また、ついでに、私はのホームページをしたいホストがあることを言うつもりです 846 00:53:51,980 --> 00:53:54,120 facebook.comです。 847 00:53:54,120 --> 00:53:57,730 一般的に、あなたに知られていないWebブラウザ、人間、 848 00:53:57,730 --> 00:54:03,350 あなたは単に、www.facebook.comを入力したときに、インターネットを介してこのメ​​ッセージを送信します 849 00:54:03,350 --> 00:54:05,370 >> ブラウザに入力します。 850 00:54:05,370 --> 00:54:07,300 とFacebookは何がで応答しますか? 851 00:54:07,300 --> 00:54:12,540 これは、いくつかの似たような見栄えの不可解な細部もはるかに使用して応答します。 852 00:54:12,540 --> 00:54:14,310 私はここで、Facebookのホームページに先に行きましょう。 853 00:54:14,310 --> 00:54:17,480 これは、あなたがすべての時間にログインしたままにした場合、私たちのほとんどは、おそらく見ることはないという画面です 854 00:54:17,480 --> 00:54:19,830 しかし、これは確かに彼らのホーム·ページです。 855 00:54:19,830 --> 00:54:24,150 我々はChromeでこれを行う場合は、これらの小さなコンテキストメニューをプルアップすることがわかります。 856 00:54:24,150 --> 00:54:26,980 Chromeを使って、Mac OSやWindows、Linux、またはのようなのかどうか、 857 00:54:26,980 --> 00:54:31,840 あなたはクリックや左クリックをコントロールしている場合には、通常、このようなメニューをプルアップすることができます 858 00:54:31,840 --> 00:54:35,870 どこにいくつかのオプションは、ページのソースを表示となっているものをお待ちしております。 859 00:54:35,870 --> 00:54:39,920 あなたはまた、典型的には、[表示]メニューに移動して、つつくことによって、これらのものを得ることができます。 860 00:54:39,920 --> 00:54:42,750 例えば、ここに表示]の下で、開発者は同じことです。 861 00:54:42,750 --> 00:54:45,780 私が先に行くと、ページのソースを表示を見てみたいと思います。 862 00:54:45,780 --> 00:54:50,800 何が表示されますと、マークがfacebook.comを表現す​​るために書かれたHTMLです。 863 00:54:50,800 --> 00:54:55,910 ここは完全な混乱だが、我々はずっと前から、これはもう少し理にかなっていることがわかります。 864 00:54:55,910 --> 00:54:59,840 しかし、ここでいくつかのパターンがあります。私はこのようなものまでスクロールダウンしてみましょう。 865 00:54:59,840 --> 00:55:05,730 人間は山括弧のこのパターンを読みますが、そこに注意することは、これは難しいです 866 00:55:05,730 --> 00:55:10,360 オプション値のようなキーワード、いくつかの引用符で囲まれた文字列のようなキーワードを持つ。 867 00:55:10,360 --> 00:55:15,660 指定した場所、あなたは非常に初めてサインアップしたとき、これは、あなたの誕生年とは何かということです。 868 00:55:15,660 --> 00:55:19,020 出生年のドロップダウンメニューが何とかここエンコードされていること 869 00:55:19,020 --> 00:55:23,870 この言語で、HTML、ハイパーテキストマークアップ言語と呼ばれる。 870 00:55:23,870 --> 00:55:27,730 言い換えれば、あなたのブラウザがWebページを要求すると、 871 00:55:27,730 --> 00:55:30,610 それは、HTTPと呼ばれるこの大会を話す。 872 00:55:30,610 --> 00:55:35,170 しかし、facebook.comは、その要求に何がで応答しますか? 873 00:55:35,170 --> 00:55:38,260 >> 我々は一瞬にしてわかりますように、それは、これらの不可解なメッセージのいくつかを使用して応答します。 874 00:55:38,260 --> 00:55:43,760 しかし、その反応のほとんどは、HTML、ハイパーテキストマークアップ言語の形式になっています。 875 00:55:43,760 --> 00:55:47,170 つまり、Webページが書かれている実際の言語です。 876 00:55:47,170 --> 00:55:52,030 し、Webブラウザでは、実際に、このようなものを受信したときに、何かありません 877 00:55:52,030 --> 00:55:57,120 それは左から右へ、上から下へ読み込み、任意の時間は、それは、これらの山かっこの1を見て 878 00:55:57,120 --> 00:56:03,370 オプションのようなキーワードが続き、それが適切な方法でそのマークアップ言語が表示されます。 879 00:56:03,370 --> 00:56:06,820 この場合、それは年のドロップダウンメニューを表示していました。 880 00:56:06,820 --> 00:56:09,240 しかし、再び、これは見て完全な混乱です。 881 00:56:09,240 --> 00:56:16,630 Facebookの開発者は、例えば、スタイルのために5の場合は0を現すので、これはそうではありません。 882 00:56:16,630 --> 00:56:20,190 それらが記述したコードのほとんどは、実際には、美しく書かれているためであり、 883 00:56:20,190 --> 00:56:22,450 よく、きれいにインデントなど、コメントして 884 00:56:22,450 --> 00:56:26,080 もちろん機、コンピュータから、ブラウザが本当に気にしないでください 885 00:56:26,080 --> 00:56:27,890 あなたのコードは、よくスタイルであるかどうか。 886 00:56:27,890 --> 00:56:33,100 そして、実際に、それはタブ·キーを打つために、完全に無駄だすべてのそれらの時 887 00:56:33,100 --> 00:56:37,650 と、コード全体すべてのコメントを書いたりすると、本当に説明変数名を選択する 888 00:56:37,650 --> 00:56:42,340 ブラウザが気にしていない場合ので、あなたが一日の終わりにやっていることすべてがバイトを無駄にしています。 889 00:56:42,340 --> 00:56:46,660 >> だから、何ほとんどのウェブサイトが行うことにもかかわらず、facebook.comのソースコードです判明 890 00:56:46,660 --> 00:56:49,550 インターネット上cs50.netとこれら他のウェブサイトのすべてのための 891 00:56:49,550 --> 00:56:53,730 一般的によく書かれてなコメントがうまくインデントと似ていますが、 892 00:56:53,730 --> 00:56:59,270 ウェブサイトがインターネット上に置かれ、通常、前に、コードは、縮小される 893 00:56:59,270 --> 00:57:02,970 それによってHTMLとCSS - 私たちはすぐにわかります何か他のもの - 894 00:57:02,970 --> 00:57:05,960 我々はすぐに表示されますJavaScriptコードは圧縮され、 895 00:57:05,960 --> 00:57:09,250 それによって長い変数名は、XとYとZになり、 896 00:57:09,250 --> 00:57:13,900 そしてすべてがとても読みやすく見えるようにそのその空白のすべてがすべて、捨てられる 897 00:57:13,900 --> 00:57:17,700 - あなたはそれをこのように考えると、Facebookは億ページが日に当たる取得するため、 898 00:57:17,700 --> 00:57:21,670 狂ったように何か - プログラマがちょうど肛門のIFだから何 899 00:57:21,670 --> 00:57:26,660 ちょうど今までそんなに多くのコードのいくつかの行を字下げするにはスペースバーを1余分な時間を打つ? 900 00:57:26,660 --> 00:57:29,500 Facebookが保持する場合は意味は何だと空白 901 00:57:29,500 --> 00:57:32,880 すべてのバイトで、彼らはインターネット上の人々に送り返す? 902 00:57:32,880 --> 00:57:36,400 スペースバーを押すと、一度、あなたのファイルに余分なバイトを与える。 903 00:57:36,400 --> 00:57:39,730 そして、もし億人の人々がその後、その日自宅のダウンロードページに進む 904 00:57:39,730 --> 00:57:42,060 あなたは、インターネット上でどれだけ多くのデータを送信している? 905 00:57:42,060 --> 00:57:45,200 これといった理由もなくギガバイト。 906 00:57:45,200 --> 00:57:48,510 と与えられ、多くのウェブサイトのためにこれは、そのようなスケーラブルな問題ではありません 907 00:57:48,510 --> 00:57:51,030 しかしFacebookは、Googleにとっては、最も人気のあるウェブサイトのいくつかのために 908 00:57:51,030 --> 00:57:54,860 大きな動機は、あなたのコードは混乱のように見えるように財政的にあり 909 00:57:54,860 --> 00:57:58,980 ので、それを圧縮に加えて、できるだけ少ないバイトとして使用していること 910 00:57:58,980 --> 00:58:01,500 ZIPのような何かは、gzipと呼ばれるアルゴリズムを使用して、 911 00:58:01,500 --> 00:58:04,250 ブラウザが自動的にあなたのためにないこと。しかし、これはひどいです。 912 00:58:04,250 --> 00:58:08,060 我々は他の人々のウェブサイトについて何かを学ぶことは決してないだろうと、Webページをデザインする方法 913 00:58:08,060 --> 00:58:09,680 我々はこのようにそれを見なければならない場合。 914 00:58:09,680 --> 00:58:13,620 >> だから幸いなことに、ChromeとIEとFirefoxのようなブラウザでは、これらの日 915 00:58:13,620 --> 00:58:16,450 典型的には、組み込みの開発者ツールが付属しています。 916 00:58:16,450 --> 00:58:21,730 私は要素または場合を点検するためにここに行けば実際には、私は、開発者を表示するために行く 917 00:58:21,730 --> 00:58:25,220 と、明示的に開発者ツールに行く 918 00:58:25,220 --> 00:58:27,640 私の画面の下部に、このウィンドウがポップアップ表示されます。 919 00:58:27,640 --> 00:58:31,230 不慣れなタブの多くはここにありますので、最初は少し威圧的だ 920 00:58:31,230 --> 00:58:34,510 左下のが、私は要素をクリックした場合にすべての方法、 921 00:58:34,510 --> 00:58:38,810 Chromeは明らかに非常にスマートです。これは、すべてのコードを解釈する方法を知っている。 922 00:58:38,810 --> 00:58:42,320 それでChromeは何それはFacebookのすべてのHTMLをクリーンアップしています。 923 00:58:42,320 --> 00:58:45,680 空白はそこではないにもかかわらず、インデントが、そこではありません 924 00:58:45,680 --> 00:58:51,120 今私はすべてのそれ以上の階層的にこのWebページをナビゲートするために始めることができることがわかります。 925 00:58:51,120 --> 00:58:56,910 それは、HTML5と呼ばれる言語で書かれたすべてのWebページがこれで開始する必要があることが判明 926 00:58:56,910 --> 00:59:03,980 いわばこのDOCTYPE宣言<!DOCTYPE HTML> 927 00:59:03,980 --> 00:59:07,840 、それは、光と灰色そこのようなものだが、それはこのファイル内のコードの最初の行です 928 00:59:07,840 --> 00:59:12,080 とばかりにブラウザに指示している、 "ねえ、ここでいくつかのHTML5は付属しています。ここでWebページが付属しています。" 929 00:59:12,080 --> 00:59:18,490 を超えた最初の開き括弧は、このことは、オープンブラケットHTMLタグであることを起こる 930 00:59:18,490 --> 00:59:22,320 私はより深くに飛び込む場合、その後 - これらの矢は完全に無意味です。 931 00:59:22,320 --> 00:59:25,140 彼らはプレゼンテーションのためだけであり、それらはファイル中に実際にはありません - 932 00:59:25,140 --> 00:59:30,300 FacebookのHTMLタグと内側、開き角括弧で始まる何かを気付く 933 00:59:30,300 --> 00:59:32,910 そしてその単語はタグと呼ばれていました。 934 00:59:32,910 --> 00:59:38,610 だから、HTMLタグで囲まれたどうやらheadタグとbodyタグです。 935 00:59:38,610 --> 00:59:41,930 headタグの中は今、Facebookの全体の混乱です 936 00:59:41,930 --> 00:59:45,620 彼らはマーケティングおよび広告のためのメタデータや他の多くのものを持っているからです。 937 00:59:45,620 --> 00:59:50,600 >> 我々は下にスクロールした場合でも、ダウン、ダウン、ダウン、それがどこにあるか見てみましょう。ここにある。 938 00:59:50,600 --> 00:59:52,210 この1つは、少なくともある程度精通している。 939 00:59:52,210 --> 00:59:55,990 Facebookのホームページのタイトル、あなたがあなたのタイトルバーにタブが表示されている場合は、 940 00:59:55,990 --> 00:59:59,060 フェイスブックへようこそです - は、ログインサインアップまたはこちらをご覧ください。 941 00:59:59,060 --> 01:00:01,110 つまり、あなたがChromeのタイトルバーに表示されるものだ 942 01:00:01,110 --> 01:00:03,100 そしてそれは、それがコードで表さている方法です。 943 01:00:03,100 --> 01:00:08,090 我々は頭の中で他のすべてを無視した場合、Webページの根性のほとんどは、ボディ内にある 944 01:00:08,090 --> 01:00:10,940 そして、それはFacebookのコードが複雑に見えるために起こっていることが判明 945 01:00:10,940 --> 01:00:14,540 ほとんどのものよりも、我々は、それが年月をかけて構築されているという理由だけで最初に書こうと思います 946 01:00:14,540 --> 01:00:17,260 しかし、scriptタグの全体の多くは、JavaScriptコードは、そこ 947 01:00:17,260 --> 01:00:18,870 それは、ウェブサイトが非常にインタラクティブにする: 948 01:00:18,870 --> 01:00:22,330 瞬時JavaScriptのような言語を使用して、ステータスの更新を見て。 949 01:00:22,330 --> 01:00:25,270 ページの一部門であるdiv要素と呼ばれるものは、ありません。 950 01:00:25,270 --> 01:00:27,940 しかし、我々はその詳細に​​入る前に、ズームアウトしてみましょう 951 01:00:27,940 --> 01:00:31,920 そしていわば、Facebookの1.0の簡易バージョンを見てみましょう。 952 01:00:31,920 --> 01:00:34,740 ここでは、Webページのこんにちは、世界です。 953 01:00:34,740 --> 01:00:37,370 それは非常に上部にそのDOCTYPE宣言がある 954 01:00:37,370 --> 01:00:40,280 これは、他のすべてとは少々異なっています。 955 01:00:40,280 --> 01:00:46,130 我々は、Webページに書いて他には何も<で始めようとしているされていません!その行を除いてそこに 956 01:00:46,130 --> 01:00:48,880 とHTMLのコメントと呼ばれるものを除く。 957 01:00:48,880 --> 01:00:53,000 しかし、ほとんどの部分は、Webページ内のすべてのものは、オープンブラケット、キーワード、近くのブラケットです。 958 01:00:53,000 --> 01:00:56,220 >> このケースでは、可能なWebページの最も単純なを見ることができます。 959 01:00:56,220 --> 01:01:00,260 、HTMLタグはheadタグが含まれており、それは、bodyタグが含まれています 960 01:01:00,260 --> 01:01:04,580 しかし、タグの開始と停止のこの概念があることに気づく。 961 01:01:04,580 --> 01:01:11,360 これは、HTMLの開始タグですが、これは終了タグまたは終了タグです。 962 01:01:11,360 --> 01:01:15,400 彼らはある意味で正反対のようなものだということに注意して終了タグまたは終了タグ 963 01:01:15,400 --> 01:01:20,030 これは前方に自身の内側にスラッシュがあります。 964 01:01:20,030 --> 01:01:23,540 一方、ここにここにオープンheadタグとクローズヘッドタグがあります。 965 01:01:23,540 --> 01:01:26,880 >> オープンタイトルと密接なタイトルタグがここにあります。 966 01:01:26,880 --> 01:01:29,850 私は純粋に任意の1行でタイトルを入れてきたという事実。 967 01:01:29,850 --> 01:01:33,760 1行にうまく収まるようにようにそれはちょうど見えたので、私は数回Enterキーを押す気にしませんでした。 968 01:01:33,760 --> 01:01:38,200 一方、私がしたボディは、ちょうど今までので、明確にしてインデントします。 969 01:01:38,200 --> 01:01:41,050 HTMLはかなり間抜けな言語であることに注意してください。 970 01:01:41,050 --> 01:01:43,410 実際、昔にWYSIWYGエディタがあった前 971 01:01:43,410 --> 01:01:46,770 あなたは、言うことができるとMicrosoft Word "は、このイタリックを作る、これは太字にし、" 972 01:01:46,770 --> 01:01:50,850 あなたは実際に20年以上前にエッセイに少しのコマンドを入力します。 973 01:01:50,850 --> 01:01:55,740 あなたが言うことによって、 "このテキストを太字に作り始める。このテキストが太字に停止します。" 974 01:01:55,740 --> 01:01:59,010 "このテキストイタリック体を作り始める。このテキストイタリック体を作って停止します。" 975 01:01:59,010 --> 01:02:01,850 >> つまり、HTMLまたは他のマークアップ言語が何であるかです。 976 01:02:01,850 --> 01:02:05,530 この最初のタグには、 "ねえ、ブラウザがここでいくつかのHTMLが来る"と言う。 977 01:02:05,530 --> 01:02:09,880 次のタグは、 "ねえ、ブラウザがここで頭、私のWebページのヘッダーが来る"と言う。 978 01:02:09,880 --> 01:02:11,650 "ねえ、ブラウザがここでタイトルを付属しています。" 979 01:02:11,650 --> 01:02:15,880 そして、こっちに、 "ねえ、ブラウザのタイトルのためのそれだ。" 980 01:02:15,880 --> 01:02:20,000 だから、これは世界では、ブラウザはもはやハローよりも多くの文字を表示しない場合は、知っている方法です 981 01:02:20,000 --> 01:02:21,860 タイトルバーに表示されます。 982 01:02:21,860 --> 01:02:23,640 一方、これによると、 "それはそれは頭のためだ。" 983 01:02:23,640 --> 01:02:28,340 これは、 "ここに体が来るここで、実際のボディがある"と言います - こんにちは、世界、文字通り言葉。 984 01:02:28,340 --> 01:02:33,190 そして、これはここで言う、 "それはボディのためのそれだ。HTMLのそれですね。" 985 01:02:33,190 --> 01:02:34,640 だからブラウザはかなり間抜けです。 986 01:02:34,640 --> 01:02:39,920 彼らはただ、左から右へ、上から下へのこのようなものを、読み、正確に彼らが何を言われて何をすべきか。 987 01:02:39,920 --> 01:02:41,860 実際にここで少し例を行いましょう。 988 01:02:41,860 --> 01:02:46,240 テキストエディットすなわち、私はここに私のMac上のプログラムの最も単純なを開けてみましょう。 989 01:02:46,240 --> 01:02:48,220 Windowsでは、メモ帳を使用することができます。 990 01:02:48,220 --> 01:02:50,520 しかし、これはあなたがウェブページを作り始めるために必要なすべてのです。 991 01:02:50,520 --> 01:02:53,730 私は先に行くと、ちょうどこのファイルにこのコードをコピーして貼り付けるつもりです。 992 01:02:53,730 --> 01:02:57,210 私は、先に行くと、私のデスクトップに保存するつもりです 993 01:02:57,210 --> 01:03:01,220 と私は、hello.htmlとしてこれを保存するつもりです 994 01:03:01,220 --> 01:03:03,840 現在はファイルがhello.htmlという名前が付いています。 995 01:03:03,840 --> 01:03:05,690 ここにそれは私のデスクトップです。 996 01:03:05,690 --> 01:03:11,130 私は、ブラウザに移動して、ブラウザにファイルをドラッグしてみましょう。 997 01:03:11,130 --> 01:03:14,060 と出来上がりには、ここに私の非常に最初のウェブページです。 998 01:03:14,060 --> 01:03:17,340 タブのタイトルがhelloであることに注意して、タイトルタグごとのような世界、 999 01:03:17,340 --> 01:03:20,040 そして、こんにちは、世界は私のWebページの本体であることに気づく 1000 01:03:20,040 --> 01:03:22,190 と宇、ホー、私はインターネット上だ。 1001 01:03:22,190 --> 01:03:24,700 >> このファイルはインターネット上にありませんので、私は、右、本当に分からない。 1002 01:03:24,700 --> 01:03:28,330 それには、その特定のパスで私のローカルのハードドライブにあることを起こる。 1003 01:03:28,330 --> 01:03:32,720 しかし、考え方は同じです。我々が今必要なのはそれをアップロードするWebサーバーです。 1004 01:03:32,720 --> 01:03:37,410 しかし、最初に、実際にはもう少し複雑さともう少し様式を紹介してみましょう。 1005 01:03:37,410 --> 01:03:39,890 退屈な、ウェブページなら、これは簡単です。 1006 01:03:39,890 --> 01:03:41,990 我々が使用できるタグの他の種類があるうちはそれになります。 1007 01:03:41,990 --> 01:03:45,530 例えば、ここに黄色で私は2つの新しいタグを導入しました。 1008 01:03:45,530 --> 01:03:49,630 我々は、これらの今日と多くを果たしているが、気づかないだろうそのリンクタグ 1009 01:03:49,630 --> 01:03:52,520 何とかして他のすべてから違って見える。 1010 01:03:52,520 --> 01:03:55,370 リンクタグには、属性と呼ばれるものを取り 1011 01:03:55,370 --> 01:03:59,770 と属性は、タグの動作を変更しますものです。 1012 01:03:59,770 --> 01:04:03,840 この場合において、これは、リンク名の最良の選択ではありませんが、それは無意味のようなものだから 1013 01:04:03,840 --> 01:04:11,590 しかし、このリンクタグは基本的に言う、私のWebページ内styles.cssを呼ばれるファイルが含まれています。 1014 01:04:11,590 --> 01:04:15,400 あなたはCの#includeディレクティブには、このように類似したものと考えることができます。 1015 01:04:15,400 --> 01:04:19,650 styles.cssは、我々が今日に再生されないことを完全に別の言語に言及している 1016 01:04:19,650 --> 01:04:23,790 それは美学のためだ:フォントサイズ、色、パディング、インデント、マージン、 1017 01:04:23,790 --> 01:04:26,040 と美学の詳細のその種のすべて。 1018 01:04:26,040 --> 01:04:28,820 一方、スクリプトタグは、機能的に類似しています 1019 01:04:28,820 --> 01:04:33,140 むしろCSSのインクルードは、その言語ではなく、それは別の言語は、JavaScriptが含まれています。 1020 01:04:33,140 --> 01:04:37,810 だから、他の言葉で、これらの2つのタグを使用して、私は最終的に自分のWebページを記述することができるようになります 1021 01:04:37,810 --> 01:04:41,490 私や他の誰かが書いたコードではなく、プル 1022 01:04:41,490 --> 01:04:44,350 我々は他の人の肩の上に立つことができるように、我々は、良いデザインを練習することができます 1023 01:04:44,350 --> 01:04:46,120 共通コードのうちファクタリング。 1024 01:04:46,120 --> 01:04:49,090 私は10種類のウェブページを持っていれば、これは私の美学のいくつかのことを意味します 1025 01:04:49,090 --> 01:04:52,490 #別のファイルに含まれるのと同じように、因数分解出することができます。 1026 01:04:52,490 --> 01:04:54,420 だから我々はそこに取得している。 1027 01:04:54,420 --> 01:04:57,180 しかし、ここで実際に最初にこのファイルを使ってもっと面白いことを行うことができます。 1028 01:04:57,180 --> 01:05:01,110 >> 繰り返しますが、これは単なるテキストエディットです。私はまだインターネット上で技術的にはないんだけど、私たちはそこを得るでしょう。 1029 01:05:01,110 --> 01:05:04,910 私はそれがそうであるよりこんにちは、世界は少し太くしたいのですが。 1030 01:05:04,910 --> 01:05:10,890 だからこんにちは、任意に太字用を言ってみましょう。 1031 01:05:10,890 --> 01:05:15,910 繰り返しになりますが、ストーリーは同じです:こんにちは、カンマ(、)、、これは大胆な作り始める 1032 01:05:15,910 --> 01:05:19,730 その後世界は、太字で印刷され、これは太字で、この印刷を停止されることを意味し。 1033 01:05:19,730 --> 01:05:24,020 私が先に行くと、私のファイルを保存すると、Chromeに戻りましょう、私はちょうどので、私たちは、それが良く見えるにズームインします 1034 01:05:24,020 --> 01:05:27,870 とリロード、あなたはその世界は、太字で今がお分かりでしょう。 1035 01:05:27,870 --> 01:05:31,810 Webはハイパーリンクがすべてですので、先に進み、このような操作が可能です。 1036 01:05:31,810 --> 01:05:38,550 私の好きな​​ウェブサイトは、youtube.com、としましょう​​。 1037 01:05:38,550 --> 01:05:43,810 リロードし、保存します。オーケー。今ではウェブサイトのhideousness以外カップルの問題があります。 1038 01:05:43,810 --> 01:05:47,310 1、私はここでEnterキーを打つと確信しています。と私でした。 1039 01:05:47,310 --> 01:05:51,590 私は、私たちがスタイルについて説教してきたものの練習は、私もインデント、Enterキーを押すだけでなく、 1040 01:05:51,590 --> 01:05:54,930 しかし、私は、世界のすぐ隣にあります。 1041 01:05:54,930 --> 01:05:58,410 だから、これはなぜですか?ブラウザでは、あなたがそれらが何を言う何をすべきか。 1042 01:05:58,410 --> 01:06:04,010 私は "ここに行を分割します。段落はここで破る挿入します"は、ブラウザを語っていない 1043 01:06:04,010 --> 01:06:07,820 私は30回リターンキーを押すと、ブラウザがそうなら、それは問題ではない、 1044 01:06:07,820 --> 01:06:10,820 それはまだ世界の隣に私の右手を置くつもりだ。 1045 01:06:10,820 --> 01:06:15,930 私は本当にここにしなければならないことは、あったら何かのように言って改行を挿入しています。 1046 01:06:15,930 --> 01:06:17,940 >> そして実際に、改行が奇妙なことの一種である 1047 01:06:17,940 --> 01:06:21,650 あなたが本当に別の行に移動を開始することはできませんので、次に何かをする、 1048 01:06:21,650 --> 01:06:25,380 してから、新しい行に移動し停止します。それは、アトミック操作のようなものだ。 1049 01:06:25,380 --> 01:06:28,140 あなたはどちらか、それを行うか、あなたはしないでください。あなたは、Enterキーをたたいたり、あなたはしないでください。 1050 01:06:28,140 --> 01:06:33,390 だからbrは異なるタグの少しですので、私は両方ともオープンの並べ替え、それを閉じる必要があります 1051 01:06:33,390 --> 01:06:35,230 すべてを一度に。 1052 01:06:35,230 --> 01:06:37,500 の構文はこれです。 1053 01:06:37,500 --> 01:06:41,760 技術的には、HTMLの一部のバージョンではこのような何かができる 1054 01:06:41,760 --> 01:06:45,600 何かを起動および停止する理由はありませんので、これはちょうど愚かである 1055 01:06:45,600 --> 01:06:48,420 代わりにすべてを一度に行うことができます。 1056 01:06:48,420 --> 01:06:52,310 、HTML5は、厳密には、このスラッシュを必要としないことに気付く 1057 01:06:52,310 --> 01:06:55,410 ので、それを持っていない教科書やオンラインリソースが表示されます 1058 01:06:55,410 --> 01:06:59,780 しかし、ついでに私たちがこれまで見てきた対称性を練習してみましょう。 1059 01:06:59,780 --> 01:07:02,870 これは、タグが両方オープンとクローズであることを意味します。 1060 01:07:02,870 --> 01:07:05,220 だから今私はここに戻って、私のファイルを保存しておきましょう。 1061 01:07:05,220 --> 01:07:10,240 わかりましたので、それは私が知っているWebはクリッカブルの一種である以外は、良く見えるし始めている、 1062 01:07:10,240 --> 01:07:13,610 そしてまだここにYou​​Tubeが何かにつながるようには思えない。 1063 01:07:13,610 --> 01:07:17,560 それがリンクに見えたとしても、ブラウザがそれ自体を知らないからね、 1064 01:07:17,560 --> 01:07:20,670 ので、私はこれはリンクであることをブラウザに指示する必要があります。 1065 01:07:20,670 --> 01:07:22,620 >> これを行う方法はアンカータグを使用することです: 1066 01:07:22,620 --> 01:07:26,770 <リンクを言うの古い学校の方法であるハイパーリファレンス、のhref、 1067 01:07:26,770 --> 01:07:35,900 = "http://www.youtube.com"> 1068 01:07:35,900 --> 01:07:38,490 そして、それはもう少し読みやすく私はちょうどので、新しい行にこれを移動させ 1069 01:07:38,490 --> 01:07:40,060 と私は、フォントサイズを縮小します。 1070 01:07:40,060 --> 01:07:43,890 私はまだ終わっていますか?いいえ、この二分法が行われる予定です。 1071 01:07:43,890 --> 01:07:46,760 このタグは、アンカータグは、確かに、属性がかかりますか 1072 01:07:46,760 --> 01:07:52,900 これは、その動作を変更し、その属性の値は明らかにYouTubeのURLです。 1073 01:07:52,900 --> 01:07:56,380 しかし、二項対立に気づくこと、それはあなたがしようとしているURLです理由だけということです 1074 01:07:56,380 --> 01:08:01,020 それはあなたが下線とリンクを作っていることを言葉でなければならないということではありません。 1075 01:08:01,020 --> 01:08:03,960 むしろ、それはこのようなものになることができます。 1076 01:08:03,960 --> 01:08:10,870 だから私はこの言葉に近いアンカータグを使用してハイパー製造を停止と言わざるを得ない。 1077 01:08:10,870 --> 01:08:12,650 私はこれをやっていないよ注意してください。 1078 01:08:12,650 --> 01:08:15,890 1、これはただのみんなの時間の無駄だろうし、それは必要ありません。 1079 01:08:15,890 --> 01:08:19,290 >> タグを閉じるには、もう一度だけ、タグの名前を言及。 1080 01:08:19,290 --> 01:08:21,800 あなたは、属性のいずれかを言及していない。 1081 01:08:21,800 --> 01:08:26,189 だから、戻って行くというのは、保存しておきましょう。さて、出来上がりは、今では青とハイパーリンクです。 1082 01:08:26,189 --> 01:08:29,430 私はそれをクリックした場合、私は実際にYouTubeに行くのですか。 1083 01:08:29,430 --> 01:08:32,529 私のWebページがインターネット上にない場合でも、だから、それは、少なくともHTMLです 1084 01:08:32,529 --> 01:08:37,930 私たちは、インターネットが追いつくようならば、私たちは実際にyoutube.comでここに終わるだろう。 1085 01:08:37,930 --> 01:08:40,670 と私は戻って行くことができ、ここで私のWebページです。しかし、これに気づく。 1086 01:08:40,670 --> 01:08:43,120 あなたは今までスパムやフィッシング攻撃を得ている場合、 1087 01:08:43,120 --> 01:08:45,850 今、あなたは同じことをするだけで、5分後に能力を持っています。 1088 01:08:45,850 --> 01:08:50,920 我々はここに行くとwww.badguy.comような何かを行うことができます 1089 01:08:50,920 --> 01:08:59,319 または何でも大ざっぱなウェブサイトがあり、その後、あなたのPayPalアカウントを確認すると言うことができます。 1090 01:08:59,319 --> 01:09:04,840 [笑い]そして今、この私はをクリックしてするつもりはないbadguy.comに行くつもりです 1091 01:09:04,840 --> 01:09:08,000 私は、それが導く見当がつかないので。 [笑い] 1092 01:09:08,000 --> 01:09:10,859 >> しかし、我々は今、実際にそこまで終わらせる能力を持っています。 1093 01:09:10,859 --> 01:09:12,640 だから我々は実際には単なる表面に傷を付け始めている。 1094 01:09:12,640 --> 01:09:15,830 我々は、それ自体がプログラミングしていない、我々は、マークアップ言語を作成している。 1095 01:09:15,830 --> 01:09:18,569 しかし、すぐに我々は、HTMLで私たちの語彙の締めくくりとして、 1096 01:09:18,569 --> 01:09:21,520 我々は、PHP、実際のプログラミング言語を紹介します 1097 01:09:21,520 --> 01:09:26,859 それは、自動的にCSSを生成し、私たちは自動的にHTMLを生成するようになります 1098 01:09:26,859 --> 01:09:29,430 私たちは、言う、実装するために水曜日に開始できることを 1099 01:09:29,430 --> 01:09:31,700 当社独自の検索エンジンなどがあります。 1100 01:09:31,700 --> 01:09:34,770 数日でその上が、より多くの。次にお会いしましょう​​。 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]