DAVIDマラン:すべての権利。 これは、CS50であり、これは 週9の終わり。 それは旋風終わっている 過去数日間。 あなたは膝のなら、問題は、7を設定 それに深く、かなりあり実現 そこにだとちょっと新しい。 しかし、我々はつなぎができないかどうかを確認してみましょう ここで簡単に一緒にすべてのもの その後まだでオフに方向転換する前 別の方向と見て 他にどこ私たちは行くことができます。 だからこれまで、我々は、HTMLについて説明しました。 私たちは、CSSについて説明しました。 私たちは、PHPについて説明しました。 あなたは、SQLを体験し始めました。 今日、私たちは少し話しましょう JavaScriptの程度。 しかし、どのようにこれらの異種のすべての操作を実行 言語は一緒に合う? だから私たちは、約先週話 サーバーを持っていることの概念。 だから、この長方形を描いてみましょう ここでは、Webサーバーとして。 とWebサーバが確実にファイルを提供します。 そして、それらのファイルの一部 HTMLファイルがあります。 だから、Webサーバーのものの一つ 吐き出すことができ、ファイルことかもしれない 私達はちょうどこのように描画します 一部のHTMLを含む。 だから、普通の言葉で、何 HTMLは、あなたがやらせるのですか? 読者:ページ見栄え。 DAVIDマラン:OK、ページが素敵に見えるように、 私が証明したと思うが それ以外の場合。 だから、HTMLを使用すると、ページをレイアウトさせません 構造的に、それはあなたがすることができます 審美的にページをマークアップするの並べ替え、 静的コンテンツをマークアップすると、そのため その後、Webブラウザで表示することができます。 しかし、それは重要なのです。 それは静的コンテンツです。 あなたがそれを書いて、あなたはそれを保存 その後、あなたはそれを出荷する。 とWebサーバは提供しています それまでのあなたの訪問者に。 しかし、我々は別のを使ってものを型にはめる 完全言語。 私たちは、style属性を使用し始めた 特定のタグで。 とスタイル属性は、私たちが設定でき フォントサイズや色のようなもの。 そして、あなたはおそらく、発見し始めました または、すぐに最後のを頂きます 潜在的に、まだ他のプロジェクト あなたはCSSで使用できるプロパティ。 そして素人の言葉で、何 本当にCSSはするのでしょうか? それらはそれらの単なる例です。 それはあなたがそのHTMLを何を聞かせていない 何からしていないようです 我々はこれまで見てきた? 読者:自分でスタイルを定義します。 DAVIDマラン:定義スタイル 自分で。 だからあなたのようにクラスのようなものを定義する 遭遇したかもしれない、または一意 その文書内のノードを識別 あなたがそれらを型にはめることができます。 しかし、より具体的には、私が言いたいことをCSS 本当にあなたが物事を取ることができます ラストワンマイルとあなたは多くを指定することができます より正確に美学、 HTMLに対し、ほとんどの部分ができます あなたのページを構築する。 そして、いくつかのデフォルトがあるにもかかわらず、 我々はのタグを見たような 大まかに言うと見出しタグ、 物事が大きく、大胆な作りました。 これはかなり一般的な定義だ タグの - 大きな、大胆な。 それはどのようなフォントサイズです? それは何色です? それはどのように大胆な? とCSSは、より細かくすることができます そのような曲の事。 同様のレイアウト、いくつかのように あなたのことを見てきました。 と率直に言って、CSSはビットです 乱雑な言語の。 それはあなたが作るこ​​とができるという点で非常に強力です あなたがしたことを文字通り任意のウェブサイト それを今日、Web上で見られるが、 それは、首の痛みのようなものだ。 そして、あなたのいくつかは、あなたの頭を打ちました すでにだけで行うために壁に 中央のメニューのような愚かなもの あなたに得ている場合、問題は7を設定 すでにその時点。 しかし、それらのものを実現 時間をかけて簡単に取得。 あなたがパターンに気づき始める。 そして再び、Googleはあなたの友人になります することができますさまざまな方法のために この種の問題を解決します。 そして、私はCSSであえて言うと、多くのHTML 一般的には、の問題を解決することができ より多くの方法は、すべてが非常に可能性がある あなたは可能性がより良く、正しいもの でも、C言語のようなもので、 今PHP、またはJavaScript。 ただ、多くの異なるがあります 物事をレイアウトする方法。 しかし、これは取得し始めた 乱雑な、我々は言った。 ちょうどあなたのHTMLを混入の種類と style属性を使用してCSSがあった 少しずさん。 そして、我々は代わりにソートで、言った 抽象的に言えば、あなたがすべきこと 少なくとも要因を開始 おそらく外にあなたのCSS。 ないあなたのスタイル属性が、少なくとも どのような内部のスタイルタグを使用 Webページの一部? AUDIENCE:ヘッド。 DAVIDマラン:頭の中で。 今まで、我々は唯一のタイトルを持っていた そこに、あなたはまた、スタイルを追加することができます タグを、あなたは大体あなたのCSSを置くことができます ページの上部に向かって話す。 しかし、その後、我々は一歩物事を取っ そして我々因数その外にもっと 別のファイルに変換します。 そして、これら2つのファイルがあった 何とか今リンクしました。 そして、確かにそれがあった ことをしたタグ。 と包括的なの一つだったもの 我々のCSS外ファクタリング動機 すべてのより? 読者:再利用。 DAVIDマラン:再利用。 右? あなたは、p-セットにすでに7を見たことがあるかもしれ そのページの多くは、 購入ページ、販売ページ、 ポートフォリオページは、おそらく 幾分同様に構成。 上部のCS50ファイナンスロゴがあります あなたはそれを変更することを決めていない限り。 にフッターがあります ページの下部。 とCSSは、あなたがそれを考慮することができます それように別のファイルにあれば あなたは、グローバルに何かを変更したい あなたの全体のサイト全体で、あなたは本当にすることができます ただ一つの場所に変更します。 しかし、あなたが支払う価格は、潜在的に存在する うち織り込ませることによって 私のHTMLファイルとは別にCSS でそれを参照するファイル 我々は月曜日に見たタグ。 マイナス面は、これの何があるかもしれない? 私たちがしているときに一週間前に戻って考えて HTTPとTCP / IPおよび方法について話 インターネットは機能します。 こちらに何か? 観客:それは時間がかかります。 DAVIDマラン:それは時間がかかります。 なぜ? 観客:[聞こえない]。 DAVIDマラン:うん。 だから、間違いなく、もう少し時間がかかります。 1、CSSは明らかであるため、 なく、同じファイル内で。 だから今はしない確認する必要があり 1が、2の要求。 そして、これらの要求のそれぞ​​れ我々が見たように いわゆるインスペクタでクロム、 私たちは、それぞれ、[ネットワーク]タブを見て それらのファイルのHTTPのいずれかが必要です。 我々が見た要求は、取り ある程度の時間。 今、多分それは多くはありません。 多分それはわずか20ミリ秒です。 多分それは200ミリ秒です。 しかし、Facebookのようなページを考える ずっとであるか、CNN、またはGoogle、 我々はした例よりも大きい これまで見た。 これらのページには、ファイルの数十を持っているかもしれません、 それぞれが必要な場合があります ファイルのダウンロード。 だから、物事は、潜在的にすることができ 減速し始める。 特に、これらの日ときに我々のすべて 私たちのポケットに携帯電話を持っており、 低速のインターネット接続、を有する さらにいくつかのミリ秒数を待つ 追加のためのより多くのミリ秒 ファイルは実際に遅くなることがあります。 待ち時間が関連する用語である あなたがいることを持っていることを待っているの種類 待っている経験 情報のいくつかの作品。 しかし、利点はあります。 だから、すべての並べ替えではない - それは実際にここにシーソーのビットです。 今下振れが、どのようなブラウザを行うことができます 彼らは避けるためにスマートなら 同じのstyles.cssを要求すること ファイルには、再度、何をすべきかをすることができますか? それをキャッシュします。 そうキャッシング - C-A-C-H-E - 一般的には単に保存するには、ここを意味 あなたが最初に要求されたファイル、および それのためにキャッシュをチェックしてください。 あなたは、格納容器のようなものだ確認し、 そしてあなたが既に持っている場合 のstyles.cssのコピー、たとえ他のいくつかの P-セット、または任意のウェブサイト内のページ、 ただ与え、それを再度要求します ユーザーは、同じキャッシュされたコピー。 それを要求している気にしないでください。 あなたのいくつかのように、しかし、そこに下振れ P-セットでつまずいています。 サーバー上の変更を行うとし、 あなたは、ブラウザに移動し、 時々ブラウザがないので、リロード あなたの好意と気にしない あなたのstyles.cssファイルの再ダウンロード さあ、ので、オッズは何ですか そのFacebookが使用していますこれらのスタイル 時間かに時間を変更しようとしている 一日一日? それはかなり低いです。 それらは、時間とともに変化しないかもしれませんが 分単位または時間単位で。 そうトリック、ちょうどFYIやっウェブ 開発、多くの場合、押したままにしている インスタンスのキーをシフトしてからクリック お使いのブラウザでリロードし、その意志 通常、ブラウザのリロードを指示 あなたが既に持っている場合でも、すべてのもの、 それキャッシュに。 だからもう一度、五分五分とマイナス面、 しかし、それらのすべて 最終的な決定を設計します。 だから今、私たちはしませんでした ここで話を終了します。 私は今、背中と背中と戻った場合 背中、我々だけではなく、導入を開始し HTMLが、PHP。 だから、素人の観点から、どのような PHPは、私たちがやらせるのですか? 観客:[聞こえない]。 DAVIDマラン:あれは、何ですか。 観客:ロジックを導入 コー​​ドに変換する。 DAVIDマラン:ええ、ご紹介 コー​​ドにロジック。 だから、本当のプログラミング言語です ループ、および変数とし、 関数、条件、およびすべての 我々は戻って道を使用してきたもの ときスクラッチ以来。 とPHPは、これまで見てきた、使用することができます どちらのコマンドラインで - それ 何もする必要はありません それは言っても、ウェブと 本当にその起源とそれが傾向 得意とを助長することが - しかし、あなたは自然だけでPHPを使用することができます それは(プリントを有するという事実) 機能、のprintf()関数、 またはエコー()関数。 方法の束は、あなたがあります PHPでテキストを印刷することができます。 そのため、このプログラミングを使用することができます 言語出力に正確に 私たちは前に話していた。 あなたは、動的に生成することができます あなたのHTML。 それをそうでないかもしれないすべての。 のようなたぶん、あなたのハードコードの事、 ヘッダー、フッター、およびロゴは、 そして、あなたのスタイルシート、 そしてすべてのこと。 しかし、P-セット7のようなもののために、 あなたが株式を操作している場所 である、ユーザーのポートフォリオを示す あなたは、動的に変更することができただろう 確かにPHPとそれが与えるロジックを使用 プログラミング言語としてあなた 出力は、動的にサブセット ページの。 ですから、動的なWebサイトについて話すとき、 またはWebプログラミング、それはです あなたは本当に何を言っているのか。 PHPのような言語、または物事を使用して PythonやRubyのか、またはJava、または呼び出さ データベースを照会するさらに他の言語で、 多くの場合、または別のサーバー、および それから動的にHTMLを吐き出す。 今最終的な結果は、さておきとして、ある そのほとんどのウェブサイトのHTML、 あなたのP-セット7を含め、おそらく 場合は、巨大な混乱になるだろう あなたがソースを見る ブラウザのコード。 それは大したことではありません。 この時点では、ときに我々は気に スタイル、我々は気に あなたが書くもの。 私たちは、ものを気にしません それがどのようなコードを出力。 だから、インデントを心配しないでください ここでは、だ、PHPの場合は、 実際にものを出力する。 結局、ブラウザは気にしません、 そして人間は見れません とにかくソースで。 私たちスタッフは、例えばだろう あなたのPHPを見ている。 だから私は今簡単な例をあげてみましょう なぜ他のに便利です。 そう率直に言って、私は最後に思い出すことができない 私はこの問題を解決するためにCを使用した時間 現実の世界。 これは、大学院ではおそらくだったとき 私は、その言語を使用するために必要な かなり低い水準だったと私に与えた 非常に高い何かをする機会 本当にできるだけ多くのCPUを節約するために実行する 大部分のサイクル私ができるよう、 私は巨大なデータセットを使用していたため、 そして、すべてのCPUサイクルを数える。 と率直に言って、でも、電話のようなものに これらの日やその他のデバイス あなたは非常に多くを持っていない場合、 メモリとあなたはそれほどありません 多くのCPU、高速な言語を使用して まだ魅力的である。 しかし、現実の世界では、ときにだけ に合わせていくつかのプログラムをスローする いくつかのデータを分析したり、収集した のための登録の全体の束 一部の学生のグループとあなたは非常にしたい すぐに電子メールを送信する自動化 それらの一つ一つに1つずつ 登録者には、ために達するとしている 高水準言語 Cはいわばより。 PHPやPython、またはRubyのようなもの、 存在しない、または半ダースの他 これらの日。 しかし、これらの3つはおそらく 今最もトレンディ。 そしてこれが意味することはあなたが開くことができるということです geditのようなテキストエディタ上または その後、ほとんどの他のものだけを開始 気にすることなくコードを書く しなくても、コンパイルについて 本当にメモリ管理を心配、 でも念頭に置いて、そのほとんど だらしは最終的に戻ってくる データセットが取得する場合、あなたを噛ま 大きくても問題が大きい取得します。 しかし、これは何を意味するか 私たちは以下の通りである。 私が先に行くとスペルチェックを実行してみましょう 問題から6に設定してください。 だから、これは私のトライベースの実装である 私は大きな上で使用されることを 私はとてもうまくはないが行わボード。 私たちは、一週間の時間に戻って来ると、 頂上になってしまったん人々を再訪 私たちの最後の講義では大きなボード。 しかし、今のところ、私は先にだけ行ってみよう 本文中に私の解決策を実行して、私たちはやる 欽定訳聖書、そしてここに私達は行く。 ので、これらはおそらく、すべてのです のうちスペルミス 欽定訳聖書。 そして、私の実装がかかった 合計で半秒。 これについてもそう悪くない 特定のコンピュータ。 しかし、どのくらいを考え コー​​ドは私が書かなければならなかった。 あなたが書かなければならなかったどのくらいのコードだと思います。 あなたが過ごしたどのように多くの時間と思います D-ホールやあなたの寮や場所 実際にそのソリューションをコーディング。 まあ、私は実際には、より高いレベルを持っている場合 PHPのような言語のメモを取る 私はここで何ができるか。 まず、これは代わりであるとし お使いのディストリビューションのコード。 これはスペルチェックと呼ば​​れるファイルです。 それは、今日のの一部として利用可能です 分配コード。 そして、私は多くて私の手を振るつもりだ 詳細は、これは、実際には どのように興味深い例 あなたは、ポートの言語をかもしれない PHPに引き継がCのよう。 私は、文字通り2テキストウィンドウを開いた、 speller.cの私のCバージョンの1、 と私はちょうど私の中でそれを翻訳し始めた PHPと使用してそれを入力することに頭 最も近い同等の機能。 したがって、これらの事のいくつかは異なっている。 私たちは、PHPが使用されていない最後の時間を見た 全く同じように含まれています。 これは、しかし、一般的に要求される用途 存在があります。 定義とは多少異なります #はC言語で定義しますが、それはです どのように我々は一定にする。 $、それは、PHPに存在が判明したのargc 私たちはその前に見てきました。 これらは、すべての、単なる変数です そのドル記号で始まる。 これらは単なる集まりです思い出してください 浮動小数点の。 長い間話を短くすると、に歓迎している このめくっ好奇心ならば、これは ほぼライン用のラインの変換 PHPにspeller.cのCバージョン。 そして、あなたは再びこれを行うことができます 半ダースの他の言語。 しかし、面白いのは、これです。 または何が率直にがっかりするものだ これは。 私が先に行くと約を入力してみましょう 私はdictionary.php、と主張 先に行くと、再実装する予定 問題はここに6を設定します。 それでは、この中で最初にそれを提案してみましょう で実装されるファイル、 PHPは、だから私は、そのような私のタグを開いてみましょう。 私は自分自身にグローバルを挙げてみましょう 変数$サイズがゼロを取得します。 そして、私は与えるつもりだ 自分ハッシュテーブル。 私はこの事のためにハッシュテーブルを使用します。 どのように私はPHPでハッシュテーブルを宣言するのですか? 行わ。 [OK]をクリックします。 だから、オープンブラケット近いブラケット表し これまで見てきたように、PHPで何を? 配列ができた配列 連想配列。 連想配列です データ構造は、その 値を持つキーを関連付けます。 今最も単純に数値添字 配列、それらのキーは何ですか? ゼロ、1つ、2つ、3つ、右か? オールドスクールスタッフバック℃からしかし、それは、CAN また、fooの、バーのような文字列でなければ、 マックスウェル、または任意の文字列や。 だから私はそれを活用することができます 後すぐに。 私が先に行くと宣言してみましょう のような関数 - まずはload()を実行してみましょう。 だから、関数のload()。 そして、PHPはその中で少し異なります あなたは文字通り、関数を入力したが、 戻り値の型を入力しないでください。 私が先に行くと言うつもりです 負荷()関数は、取るべき 引数$辞書だけ Cバージョンのようでした。 私は、メモリからそれをやっている。 そして私は私がすることを提案 これをするつもり。 私は単純にforeachのをするつもりです。 私は呼び出された関数を呼び出すつもりだ その名を渡すと、ファイル() 変数であるファイル、 $単語として$辞書。 [マイここにforループの内側に、私は今 先に行くと、私の中で店に行く $言葉は真を取得$表。 完了。 ああ、待ってください。 完了。 OK。 つまり、負荷()関数です。 PHPで言う。 今、なぜそれが動作しますか? そして、私はここに浮気のようなものです。 我々が見たので、1、foreachの 簡単に最後の時間。 それはちょうどあなたが反復処理できることを意味します 私を煩わせることなく、アレイ nおよびプラスプラス、およびすべてのこと。 辞書は、もちろんファイル名です 規模の大小のようなもの、2 我々は前回に​​使用される辞書。 ファイルには、テキストを開く機能です ファイルは、行ごとに、それを読み出し、 あなたが巨大な配列を手の甲、 その要素のそれぞれがある そのファイルから行。 だから、fopenのの組み合わせだと、 関数fread、whileループ、およびfcloseを、 そしてすべてのこと。 言葉だけの手段として、最終的に、それはです 変数iはへのアクセス権を持っているつもりだ このループ内のすべての繰り返しで。 だから要するに、ここにこの1ライナーは意味 名前の中のファイルを開く 辞書は、変数は、繰り返し処理 それ行ずつ、そしてあなたが得るたびに 単語と呼ばれる変数に行、店舗、 し、Wordで何かをする。 私は何をしたいのですか? 私は私のハッシュテーブルに言葉を載せていきたいと思います。 まあ、私は私の中で何かを置くことができます ちょうどC言語のようなハッシュテーブル 角括弧を使用した。 これは私のハッシュテーブルの名前です。 私は、そのハッシュへのインデックスつもりだ この場所でのテーブル。 そうブラケット1、ゼロではない囲むいない。 ブラケット引用引用終わり何か、 何でもその言葉です。 と同じようにあなたがで可能性があり、あなたの ハッシュテーブル作業トライ、あなただけの店 効果的にブール、暗黙のうちに または明示的に。 完了。 私は真の値を格納しています。 今点がいくつかあります 私はここで手抜きだ。 技術的には、があるように起こって の最後に迷惑な新しいライン、/ N、 これらの単語のそれぞれ。 だから私は、おそらく、PHPの関数を呼び出す必要があります CHOPと呼ばれる()、その意志 文字通りそれを切り落とす。 そして私は実際に必要とする 1他のことをする。 私はおそらく、それぞれにサイズをインクリメントする必要があり 反復ので、私は追跡しています 世界的にそれが何であるかの。 と率直に言って、これは、次のいずれかです。 君がいるなら、PHPの愚かな側面、 グローバル変数を使用して、次のものが必要 明示的であると言うこと。 だから私は、実際にはグローバルで入力するつもりです 今$サイズ、グローバル$表、および My機能は完了です。 以前とそうそれほど単純ではありませんが、 おそらくCよりも時間がかかった バージョン、多分? OK。 だから今のチェック()関数を実行してみましょう。 これは、少なくともかかった場合を見てみましょう それはC.そうにしてくれた時間もぶっ続け 私が先に行くと宣言してみましょう 機能としてチェックしてください。 ある引数ワードを取り込み スペルチェックから来るつもり。 そして私はちょうどかどうかを確認するつもりだ 次の変数かどうかの判断は、テーブル 単語のブラケットに対してstrtolower - それでは私の括弧のすべてのバランスを取ることができます - その後、trueを返します。 他の - それは本当に大変だった このプログラムの一環。 そうでなければ、falseを返します。 完了。 つまり、)(チェックです。 今、なぜこれが動作しますか? まあ、1私は、言葉で渡さ その文字列です。 二人は、私は、ハッシュの内部のチェックだ テーブル、$表と呼ばれています。 私が呼び出して小文字にそれを強制してい ()内のtolower全く同様の機能 Cが、これは単語全体を行い、 ではない単一文字。 そして、それはそこに、換言すれば、設定された場合 換言すれば、設定された値は、 それが本当なら、[はい、 これは言葉である。 私は負荷であり、それを置くので、()。 とされていない場合、私はfalseを返すつもりだ。 今他の人が簡単です。 関数サイズ()、私はこれをどのように行うのですか? 私は基本的に$サイズを返却する。 しかし、私は技術的にする必要があり この厄介なことを行う。 そして、実際に聞くまで、私は、切断された あまりにも多くの1コーナー。 私は本当にグローバルな$表を行う必要があります。 しかし、言われていることを、アンロード)。 アンロード()は素晴らしいです。 機能のアンロード()。 私は)(アンロードを実装する方法をしたいですか? 完了。 OK。 だから、アンロード()、メモリ管理がある 完全にあなたのための世話を PHPや多くのようなもの 高級言語である。 だから、これは素晴らしいです。 地獄は我々が過去を過ごした理由のような C言語記述の8プラス週間 どうやら本当に遅い、本当に時間 数十時間に消費する問題 私たちのベルトの下で動作しますか? さて、一つのことのために、これは動作する可能性が 小さなプログラムの罰金。 それは確かに私のスピードアップ 開発時間。 しかし、ここでは何が起こるか見てみましょう 現実の世界で。 私は、このディレクトリに行ってみよう 端末ウィンドウで。 スペルチェックがあります。 予告はさておき、あなたは可能性があるため 設定の問題でこれが発生している 6か問題が7に設定してください。 あなたは厳密にする必要はありません 。PHPでPHPファイルを終了します。 あなたは、その最初の1のような行を置けば 最上部には、それが特別なラインです 基本的に見つけることを意味し、構文の PHPと呼ばれ、それを使用したプログラム このファイルを解釈する。 だから今、誰が本当にいることを知っている 私は、PHPプログラムを実行している。 私はそれと同じようにそれを実行することができます 何かがCでコンパイルされた しかし、ここでのことです。 実際に、のは再びこれを行うてみましょう。 Dropbox/pset6 /。 スペルチェックがあります。 [OK]を、0.44秒。 それより速く、この時間を得ました。 今度は、PHPのバージョンに行きましょう。 いい感じ。 しかし、どれだけ多くの時間を考える 私は営業時間に保存。 OK。 だから、実際には3.59秒、 どちら正確な音はありません。 しかし、それは、長い話を短くためだ あなたは膨大な量をプリントアウトしているとき ものの画面には、その それ自体は物事が遅くなります。 それは実際のCPUを取った何 アプライアンスがで、3.59秒であった 0.44を取ったCと​​は対照的 最近秒。 それは本当にの順番だ 大きさが異なる。 だからここでその価格は、から来ている? なぜそれがそんなに遅い? なぜPHPはそう不完全に行うのですか? ダニエル? 読者:あなたは本当になかった ハッシュテーブルを使用しています。 DAVIDマラン:私は本当にしませんでした ハッシュテーブルを使用しています。 だから私は、一種のした。 だから、連想配列です。 最も可能性の高いPHPの人がいる場合 本当にスマートな、彼らは下に使用され フード実装実際のハッシュテーブル 何かのように、CまたはC + +。 しかし。 うん。 読者:[聞こえない]。 DAVIDマラン:うん。 各機能のように、私は今書いている - 実際には、もう一度のことを言うことができます 少し大きく? 読者:各機能その あなたはより多くの完全なたくさん持っている含まれて より容量 - DAVIDマラン:だから非常に本当です。 多くの多くのオーバーヘッドたちがしていることあります 本当にのみに焦点を当てて見ていない 私はちょうど書いdictionary.php、。 これとは対照的に、全体の通訳はあり バックグラウンドで行く。 確かに、私はこのプログラムを実行し、それ コンパイルされた0と1を実行していないた 私のインテルCPU向けに設計されています。 むしろ、それは、1行に1つずつ実行していた 正確に見えるPHPコード 我々はそれを入力したい。 そして、あなたは使用するたびに インタープリタ型言語は、 実際にこの価格を支払うのですか。 それは読んでしばらく時間がかかるだろう 下へあなたのファイルの上、左から 右し、各実行 何度も何度もライン。 今、現実には、特にウェブ上で、 あなたが実際にこのプロセスを促進することができます の結果をキャッシュすることにより、 PHPコードが解釈される。 そして、それは、ウェブ上で理にかなっているので、 あなたは一人のユーザーのように持っていなければ その後、ここで私が、1,000または10,000ユーザー、 ファイルは多分初​​めて アクセスされ、それは遅いが、その後だ それははるかに高速です。 しかし、これはあまりにも、再び、トレードオフである。 と研究データのような何かのため 設定、あるいはのような大規模なもの これは、ユーザーが最終的に意志 その減速を感じ始める。 だから要するに、解釈されている言語は、 、流行に非常に非常に人気があり、 率直に言ってあなたはおそらく言語です 問題を解決するときのために達する必要があります CS50に続く。 しかし、あなたが本当にしているどのくらいの実現 ボンネットの下に付与されたために取って ハッシュは本当にそれらの過去数週間 テーブル、木、と試行、 最終的に、実際に使用されている オープンブラケットのようなものを実装し、 その私たちができるようになりました角括弧、 当たり前の感謝取る。 それでは、今、見てみましょう このWebコンテキストた。 そして、私はそこだと最後の時間に言及 PHPでのスーパーグローバルの束その 本当に関係ない コマンドラインで。 彼らは、文脈でより関連している Webコンテキストでは、PHPを使用した。 だからために、Webサーバ上でPHPを実行している HTMLのようなものを生成する。 そして、私たちは$ _GETと$ _POSTをちらっと見て、 どこに自動的にユーザーのことです あなたが提出する場合は、入力は、単に終わる Web上で。のphpで終わるファイルにフォーム アプライアンスのようなサーバー。 しかし、で簡単に見てみましょう $ _COOKIEや$ _SESSION。 素人の面では、などのクッキーは何ですか あなたのコンテキストでそれを理解する ウェブを使用していますか? 読者:コンピュータ上のファイル。 DAVIDマラン:うん。 これは、ユーザのコンピュータ上のファイルの どんなウェブサイトで植え あなたが訪問してしまった。 だからあなたは、Facebookに行くとき、あなたが行く時 bankofamerica.com、あなたが行くに あなたは、ほぼすべてに行くgoogle.comへ 世界でウェブサイトは、これらの日、 cs50.net含めて、クッキーが植えられて お使いのコンピュータに、それはある あなたの内のRAMに格納された値のどちらか ブラウザのメモリ内のコンピュータ、または 時折実際のファイルを保存 あなたのハードドライブ上の。 そして、通常はそのファイルに何が保存されている 自分のユーザー名ではありませんではなく、あなた パスワードは、通常ではない何か サイトはそうではありません限り、敏感 彼らの安全保障との良好ではなく、 それはの間で大きな一意の識別子です 他のもの。 それはあなたに植えられ、大きな乱数だ コンピュータが、あなたは考えることができます バーチャルハンドスタンプのソート等から クラブまたはいくつかの遊園地その スタッフ、その所有者が可能に サービスでは、あなたが誰であるか覚えておく。 大きな乱数のようなものですので、場合 12345678、それは明らかだが あまりにもランダムではない、として、そのことを考える あなたが訪問することをハンドスタンプ 初めてfacebook.com、それら あなたの手でその番号をスタンプ。 そして、あなたは、HTTPを話すので、あなた ブラウザである、とするためFacebookの ウェブと同じ明らかに話す サーバ、プロトコルはHTTPが言う いつでもあなたはその後訪問 それは第二のかどうかfacebook.com、 後、一時間後、次の日も、、 あなたではなく明示的に持っている限り、 ログアウトし、その効果 あなたの手を洗うようなものです。 HTTPは、あなたを提示しなければならないと言う 手が毎回あなたをスタンプ そのウェブサイトに戻ります。 何Facebookは、彼らですん その手のスタンプを見て、 彼らは123456789、ああ、と言う。 私は一目見ただけではわからない、この ケンブリッジのデビッドマランは、ある マサチューセッツ州が、彼らは彼らをチェックすることができます データベースと言って、ああ、人 そのコンピュータ上で我々は123456789を植え ケンブリッジからデビッドマランは、ある マサチューセッツ州。 彼のプロフィールそのユーザーを示してみましょう ページまたは彼のニュ​​ースフィード。 この場合は、しかし、問題はここにあります ウェブが実際にどのように動作するかです。 それでは簡単な例を見てみましょう。 それでは、実際にfacebook.comを言って行きましょう。 しかし、我々は、そこに行かせなかった前に 私は先に行くと、Chromeのを開く ここインスペクタダウン。 私は[ネットワーク]タブを見てみましょう。 そして今度は、先に行くと入力してみましょう https://facebook.com中。 我々が見ないようにし、私はそれをやっている これらのリダイレクトや廃棄物のすべて それらを通して見る時。 私はエンターキーを押してみましょう。 わかりました。 我々は要求の全体の束を参照してください。 Facebookはそこにいます。 ファイルの全体の束があります。 そして、ここで、私の言及のあたり レイテンシー最後の時間は、それはです HTTPリクエストがたくさん。 しかし、最初の1と考えられる 最も興味深い。 それでは、ここで下にスクロールさせて、 私は2番目で、ズームインします。 これは一種のことを行っている 混乱が、見てみましょう。 Facebookは私たち送信しています ものの全体の束。 しかし、ちょっと待って、面白い。 彼らは1つではなく4を植えています ここに私の手の上に手スタンプ。 のSet-Cookie、セットクッキー、セットクッキー、 セットクッキー。 そしていくつかの機能がここにあります。 それらのすべては、いくつかに言及 期限切れの一種。 そしてFacebookが望んでいるように見える 2015まで私を覚えています。 だから、おそらく時までです 私は、ログアウトする必要がありますか彼らはちょうどよ 私は自動的に仮定し 戻って来ない。 だから、実際にまともだ 時間の長さ。 そして、いくつかの他のがあります ここで起こって物事。 このクッキーは、強制的であるように思われる それは1970年に失効したと言って削除 前にクッキーが存在していた。 だから、ブラウザだけで起こっている [OK]を仮定すること、それはようなものだ ハンドスタンプを洗浄する。 しかし、今、私のブラウザが行ったときに 後続の要求 - 私が先に行くと、これをやらせる 何度もリロード。 今、私はに戻ってスクロールしてみましょう トップリクエストと下る ここで、ヘッダを要求します。 これに注目してください。 だから今、私はしないレスポンスヘッダの下だけど、 それはリクエストヘッダを言う気づく。 予告私のブラウザの一部として リロードを打った後、その要求があります 以下の少なくとも送ら 情報。 - クッキーを設定しますが、クッキーではない。 だから、これはライン、HTTPヘッダです 、話すように私のブラウザは、ソートです 私が提示し、それを知らずに Facebookの検査のために私の手。 したがって、これらのクッキーは、することができます 何のためにそれから使用される? あなたが誰であるか覚えているか、どのように覚えておく あなたはそこにしてきた何度か、 本当に何も。 だからここcounter.phpです。 そして私は、フォントを拡大表示してみましょう。 私はこのページを再ロードし、その都度、予告 それは何度も思い出すのは 私はそこにしてきた。 まあ、それはすべてが印象的ではありません。 、ちょうどそのタブを閉じてみましょう そして今度は、に戻りましょう http://localhost/counter.php。 ああ、それは面白いです。 それはまだであっても、思い出した 私はタブを閉じても。 と率直に言って、私はブラウザを閉じた場合、 私は、正しい方法で実施された場合 それでも、このユーザーであることを覚えることができる 彼または彼女は誰が初めてだったし、 一度だけ私はChromeのメニューに入るその こっちはここにあり、とに行く 履歴、閲覧履歴の消去]をクリックして、 皆さんの中には中に持っている可能性がある 過去にのみ、クッキーます 実際にWeb中に削除され 開発。 だから、我々は行く場合 - それでは、ここでgeditのクローズアップしてみましょう。 そして、我々はこのファイルになりました行けば。 私たちに行こう バーチャルホスト/ローカルホスト/公共、とさせて頂きます counter.php。 これはかなりあることに注意してください 簡単なプログラム。 これは非常にシンプルなウェブサイトです。 だから、ファイルの先頭 ただのコメントです。 しかし、ここでは、可能性のある新しいラインです 、P-セット7ですでに見てきた にsession_start()。 これはPHPコードの行であること 基本的に、Webサーバを作る伝える 手をスタンプして作成してください ハンドスタンプを確認してください。 つまり、すべてのその行が何だし、それ 私たちのために、そのプロセスのすべてを行います。 その後、私は持っているに気づく ここで2分岐します。 場合は、この内部カウンタキー と呼ばれる特別なグローバル変数 $ _SESSIONが設定される - つまり、 いくつかの値があるとすれば - のは、それを得ること、それがローカルに格納 変数$カウンタと呼ばれる。 他に、のは$カウンタを割り当ててみましょう デフォルト値の0。 今ここに、PHPの一つの側面です 祝福と呪いの両方。 PHPは少し雑です。 だから、一方でC言語では、何だろう カウンタの範囲は、されている どちらかここか、ここ? これは、閉じ込められたであろう これらの中括弧に。 何を思う? PHPにおいて、それもそれらの外部に存在する 中括弧、ここ、ここ、 ここ、ここ、と でも、下方に。 だから私は、これは意味で祝福であると言う 君は考える必要がないことを 我々は数週間前とハードとして。 しかし、それはまた、その中で呪いのビットです あなたがで変数を使用に関係なく 少なくともこのようなプログラムでは、PHP、 それはのためのグローバルにアクセス可能です 良くも悪くも。 だから、今では覚えておかなければならない あなたの変数が未定義されない場合があります。 あなたが他の場所に定義されている可能性があります。 しかし、私は最終的に何をするつもりですか? 私は、そのグローバルの中に格納するつもりです の値として変数 カウンターキー結果 カウンターをしてプラス1。 だから、これは単なる算術です それはない そのカウンタの増分。 そして、私はそれを格納しているという事実 ここに戻っての値は手段にある 本質的にデータベースを更新 ユーザー123456789があったことを覚えている ここに2回。 そして、私は次回再びそれを行うときに私 ページをリロードすると、チェックするために起こっている 私の手のスタンプと言って、ああ、 ユーザー123456789は今持って ここに3回あった。 そしてどのようなPHPと類似の言語 私たちのためにやっている彼らは把握されている どこでどのようにアウトとどのくらいの間 この特別の値を格納する スーパーグローバル。 そして、このスーパーグローバル次回I ページが魔法のようなものです訪問 事前に入力、その値が入力 あなたが訪問した最後の時間があった 秒前だったかどうか、週 前、または2013年に、我々は今、話している 2015年頃。 PHPとWebサーバは、世話をする あなたのためにすべてのことを。 読者:[聞こえない]。 DAVIDマラン:PHPの変数である しない限り、本質的に、常にグローバル 、関数の内部でそれらを宣言 その後、彼らはにローカルである 機能のみ。 しかし、私はいずれも書かれていませんでしたので、 関数は、彼らは今効果的にある ここに私の全体のファイル全体でグローバル。 読者:方法はありますか 彼らは地元の作るには? DAVIDマラン:任意のはありますか 彼らは地元のようにする方法はありますか? 機能のみにそれらをラップする。 の最新バージョンのどの PHPは、あなたがでこれを行うことができます 無名関数。 でその上で、より多くの Javaスクリプトのコンテキスト。 しかし、短い答えはノーです。 長い答えはイエスです。 ニース。 グッドクイズの質問。 わかりました。 だから最後に、ページ自体はある 実際にはかなりシンプル。 かつて私は思い出す、PHPモードを終了していることに注意してください このようなもののすべてのダウンという 下はちょうど唾を取得しようとしている ブラウザに生出。 私が送信したいので、それは、結構です ユーザーはいくつかのHTMLが、私はしたいですか 動的にHTMLを更新します。 そして、私はこれを行うことができます1の方法は、ソートすることです 非常に迅速にPHPに戻ってドロップの モードは、オープンブラケット疑問符 等号、次に出力値 カウンタの。 それとも、これは少し不可解に見える場合、この 等号は、ちょうど実際にいくつかある このためのシンタックスシュガー のprintf($カウンタ)。 しかし、率直に言って、それはほんの少し醜いです とタイプに少しうるさい。 だからPHPは非常にうまく、この機能を提供しています あなただけのより多くのそれを言うことができる場所 簡潔に同じ方法である。 だから下に何が起こっているの フード? 迅速にネットワークを見てみましょう counter.phpはこちらタブ。 そして、私が先にと最初に手放す あなたのクッキーをクリアしてみましょう。 以来レッツ明確な閲覧データ 時間の初め。 今度はこっちに戻ってみましょう。 今度は、ページをリロードしてみましょう。 そして、私はゼロに戻ってきた。 私の手スタンプは、洗浄されているので、 私は今、新しいクッ​​キーを取得します。 私はネットワーク]タブを見て、確かにあれば 気づく、レスポンスヘッダを見て アプライアンスは私を送信していること 名前が多少あるクッキー 任意ですが、種類の 合理的に、PHPSESSID。 そしてそれは、これは本当に私を送っている 大きな乱数。 これは、かなりの数ではありません。 これはかなり進数ではありません。 それは、英数字の文字列の一部のようなものだ しかし、おそらくそれは、ランダムです。 そして、それはそうに手のスタンプです 私が参照していることを話す。 一方私は、リロードしてクリックした場合 私の第二は、この二行目を見て リクエスト、私の要求することになりまし気付く ヘッダはPHPSESSIDは、これを等しく含む ではないのSet-Cookieが、ちょうどクッキー。 そして、それは私のブラウザのプレゼンテーションです 私の手スタンプの。 だから今ティーザーとして、我々は多くを話しましょう この約一週間かそこらで、しかし どのような方法で、これはあなたを作るん 脆弱な、あなたのFacebookアカウント 脆弱な、そのような他の アカウント脆弱な? 読者:誰かがあなたのクッキーを持っている場合。 DAVIDマラン:ええ、誰かもし あなたのクッキーを持っています。 私はずっとあなたのいくつかのように、本当に意味 のようなクラブかにしようとしたかもしれない 遊園地、あなたが何かをしようとした場合 とはいえ、これはスタンプをコピーする 後方に別の人の手の上に、 その後、彼または彼女は次のようにそれを提示 自分自身、それが実際に見ていない場合 その後同じ、123456789、ウェブ サーバーは明らかだけに起こっている そのユーザーがあなたであることを信頼しています。 そして、これは確かに基本です 脅威クッキーを使用するすべての時間 誰かがちょうどそうに偽装している場合理由 数字から何それ、あなたのクッキーを話す どちらか本当にそれをコピーすることによって、ある お使いのコンピュータを見て し、[OK]を、のようである。 DavidさんのクッキーはJJ3JIKあるなど、 その後、彼らは知っているのに十分スマートだ それを送って手動でソートする方法 ブラウザからまたはからクッキー 彼らが書くプログラムは、彼らが完全にできた あなたのようにウェブサイトにログインします。 それは難しいことをふりをするということではない 誰か他の人たちは、pのセットを再訪しない限り、 何を導入された2つの、? AUDIENCE:暗号。 DAVIDマラン:少し 暗号のビット。 少なくとも、簡単な暗号化、 標準版が、暗号 それにもかかわらず。 少ない。 あなたのすべてを暗号化する場合、だから、結局 あなたというものを使用して、これらのヘッダー 今、より親しまSSLなどの知っているかもしれません セキュアソケットレイヤー、またはhttps://のURL、 その後、これらすべてのものの私たちがしてきた をちらっと見て、実際には暗号化されている これは、それはあなたのようなものだということ ハンドスタンプを読み取ることができません。 唯一facebook.comは、缶、google.com またはこの場合、アプライアンスができ その手のスタンプをお読みください。 悲劇的に、そして再びけれども、これは NSAのものとあまりにも適切な 後半にも、SSLは壊れやすいです。 そしてそれは実際には難しいことではありません でも、その暗号を解読する。 あまりない暗号化をクラッキングすることで、 しかし、だましによって 解読にブラウザ 途中データ。 しかし、再び、私たちはあなたをいじめるよ その前に長いと。 今のところ、ただ恐れる。 それは本当の悲劇的なものだ。 わかりました。 そう、ここは今、私たちを残していますか? さて、これを実行してみましょう。 それでは先に行くとクイックを見てみましょう 我々は休憩を取る前に、ティーザー。 と私は、我々は少し長く残ると思います 今日、我々は飛び込むつもりだ ブランドの新しい、セクシーな何か、その意志 さらにあなたの食欲を刺激。 だからティーザーです。 そう、SQL、我々は話をし始めた 今までので、簡単に最後の時間。 あなたは本当にあなたの手が汚れて取得します P-セット7におけるそれのいくつかを持つ。 と素人の観点から、どのようなSQLを行います - S-Q-L - あなたのために何? 何それ? うん。 観客:みましょうあなたのデータにアクセスする。 DAVIDマラン:うん。 それはあなたのアクセスデータましょう データベース内。 構造化照会言語。 そして、これは本質的に プログラミング言語。 それの特徴があること 私たちも、授業で使用することはありません。 しかし、あなたが効果的にできる 関数を定義する。 これらは、保存されていると呼ばれる SQLでの手続き。 しかし、我々は非常に簡単で、それをしておこう いくつかの基本的な操作のためにそれを使用 、データを選択データを挿入等 データを更新し、データを削除する。 そして、あなたは本当にデータベースと考えることができ、 SQLデータベースのように、同じように Microsoft Excelのもの。 SQLは、リレーショナルを参照するため、 データベース、どこで 関係はただのテーブルを意味します。 行と列。 だから、何でもあなたはスプレッドシートに置くことができます このやGoogle Docsのような、 あなたがSQLデータベースに入れることができます テーブルを宣言すること。 今、どのように実際にアクセスするのですか その情報? さて、コマンドまたは このようなクエリ。 SELECT、INSERT、UPDATE、およびDELETE。 そしてほとんどの場合、それらは あなたがする必要があります4成分のみ かなり強力に何かをする 問題に7を設定します。 すぐに戻って一日では、実際にだろう データベースと対話する で黒と白のターミナルウィンドウ このような点滅プロンプト。 そして、我々は上で実行しているデータベース アプライアンスがあると、MySQLと呼ばれている フリーでオープンソースのデータベースエンジン。 あなたがGoogleやウィキペディアを読めば 記事には、名前があることを知っているよ いくつかの移行のビット Linuxのバージョン。 マリア·データベースは、実際に これはMySQLの話をするフォーク。 長い話を短く、OracleがMySQLを買収した。 Oracleは、大企業だ。 人々は、それがあると心配されています もはや、非常にオープンソースとして残っていない これはただのMySQLののコピーです まだ無料、まだオープンソース、および デフォルトではFedoraのLinuxにインストールされています。 しかし、これは痛みの一種である と知り合い首 データベースこの方法です。 だから我々はCS50アプライアンスに含める と呼ばれる無料のオープンソースのツール phpMyAdminに。 単なる偶然その それは、PHPで書かれている。 根本的なはありません ここで、PHPの必要性。 しかし、これは単にWebベースのツールです。 我々は内に設置、無料でダウンロード 私たちが持つことができ、アプライアンス、 を備えたグラフィカル·ユーザ·インタフェース P-セット7データベースとを探索する その新しいデータベースを作成するには、 あなたがしたい場合は、あなた自身の最終的なプロジェクトのために言う のような、そして最終的に作成 CS50ファイナンスのような動的なWebサイト つまり、データを照会することを可能にし、 データを動的に更新します。 あなただけ使用する必要はするつもりはない 単純なテキストフ​​ァイルやCSV。 実際には、スマートデータベースを使用することができます プログラムはあなたがより多くを実行できるように ただ読むより洗練されたクエリ 直線的にすべてのものを通して。 だから例えば、これは我々が与えるものです P-セット7用の箱から出します。 これは明らかに、少なくとも持つテーブルです そのうちの1つが3列、 ユーザ名の一つは、ハッシュである やその他々はIDです。 しかし、興味深いのは、わずかに ここ1思考を引き出す、ユーザ名 右、おそらくすでにユニークです? 私がもし、任意のウェブサイトの最も意味 あなたはそこに、ユーザ名を持って 2シーザーズにすることはできません。 2 malansが存在することはできません。 2 jharvardsが存在することはできません。 そのユニーク。 そうでなければ、彼らは知っているしない それが実際にあるjharvard。 だから何も動機かもしれません 左の番目の列を持つ のように見えるがあると呼ばれるIDを、 同様に、一意の番号? それは少し冗長に感じている 一見私には。 なぜそれが持つ魅力的かもしれません ユニークなユーザ名だけではなく、 一意の番号だけでなく、? 読者:彼らが持っている可能性が 同じパスワード。 DAVIDマラン。人々が持っているかもしれない 同じパスワード、確認してください。 それは絶対に発生する可能性があります。 しかし、彼らは、このユニークなユーザ名がある場合は、私 それは本当にないと主張するだろう 問題として、彼らは彼らの中に入力した場合のため ユーザ名、私はチェックする必要があり、その パスワード、その彼らのハッシュ。 なぜ他? 観客:より速く検索する。 DAVIDマラン:より速く検索する。 なぜですか? 観客:I​​Dはただ一つです。 DAVIDマラン:IDはちょうど1文字で、 または具体的には、それは数値の、 そう、それはおそらく32ビットです またはそのような何か。 一方で、ユーザー名、明らかにジェイソン 並べ替えがあるハーシュホーンのアップ 途方もなく長い、それがために起こっている 文字列に私に多くの時間がかかる 多分H-I-R-S-C-H-H-O-R-Nを比較し、そして / 0またはそのような何か、の順序で ただとは対照的に、ジェイソンを検索するために 私のユーザ番号2を与えると述べた。 これは32ビットです。 これは、単一のintだと あなたが比較する必要があります。 そして実際、それは正確な理由のデータベースです に一意のIDを割り当てる傾向がある これらの行。 現在、他のデータ型は何がありますか INTに加えて、明らかに このような文字列? さて、より適切であると、 のようなSQLデータベース、 MySQLは、CHARフィールドがあります。 とchar少し誤解を招く シングルCHARではありません。 MySQLデータベースのcharフィールドがある 1つ以上の文字が、それはだ 固定文字数。 例えばだから、私はの所へ行く場合には あなたが既に持っている可能性があるphpMyAdminは、または すぐに問題が7を設定し、私は行きます 私のデータベースに、ちょうど楽しみのために、 と呼ばれる新しいテーブルを作成してみましょう ちょうど2列でテスト。 私は、[Go]をクリックします。 そして、これはかなり慣れてます、 あなたがいじくり特にとして 自分で周り。 ここでは、作成するIDを入力可能性があります int型の新しいテーブル。 しかし、ここで私がするためのユーザー名を入力する可能性 それ以前の表を再作成してください。 そして、私は全体の束を持って注意してください から選択するタイプの。 そして、これはあまりにも、なぜphpMyAdminの ちょっといいです。 それはそのあなたの中に自己学習のようなものだ だけの種類のポイントしてクリックし、することができます ドロップダウンメニューを見て、から推測 その何の権限SQLはあなたを与える。 実際、私は、CHARを選択した場合、私はその後、 長さを指定する必要が、またはどのように 多くの値、どのように多くのCHARの。 だから、非常に一般的な値は、のようなものである 255が、それは少し長いです。 一般的にユーザ名の8です。 しかし、それは、これらの日少し小さいです。 だから、これは設計上の決定である。 それは、8文字以下です 32、255 1000? それは本当にあなた次第です。 しかし、CHARフィールドは、固定数である。 だから、数が少なすぎる選択し、あなたが親切なのだ あなたが長いユーザー名が必要な場合はネジ止め。 あまりにも多くを選択し、何の マイナス面? 観客:[聞こえない]。 DAVIDマラン:それは無駄だ。 あなたは大きなを持っている場合だけで、C言語のように あなたがしている、必要以上にメモリチャンク ただ時間を無駄にし、スペースを無駄にすること。 だから代わりとして、存在する することでこの問題を解決し、VARCHAR、 、固定長の長さをしないように処理すること しかし、最大長、および使用するなど、 変数の文字数は、 あなたのように数だけCHARのを使用する傾向がある 実際に必要。 それは完璧に聞こえる。 なぜ我々は取り除くしないでください CHARデータは、[種類? 何の欠点かもしれません 聞こえるのVARCHARを使用して、 それは素晴らしい勝利だような? うん? 観客:[聞こえない]。 DAVIDマラン:OK、いい。 だからあなたのすべてのデータが同じであれば、 長さは、懸念は何ですか? 読者:あなたが無駄にしているので それらすべてを伝えることで、データ。 DAVIDマラン:だからあなたのすべてのデータがある場合 同じ長さは、しかし、私が主張したい その最大の長さを指定する VARCHARに違いはありません CHARに固定された長さを指定する場合 あなたは、事前にその番号を知っている。 しかし、そこ確かであり、私は一種のよ その答えから現実を抽出 できたマックスは、まだあることを 特にあなたの場合、いらいらすること だという人の名前に遭遇 あなたがしなかったことを異常に長い 期待しています。 そしてそれはまた少し効率的です 実際としてのVARCHARで検索する 、検索文字になるように反対し、特に たくさんあるし、長いテーブルのための 大量のデータ。 だからここでも、テーマ別で再び 明白な選択肢はありません。 だからあなたに他の感覚を与えるために 興味がある可能性のあるデータ·タイプ P-セット7またはのいずれかで 将来は、INTがあります。 これBIGINTは、そこ 長い長いようなものです。 それは64ビットになる傾向がある。 あなたが表示されますDECIMALは、そこ くらいです問題セット、 問題のクリーナー答えたち フロートで発生した浮遊 ポイント不正確。 して、DateTimeがあります。 持つデータ型は、文字通りあります 日、月、年のように見えるためには、 と時、分、秒。 しかし、SQLデータベースも持っている 物事は我々のインデックスと呼ぶことにします。 そして、インデックスを使用すると、何かである にテーブルを作成するときに指定 検索やその他の操作を行う より効率的。 具体的には、と呼ばれるものがあります あなたはできるプライマリインデックス 次のように宣言します。 私たちはとのあなたのためにこれをやった 私たちはあなたを与えるusersテーブル。 私は、手動で再作成された場合でも、注意してください ここで与えusersテーブル ITユーザーの名前。 私はすでにIDを指定。 私は、INTを指定しました。 私はとユーザ名を指定 最大32文字。 しかし、我々は非常にこの中でスクロールし続ける場合は、 広い窓、そこに気付く 私が指定することができ、他のものの束。 一、私は、属性を指定することができます のような、何、これを知っている INTは、符号なしにする必要があります。 私は負の数を望んでいない、 それでは、それがUNSIGNEDしてみましょう。 NULLはここでは関係ありませんので、 私がためにあらゆるユーザーをしたいですか 一意の番号を持っています。 私はそれがnullにすることはしたくない。 しかし、これは興味深い。 私はID​​はどちらかであることを指定することができます 原発このデータベースのキーか、だ ユニークな、あるいは、インデックス付き、またはフルテキストだ。 だから、今日の目的のためには、長い話 短い主はこれがしなければならないことを意味します 両方の概念的かつ技術的にも 我々は独自にするために使用するフィールド ユーザーを特定。 我々はユーザーを検索するときので、これが一種で で、主にそれらを見て約束の そのユニークな識別子。 データベースが、もしあなたが保証されます それができない、ユーザ番号3を持っている 物理的に別のユーザーを挿入 その同じ番号3。 データベースだけで拒否します 変更を保存します。 あなたは可能性があるので、良いことだこれは 自分から身を守る。自己 代わりに、ユーザー名に対応する。 第2行目、リコール、 ユーザー名フィールドである。 だからここ番目の行は、ユーザ名であり、 我々ははるかに残っに行ったように。 だから、他に何私が指定したいのでしょうか? 私は、SQLによると、許可されていないよ、 2主キーを指定します。 あなたは、関節のキーを指定することができます 両方のフィールドを見て、彼らはできない 個別に主キーであること。 だから、問題外だ。 だから私は選択している場合があります? さて、UNIQUEは、その精神においては似たものである これを指定する主キー フィールドは一意でなければならないが、それはだ 1であることを行っていない 私はすべての時間を使用しています。 そして、我々はこのすべてのものを使用するつもりはない 再びどのような理由のための時間? それがあれば、潜在的に遅くなります それは長いユーザー名です。 それだけで時間の無駄だ。 INDEXは、一方、それはだことを指定します ユニークになるだろうが、私は好きではないと思います あなたの下に、あなたの魔法を動作するように それはより速く私ができるようにするためにフード このフィールドを検索してください。 だから、これはおそらく、ここでは関係ありません。 usernameには、私が主張したいこと UNIQUEは良い答えです。 しかし、我々はより多くのユーザーを作ったとします 単なるユーザ名よりも面白い、 ハッシュ、およびID番号。 私たちは人々にフルネームを与えた場合はどうなりますか? 私たちはそれらを与えた場合にはアドレス そしてそれらについての他のデータ? さて、どうかを指定することで列 データベースがあることを意味し、インデックスが作成され MySQLは、またはOracle、または何のデータベース 使用している、その魔法を動作するはずです ファンシーデータのいくつかの種類を使用 木のような構造、あるいはトライ、またはA ハッシュテーブル、または保証するもの あなたが使用してデータを検索するときに その特定のフィールドを選択 - のような私に皆を示すこと オックスフォードストリートに住んでいます。 そのようなクエリ。 事前に指定している場合は、その あなたは、そのフィールドにインデックスをしたい 検索がはるかに速く、多くなります。 あなたは、インデックス、最善を指定しない場合は あなたが行うことができた場合、線形探索で それはソートないです。 しかし、あなたは、インデックス、スマートを指定した場合 データベースを作った人々 - 今の木を知っているあなたのような人 および試行とハッシュテーブル - 自動的にそのようなデータを構築します ことを確認するためにRAM内の構造 これらの検索は、はるかに高速です。 FULLTEXTは一方で、精神が似てい しかし、ワイルドカードを行うことができます 検索は、のような私に皆を示すこと で始まる路上での生活 何らかの理由で文字のO。 ワイルドカード検索を行うことができます そのような。 または、ショーのような、より説得力のあるもの 私の単語を持っているすべての人 - 名前が開始され、誰も私を見る 特定の文字で。 あなたは、キーワードを検索することができます このようにして。 わかりました。 そのため、設計の機会 そこに潜在的に。 他の人があることを私はよ で私の手を振る。 それはあなたが持つことができることが分かった 別々のストレージエンジン。 そして、これは我々が必要以上に難解である 確かに問題のために7を設定します。 デフォルトでは、皆さんが使用している InnoDBはと呼ばれるもの。 あなたは、このどこかの言及が表示されます phpMyAdminののインターフェース可能性が高い。 しかし、他のデザインがあることを知っている ポテンシャルのある決断 関心は、最終的なプロジェクトを来れば あなたは、Webベースの何かをする。 しかし、ここではこれを実行してみましょう。 それでは先に進み、上でこれを置くよう 物語のためのティーザーとして画面 あなたが関与する、ルームメイト、 ミルクのグラス。 それでは2分を見てみましょう またはので、ここで破る。 あなたの周りに固執することができればと、のは来るように 背中、SQLをもう少し見て、 その後、JavaScriptを使用してのビット P-セットを念頭に置いて8を。 わかりました。 それでは、あなたが考えて取得させ 非常に簡単に発生する可能性がコーナーケース データベースを使用することの文脈において、又は 率直に言って、でも現実世界の物事を使用して ATMはお金を得るのが好きです。 だからここの冷蔵庫です。 あなたがあまりにも1を持っているとします あなたの寮やあなたの家。 そして、あなたは1ルームメイト、両者のを持っている あなたは本当に、インスタンスのためのミルクが好きです。 だから、1日のクラスから帰ってくる。 彼または彼女はまだ戻っていません。 あなたは冷蔵庫を開く。 あなたは本当に牛乳の大きなガラスを求めています。 全く牛乳はありません。 じゃあ、どんなことしてるの? あなたは冷蔵庫を閉じます。 あなたがあなたの鍵をつかむ。 あなたは、正方形に出かける。 そして、あなたはそれらに、CVSで並んでゲット 常にセルフチェックアウトの事、 実際よりも時間がかかる レジ係を持つ。 とにかく。 さて、一方、ドットドットドットお ルームメイトは帰宅し、彼または彼女 同様に憧れを持っている いくつかの牛乳。 そこで彼または彼女は、冷蔵庫をオープン 内部を見て、ああ、いまいましい。 いいえミルクません。 そこで彼または彼女が出ヘッド、行くことを起こる だけだった他のCVSへ 何らかの理由で離れてブロックし、彼または 彼女はいくつかの牛乳を買うために並んで取得します。 一方、あなたが家に来て、彼または 彼女は家に来て、何をすべきか あなたが最終的に持っている? 倍の牛乳。 しかし、あなたが本当に好きではない 牛乳それだけ。 だから今は、今ではあまり牛乳を持っている そのうちの一つは、ただ酸っぱい行くつもりされている いずれはね。 だから、これは本当に悪いの問題である。 右? だから何が起こったのか? だから基本的に、これが一種である とんでもない例。 しかし、ボンネットの下に、私たちは持っていた ここに起こるあなたの両方がチェックされている のいくつかの作品の状態 メモリ、冷蔵庫。 あなたの両方の状態をチェックし いくつかの変数の。 もしどちらも結論を描きました その後に行動していること。 しかし残念ながら、あなたのルームメイト間 店にいた、その状態 変数が変更、彼または彼女が戻ってきた 今の状態を変更したいが、 それは、すでに変更されているの 彼または彼女に。 そしてもちろん、彼または彼女は持っていません 彼らは知っていた場合、ストアに行って あなたが途中ですでにあったこと。 だから、現実の世界では、どのようにしてできた あなたが持っていると仮定して、この問題を回避する 冷蔵庫は、あなたがルームメイトを持っている、 あなたが実際に牛乳が好き? 観客:通信。 DAVIDマラン:通信。 [OK]をクリックします。 しかし、どのように通信するのでしょうか? 観客:メモを残して。 DAVIDマラン:右、ノートを残しましょう​​! いつものために、メモを残す ショーのファン。 大丈夫なので、常にメモを残したり、 南京錠か何かのような真に入れる あなたを保持冷蔵庫 の状態を検査からルームメイト その変数。 今、なぜこれがに密接可能性があります 問題は、7、またはATMをに設定します。 さて、ATMの場所で世界を想像する あなたは、ATMに上がることができるかもしれない ここで、マシン、ここ他のATM。 そして、これはかなり頻繁に発生します。 そして、あなたは2つのATMカードを持っていたとします これを得ることができる。 そして、あなたは、両方のマシンにログインする 効果的に同時に、うまくいけば 誰のを見ながら。 そして、あなたはあなたの暗証番号を入力する 大体同時に。 そして、あなたは残高照会を行う あなたが持っているどのくらいの現金を確認します。 そして、あなたが、100ドルを持っているとしましょう あなたのアカウントに残って。 そう本質的に同時に、あなた 1、ゼロ、ゼロ回答を入力します。 そして、あなたは、うまくいけば、いくつかのお金を取り戻す。 しかし、あなたはどのくらいのお金を取り戻すかもしれない? 一日の終わりに、今のコンピュータ、 彼らはと話をしている場合は特に サーバーには、必然的に物事をしない 期待の注文中。 そうあるために、何が起こるかとします そこにどのようなネットワーク速度の問題 ある、あるいはCPUの問題がありますか、 そのようなこと、あるとし 最初のATMはあなたのバランスをチェックし、 ああ、この人は100ドルを持って、見ている。 しかし、その後、気を取られますので、多分 バックアップが起こっているので、それはだ 減速。 それとも、ネットワークを確認しながら、 接続が少し遅くなった理由 これはちょうど起こる。 彼らは、物理デバイスだ。 だから一方、第二のATMです 同じ質問をしている。 ダビデはどのくらいのお金を持っているのでしょうか? 100ドルがその答えです。 しかし、最初のATMはまだしていないため、 メッセージは、両方の、100ドルを差し引く送ら ATMは銀行の金庫室を視察してきた、 今は100ドルでありますし、見て 両方のマシンは、潜在的にある 答えを吐き出すつもり。 さて、これはある意味で、あなたに最適です 銀行が最終的に何をするかもし でマイナス​​100に金額を変更している あなたと同じ変数を設定する 0に等しいの銀行口座、対照的に、 やってマイナス100。 今、銀行のために最悪の場合 - や銀行のための最高の内、一方で、 彼らはあなたに200ドルを与え、 あなたの銀行口座になりました負示し 本当にない100ドル、 すべてであなたに利益をもたらす。 しかし、ポイントは、このレース 取得2ルームメイトの条件 牛乳、または現金を取得しようとしている2台のATMのための ボールトの状態を変更 同時に存在するすべての データベースを持っている時。 今問題に、この問題を7に設定 あなたが購入した場合という意味で生じ Facebookの株式、その後、用 あなたは第二のシェアを購入するインスタンス Facebookの株価は、あなたが行う必要がある プログラマとして決定。 更新する方法を決定するために、 データベースは、オッズはあなたがしようとしているされている その株のために1行があり、この これを実装する1つの方法である。 そして、あなたはの1のシェアを持っているつもりです その株式のティッカーシンボルであり、FB、 このユーザー名、またはこのユーザの ID、一意の識別子。 しかし、同じ話はここで発生する可能性があります。 あなたはSQLでSELECTを行う場合は、表示されますように あなたが見るときに問題に7を設定し、 ああ、ダビデは1シェアを占めている Facebookの株式の。 私は今、この2株とするように変更してみましょう、 彼が購入したいので、 第二共有しています。 しかし、ダビデは、実際に2を持っていたとします ブラウザウィンドウを開くか、あるとし それは2配偶者との共同アカウントの、 それらの両方が実行しようとしている 同じ操作、そこにも、 可能性があることの決定のために存在し 以前に基づいて行わ 世界情勢 - アカウントは、1シェアを持っています - 今、人々、あるいは両方のサーバーは、両方の 2株にインクリメント言ってみてください。 しかし、このケースでは、充電しているかもしれません 私は、両方の株式のためのお金が、 ちょうどその1度にインクリメント。 だから一言で言えば、根本的な問題 ここでは、冗談と同様に残して約 注意、または、その上に南京錠をかけ、ある 2人、または2スレッドの場合 - バックスクラッチに思う - いくつかの変数の状態を調べることができます してから、その変数を変更しようとすると、 しかし、これら二つのことで発生しません。 同時にしかし中断得ることができます データは、CAN、起こって他のものによる 非常に奇妙な状態になる。 そして、あなたが利益を得ることもできますし、苦しむことができます マネーの例の意味で。 だから、問題に7を設定して、私たちはあなたを与える ロングコードのこの1行、 話を短く、これを解決します MySQLでの問題。 ないこの超長命令 でも上の1行に収まら ここで画面が確実にあなたの操作 アトミックと呼ば​​れるものです。 それをすべて一度に起こり、または それは全く発生しません。 この非常に長いフレーズはできない 部分的に中断されます。 そして、何それがないことは、文字通りです それは言う。 いくつかのテーブルに以下を挿入します 3フィールドこれらの特定の値、 しかし、重複キーに、 挿入をしない。 更新を行う。 だから、これはSELECTとやってようなものです 同時にいわば挿入します。 そしておそらくキーは何ですか ここで言及されている? それが判明し、この中に表示されます 問題は、7の仕様を設定 我々は、ユニークキーがあるように宣言した この特定のテーブルの上になるように あなたが複数の行を持つことはできません と同じユーザーの 同じペニー株式シンボル - ここで、この例では、DVN.Vです 私たち愚かなペニーストック 仕様でを参照してください。 我々はそれが一意であることが宣言されたので、 これが意味する場合は、あなたということです 重複した行を挿入しようとすると、している 代わりにすることなく、それを更新する予定 誰が変えるチャンスがある 世界の状態のいずれか。 だから、要するに、これは確実に 物事はアトミックです。 より一般的にかかわらず、データベース MySQLのような - あなたは、この機能を必要としない 7 P-設定されますが、ために念頭に置いて保管してください 未来 - 取引と呼ばれるものをサポート、 あなたが言うことができる場所 文字通りトランザクションを開始します。 その後、実行することができます 2つのSQLステートメント。 あなたが見るよう、SQL文、 P-セット7で、少し見える このような何か。 アカウントと呼ばれるテーブルを更新します。 何に等しい残高]列を設定する 現在残高]列 マイナス千ここ数です ユーザIDのような口座番号、 2に等しく、[更新] アカウントは、ドットドットドット。 だから、普通の言葉で、これら二つは何をすべきか クエリは、でやっているように見える 銀行の現実世界の感覚? 観客:貯蓄への転送。 DAVIDマラン:その通りです。 1から資金を移す 他のアカウント。 そして、これは、あなたもう一つの例である 実際にこれらの二つのことが起こるしたい か起こらない。 あなたが何かに取得する必要はありません それらの中間の、潜在的に台無しに 数学、または台無しにどの程度 あなたが持っているお金、あるいはどの程度 お金銀行があります。 それでは、取引については本当にうれしいです MySQLでそれであり、 より一般的に、それは彼らのデータベースをある 実装されたし、スマートな人々 これらの機能は、作成する方法を見つけ出す それらのものの両方が起こることを確認してください またはまったく。 そして、あなたは本当にために志望している場合 上の人々によって使われているウェブサイト キャンパス、現実の世界で人々は、そう スタートアップ意味で何か、 これらは種類があり 設計上の決定、その これまでに非常に重要になります。 そうでなければ、あなたを失う、データを失い始める ユーザー、または最悪の場合には 我々は潜在的に、ここで見てきました お金を失う。 ので、もう一度、問題のあるセットでその詳細 7だけでなく、おそらくいくつかのために 最終的なプロジェクトで使用。 それでは、私たちが持っていた画像を変更しましょう ちょうど1以上の方法で、前の瞬間。 だから、私ができるなら、私が実際に見てみましょう - いや、それは逝ってしまった。 そこである。 我々は前回したところこれがある。 そして、それは我々が投げるつもり判明 ここでミックスに1より多くの事 - JavaScriptのと呼ばれる言語。 そうJavaScriptは実際にフィット この作品に - と私は非常に十分な余地を残していなかった、 これはスケールするようになりましではありません。 [OK]を、これは本当に哀れです。 [OK]を、だからJavaScriptの。 わかりました。 私は実際にそれをひどい仕打ちをしています。 わかりました。 そうJavaScriptは別のプログラミングです 言語、私たちの最後の、それは場合に役立ちます ずっとそこではないことを安心させる ここ消火栓の。 そうJavaScriptはまた、解釈されます そうしないことを意味言語、 0と1にコンパイルします。 あなたはそれを実行します。 しかし、何がとは根本的に違う JavaScriptは通常、ということです ウェブサーバー上で実行しないでください。 それがで実行されません。 アプライアンス自体。 むしろ、それは、ユーザによってダウンロードされ 自分のブラウザにHTTP経由で - クロム、サファリは、Internet Explorer、 Firefoxの、どのような - そして、これを実行し、ブラウザの 特定のプログラミング言語。 それほど明確であるためには、PHPはこれまでされている いずれかのコマンドラインで実行 サーバー上の私たちの黒と白の窓、 アプライアンス、コンピュータのような アプライアンスのような、又は、されているの ウェブ·サーバによって実行 コンピュータ上で実行されている。 しかし、ここでのテーマは、これまでのところは、PHPで だから、サーバー側を実行した ユーザとユーザのブラウザ PHPコードの行を見ることはありません。 実際には、これまでのブラウザを開くと、 あなたのウェブサイトまたは別のあなた 実際にあなたのウィンドウにPHPコードを参照してください。 誰かが台無しました。 それがあることを意味するものではないですので、 直接ブラウザに送信。 それが実行され、オンにすることになっている HTMLのようなものに。 しかし、JavaScriptは本質的に 反対。 これは、典型的には、内部で実行されることを意図しているの ユーザのブラウザウィンドウの。 とウェブサイトのどのような使用 JavaScriptをこれらの日? 文字通りあらゆる人気のウェブサイトのように。 それはおそらくあなたたちのすべてのウェブサイト JavaScriptを使用して毎日使用 最も単純であっても 最もセクシーな特徴。 だから、Facebookのようなもの あなたがそれを使用する場合は、チャット。 どのようにそれが実際に動作しますか? さて、これまで、もののすべては、我々だ HTMLで行われ、PHPはことを前提としています は、URLを引き上げ、あなたはEnterキーを押します あなたは、いくつかのHTMLコンテンツを参照してください。 そして、あなたは変化し、リンクをクリックして URLは、ページを変更し、再ロードさ いくつかの新しいコンテンツ。 別のURLをクリックするか、あなたがフォームを送信 別のページに泡立ておよび取得 あなたは、いくつかの新しいコンテンツを参照してください。 しかし、Facebookのチャットのようなものを使用して、 まれまたはGchat、または、Googleマップ、 そのようなページ全体の更新を行います あなたが一時的に白い画面が表示され、 その後、新しいコンテンツ。 むしろ、Webページは、今日動的です 再び更新とばかり 何度も何度もすべての並べ替え 舞台裏の。 そして、それはあなたがに行くないときことが判明 Facebookのような何か、またはGchat、 やGmail、およびページ更新 自動的にリロードせず 何が起こっているのか、画面全体が、ということです お使いのブラウザは、密かにのようなものをしました 追加のHTTPリクエスト - 全体ではなく、Webページのための、ただのために のようなデータの少し塊、 あなたの友人そのインスタントメッセージだけ あなた、またはステータスの更新のことを送信 誰かがあなただけ、あるいはツイート送信 誰かだけ送った。 それだけのために少し要求を作っている JavaScriptを使用して、データ、そして、この 何を変更するには、プログラミング言語、 Webページには、なしのように見えます サーバは、サーバなしで、支援 そのHTMLを生成する。 だから要するに、JavaScriptが次に使用することができます のみから新しいデータを取得しないように 全体をリロードせずにサーバー ページまたはフォームを送信。 また、変更することができ いわゆるDOM - ドキュメントオブジェクトモデル - それはのためだけ空想の方法です HTMLのツリーを言って 我々は最後の時間を見た。 だから安心させるために、JavaScriptがある 文法的にそうCに似て同様に。 ない主な機能はありません。 あなただけのコードを書き始める それはあるいは、実行してしまいます もっと適切に解釈。 条件は次のようになります。 Cとは異なりませんか そのことについてはPHP。 ブール式または-ED一緒に このようになります。 このようになり一緒にANDさ。 スイッチは次のようになります。 ループでは、このようになります。 whileループは次のようになります。 ループは次のようになりますしながら行う。 これは新しく追加されました。 だからJavaScriptがforeachのをしていない 自体の構築が、これは構築 この中に変数配列のI、そして私のために ケース、インデックス値になります。 だから、それとは少し違う foreachの、しかし、新しいバージョンの JavaScriptは、すべての時間が出てきている そうであってもこれらの言語機能 進化しています。 そして余談として、JavaScriptのこのごろ また同じようにサーバー上で使用することができます PHPはNode.js.呼ばれるフレームワークを使用して CS50ののTFの一つは、ケビンは、リードしてきました で入手可能ですNode.jsのセミナー cs50.net/seminars。 興味があるのであれば、知っているあなた としてサーバー側でこれを使用することができます よく、それは、かなり最近の傾向だ しかしその時点で強力なもの。 これは、少し異なっています。 これは、JavaScriptで配列です。 そして、あなたは別として、何を打つ CやPHPと比較? いくつかの簡単な物語があります 我々はここで言うことができます。 何がPHPに対して不足しているのですか? 読者:[聞こえない]。 DAVIDマラン:はい? 申し訳ありませんが、もう一度言う? 読者:宣言していません 変数の型。 DAVIDマラン:私たちは宣言していない 変数の型。 だから、実際には非常にPHPのような、私たちではない この変数の型を指定する。 むしろ、我々はより一般的にしている 変数のVARを言って。 我々のPHPの迷惑を持っていない ドル記号、に退屈しながら タイプは、より明確にないこと 何かが変数だ。 ここのに対し、我々はに戻っての一種だ 単に呼び出すことによってCのアプローチ 私たちが望む名前で変数 数字のように、それを得た。 また、PHPのように、我々は持っている ために角括弧 その配列の内部値。 また、JavaScriptでの変数はそう このように見えるかもしれません。 これはSと呼ばれる文字列である、ここで注意してください、 しかし同様に、我々は指定していない それは文字列だ。 ここでは、しかししない機能です 、PHPで全く同じように存在している しかし少し同様。 これは、JavaScriptでのオブジェクトです。 とオブジェクトは、スイス軍の一種である あなたのデータ構造のナイフ 物事は、任意の数のためにそれらを使用することができます。 ここで、例えば、私たちは宣言しています 引用符と呼ばれる変数。 その変数の型 オブジェクトです。 あなたは、Cの構造体と考えることができ それは、キーと値を持っています。 シンボルが鍵となります。 FBは、明らかに、価値ある 銘柄記号。 コンマ。 価格は別のキーであり、その値である どうやら浮動小数点、または より一般的に数 49.26ドルのJavaScriptを、。 だからPHPはありません - 我々は非常にPHPオブジェクトに見ていない このように、我々はアナログを見た、 そのことは何でしたか? 読者:[聞こえない]。 DAVIDマラン:連想配列。 PHPは連想配列を持っているので、一方 構文がこれまでややそうである 異なる - 私たちは、角括弧を見ました。 我々は奇妙な矢印記号を見た。 JavaScriptはオブジェクトを持っていますが、これは 主に意味的な違いと 今のところ別の同義語。 しかし、余談として、PHPにも持って そのJavaと他の方法でのオブジェクト 言語は内のオブジェクトを持っている オブジェクト指向プログラミング。 しかし、我々は単に、これらを使用します 今のデータ型の。 オブジェクトと連想配列。 こちらは、それを作るかもしれない もう少し明確に。 オブジェクトが便利ですなぜここだ。 あなたが学生を宣言したい場合は、 Zamylaように、我々は実際にすることができます その内、いわばカプセル 同じように中括弧を使用してオブジェクト キーの全体の束の前に ここでと値。 私たちは、ID、家、そして名前を持っている としてセミコロンが続くZamyla、 最後にいつもの。 ダウンここでも、これはわずかにある 非常に強力でも異なるが、 このごろ。 ここでは配列です、と私は知っているので、 角括弧はそこまでだ 上部と角括弧 一番下にある。 そして、これはどのようなデータの配列です JavaScriptで明らかに入力? これは見た目の配列です 3オブジェクトと同様。 そして、私はそれが唯一のオブジェクトであることを知っている 中括弧があるため。 そして、そこのオープン中括弧に気づく いくつかのもの、近くに中括弧、カンマ、 その後いくつかのより多くの、コンマ、 その後いくつかの詳細。 だから、3つの引数です 2カンマで区切って入力します。 だから、これは、3つのオブジェクトの配列です。 それらのオブジェクトの各々があるように見える 一部の学生や職員 ソート、それぞれのIDを持つ、 家、および名前。 しかし、私は、この何かを呼んでいる JSONと呼ばれる - JavaScriptのオブジェクト表記。 そして、これは、実際にデータフォーマットです ので、非常に人気があるとされている 流行あなたが書いている場合に、これらの日 フェイスブックを使用するアプリケーション API、TwitterのAPI、本当にほとんど そこに任意のAPIは、これらの日、 CS50の自身のいくつかを含む あなたが戻って取得するデータがでない 古い学校CSV形式。 そのためリコールそのCSV 超簡単です。 それはちょうど列が分離されている コンマで。 JSONデータは、あなたに多くのメタデータを提供します。 これは、関連付けので、すべての値を持つキーを 彼らはただ想定する必要がないよう ゼロ番目の列は、列1の値である 一つは別ですが、2列目は、別です。 JSONオブジェクトのすべてがここに一種である の自己記述、すべての理由 このファイルの名前の1つは、文字通り持つ としての前に名前 文字列を引用符で囲まれた。 それでは見てみましょう ここにいくつかの例。 私がアプライアンスに行こう。 そして、私は我々のバーチャルホストに手放す 公的にディレクトリ。 と私はに手放す JavaScriptのディレクトリ。 そしてみましょう先に行くと開く DOMはただ意味DOM-0.html、 ドキュメントオブジェクトモデル。 これは、ツリーのものだ 私は以前に言及した。 そして、私は次のことを提案することができます。 ここでは、そのWebページです ボディは非常に単純です。 だからダウンここで一番下にある、 私はフォームを持って注意してください。 我々はそれらの前に見てきました。 それは、2つの入力有し、そのうちのいずれかを持つ 名前のID、タイプのを持っているそのうちの1 提出し、最初の 1の型はテキストです。 だから、これは実際にはかなり簡単に聞こえる。 のは、ここに行こう。 のがここでこのページに戻りましょう。 のがlocalhostに行こう、と入る 我々のJavaScriptのディレクトリ、およびに行く DOM-0、ここで我々は、このフォームを持っている。 だから明らかだ すべてこのページではありません。 それは、名前のフィールドがあります [Submit]ボタンを。 しかし、私はここでPHPを使用するつもりはない。 私はすべてのクライアント側をするつもりです 従って、以下のようにJavaScriptで話す。 私は確かに名前を与えてくれたことに注意してください この入力の分野でユニークな 識別子は、その実際に意志 瞬間に私にいくつかの時間を節約できます。 そして、私は別のタグを導入してきた気付く 私のWebページの頭の中で、  タグ。 だから、JavaScriptがあることをこの意味でだ クライアント側のプログラミング言語。 このケースでは、単にCSSのように、私が入れてきた 私のHTMLの直線内側それ。 しかし、私は、関数を宣言したことに気づく PHPのように少し見える 構文的には、しかし、これは実際にある JavaScriptを、再びので、それは ブラウザでクライアント側。 そして、これはに何が起こっているかを推測取る 、構文のにもかかわらず、いくつかの操作を行い ここに新しいです。 読者:誰に挨拶。 DAVIDマラン:それは挨拶するだろう このページを訪れた誰に。 だからどうやって? 予告だから、それはJavaScriptで判明 警告()関数があります。 これは悲しい機能の非常に一種である 本当にただのユーザーを困らせるために傾向がある。 それはあなたが本当に使うべきものではありません 一般的に、それが迅速かつ汚いです 何かを印刷の一種の方法 グラフィカル·ユーザに ブラウザのようなインターフェイス、。 私が持っていることをここで注意してください 単一引用符内の文字列。 それは結局は、C、Javaスクリプトとは異なり、 実際には、単一の使用することができます 引用符、と率直に言って、それだけのようなものだ 間の文体大会の JavaScriptのプログラマ 単一引用符を使用します。 PHPは、彼らは実際に少し持っている 別の意味。 しかし、今のところ、ただ知っている それが唯一の理由です。 JavaScriptでの規則は頻繁にすることです 単一引用符を使用していますが、我々は使用することができます だけでなく、両方の場所で二重引用符。 だから、これは面白いです。 我々はそれを持っていた最後の時間を思い出す ツリーを描いた画面上の画像 どこにHTMLノードを持っていた、と ヘッドノード、およびボディノード その後いくつかのテキスト。 しかし、1つの特殊ノードがあった 私は文書と呼ばれる非常にトップ。 まあ、それは任意の、JavaScriptで判明 あなたはJavaScriptでプログラムを書く時間 ブラウザでは、へのアクセス権を持って 特別なグローバル変数。 PHPのスーパーグローバルと基本的に変わるところは、 この1つはで呼び出される すべて小文字のドキュメント。 これは、構造体のようなものだが、この構造体 また、内部の機能を備えています。 だから、Cの構造体は、単に一般的にデータを持っています。 しかし、このようにJavaScriptのオブジェクトは 技術的にも機能を有している、 それ以外の方法として知られている その中。 そして、あなたは内部の関数を呼び出すことができます このオブジェクトには、文字通り、そのを行う 名前、ドット、その後の名前 関数、またはメソッドをもう一度。 それは本当に、単なる同義語だ。 そして、この関数は何をするのでしょうか? あなたは、その名前から推測の種類ができます。 IDによって要素を取得します。 だから、これは、ウェブページを検索しようとしている を探して、そのツリーを検索 どんなノード、AKA要素あり 引用引用終わり名の一意のID。 そして、何を、私はするつもりです? 私は内部の値を取得するつもりだ そのツリー内のノード、私は行くよ 何とかその名前に挨拶する。 だから我々はいないしたにも関わらず、推測を取る まだこれを見、何をプラス シンボルはこことここ、おそらく意味ですか? 観客:連結します。 DAVIDマラン:連結します。 右、これらがあるだけで 設計上の決定のようなもの 人々は、数年前に作った。 PHPには、連結 ドットの事。 C言語では、いくつかのフープを介してジャンプして、 strcopy(のような関数を呼び出す)、または strcatは()または他のそのような機能。 しかし、JavaScriptでは、プラスを使用しています。 だから、これは単に連結されている 3つの文字列 - こんにちは、名前、次いで 感嘆符。 だから、いつ、なぜこの機能がある しかし呼ばれる? さて、から推測する 一番下のHTML。 なぜ挨拶()が呼び出されるとき、またはされている? どうやら、最良のように私は、伝えることができます このフォームの送信時に、送信する、 私は、あるものは何でもするつもりだ これらの引用符の内側。 具体的には、私がコールするつもりだ ()に挨拶して、falseを返します。 さて、どのようなネットを見てみましょう 効果はここで最初のものです。 だから私は先に行くと入力してみましょう において、たとえば、ローレンは、提出してください。 ローレンこんにちは。 多分これはただだったかどうかを見てみよう 幸運な実装。 いや。 だから、何を入力しているの 私は実際にそこに置か名前を付けます。 しかし、変化していないのかがわかります。 URLはまだDOM-0.htmlです。 何register.phpはありません。 何番目のファイルはありません。 何action属性はありません。 それでは、この戻りfalseです おそらく何? なぜ私は、挨拶の呼び出し()としています おそらくfalseを返す? あなたがクリックしたときに、通常は何が起こるか でも、我々が持っているフォームに提出 先週見たことある? 観客:[聞こえない]。 DAVIDマラン:それは右、どこかに行く? これは、いくつかの宛先URLに移動します。 しかし、私はそれがここで起こることを望んでいない。 私は私のWebページが完全になりたい 一度あなたがしているGmailの、のような動的 そこに、あなたはそこに滞在。 URLは、そのように変更されません ページ全体がリロードされていることを示します。 むしろ、私はちょうど何かを変更したい 何かをプリントアウトするような ここで画面上に。 さて私は、これを整理してみましょう 少しアップ。 私がいないDOM-0を開いてみましょうが、 私は、DOM-2を開いてみましょう。 ちょうどので、あなたはここでいくつかの構文を見てきました。 それは、私たちはちょうどことが判明 生のJavaScriptを使用していなかった。 だから、これは本当に言語です JavaScriptを。 皆さんの中には知っているかもしれません jQueryのと呼ばれるライブラリ。 だから、jQueryは同じではありません JavaScriptなどの事。 それは本当にスマートなだけで、ライブラリの 男が書いたと普及など 現在、世界でそのほとんどの人 JavaScriptを使用する場合は、jQueryを使用しています。 そして、それ、正直、一見 もう少し不可解に見える。 しかし、あなたはあなたが行く場合は特に、見つけることができます そこにウェブを使って最終的なプロジェクトのために 開発には、見つけることができ、この 物事をクリーンアップし、あなたにはかなり節約できます 数行のコード。 それでは、どのようにちょうど一目みましょう このフォームは機能しています。 私は明らかに何を削除したのに気付く 私のHTMLから? 何にハンドラを提出ありません いわば。 に属性はありません。 あなたが知っているので、どのような 私は本当に好きではなかった? 私たちは落ちていたような気がした そこに古い習慣に。 それはずさんな感じ始めたのと同じように 両方のCSSを混在して HTMLには、種類の投げているので すべての上の異なる言語 場所、同様にこれを感じ始めた ダウンする悪路のような場所 私は自分の中のJavaScriptコードを入れている HTMLではなく、それを因数分解。 だから、ここでの教訓だ。 DOM-2.htmlでは、私はそれを考慮にいます。 そして、私は少しのことをやっている 違った。 今のところ、私は私の手を振るつもりだ これは本当に何をするかで、 ボンネットの下に。 しかし、単に今のと仮定し、その第一 このライブラリのコード行 jQueryは単に意味呼び出されたとき マニュアルでは、次の操作を行い、準備ができています。 Webページが取ることができるので、 ロードするためのいくつかの時間。 あなたが遅いインターネット上にあるかもしれません 接続、およびそれが紡糸され得る 紡績、そして最終的にそれがロードされる。 コー​​ド行はちょうどまで待つと言う ページ全体では、文書準備ができている このコードを実行する前に、準備ができています。 そして今、これはおそらく気付く 最初に最も有用 jQueryのから奪う。 ここでこの行は、精神で非常によく似ています ここにこれだけの長いラインに。 生のJavaScriptコードでは、そこのに対し、 そのドキュメントグローバルオブジェクトが存在する )getElementByIdを(と呼ばれる機能を有しており、 書いた人 jQueryは単に言ってそれを簡素化 ドル記号、およびその後の内部 括弧は、2つの引用符を入れて、 続いハッシュ記号を入れる あなたがつかむことを望むユニークなID。 だから、これは同等です のdocument.getElementById。 一方、。ちょうど意味提出 あなたがしているどのような形での提出 左側を参照して、行く 先にこれを実行します。 しかし、これはあまりにも今好奇心です。 どのようなことについて奇妙なことだ 私はここで強調してきた? だけでなく、それは一種の構文的である 新しい、不足しているものもあります。 観客:それは、単に関数と呼ばれています? これは、アラートと呼ばれないのか? DAVIDマラン:うん。 さて、そのように警告()が停止しています ここで、公正に。 しかし、の言及はありません あなたが知っているように、名前、fooや 何かここまで。 実際、これが特徴の一つである かなりのJavaScriptの パワフルなだけでなく、全く新しい。 とPHPは実際にも、これを持っています。 私が先に行くとやってみましょう 実際に素早く何か。 私が先に行くと、ここで、これを出してみましょう。 私はこれをやってみましょう。 機能。 の()がこのハンドラを呼びましょう。 いわばハンドラ関数。 いくつかの操作を処理した何か。 私のインデントをきれいにしましょう​​。 そして、ここにこれを置く。 そして、ここにそれを置く。 うん。 OK。 だから今、私はと呼ばれる機能を持っている 私は本当にわからないハンドラ() それは、まだ何をするか。 それだけで、まだそのようなものを持っています。 おっと。 あまりにも多くなった。 それでは、これをやってみましょう。 わかりました。 申し訳ありません。 わかりました。 私はこれをやってみましょう。 OK。 それは素晴らしく、まっすぐに見える 今転送します。 私はこれをやってみましょう。 これを行う。 そして[OK]をクリックします。 だから今、のはこっちこれを入れてみましょう。 その場でこれ以上のプログラミング。 OK。 だから今、のはに戻りましょう ここで物語は始まった。 以前、私が言ったことを、ここでこの行 文書が準備ができたとき、移動手段 先にこれを行う。 私は何をしたいのですか? さて具体的には、私が行ってみたい 先にし、次の操作を行います。 次のコード行を実行し、 私はあなたがしたいことは、これを呼び出すことである フォームが送信される機能。 さて、これは面白いものです。 これは、関数そのものではありません。 私は括弧を入れておりません注意してください ここに通常の方法で。 私は、文字通りという関数を渡している 別の関数にハンドラ() として引数として()を提出呼ばれる それは変数のようなものだけど。 これは、特徴の一つである JavaScriptを、自身が機能的です 本当にただのオブジェクトである。 実際に、彼らは実際には単なるだ ある種の変数。 AND関数の名前である場合 ハンドラは()、私はできません理由はありません ここに引数として渡します。 そして、これはときに、フォームを意味 デモのIDがあると 提出され、この関数を呼び出します。 しかし、今、私はこのすべてを元に戻す場合は、 なぜ、私はおそらくしましたか この瞬間前? まあ、これは無名関数です。 率直に言っているので私は、なぜ、私が実現 宣言時間を無駄に悩ま ハンドラーと呼ばれる関数()のみの通話に それ1つだけの場所で? 私は名前を必要としない、と私はしないと 複数の場所にそれを呼び出す必要があり、 ちょうど機能を実装してみましょう 私はそれを必要と右の場所。 そしてそうJavaScriptとPHPは何をサポート 匿名関数と呼ばれていること 私は正確にここで行うことができます。 しかし、我々は単に表面を傷つけています。 ちょうどカップルといじめるみよう ここで最終的な例。 私はquote.phpに進みます。 これは実際に、PHPであることに注意してください 私が書いたことを、関数、PHPプログラム、 それは期待してと呼ばれるHTTPパラメータ シンボル、と私は渡すことができます FBのような値。 そして、我々は実際にソースを見れば コー​​ドは、これはフリーのウェブサイトを照会している ただ、P-セットのように、ヤフーファイナンスと呼ばれる 7、そしてそれは私に戻ってだ 明らかに何か 既知のフォーマットは、JSONです - JavaScriptのオブジェクト表記法。 それはちょうどオブジェクトです。 中括弧に注意して、引用符、 コロン、コンマ。 今なお、これはかなりクールです。 私はおそらく、プログラミングを使用することができますので、 URLを生成するための言語 つまり、動的に次のようになり、 右か? 私は、Googleにこれを変更することができます Googleのを取り戻す $ 1,017.55の株価。 だから我々は今、このを使用できない場合を見てみましょう。 私は、ここでは、AJAX-0に行こうした 次のようになります。 それはちょうど持って、ウェブサイトの ボタンを持つフォーム。 ここで私が先に行くとYHOOに入力してみましょう Yahooの銘柄記号のために、取得]をクリックします 株価、そして今、私が得ているに気づく 32.86と警告。 私が実際に手の込んだバージョンに行こう このページ、バージョン2、および それではマイクロソフト、MSFT言わせ入力します。 取得する そして今、何の警告に気付かない。 それが価格を言うところに注目してください 決定されますか? 例の最も簡単なものがあることを 何Gchat、とFacebookのヒント チャット、Gmailの、および他のそのような ウェブサイトは、実際にでやっている ウェブページを変更する。 これに注目してください。 私はページをリロードしてみましょう。 私はChromeのインスペクタを開いてみましょう。 私は要素に行こう ダウンここにタブ。 今、私がダウンしてここにズームインするとき、気づくと これを開いて、これが私であることに注意してください HTML DOM - マイドキュメントオブジェクトモデル。 これは私のHTMLです。 しかし、今、それが起こっているのにもかかわらず、注意してください 両方でそれを見るために少しハードであると 一度場所で、私は、FBを入力すると ここに、一番下を見て 画面のみ。 これは、実際に変更することだ その場で私のHTML。 そして、それは非常に単純に、これをやっている このような何かをすることによって。 私は、AJAX-2を開いた場合、予告実装 できるだけセクシーな何か 、それはかなり醜いだとしても、その それと同じくらい洗練された 機能的にはいくつかを持っています 一番下のHTML。 しかし、私はタグ付けするために使用気づく。 我々は前にこれを使用していませんでしたが、これはある のような、それは強制するものではありません 新しい行にすべてのもの。 それだけで矩形領域を作る 同じ行に、基本的に。 私はそれを価格のIDを与えていることに注意してください。 そして、それはそれを用いて判明 JavaScriptのライブラリ、私は機能を持っている と呼ばれる引用符()はいつでも呼ばれています フォームが送信されます。 そして私がやっていることはこれです。 私はJavaScriptで変数を宣言してい 値を保存し、URLと呼ばれる quote.php?記号=。 言い換えれば、私自身も始めています それからHTTPリクエストを作成し、する 私はプラスで、その上に連結しています IDを持つ任意の要素 シンボルの通知があることである、である テキストフ​​ィールドの右下にここに。 だから我々は、過去にフォームを持っていたよう。 もしあれば、それは、jQueryので判明 valの呼び出しコール。ヴァル()、 機能、価値関数取得 ユーザは105.83入力した任意の して、ネットワーク·トラフィックのすべて つまり、これは起こります。 $。getJSON。 そして余談として、ドル記号です 単に短縮表記。 それは本当にjQuery.getJSONだ。 このURLからJSONに私を取得し、時 要求が戻ってくる、これを呼び出す 引数として関数を渡すと 何がサーバーから戻ってきた。 だから、他の言葉で、私は戻っている場合に ブラウザ、と私はquote.phpに戻って、 私のブラウザが取得しているが何をやっている このデータのチャンク。 そして、私はここでこのWebページに行くとき、 我々はその代わりにネットワークに行けば気付く タブを入力し、それをクリアし、 GoogleにとってGOOGのようなものとGet 見積りは、ページが変更されていない気づく。 しかし、HTTP要求が行われ、何だったの 私たちが見ればここに戻ってきた レスポンスは、JSONの全体の束である 我々は最終的にアクセスしたと ここで、このシンプルなライン。 データが得ていたものです サーバから。 価格の名前です 私が気にキー。 だからdata.priceは私のことを提供します。 現在一方、これ 最後の例である。 あなたは、ページがまだ多くを行うことができます。 実際に一つの、よく2。 我々は戻って持って来ることができる タグを、あなたがこれを覚えていれば。 それはJavaScriptのだ。 我々はそれを行うことができます。 非常にエキサイティング。 私たちは、クリフハンガーとしてそれを残しておきます。 しかし、もっとエキサイティングな、することができます このようなことを行う。 私は、地理位置情報-1に行くなら、それは判明 Chromeは我々がいることを知っている 緯度経度42.37。-71.10。 だから、さらにそこだ あなたの処分で。 その次の週ではなく、もっと。 また月曜日にね。