[Powered by Google Translate] [週7]
[デビッド·J·マラン - ハーバード大学]
[これはCS50です。 - CS50.TV]
かしこまりました。お帰りなさい。これはCS50であり、これは7週の始まりです。
ちょっとアナウンスのカップル：
Pset5は、現在進行中である、またはすぐにしなければならない
とはっきり言って、私に言わせて、これは、より厳しいレベルになる傾向がありません
コー​​スの問題セットのため、これが今の私が言っておきます
今週はこれまで以上にあなたがするまで待機しないように、水曜日の夜は、言う
または木曜日の夜はインチダイブする
これは間違いなく面白いPSETです。我々は、それが楽しいことだと思います。
あなたは実際にそれが完全に正しい取得し、いわゆるビッグボードに挑戦することができた場合は、
あなたはもちろんのスタッフの何人かと知恵と一致する機会があるでしょう
とクラスメートの一部。
何がビッグボードであることは、一度、あなたのスペルチェッカが動作するようになったです
あなたは、次のコマンドを実行した後cs50.netに行くことができるでしょう
純粋にオプトインした後、時間の量とRAMの量より
あなたの実装で使用されていることを当然のホームページにここに展示されます。
あなたはここで、これらの人々の全体の束がスタッフとしてリストされていることに気づくでしょう
週末以来、スタッフはお互いを出し抜こうとするの楽しいだろうと思った。
だからここでの目標は、スタッフをしのぐことではないことを認識しています。
でも、私は13番でここだけです。
純粋に選ぶが、それはどれだけ少ないRAM見る機会だ
とどのようにいくつかのCPU秒あなたは向かいあってクラスメートの一部を使用することができます。
>> そして私は、そのケヴィンマイケル·シュミットを認めるよ
現在TFの一つとしてナンバー1の位置では、
これは我々が不可能と呼んでいる実装です
彼はローディングのためにほぼ0のRAMとほぼ0秒を使っていることを考えれば。
だから我々は、ケビン·オフラインの世話をします。 [笑い]
ケビンはここのテストに入れていることは確かなスキルがあります。
我々はあまりにもやるだろうと思っていたことの一つは、CS50xが進行中の週であるようになりました
そしてあなたたちはできるだけ多くのこれらの学生であるように、この実験の一部です。
私たちは、まっさらのプロジェクトを提出することも同様であった、彼らのPSET0の一部としてそれらを求めてきました
のそれらへの関心 - ゲーム、インタラクティブアートの作品、アニメーションなど -
1から2分のビデオに、彼らが希望した場合、世界に挨拶している人は、実際にされています。
私はあなたと一緒にこれまで提出されているビデオだけのカップルを共有したいと思っ
私たちのために、少なくともスタッフに、それは本当にエキサイティングだったため
そして世界中からこれらの人々を見て感激 - 世界中の国々 -
インターネット上のコンピュータサイエンスのコースに、すべてのものの多くが、チューニング、
彼らは自分の研究を継続したいので、それがあるかどうか、
彼らは、新しい方向に自分のキャリアを利用したい
彼らは、自分の知識のギャップを埋めたい
君たちは、おそらくここにいたのと同じ理由のいくつかはあまり。
>> だから私はここであなたに、そのような生徒を与える。あなたは、ボリュームを少しだけ上げることができる。
ここに私たちの学生の1分提出の一つです。
こんにちは、世界。私はここマラガ、スペインのインダストリアル·エンジニアリングの学生です。
私はコンピュータ科学を愛しているので、私は、私は本当に、このオンラインコースで興奮しています
と私は本当に私はそれを探るために得ることを感謝しております。
そして、私はあなたたちと同じすべてを学ぶことができるという事実は、やる
その代わり、私はマラガで午前ハーバードにいるかのような、それがどのように素晴らしいですか？
まあ、私はフェルナンドですが、これはCS50です。君たちを見てください。
[笑い]私たちが特に気に入って別のクリップには、この紳士の英語が強くないことがわかります。
彼はそれを機械翻訳していたように見え、翻訳自体は少し不完全であるので、
しかし、これは、これまで同様に私たちのお気に入りの一つであった。
[♪♪]
こんにちは、世界。 [日本語で話し]
[私の英語は非常に信頼性がないので、私は日本語であいさつをしなければなりません。]
[私は岐阜の街からあなたへのメッセージをお届けしています。]
[私が見られるように、20年ぶりに学生であることができます。]
[私はこの機会とEDXを行ったハーバード大学に非常に感謝しています。]
[ゴルフは連続したギターと私の好きな​​ものがあります。] [笑い]
[♪♪]
[なぜあなたは、私がcs50xに出席しようとしていたと思います。]
[ハーバード大学、それは私の憧れです。]
[私は日本に住んでいた遠い存在です場合は特に。]
[私は、そのようなEDX時の存在を知ってすぐに試してみたかった。]
[あなたがIの学習の年齢に関係しないそう思わない]
[CS50は私の憧れです。私の名前はカズであり、これはCS50です。]
[♪♪] [拍手と歓声]
私たちのもう一つのお気に入りはここで誰かからこの提出しました。
[♪♪] [マラン] Googleはこのミームに慣れていない場合。
>> そして、最後に、多分愛らしい賞を獲得することを掲載してしまった他のカップル。
[学生] AWW！ >> [マラン]我々は、聞かなければならないだろう。これは短いですが、非常に密接に聞く。
[女性話]あなたの名前は何ですか？ >>ルイ。
[女性話]これは何？ >> [笑い] CS50。 [笑い]
[マラン]彼はしかし、かかる2でした。
ここでは、最後に行く。
私の名前はルイであり、これはCS50です。
[笑い]これはその後CS50xです。
自宅に沿って続いている間あなたのそれらのすべてに感謝する
誰がこれまで参加者をされています。
今日、我々は、データ構造の議論を締めくくる
最も基本的な、少なくともいくつかの、
それから私達は、HTMLとWebプログラミングについての私達の会話を続ける。
実際、我々はプログラミングの基礎を見ていくつかの過去7週間を費やしてきた -
アルゴリズム、データ構造など -
あなたがこれまで経験してきた可能性があるとC、
必ずしも言語のほとんどはアクセスできません
これらのアイデアのいくつかを実装すると。
そこで、今週と来週出発してから、次の
我々は最終的に、一般的にかなり低レベルの言語として知られている、Cからの移行ができるようになります
物事レベルが高ければ高いほど、それらの間の、PHP、JavaScript、および様へ
我々は過去数週間に渡って学んできたのと同じレッスンに頼るわかり、これ
しかし、あなたは配列とハッシュテーブルのようなものを宣言し、検索やソートがわかります
言語自体は、我々が使用して開始しますので、そんなに簡単になる
より強力になるだろう。
しかし、最初に、木々のアプリケーション。
それは、情報を圧縮する必要があるとし、これらの日は非常に一般的です。
どのようなコンテキストでは、デジタル情報のいくつかの種類を圧縮したいのでしょうか？
>> うん。 >> [学生]は、Web経由で送信する必要がある場合。
ええ、あなたがWeb上で何かを送信するときに使用します。
あなたが大きなファイルをダウンロードする場合は、もう一方の端の誰かなら、それは理想的です
zip形式、またはそのような何かを使用してそのファイルを圧縮した
ので、そうでなければ伝えられるかもしれないより少ないビットを送信している。
それでは、どのように情報を圧縮しますか？
デフォルトで必要とされるよりも少ないビットを使用することにそれはつまるところ。
週0と1に戻ると思うので、しかし、これは奇妙なことの一種である
我々は、約ASCIIおよびバイナリ話し、我々は、特に約アスキー話したとき
アルファベットの文字を表現するために8ビットを使用するなど、
手紙は65で表されるように、数97です小文字
しかし、あなたが65または97を表すとすると、7ビットまたは8ビットを使用しています。
しかし、漁獲量は、英語のアルファベットのいくつかの文字があるということです
他の人と同じくらい普及していないこと。
Zは人気のある、Qはその人気のすべてではないことをすべてではありませんが、Eは超人気があります。
そして、まだこれらの文字のすべてのために、デフォルトでは、世界は、8ビットの同じ番号を使用しています。
だから、賢くあれば、代わりにすべての文字に8ビットを使用するのではなく、しなかったでしょう
も、最もまれに、QとZのように使用
私たちは何とEとSと最も人気のある文字に対してより少ないビットを使用した場合
と、あまり人気の手紙のためのより多くのビットを使用
一般的なケースのために最適化されてみましょうアイデア、
これは、ほとんど起こるか最適化しようとのコンピュータサイエンスのテーマです
そして、ええ、起こるかもしれないという事にもう少し時間が、もう少しスペースを費やす
必ずしもそうではないように頻繁に。
それでは例を見てみましょう。
>> 我々は、かなり効率的に情報をエンコードする必要があるとします。
あなたは、モールス信号について少し何かを知って育ってきたかもしれない
とオッズは、あなたが実際のコードを知りませんでしたアール
しかし、あなたはそれがドットとダッシュの少なくともこのシリーズのことを思い出すかもしれない。
例えば、E - これはかなり効率的なコーディング、予告その最も人気のある手紙です -
ビープ音の最短を使用しています。
モールス信号は、すべてのビープ·ビープ·ビープ·ビープ·ビープ音以外について、トーンを保持している
時間または長い期間の短い期間のために。
のようなドットで示されるEは、超短いビープ音、ビープ音だけであり、それがEを表すことになります
これとは対照的に、Tはビープ音のように、長いビープ音であろう[音長引か]
それがTを表すことになります
あなたはZを見れば、対照的に、しかし、そのためには、まだかなり短いです
Zを表現するためには、ビープ音、ビープ音[長い音]、ビープ音、ビープ音[短い音]に行くだろう。
それはあまり一般的ではないですので、だからそれは長いです。
しかし、ここに落とし穴がモールス符号がビット欠陥があるということです
という点で、それはすぐに解読可能ではありません。
例えば、あなたがワイヤーのビープ音のいくつかの終わりに聞くと仮定[短い]、ビープ音[長い]。
私はどのようなメッセージを受け取りましたか？ドットとダッシュ。それは何を表しているのでしょうか？
[学生] A. >> [マラン]たぶん。
また、TでEを続くことが
言い換えれば、モールス信号、それはコーナーケースを最適化する、この原理を活用しても
それは即時のdecodabilityに自分自身を貸すことはありません。
すなわち、これらのドットとダッシュを聞いまたは受信している人間である
改行は文字の間にあるどこに、どういうわけか、把握する必要があります
それらの改行がどこにいるかわからない場合は、ET（またはその逆）のために混乱する可能性があるためです。
>> だから、あなたは何を行う可能性があります？モールスコードであなただけの各文字間の休止でした。
しかし、一時は物事をスピードアップの全体のポイントにカウンターのようなものです。
この悪い状況にはありませんでしたどこに私たちはコードを思い付いたので、代わりに何かあれば
ここで、Eは、接頭辞、例えば、です -
言い換えれば、我々はパターンが人気のある手紙にはまだ不足していることを確認して作ることができれば
あまり人気のない手紙は長いですが、どんな可能な混乱はありません？
ハフマンの名前で男は何年も前にハフマン符号化と呼ばれるこの方式を考案
実際に私たちが話して少しの時間を費やしてきたデータ構造の一つを利用している
この一週間、特に木、バイナリツリーのその -
それはもう2人もの子供を育てていることをバイナリツリーの意味。
それは多分多分左の子、右の子を持っており、それはそれだ。
だから、誰かがメッセージを送信しようとしているだけの議論のために仮定し
それはこのようになります。それは完全なナンセンスだが、それはように、BS、CS、DS、そしてESの構成だ。
そして、あなたが実際にように、BS、CS、DS、とEsのすべてをカウントアップする場合
その後、手紙の総数で割る
ここで、この小さなグラフは、文字の45％がESであり、20％のようだと言っている
10パーセントペンションなど。
だから、他の言葉で、そこにその引用符で囲まれた文字列を想定して
あなたが送信するだけでいくつかのメッセージです。
それは、我々はできるだけ少ない文字として使用できるだけので、ナンセンスであることを起こる
それは、Eは最も人気のあるままであることを確かにそうだと
AとBとCはアルファベットのこれら5文字の、少なくとも、少なくとも人気があります。
だから、どのように我々は、エンコーディングを考え出すについて行くことができる
バイナリエンコーディング、これらの文字のそれぞれについて、0と1のパターン
Eは短いパターンであり、もしかしたらBとCは、わずかに長いパターンであるような方法で
もう一度、アイデアは、我々はほとんどの時間より少ないビットを使用したいということである
とだけたまに多くのビット。
ハフマン符号化によると、あなたは木の森を作成することができます。
木々やまたそれらを構築​​するプロセスを含むここにストーリーラインのソートがあります。
始めましょう。
>> 私は、あなたがこの森で開始することを提案する、いわば、5木の、
これらの各々は、かなり愚かなツリーです。
サークルによってここに表されるように、ツリーは、1つのノードで構成されています。
だから、これらのものの各々は、C言語の構造かもしれない
と内部のC言語の構造体は、周波数カウントを表すfloatかもしれない
その後多分文字を表すChar。
だから、今は、より高いレベルのただの古いC言語の構造体として、これらのノードを考えるけど。
これは、5木、単一のノードだけを持っている人のそれぞれの林です。
ハフマン提案は、我々はそれらの木を組み合わせるために開始することは何ですか
少し大きい木に最小の度数を持っている
新しいルートノードとそれらを接続することにより、。
そこでここでは手紙の中で、利便性のために、私は左から右に並べたことがわかり、
それは厳密には必要であり、予告とは限りませんが、その最小のノード
現在、10％と10％である。
だからハフマンは、我々は新しい木にそれらの最小2ノードをマージすることを提案
新しい親ノードを導入することにより、次にその親の左の子と右の子を与える
ここで、Bは任意の左であり、Cは任意に右です。
そして、ハフマンはさらにレッツは今ちょうど左の子を考えることを提案した
0で表されるように、常にこれらの木の一つで
番号1で表される、いつものように、右の子。
>> あなたはあまりにも長い間あなたが一貫しているとして、それらを裏返すかどうかは関係ありません。
それで、今、私たちはこの森の中で4本の木を持っている。
そして、私は、左側のツリーなぜなら今や4と言う -
そしてそれは、あまりそれがこのように成長するという意味では木ではありません
それが今では0.2が二人の子供の親の一種である家系図のようなもっとだ -
その親で我々は0.2を描いていることがわかります。
私たちは、二人の子供の度数を追加し、新しいノードの総和与えてくれた。
だから今我々は、ちょうどこのプロセスを繰り返します。
2つの最小のノードを検索し、新しいツリーに参加する
し、さらにこのプロセスを繰り返します。
今、私たちはいくつかの候補者、20％、15％、さらに20％を持っています。
この場合において、我々は均衡を破る必要があります。我々は、任意にそれを行うことができます。
私達はちょうどそれを一貫して行う必要があります。
このケースでは、私が勝手に、左に1と行くよ
と私は今、私に35パーセントという新しい親を与えるために、20％と15％をマージ
その右の子1であり、そして、今、私たちは森の中に、わずか3本の木を持っている0は、その左の子です。
あなたは、おそらくこれがどこに行っているか見ることができます。
我々はこのカップルを複数回繰り返す場合、我々は、ちょうど1つの大きなツリーを持っているつもりです
辺が0と1で標識されているすべての。
もう一度やってみましょう。
35％は、そのツリーのルートです。 20パーセントと45パーセントなので、我々は35％および20％をマージしようとしている。
今、私たちはここに、このツリーを持っています。私たちは一緒にそれらを追加して、我々は55％を持っています。
今では森の中で2つだけの木があります。
私たちは、この最後の1時間を行う、そして、できれば数学的にすべての周波数まで追加
彼らは以来、私たちは、からそれらを計算しなければならないので100％にするには、Get-行く。
そして今、我々は一本の木を持っています。
だから、これはハフマン符号木です。
それは一種の言葉にそこに到着する時間がかかったが、現実には、forループを使用することです
または再帰関数を使用すれば、かなり速く、このことを構築することができました。
だから今我々は、1つの新しいノードを持っており、これらの内部ノードのすべてがmallocされています
おそらく、道に沿って。
だから今、このツリーの最上部に、我々は100％を持っていますが、今、私たちはパスを持って気付く
この新しい曾曾曾孫祖父母からひ孫曾曾孫のすべてに
葉の全ての下部にある[すべての方法、。
>> 私たちが今やろうとしていることは、順番に文字Eを表現することを提案されている
我々は、単に数字の1を使用します。なぜですか？
我々はEとして知られている葉への最終的なルートからこのツリーの下方向にトラバースしている場合があるため、
ただ1つのエッジ、右端に従っており、右上の1で、もちろんラベルが付いていること。
だからハフマンはこちら含意はバイナリでEのエンコーディングはわずか1でなければならないということでした。
そして、それはかなり気に効率的です。本当にそれよりも小さいを取得することはできません。
これとは対照的に、あなたは論理に従うならば、表現されようとしている
代わりにビットのどのパターンで？ 01。
だからに到達するために、我々はルートから開始し、我々は左に行くと、次に我々は右に行く
それは我々が0に続いて、次に1を意味します。
だから我々はパターン0と1の文字を表すものとする。
そして今、我々は既に即時decodabilityのプロパティを持って気付く
我々は、モールスコードで持っていなかったこと。
これらのパターンの両方がかなり不足しているにもかかわらず - Eは、1ビット、2ビットです -
彼らはどちらか一方を、混同してはならないことに気付いた
あなたは1を見ればそれはあなたが表示された場合は、Eがあるはずだため、0、それは明らかにAになるように持っている1
同様に、Dは何ですか？ 001。
C言語とは何ですか？ 0001。
AとBは何ですか？ 0000。
そして再び、我々は気にすべての文字が葉であるため、
そしてそれらのどれも、ルートからリーフへのパスに仲買人の一種ません
2文字 '異なるエンコーディングをconflatingの危険性はありません
これらのビットパターンのすべては決定論的であるためです。
0000は常にBになります
あなたが他の一文字を混乱させるかもしれないどこかの間にはノードがありません。
だからここでの意味は何ですか？
>> 最も人気のある手紙 - この場合にはEは - 最短符号化をたどっている、
次の最短のエンコーディングを得ている、
我々はすでに最初から知っていたBとCは、最も人気のない一種のだっ
10％の周波数それぞれで、彼らは最長のエンコーディングを頂いております。
それで、これは圧縮されたメッセージを送信したい場合は、ということである今では何を意味するのか
インターネットや電子メール等で、
むしろ標準のASCIIを使用するのではなく、ハフマンコード化されたメッセージを送ることができます
あなたは文字Eを送信したい場合、それによってあなただけの単一ビットを送信します。
送信したい場合は、2ビット、01の代わりに、8ビットの送信を送信
別の8ビットなどに続いて別の8ビットが続きます。
しかし、落とし穴がここにあります。
それはちょうど、このツリーを構築し、AliceからBobに送信を開始するのに十分ではありません
短いビットパターンは、ASCII文字列から、
アリスはまた何のボブを通知しなければならないので、
ボブは彼女の圧縮されたメッセージを読み取ることができることを行っている場合はどうなりますか？
[聞き取れない生徒の応答] >>これは何ですか？
[聞き取れない生徒の応答]木が何であるか。>>
あるいはもっと具体的には、それらのエンコーディングが何であるか、
この物語の中に、我々は1の時点で審判の判定を行った、特に以来。
我々は2つ​​の異なる20％のノード間で任意に選択しなければならなかったことを覚えていますか？
だから、ボブ、受信者は、単に自分でツリーを再構築することができそうではありません
多分彼はほんの少し違ったアリスからツリーが作成されますので。
また、ボブも、元のメッセージが何であるかを知らない
アリスは彼を送信している唯一のものは、もちろん、圧縮されたメッセージであるた​​め。
>> このような圧縮による漁獲量は、はい、アリスがビットの全体の多くを保存することができます、ということであるので、
に対してEの1と01を送信することにより、等
彼女はまた、マッピングは文字とビットの間には何かボブに知らせる必要があります
私たちはASCIIを使用していないのであれば、彼らは明らかにもはや単にASCIIに依存することはできませんので。
だから彼女はどちらか何とかして彼に木を送信することができます -
のようなバイナリデータか何かのようにそれを保存して、それを書き留めて -
それとも彼にマッピングを示し少しチートシート、Excelファイルを、送信してください。
だから、圧縮の効果は本当にあなたが送信していることを前提としていたメッセージ
、かなり大きいですが、少なくとも中規模
あなたはスーパーショートメッセージを送信している場合があるため、
あなたはちょうど私達がここに綴ることができる言葉であることを起こるBADのメッセージを、送信したい場合は、
B-D、あなたはおそらく少ないビットを使用するつもりだ、
あなたも木が何であるボブを知らせなければならない場合が、漁獲量はある
またはそれらのエンコーディングが何であるかを、あなたはおそらく貯蓄のすべてを上回るとしている
で始まるように圧縮されたものを持っていることの。
だからそれは実際にあなたがしようとした場合に圧縮した場合することができます
でもzipまたはファイル形式のようなもので、あなたは慣れているかもしれません -
かなり小さなファイルであっても空のファイル -
時には、これらのファイルは大きくなり、小さくないことがあります。
しかし、現実的に、それは、唯一の小さなファイルサイズのために起こる
ので、ギガバイトのファイルが2ギガバイトになることはないだろう;
私たちは本当にバイトまたはほんのキロバイトを話している。
>> ZIPのようないくつかのプログラムは、それを実現するのに十分スマートです
"あなたはこれを圧縮して、より多くのビットを費やすつもりだ。"
"私はすべてであなたのためにそれを圧縮する気ないようにしましょう​​。"
だから、これはテキスト形式の圧縮、ちょうど一つの方法です。
我々は、C言語でこのような何かを実装することができます
例えば、ここに我々はこのツリー内のノードを表すかもしれませんどのように
どこで我々が​​シンボルのchar型、周波数の浮動小数点値を持つ
そして我々は、他のデータ構造、2ポインタ、と見てきたように
NULLを指定することもでき、どちらを選んで左の子、右に1から1、
しかしそうでない場合は、左の子と右の子を指します。
ですから、これはその後、ハフマン符号化であり、それはあなたが情報を圧縮して行くことができる一つの方法だ
そしてそれは確かに実装するのが最も簡単なの一つだ
先週のデータ構造、言う、の文脈では、
さらに洗練されたアルゴリズムが存在するのに
それはあなたのデータをより洗練された突然変異を行うことができます。
その後、木、バイナリツリー、またはテキストの圧縮に何か質問はありますか？
[学生] 01への[聞こえない]分割する場合のように、そこにいくつかの曖昧さ
その後、011は右、あいまいなのでしょうか？
[聞こえない] >>良い質問です。曖昧。
私はここにこの絵を参照することによって、まとめてみましょう。
そのため、圧縮している文字の表現、
このアルゴリズムの定義により、常に、葉のまま
誤って複数の文字のプレフィックスのビット数と同じパターンを使用することは決してないだろう。
だから、他の言葉で、あなたが心配している、それが生じるあいまいさ、のように聞こえる
それによって001はBの開始またはCまたはそのような何かの始まりかもしれない。
しかし、それは、アルファベットの文字のすべての我々はコード化していることに注意してくださいので、ケースにすることはできません
葉にある。
>> あいまいさが唯一の、モールス信号のように、発生する可能性があります
例えば、CはルートからBへのパスに沿ってどこかにあった場合
[学生]右。だから、その場合には、2つの葉を持っていると言う。 >>は持っていると言う - もう一度言って。
さて>> - [学生]は、2葉、FとG、次にGを持っていると言う。しかし、それはできません。
自体は、これらの文字FとGなぜなら葉FとGを持っていませんでした
自身がBの左側またはEの右にどこかに残すであろう
だから定義によると、彼らは葉でなければなりません。
そうでなければ、あなたはまさにそうだね、我々は、モールス信号が直面する問題を解決していませんでした。
良い質問です。その他の質問は？かしこまりました。
このビットの概念は、それは我々が力を我々が実際に使用されていませんでしたすべてのことに沿って持っていた判明
それはこれらの0と1を操作するに来たとき。
我々は、最も早い問題セットのいずれかでこのことについて質問した。
すなわち、あなたは、大文字から小文字への変換、またはその逆の方法を教えてください。
または、より具体的には、それらの最初のpsetの一つは尋ねた
どのように多くのビットは、実際に、またはその逆を小文字に変更するために反転する必要がありますか？
ここで、65と97はバイナリでどのように見えるかの迅速なリマインダーです。
そしてその質問には、ソートのため、あなたの記憶に薄れている場合でも、
あなたはどのように多くのビットを反転する必要があることをここでもう一度見ることができます
小文字に資本を変更するには？ちょうど1。
>> 彼らは1つの場所のみ、左から三番目のビットが異なります。
010を持っているのに対し、少しの011を持っています。
だから何とかして、私達はちょうど、そのビットを反転できるようにする必要があります
そして我々はその後の文字を大文字または小文字にすることができます。
私たちは、実際に使用して、過去にこれをやった、条件が一致した場合
手紙は資本Aおよび資本Zとの間である場合にチェックし、
その後のような出力 - A + 26またはそのような何か。
おそらく、アルファベットの文字に算術変更されました。
我々はちょうどその単一のビットを反転させることができるが、どうでしょう？
どのように01000001と01100001のようなので、ビット、8ビットの1バイト分を取って行くことができる？
あなたはビットのこれらのパターンを持っていた場合、我々はその中の1つだけを変更するにはどうしたらできますか？
我々はここに黄色でビットのこの他のパタ​​ーンを導入したらどう？
私が変更したい1ビットを除いて全体の黄色の文字列0sを行った場合
それから私は、ビット単位の演算子とも呼ばれ、new演算子を導入する -
それは個々のビットを操作するという意味で、ビット演算子、
全体ではなく、バイトまたは4バイトすべてを一度に。
黄色であり、この縦棒は、我々が資本の表現に何を取ることを示唆している場合
およびビットの黄色シーケンスとのビット和でそれ？
言い換えれば、スクラッチのブール式の我々の議論に戻って考えると、次にCの
>> ブールをやったり、最初のものが真でなければならないか、真実であることを意味します
または、第二のものは真でなければならないか、またはそれらの両方が真でなければならない
し、結果の出力は真そのものです。
ここでは、このケースでは、我々は0で何を我々は0を取る場合get "または" EDでしょうか？偽またはfalse？
それはとても、期待どおりのまま小文字偽です。
代わりに、私たちは1または0を何をしたら？
これは今1のままだが、ここで発生しようと何にも注意してください。
私たちは、大文字で始め、我々がここで行っているように我々は、その個々のビットを続行する "または"した場合、
0または黄色の1は私たちにここに何を与える？これは私たちに1を与える。
実際には、我々は少しの大文字バージョンが実際に何かも知らなかったと仮定します。
のこれを行うに行こう。私はここの上にこのバックを動かしてみましょう。
再びこれを行うにしてみましょう。 0または0が私に0を与えます。
1または0は私に1を与える。
0または1は私に1を与える。
0または0が私に0を与えます。次のいずれかが0の場合、次のいずれかが0の場合、次の1は0です。
1または0は私に1を与える。
それで、我々があった小文字を事前に知らなかった場合でも、
単にINGが "または"我々は黄色でここで紹介したことをこのビットのパターンで、
あなたはそのビットを反転することで資本を小文字にすることができます。
我々は数週間前に、この表現を使用しましたビットを反転。
あなたが実際にどのようにプログラムで行うのですか？
一般的には、マスク、ビットのシーケンスを、と呼ばれるものを使う
このケースではちょうどので、ここでは、この数値のように見えるためにそれが生じると、
してから "または"それは一緒にこの新しいC言語の演算子を使用して、
|、単一を使用| |そしてなぜので、実際にはここでこの答えを得る思いませんか？
これは4S 1S場所、2sの場所、8S、16S、32Sです。
だからそれはつまり、あなたが大文字を取る場合と整数32とのビット和でそれが判明
整数32ので、あなたはビットとしてそれを見たときに、次のようになります。
あなたが実際にしたいビットを反転させることができますを意味します。
と同様に - と我々は一瞬でコードを見てみましょう -
我々は、他の方向に行ってしたいとしましょう​​。
>> あなたは小文字に首都からどのように行くのですか？変更する必要のあるビット？
これは、同じ一つだ。
私たちは、1から0に、その第三ビットを変更したい。
そして、どのように我々はこれをやって行くのでしょうか？
どのように我々はビットをオフにしますか？ビットのどのパターンで我々はビットをオフにできますか？
我々はマスク反転の並べ替え場合はどうなりますか？
前のに対し、我々は全体の黄色のマスクを作った0
1ビットを除いて、我々は、オンにしたかった
この時間は、我々はオフにしたいビットを除いて、マスク全体の1を作る場合はどうでしょう
その後何の演算子を使用するのか？
どのようなもの我々if "と"？のは、見てみましょう。
我々は今これにフリップした場合は、再度、私はすべて1のマスクを作成したと
私はオフにする1ビットを除いて
その後ではなく "または"ここに黄色の下向きの数字でトップアップ白の数字、
何一緒に私が代わりにif "と"削除しますか？これは、ビット単位と呼ばれている。
論理的に、それはブールと同じことだと。
これは、0と1が0である私を与える。だからfalseとtrueはfalseです。
真と真はtrueです。
そして、ここでマジック：真と偽今や偽であるので、我々はそのビットをオフにしている。
そして今、物語の残りの部分はやや簡単です。
マスクの残りの部分は1秒ですので、数字は白であるかは重要ではありません。
あなた "と"真で何かするときは、その値を変更するつもりはない。
それが本当であるなら、それは真のままになります。それが偽だった場合は、falseのままになります。
>> あなたは本当だった何かを取るときが、魔法が起こる
偽としてから "と"それ。
これは、ビットをオフにするという効果があります。
そこに少し不可解なので。
、実際にはさらに不可解に見えるかもしれない、実際にはいくつかのコードを見てみましょう
しかし、ここではtolowerはここで見てみましょう。
私はtolowerを見れば、小文字に資本から行く、
我々は、このプログラムを実装する方法を見てみましょう。
ここではメインだし、それはすべてのコマンドライン引数を取っていない。
私は、ユーザーがインチ入力しようとしていることを手紙の文字cを宣言しています
ループは単にユーザーが間違いなく私に資本提供していることを確認している間、私はその後の作業に精通を使用
またはBまたはC .. Z、そう彼らは私とZの間に何かを与える
そして今、私はここで何をやっている？
アイム "または" 0x20を使ってり、この、それは実際には同じだ -
そして我々は一瞬にしてこれに戻ってくる - 32。
だから、もう一度、32はここでこのビットのパターンです。なぜ我々はこのことを知っていますか？
ちょうど一週間に0に戻って考える。
これは1秒位、2秒の場所、4S、8S、16S、32Sの場所です。
だから、この黄色の数は32であることを起こる。
私はその後、文字通り数32で、ここでビット単位 "または"それをcharのような手紙を取ることができます
と私は戻って何を得るのですか？そのcharの小文字バージョン。
一瞬前に、しかし、私は別のベース表記でこれを表明した。
これは何を表したのでしょうか？ >> [学生] 16進数。
[マラン]これは16進数を表現するために起こります。
我々は、それほど進数について話をしていない
しかし、それは、このような場合に実際に便利です。
>> それはより複雑に見えるにもかかわらず、それが20と32ではない、見えたとしても
それは、16進数は、実際に超便利な表記法であることが判明
進数ですべての0xの後の桁ので - これは何の意味もありません;
これは、ここで16進数が来ると言うだけで人間の慣習です -
これらの数字の各々、2、次に0、自分自身を表現することができます
正確に4ビットである。
我々はこれを行う場合だから、私はここで、テキストエディタを開いてみましょう - 奇妙なオートコンプリート -
我々はここで少しテキストエディタをすれば、数0x20の4ビットであることを意味し、ここ、ここには別の4ビットです。
第一下位4ビットを実行してみましょう。
4ビットで表現0は何ですか？超簡単。ちょうどすべて0。
だから、0として4ビット。
どのようにして2を表すのですか？それは、我々はこれをしなかったので、しばらくして、それは0100だだ。
だから、これは1秒の場所であり、これは2秒の場所であり、それは他の場所が何であるかは関係ありません。
言い換えれば、16進数では0x20を言うかもしれない、
しかし、あなたが2であるのかを考えるとそれがどのようにバイナリで表現されている場合は、
何0で、どのようにバイナリで表現され、
これらの質問への回答はそれぞれ、これとこれです。
だから0x20は、8ビットのこのパターンを表すために起こる
これは正確に我々が望んでいたマスクです。
だから、これは、ちょっと知的な運動です
しかし現実には、コード内では、このような定数を書くことが一般的に、より一般的です
進数で、プログラマが比較的容易にできるので、
それはいくつかの紙と鉛筆が必要な場合でも、そのビットパターンが何であるかを把握
あなただけのコードで、典型的には、0と1を表現することはできませんので。
あなたは00010に行くなどすることはできません。
>> あなたは、10進数または16進数や8進数または他の表記を選択する必要があります。
ほとんどの人は単純に各桁は4ビットを表した16進を選択する傾向がある
そしてあなたは、この簡単な計算を行うことができます。
と私はほとんど同じですtoupperが、で私の手を振るよ、それはほとんど同じに見えます。
toupperはいないか、または演算子ではなく、この男とdfを使用して行われます。
dfは何を表しているのでしょうか？ DF？誰ですか？ >> [学生] 255。
255？ではない255。それがFFだろう。
我々は少しの練習として、このいずれかを残しておきます。
しかし、あなたはどのような9の後に来るし、0、1、2、3、4、5、6、7、8、9から行くとしたら？
私たちは、小数点以下の桁のうちの一種だが、16進数で何が9の後に来る？
[学生] A。 A、B、C、Dだから。>>
あなたは、dは実際に表すビットパターンから何があるかを把握することができます。
我々は数学を行う場合と、我々はあなたが戻ってきてしまうマスクはこれと同じであることがわかります。
これは、f、すべて1であり、これはdです。だからdfはそのマスクを表します。かしこまりました。
そして最後に、物事が聞こえるようにしないスーパー、スーパーテクニカル、
しかし、我々はこれを行うプログラムを書きたいとしましょう​​。
binary.cと呼ばれるファイル内のプログラムである、私が先に行くと、バイナリを作ってみましょう。
そして今、私はバイナリを実行すると私の非負の整数を与えることができます。
0で、簡単かつタイプから始めましょう。
これは今、そのバイナリ表現の整数を出力するプログラムです。
私は再びこのゲームをプレイし、ちょうど1で入力した場合、だから、私は1の32ビット表現を取得する必要があります。
私は2で再びこれを行う場合、私はそれを取得する必要があります。
私は7をすれば、私はそう述べ終わりにいくつかの1を取得してください。
私が原因で、ビットごとの演算とこれを言及アウトそれは回り
あなたは実際にだけでなく、もう一つのことを行うことができます。
あなたは、動的にこれらのマスクを作成することができます。
ビットごとの演算を含むこの1最後の例を見てみましょう。
ここでは、コードの最初の部分は、数字の入力をユーザーに求める
、それはあなたが私に非負の整数を与えると主張している。
だからそれは古い学校のもののようなものだ。
しかし、ここで興味深いのようなものだものです。
>> 私がバイナリ形式で番号を印刷する方法を教えてください。
私が最初に何から何まで反復する？
少なくともアプライアンスで、通常はintのサイズは何ですか？ >> [生徒] 4。
それは4です。だから4 * 8 32 - 1月31日です。
私は31からカウントし始めているのであれば、それは、それは結局、表し
こっちにこの男はただ概念的に、31ビットまたは最上位ビット、
これは、ビット0であることを行っているのに対し。
だから、これは01ビットです...ビット31。
ので、このコードは何をやっている？
それは不可解に見えるにもかかわらず、ちょうどダウン31から0に反復処理され、ループのためにこれを注意してください。それはそれだ。
だから興味深い部分は、今ここにこれらの5行でなければなりません。
この行で、私はマスクと呼ばれる変数を宣言していることに注意してください
これらの黄色の数字の私たちの物語と一貫性があるように。
そして、これは何をやっている？
これは、ほとんど、我々は前に見ていない別のビット単位の演算子です。
それは、左シフト演算子です。
この演算子は、これを行います。
ここ1番であり、もしそうなら私は、シフト、左シフト、左
あなたは、個々の1にすることの効果を持つことをどう思いますか？
文字通りそれを上にずらす。
1番は、左にあるものであり、あなたは、31日にiを初期化することによって開始するのであれば
やろうとしていることは何ですか？これは数字の1を取ると、ここの上に31の場所をシフトするだろう。
そしてその背後には明らかに他の数字はありませんので、
それらは、デフォルトでは0に置き換えられます。
だから、もちろん、このように見える数字の1、アウトを開始します -
と私が中心にここでそれを上に描画できます。
そして、あなたが左に物事をシフトとして、この男は、本質的にこ​​の道を行く。
しかし、すぐにあなたがそれを行うと、0が記入される
あなたは、2回目のシフトなら、それはこの道を行くと別の0インチ満たされる
>> あなたは再びそれをシフトしてから、別の0インチ満たされる
あなたは1 << iが31の場所のこの事をもしそうなら、マスクを得ることを終える
32文字の長さであること、の左端の1は1であり、
の残りの部分のすべてが0である。
そして、それは次のように左側の番号をずらす、余談ですが、結局
また偶然にも、時には便利に、
その番号に何をしているという効果があります？ >> [生徒]それを倍にする。
各列のためにそれを倍増 - 1S場所、2sの場所、4sの場所は、
8sの所、16sの場所 - あなたが左に行くように、すべての倍増をすばらしいスタイル。
あるいはむしろ、あなたが1をシフトするときには、数値の値を倍に終わるつもりです。
あなたは数字の面白い変換をやってしまうことができます
2の累乗で、このようにすべてのものを上にずらすことによって。
それでは、どのように動作しますか？
そして、これは、私がそれをしたい正確な場所に1を除くすべて0のマスクを与え
toupper.cから盗まれ、その後、この表現、
単に、ユーザーが入力した番号nを取ると言っている
"と"それはそのマスクであり、あなたは何を得ようとしている？
あなたは、マスクされた場所に1がある場合は1を取得するつもりだ、
またはあなたはそこではない場合は0を取得するつもりだ。
ので、すべてのこのプログラムは効果的に、それはループを持っていないです
そして、それはこっちに1その後、こっちに1その後、こっち1でマスクを作成し、
そしてそれは、ここでユーザの入力では1ビットがあると言うために、このビット単位の論理積（AND）のトリックを使っていますか？
>> ここでユーザの入力では1ビットはありますか？そうだとすれば、文字通り0を印刷し、他の1を印刷してください。
我々は、我々が32ビットの代わりに8をやっている理由だという理由だけでint型がこれをやっている
しかし、私たちが次に導入したと、このビット単位の論理積（AND）、このビット単位の論理和（OR）、ある
しばしばひどく役に立ちませんし、この左シフト演算子、
彼らがすることができますが、それはアウトになります。
実際には、ブール値の配列のようなものを表現するためにあたかも
ただ、trueまたはfalseを表すために、あなたがするかどうかを追跡したいと仮定します
300人の学生でいっぱいの部屋が存在し、
あなたは300 boolsを得られるようにするには、bool型のサイズが300の配列を宣言することができた
誰かがここで、それ以外の場合はfalseである場合、あなたはtrueにそれぞれ設定することができます。
なぜ、そのデータ構造内のその表現は効率が落ちるのでしょうか？
、300 boolsの配列、そのデータ構造の設計についての悪い何ですか？
フードの下に、実際には、ブール値とは何ですか？
これも、慣れていないかもしれない何かである。
全くboolが存在しなかったものに変わります。
我々が作成したソートのことを覚えておいてくださいcs50.hファイルを使用して、
それ自体は、標準的なブール値が含まれています。
それはboolに来るとき、Cは、しかし、ダムのようなものです。
それは完全に無駄になっている、すべてのブール値を表すために8ビットを使用
明らかに、あなたはboolを表現するために何ビット必要がないので、？わずか1。
だから、あなたが今、ビット演算子と能力を持っていることが判明した場合
でも、1バイトであってもchar型の個々のビットを操作するためには、
あなたが愚かな何かを表現するのに必要なメモリが減少する可能性がアウトそれは回り
8倍にして、その出席スタイルのデータ構造が好きです。
代わりにtrueまたはfalseを表すために8ビットを使用するのではなく、文字通り1を使用することができます
クラス内のすべての学生のための8つのバイトを使用して
そして、これらの種類の低レベルのトリックを使って、0から1までの個々のビットから切り替える。
それは本当にエネルギーに終止符を打つ。ビット単位の操作に関するご質問はありますか？
>> うん。 >> [生徒]が排他的OR演算子を表します？
はい。このようになります排他的OR演算子^、ニンジンのシンボルがあるが、
これは、最初のものを意味するか、第二のものは、1になるように出力の1にできます。
あなたにも1、またはその逆に0を反転することができます〜は、そこにもありません。
そして、我々が見たものの反対で右シフト演算子、>>は、もあります。
かしこまりました。のは、より高いレベルになりました事を見てみましょう。
我々は、テキストの話をして、それを圧縮することによって開始された
およびビットの少ない番号を記載したテキストを表す;
我々は今、ビット単位のレベルで物事を操作を開始する方法について少し話をしました。
Let 'sは、今や表現に最大10,000フィートをズームイン
グラフィックのようなもっと複雑なものを。
ここではドイツの国旗を持って、ここでは、フランスのいずれかを持っている。
例えば、GIFファイル - これらは、あなたが知っている可能性のあるファイル形式で表されることがあります。
あなたは今まで。gifで終わるWeb上で画像を見てきた場合は、
これは、グラフィックスインターチェンジ形式です。
圧縮に自分自身を貸すの一種ここでこれら二つのフラグ
何恐らく明白な理由のために？ >> [聞こえない学生の応答]
繰り返しの多くは右、そこですか？
ドイツのフラグを送信するためには、画面上の画像であると考える
戻ってあなたのスクラッチ日間インチ
あなたは、画像を構成する個々のピクセルまたはドットがあることを思い出すかもしれない。
>> 黒のドットと黒ドットの別の行全体の全体の行があります。
黒のドットの行の束は、我々は本当に、ズームインした場合我々は見ることがあります
我々は、Photoshopでロブの顔にズームインしたときにずっと好きです。
我々がイメージに深く、深く深くなった途端、
あなたは、その場合には、彼の目を作曲正方形のすべて、ピクセレーションを見始めた。
ここでは、同じ取引。我々はかなりにズームインした場合は、個々のドットを見ることができます。
まあ、これはビットの無駄のようなものです。
フラグの三分の一は黒で、フラグの三分の一は黄色などとある場合は、
なぜ我々は何とかしてこのフラグを圧縮することはできませんか？
パターンは少し異なっていても、さらにはフランス国旗を圧縮することができた。
これは、GIFファイル形式は可逆圧縮形式であると判明
それはあなたが、ここにドイツ国旗のような画像を撮影することができることを意味
あなたは、品質を犠牲にすることなく多数のビットを捨てることができます。
これは、JPEGのようなものとは対照的である
私たちのほとんどは、おそらくより使い慣れている。
Facebookの写真やFlickrの写真など
彼らがアップロードしているとき、ほとんどの場合、JPEGファイルとして保存され、
LOSSY - - あなたがビットを捨てないそれによって形式が、JPEGは非可逆です
しかし、あなたはまた、品質を捨てる。
そしてあなたはPhotoshopで写真を圧縮したり、Facebookにアップロードした場合
または、本当にくだらない電話でそれらを取る
あなたは、画像が非常に斑点とピクセル化され得るために開始することを知っている
それは、コンピュータまたは電話で圧縮されているので、それはだ
文字通り情報を投げることによって。
But GIFは、それはデフォルトでいるよりも、より少ないビットを使用することができるという点で素晴らしいです
任意の情報を失うことなく。
>> そして、それは本質的に次のようにそうします。
むしろ、BMPなどのファイル内の店舗よりも黒、黒、黒、黒のRGBトリプルだろう、
黒、黒、黒、黒、黒、黒、黒、黒など、
むしろ、GIF形式は、 "黒"、言おうとしている
その後、 "これを100回繰り返し"またはそのような何か。
"黒、これを100回繰り返し、黒、これを100回繰り返して..."
"イエロー、これを100回繰り返してください。"
そしてそれは左端のピクセルが、本質的には、記憶しています
その後何とか何度も何度もそのピクセルを繰り返すという概念をエンコードします。
だからGIFは、任意の情報を失うことなく、自分自身を圧縮することができます。
しかし、あなたはそれが使用をGIFのアルゴリズムであれば、推測しなければならない場合、
彼らはサイズが同じに見えるにもかかわらず、これらのフラグは、これ、
GIFとしてディスク上に保存したときに小さくなるだろうか？ >> [生徒]ドイツ。
ドイツは小さくなるだろうか？なぜですか？
[学生]あなたがそれを繰り返しているので何度も何度水平に
そして、あなたは別の時間を繰り返す。まさに>>。
GIFを発明し、人々だけの種類のは、任意に決めたので
繰り返しは、水平ではなく横方向に活用されるようにします。
フランス国旗に比べてドイツの国旗で横方向にここでより多くの繰り返しがあります。
私たちは実際に、これらのGIFを持って私のハードドライブ上のフォルダを開くのであれば
あなたは実際にここにドイツ国旗が2キロバイトで、フランス語つは4キロバイトであることがわかります。
それは、1つは他の倍であることが偶然であることを起こる
しかし、それはフランス国旗がはるかに大きいという事実にケースです。
>> 我々はグラフィックスについて話を進めているにもかかわらず、同じアイデアはに適用することができます
もう少し複雑なフラグが、画像のようなものではない。
あなたはリンゴの写真を撮る場合は、確実に重複がたくさんあり​​、
ので、我々は何とかデフォルトの背景色は青であることを覚えることができる
そして、右側の絵のように示唆しているではない
この写真の中の一つ一つのピクセルの色を覚えておく必要があります。
だから我々は情報を失うことなく、そこに離れてビットをスローすることができます。
リンゴはまだちょうど同じように見えます。
ここでは、この例では、映画の中で何が起こるかを見るかもしれません。
それによってそこに上の画像では、これらは古い学校のフィルムリールを表す
あなたは家の過去のRVの運転とツリーを持っています。
そのバンが左から右に過去ドライブとして、また、何が明らかに変化していないのですか？
家はどこにも行かれず、木はどこにも行かれません。
動いている唯一のことは、この場合にはバンです。
変わらない背景が示唆するように、あなたは映画の中で何を行うことができます
同様にフレームだけの間に変化しない情報を捨てている。
これは一般的にフレーム間圧縮として知られています
このフレームは、この1とほぼ同じに見えるができる場合は、
ディスク上に同一の情報のいずれかを格納する気のないようにしましょう
これらの中間のフレームに、唯一たまにキーフレームを使用してみましょう
ことは、実際ほんの少しのサニティ·チェックとして重複してその情報を格納します。
>> これとは対照的に、圧縮ビデオへの別のアプローチは、ここでは、この第二と下の例にある
むしろ店よりも30フレームは、なぜあなたはその代わりに15フレーム秒を格納しませんどこですか？
むしろ美しく、完璧に流れるムービーの種類より、
それは少し、少し古い学校を、吃音しているようには見えるかもしれません
しかし正味の影響は、特に必要があるかもしれないよりはるかに少ないビットを使用することでしょう。
だからここでは、この後、私たちを残しますか？
それはあなたが圧縮で行くことができます他にどこに脇のビットだった。
これについては、こちらをCS175のようなクラスを取る。
ここでは、ビデオ内の別の例です。
蜂が動く唯一のものである場合、
あなたは本当にそれらの中間のフレーム内の情報を捨てることができます
花と空と葉が変更されていないため。
しかし、今は最後にひとつを考えてみましょう。
次の5分では、講義の中で永遠に後ろCを残す？はい。ではないのpsetで、しかし。
最後のCの話した後、我々は非常にセクシーなものを取得する
HTMLやWebおよび宇、ホーを含む。かしこまりました。
ここに私達は行く。それが動機だ。
それは、我々はClangのを実行するプログラムを書いてきたすべての時間が判明した。
とClangのは、我々はかなり最初の週以来言ってきた、ソースコードを取り
とオブジェクト·コードに変換します。
これは、Cをとり、0と1に変換します。
それはそれとして非常に簡単ではないので、私は一種の数週間のためにあなたに嘘をついてきた。
>> あなたはClangのようなプログラムを実行するときにフードの下で起こってもっとたくさんある。
実際には、プログラムをコンパイルするプロセスは、本当にまとめることができ、
あなたは、コンパイラではロブのビデオから思い出すかもしれないと
これらの4つのステップに：前処理、自身をコンパイル、アセンブル、リンク。
しかし、クラスで私たちと世界のほとんどの人は、一般に、これらのステップをすべてまとめる
としてだけで "コンパイル"。
しかし、我々はこのようなソースコードで開始する場合、これはおそらく最も簡単なCプログラムですリコール
我々はこれまで書いてきた、それはここまでのように見て終了したときにコンパイルされていることを思い出してください。
しかし、そこに中間のステップは実際だし、それらの手順は次のとおりです。
まず、このことは、この我々のプログラムの大部分の最上部にあり
＃を含める
＃私たちのために何が含まれていますか？
それはかなりのコピーとその理由は？ので、私のファイルにstdio.hの内容を貼り付け
なぜ私はstdio.hの内容については気にしない？興味のあるそこに何があるか。
コンパイラは次に私が何を意味するか知っているように、printfの宣言は、そのプロトタイプ、
私は、printf、この機能について触れたとき。
だからそれによってClangのようなプログラムをコンパイルするに1人が、前処理であるステップ
またはClangのは付属していますいくつかのヘルパープログラムは、一番下にあなたのコードを読み取ってトップ
左から右へ、そしてそれをincludeのようなキーワードが続く＃記号を認識する任意の時間
それはあなたのファイルにこの場合、stdio.hでコピーして貼り付けるのは、その操作を実行します。
すなわち、ステップ1です。
その後、なぜなら巨大コピー、ちょうど起こっ貼り仕事のはるかに大きなCファイルを持っています。
>> ステップ2は現在コンパイルされています。
しかし、それはコンパイルが判明し、このように見えるソースコードを取り
そして、このようなものに変換します
呼ばれ慣れている人のためになる？ >> [生徒]総会。 >>アセンブリ言語。
これは実際にあなたがCS61取る場合は、より詳細に飛び込むだろう何かである。
これは、ちょうどあなたが、0と1を自分で書くことに得ることができるのと同じくらい近い
それでも感覚の少なくとも少しを作るような方法で物事を書く。
、これらは、マシン命令されており、我々はここで、main関数までスクロールダウンしている場合
このプッシュ命令、移動命令は、命令を差し引き、そこにあることに気づく
命令を呼び出すなど。
お使いのコンピュータは、Intel内部を持っていることを聞くと、
あなたがお使いのMacまたはPCでインテルのCPUを持って、それは何を意味するのでしょうか？
CPUはIntelが特定の命令を理解するような企業によって建設されています。
彼らは、スワップのような機能があるか、またはメイン自体が何であるか見当がつかない
しかし、彼らは、のような非常に低レベルの命令をプッシュ加算、減算、何を知っていますか
呼び出し、移動などがあります。
ですから、アセンブリ言語にCの​​コードをコンパイルするときに、
あなたの非常にユーザーフレンドリーに見えるコードは、このようなものに変換され、
それは文字通りCPUの内と外このような小さな単位で周りバイトまたは4バイトを移動します。
しかし、最後に、Clangのは、プログラムのこの表現を取る準備ができているとき、
0と1に、その後のステップは組み立てが起こると呼ばれる、
Clangのを実行しているときに、これは再びすべての瞬きする間に発生します。
我々は、ここから始めて、それはこのようなファイルを出力し、それはこれらの0と1に変換します。
そして、あなたはいくつかの点で戻って実際の動作を確認したい場合は、
私が入る場合hello1.c-これは我々が見て、非常に最初のプログラムの一つです -
通常、私たちはカーンという音hello1.cでこれをコンパイルすると、これは私たちにa.outを与えるだろう。
あなたが代わりにそれを-Sフラグを与える対照的にした場合、何を買ってあげることはhello1.sです
そして実際にアセンブリ言語が表示されます。
>> 私は非常に短いプログラムのためにこれをやっているんだけど、あなたはスクランブルのために戻ってしまったら
または回復またはあなたが書いた任意のプログラムとちょうど好奇心から
、それは実際に実際にCPUに供給されているのか、どのように見えるかを確認したい
あなたはClangのでその-Sフラグを使用することができます。
しかし、その後、最後に、1つの落とし穴は、まだあります。
ここでこんにちは、世界の私の実装を示していることに、0と1です。
しかし、私は自分のプログラム内の他の誰かの関数を使用しました。
だから処理がされているにもかかわらず、私は、hello.cを取る
それはアセンブリコードにコンパイルされ、その後は、0と1に組み立てされる
この時点で出力されているのみ、0と1
私のコードの結果そのものです。
しかし、printfを書いた人は、彼らが20年前に自分のコードをコンパイル
そしてそれが今では、アプライアンス上のどこかにインストールされている
ので、我々は何らかの形で、私の0と1で彼または彼女の0と1をマージする必要があり
それはリンクとして知られ、コンパイルの4番目と最後のステップに私たちをもたらします。
だから左側に我々は以前とまったく同じ画像を持っている：
hello.cのは、アセンブリ·コードは0と1になりますになります。
しかし、私は私のコードで標準I / Oライブラリを使用したことを思い出す
それはstdio.cというファイルがあるコンピュータ上のどこかに意味
または少なくともコンパイルされたバージョンは、そのために何年か前に誰か
アセンブリコードにstdio.cコンパイルされてから、0と1の全体の束。
これは、静的または動的ライブラリとして知られているものです。
これは、アプライアンス内のどこかに座っているいくつかのファイルです。
>> しかし、最後に、私は私の0と1を取らなければならないと、その人の0と1
そしてどういうわけか、0と1をそれらを組み合わせて、文字通り、それらをリンク
a.outまたはhello1または何と呼ばれる単一のファイルに私は私のプログラムを呼び出し
ので、最終的な結果は私のプログラムを構成する必要があり、1と0のすべてを持っていること。
あなたはClangのを使用してきたので、すべてのこの時間、この学期
さらに最近では、Clangのを実行するためにmakeを実行
これらの手順のすべてが瞬時に、非常に意図的に一種の起こっている。
そしてあなたは、すなわち、CS61、コンピュータサイエンスを続ける場合
これは、あなたがそこから戻って剥がし続けるだろうという層です
効率性、セキュリティへの影響、およびこれらの下位レベルの詳細のような話。
しかし、それとともに、私たちは後ろにCを出ようとしている。
先に進み、今では私たちの5分間の休憩を取りましょう、
そして我々が戻ってくるとき：インターネット。
かしこまりました。我々は戻ってきた。
あなたが見るように、ので、今、私たちは、HTML形式ではない、弊社の外観を開始
HTML自体は、実際にはかなり単純です。
しかし実際にはWebプログラミングにおいて、より一般的には、より一般的にネットワーキング、
そして、これらの技術のすべては、一緒にどのように来る
私たちはインターネットの上にはるかに洗練されたプログラムを作成できるように
これまでよりも、我々はこれらの黒と白の窓にすることができました。
確かに、学期のこの時点で、我々は比較的短い時間を過ごすことになりますにもかかわらず
PHPは、HTML、CSS、JavaScriptやSQLともっと上の、
ほとんどの学生は、Webベースである最終的なプロジェクトをやってしまうの操作を行い
お分かりのように、背景があなたは今、Cで持っているので、
これらの高レベルの言語に適用することが非常によく似ている。
>> そして、あなたは、あなたの最終的なプロジェクトについて考え始めるように
その、はるかにあなたが奨励された問題セット0、のような
スクラッチであなたに関心のほとんど何もする、
最終的なプロジェクトは、Cを使って新しく得た知識と手腕をとることができます
またはPHPやJavaScriptやスピンに出たい
と見て、世界のためのソフトウェアの非常に独自の作品を作る。
とアイデアを持つ種子をするには、ここでprojects.cs50.netを率いることができることを知っている。
毎年、私たちはキャンパスに教職員や学生のグループからアイデアを募る
ただ、コンピュータを使用して解決することができる興味深いもののために自分たちのアイデアを提出する
ソフトウェアを使用して、ウェブサイトを使用して。
だから、あなたがあなた自身のアイデアを思い付くのに苦労しているならば、
是非とも今年、最後そこからアイデアをスクロールします。
それは前に取り組まれたプロジェクトに取り組むために完全に大丈夫です。
私たちは、キャンパス内での洗濯物の状態を見るため多くのアプリを見てきました
ダイニングホールのメニューをナビゲートするための多くのアプリ、
コー​​スカタログなどをナビゲートするための多くのアプリ。
そして実際、将来の講演と今後のセミナーでは、
我々は両方の市販されている、いくつかの公に利用可能なAPIを紹介します
ここでも同様に利用できるCS50からキャンパス内のデータへのアクセスを持っているように、
その後、それに面白いことを行うことができます。
我々は仕様を離し、数日後に最終的なプロジェクトに、より多く、
しかし今のところ、あなたはソロか1つまたは2つの友人と仕事ができることを知っている
あなたに関心のほとんどすべてのプロジェクトで。
インターネット。
あなたが先に行くとあなたのラップトップを引き出し、あなたが初めてfacebook.comに行く
最近ログインしていて、ヒットが入力したことはない。正確には何でしょうか？
>> ステップのあなたのコンピュータ上でEnterをヒット、全体の束
魔法のように起こっているのソートを開始します。
だから、ここで左側には、FacebookなどのWebサーバーは右側にここにある、
そして、どうにかして、HTTPと呼ばれるこの言葉は、Hypertext Transfer Protocolを使用しています。
HTTPは、プログラミング言語ではありません。それはプロトコルのより多くのです。
それが相互通信する場合は、WebブラウザとWebサーバが使用する一連の規則です。
そしてこれが何を意味は次のとおりです。
はるかに現実の世界のように、我々はこれらの規則を持っている
どこで私をここhumoring気にしない場合は、初めていくつかの人間を満たしていれば、
私は、あなたに出てくる、と言うかもしれない "こんにちは、私の名前はデビッドです。" >>こんにちは、デビッド。私の名前はサミーです。
"やあ、デビッド。私の名前はサミーです。"
だから今我々は愚かな人間のこの種のプロトコルのに従事している
私はプロトコルを開始したところ、サミーは、対応してきました
私たちは手を振とうしてきたが、トランザクションは完了します。
HTTPは、心の中で非常によく似ています。
Webブラウザの要求はwww.facebook.comとき、
どのブラウザが本当にやっていることは、いわば、その手を広げてい
サーバーとそれにメッセージを送信している。
そして、そのメッセージは通常得るようなものです - あなたが得るために何をしたいですか？ -
私、通常はURLの末尾に、単一スラッシュで示されているホームページ、取得します。
そして、ちょうどので、私が話しているどのような言語を知って、私はブラウザがあなたを伝えるつもりです
私は、HTTPバージョン1.1を話していることを、
また、ついでに、私はのホームページをしたいホストがあることを言うつもりです
facebook.comです。
一般的に、あなたに知られていないWebブラウザ、人間、
あなたは単に、www.facebook.comを入力したときに、インターネットを介してこのメ​​ッセージを送信します
>> ブラウザに入力します。
とFacebookは何がで応答しますか？
これは、いくつかの似たような見栄えの不可解な細部もはるかに使用して応答します。
私はここで、Facebookのホームページに先に行きましょう。
これは、あなたがすべての時間にログインしたままにした場合、私たちのほとんどは、おそらく見ることはないという画面です
しかし、これは確かに彼らのホーム·ページです。
我々はChromeでこれを行う場合は、これらの小さなコンテキストメニューをプルアップすることがわかります。
Chromeを使って、Mac OSやWindows、Linux、またはのようなのかどうか、
あなたはクリックや左クリックをコントロールしている場合には、通常、このようなメニューをプルアップすることができます
どこにいくつかのオプションは、ページのソースを表示となっているものをお待ちしております。
あなたはまた、典型的には、[表示]メニューに移動して、つつくことによって、これらのものを得ることができます。
例えば、ここに表示]の下で、開発者は同じことです。
私が先に行くと、ページのソースを表示を見てみたいと思います。
何が表示されますと、マークがfacebook.comを表現す​​るために書かれたHTMLです。
ここは完全な混乱だが、我々はずっと前から、これはもう少し理にかなっていることがわかります。
しかし、ここでいくつかのパターンがあります。私はこのようなものまでスクロールダウンしてみましょう。
人間は山括弧のこのパターンを読みますが、そこに注意することは、これは難しいです
オプション値のようなキーワード、いくつかの引用符で囲まれた文字列のようなキーワードを持つ。
指定した場所、あなたは非常に初めてサインアップしたとき、これは、あなたの誕生年とは何かということです。
出生年のドロップダウンメニューが何とかここエンコードされていること
この言語で、HTML、ハイパーテキストマークアップ言語と呼ばれる。
言い換えれば、あなたのブラウザがWebページを要求すると、
それは、HTTPと呼ばれるこの大会を話す。
しかし、facebook.comは、その要求に何がで応答しますか？
>> 我々は一瞬にしてわかりますように、それは、これらの不可解なメッセージのいくつかを使用して応答します。
しかし、その反応のほとんどは、HTML、ハイパーテキストマークアップ言語の形式になっています。
つまり、Webページが書かれている実際の言語です。
し、Webブラウザでは、実際に、このようなものを受信したときに、何かありません
それは左から右へ、上から下へ読み込み、任意の時間は、それは、これらの山かっこの1を見て
オプションのようなキーワードが続き、それが適切な方法でそのマークアップ言語が表示されます。
この場合、それは年のドロップダウンメニューを表示していました。
しかし、再び、これは見て完全な混乱です。
Facebookの開発者は、例えば、スタイルのために5の場合は0を現すので、これはそうではありません。
それらが記述したコードのほとんどは、実際には、美しく書かれているためであり、
よく、きれいにインデントなど、コメントして
もちろん機、コンピュータから、ブラウザが本当に気にしないでください
あなたのコードは、よくスタイルであるかどうか。
そして、実際に、それはタブ·キーを打つために、完全に無駄だすべてのそれらの時
と、コード全体すべてのコメントを書いたりすると、本当に説明変数名を選択する
ブラウザが気にしていない場合ので、あなたが一日の終わりにやっていることすべてがバイトを無駄にしています。
>> だから、何ほとんどのウェブサイトが行うことにもかかわらず、facebook.comのソースコードです判明
インターネット上cs50.netとこれら他のウェブサイトのすべてのための
一般的によく書かれてなコメントがうまくインデントと似ていますが、
ウェブサイトがインターネット上に置かれ、通常、前に、コードは、縮小される
それによってHTMLとCSS - 私たちはすぐにわかります何か他のもの -
我々はすぐに表示されますJavaScriptコードは圧縮され、
それによって長い変数名は、XとYとZになり、
そしてすべてがとても読みやすく見えるようにそのその空白のすべてがすべて、捨てられる
- あなたはそれをこのように考えると、Facebookは億ページが日に当たる取得するため、
狂ったように何か - プログラマがちょうど肛門のIFだから何
ちょうど今までそんなに多くのコードのいくつかの行を字下げするにはスペースバーを1余分な時間を打つ？
Facebookが保持する場合は意味は何だと空白
すべてのバイトで、彼らはインターネット上の人々に送り返す？
スペースバーを押すと、一度、あなたのファイルに余分なバイトを与える。
そして、もし億人の人々がその後、その日自宅のダウンロードページに進む
あなたは、インターネット上でどれだけ多くのデータを送信している？
これといった理由もなくギガバイト。
と与えられ、多くのウェブサイトのためにこれは、そのようなスケーラブルな問題ではありません
しかしFacebookは、Googleにとっては、最も人気のあるウェブサイトのいくつかのために
大きな動機は、あなたのコードは混乱のように見えるように財政的にあり
ので、それを圧縮に加えて、できるだけ少ないバイトとして使用していること
ZIPのような何かは、gzipと呼ばれるアルゴリズムを使用して、
ブラウザが自動的にあなたのためにないこと。しかし、これはひどいです。
我々は他の人々のウェブサイトについて何かを学ぶことは決してないだろうと、Webページをデザインする方法
我々はこのようにそれを見なければならない場合。
>> だから幸いなことに、ChromeとIEとFirefoxのようなブラウザでは、これらの日
典型的には、組み込みの開発者ツールが付属しています。
私は要素または場合を点検するためにここに行けば実際には、私は、開発者を表示するために行く
と、明示的に開発者ツールに行く
私の画面の下部に、このウィンドウがポップアップ表示されます。
不慣れなタブの多くはここにありますので、最初は少し威圧的だ
左下のが、私は要素をクリックした場合にすべての方法、
Chromeは明らかに非常にスマートです。これは、すべてのコードを解釈する方法を知っている。
それでChromeは何それはFacebookのすべてのHTMLをクリーンアップしています。
空白はそこではないにもかかわらず、インデントが、そこではありません
今私はすべてのそれ以上の階層的にこのWebページをナビゲートするために始めることができることがわかります。
それは、HTML5と呼ばれる言語で書かれたすべてのWebページがこれで開始する必要があることが判明
いわばこのDOCTYPE宣言<！DOCTYPE HTML>
、それは、光と灰色そこのようなものだが、それはこのファイル内のコードの最初の行です
とばかりにブラウザに指示している、 "ねえ、ここでいくつかのHTML5は付属しています。ここでWebページが付属しています。"
を超えた最初の開き括弧は、このことは、オープンブラケットHTMLタグであることを起こる
私はより深くに飛び込む場合、その後 - これらの矢は完全に無意味です。
彼らはプレゼンテーションのためだけであり、それらはファイル中に実際にはありません -
FacebookのHTMLタグと内側、開き角括弧で始まる何かを気付く
そしてその単語はタグと呼ばれていました。
だから、HTMLタグで囲まれたどうやらheadタグとbodyタグです。
headタグの中は今、Facebookの全体の混乱です
彼らはマーケティングおよび広告のためのメタデータや他の多くのものを持っているからです。
>> 我々は下にスクロールした場合でも、ダウン、ダウン、ダウン、それがどこにあるか見てみましょう。ここにある。
この1つは、少なくともある程度精通している。
Facebookのホームページのタイトル、あなたがあなたのタイトルバーにタブが表示されている場合は、
フェイスブックへようこそです - は、ログインサインアップまたはこちらをご覧ください。
つまり、あなたがChromeのタイトルバーに表示されるものだ
そしてそれは、それがコードで表さている方法です。
我々は頭の中で他のすべてを無視した場合、Webページの根性のほとんどは、ボディ内にある
そして、それはFacebookのコードが複雑に見えるために起こっていることが判明
ほとんどのものよりも、我々は、それが年月をかけて構築されているという理由だけで最初に書こうと思います
しかし、scriptタグの全体の多くは、JavaScriptコードは、そこ
それは、ウェブサイトが非常にインタラクティブにする：
瞬時JavaScriptのような言語を使用して、ステータスの更新を見て。
ページの一部門であるdiv要素と呼ばれるものは、ありません。
しかし、我々はその詳細に​​入る前に、ズームアウトしてみましょう
そしていわば、Facebookの1.0の簡易バージョンを見てみましょう。
ここでは、Webページのこんにちは、世界です。
それは非常に上部にそのDOCTYPE宣言がある
これは、他のすべてとは少々異なっています。
我々は、Webページに書いて他には何も<で始めようとしているされていません！その行を除いてそこに
とHTMLのコメントと呼ばれるものを除く。
しかし、ほとんどの部分は、Webページ内のすべてのものは、オープンブラケット、キーワード、近くのブラケットです。
>> このケースでは、可能なWebページの最も単純なを見ることができます。
、HTMLタグはheadタグが含まれており、それは、bodyタグが含まれています
しかし、タグの開始と停止のこの概念があることに気づく。
これは、HTMLの開始タグですが、これは終了タグまたは終了タグです。
彼らはある意味で正反対のようなものだということに注意して終了タグまたは終了タグ
これは前方に自身の内側にスラッシュがあります。
一方、ここにここにオープンheadタグとクローズヘッドタグがあります。
>> オープンタイトルと密接なタイトルタグがここにあります。
私は純粋に任意の1行でタイトルを入れてきたという事実。
1行にうまく収まるようにようにそれはちょうど見えたので、私は数回Enterキーを押す気にしませんでした。
一方、私がしたボディは、ちょうど今までので、明確にしてインデントします。
HTMLはかなり間抜けな言語であることに注意してください。
実際、昔にWYSIWYGエディタがあった前
あなたは、言うことができるとMicrosoft Word "は、このイタリックを作る、これは太字にし、"
あなたは実際に20年以上前にエッセイに少しのコマンドを入力します。
あなたが言うことによって、 "このテキストを太字に作り始める。このテキストが太字に停止します。"
"このテキストイタリック体を作り始める。このテキストイタリック体を作って停止します。"
>> つまり、HTMLまたは他のマークアップ言語が何であるかです。
この最初のタグには、 "ねえ、ブラウザがここでいくつかのHTMLが来る"と言う。
次のタグは、 "ねえ、ブラウザがここで頭、私のWebページのヘッダーが来る"と言う。
"ねえ、ブラウザがここでタイトルを付属しています。"
そして、こっちに、 "ねえ、ブラウザのタイトルのためのそれだ。"
だから、これは世界では、ブラウザはもはやハローよりも多くの文字を表示しない場合は、知っている方法です
タイトルバーに表示されます。
一方、これによると、 "それはそれは頭のためだ。"
これは、 "ここに体が来るここで、実際のボディがある"と言います - こんにちは、世界、文字通り言葉。
そして、これはここで言う、 "それはボディのためのそれだ。HTMLのそれですね。"
だからブラウザはかなり間抜けです。
彼らはただ、左から右へ、上から下へのこのようなものを、読み、正確に彼らが何を言われて何をすべきか。
実際にここで少し例を行いましょう。
テキストエディットすなわち、私はここに私のMac上のプログラムの最も単純なを開けてみましょう。
Windowsでは、メモ帳を使用することができます。
しかし、これはあなたがウェブページを作り始めるために必要なすべてのです。
私は先に行くと、ちょうどこのファイルにこのコードをコピーして貼り付けるつもりです。
私は、先に行くと、私のデスクトップに保存するつもりです
と私は、hello.htmlとしてこれを保存するつもりです
現在はファイルがhello.htmlという名前が付いています。
ここにそれは私のデスクトップです。
私は、ブラウザに移動して、ブラウザにファイルをドラッグしてみましょう。
と出来上がりには、ここに私の非常に最初のウェブページです。
タブのタイトルがhelloであることに注意して、タイトルタグごとのような世界、
そして、こんにちは、世界は私のWebページの本体であることに気づく
と宇、ホー、私はインターネット上だ。
>> このファイルはインターネット上にありませんので、私は、右、本当に分からない。
それには、その特定のパスで私のローカルのハードドライブにあることを起こる。
しかし、考え方は同じです。我々が今必要なのはそれをアップロードするWebサーバーです。
しかし、最初に、実際にはもう少し複雑さともう少し様式を紹介してみましょう。
退屈な、ウェブページなら、これは簡単です。
我々が使用できるタグの他の種類があるうちはそれになります。
例えば、ここに黄色で私は2つの新しいタグを導入しました。
我々は、これらの今日と多くを果たしているが、気づかないだろうそのリンクタグ
何とかして他のすべてから違って見える。
リンクタグには、属性と呼ばれるものを取り
と属性は、タグの動作を変更しますものです。
この場合において、これは、リンク名の最良の選択ではありませんが、それは無意味のようなものだから
しかし、このリンクタグは基本的に言う、私のWebページ内styles.cssを呼ばれるファイルが含まれています。
あなたはCの＃includeディレクティブには、このように類似したものと考えることができます。
styles.cssは、我々が今日に再生されないことを完全に別の言語に言及している
それは美学のためだ：フォントサイズ、色、パディング、インデント、マージン、
と美学の詳細のその種のすべて。
一方、スクリプトタグは、機能的に類似しています
むしろCSSのインクルードは、その言語ではなく、それは別の言語は、JavaScriptが含まれています。
だから、他の言葉で、これらの2つのタグを使用して、私は最終的に自分のWebページを記述することができるようになります
私や他の誰かが書いたコードではなく、プル
我々は他の人の肩の上に立つことができるように、我々は、良いデザインを練習することができます
共通コードのうちファクタリング。
私は10種類のウェブページを持っていれば、これは私の美学のいくつかのことを意味します
＃別のファイルに含まれるのと同じように、因数分解出することができます。
だから我々はそこに取得している。
しかし、ここで実際に最初にこのファイルを使ってもっと面白いことを行うことができます。
>> 繰り返しますが、これは単なるテキストエディットです。私はまだインターネット上で技術的にはないんだけど、私たちはそこを得るでしょう。
私はそれがそうであるよりこんにちは、世界は少し太くしたいのですが。
だからこんにちは、任意に太字用を言ってみましょう。
繰り返しになりますが、ストーリーは同じです：こんにちは、カンマ（、）、、これは大胆な作り始める
その後世界は、太字で印刷され、これは太字で、この印刷を停止されることを意味し。
私が先に行くと、私のファイルを保存すると、Chromeに戻りましょう、私はちょうどので、私たちは、それが良く見えるにズームインします
とリロード、あなたはその世界は、太字で今がお分かりでしょう。
Webはハイパーリンクがすべてですので、先に進み、このような操作が可能です。
私の好きな​​ウェブサイトは、youtube.com、としましょう​​。
リロードし、保存します。オーケー。今ではウェブサイトのhideousness以外カップルの問題があります。
1、私はここでEnterキーを打つと確信しています。と私でした。
私は、私たちがスタイルについて説教してきたものの練習は、私もインデント、Enterキーを押すだけでなく、
しかし、私は、世界のすぐ隣にあります。
だから、これはなぜですか？ブラウザでは、あなたがそれらが何を言う何をすべきか。
私は "ここに行を分割します。段落はここで破る挿入します"は、ブラウザを語っていない
私は30回リターンキーを押すと、ブラウザがそうなら、それは問題ではない、
それはまだ世界の隣に私の右手を置くつもりだ。
私は本当にここにしなければならないことは、あったら何かのように言って改行を挿入しています。
>> そして実際に、改行が奇妙なことの一種である
あなたが本当に別の行に移動を開始することはできませんので、次に何かをする、
してから、新しい行に移動し停止します。それは、アトミック操作のようなものだ。
あなたはどちらか、それを行うか、あなたはしないでください。あなたは、Enterキーをたたいたり、あなたはしないでください。
だからbrは異なるタグの少しですので、私は両方ともオープンの並べ替え、それを閉じる必要があります
すべてを一度に。
の構文はこれです。
技術的には、HTMLの一部のバージョンではこのような何かができる
何かを起動および停止する理由はありませんので、これはちょうど愚かである
代わりにすべてを一度に行うことができます。
、HTML5は、厳密には、このスラッシュを必要としないことに気付く
ので、それを持っていない教科書やオンラインリソースが表示されます
しかし、ついでに私たちがこれまで見てきた対称性を練習してみましょう。
これは、タグが両方オープンとクローズであることを意味します。
だから今私はここに戻って、私のファイルを保存しておきましょう。
わかりましたので、それは私が知っているWebはクリッカブルの一種である以外は、良く見えるし始めている、
そしてまだここにYou​​Tubeが何かにつながるようには思えない。
それがリンクに見えたとしても、ブラウザがそれ自体を知らないからね、
ので、私はこれはリンクであることをブラウザに指示する必要があります。
>> これを行う方法はアンカータグを使用することです：
<リンクを言うの古い学校の方法であるハイパーリファレンス、のhref、
= "http://www.youtube.com">
そして、それはもう少し読みやすく私はちょうどので、新しい行にこれを移動させ
と私は、フォントサイズを縮小します。
私はまだ終わっていますか？いいえ、この二分法が行われる予定です。
このタグは、アンカータグは、確かに、属性がかかりますか
これは、その動作を変更し、その属性の値は明らかにYouTubeのURLです。
しかし、二項対立に気づくこと、それはあなたがしようとしているURLです理由だけということです
それはあなたが下線とリンクを作っていることを言葉でなければならないということではありません。
むしろ、それはこのようなものになることができます。
だから私はこの言葉に近いアンカータグを使用してハイパー製造を停止と言わざるを得ない。
私はこれをやっていないよ注意してください。
1、これはただのみんなの時間の無駄だろうし、それは必要ありません。
>> タグを閉じるには、もう一度だけ、タグの名前を言及。
あなたは、属性のいずれかを言及していない。
だから、戻って行くというのは、保存しておきましょう。さて、出来上がりは、今では青とハイパーリンクです。
私はそれをクリックした場合、私は実際にYouTubeに行くのですか。
私のWebページがインターネット上にない場合でも、だから、それは、少なくともHTMLです
私たちは、インターネットが追いつくようならば、私たちは実際にyoutube.comでここに終わるだろう。
と私は戻って行くことができ、ここで私のWebページです。しかし、これに気づく。
あなたは今までスパムやフィッシング攻撃を得ている場合、
今、あなたは同じことをするだけで、5分後に能力を持っています。
我々はここに行くとwww.badguy.comような何かを行うことができます
または何でも大ざっぱなウェブサイトがあり、その後、あなたのPayPalアカウントを確認すると言うことができます。
[笑い]そして今、この私はをクリックしてするつもりはないbadguy.comに行くつもりです
私は、それが導く見当がつかないので。 [笑い]
>> しかし、我々は今、実際にそこまで終わらせる能力を持っています。
だから我々は実際には単なる表面に傷を付け始めている。
我々は、それ自体がプログラミングしていない、我々は、マークアップ言語を作成している。
しかし、すぐに我々は、HTMLで私たちの語彙の締めくくりとして、
我々は、PHP、実際のプログラミング言語を紹介します
それは、自動的にCSSを生成し、私たちは自動的にHTMLを生成するようになります
私たちは、言う、実装するために水曜日に開始できることを
当社独自の検索エンジンなどがあります。
数日でその上が、より多くの。次にお会いしましょう​​。
>> [CS50.TV]