[00:00:02] [音楽再生] HANNAH:こんにちは、誰も。 出てくるためにみんなそんなにありがとうございました クイズ1のために嫌な天気で レビューセッション。 あなたたちが知っているように、クイズ 1は、この水曜日です。 だから我々は行くつもりです 話題の束を通して。 デーヴィン:ねえ、私が言うことができる 実際に素早く何か? HANNAH:うん、デーヴィンの行く 実際に素早く何かを言って。 デーヴィン:申し訳ありません。 ご質問がある場合は、単に実際に素早く クイズについて、あなたはオンラインで行くことができます。 クイズについて、2014年クイズ1に移動します。 これは、約物流を持っている 行くためにどこで、いつどこへ行くか。 あなたが同時に在籍している場合は、私たちはしている 5:30化粧クイズを持っているつもり。 それとも、私に問題を送信した場合、 あなたは他のいくつかの問題がある。 しかし、5時30分には、メイクアップです 水曜日の時間。 しかし、あなたが質問がある場合は、 一般的な質問、 オンラインでは、すべての物流を持っています。 だから、最初にそこに確認してください。 [00:00:47] HANNAH:恐ろしい。 だからここに話題のビッグリストです 今日は通過するつもりだ。 私はCのすべてをカバーするつもりです その最初の列であるもの、。 だからCのものを クイズゼロの後に覆われた。 リンクリストから開始し、 そのポインタを含む。 [00:01:05] すべての権利、私たちはこれを見た 最終セッションで、 私は通過するつもりだ これは少し速くなります。 あなたは私がしたい場合は、ちょうどあなたの手を上げる 遅くしたり、さらに何かに取り組む。 しかし、我々はので、リンクされたリストを使用 私たちは、アレイとCに始まった。 と配列は素晴らしいですが、 問題は、固定サイズを有している。 リンクされたリストは、私たちが作成することができます 動的にサイズデータ構造。 [00:01:28] そして、私たちは私たちの基本的な操作を持っている、 挿入、削除、および検索します。 そして、我々は、インサートを行うことができます 最悪の場合、一定の時間 私たちは非常に最初にそれを置く場合。 削除し、検索し、最悪 ああ、n個の時間の大ケース。 だから、再び、ちょうど反転する これらの写真を通して、 私たちはこれらの最後の時間を見て知っているが、我々 私たちのリンクリストを追跡したい を追跡することによって 私たちのリンクリストの先頭。 私たちは知っているので 我々のノードの各々 ちょうどを指すように起こっている 私たちのリンクリスト内の次のノード。 [00:01:58] だから、私たちが追跡する方法です。 これらはありませんが メモリの連続ピース、 私たちは、それらを見つけることができます 別の矢印を次のよう。 ここに私たちの構造であり、 連結リストノードの。 我々は、この最後の時間を見ました。 私たちは、構造体のノードを持っている。 そして、2つの特性を有する。 ナンバー1、実際の 値は、私たちは、保存したい。 この場合、それは整数だ。 それは、文字列ができるかもしれない あなたが好きな、CHARである。 その後、我々は、を追跡する必要が 私たちのリンクリスト内の次のノード。 だから、になるだろう 次のノードへのポインタ。 あなただけをしていた場合 私は前にも言ったように、検索、 あなたの矢印を下に従わなければならないと思います。 挿入、あなたが追跡したい あなたのリストの残りがどこにあるの。 そして、あなたは頭をリダイレクトしたい 私たちの新しい要素、を指すようにした この場合には、いずれか その後1を指すようになります リンクリストの残りの部分。 だから、再び、私は、これは少し知っている クイズゼロからの繰り返しのビット。 だから我々は非常に注意する必要があります で、私たちの順序について 我々はしないように、これらのpointingsを行う リストの後ろのトラックを失う。 OK、あらゆる質問との ただ、単独リストをリンクさ? 恐ろしい、[OK]を、涼しい。 [00:03:06] だから今、私たちは何かの上に行くつもりだ ただ少し複雑、 二重にリンクされたリスト。 維持に加えて、だから、 次のノードのトラック、 我々はまた、追跡したい 前のノードの。 我々はならそして、これは、私たちがすることができます 私達のリンクリスト内のある時点で、 前方に行くだけでなく、 また後方反復する。 我々が見たようにあるため 単独でリンクリスト、 我々はいくつかのノードにあった、とした場合 突然、私たちは決めた、 実際に、私はに行きたい 私の前にノード右、 あなたはすべて行く必要があるだろう 後頭部への道 あなたが見つけるまでと反復処理 あなたが探していたノード。 [00:03:35] だから、これは物事を作る 私たちがしているように少し簡単 反復処理しようとしている 私達のリンクリストを経て。 しかし、それは1を追跡するために私たちを必要とする より多くのポインタなので、もう一つのノードの星。 すべての権利なので、ここでは楽しい部分が来る。 私たちは、実装練習するつもりだ 二重連結リストに取り除く。 だから、これはだものです クイズのための完全に公正なゲーム。 それは、過去のクイズに現れた。 だから、間違いなく製造することが Cで少しコードに すべてとのことを忘れてはいけない この楽しいPHPやJavaScript、 我々はまだ覚えておく必要が C.を行うためには、だからそれをブラッシュアップ 場合は、さびた感じている。 [00:04:12] すべての権利、私たちはこれを行うことができるかどうか見てみましょう。 クール、[OK]をクリックします。 だから我々は試してみるつもりだ 右ここで編集するには、 計画通りにうまくいけば、これは行く。 すべての権利、誰も私を与えたいと思うん 私は始めるべきかについての提案? 私は唯一の前提 作りはすでに私ということです 構造が定義されている、 1私は、最後のページに示した、 最後のスライドに。 そして、私は私のリンクの頭を格納しています リストと呼ばれるいくつかのポインタでリスト。 誰も私が始めるしたいのか? [00:04:42] 読者:あなたは新しいを作成できます リストを呼び出すためのノード? [00:04:45] HANNAH:恐ろしいので、 私たちは、作成しましょう リストをクロールする新しいノード。 私はすきです。 それはOKだ場合、私はちょうどポインター、それを呼ぶことにします。 そして、ここでそれはもともと始めるべき? [00:04:57] 聴衆:おそらくで リストの先頭。 HANNAH:美しい。 我々は、先頭に開始したい Iは、リストに格納されようとしていると述べた。 恐ろしい。 ここまでは順調ですね。 そして今、私たちの目標は、にあり リストを反復 我々は持つノードを見つけるまで 我々は削除したい値n。 OK? [00:05:13] だから今どこに部分です 我々は、反復処理したい。 誰もが提案することができます を反復処理する方法は? [00:05:19] 読者:ループ。 [00:05:20] HANNAH:ループ。 大好きです。 具体的には、whileループを試すことができます。 OK、そして我々が達したことを知っている 私たちのリストの最後と何? 読者:ポインタがNULL。 HANNAH:ポインタはNULLです。 美しい、私はそれを愛する。 クール、[OK]をクリックします。 私のバウンディングブレースがあるのであれば申し訳ありません 種類の画面をオフに落ちる。 我々はそれを持ち帰った。 クール、[OK]をクリックします。 次は何ですか? [00:05:48] だから我々は、我々は削除したい知っている 値nを持つノード。 それでは、どこにケースを見つけてみましょう 私たちは実際に私達のノードを見つける。 それでは、どのよう私はそれをチェックするのでしょうか? 私場合、私はちょうどそのポインタあれば言う、と思います ポインタから値を取得したい、 私はちょうど、n個の矢印でください nは、パラメータに等しい 私たちは、この関数に与えた 私たちが実際に削除するノード。 ここまでは、最大何か質問? 大丈夫。 [OK]を、ので、今のは、迅速な絵を描きましょう 基板上に順にこれを可視化する。 [00:06:24] それでは、私たちの素敵なノードがあるとしましょう​​。 そして、それは価値があり、私はちょうど4を言うよ。 そして、それは次を指して 私たちのリンクリスト内のノード。 そして、それ以前に何もありません。 だから我々は我々の前のを持っている 何を指している。 このケースでは、後方を指す。 OK、ちょうど私のセットアップ こちらにリンクリスト。 そして、我々はその点リストを持っている そもそもこの構造体へ。 私はのための1続きを描画します 完全を期す。 OK。 私は、この前進を指します。 そして、私はその1背中を指すでしょう。 おっと、申し訳ありません。 うん、後方にこれを得た。 再びそれを行う。 [OK]を、そこに私達は行く。 すべての権利、それを得た。 [OK]を、ここに私たちの絵だ。 [00:07:21] [OK]を、私たちは2例を検討したい。 最初のケースは、次の場合です。 私たちは、削除するノード 私たちのリストの非常に先頭にある。 私たちが望むそして、第二ケース それはどこか他の場合に考慮することである。 私はこの完全にあることを理解 すべての私の消去と厄介な図面、 うまくいけば、我々はしようとするでしょう いくつかのコードでこれを明確に。 [00:07:40] OK、それでは、ケースをカバーしましょう 我々は我々のノードを見つけた場所、 そしてそれは非常にだ 私たちのリンクリストの先頭。 誰もが私を与える ものとして、ここでの提案 私は実際に私達のノードを削除するために何をすべき? それは少しトリッキーです。 OK? [00:07:56] 読者:あなたが取る必要がある その前になりノード そしてそれが指す作る それの後になります1、 そのノードを取る それの後であることとなるだろう それはそれの前にノードを指す。 HANNAH:まさに。 OK、これはケースです where--我々は2つ​​のケースを持っている。 私たちはケースを持っている 我々が探しているノード リストの先頭です。 [OK]をクリックして、あなたの場合 記載され、右、そうでないのですか? これは、リスト内のどこか別の場所だ。 ですから、私たちがする必要がある、と述べ 前のノードを見て、 と前のノードを作る 次のノードを指す。 それでは、私たちがしているとしましょう 5を取るしようとしている こちらに私の非常に厄介な図中。 私たちは、ことを確認するには 4は今6を指す。 4〜6の次のポイント。 4へと6の前のポイント。 そう、ここに私たちの目標です? これは、私はあなたを考えるものである ちょうどあそこに言った。 [00:08:56] OK、それでは、その最初の作品を紹介しています。 持っているのは、やってみましょう 以前のポインタ前の。 だから、4の次は何を指している必要があります? まさに、この場合、6。 だから我々は次の、ポインタを言う必要があります。 OK? 大丈夫。 それでは、この醜い絵を取り除くましょう と少しよりよいものを描くようにしてください。 ここでは私たちのリストの頭を持っている。 そして、それは最初のノードを指す 我々は言った私達のリンクリストは、4です。 ここに私たちの第二のノード、5です。 そして、私たちの第3のノード、6。 ただ正確に同じの描画しようとしている 絵、ほんのもう少しきれいに。 [OK]を、ので、4の次の もともと5を指す。 6へファイブの次のポイント。 5へシックスの前のポイント。 4へと5の前のポイント。 だから、非常に良く! クール、[OK]をクリックします。 [00:10:04] だから今、私たちは何をしたか ここでは、コード行、 ポインタが以前言っている 次ので、それは何を意味するのでしょうか? 私たちが見ている場合、それは意味 5、前のノードに移動し、 それは次のようになりましすべきだ 5の次にポイント。 だから、基本的に、それは何をやっている それは、この矢印を消去ださ それは右の5をスキップすること。 それは明確ですか? 私はそれが少し大ざっぱことができます知っている。 私はいくつかの頭のうなずきを参照してください。 それは良い。 クール、[OK]をクリックします。 さて、次のステップは何ですか? [00:10:39] 私は次をリセットしました。 さて、そのほかの矢印 私は変更する必要がありますか? この1はここ。 シックスの前の。 私たちは、6の前の必要はありません もう5を指すようにします。 我々は、それが4を指すようにしたい。 その絵は意味があるか? だから今、私たちは、実際に5外を取ることができます。 それでは、その部分を紹介しています。 私は私の前に何をすべき 6の以前の4へのリセット? そこに任意のアイデア? [00:11:14] 読者:間のノードを解放 それがnullに設定することで、それら? HANNAH:クール。 確かに、私たちの最終目標は、 ノードを解放することになるだろう。 だから我々はここことを行うことができます。 フリーポインタ。 絶対に。 しかし、たとえその前に、 私たちの目標権をjust--てみましょう ここで次のポインタを設定することである 以前のポインタに等しく、前。 私はこれが隠蔽なって知っている。 OK、のクールtake--ましょう。 誰もがこの下の行を見ることができますか? それとも、スーパー小さいのですか? [00:11:50] だから我々は実行する前に ここでこの行は、私たちが欲しい ことを確認する ポインタは次のnullではない。 ポインタが次の場合はあるので ヌル、どのようなエラーの種類 私がしようとしたときに私が取得します nullポインタを参照する? 読者:ワンセグの障害。 HANNAH:ワンセグ障害、美しい。 [OK]を、ので、それがない場合は、 nullの場合、私たちはリセットすることができます。 そして、我々は4つに再び6点を持っている。 この時点までの質問まで? はい? [00:12:17] 読者:あなたの最初には if文、あなたがやった 矢印を持っていることを意味 次の、または[聞こえない]? HANNAH:私は、ポインタ矢印nを意味した。 そこで、基本的に、私が何をしようとしている 私は、現在のノードは、言うである 繰り返し処理、現在のノードその 私はポインタに格納しています、見ている。 そして、私はポインタのを知りたい この場合、nは値。 そして、私が見たいと思って、ある 私が探していたノード ノードに対して私は削除することを目指している? ここでポインタnを持っている理由だからです。 [00:12:47] 聴衆:だから、矢印が行く nには、値を設定 とnと呼ばれるノードに格納します? [00:12:55] HANNAH:だから、私がした場合のようなものだ このリンクリストを通過する と5を指す。 私があれば、その値を取得したい場合 私は、その数、5を取得したい 私は、ポインタ矢印nを行う必要があります。 クール? うん。 [00:13:07] 観客は:変数の名前をnは? HANNAH:はい。 だから我々は戻って1を反転した場合 スライドは、nが名前である 内部の値の 私たちのリンクリスト内のノード。 そして、私はそれは少しを得ることができます知っている 少し混乱も私たちのため ものを呼び出している 我々は、nを削除すること。 だから、それはどこだ 1行がから来ている。 うん? [00:13:27] 読者:あなたは何がありますか [聞こえない]、彼らがどのように動作するか? ポインタ[聞こえない]? [00:13:35] HANNAH:確かに。 あなたがabout--どのラインを話している? 読者:最後の行[聞こえない]。 [00:13:44] HANNAH:確かに、OK。 それでは、絵で見てみましょう これを説明しようとするため。 私はのために、ごめんなさい カメラ、質問はなかった 私たちは、ポインタを説明することができます 前へ次へのポインタを矢印。 OK、それでは、私たちは5にいるとしましょう そして私たちの目標は、5を削除することです。 だから、これは、これらの、次のポインタ 3ノードは、それが私たちを与えるのでしょうか? それは正しい、第6ノードに私たちをもたらしますか? [00:14:10] [OK]を、ので、今私たちは求めている 6の以前のために。 OK? そして、我々はこれを再設定している 4個に等しくなるように、 その5の前のことを起こった。 私はそれがスーパーですが、知っている ハードを追跡する。 私は本当にあなたが絵を描くお勧めします あなたはこのような質問を得れば。 はい? [00:14:30] 観客は:その理由です 私たちは[聞こえない]を持っていないのですか? [00:14:37] HANNAH:まさに。 質問がなかったので、なぜ 我々はここでチェックする必要はありませ? なぜ我々はあることをチェックする必要はありません 以前のポインタがnullに等しいではないでしょうか? そして、私たちがしたからだ すでに分離し ケースポインタの場合 非常に冒頭に。 とても良い質問。 この上で他には? クール、[OK]をクリックします。 それでは、それを仕上げましょう。 私たちはほとんどがしています。 [00:14:59] だから何それが頭にある場合は? どのような場合の代わりに、 5を削除しようと、 私たちは実際に4を削除したいですか? 私は何をしなければならないでしょう? まあ、私は何に私の頭をリセットしたい? それを叫ぶ? 読者:それの後に1。 HANNAH:美しい。 [OK]を、私たちは指していることをリストアップしたい どんな私達のポインタに次のノードである。 グッド。 そして、ちょうど完全性のための 酒、我々はだろう 私たちのリストである限りのことを確認したい 限り私たちのリストではないので、nullではない 空の、我々は設定したい ヌルに私たちの前の等しい。 これまでの質問? 一歩離れてfrom--? [00:15:53] 読者:あれば、それは次のようになり リストはnullに等しいではないでしょうか? [00:15:55] HANNAH:はい、あなたは完全に正しい。 ごめんなさい。 リストがヌルに等しくないです。 恐ろしい。 すべての画面上でこれを持ってしようとしています。 それは落下のようなものだ。 申し訳ありませんが、みんな。 そして、少なくとも最後のではなく、すべての 我々はリターンです行う必要があります。 OK。 つまり、たくさん詰め込また 本当にすぐで。 この上を見て第二してください。 ご質問があれば教えてください。 うん? [00:16:20] 読者:リストがにある場合 ヘッドは、用事、待ってthen--。 [00:16:26] HANNAH:OK、良い。 リストには、先頭にあるのであればこれは、 我々は挿入されたものは何でもそれを削除します。 うん? [00:16:31] 読者:あなたは説明できます 再びif文最初の? Nへのポインタがnに等しい場合? HANNAH:確かに。 したがって、この関数全体の私たちの目標です 値nを持つノードを削除します。 だから我々はしているように私たちは、発見した場合 私たちのリストを反復、 値nを有するノード、つまりだ 1我々は、削除したい。 だから、削除のすべてが起こります その大きなif文の内側。 それは理にかなっていますか? クール。 うん? [00:16:59] 聴衆:たぶんあなただけで見ることができない それが、あなたにもラインを必要としない リストをスクロールするために? HANNAH:恐ろしい。 それでは少しこれを持ってみましょう、と 私たちは、底にその権利を投げるでしょう。 たぶん、ボードはいただろう わずかに良いアイデアをされて。 それでは、どのよう私が前進ポインタを移動でしょうか? [00:17:17] 聴衆:ポインタ ポインタプラス1に等しい。 [00:17:20] HANNAH:美しい。 だから、私たちがすることができます を反復継続する。 OK。 観客は:そこに他のではないでしょう? HANNAH:Oneより多くの時間? 読者:そこではないでしょう 大きな古い後に、他の場合 文[聞こえない]? HANNAH:パート? ごめんなさい。 [00:17:38] 読者:トラバーサル、 そこに他にすべきではない? HANNAH:あなたは絶対に 他の可能性があります。 Iは、戻り権利を有しているので そこに、あなたは他を必要としません。 しかし、ええ、良い質問。 はい、OK? 読者:私たちは、ポインタを考えることができます それは、リスト内を移動される 値を引き受けるなど リスト内の各ノードの? または私達はと考えるべきです リストに外部の一種? [00:18:00] HANNAH:どちらかが細かいですが、私は思う。 私はそれを想像する方法です 私はOK、私はポインタだ、と言う。 そして、これは私です。 これは私の手です。 私は別のを指すように行くよ 私が通って反復処理したいもの。 まず、私が指すように行くよ リストの先頭に。 そして、それは私は私に語った 4つに指し示すように行く。 だから私は、リストの外部にある、 私は、これらの各要素を指すことができます。 だから私は、ポインタとして自分自身について考える。 聴衆:だから削除 これらの要素のいずれか、 あなたはいわば、自分自身を削除します。 HANNAH:まさに。 だから、ものを削除 あなたはを指しています。 だから例で 我々はどこ私たちは見た 5を削除しようと、 私は5を指しているとき、 私が削除したい 私はを指しているもの。 正確に正しい。 はい? 読者:私たちは面倒を見たことがあります nがリストにない場合? HANNAH:nがリストにない場合は? 起こるだろうことすべてはあなたがしているである を通って、反復反復処理しようとして を通じて、その後、あなたが行っている ヌルさポインタに到達するために、 その後、あなたが行われようとしている。 [00:18:48] 読者:だから我々は持っている 何も返さするには? HANNAH:私たちは可能性があります。 場合は、これを定義した方法 機能、私はちょうどそれが返すことを言う 関係なく無効になる。 しかし、あなたは何かを持っている可能性が 整数を返すように、 そしてそれは返してきた それが失敗した場合1陰性。 そのような何か。 質問はいwith--? 読者:[聞こえない]? HANNAH:申し訳ありません? 読者:[聞こえない]? HANNAH:確かに。 私たちがしたらだから、actual--だ 移動のすべてのこの仕事をして すべてのこれらの矢印の周りに、私たちの全体 目標は、ノードを取り除くことでした 私たちは、探していること。 解放し、この場合にはそう ポインタ、私は5を指している場合には、 それがこの中間ノードを消去するようなものだ。 つまり、フリーポインタ部分です。 それは理にかなって? [00:19:29] 聴衆:だからさえ思った あなたは[聞こえない]をしませんでした? [00:19:31] HANNAH:だから我々は最初に想定 私たちはいたいくつかのリストを持っていたalready-- 彼らは一緒にこれを入れていた。 だから、これを構築するために、 リストは、彼らが[聞こえない]たのだろう。 クール。 これで他には? はい? [00:19:46] 聴衆:何リストの場合 空行と等しくない? [聞こえない]? HANNAH:右ここに? 読者:うん。 HANNAH:OK、すべて私がやっている 私は念の作ってるんされている その私が間接参照リストにしようとする前に、 私は以前にアクセスしようとする前に、 そうでないことを私が確認する ヌルので、私はワンセグ障害を得ることはありません。 クール。 [00:20:08] [OK]を、私はこれがかなりいた知っている を介して取得するためにたくさん。 したがって、このスライドは次のようになります あなたに利用できるようにしました。 だから、より詳細にそれを介して行くことができます。 はい? [00:20:17] 読者:なぜリスト[聞こえない]? HANNAH:確かに。 だから、リストは本当にを指し 右ここにこの要素、 リストの最初の要素。 だから、以前のを持つことはできません。 はい? [00:20:31] 観客は:ポインタポイントしていますか メモリ内の同じアドレスへ? それは、同じを指すない ノードとしてメモリ内のアドレス それがポイントだと? [00:20:40] HANNAH:はい、それが指す メモリ内のこのノードへ。 [00:20:43] 聴衆:右、そう ときに[聞こえない]? [00:20:47] HANNAH:意味で、はい。 OK。 すべての権利、これと一緒に移動してみましょう。 そして、あなたはより多くの質問がある場合は、 最後に固執、 そして我々は再びそれを通過することができます。 クール、[OK]をクリックします。 今、我々は上に移動する取得 テーブル、試行を、ハッシュへ あなたはスーパーだと木々、 P-セット5、スペルチェックで精通し。 [00:21:04] だから、ハッシュテーブルはちょうどです 単独でリンクリストの配列 または二重にそれをオフに来リストをリンクさ。 だから我々はいくつかの並べ替えを持っている 連想配列の。 そして、私たちは知っているどのようにこれらのどの に入るために、配列バケット、 我々は、ハッシュ関数を使用します。 この場合には、誰にもすることができます どのようなハッシュ関数を推測する ほんの一部に基づいているだろう 入力と出力の? [00:21:31] 読者:アルファベットの文字の数。 HANNAH:まさに。 それはちょうどアルファベット順に格納します。 で始まるすべて Aは最初のバケットに入れられる。 Bとのすべてがに入れられる 第二バケット、ように、など。 恐ろしい、[OK]をクリックします。 ハッシュ関数は、任意である 言葉にとる関数 そしてあなたに何を教えてくれます それはに属しバケット。 私たちの中のSOどのエントリ アレイは、それが中に属します。 [00:21:55] だから、毎回私は自分を与える ハッシュ関数言葉、 それは私に同じことを伝える必要があります 一つ一つの時間を置く。 だから我々は、ハッシュ関数を使用する場合 前のスライドから 我々はによるソートどこ アルファベットの最初の文字、 私は私の与えるたびに ハッシュ関数「りんご」、 それは常に私に戻って0を与える必要があります。 だから私はリンゴを持っている場合 私のハッシュテーブルに置くために、 私は、私のハッシュ関数に「りんご」を与えれば、 それはバケツ0に入れて行く、と言うべき。 私が探していた場合 私のハッシュテーブル内のリンゴ と私はどこにAppleがかもしれない、と言う あなたのハッシュ関数を依頼し、住んでいます。 そして、それはバケット0に行く、と言います。 大丈夫? ハッシュ関数との質問がありますか? 恐ろしい。 [00:22:34] ここでは少しある 詳細な説明 ハッシュ関数がどのように見えるかの。 大丈夫。 ハッシュと今、問題 機能は、理想的な世界である 私たちは、1つを持っているだろう 各バケット内の事。 しかし、現実には、あります 1単語だけでなく、 それはありませんA.で始まる B.そうで始まる唯一の単語 この場合、我々場合 突然 "、ベリー"を取得 そして我々はそれを入れたい 私たちのハッシュテーブルに、 私たちはああ、いや、バナナは、参照してください。 すでにそこに、私たちが行うつもりですか? [00:23:03] まあ、我々は2つ​​のオプションがあります。 最初のオプションは、 リニア、プロービングいる ちょうど探しに行くことを意味 次の空のバケツ。 次の空の配列エントリを探しに行く。 そして、ちょうどそこに「ベリー」を置く。 だから私はそれがことになっている知っている バケツ1にバナナと一緒に行く。 しかし、単に、バケツ3に入れて バケット3が空であるため。 別のオプションは、おそらく 何を実装する あなたのP-セットで、どこに 別々のチェーンを持っていた。 だからあなたのバケットのそれぞれ、 あなたの配列要素のそれぞれ、 実際に1ワードを保持するだけでなく 単語のリストへのポインタを保持します。 あなたが持っていた場合にはように、 あなたのハッシュテーブル内のバナナ あなたが突然たかった ベリー、何の問題を追加します。 終了間際に、または上にベリーを追加 あなたのリンクリストの先頭に、。 OK、素晴らしい。 ハッシュとの質問 テーブル私たちが行く前に? [00:23:58] 大丈夫。 木と試みます。 OK、これは別のオプションだった 辞書を実装するため。 あなたは、tryをした可能性があります。 だから、そのツリーの特別なものだ マルチレベルのハッシュテーブルのように動作します。 だから、絵が表示されます あなたはそのアレイを使用している 配列の束を指し 配列の束にそのポイント 配列の束にそのポイント。 そして、私たちはまさにそれを表示されます 今後、スライド上のようになります。 より一般的に、木 ちょうど任意のデータ構造である データは、である いくつかの階層に編成。 だから我々は我々が持って見たところ 理解のいくつかの並べ替え トップレベルの、次のレベル、 次のレベル、次のレベル。 だから、これはおそらく最も明確である いくつかの具体例である。 だからここに私たちの木です。 あなたはそれを見ることができます 特定のレベルがあります 私たちはそのルートノード、1で始まる。 そして、私たちは私たちのツリーを下ることができます。 [00:24:50] バイナリツリーがある ツリーの特定のタイプ。 そして、唯一の仕様 バイナリツリーのための 各ノードが有することである ほとんどの2葉で。 だから、どれかを見るつもりはない これらのノードの3つまたは​​4つを持っている または葉のいくつかの他の数。 その後さらにより具体的な 二分探索木である どこの左側にあるすべてのノード ノードは、小さい値を持っているとしている。 とのすべての値 右大きくなるだろう。 あなたは44を参照のであれば私たちのルートにあり、 左、11、22、および33 私たちのルートよりすべて小さい。 右側にすべてです 数字は66、55、及び77 bigger--。 そして、このプロパティが当てはまる ツリーのすべてのレベルで。 [00:25:37] だから我々がダウンしに行くとき まだ22、11、及び33、11 22よりも小さく、かつ 33は22よりも大きいです。 これは、簡単に検索することができ 私たちは数を探しているならなぜなら、 我々は正確に知っている ダウン従う枝。 だから、これはあなたに思い出させる必要があります バイナリサーチの少し。 うん? [00:25:56] 聴衆:だからあなたがいる バイナリを記述し、 あなたはそれが最も2葉に持って言った? HANNAH:MM-HM。 読者:それはより少ないを持ってもらえますか? HANNAH:うん。 だから、例えば、の言わせて 物事の偶数を持っていなかった そしてあなたはすべてのあなたを埋めることができませんでした 一つ持っている場合、葉、それは大丈夫です。 OK? 恐ろしい。 木上の任意の他の質問? OK。 [00:26:16] 戻る私たちの試みに私が話していたように について少し先に、 どのように我々はこれらのマルチレベルアレイを持っている。 この場合に、我々はトップから始まります。 そして、我々は、任意の単語を下に従うことができます。 それでは、我々が望んでいたとしましょう チューリングを探すために。 私たちは、Tで開始、それを下に従ってください Uを含む配列に、 そして、私たちまでそれを下に従ってください この小さなデルタに達している を教えてくれる、はい、あなたは言葉を見つけました。 トライでクリア? あそこに行くには、何? はい? 観客は:デルタの象徴していますか トライ内の空間を占有する必要がありますか? HANNAH:うん、そう、そうでない 必ずしもさえデルタにする必要があります。 しかし、我々はいくつかの方法が必要です 、申し訳ありませんが私たちのcomputer--を教えて ように、私たちは、TURは言葉ではないことを知っている。 レッツは、我々が持っていなかったと言うので、 デルタのこの概念は、この概念 おめでとう、あなたは言葉を見つけました、 それは、T-U-Rを通過し、反復するであろう その後素晴らしい、と言う、私はそれを見つけました! それは言葉でなければなりません。 しかし、それは本当にありません。 私たちは、全体のチューリングは言葉になりたい。 だから我々は、何かを持っている必要があります 言い終わり、おめでとうございます、 あなたが正当な単語を見つけた。 読者:あなたは次のように持っていたので、もし アルファベットで26文字、 あなたが実際に持っているだろう あなたのトライで27のキー? [00:27:24] HANNAH:恐ろしい、うん。 だから、実際に、私がいることを考える 次のスライドになります。 タダ! どこに持っている場合 あなたのトライ内のノード、あなたがしている 代わりに26の27の子供を持っているつもり。 それと何か質問? うん? 聴衆:なぜ試みはそう取るん 多くのスペース[聞こえない]あなたが行くように? なぜそれが[聞こえない]であると考えられている? HANNAH:確かに。 のは、戻りましょう。 質問は、なぜ 試みはとても大きいです ハッシュテーブルのようなものより。 これらのレベルのそれぞれについてそのように、 彼らはここで描かれていない場合であっても、 あなたはすべての26文字を持っている必要があります。 そして、あなたができない理由を 私は、チューリングのためにああ、と言うが、のような それらのいずれかを持っている必要はありません U.さてのレベルで同じ事、 突然場合は、追加したい T-Hのようだった何か、 あなたが持っている必要があると思います その単語を追加する機能。 だから、一つ一つの手紙のために、 あなたが必要があるとしている の束を持っている それをオフに来配列。 だから、それが取得したいかを見ることができます 本当に大きな、本当に速い。 その他の質問? 大丈夫。 うん? [00:28:29] 読者:ときにあるトライ ハッシュテーブルよりも速く? [00:28:33] HANNAH:試みです ハッシュテーブルよりも速く? だから、あなたが本当にしていた場合 悪いハッシュ関数。 それでは、私はのようだったとしましょう ここにあなたのハッシュ関数です。 どんなに何語 あなたは私を与える、私はいつもよ 配列のエントリ0でそれを置くつもり。 だから私たちはパッティングで終わる 一つの大きな長いリンクリスト内のすべて。 だから、ルックアップ時間は、最悪のかかるだろう nはそれが私たちのリストの最後にいた場合。 試してみると、私たちは反復処理する必要が 単語内の文字を通して。 だから我々は束を追加した場合でも、 私たちの試みに多くの言葉、 それはもはや私たちを取らないだろう 特定の単語を検索します。 [00:29:09] 私たちがしなければならないすべてはのために、ある 例えば、この場合、 のは、我々は、ズームを探しているとしましょう​​、 私達はちょうど反復処理しなければならない Z-O-O-M、4つの文字。 だから、ちょうどだ ワードズームの長さ。 それはどのように多くの問題ではありません より多くの言葉は、私たちは、この試みを置く。 我々は常にそれを得ることができます これらの4つのステップで。 恐ろしい。 はい? [00:29:32] 聴衆:だから[聞こえない] 右、配列のですか? [00:29:34] HANNAH:MM-HM。 読者:あなたがしている場合 [聞こえない]を探して、 あなたが通過しなければならない [聞こえない]を見つけるためにあなたの配列? HANNAH:確かに。 読者:それはより多くの時間を取らない? HANNAH:私はするつもりだ場合 私の配列が常にあると言う A、B、C、D、になるだろう E、F、G、何とか何とか何とか、 ので、私はいつもそれが知っている場合は、 同じ正確な順序で、 私はいつもそれが知っている場合は、 アルファベット順に、 私はちょうどOが数値であると言うことができます そうとそうアルファベットで。 ちょうどその場所にジャンプします。 で、覚えているので、 アレイは、私たちはアクセスすることができます 一定のその配列の任意の要素 私たちが探している場所を知っている場合の時間。 うん? [00:30:09] 聴衆:前に [聞こえない] 27をスライドさせ しかし最初の1のための26。 [00:30:14] HANNAH:申し訳ありません? [00:30:15] 観客は:初めてではない 1 0、ので、それは26ではないでしょうか? [00:30:18] HANNAH:私たちは27を言うとき確かに、そう、それはだ 私たちは26 0〜指数与えるつもり。 しかし、あなたが実際に数えた場合 これらのうち、それが27になるだろう。 良い質問。 他に何か? うん? [00:30:31] 聴衆:だから試みです ハッシュテーブルよりも遅い? [00:30:34] HANNAH:試行回数がに、あることを行っている 理論的に、より高速なハッシュテーブル しかし、より多くのメモリを取る。 うん? 読者:[聞こえない]? [00:30:45] HANNAH:私は申し訳ありませんが、私はあなたを聞いていない。 読者:[聞こえない]。 25 0はあなたに26を与えます。 [00:30:54] HANNAH:0から25までだろう 右、あなたに26を与える。 [00:30:56] 読者:そして、[聞こえない]。 HANNAH:右。 だから我々は指定している番号です 私たちの配列内のものの数。 私たちは27を持っているのであれば、それはだ 私たちを与えるつもり0 26を介して、これを与える この場合のために、私たちの部屋、、 私は、アポストロフィを含めていないよ。 だから我々は25を介して0を取得しているある アルファベットの最初の26文字、 またはアルファベットのすべての26文字。 そして、その最後の 事は、エントリ26で、ある チェックになるだろう マーク、またはデルタ。 他に何か? 恐ろしい。 私のスペースを失った。 クール、[OK]をクリックします。 [00:31:31] だから我々はすでにこの時に触れた。 しかし、大きなトレードオフ 試行とハッシュテーブル間の で、試行が提供するということです 理論、定数を検索 回数が、メモリの全体の多くを使用しています。 すべての権利、今は少し持っている より少ない複雑な構造、 そして我々は、Cで行われます、 私たちは右に沿って移動します。 [00:31:49] スタックだから、私たちはこれを見た 講義でどこに のようなものを持っている トレーどこのスタック あなたが置く最後の事 スタック上に起こっている あなたが離陸最初のものであると。 だから、本当にスタックを定義して何 最後の事はあなたが上に置くということです 第一であることを行っている あなたが離陸の事。 そして、私たちが使用する用語 私たちは何かを置くつもりなら、 我々はに何かを追加するつもりなら 私たちのスタックは、我々は押していることを呼び出します。 そして、私たちは何かを取る場合 オフ、我々はポッピングそれを呼び出す。 そして、我々はするつもりなら スタックを実装し、我々 を追跡することを確認する必要があります サイズと容量の両方。 要素の総数私達ができるので、 保持し、現在の要素数 私たちが保持されていること。 [00:32:27] そして、非常に同様に、私たちはキューを持っている。 そして、唯一の違い 代わりにスタックとのものであり、 我々は上に置く最後の事を言った 私たちは離陸最初のものです。 だから、キューと、 我々は入れ最初のもの であることを行っている 我々は最初の事取る。 だから、これはあなたがならのようなものです 実際にお店で並ぶ あなたが助けられている、 行の最初の人 しょうが最初の人でなければなりません。 だから、キューになります。 [00:32:52] だから我々はを追跡する必要があります サイズ、容量、そして私たちがしているので、頭 フロントからみんなを連れて行く 代わりに、背面のリスト。 その上で質問がありますか? あなたを悩ませている任意のCの質問? データ構造、その楽しいことのいずれか? すべての権利、涼しい。 だから私はアリソンににそれを引き渡すだろう いくつかのより多くのプログラミングに飛び込む。 [00:33:14] ALISON:ああ、我々が表示されます。 私たちは、私がここでどれだけ表示されます。 [OK]を、私は試してみて、飛ぶつもりだ このようなものを通して、みんな。 ハンナは非常に行きました すべての彼女の事で深さ。 私が与えることを試みるつもりだ あなた迅速な爆風の概要 私たちはすべてとデーヴィンに得ることができるように 楽しいJavaScriptとセキュリティの事 その実際に多分あなた についての詳細を聞きたい。 [00:33:33] OK、ハンナが言ったように、もし 何か質問があり、 私はあまりにも速く行くよ、私に知らせてください。 私は、必要に応じて質問にお答えします。 だから、開始するには、我々はで開始するつもりだ おそらく非常に最初のものの一つ あなたがウェブで学んだ プログラミング、パーミッション。 だから、chmodの、あなたたちはされてたはず すべてのウェブとこの時のマスター あなたがしたプログラミング 最近やって。 これは、基本的には、コマンドの それは、アクセス権を変更する またはアクセス許可 私達のファイル·システム·オブジェクトの。 もちろん、実際にへ あなたがいるなら、これらを参照してください。 これらを持つ任意の問題が発生した あなたの問題セットの間に、 あなたは、長いですのls -lを使用している可能性があります このようなのビューの種類を取得するために、 あなたが実際にすべて見る場所 ファイルのパーミッション。 [00:34:16] そして実際に、私たちは行くつもりです かなり迅速を通してちょうどかわいい ずっとこれらのそれぞれが何を意味するか。 だから我々は、右ここでdはている 単にディレクトリを表します。 明らかに、右ここに、私たちは、RWX見るもの 、読みやすい書き込み可能、​​および実行可能である。 これらは、ビットで表現することができ、 その私たちは次のページの中に取得します。 我々が見たので、それぞれのトライアド ここでは、そのように、それは3トライアドだ。 我々はRWX、R何もxとRを持っている 何がこの最初のファイル用のXません。 これは一般的な構造です。 [00:34:49] だから我々はいくつかのディレクトリを持っている。 我々は、いくつかのユーザグループを有する これらの権限を持つ。 これらの権限を持っているいくつかのグループ、 と権限を持っている世界。 あなたはトライアドとしてこれらを考えることができます。 あなたは、3ビットとしてこれらを考えることができます。 そこで、彼らは値を保持することができます どこでも0から最大 なぜ時々7に 我々はあなたがchmodコマンドを実行していた 代わりに何でもRWのchmodの600。 私たちはそこに例に取得します。 しかし、基本的に、あなたが考えることができます ちょうどRWXのいずれかとして、これらの、 またはあなたは、いくつかと考えることができます 数ここで、この最初の1 間の数を表す 0および7は、この第2の1 間の数を表す 0と7、および第1 [OK]を、0〜7の数を表します? [00:35:38] rは4ワットの値を有する 2の値を有し、xは なぜこれである、1の値を持っている ここにアクセス権が700にchmodことになる。 ここで、この場合に、それは我々が言うので 最初のビットはそこに反転されています。 だから我々は、読み取りのために4を持っている。 第二ビットはのために反転される 今は6を持っているので、2である、W。 第3ビットがオンに反転される 1はx、のために、私たちは7を得る。 そしてもちろん、私たちのグループ と私たちの世界は、それぞれ0で。 これはまた、ある chmodの700に相当する。 そして、私は間違いなくしようとするだろう それらの間のマッピングを理解する。 それが持っている場合、私はわからないんだけど 前クイズに出てくる、 しかし、それは次のようになります 私が尋ねるかもしれない質問。 [00:36:18] 少しだけでも行く さらにここでは、chmod、ここに 非常に一般的である chmodの呼び出しの構造。 だからもちろん、私たちはここにchmodしています。 これが呼ぶものの参照、 誰が私たちは、これらのアクセス許可を与えている または誰が我々はこれらを取っている 離れてからアクセス許可。 だから私たちはここにアクセス権を持っている、 私たちは、あなたが、プラスXます。chmod与えてくれたような 我々はすぐに表示されますように。 ただ、これらの特定を与える意味 すべての人への権限。 すべてにそれらを与える。 だから、非常によく、UプラスXを持つことができ またはgプラスXまたはOプラスxまたは複数 その。 最初の部分は常にあるように 参考文献になるだろう。 誰が私たちは、これらのアクセス許可を与えている、 または誰が私たちは離れてからそれらを取っている? [00:37:03] もう一つは演算子です。 だから、あなたたちは、ほとんどがプラスに対処してきた。 これはに権限を与える 誰でもあなたがそれらを与えている、 マイナスのに対して、論理的に、それらを削除します。 だから、あまりにもひどい何も。 そして、モードは、私たちが約話しものです 読み取り、書き込み、または実行すると。 だから、プラスxは実行ファイルを与えることを意味 すべての人への権限。 その後、もちろん、その上に 特定のファイルまたはディレクトリ。 OK? chmodコマンドとの良好なみんな? あまりにも悪くない? [00:37:37] [OK]を、あなたのいずれかがある、HTMLので、 MySpaceの時代to--十分に古い? 私は、私のセクションにこれを送信し そして文字通り半分人 私は夢中だったように私を見た。 そして、私は、みんな、のようだった 我々はその古いじゃない。 いい加減にして。 だから、ハイパーテキストマークアップ言語、 それは正直にあなたのためだけの方法だ ウェブ上で特定の物事を表示します。 だから、マークアップ言語です。 これは、スクリプト言語ではありません。 それにはロジックがありません。 これは、変更することです 何かが表示されている方法です。 [OK]を、ので、それが重要だ 区別が作る。 これは、マークアップ言語と考えられています、 しないスクリプト言語。 [00:38:12] そこでここでは、私たちのHTMLタグを持っている。 このスライドでは、おそらく、ほとんどのです あなたが精通している必要がありますもの と本当に快適である。 だから、明らかに、私たちは持っている 私たちのHTMLタグ、その でそのすべてを指定する これら二つの間でHTMLとなります。 私たちは、いくつかのリンクを持っている 明らかにあなたを与えるだろう 外部のウェブページへのリンク。 いくつかのタイトル、ここに私たちの頭の中。 そして、我々はと私たちの体を持っている ヘッダであるH1、 そう、それは素晴らしい作ってあげる 大胆かつ大きな。 そして、我々はいくつかを持っている 段落はp、。 あなたはおそらく知っている必要があります 物事に精通している あなたが画像を挿入する方法のように、ある そこに他のヘッダークラ​​ス? 私は間違いだろう DIVと快適。 したがって、これらのタグの大部分を持っている あなたが精通している必要がありますことを。 しかし、もちろん、中にすべてのものと同様に、 CS 50は、リストは網羅的ではない。 ですから、そのブラッシュアップを確認してください。 [00:39:08] CSS、CSSので、あなたのいずれかが見れば 2週間前からの私のセミナー、 本当にただの方法です あなたのWeb​​ページのスタイルを設定するには? [OK]を、私たちはいくつかのマークアップ言語を持っている。 テキストだけの面倒をHTML、 そしてそれはどこのページにある可能性があります。 しかし、CSSはそれはかなり作るものは本当にある。 あなたは、HTMLでこれらを持っている可能性が ファイルが、私たちは後で話しますように、 私はそれがかもしれないかなり確信している それは、次のスライドである 実際に一般的である、と 私たちは本当に奨励練習、 あなたが維持するためにそれらを分離したとき、私たち MVCとその全体のパラダイムについて話しています。 つまり、これが送り込ま本当にだ。 [00:39:42] だから、CSSはちょうどへの道である 物事はかなり見えるようにする。 ここでは物事のような ボディと#titleとの.info、 これらは、セレクタと何と呼ばれている 彼らは、彼らが特定の物事を選択されな​​い HTMLファイル内の とどのようなスタイルを適用、 何でもあなたが望むものの一種、 あなたのWeb​​の特定の要素に ページ。 だからここ、私たちは持っている 背景色と色 であることだとフォントファミリ 体内にあるものに適用される。 だから我々は、ここに戻ってそれを見ている場合 タイトルには適用されないだろう。 それだけで何にも適用される これらの身体のセレクタで、OK? [00:40:22] ここでタイトルで、これは 同じことになるだろう、 テキストの色 青のみ起こっているもの 内でどのような影響を与えるために タイトルセレクタ。 ここにも情報として、 テキストは、ピンクになります 右ここで何の情報、。 唯一のものになるよう このページでピンクになる 日付は、2014年11月17日(月曜日)です。 [OK]を、ので、CSSはちょうど方法です はいover--より多くの制御を持っている? [00:40:48] 読者:なぜあなたはありますか タイトルでハッシュを使用するには? [00:40:51] HANNAH:次のスライドは、約束します! 我々はそこに着くでしょう。 私たちは、ハッシュを使用する必要がなぜようにするためである。 だから、セレクタは、3つの主要取る 私たちは約君たちに話す形。 私は、多くを学びたいfyou そこにたくさんあり​​ます。 偉大なCSSのドキュメントがあります。 関係しているタグ名はありませ HTMLでちょうどあなたの通常のタグを持つ。 だから、H1、P、DIV、H2、 物事のこれらの種類。 そして、私たちはただであるとして、それらに名前を付けることができます。 我々がここで見るように 本体は、それが通常のタグだ。 だから我々はちょうどその時の体を置くことができます 我々のCSSファイルで話している。 [00:41:26] タイトルで、全体の理由は、我々 このハッシュは、我々は何があるである持っている IDと見なさ。 だから、IDは常にあるべき あなたのHTMLページ内で一意 あなたがいるときにそう それを参照するに、 あなたが唯一の参照していることを知っている 一つの特定のものに。 この場合には、ここで、私たちの持つ ここではH1、CS 50レビューセッション、 我々は、タイトルのIDを持っている。 だから、ちょうどそのを参照するために、 私たちのHTMLの部分は、我々はハッシュタイトルを行う。 ただ慣例により、IDが指定されている 彼らの前にハッシュを持つ。 同様に、我々が見る ここでの情報は、クラスです。 そして、そのようにCSSを使用したクラスです ドットクラスとして指定された またはそのクラスが何であれ点在しています。 だからここにこの場合には、情報です。 [00:42:10] だから私はそれを取り戻す。 これらの両方は次のようになります ここに私たちのCSSのピンク 彼らは両方の情報のクラスを持っているので。 そして、我々のCSSファイルで、我々は指定している 情報のクラスを持つことは何も ピンクでなければならない。 それは理にかなっていますか? はい? [00:42:27] 読者:あなたが作るとしたら ボディ白のすべて、 その後あなたが作ってみる その中に何か青、 それは問題を引き起こすだろうか? [00:42:34] HANNAH:だからCSSがある カスケードスタイルシート。 だから、何が向いている ボトムが優先されます。 だから、体に何かをする場合には、 そしてあなたはすべてを白に、 し、後であなたにタイトルを変更 または、本体内のテキストを変更し、 それはそれを上書きします。 に向けたので、何も ボトムが優先されます。 はい? [00:42:56] 聴衆:そして、IDは一意である、 しかしクラスは、より多くのことができますか? HANNAH:右。 だから、IDは一意である必要があり、そしてクラスができる あなたが好きなだけ多くのものを参照してください。 その他の質問? はい。 [00:43:09] 読者:[聞こえない]。 私はどう思ったんだけど それが違いになります。 HANNAH:ごめんなさい、 質問は何でしたか? 読者:小あります 「F」と大文字の "F." HANNAH:だから違い 小さな「F」と資本の間の「F」 違いを作るべきではありません。 だから、「f」は15いずれかの方法になります。 クール、何か? みんな良い、CSS? はい? [00:43:30] 聴衆:申し訳ありません。 あなたは、クラスとIDを持つことができますか? [00:43:35] HANNAH:はい、できます。 観光クラスとIDの両方を持つことができます。 そして、私は非常にお勧め 自分でこれらのテストを。 CSSあなただけのことで、最良の学びます 何か、非常に簡単なWebページ、 いくつかのCSSを策定し、ちょうど 彼らがどのように相互作用するか見て。 そして、あなたは非常に良いを得るでしょう、 それがどのように動作するための直感的な感覚。 [00:43:56] OK、CSSとの良好な皆? あなたはすべてするつもりだ 今、CSSを使って、美しいWebサイト。 ちょうどOK、ベストプラクティス、 心に留めておくべき事、物事 我々はドッキングなぜこのthat--です あなたのデザイナーやその他もろもろのために。 だから、すべてのHTMLタグを閉じます。 ですから、オープンボディを持っている場合、 近い体があるはずです。 あなたが開いている段落を持っている場合は、 近い段落があるはずです。 あなたのページが検証さを確認してください。 君たちは非常に精通している必要があります P-セット7からこのと CS 50金融と W3バリデータを持つ。 そして私は、前に言ったように 私たちの大きなパラダイムの1 CSSであなたのスタイルを分離されている HTMLでマークアップ、から。 その後、もちろん、我々は ここで、この偉大なXKCDダウン。 イェーイ、コミックリリーフ! [00:44:38] [OK]を、TCP / IP。 これらとHTTPの間に、 基本的に彼らは両方のプロトコルだ。 だから、あなただけの考えること これらのルールのセットとして どのように物事を支配すること インターネットを横切って移動する。 そのように送信制御 プロトコル、インターネットプロトコル、 確実にするだけの方法です。 それが起こっている場所、そのデータを取得 私たちがいるかどうかを知ること 我々はこれまで、データを逃している。 だから、あなたたちは戻って講義に思われる場合 デイビッドと前に数週間 どこに我々は、彼らは、4封筒を持っていた すべての4つのいずれかのように番号し、 4の2、4の3、の4 4、これはルールの単なるセットです。 私たちはしているときはいつでも、[OK]を、言った 複数のパケットを送信し、 私たちは数に行く それが何であるかの数でそれ とどのように多くの合計こと ユーザーが取得する必要があります。 [00:45:19] そして、これは単に誰を語っている 彼らかどうかデータを受信して​​いる 場合は、すべてのものかを得ている 何かが道に沿って失われてしまった。 そして、彼らは再びそれをお願いする必要があります。 これは本当にルールの単なるセットです。 つまり、[OK]を、それを考えることができる方法です? また、それは、ポートを指定する あなたたちは、私が講義中に知っているcan-- 彼らは、ポートのリスト全体を持っていた。 しかし、我々は今ここにそれらを持っていない。 [00:45:41] そのようにハイパーテキスト転送プロトコル 再び、それは別のプロトコルの、ある。 だから、ルールの別のセットです つまり、この場合には、支配する、 ハイパーテキストをどのように転送されます。 だから、単にブラウザを許可 Webサーバに話をする。 私たちがここで言ったように、それはだ 人間のハンドシェイクのような。 それは支配するだけの方法だ どのようにWebサーバがある お使いのブラウザと対話する予定。 そして、我々は例だけのカップルを持っている。 ここではいくつかの要求を持っている GETメソッドです。 私たちは、HTTP 1.1を、持っている 私達のためのプロトコルバージョン。 何され、その後、ホスト、 私たちは実際にアクセスしようとしている。 そして、あなたはここで見るように、我々 この200といくつかの応答を取得 私たちのHTTPレスポンスコードとしてOK。 私たちは、私が行くよ大きなリストを持っている 1秒間にプルアップする 君たちは精通している必要がありますことを。 そして、私たちは、このコンテンツタイプのテキスト/ HTMLを持っている これだけのデータのタイプが言う 我々はOK、サーバから受信している? このホストとこのコンテンツタイプ HTTPヘッダの一部である。 あなたはいくつかのように少しのように持つことができます 何の文脈のために必要な あなたが扱っている。 時には、たくさんのがあるでしょう あなたのサーバーからの情報。 おそらく彼らは、多くのことを要求している 利用者からの情報の。 それは、コンテキストに応じて変化する。 あなたは、CS 50調査を見ると、 その上で、より多くあります。 しかし、我々は得ることがたくさんある を通じて、私は行くよ 場合は、右先に行くために それはあなたたちとOKですか? クール。 つかまっている。 私は間違いなくそれを持っている ってof--全体のリスト! これは、なぜ私は知らない こっちにすべての方法。 私は、文字通り移動思った それ私がsitting--あった [00:47:15] デーヴィン:あなたはそれを教えたいですか? それとも、私がそれを教えたいですか? [00:47:17] 読者:私たちは考えていた ただで始まるためにそれらを示している。 私は、あなたがに行くことができ、意味 さらにそれらが、私 それは私ので、より多くの意味を成していたと思った 単にHTTPステータスについて話していた。 だからここに全体のリストがあります。 私は起こる何が起こっているかだと思います デーヴィンは、後でそれらに行くために起こっている。 しかし、全体のリストは、あります 味のプレビューが来ています。 [OK]を、私たちは、これが起こっているblow--するつもりだ 他にはないPHPの短期集中コースであると。 [00:47:41] だから、PHP、ハイパーテキストプリプロセッサ、 それは再帰的なバクロニムだ、 それが何か他のものを命名されたことを意味します。 そして彼らは、このようなものでした 本当に意味がありません。 そこで、彼らは単に名前it-- それは頭字語であり、 ので、彼らはちょうどそれPHPた ハイパーテキストプリプロセッサ、その ただ意味がありません。 楽しい物語。 それはプログラミング言語です。 私はあることを強調ようにできるだけ多く HTMLはプログラミング言語ではありません、 それはマークアップ言語、PHPの プログラミング言語である。 どのようにこれは知っている ロジックがあるため。 条件分岐があります。 私たちは、変数を持っている私たちのに対し、 HTMLでそれらのもののどれを持っていない。 [00:48:12] その後すべての権利、私たちはこの小さなを持っている PHPの味のようなものだ、ここで少し。 だから、基本、変数名 ドル記号で始まる。 それのような多くの人々。 私たちのお金を連想させる。 これは、すべての素晴らしいことだ。 我々は、すべてのPHPを望む。 だから我々は指定しないでください 変数の型はもう。 これは、実行時に決定される。 インタプリタは次のようになります、 ああ、私たちは、経由で実行します 文脈に応じて、 我々は、型のどのような種類が表示されます これらの変数は、持っている必要があります。 全く主な機能はありません。 観光だけで実行されます。 でインポートと君たちあなたの 最後のP-セット、あなたはこれを気づくでしょう。 主な機能は、実際にはありませんでした。 あなただけの書いたもの あなたが起こるしたかった。 そして、それはちょうど一種の起こった。 だから、あなたのためのPHPの。 [00:48:56] 配列は非常に似ています。 我々はまだこのブラケットを持っている。 ここで、我々はいくつかの変数を持っている 編曲と呼ばれ、同等の 私たちは通常のを持っているto-- ブラケット表記法。 そして、我々はいくつかのキー値を持っている。 と大きな違い CとPHPの配列の間で 私たちはこのassociate--を持つことができるということです 私たちは、キーに値を関連付けることができます。 だからではなく、単に持つことの インデックスされる配列 数または位置によって 配列内のその要素の、 私たちは実際にキーに関連付けることができます。 我々が言うことができる場合は、[OK]を、私は好き 値は、果物と関連している。 そして多分、我々は果物はバナナに行ってきましたしている。 だから、私たちにバナナを返すと思います。 [00:49:41] しかし、基本的に、ほとんどの このことについて強力なもの あなたたちは覚えていることである どこ基本的に講義からデモ 書き直しPHPのスペルチェック、およびそれ was--ルックアップは本当にただ好きだった、 このキーは存在していますか? それはそれのパワーの本当に親切です。 あなたは、反復処理する必要はありません お使いのアレイを通して。 あなたが知っている必要はありません 何スペースそれがでます。 それは、最後または先頭にある可能性があります。 限り、あなたは鍵を知っているように その、値に関連付けられている、 PHPはちょうどその値を吐くことができます 右の[OK]を、あなたにバックアウト? [00:50:09] そして、私たちはまた、単に 持っているだけで、私たちのため キーと値のペアを持つことができます あなたがする必要があるという意味ではありません。 また、単に作成することができます ここのような通常の配列、 それはだ下部にある ただ一つ、二つ、三つ、四つ。 これらは私たちの値です。 実際には、それらのキーはインデックスである。 そのようにいずれかのキーがゼロになる。 2のキーは1になります。 ようになど、しない限り あなたが明示的にキーを割り当て、 あなたがいることを前提としなかった 値は、ちょうど彼らのインデックスである。 それはすべての人に意味があるか? いいえ質問ません? 恐ろしい。 [00:50:38] OK、foreachのは、への道である あなたの配列を反復処理。 だから我々は、ここで何かを持っている ただ一般的な構造。 のだから、foreachの、名前 何としての配列、 あなたはそれぞれのを呼び出したい あなたの配列内の要素、 私たちはで何かを行うことができます その要素またはその値を持つ。 だから我々はここに例があります。 私たちは、連想を持っている これら二つのエントリを持つ配列 バーにはfooに関連付けられている とバズと関連しているqux。 だから、キーがfooとバズです。 値は、バーとquxです。 だから、foreachの、私たちは私たちの配列を持っている ここでは、キーと値のペアとして。 これは、アクセスに私たちを可能にする キーと値の両方。 たぶん、あなたはちょうど欲しい 値が、その場合 あなただけのARRのように行うことができます $値、次にあなたのような ただ値にアクセスしている あなたはを通して反復処理として。 しかし、おそらく、いくつかのための 理由は、あなたが鍵を望む、 私が選んだ理由である この例では、代わりに。 だから、実際に操作することができます この場合のキーと値。 OK? 質問? [00:51:41] 読者:あなたがしたい場合 ただ、キーを操作するだろう あなたがしなければならないforeach-- [00:51:45] ALISON:右。 だから、あなたがしたい場合 ただキーを操作する、 あなたはまだこれを必要とするだろう 構文だけであれば理由 何かのように編曲を有し、 一つのことのように、それはだ あなたが欲しい仮定するつもり 値ではなく、キー。 だから、あなたは今までちょうど同じように持っている場合 としてARR、多分これは、$の要素のようなものです それはあなたが求めていることを前提となるだろう 各点での値だけのために。 あなたが明示的にしたい場合 キーで何かをする、 あなたはするつもりはない場合でも、 値が何でもする、 あなたはこの構造を必要とする 私たちはここに持っていること どこにあなたが明示的に求めている キーと値の両方のために。 素晴らしい質問です。 他に何か? クール。 [00:52:27] すべての権利、PHPとHTML。 ああ、私たちは再びP-セット7にしている。 だから、これは少しおなじみのはずです。 だから、これはいくつかの簡単なHTMLフォームです それはハローのいくつかの入力名を持っています。 そして、我々は我々が得るの私達の方法を持っているを参照してください。 そして、私たちは私たちのP-セットから覚えていれば、 このフォームが送信されると、 それは持っての$ _GETと呼ばれる配列を送る これらの入力または変数の全てから あるべき形 私たちのPHPで操作する。 この場合、ユーザがそのように 自分の名前に入れるでしょう。 彼らはそれを提出する。 そして、私たちはここでいくつかの配列を取得することを参照してください。 私たちは、GET配列を持っている。 そして、我々は名前にアクセスしている。 [00:53:11] だからOK、私に与える、と言う 名前に関連付けられている値、 ここで重要なものの名前。 そして、それは何に直接マップ 私たちは入力名があると述べた。 だから、これはあなたに何の鍵を与えていた ここにあなたの配列であることを行っている。 それはすべての人に意味があるか? はい? [00:53:32] 読者:名前がで参照するGETん [聞こえない]で紫色のラインに? [00:53:36] ALISON:それはここにこれを参照する。 右ここしたがって、この分野、 それがここでこの名前を参照します。 だから、これは命名されている可能性が 電話番号、または何のような。 この名前は、実際には、何を言う あなたはこのフィールドを呼び出している? どのようにしようとしている このフィールドを参照してください? 私たちがしている、好きで、この名前は実際にある このフィールドは名前と呼ばれていると言って。 それは我々がそれにアクセスするつもりだ方法です。 [00:53:59] 聴衆:だからそれは、のようにある 入力名は、ボブに等しく、and-- [00:54:02] ALISON:右、その後 ダウンそこにボブになるだろう。 その通り。 みんなクール? すべての権利は​​、そのように、POST対GET これらは、主に2つの方法があります 我々は、HTTPリクエストにデータを渡すこと。 君たちは見ている必要があります うまくいけば、これらの両方。 GETとだから、情報 URLを通過する。 だから、あなたは今までのGoogleを行う場合 検索し、YouTubeの、あなたはよ おそらくいくつかの疑問符に気づく。 そして、すべての単語 あなたはそこに置くこと。 そして、POSTはデータを渡し HTTPメッセージボディに。 だから、GETとは異なり、あなたは一種の考える データは、ユーザから隠されていること。 しかし、実際に何が 理解することが重要 これはまだあるということです GETと同じくらい安全でない。 私が使用したいアナロジーは、次の場合です。 あなたは、あなたの銀行口座番号を持っている あなたがの外側にそれを書く エンベロープは、それはかなり危険だ。 あなたは一枚の上に書き込みした場合 紙と封筒の中に入れて、 それはまだので、本当に危険なだ あなたがしなければならないすべてはそれを開いている と実際の内容を見て それを参照するには、メッセージの。 だから、これは「隠された」であるとするような人 それが安全だと思うが、それは本当にありません。 そして、私は確信しているデーヴィン意志 多分、そのより入る。 しかし、それは重要だ 区別は作る と理解することが本当に良い何か。 [00:55:15] [OK]を、SQL、構造化照会言語。 すべてのものその 私たちはそのように最近見てきました! だから、それは基本的には設計されています、 明らかに、データを管理する。 君たちはで多くの経験を持っていた PHP myadminというとあなたのテーブルでこの。 そして、4つの共通のクエリがあります 私たちはあなたたちが知りたいこと。 だから、更新、挿入があると、 選択し、削除します。 だから、あなたが本当によく、それらを知っていることを確認してください。 私たちは行くつもりだ それらを介して本当に速い。 [00:55:40] だから何として、本当に、更新 あなたは、それがないと思うかもしれない それだけで、データベース内のデータを更新します。 だから我々はここでいくつかの例がある。 これは一般的である 更新クエリの構造。 だから我々はテーブルを更新 我々は話をしていること。 そして、私たちは、特定の設定したい 値が、特定の列 特定の値に等しい。 だから、これは単に変化、テーブルを更新 この場合はすべての行の値。 だからここにこの1ダウン、実際の内 例、申し訳ございませinsert--持っている。 そのスライドが進め 私はそれを実現せず。 [00:56:17] したがって、このアップデートの表には、同じCOL1セット 家が等しいval1のために "クーリエを。」 これは何1が行うのはある それだけで、それだけで、変更する 特定の場所でこれらの値を更新します。 したがって、この最初のものでは、これらを変更する あなたのテーブル内のすべての値は、 OK? それは、これを変更するために起こっている すべての単一のエントリの列、 すべての単一の行のために。 しかし、この場合には、あなたが可能性 修飾子と考える。 だから、だけ変更するつもりだ それは非常に特定の場所で。 だから、P-セット7で、ときに 多分現金の額を更新した あなたのユーザーが持っていたことを、あなたはおそらく持っていた いくつかのIDが正しいセッションIDに等しい? [00:56:53] あなたはしたくなかったので、 現金の額を変更する 誰がすべての人のために あなたのウェブサイトを使用していました。 あなたは1のためにそれを変更したい 特定の人、その人がいる 誰でも、その時点でそれを使用した。 右? [OK]を、ので、インサートを挿入 テーブルにある値。 これは、あなたがいる時のようなものです ブランドの新しいユーザーを作成する。 ここで一般的な構造 どんなテーブルに挿入されている 我々は話をしている。 値は、その値であること 私たちは実際に挿入したい。 [OK]を、私たちはここを参照してくださいように、我々 表に挿入している。 これはと特定の列である 彼らの対応の値。 だから、これは、インサートは言う を含む新しい行 値val1とval2の下 これらの特定の列。 [00:57:33] だから、多分あなたは唯一埋めるしたい この行の半分の事から。 つまり、この部分はここにあなたが行うことができますものです。 それは実際にあなたをすることができます どの部分を決定します。 はい? [00:57:44] 聴衆:CANあなただけ[聞こえない] 行のセル[聞こえない]? [00:57:52] ALISON:あなただけで埋める場合 あなたの行の特定の部分、 それらの細胞の残りはちょうど空です。 限り、あなたはそれらを許可するように 空であって、それは問題ではありません。 あなたがそれらにアクセスしようとすると、それはだ いくつかの空の要素を返すつもり。 しかし、それは知っておくことが重要です 特定のテーブルのその、 彼らはNULLが許可されなければならない。 あなたは、にしている可能性があります あなたのP-セット中に問題 我々はすべてをさせなかったため、 あなたの値はnullにすること。 しかし、あなたは指定することができます あなたのテーブルの値(オプション)。 [00:58:26] [OK]を選択し、これはある 取得するだけの方法 表から特定のデータで あなたが望むいくつかの識別子。 テーブルどこからそのように選択して星 colは何かちょうど手段に等しく、 私に関連するすべてのデータを与える どこでこの特定の列はtrueです。 この場合には星は意志 OK、あなたに行全体を返す? [00:58:49] そして、この場合には、よりスターを選択 表には、ちょうどあなたにテーブル全体を提供します。 そして、ただ、明らかにそれを削除 テーブルから行を削除します。 だから、テーブルから削除し、 どんなテーブルたちがしている 参照、いくつかの特定 識別子または一部条件が真である。 はい? [00:59:07] 聴衆:質問。 なぜあなたは二重使用している 引用符、あなたかどうか 二重引用符またはシングルを行う 引用符は、それが違いを生むのですか? [00:59:13] ALISON:二重引用符または単一引用符 SQLの違いがありません。 私は別の質問を見たと思った。 はい? [00:59:20] 読者:それは何には影響しません クエリから脱出しされます? [00:59:25] ALISON:ロブ? [00:59:27] ROB:あなたは何をすることによって意味ですか 問合せから脱出し? [00:59:31] 読者:誰かが持っている場合 フォーム内の​​単一のクエリof-- [00:59:36] ROB:誰かがしたなら 単一引用符を入れて、 その後限り、あなたは消毒しているように あなたの入力は、それは問題ではありません。 しかし、あなたはシングルを使用している場合 引用、あなたは間違っている あなたの入力をエスケープ、 [はい、彼らが必要とする 打破するために、単一引用符を入れて あなたのコード。あなたは二重引用符を使用する場合は、 彼らは二重を置く必要がある あなたのコードを破るに​​引用。 しかし、限り、あなたは物事を逃れるように 正しく、それは問題ではありません。 それだけで翻訳することになるだろう とにかく正しいシンボルに。 [00:59:59] 読者:エスケープは何を意味するのでしょうか? ALISON:まあ、ような 消毒と脱出。 我々が持っている試験、偉大なXKCD 漫画あなたが持っているどこにプルアップすることを、 OH - ROB:それは最後のスライドです。 ALISON:それは本当に、最後のスライドですか? 何てことだ。 そこに我々は完璧な、行く。 [OK]を、ので、基本的には、注入することができます このSQLクエリに何か どこでそれがあなたを破る コー​​ド、またはダビデが示したように クラスでは、我々はいくつかのシングルを持っている場合 引用1は1に等しく、我々のコードであれば、 私たちは、直接であることをコピーして、 我々は、終了の単一引用があり、 何が起こるかは我々が得るです いくつかの表現その trueと評価されたことでしょう 誰かが私達のデータベースを入力してみましょう その我々のデータを取得する 彼らが取得する必要はありません。 だから、入力をサニタイズ 念行うことを意味 我々はこれらをエスケープしていること 文字とそれらを指定する 文字としないものとして それは許容されるべきである 文字通りに解釈する 私たちのSQLステートメントとして。 [01:01:04] だから我々が言った大きなものは、 君たちは使用すべきであることを HTMLの特殊文字があったが、 その何かである あなたが見てみたいかもしれないこと。 [OK]を、削除してください。 データ型は、これは、すべてのオンラインになります。 我々は左の15分を持っているので、私は今 ちょうどこの経由行くつもり。 PHPとSQL、基本的にはこれがある ちょうど私達は、クエリ機能を持っていたこと から守る助けた これらの悪意のある攻撃。 ですから、使用するとき クエリー、我々は確認した。 物事が消毒されたことやその他もろもろ。 [01:01:36] MVCは、単に設計パラダイムである そう、モデル、ビュー、コントローラ。 それは、物事を維持するだけの方法だ 素晴らしく、同じように分割 我々は因子傾向があること 関数に出コード。 これは単なるウェブデザインのフレームワークです それはあなたが同じことを行うことができます。 私はこれをスキップするつもりです。 [01:01:54] これは、私が何かである スーパー快適になります。 それは、そこに偉大な小さなテーブルです。 それはあなたの機能を提供します モデルの例。 私はちょうど私ので、これを通じてつもりだ 本当にデーヴィンが話すことができるようにしたい。 ご質問があれば、 お気軽にどうぞ。 私は後にここにいるよ。 ちょうど私に話を来る。 このことを、我々は、HTTPのステータスを持っている。 そしてデーヴィンのは爆破するぞ 15分でこの貫通。 これは素晴らしいことになるだろう。 [01:02:17] デーヴィン:OK。 ええと、あなたのマイク? うん。 ごめんなさい。 ALISON:調製することへの道。 デーヴィン:いいえ、私は準備ができています。 準備できました。 それではこれをやってみましょう。 それは準備ができている。 OK。 ごめんなさい。 私は自分自身にコーヒーをこぼした。 私はもっ​​とだかどうかは知りません 私は愚かに見えるの不調、 または私はもうコーヒーを持っていないこと。 とにかく、単に迅速な発表 あなたたちは持っているシートについて。 だから、あなたたちは持っている。このシートではありません クイズに何の公式。 これはクイズに何の公式です。 また、ウェブサイト上で、私たちは言う あなたは、[OK]を、これはクイズになります。 少しチートシート中のSO あなたは、公式ではない持っている。 そして、それに間違いがあります。 だから、最高のはただやみくもにそれを使用しない。 そんなわけで、それはそれだ。 それでは、この実際に素早く入るましょう。 [01:03:05] そのため、HTTPのステータス。 ときに何が起こる ウェブサイトは、すべてが大丈夫です。 すべての[OK]をクリックします。 すべてはに戻って来る あなたあなたはそれがしたい方法です。 あなたは、200 OKを得る。 301は、どこに我々は301の前にあることを見たことがありますか? 何次第です、待つのか? ごめんなさい。 私たちは、セキュリティの間、私は錫の講義を見ました。 だから、セキュリティの間に、ダビデがで入力した場合ので、 httpとその後cs50.netに行くことを試み、 あなたは301を移動見ることになるだろう。 なぜ? それはリダイレクトに起こっているので 私たちのHTTPSに自動的に。 [01:03:35] だから、301はそれがだ、移動 基本的にリダイレクション。 そして、あなたはこのようにそれについて考えることができます。 2代で始めの状態になると それらはすべて問題ない、[OK]を、のようなものです。 開始の状態になる 3と、それらをリダイレクトある。 4で始まるステータス、その手段 クライアントのエラーのいくつかの種類があります。 5で始まるステータス、 つまり、サーバーエラーのいくつかの種類です。 だから、一種の別れる そのような状況。 だから、304は修正されたので、あなたの中にいないではない server.cのパラセット、それでは、あなたを言わせて ロードさcat.html。 すべてが戻ってくる、 あなたは、[OK]を、素晴らしい200Sを得る。 [01:04:03] のは、あなたがそれをリフレッシュしましょう​​。 まあ、その内側 cat.htmlは、あなたがJPEGを持っている。 まあ、それはJPEGではありません 再ロードを取得するつもり。 あなたは別のものを投稿するつもりはない サーバに要求をGET、 その後、すべてその情報を取り戻す。 それはちょうど、そのイメージがあるbe--になるだろう あなたのマシンにキャッシュされようとして。 そして、その結果、画像は304になります。 だから、変更されていないです。 あなたがして閉じた場合は、明確な クッキーは、[最新の情報に更新 そしてそのページをロードしよう 再び、あなたは200Sを見に行っている。 あなたは304を見するつもりはない。 [01:04:28] 400、不正な要求、実際の あなたの場合のように、迅速な 送信するつもりだった サーバーへのJSONオブジェクト そして、あなたのJSONオブジェクトは、正しくありませんでした あなたはそのようなものが表示されます。 403は、禁じられた。 いつ、禁止を参照してくださいでしょうか? おそらく、おそらく? 聴衆ます。chmod。 デーヴィンます。chmod、うん。 だから、設定していない 正しくパーミッション。 404は、見つかりません。 それはそこだけではありません。 ですから、間違ったURLに入力した場合。 500、内部サーバーエラー、サーバー おそらく正しく設定されていませんでした。 あなたの端にあるものではありませんが、 サーバー側で何か。 そして、503? 多くの人が見ました 最後のP-セットで503s。 それはいつ起こるでしょうか? 私はささやきを聞いた。 [01:05:05] 読者:ときにグーグル あなたはロボットだことを決定。 デーヴィン:うん、Googleが決定 あなたが503sを取得し、ロボットだ。 だから、過負荷だ。 あなたは、サーバーから要求された場合 あまりにも多く、それは通常、一時的だ。 そして、あなたのほとんどはそれに気づいた。 だから、503を見た。 あなたは少しを取ったかもしれない 休憩、その後503sは、去っていきました すべてが大丈夫だった。 [01:05:20] GABE:リアル素早く、君たちが入手できますか おそらく、この最後の問題セットで500? はい? [01:05:27] 聴衆:通常の場合 サーバーは、見当違いのファイルを持っています または[聞こえない]彼らの マシン[聞こえない]。 [01:05:34] GABE:だから、コンフィギュレーション可能性があります あなたのサーバー上のPHPの問題。 しかし、それはちょうど何かかもしれない あなたの忘れてしまったセミコロンのような。 あなたがPHPを入力している場合は、 いくつかの不正な構文 あなたにそのような何かを得るかもしれない。 OK? [01:05:46] デーヴィン:クール。 あなたは私だけのAJAXまでやりたいですか? [01:05:51] GABE:[聞こえない]。 デーヴィン:OK。 だから、DOMは何ですか? DOMは何の略ですか? [01:05:55] 読者:ドキュメントオブジェクトモデル。 デーヴィン:ニース。 そして、なぜ我々はそれを好きですか? 恐ろしい。 右、それだけでアクセスすることができますので、 HTMLは、非常に迅速に私たちのページにアクセスします。 なぜ? 私たちが治療しているので私たちの ページ、私たちのHTMLタグを処理し、 すべてを処理する 彼らはオブジェクトだかのように。 彼らがいるような、我々は彼らを治療している場合 オブジェクトは、我々は何ができるのでしょうか? まあ、我々はそれらに関数を呼び出すことができます。 そして、これはなぜ重要なのですか? さて、私たちは使用するつもりだので、 私たちのHTMLを更新するJavaScriptは、 これらのオブジェクトを更新します。 我々はオブジェクトのように扱うのであれば、 我々はその後、それらに関数を呼び出すことができます。 私はこの少し入るつもりだ 私はJavaScriptに行くときより、 しかし、あなたはすべてのように見てきた のdocument.getElementById。 だから、ドキュメントはあなたです 要素は、IDによって要素を取得、 だから、見てするつもりだ HTMLタグ内にあるいくつかのIDの。 そして、あなたが行うことができます それに何か他のもの。 例えば、document.bodyのような、 あなたは、子を追加することができます。 だから、ドキュメントを見つけるつもりだ。 あなたが文書を持っている。 あなたは身体を見つけるつもりだ。 あなたが遺体を発見した。 そして、あなたはするつもりだ その上にいくつかの関数を呼び出す。 だから、子供を追加し、あなたが追加することができます あなたの体の内側の端の上にいくつかのHTML。 そこで、基本的に、あなただけだ オブジェクトのようにそれを処理する。 あなたは、HTMLの治療している オブジェクトのようなタグ。 そして、それはそれは非常に簡単になります そしてそれらを介して移動するための迅速な。 しかし、それはまたあなたを可能にする それらに関数を呼び出す だから、操作することができます と要素を変更。 [01:07:04] GABE:この考えると、なぜそのようなJavaScriptがある すてきな言語は、HTMLと対話するには? 人々が選択されたときのオッズであり、 ブラウザの言語、 クライアント側のため、 JavaScriptは、本当にいいです それは、オブジェクトを扱うには本当に良いことだ。 およびオブジェクトは一種のようなものです HTMLで表示されるオブジェクト、 そのためには、JavaScriptのために非常に簡単です ハンドリングのようなものをすることができません。 デーヴィン:ニース。 だからここだけの例です。 だから私は、昨年のクイズで考える または多分2年前、我々 ツリーを作成することを求めた。 だから、これはあなたがしたい正確に何である。 だから、文書から始める。 それから、あなたは基本的に 単にタグを見てください。 ですから、私たちを見れば HTMLタグで始まります。 そして、あなたはどのようにについての手がかりを得る インデントに基づいてこれを行う。 枝の、ヘッドの種類オフ。 頭の中では、我々は持っている タイトルのために別のタグ。 それでは、我々はタイトルタグを持っている。 そして、その内側に、我々はいくつかの文字列を持っている。 そして、私たちは表現する サークル内の文字列。 そして、すべてのタグは正方形である。 [01:07:54] そして、あなたが見れば、我々の場合 木と考える、 とのは、HTMLがあるとしましょう 親、頭と体 兄弟であることを行っている。 彼らは両方のことになるだろう その親の子。 だから、彼らはだから 両方の兄弟、彼らがしている 種類の隣にあることを行って 我々のツリーモデルで互いに。 そして、あなたは基本的に まったく同じことを行う。 だから難しいが、我々は尋ねていない クイズに前にこのような質問。 GABE:誰でもしていますか これまでの質問があります? それは良いですか? デーヴィン:クール。 JavaScriptは、[OK]を、良いもの。 だから、JavaScriptは、JavaScriptは何ですか? さて、JavaScriptはそれはだis-- 複雑であるが、これら ハイライトの一部です あなたが心に留めておくべきこと。 まず、緩く型付けだ。 どういう意味ですか? だから、PHPはアップするものだ、うんwas--? [01:08:35] 読者:あなたが明示的にする必要はありません 状態変数のどのタイプそれがある。 デーヴィン:パーフェクト。 そこで彼は、あなたが持っていないと述べ 明示的に変数の型を述べる。 それはまさにそうです。 私がint持っていたのであればC言語で、私は、50に等しい その後、PHPで、それだけでこのようなものだ、$ I、 50に等しい。 次にJavaScriptで、 呼び出しは何でしょう? ヴァール、右? それは私が50に等しいVARのようになると思います。 しかし、あなたがする必要はありません のように、[OK]を、これはintです。 OK、これは文字列です。 それをする必要はありません。 それはインタプリタ言語です。 だから、何を意味するのでしょうか? [01:09:04] 読者:コンパイルされていません。 [01:09:06] デーヴィン:何を意味してコンパイルしないのですか? うん? [01:09:11] 読者:あなたが持っていない コー​​ドを再構築する のためのそれを準備するために それを実行するコンピュータ。 それは、ちょうどの時に取ってきて 実行とコンピュータ[聞こえない]。 デーヴィン:うん、そう、それがために起こっている インタプリタを通過する。 しかし、あなたは正確に正しいです。 だから、行くことはありませんしている 右、それをコンパイルするには? あなたをしていたときに PHPとJavaScriptコード、 あなたは、コンパイルと呼ばれることはありません。 あなたは次のように呼び出されることはありません 作るか、またはそのような何か。 それは解釈だからだ。 だから、ブラウザを通過するたびに、 それはインタプリタを通過します。 そして、それはそれを解釈するだろう ちょうどリアルタイムですぐにあなたのために。 だから、いくつかの利点と欠点は何ですか インタプリタ言語を有することに とコンパイル言語を持つ? だから、最大何、ええcompiling--? [01:09:50] 読者:解釈は遅くなります。 デーヴィン:どのような意味では? [01:09:57] 読者:あなたの後 コンパイル、あなたが持っていない 実行するために余分な手順を実行する それ、この[聞こえない]のに対して。 [01:10:04] デーヴィン:右、完璧。 だから、ある言ったこと 基本的にコンパイルすること、 コンパイル時に、あなたが持っている 先行投資の多くは、右? あなたはそれをコンパイルするつもりだ。 しかし、あなたはそれをコンパイルした後、 コンパイラは、それを最適化するために起こっている。 これは、高速になるだろう。 それは基本的に起こっている それができるように高速である。 通訳を使用すると、決して その初期費用を持っています。 むしろ、それはわずかに遅いことになるだろう あなたがそれを解釈する一つ一つの時間。 そして、あなたがする必要があるとしている それを一つ一つの時間を解釈する。 だからではなく、このを持っていることの 今あなたがしている1時間コスト、 それを解釈する必要があるとして 毎回ページがレンダリングされます。 [01:10:29] だから、通訳が原因良いです あなたはそれをコンパイルする必要はありません、 しかし、彼らはそのすべての悪いね 時間ページが読み込まれる、それはだ する必要があるとして このJavaScriptを解釈する。 そして、それは少し遅くなるために起こっている あなたはそれをコンパイルした場合よりも。 あなたは、ああcommunicate--待つようにします。 操作するために使用 内容と外観。 私達はちょうどそれについて話しました。 これは、DOMを使用しています。 AJAX、我々は入るだろう 少しでAJAX。 その後、それはクライアント側だ。 だから、PHPはサーバー側である。 JavaScriptは、クライアント側である。 それに正のは何ですか? それはそれを言う。 それは右、高速です? それは高速ですto--あなたが持っていないため。 あなたが通信する必要はありません いくつかの他のデバイスと。 あなただけにしている場合は、あなたの クライアント、あなたは決してならない 行かなければならないだろうと サーバー上にあるものを見る その後折り返し報告 またはそのような何か。 そのように、クライアント側での傾向 少し速くなり。 [01:11:15] GABE:うん、これ PHPはある意味ではありません JavaScriptのより速い などの何でも。 彼らは同じで種類の実行 スピード彼らは両方のだから インタプリタ言語。 遅い事 ここで要求がある。 だから、実際に行っている ブラジルの上のすべての道 いくつかの情報を取得する それはそこに住んでいる。 しかし、PHPとJavaScriptは、彼ら 種類の同じ速度で実行されます。 それはその一つですではありません 他よりも高速。 これは、ここにも、トリックの質問。 だから、JavaScriptはなることはない 真または偽のマシンコード、? [01:11:47] 読者:偽。 GABE:偽。 それは、マシンになる必要があります コー​​ドマシンコードであるからである 唯一のことは、マシンが理解しています。 それがコンパイルされていないにもかかわらず、 それでもマシンコードになる インタプリタはただであるため、 行ずつ行くプログラム とにそのラインを変換 何か、コンピュータが理解しています。 OK? クール。 [01:12:08] デーヴィン:ここだけの非常に基本的なものです Hello WorldのJavaScriptのプログラム。 だから私はあなたがこれを見てきたif--知りません。 しかし、あなたはちょうどここにHTMLを持っている。 そして、代わりに、実際に入れて スクリプトタグ内のJavaScript、 だから、普通に頭の中でそれを置くところ。 あなたは、スクリプトタグを持っている。 あなたがそこにドロップします。 私たちはここでやったすべてが、我々はin--リンクしている 私たちは、JavaScriptファイルにリンクされてきた このような。 そして、あなたはすべての権利、これをやった? だから、jQueryを使用していた時と 最後のP-セットでunderscore.js、 あなたは、コードの最大のトンを持っていない あなたのスクリプトタグ、あなたの頭の中で最大。 あなたはそれを行うのではなく、可能性 あなただけでそれをリンクしている。 そして、あなたはそれをリンクしている ちょうどあなたがCSSで行うが好き。 だから、ただそれが簡単そう読むことになる あなたのコードでは、千行と同じように長くはありません 機能するのトンと あなたが使用していない可能性があります。 [01:12:52] その代わりに、あなただけでそれをリンクします。 それを区画する。 これは、いくつかのヘッダファイルを書くようなものだ、と その後C.でそのヘッダファイルを含む ちょうどこのように考えて。 だから、これは何をするのでしょうか? まあ、これは実行しようとしている。 それは警告するようになるだろう。 だから、少し取得するつもりだ と呼ばれるハローワールドをポップアップ。 簡単な質問、ちょうど健全性チェック、 だから、身体にここを参照してください ここではボディ、HTMLを言う。 何が最初に来る? 私はここで身体、HTMLを見ています、 または私は最初の警告を見ていますか? [01:13:19] 読者:警告。 [01:13:20] デーヴィン:右。 彼は警告を述べています。 なぜ? [01:13:22] 読者:あなたのため 上から下に移動します。 [01:13:24] デーヴィン:はい。 パーフェクト。 そこで彼は、あなたが上からに行く、と言う 絶対に正しいの底、。 あなたは上から下に行くつもりだ。 とJavaScript、jQueryの中で、あなたが持っている オンロードのようなものだ機能、または準備ができて、 それはOK、まで待って、と言う このHTMLのすべてがロードされています。 そして、JavaScriptを呼び出します。 私たちはここにそれを持っていないため、 起こるだろう非常に最初のもの それは上から下に行くために起こっているされている。 それは、そのJSを打つために起こっている 呼び出し、それは警告するために起こっている。 その後[OK]をクリックする、 そのアラートが表示されなくなります。 その後、表示するために起こっている あなたここにボディHTML。 ニース。 [01:13:54] [OK]を、ので、ちょうど実際に素早く、書き込み JavaScriptでスーパー速い。 宣言するためには、 変数、VAR名。 だから、C言語で、あなたが持っている、int型のIを持っている それはタイプの種類を宣言する。 PHP、$。 JavaScriptは、VAR。 我々はこのことについて話しました。 すべての権利、行きましょう。 [01:14:11] ループ、同じこと。 同じこと。 そのように関数宣言、 ちょうどあなたが、Cで見てきたような 別の唯一の事はときにあり あなたは他のプログラミング言語を取得、 あなたは51次の学期を取るときのような あなたがOCAMLでやっている、 あなたは無名関数を扱うことができます。 だから、あなたがここに持っているまさにそれだ。 ですから、合計で入れたい 合計値のいくつかの種類。 しかし、あなたはそれだけを一度やっているかもしれません。 だから、関数を呼び出すにしたくない 合計は、それを関数宣言を与える。 その代わりに、あなたはそれを使用する 無名関数として。 そして、あなたはこのロットを見てきました。 あなたはの例が表示されます このカップルのスライドで。 うん、我々が表示されます。 GABE:良い質問。 あなたが使用することをお勧めします場合には ここに無名関数? 基本的に、あなたが何かをしたいとき、 イベントのように、発生する。 それでマウスがある場合 クリックされた、例えば、 あなたは、いくつかの関数が呼び出されるようにしたい。 だから、イベントに渡す ハンドラは、イベントに渡す、 の種類、機能 あなたが呼ばれるようにしたい。 そして、あなたは何を渡している 最後に、等である その日の、ちょうどポインタへ 関数にその命令、。 だから、それはあなたが渡しているようではありません 同じように全体のコード、 関数へのポインタ。 そして、誰かがクリックしたときに マウス、その関数が呼び出されます。 [01:15:17] デーヴィン:アレイ、あなたので、 配列宣言を持っている。 その後、で物事を置くために配列。 実際に素早く、これは何を出力します? 第三の要素は何になりますか? [01:15:31] 読者:「JS」。 [01:15:32] デーヴィン:右、それは "JS。」となる 待って、戻ってください。 長さとは何ですか? [01:15:37] 聴衆:スリー。 デーヴィン:三、右? 正確にあなたが何を考えて。 [OK]を、今行く。 配列は、あなたが彼らに物事を追加することができます。 だから、越えて行くことができます 彼らの初期の境界です。 心を保つためにだけで何か。 PHP、JavaScriptは、彼らが少しだ 物事の面でもう少し寛容 そのような。 オブジェクト、非常にのような 構造体Cにおいて、非常に PHPの連想配列のように。 あなたは、このすべての経験を持っていた。 あなたがJSONを渡しているので、JSON、 前後にp型に設定された8種類の中で、 それは、オブジェクトの。 [01:16:03] そんなわけで、例えば、実際の簡単な例。 ここでの目的である。 あなたがこれを参照する方法 オブジェクト、迅速なので、本物の、 のは、私が探していましたとしましょう アウト、OK、コースは何ですか? したがって、ここでオブジェクト名はCS50である。 そして私は連想していた場合 配列、私はそれをどのように行うのでしょうか? 私は右、キーを使用することがあります? だから私は、配列の名前を持っている。 私は、ブラケット、引用符、キーを持っている エンド引用符、エンドブラケット、 そしてそれはそれを参照します 私の連想配列の内部要素。 私はどのように参照されたか 私のオブジェクト内のコース? 誰もが知っている? [01:16:39] 読者:[聞こえない]。 [01:16:40] デーヴィン:何次第です? 読者:CS50.course。 デーヴィン:右、ええ。 だからCS50.course。 あなたは物事を参照するので、道 JSONオブジェクトの内側にドットである。 [01:16:48] 読者:あなたはまた、配列構文を使用することができます。 [01:16:53] デーヴィン:OK、罰金。 [01:16:54] GABE:また、CS50ブラケットを使用することができ、 引用符のような文字列、。 読者:私はそれがPHPと同じだと思う。 GABE:それは同じことだ。 デーヴィン:ファイン! しかし、あなたは、この他の場所が表示されます。 うん、そう続ける。 これは私がちょうど言ったことである。 JavaScriptのjQueryの例にようにします。 だから、これは右、私のDOMのですか? 実際に素早くので、私が持っている 頭、Hello Worldの、ボディ。 私がボタンを持っている。 それは "、私をプッシュ」と言うので、私はそれをプッシュしたい。 そして、私は何かをしたい それがクリックさとき。 右、次の。 [01:17:31] 右ので、これは私のJavaScriptのです。 だから、jQueryは単に簡単です JavaScriptを書くための方法。 だから、これ、と私は表示するつもりだ あなたが次の、jQueryのあることを行っている、 同じです。 そこで、彼らは同じことをします。 ただjQueryは少し楽になる傾向がある。 人々はより多くのそれのようにする傾向がある。 それは、多くの機能を持っています。 だから、人々はjQueryを使用する傾向がある。 あなたはすべて、最後のP-セットでjQueryを使用。 だから、これは何をしますか? これは何をJavaScript--ます これは単なるJavaScriptのです。 これは何をしますか? それは何をしますか? [01:18:03] したがって、最初、ウィンドウのonloadを参照してください。 右? だから我々はその前に表示されませんでした。 だから、これは待つつもりされている ウィンドウ全体がロードされるまで。 だから、まで待つつもりだ HTML、すべての画像のロード それが何かを行う前に。 それでは、私たちのDOMがロードされているとしましょう​​。 すべてがあります。 次に何が起こるだろう? うん? [01:18:19] 観客は:ボタンが表示されます。 [01:18:22] デーヴィン:ボタンがすでにあります。 うん、まだそこにボタンの。 しかし、これは、言おうとしている [OK]を、私はボタンをクリックすると、 そうボタンはすでにだ そこに、そのHTMLタグのように。 待って、実際に素早く戻る。 このタグは、右右ここにある すでにボタンになるだろう。 ボタンが既にあります。 しかし、その後は、JavaScript タグ、右ここに、 それはOK、私が欲しい、と言う IDによって要素を取得するには、 そのように、検索ボタンだけでOK、私が欲しい、と言う そのボタンには、この変数をマッピングする。 だから、その変数だけです そのボタンにアクセスするための簡単​​な方法。 私はそれをクリックした場合、私は、[OK]を、言う ボタン、私はその要素をクリックした場合ので、 そしてこの要素が指し ボタン、私はそれをクリックすると、 その後私は、関数を呼び出したい。 ここでは、これらの匿名の一つです 私たちが話していた機能。 [01:19:03] ただ、いくつかの関数を呼び出す。 その関数の内部では、基本的に 私たちは多くのことを見てきたもので、警告。 あなたは、検索ボタンをクリックします。 それは基本的にボタンを持っているつもりだ。 あなたはそれをクリックします。 あなたは、そのアラートを取得します。 X外。 それでおしまい。 うん? [01:19:16] 読者:だから、スクリプトを配置する場合 [聞こえない]、あなたのHTML内のスクリプトタグ? [01:19:21] デーヴィン:あなたはスクリプトを置くことができます 頭の中で、タグストレート あなたはこのonloadイベントを持っているので。 それはあなたのクリックを持っていることでもあります。 だから、まで待つつもりだ あなたが何かをクリックしてください。 しかし、onloadイベントは作るために、念のためにある あなたのHTMLに必ずすべてのロード あらかじめ。 うん? あなたが何かを言いたい? [01:19:40] GABE:[聞こえない]。 デーヴィン:うん。 [01:19:42] 聴衆:だからのonloadことを回避する 変数検索ボタンを定義する ただのdocument.getElementByIdを言って 検索ボタンドット[聞こえない]。 [01:19:49] デーヴィン:確かに、しかしその後 あなたの文字列は、単に巨大な取得します。 正確には、これはただのです ええ、あなたのためにそれを容易にする。 はい? [01:19:56] 読者:私たちはやった window.onloadのを作成しますか? またはdocument.ready? [01:19:58] デーヴィン:はい、あります。 はい、私はそこにチェックされている。 [01:20:02] GABE:彼らは気にしないために。 [01:20:03] デーヴィン:OK、私は行くよ とにかくあなたを伝えるために。 だから、基本的には、単に一般的で、そのように window.onloadのは、すべて、あなたのDOMまで待機 あなたのHTML、ロードされます。 それはあなたのイメージの負荷まで待機。 これは、すべてのものがロードされるまで待機します。 document.ready、それだけで あなたのDOMがロードされるまで待機します。 HTMLは、一度、すべてそこになると あなたのDOMがある、実行を開始します。 それは唯一の違いです。 [01:20:23] GABE:ここにクイック健全性チェック。 だから、これは一種の見ることができます コー​​ド行のように、右? それはwindow.onloadのだから 原料の束に等しい。 JavaScriptを読み取ると、この、真か 偽、関数が実行されます。 偽。 OK? ここでは何が起こるかは、あなただけ渡している この関数無名関数として window.onloadのように。 その後ときに起こっている 実際に実行取得するには? ときに、ウィンドウがロードされます。 それはイベントです。 だから、私たちがしているジュースtのことだ 右、それ以前の話? だから、イベントが発生したとき、 機能が起こる。 onclickのと同じこと。 [01:20:59] デーヴィン:OK、誰かが取ったので、 離れてdocument.ready。 しかし、これは正確なsame--になります 読者:ドル記号、 それはdocument.readyです。 それはショートカットです。 [01:21:07] デーヴィン:ああ、それは何ですか? [OK]を、ので、この手段 document.ready、ショートカット。 しかし、これはwindow.onloadのと同じです その小さな違いを除いて 私は約あなたに言った。 そして、これはjQueryのです。 だから、これはまったく同じです。 これは、JavaScriptでthing--。 これは、一部の人々がそれを考えるjust--される より軽量、洗練されたバージョンなど それはたくさんの機能を持ってい ことは、おそらく使用することがあります。 だから、これはまったく同じことを行います。 [01:21:34] だから、物事は一種の指摘する。 そこで、他の例では、我々 のdocument.getElementByIdを持っていた、 私たちはこの長いを持っていた 取得するために起こっている文字列 それが持っている任意のIDによって要素。 それは右こここの呼び出しによって置き換えだ。 ですから、ドル記号を参照してください。 あなたが引用、ハッシュタグを参照してください。 ハッシュタグは常にセレクタです。 それはOK、これはIDとしなければならない、と言う。 クラスのセレクタは何ですか? [01:21:56] 読者:ドット。 [01:21:57] デーヴィン:ドット、右。 あなただけのつもりなら タグを選択、それは何ですか? それはまさに、ちょうどタグです。 そして、あなたにも、ここでそれを使用することができます。 [01:22:05] GABE:そしてタグで、我々は次のように意味 DIV、例えば、または頭。 [01:22:08] デーヴィン:または身体またはpまたは そのような何か、うん。 だからここに、[OK]を、代わりに言って のdocument.getElementById、 これはちょうどまったく同じことです。 ちょうどjQueryのでは、より短いです。 だから、簡単です。 それでは、これ以上のonclickの、ちょうどをクリックします。 jQueryの関数は、この関数を呼び出す。 アラートはまったく同じです。 だから、少しだ 小さい、または少し 短く、少しbit--人々は思う それは書くことが少し簡単だ、 理解し少し簡単に。 しかし、これはjQueryのです。 多くの人は少しを得る 少し混乱と心配して そして彼らは、OK、jQueryを考える JavaScriptのとは異なります。 私はこれらを覚えておく必要が 二つの異なるもの。 そうではありません。 私が意味する、それは別の構文です。 しかし、jQueryはJavaScriptのです。 それは一見だけだ より良いバージョンその への簡単な場合があります 人々が使用することを理解しています。 GABE:ええ、ようにする 正直、そのドル記号 あなたはjQueryのに見ている、それはちょうどだ jQueryが定義する関数の名前。 それは特別な何かを持っていません。 これは、関数の名前だけだが、 ちょうどあなたがドル記号を定義することができますように。 [01:23:03] デーヴィン:うん、そうこれについて話しました。 いくつかの有用なもの。 私は古いクイズを振り返っていた。 過去のカップルのクイズでは、彼らはきた このようなものを使用する必要がありました。 だから、そう、document.ready すべてのことを確認してください あなたは物事を始める前にロード。 IDを選択、または選択 クラス、それだけだろう いくつかのクラス、終了引用符に点在して引用すること。 あなたがしているので、もし、提出 フォームとコールを提出 フォーム後にこの機能が提出する。 価値、それでは、私はフォームを持っていたとしましょう 提出、ユーザ名などの、電子メール、 なんでも。 私は、テキストボックスを持っていた。 だから私は、そのテキストボックスに入力しています。 さて、あなたは値を取得したい場合 そのテキストボックスの外には、ドットヴァルを使用しています。 そして、ダウンここでは、 ドットHTMLは同じです 文書ドットのようなものです getElementByIdをドットinnerHTMLプロパティ。 だから、返すために起こっている あなたそのIDからHTML。 ここでは、あなただけのいくつかを使用 IDまたは何ドットHTML。 つまり、その要素からHTMLを取得します。 その後、それを変更したい場合 HTMLは、あなたはそれに何かを渡すことができます。 だから、その後、ドット、HTMLのように、と思います 内側に、引用符、新しいHTMLまたは何か。 [01:24:05] GABE:OK、AJAXそう。 私は本当に理解したい AJAX本当によく。 だから私はあなたたちがしたい 本当によくAJAXを理解しています。 あなたがしなければため、 あなたはかなりつもりだ そのすべてを理解するために HTTPと関係があり、PHP、 それはすべてのためのJavaScript AJAXで一緒に来る。 AJAXは言語ではありません。 AJAXは技術です。 そして、それはさまざまなツールの多くを使用しています。 AJAXの略 非同期JavaScriptのXML。 だから、方法、言語、データ。 [01:24:36] 我々が使用するので、メインの言語 AJAXですべてをトリガーする そして、すべてを処理する 後でJavaScriptのです。 それが関係する理由です JavaScriptのに非常に近い。 そして、非同期である 我々はそれをしないので、 一斉に私たちがページをロードしているとき。 これは、私たちができる事である 並行して種類の物事を行う。 背後にある主な考え方 AJAXはあなたが欲しいということです それはいくつかの特定の情報を取得する。 たとえば、あなたが新しいを入力している ユーザー名を登録したユーザ名、 私のユーザー名はABC123です。 その後、終了時の フォームには、Submitをクリックする必要があります。 そして、それは、サーバに行かなければならなかった その後、データベース内かどうかを確認 ABC123既に存在する。 それはすでにありますなら、それは、言う 既にデータベース内のユーザー名。 そして彼らは、あなたが入力する必要が フォーム全体から再び。 そして、それは本当に、本当に悪かった。 [01:25:23] そして、人々は言う、 [OK]を、なぜちょうど私達はできない ちょうどチェックする小さなHTTPリクエストを行う このユーザーがデータベースにあるかどうかを確認する ユーザーがしなければならなかったの前に フォーム全体を送信しますか? だから、例えば、 ユーザーは、ABC123入力して終了した ちょうどサーバーに少し手放す 少しだけ取得真または偽 かどうかを確認するために、サーバーから それは、有効なユーザー名またはではありません。 OK、それはメインの一つだそう 今日では、AJAXの使用はまだ。 [01:25:49] デーヴィン:だから実際に素早く、中 jQueryの中でAjax呼び出し、 あなたがいることを意味する可能性があり それは、同期になりたい。 あなたはこれを行うべきではありません。 しかし、あなたはそれを行うことができます。 あなたがいることをやったなら、何が起こるでしょうか? さて、例えば、ときにしている ニュースまたは何を得て、 お使いのブラウザはただ待つために起こっている その全体の呼び出しが完了するまで 代わりにあなたが他の何せるの 右あなたがそれをクリックした後の事。 [01:26:14] GABE:それはもう渡していない。 何てことだ。 ごめんなさい! うん。 「過去には、 クライアントの要求に必要な ウェブサイトの全コンテンツ」 それは私が言ったものだ。 それは私たちが送信することができます 追加のGETまたはPOST なくてもリクエスト 私たちのブラウザをリロードする。 だから、一日の終わりに、私たちはしている 実際のHTTPリクエストを作成 ここではJavaScriptを使用して。 前なので、私たちは、JavaScriptを使用 すでに来たHTMLを変更します。 そして今、我々は、インターフェイスにそれを使用することができます Webサーバと同様に。 これが起こる方法 私たちはクライアントがある。 デーヴィンはクライアントです。 そして、彼はすべてのJavaScriptを持って HTMLはダムであるため、実行されている。 JavaScriptがスマートです。 だから、デーヴィンデーヴィンは、彼のスマートを持って 一部と彼のダム部分。 彼は今、彼のスマートな部分を使用するつもりだ。 彼はJavaScriptを使用するように起こっている リクエストは、例えば、 ABC123は内にあるかどうか データベースまたはしない。 [01:27:04] だからデーヴィン、お願い、あなただけ 私にHTTPリクエストを送信する。 ありがとう。 そこで彼は、単にHTTPリクエストを送信しました。 あなたはそれを参照してください? そして、それはちょうど同じ方法だ 任意のHTTPリクエストが送信される。 ブラウザ、グーグル クロームか何か、である デーヴィンのことを見に行く HTTPリクエストを送信しようとし、 少しHM支援するつもり。 そして、それは行くために起こっている サーバーへのすべての方法。 さて、サーバが持っているとしている ここでPHP、またはその他の言語。 通常のHTTPリクエストで好きです。 これはかなり通常のHTTPリクエストです。 [01:27:31] そして、サーバー [OK]を、言うために起こっている、 デーヴィンは私がするかどうかをチェックしたい このABC123はデータベースにあります。 モデルに話を移動します。 モデルは、それはしないと言っている。 ABC123は、優れたユーザ名です。 そして、Webサーバがしようとしている ファイルのいくつかのフォームをレンダリングするためにPHPを使用。 これは文字通り、単にファイル可能性があり すなわち、NO "その中に「はい」が含まれ、または、 またはそのような何か。 これは、任意のファイルである可能性があります。 [01:27:54] 私がするつもりのようにそれは可能性が デーヴィンにアヒルの写真を送る それは、データベース内の場合 ハムスターの写真を送る それがデータベースにない場合は。 それは一種のだろう ダムが、それは動作します。 [OK]をので、私はデーヴィンにアヒルを送る。 デーヴィンはアヒルを得た。 そして今、誰が起こっている アヒルを処理するには? デーヴィンのスマート一部再び、 右、JavaScriptはそう? JavaScriptが送信された リクエスト、およびJavaScript 要求を受信しようとしている と何らかの形でそれを解釈する。 [01:28:22] そして、この意味では、それがために起こっている その後、私は良いんだアヒル場​​合には、[OK]を、言う。 ハムスターなら、私は行くよ 、いや、ユーザー名は既に言って データベースに存在する。 しかし、通常、あなたがわからない アヒルを送るつもり。 あなたが送信するつもりだ 少し賢く何か。 そして、私たちが使用して、XMLです。 そして、もっと最近になって、私たちはJSONを使用しています。 JSONは単にJavaScriptのです オブジェクトの表記、どの あなたが得る基本的に 全体JavaScriptオブジェクト。 そして、あなたは同じように、ファイルに入れて あなたたちが見たことCS50オブジェクト。 あなたはファイルに入れて、 あなたはデーヴィンにそれを送る。 [01:28:53] この場合、私はだろう JavaScriptオブジェクトを作る ちょうど、ユーザーが存在する、イエスと言う。 あるいは、ユーザーは、存在します。 そして、彼にそれを送り返す。 そして、なぜJSON? 人のため 誰がこれは受けだ JavaScriptを使用するつもり 応答を処理する。 そして、JavaScriptがいるのでとてもうまく機能 それは、JavaScriptオブジェクト表記と呼ばれています。 右? そこで彼は、単に関数を呼び出して、取得することができます 応答からこの素敵なオブジェクト。 そして、彼がいるかどうかを知るために起こっている そのユーザーがデータベースにまたはではありません。 [01:29:22] だから、あなたはそれのすべてが来て、参照してください。 一緒にWebサーバで、 その後のリクエストに1 HTTPがあります と1 HTTPレスポンスとすべてのもの。 だから、必ずあなたたちを作る このAJAX呼び出しを理解する それはあなたがすべて理解するのに役立ちますので、 我々が話している概念の。 [01:29:37] だからここに例を示します。 jQueryを使ってAJAXの。 そしてここで、我々は、get JSONで行う。 だから我々は取得しようとしていない ここに猫、またはアヒルのイメージ。 私たちは、JSONファイルを取得しようとしている。 そして、我々はまで待って それはドットが行われ、完了です。 それは私が応答を待っていることを意味します。 それは少し時間がかかる場合があります。 その後、あなたは少しロードを参照してください。 あなたのウェブサイトでそれをしたい場合。 だからドット行われ、その後、どのような それが終了したときに起こりますか? あなたは匿名で渡す この関数は、ちょうど私達が前に見たように。 行われ、イベントであるため、単に マウスをクリックするなど、または何でも、 jQueryのための。 だから、この関数に渡す データ、テキスト、ステータス、およびjqXHR。 そして、基本的には、それはだ ただ、いくつかの変数 あなたが持っているために後で使用することができます HTTP要求のステータス、 それが起こっているデータ あなたに戻って送信します。 だから、あなたは後でそれを解釈することができます そしてそれで意味のある何かをする。 そして、それが失敗した場合、それはときに失敗することがあります? さて、時は、HTTPリクエストを提供します あなたそのような500か何か。 その後、それはあなたに伝えるために起こっている 状況、故障したどのような種類の、 そしてあらゆる種類のもの。 あなたは確認する必要があります 両方のケースを処理するために、 そうでなければプログラムが狂う。 [01:30:42] デーヴィン:そんなわけで、これは正確である あなたがあなたの最後のP-セットで見たもの。 実際のAJAX呼び出しは、GET JSONである。 つまり、呼び出しです。 そして、ドット行うにはのようなものです それが成功の場合、それはチェックします。 それが成功した場合は、必要 データで何かをすることができません。 あなたはそのから取り戻す JSON要求データ。 それはあなたが戻って得るものです。 つまり、あなたのp-セットから覚えていれば、 あなた方の多くは、データブラケットのようだった私 または何、ドットリンクまたはタイトル。 バック来るのが何であれ そのJSONから、何でも フィールドは、そのJSONオブジェクトにあり それはあなたが戻って取得しているものだ。 データは、あなたが戻って取得しているものです。 テキストの状態、ちょうど何か あなたが何が起こったのかを知ることができます。 そして、jqXHRは、それはちょうどだ jQueryのXMLのHTTPリクエスト。 それはちょうど、オブジェクトのようなものだ。 そしてゲイブが言ったように、失敗する。 GABE:ABC123の私たちの小さな例では、 それは、データベース内の場合は、単にチェックする または、データはあなたにものになるだろうではない データドットのユーザ名が存在する場合、どうなる、 あなたのPHPがために生成何これは あなたがデータドットのユーザ名は、その後、存在する場合 私は警告するつもりだ、ユーザー 名前がすでに存在しています。 そうでなければ、私はちょうどようにするつもりだ ユーザーがフォームに記入進む。 OK、セキュリティ、涼しい。 [01:31:50] デーヴィン:私はしたいですか? [01:31:52] GABE:私はこの1つが好きです。 だから、見慣れ何か。 我々はほぼ完了です。 だから、これは一例で あなたたちは、クラスで見た。 あなたがここにargv1使用していた。 つまり、コマンドライン引数のようなものだ。 そして、我々はそのMEMコピーしている サイズ12のバッファに。 ここでの問題は何ですか? バッファオーバーフロー! 我々は、サイズ12のバッファを有するからである。 argv1 20億の大きさがあるかもしれません。 私たちは、すべての境界チェックを行いません。 だから我々は多くのメモリをコピー可能性があります。 そして、我々は特にだろう これについては悪い。 私たちはのことは何を行う可能性 非常に、非常に、この場合に意味ですか? はい? 読者:20億物事の一部 返し実行可能なコードが含まれています [聞こえない]。 GABE:その通り。 だから、のようなものだ 人々が使用するもの 例えば、iPhoneを脱獄する。 そういうことだから。 あなただけのデバイスを作ることができるので あなたが好きなコードを実行する。 修正は、そのように修正が簡単です。 ちょうど境界を確認してください。 あなたはnullをチェックするため、 私たちは常にnullをチェックする ときに我々は、文字列を扱っている。 そして、あなたが取る 文字列の長さの前に。 そして、文字列の場合 長さは、有効な文字列である 0内にある長さ、 そして12、我々は良いしている。 [01:33:03] デーヴィン:あなたがのためにチェックしない場合 ヌル、実際に素早く、何が起こるのだろうか? それはseg faultをします。 なぜそれが障害SEGのだろうか? あなたがnullではstrlenを呼び出しているので。 GABE:うん。 1を使用して、真または偽 パスワードは良いアイデアです。 [01:33:19] 読者:偽。 [01:33:20] GABE:偽。 多くのパスワード、大きな、長いものを使用してください。 鍵のアイコンは、セキュリティを確保する。 [01:33:26] 読者:偽。 [01:33:27] GABE:偽。 それは何の意味もない。 それはちょうどアイコンだ。 SSLはから保護 中間者攻撃の男。 読者:偽。 GABE:偽。 [OK]を、ので、すべてのものがfalseです。 ニース。 [聞こえない] これについて話をしたいですか? あなたのターン。 デーヴィン:攻撃の種類、 真ん中の男。 中間者攻撃の男は何ですか? 読者:[聞こえない]。 デーヴィン:あなたが送信する場合、HTTP 要求は、彼らは正しい、これを行うだろうか? しかし、あなたは、HTTPSを送信している場合、それら おそらくこれを実行することはできません。 ポイントがたくさんあり​​ます あなたの接続に沿って。 あなたは、ルータを持っている。 あなたは、DNSサーバーを持っている。 誰かが物理的にすることができる場合 あなたが送信しているか見て、 そう誰かがすることができます 実際にあなたとの間で取得し、 クライアント、およびサーバ、およびされている あなたが送信しているかを確認することができ、 これは、中間者攻撃の男です。 だから、あなたから取得しようとしているかを確認する サーバ、または悪化see--することができ、 あなたが見ることができるかもしれない クッキーやそのような何か。 [01:34:16] 例えば、もしそうなら あなたは彼、SSLを使用していない 見ることができるかもしれない あなたのセッションIDクッキー。 そして、これはセッションハイジャックと呼ば​​れている 彼はあなたのIDクッキーを見ているので、 その後、彼はそれに行くことができます ウェブサイトとあなたをふりをする。 ただ、PHPで好きなので、覚えている 私達がログインしたときに、私たちは何をしますか? 私たちは、IDと同じセッションIDを設定する。 だから、あなたを識別します。 あなたのポートフォリオを見ることができる理由です としない、誰も他の人のポートフォリオ。 [01:34:38] まあ、私はそのクッキーを取得することができていたら、 その後私はそのページにログインすることができます。 そして、私はちょうど自分のものを見ることができます とのものを購入して販売を開始。 だから、セッションハイジャックだ。 しかし、あなたはあなたのでto--できないようにする必要があり 中間者攻撃で男を使用することができます 彼らは、SSLを使用している場合であっても。 しかし、あなたのことができるようにはならない。 彼らは、SSLを使用している場合は、 あなたは、セッションハイジャックすることはできません。 なぜ? それはすべて暗号化さだから、 右?それは暗号化されているかの、 と私はまだで男だ 真ん中には、私はまだあなたのデータを取得する。 それはいいです。 しかし、それは暗号化だ。 だから私は実際にそれを使用することはできません。 だから、2だ。 [01:35:09] 実際に素早く、クロスサイトリクエストフォージェリ。 リンクがあるかどうそれはちょうどだ そのリンクは何かを あなたはそれが何をすべきとは思わないこと。 例えばそう、リンクがあった場合 株式を購入したり、株式を売却しようとして、 そしてあなたはそれを知りませんでした。 あなたは、リンクをクリックした 買って、リクエストを送信した か何かを販売されている あなたは何を意味するものではありませんでした。 それはそれだ。 [01:35:25] クロスサイトスクリプティング、ここではそのように、 あなたは、変数q経由で渡している 代わりにいくつかの種類を渡すの 価値が、多分qは名前のようなものです。 だからではなく、Qの等号を渡す デーヴィンまたはそのような何か、 あなたは、HTMLを使用しない場合 特殊な文字、あなたの場合 それはだことを確認するために、これをエスケープしない [OK]を、私は代わりに渡すことができ、 私が言っているのは、ここで言うてみましょう 印刷またはそのような何か、 その後私はここでスクリプト呼び出しを渡すことができます。 [01:35:51] それでは、代わりに 単に変数を取得する、 私は、このスクリプトの呼び出しを実行します。 そのスクリプト内部だから、 呼び出し、それが何をするのでしょうか? ドキュメントのドット位置、それがために起こっている ドキュメントの場所を変更する。 だから私はリダイレクトするつもりです どこか別の場所へ。 それは、悪いやつで呼ばれています この例で、非常に良い。 言葉を考えることができなかった。 そして、何があってもだ 悪くは私が行くよということです 一部でその後設定されたCookie、へ 私は、このウェブサイトを持っている変数。 私はそれが等しくなるように設定するつもりだ 文書ドットクッキーに。 したがって、私は行くよ あなたのクッキーを盗むために。 そして、私はリダイレクトするつもりです ウェブサイトにいくつかの情報 あなたがアクセスしてはならないこと。 あなたがしているので、これはすべての起こり あなたが見てきたものエスケープしない。 うん? [01:36:29] 読者:だからへ それはだ、それを明確にする vulnerable.comその これに対して脆弱である。 だから、そのリンクが表示されることが 任意のページで。 誰かが、それをクリックする vulnerable.comに行く。 あなたはvulnerable.comにクッキーを持っている。 それではFacebookがあるとしましょう 脆弱なので、facebook.com。 あなたは自分のFacebookのクッキーを持っている。 これはあなたがしている、何をしているのですか facebook.comに行く、 それはすぐにリダイレクトだ badguy.comにあなた、 しかし、あなたのクッキー情報を含む。 だから、迅速にリダイレクトだ、 しかし、あなたのFacebookのクッキー そのリダイレクトに含まれています、 それはどのように[聞こえない]です。 GABE:ええ、あります いくつかの非常に平均物事 これがあるかどうかの人が行うことができます。 例えば、Facebookは許可されている場合 誰もが、自分のユーザー名を変更するには 彼らはいずれかの操作を実行しませんでした 健全性チェック、あなたがそう JavaScriptのものを挿入することができ、その ハムスターにあなたのイメージを変更します。 そして、それは同じJavaScriptを挿入します あなたのページを表示皆に。 あなたのページを表示するので、皆 ユーザー名に同じことをしています。 そして、それはウイルスだから、 それは指数関数的に広がる。 デーヴィン:我々は最後をスキップします 1、その後、我々は完了です。 だから、これは単なる一例です。 だから、これは彼らがわからないです 彼らのSQLテーブルをエスケープ。 だから、それをドロップすることができます。 だから、物事をエスケープしたい。 それは、前の例でした クロスサイトスクリプティングと。 申し訳ありませんが、私たちは少し遅れて走った。 明日、申し訳ありません! 明日は、営業時間を持っている。 11時00分にCabbot 8時00中のSO営業時間。 営業時間は、 厳密にクイズの質問のために。