1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [週9] 2 00:00:02,570 --> 00:00:04,740 [デビッド·J·マラン - ハーバード大学] 3 00:00:04,740 --> 00:00:07,170 [これはCS50です。 - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 かしこまりました。お帰りなさい。これはCS50であり、これは9週目の始まりです。 5 00:00:12,350 --> 00:00:16,600 今日、我々は、Cの文脈ではもはやデザインに特に焦点を当てる 6 00:00:16,600 --> 00:00:20,010 しかし、PHPのコンテキストおよびSQLのビットとJavaScriptのビットで、 7 00:00:20,010 --> 00:00:23,730 特にpsetの7の両方の端に向かって、また、あなたの最終的なプロジェクト。 8 00:00:23,730 --> 00:00:26,310 実際には、あなたがあなたの最終的なプロジェクトに、その時点である場合 9 00:00:26,310 --> 00:00:30,100 おそらく、少なくともいくつかの考えを与えるために開始時間かそこら前にあなたのような場所 10 00:00:30,100 --> 00:00:33,730 あなたの最終的なプロジェクトに、あなたが1または2のクラスメートと協力したいのですが考えている、 11 00:00:33,730 --> 00:00:36,150 あなたが言ったクラスメートとの接続問題がある場合は、 12 00:00:36,150 --> 00:00:40,570 cs50.net/partners/formのフォームに記入して自由に感じる。 13 00:00:40,570 --> 00:00:42,880 それはちょうど、あなたが考えているプロジェクトの種類、あなたが誰であるかを尋ね 14 00:00:42,880 --> 00:00:44,870 あなたは物流上の理由からだけでどこに住んでいます。 15 00:00:44,870 --> 00:00:49,510 そしてあなたは、来週かそこらそこスプレッドシートのURLの上に目を維持したい場合 16 00:00:49,510 --> 00:00:53,520 あなたは、Googleドキュメントの読み取り専用バージョンを見ることができます 17 00:00:53,520 --> 00:00:56,010 採用された場合は、その情報を収集している。 18 00:00:56,010 --> 00:00:58,930 あなたが誰かと仕事をしたいのであれば、すべての手段で人々に手を差し伸べるして自由に感じる 19 00:00:58,930 --> 00:01:00,480 そのメカニズムを介して。 20 00:01:00,480 --> 00:01:02,690 しかし、人々の大半はソロで働いていますか。それは全く問題ありません。 21 00:01:02,690 --> 00:01:06,120 だから、これは義務でどのような方法であることを感じることはありません。 22 00:01:06,120 --> 00:01:09,680 金曜日にそれは、ちょうど私とここのチームのいくつかあった 23 00:01:09,680 --> 00:01:11,100 ほとんどの部分は空の劇場。 24 00:01:11,100 --> 00:01:14,600 3、観光客はそこに座っていた、それは少し厄介だったので。 25 00:01:14,600 --> 00:01:18,970 我々が話をすると、データベースであった、そして我々は、pset 7について少し話をしました。 26 00:01:18,970 --> 00:01:22,200 そして、あなたはちょうどまだビデオでそれをキャッチするために実現しなかった場合、それは大丈夫です。 27 00:01:22,200 --> 00:01:26,770 私は当たり前の我々がそうでなければかかるだろうと、任意の用語を定義しようとするでしょう 28 00:01:26,770 --> 00:01:28,840 金曜日の講義に基づいています。 29 00:01:28,840 --> 00:01:32,550 >> しかし、今日、我々はポイントにあなたを取得しようとするつもりだ 30 00:01:32,550 --> 00:01:34,990 ちょうどPSET 7のような何かを行うことができないという 31 00:01:34,990 --> 00:01:37,360 しかし実際には、フードの下で何が起こっているか理解する 32 00:01:37,360 --> 00:01:41,910 特にいくつかの我々はfunctions.phpファイル内の定位置に置くの抽象化 33 00:01:41,910 --> 00:01:45,780 あなたの生活が少し楽にしますが、最終的に理解するようにする 34 00:01:45,780 --> 00:01:48,760 補助輪が数週間後にオフに来たとき、あなたはまだ生き残ることができるように 35 00:01:48,760 --> 00:01:53,750 現実の世界で、あなたの下に任意のCS50枠組みがなければこのようなものを行う。 36 00:01:53,750 --> 00:01:57,500 精通している人のためにこの$ _SESSION、 37 00:01:57,500 --> 00:02:01,960 または誰がすでに金曜日にビデオを捕まえ、SESSIONは私たちは何をすべきかを聞かせていない 38 00:02:01,960 --> 00:02:04,330 PHPベースのWebアプリケーション内の? 39 00:02:04,330 --> 00:02:09,650 これは、GETとPOSTの精神と類似であることを意味しますスーパーグローバル変数である 40 00:02:09,650 --> 00:02:13,970 といくつかの他のですが、この事は便利何のためですか? 41 00:02:13,970 --> 00:02:18,320 >> に使用されるセッションとは何ですか?うん。 [学生]がログイン中 42 00:02:18,320 --> 00:02:21,040 申し訳ありませんが?ログイン中確かにログイン中[学生]。 43 00:02:21,040 --> 00:02:25,100 PSET 7では、我々はログインし促進するために、このセッションスーパーグローバル変数を使用している 44 00:02:25,100 --> 00:02:28,600 そして、何このスーパーグローバルの良いのは、それは連想配列であるということです。 45 00:02:28,600 --> 00:02:33,190 連想配列、リコールは、単にアレイですが、インデックスがもはや数字である必要はありません 46 00:02:33,190 --> 00:02:37,670 012のような。彼らは数字を使用できますか、彼らも、文字列にすることができます。 47 00:02:37,670 --> 00:02:44,890 そして、あなたはまだPSET 7に飛び込んだきそうだとすれば、あなたは我々がIDと呼ばれる鍵を保管していることを思い出して 48 00:02:44,890 --> 00:02:50,330 値が123のようなものですこの連想配列の内側 - 49 00:02:50,330 --> 00:02:53,780 何でも現在のユーザのIDでログインです。 50 00:02:53,780 --> 00:02:59,470 この動機は、ユーザがローカルホストを訪問した後でも、ということである 51 00:02:59,470 --> 00:03:02,720 または私のウェブサイトは、より一般的にし、彼らがログインしました、 52 00:03:02,720 --> 00:03:07,320 彼らはリンクをクリックするか、5分のための私のウェブサイトに戻っていない場合でも、 53 00:03:07,320 --> 00:03:10,730 あるいはあっても、1時間または1日が、彼らは、ブラウザウィンドウを開いたまま、 54 00:03:10,730 --> 00:03:14,370 このスーパーグローバル変数を介して、私は彼らがログインしていることを覚えていること 55 00:03:14,370 --> 00:03:21,140 >> 言い換えれば、それは私が欲しいユーザーに関する若干長期何かを保存することができます。 56 00:03:21,140 --> 00:03:24,390 そして、あなたは、ショッピングカートの化身として本当に考えることができます。 57 00:03:24,390 --> 00:03:27,740 アマゾンのような場所は明らかにあなたがショッピングカートに商品を入れることができ、 58 00:03:27,740 --> 00:03:32,230 しかし、HTTPプロトコルは、Webに電力を供給し、ステートレスであること 59 00:03:32,230 --> 00:03:34,230 あなたがウェブサイトを訪問するという意味で、 60 00:03:34,230 --> 00:03:37,290 ほとんどの部分は、いくつかのネットワークに常時接続していない 61 00:03:37,290 --> 00:03:39,270 ブラウザとサーバの間。 62 00:03:39,270 --> 00:03:42,190 あなたは、HTMLやJPEGやGIF、すべてのことをダウンロードした途端、 63 00:03:42,190 --> 00:03:48,200 接続が消え、あなただけのサーバーからのHTMLやその他もろもろのコピーを持っている。 64 00:03:48,200 --> 00:03:53,000 しかし、サーバーはあなたについての何かを覚えたいなら、 65 00:03:53,000 --> 00:03:57,580 負担は実際にその情報を記録するサーバー上にあります。 66 00:03:57,580 --> 00:04:00,130 そしてあなたのサーバーを管理しているプログラマ 67 00:04:00,130 --> 00:04:04,400 このスーパーグローバル連想配列の内側にあなたが望むほとんど何を置くことができます 68 00:04:04,400 --> 00:04:06,850 そしてそれは、そこにユーザが戻ってくる次の時間になります 69 00:04:06,850 --> 00:04:12,070 、その分、あるいは数日後かどうか、彼らが彼らのブラウザウィンドウを閉じない限り、 70 00:04:12,070 --> 00:04:14,360 その時点でセッションが消えます。 71 00:04:14,360 --> 00:04:17,779 だから、それははかない記憶だ、それは非永続だし、それは離れて行くことを意味している 72 00:04:17,779 --> 00:04:22,360 ユーザがブラウザを閉じるとすぐに - だけではなく、そのタブ、頻繁にブラウザ全体、 73 00:04:22,360 --> 00:04:24,930 それによって効果的にユーザをログアウトする。 74 00:04:24,930 --> 00:04:28,000 だから、このことは、実際にどのように実装されている? 75 00:04:28,000 --> 00:04:31,360 のは、我々が金曜日に見て簡単な例を簡単に見てみましょう。 76 00:04:31,360 --> 00:04:33,340 慣れていない人にとっては、これほど単純なものでした。 77 00:04:33,340 --> 00:04:35,910 これは、その唯一の目的は生活の中で教えているWebページです 78 00:04:35,910 --> 00:04:38,000 何回私はこのページを訪問した。 79 00:04:38,000 --> 00:04:41,670 これは、私はそれを訪問したことを月曜日にここで初めてなので、0回言う。 80 00:04:41,670 --> 00:04:46,940 >> しかし、私はこのページを再読み込みを開始した場合、それは、1時間、2、3、4、5を語る 81 00:04:46,940 --> 00:04:49,800 これは最終的にはちょうど、アップ、アップ、アップ、カウントアップについていけます 82 00:04:49,800 --> 00:04:53,130 たびに私は実際にそれを再読み込み]をクリックします。 83 00:04:53,130 --> 00:04:58,830 だからこの仕事はどうですか?私はcounter.php呼ばれるこのファイルの中に入りましょう。 84 00:04:58,830 --> 00:05:02,490 それの上部には、すべての青のコメントですが、面白い部分はここです。 85 00:05:02,490 --> 00:05:06,670 13行目で、私たちは、この関数を呼び出すにsession_start、 86 00:05:06,670 --> 00:05:09,600 それは文字通りあなたがアクセスできるようにしたい場合は、あなたがする必要があるすべてである 87 00:05:09,600 --> 00:05:13,610 この特別なスーパーグローバル変数に$ _SESSIONを呼んだ。 88 00:05:13,610 --> 00:05:17,430 つまり、すべてが可能になり、我々はそれがすべて可能なのかすぐに説明します。 89 00:05:17,430 --> 00:05:20,350 16行目では、私がやっていることに気づく。 90 00:05:20,350 --> 00:05:25,960 キーは、カウンターで呼ばれた場合 - つまり、インデックス値 - "カウンタ" 91 00:05:25,960 --> 00:05:32,310 セッションと呼ばれるこの配列の内部に存在し、私は、下の行にそれを使って何をやっている? 92 00:05:32,310 --> 00:05:36,650 18行目は何をやっている? 93 00:05:36,650 --> 00:05:40,360 >> [聞き取れない生徒の応答]それは何ですか? [学生]は、値を格納します。グッド。 94 00:05:40,360 --> 00:05:45,800 それは、新しいローカルの一時変数に現在SESSIONでの値を格納している 95 00:05:45,800 --> 00:05:48,250 すべて小文字でカウンタ$。 96 00:05:48,250 --> 00:05:50,770 PHPはすでにここで少し怠けていることに注意してください。 97 00:05:50,770 --> 00:05:55,550 我々はそのようなintやfloatまたは文字列か何かについての言及がありません注意してください 98 00:05:55,550 --> 00:06:00,480 PHPは弱く型付けされているので、それによってあなたは、変数の型を指定する必要はありません 99 00:06:00,480 --> 00:06:03,310 この場合には私はここにいても、まだそれを宣言していませんでした。 100 00:06:03,310 --> 00:06:08,980 私は、これらの中括弧の中にそれを宣言しているとCとは違って、これは実際には大丈夫です。 101 00:06:08,980 --> 00:06:13,800 深く変数の宣言をネストどんなにPHPで書かれていません - 102 00:06:13,800 --> 00:06:16,650 - 内側の中括弧などの括弧の内側 103 00:06:16,650 --> 00:06:21,230 それはその時点での時間で、プログラムの残りのために存在します 104 00:06:21,230 --> 00:06:22,680 良くも悪くも。 105 00:06:22,680 --> 00:06:26,930 だから、すぐに我々がここで行っているように、あなたがそれを定義するとすぐにグローバルになる。 106 00:06:26,930 --> 00:06:31,620 >> そうでなければ、私はセッションスーパーグローバルで何かがあることを見つけていない場合、 107 00:06:31,620 --> 00:06:34,680 私は明らかに、これを0に変数カウンタを初期化しています 108 00:06:34,680 --> 00:06:37,580 これにより、ユーザは単に前にここに来たことがないと仮定しています。 109 00:06:37,580 --> 00:06:40,030 そして、このコースはどのようにカウンタをインクリメントしていますか? 110 00:06:40,030 --> 00:06:44,480 私は、この連想配列の内部の値を更新しています 111 00:06:44,480 --> 00:06:49,530 現在+ 1であるものは何でもカウンターと等しい値に設定することによって。 112 00:06:49,530 --> 00:06:53,520 私は、ページのHTMLにここに下にスクロールすると、それは実際に非常に簡単です。 113 00:06:53,520 --> 00:06:58,920 私はこのページの本文内で持っているすべては、 "あなたは何某回このサイトを訪問しました"です。 114 00:06:58,920 --> 00:07:00,350 そして、これはPHPの構築物である。 115 00:07:00,350 --> 00:07:06,080 あなたが<を行う場合は?=、これはどういう機能に効果的に同等ですか? 116 00:07:07,920 --> 00:07:12,600 それは、我々はC言語で何度も見てきたprintfのようなもの、と本当に同等だ 117 00:07:12,600 --> 00:07:15,940 あなたはPSET 7の仕様から既に知っている可能性があるものの、 118 00:07:15,940 --> 00:07:20,160 プリントもちょうど何かをプリントアウトする機能であり、それは実際には、書式コードを使用していません 119 00:07:20,160 --> 00:07:23,270 そして実際にもエコーを言うことができます。 120 00:07:23,270 --> 00:07:27,460 彼らはすべての正味の効果は、最終的に同じであっても、ほんの少し異なっている。 121 00:07:27,460 --> 00:07:31,270 だからのこの使用は、記号はそれを行うための洗練された方法のほんの一種であるに等しい 122 00:07:31,270 --> 00:07:34,910 より簡潔に比べてあなたは、そうでなければすることができるかもしれません。 123 00:07:34,910 --> 00:07:38,370 そうだ、すべてこのサイトではありません。これは、カウンタの値を出力します。 124 00:07:38,370 --> 00:07:40,550 これはすべて、実際にどのように起きているのか? 125 00:07:40,550 --> 00:07:43,250 あなたが週を思い出すかもしれないほど前に我々はフードの下に探し始めた 126 00:07:43,250 --> 00:07:47,910 Webページは、このInspectorタブを使用してどのように動作するかで。 127 00:07:47,910 --> 00:07:51,900 >> ChromeはMac版、Windows版、さらにはLinuxのバージョンではこの両方を持っている 128 00:07:51,900 --> 00:07:59,510 この組み込みデバッガを持ってそれによって、FirefoxとIEは似たようなメカニズムを持っています 129 00:07:59,510 --> 00:08:01,400 ブラウザの内部。 130 00:08:01,400 --> 00:08:03,040 のは、次を見てみましょう。 131 00:08:03,040 --> 00:08:06,960 我々は、ここでのタブの全体の束を持って、一番左の1は要素であることを思い出しました 132 00:08:06,960 --> 00:08:10,700 HTMLおよびJavaScriptは、ページ内にある方法godawfulに関係なく、 133 00:08:10,700 --> 00:08:15,710 Elementsタブで、あなたが実際に階層的に表示されているHTMLをナビゲートすることができたことを思い出し 134 00:08:15,710 --> 00:08:17,050 といい、きれい。 135 00:08:17,050 --> 00:08:19,370 あなたは、GoogleやFacebookのようなサイトから学ぼうとしているのであれば 136 00:08:19,370 --> 00:08:22,370 または実際に任意のウェブサイト、あなたはおそらくオフに優れていることを認識 137 00:08:22,370 --> 00:08:26,360 生のソースを表示するのではなく、この方法では、ソースコードを見 138 00:08:26,360 --> 00:08:29,580 これは、我々が特にGoogleのサイトで見てきたように、混乱することができます。 139 00:08:29,580 --> 00:08:32,220 私の代わりに、ここで、[ネットワーク]タブをクリックしてそうだとすれば、 140 00:08:32,220 --> 00:08:34,830 私はこのページを訪問したときに何が起こっているのを見てみましょう。 141 00:08:34,830 --> 00:08:38,669 最初に、私のキャッシュをクリアしてみましょう。 142 00:08:38,669 --> 00:08:43,570 私はChromeの設定に移動して、過去に行くつもりです 143 00:08:43,570 --> 00:08:46,420 し、すべての閲覧データを消去します。 144 00:08:46,420 --> 00:08:48,170 あなたは他の目的のためにこれを行うために使用される可能性があり、[笑い] 145 00:08:48,170 --> 00:08:51,990 それは開発のウェブサイトに来るとき、それは実際に便利です - 146 00:08:51,990 --> 00:08:55,980 あなたが笑っている場合、あなたは知っている。 [笑い] 147 00:08:55,980 --> 00:08:59,310 Webサイトを開発する際に、現実があるので、それは実際には本当に便利だ 148 00:08:59,310 --> 00:09:04,100 キャッシュされたHTMLファイルは、キャッシュされたJavaScriptファイルのようなクッキーや物事のようなもの 149 00:09:04,100 --> 00:09:06,390 なぜなら実際に何らかの理由で、大きな頭痛の種になることができます 150 00:09:06,390 --> 00:09:11,500 ブラウザを使用すると、サーバ上のそのファイルへの変更をしましたまだいくつかのファイルをキャッシュすることを決定し、 151 00:09:11,500 --> 00:09:14,670 しかし、ブラウザは本当にファイルが変更されたことを実現していない 152 00:09:14,670 --> 00:09:19,060 したがって、実際にはありません再ダウンロードそれはあなたが、[リロード]ボタンを選択した場合でも、 153 00:09:19,060 --> 00:09:23,210 ただ障害があなたのコードを使用していないことを確認する最も確実な方法のいずれか、 154 00:09:23,210 --> 00:09:26,480 それはブラウザの挙動との、あなたのブラウザーでここに行くことです 155 00:09:26,480 --> 00:09:29,950 全く混乱がないように、ただ全体の履歴をクリアします。 156 00:09:29,950 --> 00:09:33,210 >> あなたが本当に偏執狂的にしたい場合は、その後、ブラウザを終了し、それを再起動する 157 00:09:33,210 --> 00:09:35,660 その後すべてが期待どおりに機能していることを確認します。 158 00:09:35,660 --> 00:09:38,820 開発を行う際に非常に短いで、キャッシュをクリアしても良いです。 159 00:09:38,820 --> 00:09:40,690 そこでここでは、[ネットワーク]タブを持っています。 160 00:09:40,690 --> 00:09:46,020 私は、以前サイトを9回訪れたが、私は今では先に行くと、[再読み込み]をクリックしてみましょうしていた。 161 00:09:46,020 --> 00:09:47,500 そして、私は再び0にダウンだ。 162 00:09:47,500 --> 00:09:52,100 実際にそれがこのセッションスーパーグローバル変数が実装されていることである方法を見てみましょう。 163 00:09:52,100 --> 00:09:55,990 私は、なされたHTTPリクエストをクリックするつもりだ 164 00:09:55,990 --> 00:09:58,810 そして、このデバッグウィンドウは、私はそれの内部を見ることができます。 165 00:09:58,810 --> 00:10:01,970 ここで私が興味深いものではありません、サーバーからの応答だけを参照してください。 166 00:10:01,970 --> 00:10:04,030 私は、任意の数の方法でこれを見てきました。 167 00:10:04,030 --> 00:10:06,350 しかし、どのような技術的に興味深いのは、ヘッダーです。 168 00:10:06,350 --> 00:10:11,770 私はここにスクロールダウンして、リクエストヘッダに注力し、[ソースの表示]をクリックすると、 169 00:10:11,770 --> 00:10:14,400 私は何を見に行くつもりだと、文字通りHTTP要求です 170 00:10:14,400 --> 00:10:17,250 それはちょうど、私のブラウザからサーバーに行きました 171 00:10:17,250 --> 00:10:21,400 手術の単語であるGETしてから、/ counter.phpファイル名であること、 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1は、ちょうど私のブラウザが使用しているHTTPのバージョンである。 173 00:10:25,670 --> 00:10:31,070 ここでこの行は、サーバーの名前が何であるか、ブラウザからサーバーへの少し思い出させてくれます 174 00:10:31,070 --> 00:10:33,020 それに話をしようとしている。 175 00:10:33,020 --> 00:10:38,200 そして、この残りの部分は時々面白いけど、今は関係ありません。 176 00:10:38,200 --> 00:10:40,090 >> これは単なる好奇心の一種である。 177 00:10:40,090 --> 00:10:43,530 この文字列があるが不可解な、いつでもお使いのブラウザはウェブサイトを訪問 178 00:10:43,530 --> 00:10:47,110 それはあなたが使用しているか、ブラウザサーバーに通知され 179 00:10:47,110 --> 00:10:50,040 、あなたが使用しているバージョンをしているか、そのオペレーティングシステム。 180 00:10:50,040 --> 00:10:52,650 あなたは、CNNやその他もろもろのようなウェブサイトをどのように今まで不思議に思っていましたので、もし 181 00:10:52,650 --> 00:10:56,860 パーセンテージは、Web、PCユーザーでMacユーザーであるか知って、 182 00:10:56,860 --> 00:11:00,820 IEユーザーは、Chromeのユーザーと同様に、それは私たちのすべてのブラウザからです 183 00:11:00,820 --> 00:11:04,300 我々が何であるかそこに一つ一つのウェブサイトを指示しています。 184 00:11:04,300 --> 00:11:07,410 それは必ずしも、個人を特定できる情報は含まれていません 185 00:11:07,410 --> 00:11:13,060 それはあなたのIPアドレスとは何か、どのようなブラウザやOS、使用しているサーバーを教えていない。 186 00:11:13,060 --> 00:11:14,720 この情報がどこにあるようだ。 187 00:11:14,720 --> 00:11:19,960 しかし、何それは、これらのセッションに来るとき、今より興味深いのは、レスポンスヘッダです。 188 00:11:19,960 --> 00:11:22,530 私はレスポンスに次のソースを表示]をクリックしてみましょう。 189 00:11:22,530 --> 00:11:24,590 ここで何が面白いのは、いくつかのことです。 190 00:11:24,590 --> 00:11:27,580 1、我々は200のステータスコードが戻ってきました。 191 00:11:27,580 --> 00:11:29,840 それはすべてが順調であることを意味しますので、我々はこのステータスコードを参照してくださいことは決してない。 192 00:11:29,840 --> 00:11:32,920 それは何か他のものとは対照的に、文字通り大丈夫ということです。 193 00:11:32,920 --> 00:11:36,380 我々は時々悪いことがわかり数は何ですか? [学生] 404。 194 00:11:36,380 --> 00:11:39,860 404ファイルが見つかりません、403はすでににひっかかったかもしれません、 195 00:11:39,860 --> 00:11:43,660 禁止されている、それはあなたがchmodする可能性が最も高いものを、忘れてしまったことを意味します。 196 00:11:43,660 --> 00:11:45,190 と他人の束があります。 197 00:11:45,190 --> 00:11:47,760 >> ダウンここでは、これはちょっとクレイジーです。 198 00:11:47,760 --> 00:11:52,340 私は実際にはgeditのに貼り付けて数分前に、このファイルを書いた。 199 00:11:52,340 --> 00:11:57,100 実際にWebがあった前になぜこのページは1981年に期限が切れた? 200 00:11:58,010 --> 00:12:00,730 そこに何が起こっているのか? 201 00:12:00,730 --> 00:12:04,390 >> [聞き取れない生徒の応答]タイムスタンプ。しかし、なぜですか? 202 00:12:06,110 --> 00:12:09,120 それは幾分恣意的だが、それは実際に便利です。 203 00:12:09,120 --> 00:12:15,500 これは何を私のブラウザに言っていることは、先ほどすでに期限切れ要求したこのPHPファイルです。 204 00:12:15,500 --> 00:12:18,580 実際には、それは30年前に失効した。 205 00:12:18,580 --> 00:12:20,260 しかし、それは実際に何を意味するのか? 206 00:12:20,260 --> 00:12:22,500 それだけで、ユーザーがこのページを訪れた次の時間を意味する 207 00:12:22,500 --> 00:12:25,540 アドレスバーにURLをリロードするか、または入力しているかどうか、 208 00:12:25,540 --> 00:12:28,010 あなたが行くとそれの新しいコピーを取得することを確認してください。 209 00:12:28,010 --> 00:12:30,840 これは、キャッシュの無効化の例のようなものです 210 00:12:30,840 --> 00:12:33,790 単にブラウザを落胆させるために頑張るという愚かな言葉 211 00:12:33,790 --> 00:12:37,260 実際にサーバから送信されたHTMLをキャッシュするから 212 00:12:37,260 --> 00:12:41,490 あなたが誤ってリロードを押すと、そのファイルの同じバージョンが表示されないようにします。 213 00:12:41,490 --> 00:12:43,730 あなたは実際にサーバが新しいコピーを送信する。 214 00:12:43,730 --> 00:12:47,440 だから、それは1981年だという事実はまさにそのアプライアンスが選択されているものだということを意味します 215 00:12:47,440 --> 00:12:50,280 過去の任意の日付など。 216 00:12:50,280 --> 00:12:53,380 しかし、本当のジューシーな行はこの一つです。 217 00:12:53,380 --> 00:12:57,550 でも、50前には、おそらくクッキーと漠然と精通している。 218 00:12:57,550 --> 00:13:01,820 特に、あまり快適または間にそれらの間で、今のように 219 00:13:01,820 --> 00:13:04,120 あなたの理解のクッキーは今何ですか 220 00:13:04,120 --> 00:13:06,980 私達はあなたの理解は、より技術的なことしようとしているにもかかわらず? 221 00:13:08,150 --> 00:13:10,070 クッキーとは何ですか?うん。 222 00:13:10,070 --> 00:13:13,890 [学生]ユーザーに関する情報、彼らがユーザー名か何かを書いたことがあるのなら好きです。 223 00:13:13,890 --> 00:13:17,370 >> グッド。それは、彼らはすでに自分のユーザー名に入力したかどうか、ユーザーに関する情報です。 224 00:13:17,370 --> 00:13:21,190 クッキーとは、サーバーはユーザーについての何かを思い出すことができる方法です。 225 00:13:21,190 --> 00:13:25,810 そして、何のクッキーは本当にですと、テキストフ​​ァイルまたはバイトのいくつかのシーケンスです 226 00:13:25,810 --> 00:13:28,340 ブラウザの内部サーバによって植えられていること、 227 00:13:28,340 --> 00:13:31,960 し、そのファイルへのまたはそれらのバイトの間で内部は、識別子のいくつかの種です。 228 00:13:31,960 --> 00:13:35,640 多分それは文字通りあなたのユーザー名ですが、より頻繁に、より不可解に見える何か 229 00:13:35,640 --> 00:13:43,700 bo8dal3ctなど - - これは本当に大きな英数字の文字列ここでこのような事 230 00:13:43,700 --> 00:13:47,050 それは本当にちょうどあなたのためのユニークな識別子であることを意味している。 231 00:13:47,050 --> 00:13:49,790 それともバーチャルハンドスタンプのようなものとして考えることができます。 232 00:13:49,790 --> 00:13:53,020 あなたが実際に支払ったことを覚えておくことは、いくつかのクラブや遊園地に行く場合 233 00:13:53,020 --> 00:13:55,850 とで行った、彼らはいくつかの並べ替えのあなたの手に小さな赤いステッカーを貼って、 234 00:13:55,850 --> 00:13:59,270 そしてそれはあなたが既に支払われてきたカウンターで人々を連想させる 235 00:13:59,270 --> 00:14:01,340 好きなように、あなたが行ったり来たりすることができます。 236 00:14:01,340 --> 00:14:04,250 クッキーとは、精神のそれと少し似ています。 237 00:14:04,250 --> 00:14:08,070 私はちょうど私のキャッシュをクリアした後に行ったように私は、このウェブサイトを訪問し、初めて、 238 00:14:08,070 --> 00:14:11,620 Webサーバーでは、この場合のアプライアンスは、私の手に切手を貼る 239 00:14:11,620 --> 00:14:15,030 PHPSESSID、セッションID、名前がある 240 00:14:15,030 --> 00:14:18,260 その値は、この本当に長い英数字の文字列です。 241 00:14:18,260 --> 00:14:22,470 >> だから、次回は私がリロードを打つように、私の手に今飾られのようなものだ 242 00:14:22,470 --> 00:14:25,230 または手動で、ブラウザでこのURLにアクセスしてください 243 00:14:25,230 --> 00:14:29,230 HTTPの定義により、私のブラウザはハンドスタンプを提示しようとしている 244 00:14:29,230 --> 00:14:31,940 何度も何度も。 245 00:14:31,940 --> 00:14:34,550 サーバーは、必ずしも私が誰だか知りませんので、あっても、 246 00:14:34,550 --> 00:14:39,610 彼らは、少なくとも私は少なくとも、より具体的に、同じユーザまたは、同じブラウザだということを知っています。 247 00:14:39,610 --> 00:14:45,660 それで、これはセッションスーパーグローバル変数がどのように実装されるか、最終的にある。 248 00:14:45,660 --> 00:14:51,200 サーバーは、2番目のためのウェブサイトまたは第三者の時間を再訪したときにいてもアイデアを持っていません 249 00:14:51,200 --> 00:14:53,410 あなたは、この手のスタンプを提示しない限り。 250 00:14:53,410 --> 00:14:55,530 とするとすぐにその手のスタンプを提示するように、 251 00:14:55,530 --> 00:14:59,370 Webサーバーは、基本的に独自の小さなデータベースに入る 252 00:14:59,370 --> 00:15:06,040 とチェックが、大丈夫、私はちょうどユーザーbo8dal3ctなどのハンドスタンプを見てきました。 253 00:15:06,040 --> 00:15:09,850 私はプログラマーが記憶されているどのような情報を見てみよう 254 00:15:09,850 --> 00:15:12,380 このユーザーについてのスーパーグローバルの内側、 255 00:15:12,380 --> 00:15:17,000 その後私は、そのデータはスーパーセッション内であることをもう一度確認しましょう 256 00:15:17,000 --> 00:15:19,830 プログラマは、そのデータを再利用することができるように 257 00:15:19,830 --> 00:15:23,360 それはいくつかの分または数時間前に設定されている場合でも。 258 00:15:23,360 --> 00:15:26,150 しばらくの間、いわれのない非難を得たので、言い換えると、クッキー、 259 00:15:26,150 --> 00:15:29,990 、ブラウザでの不安のために、彼らは本当に私たちのプライバシーとこのすべてに違反する可能性があります 260 00:15:29,990 --> 00:15:31,900 彼らは実際にあるためそれらなしで偉大なユーティリティを持っている 261 00:15:31,900 --> 00:15:36,110 あなたは常にあなたが訪問したすべてのFacebookのページにログインするであろう 262 00:15:36,110 --> 00:15:40,680 ブラウザが覚えてのいくつかの方法を持っていなかった場合は、読み取りまたはすべてのGmailのメール 263 00:15:40,680 --> 00:15:43,320 あなたは既に認証されてきた。 264 00:15:43,320 --> 00:15:46,640 >> だからこの方法でクッキーがワイヤーを行き来送信されます。 265 00:15:46,640 --> 00:15:52,470 クッキーについてのもう一つの好奇心が、特にここでは、これは平文で完全であるということです。 266 00:15:52,470 --> 00:15:54,930 全くここで起こっている暗号化は、ありません 267 00:15:54,930 --> 00:15:57,240 そして実際に私は、現時点ではHTTPを使用しています。 268 00:15:57,240 --> 00:16:00,890 2年前になりましたCS50で私たちのお気に入りの瞬間の一つ、 269 00:16:00,890 --> 00:16:04,750 頃Firesheepと呼ばれるツールが出てきた。 270 00:16:04,750 --> 00:16:08,320 これは、セキュリティ研究者によって作られたソフトウェアの自由な作品だった 271 00:16:08,320 --> 00:16:13,250 コミュニティのためのウェイクアップコールはatrociously実装だけでどのように言うことのように 272 00:16:13,250 --> 00:16:17,900 Web上の特定の認証メカニズムであった。 273 00:16:17,900 --> 00:16:22,880 そこで、いくつかの時間のために、Facebookは、HTTP、HTTPSではなくにわたってほぼ完全だった。 274 00:16:22,880 --> 00:16:25,640 そして、あなたは暗号がどのように機能するか見当がつかない場合でも、Sは安全です 275 00:16:25,640 --> 00:16:27,950 ので、それは関与し、少なくともいくつかの暗号化があることを意味します。 276 00:16:27,950 --> 00:16:30,610 Facebookは、ユーザー名とパスワードを暗号化するために使用でした 277 00:16:30,610 --> 00:16:33,560 しかし、すぐにあなたが見たとして、ポークまたはあなたのメッセージやニュースフィード、 278 00:16:33,560 --> 00:16:35,360 そのすべてが暗号化されていました。 279 00:16:35,360 --> 00:16:37,870 だから、年または2前までのGmailだった。 280 00:16:37,870 --> 00:16:41,100 あなたはログインしていつでも、はい、彼らは安全な暗号化を使用し、 281 00:16:41,100 --> 00:16:44,300 しかし、その後、彼らはそうしなかった。そして、なぜそうなのでしょうか? 282 00:16:44,300 --> 00:16:49,210 理由だけではなく、すべての時間は、このようなユースケースで暗号化を使用しませんか? 283 00:16:49,210 --> 00:16:53,700 それは何?私は何かを聞いたと思う。 [学生]スピード。 284 00:16:53,700 --> 00:16:56,250 スピード、右か?これを回避する方法があります。 285 00:16:56,250 --> 00:16:59,610 しかし、あなたが何かを暗号化する場合は、ただ一種の、論理的に考えてみれば、 286 00:16:59,610 --> 00:17:01,820 あなたは少なくとももう少し作業をする必要があります。 287 00:17:01,820 --> 00:17:05,460 PSET 2ではあなたはカエサルやVigenereあるいはクラック、実装されている場合 288 00:17:05,460 --> 00:17:07,760 単に文字列を出力するのは比較的簡単です。 289 00:17:07,760 --> 00:17:12,040 暗号化してから、最低限の文字列を出力すると、もう少し作業が必要です。 290 00:17:12,040 --> 00:17:14,520 >>  GoogleやFacebookのような超人気サイトのために、 291 00:17:14,520 --> 00:17:18,839 あなたは、彼らが訪問したすべての単一のWebページに対してユーザーごとに多くの作業を行う必要がある場合 292 00:17:18,839 --> 00:17:20,520 それはちょうどより多くのCPU時間がかかります。 293 00:17:20,520 --> 00:17:22,920 あなたがより多くのCPU時間を必要とするなら、あなたは、より多くのサーバーを必要とするかもしれない 294 00:17:22,920 --> 00:17:24,270 それはあなたがより多くのお金を必要とするかもしれないことを意味します。 295 00:17:24,270 --> 00:17:27,579 と非常に多くの年のために、これは本当にベストプラクティスではありませんでした。 296 00:17:27,579 --> 00:17:31,440 人々は、彼らがするために必要な唯一のSSL暗号化を使用します。 297 00:17:31,440 --> 00:17:34,960 しかし、それが判明し、Firesheepと、この仲間としてスーパークリアは行われ 298 00:17:34,960 --> 00:17:37,920 時現在Facebook上で現在君たち - 299 00:17:37,920 --> 00:17:39,880 好奇心から、あなたは素直に認めるだろうか見てみましょう。 300 00:17:39,880 --> 00:17:42,620 それが前景ていない場合でも、あなたは、現在いくつかのタブでFacebookを使っているのであれば、 301 00:17:42,620 --> 00:17:46,610 あなたのURLにHTTPまたはHTTPSですか? 302 00:17:46,610 --> 00:17:50,560 [複数の学生] S. S? [笑い] 303 00:17:50,560 --> 00:17:55,510 オーケー。任意のHTTP?わずか1?オーケー。 304 00:17:55,510 --> 00:17:58,940 だから、私たちのすべては今その男のFacebookのアカウントをハックすることができます。 305 00:17:58,940 --> 00:18:04,100 ほとんどの部分については、これは、少なくともいくつかのウェブサイトでは、デフォルトではオンになっています。 306 00:18:04,100 --> 00:18:08,120 あなたのWeb​​トラフィックは暗号化されていない場合、ショートストーリーと長い、 307 00:18:08,120 --> 00:18:12,960 HTMLには、暗号化されていないWiFis渡っ行き来しないだけでなく、 308 00:18:12,960 --> 00:18:16,760 ように、クッキーのようなものが空気を通して前後に行くのですか 309 00:18:16,760 --> 00:18:18,940 暗号化の任意のフォームなし。 310 00:18:18,940 --> 00:18:23,540 あなただけのプログラミングに精通のビットやスキルをグーグルのビットを持っているので、もし 311 00:18:23,540 --> 00:18:27,410 これを行うフリーソフトを見つけるために、あなたがしなければならないすべては、スターバックスに座っている 312 00:18:27,410 --> 00:18:30,680 または一般的に無線LANが暗号化されていないの空港で座って 313 00:18:30,680 --> 00:18:36,070 またはPHPSESSID:とだけのSet-Cookieなどのキーワードを監視 314 00:18:36,070 --> 00:18:39,300 あなたが技術に精通している場合だけで無線LANを監視するため 315 00:18:39,300 --> 00:18:43,010 このパターンの空気全体に流れているすべてのビットのために、 316 00:18:43,010 --> 00:18:50,840 あなたは、次に男のPHPSESSIDがbo8dalなどであることを起こると言うことができます。 317 00:18:50,840 --> 00:18:53,890 そして、再びあなたは、十分に技術的に精通しているか、適切なツールを持っている場合 318 00:18:53,890 --> 00:18:58,890 あなたは、ちょうど再構成し、独自のブラウザがその手のスタンプを提示することを開始することができます 319 00:18:58,890 --> 00:19:05,030 Facebook.com、Facebookにちょうどあなたがその人であると仮定しようとしている 320 00:19:05,030 --> 00:19:09,880 彼らが知っているすべてはあなたが誰であるかではありませんが、このユニークな識別子を持っていること。ので 321 00:19:09,880 --> 00:19:14,650 あなたがそのユニークな識別子を盗み、自分のようにWebサーバに提示しそうだとすれば、 322 00:19:14,650 --> 00:19:16,860 彼らはただあなたにその人のニュースフィードを表示しようとしている 323 00:19:16,860 --> 00:19:18,980 またはその人のメッセージやポーク。 324 00:19:18,980 --> 00:19:23,190 >> そして、私はおそらくFacebookのHTTPSを有効にする方法を現在はGoogleだろう。 325 00:19:23,190 --> 00:19:25,150 しかし、それは本当にそのように簡単です。 326 00:19:25,150 --> 00:19:27,660 そしてそうFacebookとGoogleなどが、これで本当に良い得ている 327 00:19:27,660 --> 00:19:31,870 しかし、HTTPを使用していないあなたが訪問するあらゆるウェブサイトのためのすべてのより多くのアウト目を離さない 328 00:19:31,870 --> 00:19:35,020 そして、それらの上の機密情報のいくつかの種類がある 329 00:19:35,020 --> 00:19:37,490 それは金融や個人だか好きかどうか。 330 00:19:37,490 --> 00:19:43,180 彼らがこれを使用していない場合は、かなり可能性がこのようなクッキーは非常に簡単に盗まれる可能性があります 331 00:19:43,180 --> 00:19:46,270 その後偽造、それは正確にFiresheepがやったことだ。 332 00:19:46,270 --> 00:19:48,250 あなたがプログラマである必要はありませんでした。 333 00:19:48,250 --> 00:19:51,680 あなたがしなければならなかったすべては、この無料のツールをダウンロードし、インターネットに接続されていました 334 00:19:51,680 --> 00:19:56,490 あなたはログインしたあとに、それはあなたのFacebookの名前が表示されるでしょう、何がどうなることです 335 00:19:56,490 --> 00:20:00,170 あなたの周りに、この特定のデモでは、サンダースのみんなの 336 00:20:00,170 --> 00:20:03,260 そしてあなたがしなければならなかったすべては、自分の名前をクリックすると、ソフトウェアは、プロセスを自動化した 337 00:20:03,260 --> 00:20:05,970 自分としてFacebookにそれを提示、そのCookieを盗聴、 338 00:20:05,970 --> 00:20:07,990 そして、ほら、あなたがログインしている 339 00:20:07,990 --> 00:20:11,190 だから、これはそれらの公式には "これをしない"の別の1つです。 340 00:20:11,190 --> 00:20:14,660 あなた自身のホームネットワークを持っていて、手を加えたい場合は、すべての手段によって、 341 00:20:14,660 --> 00:20:17,530 しかし、これは大学の環境上のラインを越えるん実現。 342 00:20:17,530 --> 00:20:20,030 >> しかし、ここでの目標は、これを実行しないことをどのように強調するために実際にある 343 00:20:20,030 --> 00:20:22,320 しかし、物事のこれらの種類を防御する方法について説明します。 344 00:20:22,320 --> 00:20:26,180 それ自体には欠陥があるにもかかわらず、ここと自明な解、 345 00:20:26,180 --> 00:20:31,360 本当に常にHTTPSを使用していないサイトの使用を減らすことである。 346 00:20:31,360 --> 00:20:34,520 だからFacebookとGoogleのようなサイトはますますチェックボックスを持っている 347 00:20:34,520 --> 00:20:36,200 どこで、この種のことにで選ぶことができます 348 00:20:36,200 --> 00:20:40,000 銀行が同様の理由で年間これを持っていた。 349 00:20:40,000 --> 00:20:43,580 だから不安要因我々ができる場合のほんの少し。しかし、それは一言で言えばそれだ。 350 00:20:43,580 --> 00:20:46,420 この機能では、サーバーはあなたが誰であるか覚えているかということです。 351 00:20:46,420 --> 00:20:50,760 とすぐに、彼らはあなたが誰であるかを思い出すことができるように、彼らはあなたについての何かを覚えることができる 352 00:20:50,760 --> 00:20:56,140 プログラマは、$ _SESSIONスーパーグローバル変数と呼ばれるこの特別の内部に格納されていること。 353 00:20:56,140 --> 00:20:59,750 とPSET 7のために我々は、単にint型を覚えておくことが自明にそれを使用している 354 00:20:59,750 --> 00:21:02,260 つまりログインしているユーザの一意のIDは、 355 00:21:02,260 --> 00:21:05,880 ので、我々は知っている彼らは前にそこにしてきた。 356 00:21:05,880 --> 00:21:12,450 その後、セッションやクッキーなどに何か質問はありますか? 357 00:21:12,450 --> 00:21:15,130 Firesheepは、もはやとしてうまく機能しません 358 00:21:15,130 --> 00:21:18,310 そしてあなたは特別な無差別モードにコンピュータを配置する必要があります 359 00:21:18,310 --> 00:21:20,700 ので、実際に自分自身以外のトラフィックをリッスンしています。 360 00:21:20,700 --> 00:21:23,940 あなたが現在Firesheepをダウンロードしているそうだとすれば、それは非常に簡単ではありません実現 361 00:21:23,940 --> 00:21:26,850 それは、かつて実証することであったとして。 362 00:21:26,850 --> 00:21:29,070 かしこまりました。とサンダースでそれを行うことはありません。自宅でそれを行う。 363 00:21:29,070 --> 00:21:30,890 データベース。 364 00:21:30,890 --> 00:21:33,580 我々は非常に意図的にpsetの7でやったことの一つ 365 00:21:33,580 --> 00:21:37,780 我々は、いくつかのユーザーIDを持っているユーザーのためにあなたにサンプル·データベース·テーブルを与えるた 366 00:21:37,780 --> 00:21:41,020 その中にいくつかのユーザー名、およびいくつかの暗号化パスワード。 367 00:21:41,020 --> 00:21:44,520 実行済みでない場合、あなたがわかるように、あなたがテーブルを少し変更する必要があるとしている。 368 00:21:44,520 --> 00:21:47,710 あなたは、そのテーブル内の各ユーザーにいくつかのキャッシュを追加する必要があるとしている 369 00:21:47,710 --> 00:21:51,130 そしてあなたは、ポートフォリオのテーブルを別の履歴テーブルを追加する必要があるとしている、 370 00:21:51,130 --> 00:21:53,310 または多分それは何か他のものと呼ぶ。 371 00:21:53,310 --> 00:21:56,740 しかし、これを行う方法を考えるという点で、このツールを開いてみましょう 372 00:21:56,740 --> 00:22:00,570 我々は金曜日に使用されますが、慣れていない場合、アプライアンスは、ツールに付属している 373 00:22:00,570 --> 00:22:04,680 偶然PHPで書かれていると呼ばれるphpMyAdminは、 374 00:22:04,680 --> 00:22:07,950 しかし、生活の中で、その目的は、私は真紅とjharvardとしてここにログインした後、 375 00:22:07,950 --> 00:22:15,160 私に私のデータベースを表示したり、変更するユーザーフレンドリーな方法を提供することです。 376 00:22:15,160 --> 00:22:18,040 >> 私は、アプライアンス上で実行しているというデータベースはMySQLと呼ばれています。 377 00:22:18,040 --> 00:22:23,420 、これは非常に人気があり、それを使うのは驚くほど簡単です、無料のオープンソース·データベースの 378 00:22:23,420 --> 00:22:25,620 特にこのようなフロントエンドである。 379 00:22:25,620 --> 00:22:29,350 このツールは私が行うことができますどのような、例えば、テーブルの周り突くです。 380 00:22:29,350 --> 00:22:30,890 私が先に行くとこれをやってみましょう。 381 00:22:30,890 --> 00:22:36,580 金曜日に、我々は超簡単だった学生と呼ばれるテーブルを作成しました。 382 00:22:36,580 --> 00:22:41,680 ID、名前、電子メール - - それは3つの列を持っていたと私は手動で行のカップルを挿入 383 00:22:41,680 --> 00:22:44,420 この特定の例のようにダビデとマイク。 384 00:22:44,420 --> 00:22:47,290 のは、このビットをさらに見てみましょう、我々は多くを覚えておきたいことを想定してみましょう 385 00:22:47,290 --> 00:22:49,660 ユーザについてだけ、名前と電子メールより。 386 00:22:49,660 --> 00:22:53,090 上部にここにアップ構造私をクリックしてみましょう。 387 00:22:53,090 --> 00:22:55,440 そして再び、psetには、ここで必要な手順を、順を追って説明 388 00:22:55,440 --> 00:22:58,150 これのいくつかは少し速いがないような場合は心配しないでください。 389 00:22:58,150 --> 00:22:59,690 それから私は、ここでクリックするつもりです。 390 00:22:59,690 --> 00:23:02,270 私は電子メールの後に列をいくつか追加するつもりだ 391 00:23:02,270 --> 00:23:04,130 私は家のようなものを追加したいので。 392 00:23:04,130 --> 00:23:06,640 私は学生の家を記録するのを忘れていました。 393 00:23:06,640 --> 00:23:11,400 私は、[Go]をクリックします、そして、今、私たちは残念ながら左から右へ少し広いです、このフォームを、持ってみましょう 394 00:23:11,400 --> 00:23:13,710 しかし私は、このフィールドの家の名前を呼ぶつもりです 395 00:23:13,710 --> 00:23:16,050 と入力し、私はここで選択する必要があります。 396 00:23:16,050 --> 00:23:18,870 それでは、MySQLで様々な種類についての簡単なチャットをお聞かせ 397 00:23:18,870 --> 00:23:24,590 なぜなら、PHPは弱く型付け、それは一種の高速と型を持つ緩い果たしているのに対し、 398 00:23:24,590 --> 00:23:29,430 データベースでは特にそれが実際にあなたの利点に型指定を使用する超重要だ 399 00:23:29,430 --> 00:23:33,260 物事MySQLと他のデータベースエンジンの1つがあなたのために行うことができるので、 400 00:23:33,260 --> 00:23:37,910 あなたのデータベースに不正なデータを入れていないことを確認しています。 401 00:23:37,910 --> 00:23:41,850 これは、使用可能なチェックエラーフリーのようなものです。 402 00:23:41,850 --> 00:23:46,250 >> 家のために、我々は、明らかにそれはMySQLの32ビット値であるint、なりたくない。 403 00:23:46,250 --> 00:23:49,810 我々は、char型の変数の長さを表しvarchar型、約金曜に簡潔に話した。 404 00:23:49,810 --> 00:23:54,720 これは何ですか?これは、あなたが、これはある種の文字列にしたいことを指定することができます。 405 00:23:54,720 --> 00:23:56,840 あなたは本当に、それがどれくらい長いか事前にわかっていない 406 00:23:56,840 --> 00:24:00,100 従って私達は任意に、家の名は255文字以下に設定できますと言うでしょう 407 00:24:00,100 --> 00:24:04,190 しかし、あなたは32、64で行くことができる - 任意の数を本当に。 408 00:24:04,190 --> 00:24:10,700 しかし、charと呼ばれるフィールドの上にvarchar型を使用することの利点は何ですか? 409 00:24:10,700 --> 00:24:15,110 私はここだけで直感的にスクロールダウンする場合は、CHARありとvarcharがあり気付く。 410 00:24:15,110 --> 00:24:19,520 varchar型はchar可変長であり、charは固定長のCHARです。 411 00:24:19,520 --> 00:24:24,730 だから、唯一のその定義に基づいて、これらのそれぞれの利点や欠点は何ですか? 412 00:24:24,730 --> 00:24:30,490 言い換えれば、誰が区別気遣うか、なぜあなたは気にする必要があります? 413 00:24:31,660 --> 00:24:35,750 >> うん。 [学生] VARCHARは、より多くの柔軟性を持っていますが、より多くのメモリを占有します。 414 00:24:35,750 --> 00:24:40,730 グッド。 VARCHARはもっと占有 - 見てみましょう。私はその権利を聞いたかどうかはよく知りません。 415 00:24:40,730 --> 00:24:42,360 あなたはもう一度それを言うことはできますか? 416 00:24:42,360 --> 00:24:45,850 [学生]私はvarchar型は、おそらくより多くの柔軟性を持っていますが、それはより多くのメモリを占有すると述べた。 417 00:24:45,850 --> 00:24:51,170 興味深い。オーケー。 VARCHARは、おそらくより多くの柔軟性を提供しますが、より多くのメモリを占有します。 418 00:24:51,170 --> 00:24:53,220 後者は必ずしも真ではありません。 419 00:24:53,220 --> 00:24:56,290 それは文脈に依存しますが、のはそれに戻ってくることができます。 420 00:24:56,290 --> 00:25:03,230 >> [聞き取れない生徒の応答]その通りです。 421 00:25:03,230 --> 00:25:06,900 これは、実際にはcharが一般的に多くのメモリを使用する場合だ 422 00:25:06,900 --> 00:25:10,950 charは、C言語のように、文字列のようなものですので、それは文字の配列です。 423 00:25:10,950 --> 00:25:13,690 ですから、長さが255のCHARフィールドを言えば、 424 00:25:13,690 --> 00:25:16,910 データベースには、文字通りあなたに255文字を与えるために起こっている。 425 00:25:16,910 --> 00:25:22,290 家はMatherと6文字が合計されて終了した場合、 426 00:25:22,290 --> 00:25:25,090 あなたは200を超える文字を無駄にしています。 427 00:25:25,090 --> 00:25:29,640 >> 必要であるように効果的にvarchar型だけ多くの文字を使用するように 428 00:25:29,640 --> 00:25:31,590 まで最大量まで。 429 00:25:31,590 --> 00:25:35,470 しかし、あなたが支払う価格は、潜在的に、実際のパフォーマンスです。 430 00:25:35,470 --> 00:25:39,740 - あなたのすべての文字列が8文字になるだろうしていることが事前にわかっている場合 431 00:25:39,740 --> 00:25:43,090 例えば、あなたは長さ8のパスワードを必要とすると仮定する - 432 00:25:43,090 --> 00:25:47,350 的ではありませんが、多くの場合、機会にchar型のフィールドを使用する利点 433 00:25:47,350 --> 00:25:51,100 パスワードのような何かのために固定長を指定することです 434 00:25:51,100 --> 00:25:53,300 今ので、データベースも賢くすることができます。 435 00:25:53,300 --> 00:25:58,160 それはすべてのCHARフィールドは、列内のすべての文字列が同じ長さであることを知っている場合、 436 00:25:58,160 --> 00:26:00,780 あなたは、ランダム·アクセスの機能を取り戻す。 437 00:26:00,780 --> 00:26:05,110 あなたは、データベーステーブルにさまざまなcharフィールドの間を飛び回ることができます 438 00:26:05,110 --> 00:26:07,940 なぜなら、行と列としてデータベースのだと思います。 439 00:26:07,940 --> 00:26:11,670 ので、文字列の一つ一つの長さが同一の場合、 440 00:26:11,670 --> 00:26:17,820 あなたが最初のものが0バイトであることを知って、次の1バイトは8です 441 00:26:17,820 --> 00:26:20,240 その後16とし、24など。 442 00:26:20,240 --> 00:26:24,500 すべての文字列が同じ長さであれば、あなたは、はるかに効率的に飛び回ることができます。 443 00:26:24,500 --> 00:26:26,710 だからそれは、パフォーマンスの面で利益になることができます 444 00:26:26,710 --> 00:26:29,420 しかし通常は、事前に知ることの贅沢を持っていない 445 00:26:29,420 --> 00:26:32,170 そうvarcharには、移動する方法です。 446 00:26:32,170 --> 00:26:36,030 ここにも、Facebookが結局に走ったことを別の詳細です。 447 00:26:36,030 --> 00:26:39,670 は、intは偉大であり、我々は、ソートのデフォルトでは、我々は数が欲しいときにいつでもそれらを使用 448 00:26:39,670 --> 00:26:41,750 それは32ビットのみです。 449 00:26:41,750 --> 00:26:46,210 >> Facebookはかなり現在4億人を持っていないにもかかわらず、 450 00:26:46,210 --> 00:26:48,680 複数のアカウントを持つそこに何人かの人々は間違いなくそこだ 451 00:26:48,680 --> 00:26:50,960 開いて閉じられているか、アカウント、 452 00:26:50,960 --> 00:26:55,130 ので、Facebook自身は、私は数年前にintから移行しなければならなかったと信じて 453 00:26:55,130 --> 00:27:00,010 にだけではなく、64ビットで適切に呼ばれるように、BIGINT、。 454 00:27:00,010 --> 00:27:02,230 だから、これはあまりにも設計上の決定です。 455 00:27:02,230 --> 00:27:06,570 あなたの最終的なプロジェクトが始動判明した場合には、驚くほどラッキーだろう 456 00:27:06,570 --> 00:27:10,010 与えるか、または取る、4億円、1人のユーザーを持ち、 457 00:27:10,010 --> 00:27:13,200 その場合にはintを使用して、少し近視眼的であるかもしれません。 458 00:27:13,200 --> 00:27:16,230 しかし、現実には、あなたのユーザテーブルは、intとおそらく大丈夫です。 459 00:27:16,230 --> 00:27:19,340 しかし、psetの7のような何かのために、あなたの履歴テーブルのように、 460 00:27:19,340 --> 00:27:23,700 あなたはetrade.comに進化した場合は、何千、何百万ものユーザーを持っているかもしれません。 461 00:27:23,700 --> 00:27:26,020 だから一方であなたは、40億以上のユーザーを持っていない可能性があり 462 00:27:26,020 --> 00:27:30,070 あなたが持っているそれらのユーザーは時間をかけて40億以上のトランザクションを持っているかもしれない - 463 00:27:30,070 --> 00:27:33,200 購入し、販売しており、彼らの歴史の中で物事。 464 00:27:33,200 --> 00:27:38,090 あなたが予想するようなら - もう一度、これらはあなたがこの大量のデータを持っている場合があるのは良い問題です - 465 00:27:38,090 --> 00:27:40,920 あなたは、intのサイズを超えるデータを予測しなければ、 466 00:27:40,920 --> 00:27:47,740 bigintのような何かと一緒に行くことは頻繁に十分な設計者によって採用されていない方向で 467 00:27:47,740 --> 00:27:49,710 問題であることを行っていないため、人々の姿、 468 00:27:49,710 --> 00:27:51,930 それはそれよりも大きいものを選択するには、この簡単だ。 469 00:27:51,930 --> 00:27:55,380 我々は一定の精度を指定しPSET 7で使用している進 470 00:27:55,380 --> 00:27:59,840 ので、単精度や倍精度の浮動小数点数と実数などを含む問題を回避することができます。 471 00:27:59,840 --> 00:28:02,440 >> そして、いくつかの他のフィールドがここにあります。我々は、いくつかの範囲にそれらに手を振ってます。 472 00:28:02,440 --> 00:28:07,270 しかし、日付、時間、すべてのMySQLで所定のフォーマットを持ってい 473 00:28:07,270 --> 00:28:10,830 と日付ではなくVARCHARと格納日付の利点 474 00:28:10,830 --> 00:28:15,730 データベースは、実際に、様々なフォーマットにそれらを再フォーマットすることができることを意味し 475 00:28:15,730 --> 00:28:18,800 米国形式やヨーロッパ形式等はどうか - しかし、あなたはそれをしたい - 476 00:28:18,800 --> 00:28:22,700 はるかに効率的にそれだけでいくつかの一般的なデータ型はvarcharである場合よりも。 477 00:28:22,700 --> 00:28:25,150 そして、いくつかの他のBINARY、VARBINARY、BLOBはそこだ。 478 00:28:25,150 --> 00:28:28,580 これらは、バイナリ·ラージ·オブジェクトであり、あなたはまた、バイナリデータを格納することができます 479 00:28:28,580 --> 00:28:30,750 同様に、データベース内の幾何学的なデータとして。 480 00:28:30,750 --> 00:28:34,350 しかし、私たちのために、我々は一般的にint型とVARCHARのなど気にします。 481 00:28:34,350 --> 00:28:36,230 家でこの例を完了してみましょう。 482 00:28:36,230 --> 00:28:40,030 ハウス私は勝手に255文字になると言うつもりです。 483 00:28:40,030 --> 00:28:42,850 デフォルト値は、我々はこれを行うことができます。 484 00:28:42,850 --> 00:28:47,440 我々は、デフォルトでは、例えば、マザーハウスで皆を置くことができます。 485 00:28:47,440 --> 00:28:49,710 それは我々がそのデータベースを指定することができる方法です 486 00:28:49,710 --> 00:28:52,460 誰かが常に値を持っていることを確認する必要があります。しかし、私はそれがあるままにしておきます。 487 00:28:52,460 --> 00:28:55,270 実際には、家の中にキャンパスを離れて住んでいるとしない人々のために、 488 00:28:55,270 --> 00:28:59,590 多分私は実際に、家のためのデフォルト値がNULLであることを指定したい 489 00:28:59,590 --> 00:29:04,890 そして私は、このチェックボックスをオンにし、ユーザーの家がNULLである場合、それは大丈夫だ、データベースを指示する必要があります。 490 00:29:04,890 --> 00:29:07,270 >> 繰り返しますが、これはあなたの場所に置くことができる別の防御機構である 491 00:29:07,270 --> 00:29:10,590 ので、あなたも、必ずしもあなたのPHPのコードでそれを配置する必要はありません。 492 00:29:10,590 --> 00:29:14,630 データベースは、物事があるか、またはNULLでないことを保証します。 493 00:29:14,630 --> 00:29:17,310 そして、最後に、属性。 494 00:29:17,310 --> 00:29:18,920 これらのどれもあまり関係ありません。 495 00:29:18,920 --> 00:29:22,880 バイナリは、署名されていない - それらのどれもvarchar型に関係ありません。 496 00:29:22,880 --> 00:29:24,220 インデックス。 497 00:29:24,220 --> 00:29:27,320 誰もが知っているか、またはインデックスが何かについて推測を覚えているか、持っていますか 498 00:29:27,320 --> 00:29:29,510 家のような何かのために? 499 00:29:29,510 --> 00:29:35,240 これも実際に重要であり、比較的容易に設計上の決定です。 500 00:29:35,240 --> 00:29:39,200 まだそれを見ていない人のために、金曜日に、私たちは、主キーについて簡単に話をしました。 501 00:29:39,200 --> 00:29:43,240 データベーステーブルに、主キーは、フィールドまたは列です 502 00:29:43,240 --> 00:29:46,270 それは、表の行を一意に識別します。 503 00:29:46,270 --> 00:29:49,150 だから我々はIDを持っている現在のテーブルでは、我々は名前と電子メールを持っている。 504 00:29:49,150 --> 00:29:52,050 それらのどれが、主キーに最適な候補である 505 00:29:52,050 --> 00:29:55,810 行を一意に識別するため、その役割は? 506 00:29:55,810 --> 00:29:57,530 おそらくIDを指定します。 507 00:29:57,530 --> 00:29:59,930 間違いなく、我々はまた、何でも使用できますか? 508 00:29:59,930 --> 00:30:02,860 理論的にはそれはユニークなので、たぶん、あなたは電子メールを使用することができます 509 00:30:02,860 --> 00:30:05,380 人々は、電子メールアカウントを共有している場合を除きます。 510 00:30:05,380 --> 00:30:09,980 しかし、現実には、1234のような数字のIDを使用している場合ということです 511 00:30:09,980 --> 00:30:14,170 メールアドレスはこのバイト数またはこのバイト数かもしれない一方で、それは、32ビットのみです。 512 00:30:14,170 --> 00:30:16,610 だから、一意の識別子のための効率の観点から、 513 00:30:16,610 --> 00:30:19,270 それだけでint型を使用することをお勧めする傾向がある 514 00:30:19,270 --> 00:30:23,090 あなたは間違いなく使用することができることをいくつかの文字列候補を持っている場合でも。 515 00:30:23,090 --> 00:30:26,760 >> 家のようなものは、これは主キーであってはならない 516 00:30:26,760 --> 00:30:30,770 その後、唯一1人がメイザーに住んでいて、製革などで1人。可能性があるため、 517 00:30:30,770 --> 00:30:32,790 同様に、これは一意でなければいけません。 518 00:30:32,790 --> 00:30:37,830 プライマリとユニークの違いは、私たちの現在のテーブルの場合とで 519 00:30:37,830 --> 00:30:42,620 IDが主であろうが、電子メールは、我々は先に述べた理由により、プライマリではありません - 520 00:30:42,620 --> 00:30:44,740 パフォーマンス - しかし、それはまだ一意でなければなりません。 521 00:30:44,740 --> 00:30:47,200 だからあなたはまだ主張をせずに一意性を強制することができます 522 00:30:47,200 --> 00:30:49,520 それは超重要な主なフィールドだという。 523 00:30:49,520 --> 00:30:52,610 しかし、この1つは非常に便利です:インデックス。 524 00:30:52,610 --> 00:30:56,180 あなたは、PSET 7用、または一般的に、あなたの最終的なプロジェクトのために、事前に知っていれば 525 00:30:56,180 --> 00:30:59,480 このフィールドの家はあなたがたくさんで検索するものであることを行っている 526 00:30:59,480 --> 00:31:01,910 selectキーワードまたは何か他のものを使用して、 527 00:31:01,910 --> 00:31:05,180 その後は先手を打って、その魔法を動作するようにデータベースを伝えることができます 528 00:31:05,180 --> 00:31:10,510 それは必要なメモリ内の任意の空想のデータ構造を作成していることを確認してください 529 00:31:10,510 --> 00:31:13,770 家に基づいて検索を迅速化する。 530 00:31:13,770 --> 00:31:17,860 たぶんそれは、ハッシュテーブルを使用しますが、多分それはリンクされたリストを使用します。 531 00:31:17,860 --> 00:31:21,260 現実には、それは木を使用する傾向があり、しばしば構造は、B-treeと呼ばれる - 532 00:31:21,260 --> 00:31:24,090 しないバイナリツリーが、Bツリー - 非常に広い木である 533 00:31:24,090 --> 00:31:27,370 あなたは、CS124のようなクラス、データ構造クラスに表示される可能性がある。 534 00:31:27,370 --> 00:31:31,800 しかし、短期的には、スマートデータベースソフトウェアを使用しているときに心配する必要はありません。 535 00:31:31,800 --> 00:31:35,890 "私はより効率的にそれを検索できるようにインデックスは、このフィールドを"あなたはただ、それを伝えることができます 536 00:31:35,890 --> 00:31:40,250 >> あなたがこれをオフのままにして、マザーに住んでいる、データベース内のすべての人を検索しようとする場合、 537 00:31:40,250 --> 00:31:42,710 それは線形探索に委譲されます。 538 00:31:42,710 --> 00:31:45,360 そして、あなたは、いくつかの家の中で6000学部生すべての生活を持っている場合 539 00:31:45,360 --> 00:31:47,900 あなたは、Matheritesを見つけるためにテーブル全体を検索するつもりだ 540 00:31:47,900 --> 00:31:52,190 [インデックス言うなら、うまくいけばそれは対数検索に近いものになり、一方 541 00:31:52,190 --> 00:31:54,510 学生のこれらの種類を見つけることができます。 542 00:31:54,510 --> 00:31:56,750 これは、オンにするだけで無料の機能です 543 00:31:56,750 --> 00:31:59,530 それは空間の一部の金額の価格で来ていなくても。 544 00:31:59,530 --> 00:32:02,690 最後に、自動インクリメント、このAIフィールド、 545 00:32:02,690 --> 00:32:05,830 それはちょうどそれがintの場合を意味し、あなた自身でそれをインクリメントするために気を使いたくなかった 546 00:32:05,830 --> 00:32:07,570 新規ユーザーがあるたびに、それを確認し、 547 00:32:07,570 --> 00:32:11,910 そして挿入され、各ユーザーは、自動的に新しいIDを取得します。 548 00:32:11,910 --> 00:32:15,620 Let 'sは、[保存]をクリックし、今度はこの設計の欠点を見つけることができます。 549 00:32:15,620 --> 00:32:20,200 私は、Browse、マイクと私の家の両方がNULLであることを通知に行けば。 550 00:32:20,200 --> 00:32:22,420 私はこれを手動で編集するためにphpMyAdminを使用することができます。 551 00:32:22,420 --> 00:32:25,110 私は、Enterを押して次にここに行くとマザーの型とすることができます 552 00:32:25,110 --> 00:32:27,740 、今からテーブルに気づくとは異なります。 553 00:32:27,740 --> 00:32:29,270 しかし、私は同様に他の何かを行うことがわかります。 554 00:32:29,270 --> 00:32:33,530 DavidさんのIDは1ですので、phpMyAdminは再び単なる管理ツールです。 555 00:32:33,530 --> 00:32:35,970 これは、ユーザーが今まで見に行くされてものではありません。 556 00:32:35,970 --> 00:32:38,810 私の代わりにトップアップ[SQL]タブをクリックしそうだとすれば - 557 00:32:38,810 --> 00:32:41,450 そして再び、PSET 7は、これらのクエリの多くを紹介します - 558 00:32:41,450 --> 00:32:45,260 私は手動でSQL構造化クエリ言語のコマンドを実行することができます 559 00:32:45,260 --> 00:32:56,410 WHERE ID = 1家= 'Pfoho' SETユーザーを更新。 560 00:32:56,410 --> 00:33:00,830 これらのSQLクエリは、素​​敵なことに、左から右にかなり読みやすいです。 561 00:33:00,830 --> 00:33:04,350 usersテーブルを更新し、Pfohoに家と呼ばれるフィールドを設定する 562 00:33:04,350 --> 00:33:06,830 ユーザーのIDは1です。 563 00:33:06,830 --> 00:33:11,480 または私も先の電子メール= 'malan@harvard.edu'行うことができます。 564 00:33:11,480 --> 00:33:14,860 だから長い一意私を識別するように、それは同様に動作します。 565 00:33:14,860 --> 00:33:18,810 しかし、IDは、より高いパフォーマンスになりがちなので、そんなことしてみましょう。 566 00:33:18,810 --> 00:33:22,950 [Go]をクリックしてみましょう。さて、lecture.usersは存在しません。私のエラーは何ですか? 567 00:33:22,950 --> 00:33:26,220 実際にここに呼ばれるテーブルは何ですか? 568 00:33:26,220 --> 00:33:28,770 それは我々が左上にここまでやったことだからといってそれは学生と呼ばれています。 569 00:33:28,770 --> 00:33:31,860 それは学生ではなく、ユーザーと呼ばれています。だから今、Goをクリックします。 570 00:33:31,860 --> 00:33:34,330 1行が影響を受ける。クエリーは0.01秒かかった。 571 00:33:34,330 --> 00:33:38,010 私はPfohoに今、今マラン生活を参照]をクリックした場合。 572 00:33:38,010 --> 00:33:42,070 だからそれはSQLの別の味だが、psetにはそのもう少し見ていきます。 573 00:33:42,070 --> 00:33:44,710 >> 私はすでにここに作った愚かな決定があります。 574 00:33:44,710 --> 00:33:47,820 私は、このデータベース設計が非効率的であると主張するだろう 575 00:33:47,820 --> 00:33:51,650 なぜなら、私が学生のテーブルに追加する、より多くの人々、 576 00:33:51,650 --> 00:33:54,730 私達のより多くの私は、私は追加を開始TFのより多くの追加を開始 577 00:33:54,730 --> 00:33:58,320 我々は、この表に冗長かを見るために開始するつもりだ? 578 00:34:00,840 --> 00:34:06,020 >> うん。それは学生のだということを見て、我​​々は同じを使用している[学生] [聞こえない] 579 00:34:06,020 --> 00:34:07,360 同じ - そう、まさに。 580 00:34:07,360 --> 00:34:10,400 400人メイザーに住んでいるのであれば、与えるか、または取る、 581 00:34:10,400 --> 00:34:15,000 最終的には、この表では、 ""マザー "、"メイザーを言う400行を持っているとしている 582 00:34:15,000 --> 00:34:16,590 "マザー" "マザー" "マザー"。 583 00:34:16,590 --> 00:34:19,820 我々は、これらのすべてのバイトを無駄にしていると、持ち帰りのカップルはそこだ。 584 00:34:19,820 --> 00:34:23,080 1、誰かがたくさんのお金を支払えばク​​レイジーコーナーケースはあり 585 00:34:23,080 --> 00:34:25,949 と改名メイザー、我々は今我々のデータベース全体のテーブルを変更する必要があります。 586 00:34:25,949 --> 00:34:29,730 Pfohoがかつて15年前に北家と呼ばれていたにもかかわらず、しばしば起こることはないだろうつまり、 587 00:34:29,730 --> 00:34:32,310 ので、それが起こる。しかし、それがすべてではその説得力はありません。 588 00:34:32,310 --> 00:34:36,000 バルク·データを更新する必要があるのようなコーナーケースより魅力的な 589 00:34:36,000 --> 00:34:41,150 あなたが何度も何度も何度も何度もマザーを格納しているデータベース理由のためですか? 590 00:34:41,150 --> 00:34:43,020 つまり、文字、6文字の多くのです。 591 00:34:43,020 --> 00:34:45,500 特にPforzheimerため、それよりもさらに良い我々を行うことはできませんか? 592 00:34:45,500 --> 00:34:48,320 確かに私たちは多くの文字よりよくすることができます。 593 00:34:48,320 --> 00:34:51,790 理由だけではなく、それぞれの家で、固有の識別子を関連付けないで 594 00:34:51,790 --> 00:34:55,020 と、ユーザーごとにその店?それでは、これを試してみましょう。 595 00:34:55,020 --> 00:35:00,610 ちょうど学生のテーブルを使用するのではなく、私は左上にここまで私の講演データベースまで行くことができます。 596 00:35:00,610 --> 00:35:02,600 ここで注意してくださいそれはテーブルを作成しますと言います。 597 00:35:02,600 --> 00:35:04,550 私は家と呼ばれる新しいテーブルを作成してみましょう。 598 00:35:04,550 --> 00:35:08,880 列の数が2であることを行っている。入力します。 599 00:35:08,880 --> 00:35:11,200 今、私は2つのフィールドを持っています。 600 00:35:11,200 --> 00:35:14,600 私はこの名前を呼ぶつもりです、そして、それは長さが255のvarchar型になるだろう、 601 00:35:14,600 --> 00:35:18,770 >> それはかなり恣意的だ。私は慣例によりここにこれを入れてみましょう。 602 00:35:18,770 --> 00:35:22,840 だからここにIDを入れます。家ごとに一意の識別子を指定してみましょう。 603 00:35:22,840 --> 00:35:25,360 すべての家に名前をつけましょう。 604 00:35:25,360 --> 00:35:30,980 の識別子は、正数のみを使用するだけで慣例により、符号なしとなることを指定しましょう​​。 605 00:35:30,980 --> 00:35:35,020 先に進み、今のところ、この自動インクリメントフィールドを挙げてみましょう。 606 00:35:35,020 --> 00:35:38,160 そして、我々は何が必要なのでしょうか? 607 00:35:38,160 --> 00:35:41,010 先に進み、[保存]をクリックしてみましょう。 608 00:35:41,010 --> 00:35:42,480 今、私は2番目のテーブルを持っています。 609 00:35:42,480 --> 00:35:45,860 余談ですが、これは少し不可解なSQLコマンドであることに気づく 610 00:35:45,860 --> 00:35:50,280 あなたは、phpMyAdminのような管理ツールを使用していない場合は、手動で入力しなければならなかったであろう。 611 00:35:50,280 --> 00:35:51,990 我々はそれを使用するもう一つの理由は、そう。 612 00:35:51,990 --> 00:35:55,480 あなたの周りをクリックすることができますので、それは素晴らしく教育的に有用なものだ 613 00:35:55,480 --> 00:36:01,050 そして物事がコピーとphpMyAdminが何をしたか貼り付けて、作業方法を見つけ出す。 614 00:36:01,050 --> 00:36:04,150 しかし、CREATE TABLEコマンドは直前に実行されたものであり、ここに私のテーブルです。 615 00:36:04,150 --> 00:36:11,370 私は今、先に行くと、[挿入]タブをクリックすることで、単純化し過ぎるのではなく、生のSQLを使用してみましょう。 616 00:36:11,370 --> 00:36:15,040 私は、家にINSERTやってみましょう 617 00:36:15,040 --> 00:36:22,230 と私は家の名前は 'マザー'の値を持っているとしていると言うつもりです。 618 00:36:22,230 --> 00:36:24,790 それはそれだ。この構文はもう少し謎めいています。 619 00:36:24,790 --> 00:36:26,660 これは、我々は挿入したいフィールドの名前です。 620 00:36:26,660 --> 00:36:30,390 これらは、我々は、これらのフィールドに挿入する値です。私は、[Go]をクリックしてみましょう。 621 00:36:30,390 --> 00:36:34,410 挿入された1行が0.02秒かかった。私は今、[Browse]をクリックしてみましょう。 622 00:36:34,410 --> 00:36:42,020 >> 私は、[Browse]をクリックした場合に注意し、そのIDを自動化することによって数字の1でメイザーは、あります。 623 00:36:42,020 --> 00:36:45,000 私は別のものをやってみましょう。私は、[SQL]タブに移動してみましょう。 624 00:36:45,000 --> 00:36:52,950 住宅INSERT INTO。家の名前などPfohoの値を持つことになるとされています。 625 00:36:52,950 --> 00:36:56,350 行く。と私は何度も何度も何度もこれをやっておくことができます。 626 00:36:56,350 --> 00:36:59,470 あなたはphpMyAdminを使用して飽きた場合、または、あなただけの[挿入]タブを使用することができます 627 00:36:59,470 --> 00:37:01,000 と生のSQLを入力する必要はありません。 628 00:37:01,000 --> 00:37:04,690 あなたはただ、入力、製革、例えば、次のように入力して、より迅速にそれを強打することができます 629 00:37:04,690 --> 00:37:07,610 我々は[参照]をクリックした場合、現在は、3のIDを使用してキュリアあり。 630 00:37:07,610 --> 00:37:09,920 だから、これは、我々は、自動インクリメントは何を意味です。 631 00:37:09,920 --> 00:37:12,280 しかし、今、私たちは生徒たちに何かを修正する必要があります。 632 00:37:12,280 --> 00:37:16,240 学生の家のフィールドのデータ型は、今何をすべきですか? 633 00:37:16,240 --> 00:37:19,450 それはint型、右すべきですか? 634 00:37:19,450 --> 00:37:23,950 だからここでの目標は、正規として知られているそうでなければ、テーブルを睨むもの​​です 635 00:37:23,950 --> 00:37:27,940 ように、私たちは私のテーブルのいずれかに重複した情報を格納しないでください。 636 00:37:27,940 --> 00:37:31,130 そして再び、我々はここにあったパスは、マザー、マザーを言おうとしている 637 00:37:31,130 --> 00:37:34,220 メイザー、非常に冗長ですメイザー、Pfoho、Pfoho、Pfoho、Pfoho、 638 00:37:34,220 --> 00:37:36,240 charsの無駄に関して。 639 00:37:36,240 --> 00:37:40,820 だから、私が先に行くと構造をクリックして、これを変更してみましょう 640 00:37:40,820 --> 00:37:44,620 そして、私が先に行くと家のフィールドを使用してチェックし、[変更]をクリックしてみましょう 641 00:37:44,620 --> 00:37:46,990 そして今、私はintであるためにこれを変更するつもりです。 642 00:37:46,990 --> 00:37:49,490 255は関連はなくなりました。 643 00:37:49,490 --> 00:37:54,010 私が先に行くと、それはまだNULLの場合、罰金だと言うことができます。保存します。 644 00:37:54,010 --> 00:37:55,870 今すぐテーブルの学生は正常に変更されている、 645 00:37:55,870 --> 00:37:59,090 と再び気づく家はintです。 646 00:37:59,090 --> 00:38:02,220 それはint型になると余談ですが、カッコ内の数字は無視してください。 647 00:38:02,220 --> 00:38:03,770 >> これは、レガシーの理由からです。 648 00:38:03,770 --> 00:38:06,920 戻るあなたはGUIを持っていなかった日には、代わりに、コマンドライン環境を持っていた 649 00:38:06,920 --> 00:38:11,580 あなたが表示されるはずです10と11は、それぞれ指定された文字数 650 00:38:11,580 --> 00:38:13,950 端末ウィンドウで実際にフィールドを表示します。 651 00:38:13,950 --> 00:38:19,150 これは、実際のフィールドのビット長とは何の関係もないので、我々はちょうど今のことを無視します。 652 00:38:19,150 --> 00:38:20,990 今私はこのテーブルに行かなければならない。 653 00:38:20,990 --> 00:38:24,610 ダビデはメイザーに住んでいるならば、その家は、0であってはならない 654 00:38:24,610 --> 00:38:27,350 これは、NULLに最も近いデフォルトのint値です。 655 00:38:27,350 --> 00:38:29,810 彼は家1に生きなければならない。 656 00:38:29,810 --> 00:38:36,870 任意Pfohoでマイクの生活なので、家の番号2としましょう​​。 657 00:38:36,870 --> 00:38:40,160 今、私のテーブルにはもう少し不可解に見える。 658 00:38:40,160 --> 00:38:41,960 しかし、効率を考慮してください。 659 00:38:41,960 --> 00:38:44,860 私は今、家を識別するために32ビットだけを使用しています 660 00:38:44,860 --> 00:38:49,530 これは、私の家MatherとPfohoのわずか1正規定義があることを意味 661 00:38:49,530 --> 00:38:52,090 それは家のテーブルにあります。 662 00:38:52,090 --> 00:38:55,880 私は今、これらのテーブルに再び参加したいのであれば、それはこのように考える。 663 00:38:55,880 --> 00:39:01,980 ここで私は生徒たちのテーブルがあり、右側には、これらの番号は、1と2があります。 664 00:39:01,980 --> 00:39:04,180 1メイザー、2はPfohoです。 665 00:39:04,180 --> 00:39:08,580 私たちは、家と呼ばれるこの他のテーブルにある同じ番号を持っている 666 00:39:08,580 --> 00:39:11,020 それらの3軒の家のために1と2と3。 667 00:39:11,020 --> 00:39:14,990 私たちが今やりたいことは、コード、PHPとSQLの能力を持っている 668 00:39:14,990 --> 00:39:18,800 これらは学生であり、これらは家であれば、これらの表は、再参加のソートする 669 00:39:18,800 --> 00:39:22,050 私たちは、何とかして1となるように1行まで、それらを結合した​​い 670 00:39:22,050 --> 00:39:25,670 2 2とラインアップし、私たちはどこにデビッドを把握することができます 671 00:39:25,670 --> 00:39:28,000 どこでマイクと場所誰もが住んでいます。 672 00:39:28,000 --> 00:39:31,850 これを行うには、我々は次のようなSQLクエリを実行することができます。 673 00:39:31,850 --> 00:39:40,470 学生のSELECT * FROM ON住宅を登録しよう - 674 00:39:40,470 --> 00:39:43,000 そして今、我々に参加するどのような分野をしたいですか? 675 00:39:43,000 --> 00:39:49,520 だからstudents.house = houses.id。 676 00:39:49,520 --> 00:39:54,150 >> ちょっと不可解ですが、この部分は、文字通り新しいテンポラリ·テーブルを作成することを意味 677 00:39:54,150 --> 00:39:56,690 それは、学生や家屋を結合した​​結果だ。 678 00:39:56,690 --> 00:40:00,340 そして、どのようにあなたはここに私の指の先端を結合した​​いのですか? 679 00:40:00,340 --> 00:40:05,280 IDフィールドの生徒の家に等しい家のフィールド 'を設定します。 680 00:40:05,280 --> 00:40:10,220 そして、私は今、[Go]をクリックした場合、私は私が望んだものを正確に取り戻す。 681 00:40:10,220 --> 00:40:15,890 ダビデはメイザーにあり、マイクはPfohoである、と私はまた、ユニークな識別子を参照してください。 682 00:40:15,890 --> 00:40:18,640 しかしポイントは、私は完全なテーブルを持っているようになりました。 683 00:40:18,640 --> 00:40:23,020 PSET 7用または本当に最終的なプロジェクトのために、こことそう持ち帰り: 684 00:40:23,020 --> 00:40:25,830 あなたは、重複した情報のどの部分を保存していることが判明した場合 685 00:40:25,830 --> 00:40:28,850 それは家であろうと、多分それは、都市、州、およびZIPだ 686 00:40:28,850 --> 00:40:32,050 ZIPは通常、常にではないが、ユニークな識別子として使用することができる場所、 687 00:40:32,050 --> 00:40:35,810 phpMyAdminのようなもので、精神的に、その後の運動を経るん 688 00:40:35,810 --> 00:40:40,660 その共通のデータのうちファクタリングのあなたのウェブサイトは、よりよく使われるようなので、特に 689 00:40:40,660 --> 00:40:45,440 多くの人気、これは、あなたはすべてが超高速であることを確認する方法です。 690 00:40:45,440 --> 00:40:51,930 できるだけユニークさなど、多くのヒントとしてデータベースを与えることによって。 691 00:40:51,930 --> 00:40:53,860 それがたくさんあった。 692 00:40:53,860 --> 00:40:59,010 何か質問?かしこまりました。のが5分間の休憩を取ると、再編成しよう。 693 00:41:01,600 --> 00:41:03,540 かしこまりました。 694 00:41:03,540 --> 00:41:08,680 以下は、私がCS161を取ったときに、何年か前に使用した例です。 695 00:41:08,680 --> 00:41:10,960 大学でオペレーティング·システム·クラスはどれですか 696 00:41:10,960 --> 00:41:15,160 驚くべきであることで知られますが、仕事のクレイジーな量されている、 697 00:41:15,160 --> 00:41:19,810 そしてそれは、オペレーティング·システムで発生する低レベルの問題のいくつかに焦点を当てて本当に 698 00:41:19,810 --> 00:41:22,700 とさえもデータベースの世界インチ 699 00:41:22,700 --> 00:41:27,040 >> その年の私の教授、マーゴ·セルツァー、と言われた話は次のとおりであった。 700 00:41:27,040 --> 00:41:30,990 あなたとあなたのルームメイトのために少しの寮の冷蔵庫を持っていると仮定 701 00:41:30,990 --> 00:41:34,030 そしてミルクのような本当にあなたの両方。 702 00:41:34,030 --> 00:41:36,360 したがって、クラス1日から家に帰ってくる、あなたのルームメイトは、まだありません 703 00:41:36,360 --> 00:41:39,650 あなたは冷蔵庫を開け、あなたは気付く、 "いまいましいああ、私たちは牛乳から出ている。" 704 00:41:39,650 --> 00:41:42,070 ですから、冷蔵庫を閉めるには、CVSに通りを歩いて渡る 705 00:41:42,070 --> 00:41:45,830 とCVSでいくつかの牛乳を買うためにますます長い列に並んでもらう。 706 00:41:45,830 --> 00:41:48,470 一方、あなたのルームメイトは、彼または彼女のクラスから戻ってくると、 707 00:41:48,470 --> 00:41:51,690 部屋に入って、実際にいくつかのミルクを欲しがっ冷蔵庫が開き、 708 00:41:51,690 --> 00:41:54,130 冷蔵庫を開いて、 "くそー、ノーミルク。" 709 00:41:54,130 --> 00:41:57,890 だから、彼または彼女は、冷蔵庫を閉じたドアを出て行くと、ABPに行く 710 00:41:57,890 --> 00:42:00,910 あなたがお互いにぶつかるつもりはない、CVS以外の場所または 711 00:42:00,910 --> 00:42:02,790 牛乳を買いに行くために。 712 00:42:02,790 --> 00:42:04,820 もちろん数分後、あなたの両方が戻って家に帰る 713 00:42:04,820 --> 00:42:07,740 そして今、あなたは、あなたが実際に望んで2倍のミルクを持っています。 714 00:42:07,740 --> 00:42:10,670 あなたは牛乳が好きなので、牛乳であること、今ではそれは悪い行くつもりだ 715 00:42:10,670 --> 00:42:14,200 しかし、あなたは牛乳好きじゃないので、今、あなたはあまりにも多くのミルクを持っているので、それはすっぱくなるだろう。 716 00:42:14,200 --> 00:42:16,830 これはひどい、ひどい状況です。 717 00:42:16,830 --> 00:42:22,920 あなたが最初のルームメイトの家だった場合、何がこの苦境を解決しているだろうか?はい。 718 00:42:22,920 --> 00:42:25,970 [学生]あなたがメモを残しておく必要があります。 [笑い] 719 00:42:25,970 --> 00:42:28,090 グッド。あなたがメモを残しておく必要があります。 720 00:42:28,090 --> 00:42:32,320 あなたは "ミルク用に去りぬ"、と言うようなポストイットノートや入れているはず 721 00:42:32,320 --> 00:42:36,830 その後あなたのルームメイトは、概念的には実際にそれをやってからロックアウトされていただろう。 722 00:42:36,830 --> 00:42:38,010 それとも、1歩先に行くことができます。 723 00:42:38,010 --> 00:42:41,060 あなたは文字通り、南京錠のいくつかの種類で冷蔵庫をロックする可能性 724 00:42:41,060 --> 00:42:44,870 そして今あなたのルームメイトは文字通り冷蔵庫からロックアウトされます。 725 00:42:44,870 --> 00:42:48,520 我々は、プログラミングに戻って一般化する場合は、 726 00:42:48,520 --> 00:42:51,610 あなたはほとんど、種の変数または構造体として冷蔵庫から考えることができます 727 00:42:51,610 --> 00:42:53,500 情報のコンテナのいくつかの種類。 728 00:42:53,500 --> 00:42:58,290 根本的にここでの問題は、あなたの両方を検査することを許されたということです 729 00:42:58,290 --> 00:43:02,370 または、このデータ構造の状態を読み取る 730 00:43:02,370 --> 00:43:08,050 しかし、あなたは別の回でそれを見て、まだ両方のあなたの決断を下した 731 00:43:08,050 --> 00:43:11,920 時間内にこれらの異なる瞬間に世界の状態に基づいて。 732 00:43:11,920 --> 00:43:15,570 ですから、冷蔵庫をロックしていた、あなたは少なくともあなたのルームメイトを避けられただろう 733 00:43:15,570 --> 00:43:19,070 世界の状態を検査することができましたから、 734 00:43:19,070 --> 00:43:22,530 ので、彼または彼女は、同じ決断を下していることができなかった。 735 00:43:22,530 --> 00:43:25,780 だからデータベースは、結局のところ、常にこの問題を抱えている。 736 00:43:25,780 --> 00:43:31,050 >> 私たちはシナリオを構築できるかどうか見てみましょう。 737 00:43:31,050 --> 00:43:34,310 あなたが悪者のようなものだと仮定し、バンク·オブ·アメリカへ行く 738 00:43:34,310 --> 00:43:37,950 側でカップルのATM側を持った矩形内の他の場所のうちの一つであるか、 739 00:43:37,950 --> 00:43:41,200 そして、どうにかして、ATMカードを複製する方法を考え出した - すべてのそんなに難しいことではありません。 740 00:43:41,200 --> 00:43:42,730 それはちょうど磁気帯です。 741 00:43:42,730 --> 00:43:45,180 それで、あなたがやろうとしたいのか、このゲームをプレイしている 742 00:43:45,180 --> 00:43:49,060 それによってあなたは、他のマシンに、1機に別のカードを1枚のカードを入れて 743 00:43:49,060 --> 00:43:51,980 そしてあなたは本質的に、同時にお金を引き出すに試してみたい 744 00:43:51,980 --> 00:43:54,930 想像するので、その話は次のようになります。 745 00:43:54,930 --> 00:43:57,350 左のマシンは、あなたのカードと暗証番号を取る 746 00:43:57,350 --> 00:44:00,240 そして、あなたは "私に100ドルを付けます"と言う。 747 00:44:00,240 --> 00:44:04,790 ATMは、最初にそのデータベースまたはそれに相当する上のselectを実行するようプログラムされて - 748 00:44:04,790 --> 00:44:10,780 それが使っているものは何でもデータベース - 表示するには、このユーザは、自分の口座に少なくとも100ドルを持っているのですか? 749 00:44:10,780 --> 00:44:16,180 もしそうなら、100ドルを吐き出すとそのバランスから100ドルを差し引きます。 750 00:44:16,180 --> 00:44:20,470 しかし、もちろん、ここに複数のマシンがある場合、検査などの複数の方法 751 00:44:20,470 --> 00:44:23,560 その世界の状況、銀行の金庫室は、あなたが持っているどのくらいのお金を見て、 752 00:44:23,560 --> 00:44:26,780 左のマシン、右はただ偶然にそれを仮定する 753 00:44:26,780 --> 00:44:30,140 両方は時間的にほぼ同じ瞬間にその質問をする。 754 00:44:30,140 --> 00:44:34,160 >> そして、これは確かに起こることができます。 ATMは、これらの日のコンピュータです。 755 00:44:34,160 --> 00:44:37,670 左のマシンが言うのであれば、 "はい、あなたは、少なくとも100ドルを持っている" 756 00:44:37,670 --> 00:44:42,150 一方、右側のマシンは、 "はい、あなたは、少なくとも$ 100を持っている"と言う。 757 00:44:42,150 --> 00:44:47,420 その後、それらの両方が自分のプログラムを終了し、実際に100ドルを吐き出すに進みます 758 00:44:47,420 --> 00:44:50,820 と "以前は、200ドルを持っていた"と言う。 759 00:44:50,820 --> 00:44:54,890 "私は今、アカウントに残って100ドルであるために、変数を更新してみましょう。" 760 00:44:54,890 --> 00:44:58,780 しかし、それらの両方は、あなたの口座の残高をチェックし、それが200ドルだということを発見した場合 761 00:44:58,780 --> 00:45:02,000 両者はその後、数学をやると言う200 - 100、 762 00:45:02,000 --> 00:45:06,990 マシンは、潜在的には、各マシンに2つの100ドル札を吐き出すた 763 00:45:06,990 --> 00:45:11,360 しかし、彼らは唯一の100ドルであることがあなたの合計口座の残高を更新しました。 764 00:45:11,360 --> 00:45:15,130 言い換えれば、あなたは200ドルを取り出してきましたが、彼らは世界の状態を検査しているため 765 00:45:15,130 --> 00:45:18,840 同時にして、その値に基づいて決定を下し、 766 00:45:18,840 --> 00:45:21,930 彼らは最終的に正しく計算を行うことではないかもしれません。 767 00:45:21,930 --> 00:45:25,520 だから、銀行のような状況でもあなたは本当にロックのいくつかの種類を持ってしたい 768 00:45:25,520 --> 00:45:28,450 ので、できるだけ早くあなたには、いくつかの変数の状態をチェックしてきたように 769 00:45:28,450 --> 00:45:31,220 アカウント残高のように、本当に重要なことだが、 770 00:45:31,220 --> 00:45:36,070 、あなたがあなたのことをやって終了するまで、他の誰かがそれに基づいて意思決定を行うことはできません 771 00:45:36,070 --> 00:45:38,920 このケースでは、左側にATMの場所です。 772 00:45:38,920 --> 00:45:41,160 皆をロックアウトします。 773 00:45:41,160 --> 00:45:44,650 あなたは実際にいくつかの異なる方法でこの効果を達成することができます。 774 00:45:44,650 --> 00:45:48,660 >> MySQLでの最も簡単な方法は、我々はあなたを与えたSQLの行です 775 00:45:48,660 --> 00:45:52,030 まさにこのように見える問題セット仕様インチ 776 00:45:52,030 --> 00:45:57,420 それが呼ばれるものは何でも - - ID、シンボル、および共有、株式数、テーブルに挿入 777 00:45:57,420 --> 00:45:59,660 例えば、以下の値。 778 00:45:59,660 --> 00:46:03,370 あなたはまだ仕様を読んでいない場合、これはどのように行くのですかに関する例です 779 00:46:03,370 --> 00:46:07,340 社長Skroob、このペニー株の10株を買って、 780 00:46:07,340 --> 00:46:10,340 ユーザーIDが7番であることを起こる? 781 00:46:10,340 --> 00:46:14,070 これは、テーブル、次の番号、記号、株式数にINSERT言う 782 00:46:14,070 --> 00:46:18,200 7、 'DVN.V'、および10。 783 00:46:18,200 --> 00:46:21,510 しかし - しかし、しかし、しかし - 二行目は重要なものです。 784 00:46:21,510 --> 00:46:26,310 DUPLICATE KEY UPDATE株式に関する株式= +値(株)。 785 00:46:26,310 --> 00:46:28,350 だから、完全に一目見ただけで不可解な見通し。 786 00:46:28,350 --> 00:46:31,990 それが2行に折り返されていても、このSQLクエリーことが、実際、 787 00:46:31,990 --> 00:46:35,920 1長いクエリですが、それがアトミックであることを意味します 788 00:46:35,920 --> 00:46:41,000 このクエリは、まったくすべて一緒かに関係なく実行されるという意味で。 789 00:46:41,000 --> 00:46:45,100 とMySQLの定義によると、それは彼らがこのクエリを実装する方法は以下の通りです。 790 00:46:45,100 --> 00:46:51,010 それがすべてでは一度かに関係なくすべてを実行するために保証されたマニュアルで定義することです。 791 00:46:51,010 --> 00:46:54,020 この動機は以下の通りです。 792 00:46:54,020 --> 00:46:58,540 このケースでは、株式の10株を購入しようとしている場合は、 793 00:46:58,540 --> 00:47:02,260 それは牛乳と同じ話のようなものだ、それはATMと同じ話のようなものだ。 794 00:47:02,260 --> 00:47:04,970 >> あなたは、この構文を使用していないのを間違えた場合 795 00:47:04,970 --> 00:47:09,610 その代わりに、このペニー株式の株式数は何株を参照するには、データベースから選択する 796 00:47:09,610 --> 00:47:13,750 社長Skroobは、持っている、と彼は10株が含まれているとしない 797 00:47:13,750 --> 00:47:19,330 その後いくつかの一瞬後には、UPDATE文を実行し、 798 00:47:19,330 --> 00:47:24,810 これは、先に行くと、10以上の株式を追加すると言うSQLで別の文です 799 00:47:24,810 --> 00:47:28,700 そう理想的に合計が20であることを彼の現在〜10、 800 00:47:28,700 --> 00:47:33,490 問題は、今日のデータベースシステムで、今日のコンピュータの理由からです 801 00:47:33,490 --> 00:47:35,990 あなたは、複数のプロセッサ、複数のコアを持っている - 802 00:47:35,990 --> 00:47:38,920 つまり、コンピュータは文字通り、一度に複数のことをやってすることができます - 803 00:47:38,920 --> 00:47:44,270 あなたの選択して、このケースでは、UPDATE、その保証はありません 804 00:47:44,270 --> 00:47:46,150 背中合わせに起きようとしている。 805 00:47:46,150 --> 00:47:49,140 そんなに悪いシナリオでは、SELECTを実行するだろう 806 00:47:49,140 --> 00:47:51,670 Skroobがどのように多くのこのペニー株式持っていません見て、 807 00:47:51,670 --> 00:47:54,710 し、ただ偶然、別のデータベース·クエリが実行されます - 808 00:47:54,710 --> 00:47:57,740 多分別のブラウザウィンドウでそのSkroobは10株​​を購入しようとし 809 00:47:57,740 --> 00:48:00,700 別のウィンドウに完全に、多くのATMのような - 810 00:48:00,700 --> 00:48:05,410 と別のクエリがSELECT、UPDATEの間に取得することを仮定します。 811 00:48:05,410 --> 00:48:10,210 それはSkroob現在株式のいくつかの番号を失うことをそうであるかもしれません 812 00:48:10,210 --> 00:48:14,340 別のプロセスが彼の世界の状態を検査していますので、 813 00:48:14,340 --> 00:48:17,800 または彼は彼が持っている必要以上の株式を取得します。 814 00:48:17,800 --> 00:48:23,250 我々は、それらの特定のストーリーラインは次のようになります正確に何の子細に入ることはありません 815 00:48:23,250 --> 00:48:28,380 あなたは、変数の値を確認してから決断をしなければならない場合、ポイントはある 816 00:48:28,380 --> 00:48:32,500 それらの2つの文の間に何かをやって、他の誰かの危険性があったのなら、 817 00:48:32,500 --> 00:48:36,220 としては、マルチコア·システムでは、マルチプロセッサシステムで発生する可能性があります 818 00:48:36,220 --> 00:48:41,220 一度に複数のことを実行する能力を持つコンピュータは、悪いことが起こることができます 819 00:48:41,220 --> 00:48:44,530 のような銀行口座は、二回ほどミルクを買って、間違って引き落とされている 820 00:48:44,530 --> 00:48:46,730 株式またはこの場合の番号が間違っていた。 821 00:48:46,730 --> 00:48:48,370 しかし、このことを考えて、もっと簡単な方法があります。 822 00:48:48,370 --> 00:48:53,290 >> それは、あなたのテーブルを正しく設定している場合、SQLもサポートしていることが判明 823 00:48:53,290 --> 00:48:56,920 私が主張したいの取引と呼ばれるものは、理解することは実際にも簡単です 824 00:48:56,920 --> 00:49:00,650 これよりも、それは1ライナーではないので、実際にはもっと複雑だ。 825 00:49:00,650 --> 00:49:04,960 のSTART TRANSACTIONと呼ばれるSQLステートメントでは、文字通りあります。 826 00:49:04,960 --> 00:49:08,300 そこに、SELECT、INSERT、UPDATE、DELETE、および結合がだと他人の束と同じようにすると、 827 00:49:08,300 --> 00:49:10,970 のSTART TRANSACTIONなどのキーワードがあります。 828 00:49:10,970 --> 00:49:13,560 そして、あなたはその後のpset 7のコンテキストで何をすべきか - 829 00:49:13,560 --> 00:49:17,270 あなたは、pset 7のためにこれを行う必要はありません、それは必要ではないように明示的に否認だが、 830 00:49:17,270 --> 00:49:18,830 しかし、最終的なプロジェクトでは、それは便利です - 831 00:49:18,830 --> 00:49:22,820 あなたは、START TRANSACTION、その後、別のクエリのクエリを呼び出す場合 832 00:49:22,820 --> 00:49:25,620 その後、別のクエリし、別の、もう一つの、別の、 833 00:49:25,620 --> 00:49:31,860 は、SQLステートメントは、COMMITを呼び出すまで、それらのクエリは実際には実行されません 834 00:49:31,860 --> 00:49:37,220 その時点で、それは2文か20文なのか、それらはすべて、一度に実行されます 835 00:49:37,220 --> 00:49:42,770 それは誰もが偶然すぎて牛乳やデビットあまりお金を買うことができないことを意味 836 00:49:42,770 --> 00:49:46,340 あなたのクエリのすべてが実行されるので、またはあまりにも多くの株式を購入する 837 00:49:46,340 --> 00:49:48,410 背中合わせに背中合わせにします。 838 00:49:48,410 --> 00:49:51,580 そして、これはあなたがこのような何かをやっている場合は特に、超重要です。 839 00:49:51,580 --> 00:49:54,900 これはletの銀行口座を更新すると言う任意の例です。 840 00:49:54,900 --> 00:50:00,200 口座番号が2である場合$ 1000 - バランスに等しいバランスを設定することによって。 841 00:50:00,200 --> 00:50:04,260 そして、2番目の文では、今度はその千ドルを堆積させている 842 00:50:04,260 --> 00:50:07,310 その口座番号は1です誰かの銀行口座に。 843 00:50:07,310 --> 00:50:10,400 >> 言い換えれば、これはあなたが確認したい場所の完璧な例です 844 00:50:10,400 --> 00:50:13,590 これらのステートメントの両方が全く起こらないかという 845 00:50:13,590 --> 00:50:15,450 そうでなければ顧客がねじ込まために行っているので 846 00:50:15,450 --> 00:50:17,670 、あなたは、彼らのお金を取ることにして他の場所に堆積しないつもりだ 847 00:50:17,670 --> 00:50:20,470 や銀行はあなたがお金を入金するつもりだどこにねじ込むために起こっている 848 00:50:20,470 --> 00:50:23,140 しかし、実際にユーザのアカウントからそれを減算しない。 849 00:50:23,140 --> 00:50:25,810 それで、あなたはそれらの両方が一緒に実行したい。 850 00:50:25,810 --> 00:50:29,140 したがって、世界の取引を締結している。 851 00:50:29,140 --> 00:50:31,360 だからそれは、あなたの心の奥に留めておくべきものだ 852 00:50:31,360 --> 00:50:34,710 ただ最終的なプロジェクトの目的のためにそんなにしない、 853 00:50:34,710 --> 00:50:36,700 しかし、あなたはどこかにあなたの最終的なプロジェクトを利用したい場合は、 854 00:50:36,700 --> 00:50:39,040 あなたは、その周りにいくつかの会社を立ち上げたい場合 855 00:50:39,040 --> 00:50:41,270 あなたは、キャンパス内にいくつかの学生グループの問題を解決したい場合 856 00:50:41,270 --> 00:50:45,210 そして実際に生きている、アクティブなウェブサイトを持っている、これらが発生する可能性が微妙なバグの夫婦です 857 00:50:45,210 --> 00:50:49,480 あなたは非常に2人いる場合何が起こるかをよく考えていない場合 858 00:50:49,480 --> 00:50:54,190 時間内に文字通り同じ瞬間にあなたのウェブサイトにアクセスしようとしている、 859 00:50:54,190 --> 00:50:56,890 これにより、クエリは、他に織り込まれてしまうかもしれません。 860 00:50:58,840 --> 00:51:01,420 >> いくつかのJavaScript、そのお誘いの準備はできましたか? 861 00:51:01,420 --> 00:51:04,320 これは学期のための私達の最後の言葉です。かしこまりました。 862 00:51:04,320 --> 00:51:09,940 ありがたいことに、JavaScriptは、2言語、CやPHPに非常に、非常に、非常によく似ています 863 00:51:09,940 --> 00:51:11,140 我々はこれまでに行ってきました。 864 00:51:11,140 --> 00:51:14,340 そこのpset 7にはJavaScriptはありませんが、それは非常に便利なツールだ 865 00:51:14,340 --> 00:51:18,840 それは、Webベースの最終的なプロジェクトをやったり、実際には単なるWebプログラミングより一般的になると。 866 00:51:18,840 --> 00:51:20,950 DOMと呼ばれるものの概要を簡単そう。 867 00:51:20,950 --> 00:51:23,600 ここは本当にちょうどこんにちは、世界と言う超簡単なWebページがある 868 00:51:23,600 --> 00:51:25,970 タイトルと本体の両方で。 869 00:51:25,970 --> 00:51:29,270 インデントは、いくつかの時間を示唆してきたように 870 00:51:29,270 --> 00:51:31,380 Webページへの階層は確かに存在する。 871 00:51:31,380 --> 00:51:34,220 私は、木のように、HTMLのこの同じスニペットを描くこと 872 00:51:34,220 --> 00:51:37,470 C言語でのデータ構造のわれわれの議論に戻って考えると、次のとおりであります。 873 00:51:37,470 --> 00:51:40,710 私は、文書ノードと呼ばれるいくつかの特別なルートノードを持つ 874 00:51:40,710 --> 00:51:43,650 私達はちょうどその瞬間にJavaScriptでこのアナログを見ることができます。 875 00:51:43,650 --> 00:51:48,330 この場合の第一子とその唯一の子は、HTMLタグです。 876 00:51:48,330 --> 00:51:49,880 doctypeの直接的なマッピングはありません。 877 00:51:49,880 --> 00:51:53,170 、それは特別なことなので、それはこのDOMに来るとき、我々はそれを無視するべきである 878 00:51:53,170 --> 00:51:55,810 このドキュメント·オブジェクト·モデル·ツリー。 879 00:51:55,810 --> 00:51:59,530 私は矩形として任意に描かれたHTMLタグ、その予告 880 00:51:59,530 --> 00:52:02,890 頭と体:2人の子供を持っています。 881 00:52:02,890 --> 00:52:04,840 >> それらは同様に矩形として描かれています。 882 00:52:04,840 --> 00:52:08,970 それは頭が体の左側にあることを模式的に意味があります。 883 00:52:08,970 --> 00:52:11,960 含意は頭がツリーに最初に来るということです。 884 00:52:11,960 --> 00:52:14,910 ですから、このようにそれを描画するときに、ツリーに順序が実際にあり 885 00:52:14,910 --> 00:52:17,460 形状やその他もろもろは、任意であるにもかかわらず。 886 00:52:17,460 --> 00:52:20,360 ヘッドは、一方、タイトルと呼ばれる単一の子を持って 887 00:52:20,360 --> 00:52:25,170 とタイトルが実際には、 "hello、world"である独自の子を持っています 888 00:52:25,170 --> 00:52:32,210 これは私は意図的に四角形から、それがわずかに異なるにするには、ここに楕円形として描きました。 889 00:52:32,210 --> 00:52:37,420 こんにちは、世界が本当にテキストノードであるのに対し、これらの長方形は、要素です。 890 00:52:37,420 --> 00:52:39,850 だからそれは、ツリー内のノードが、それはノードの異なるタイプです 891 00:52:39,850 --> 00:52:41,730 ので、私は勝手に違ったように描きました。 892 00:52:41,730 --> 00:52:45,000 同様にhelloという名前の子だけでなく、世界を、身体を持っていません 893 00:52:45,000 --> 00:52:47,910 彼らが偶然同じテキストいるにもかかわらずとても異なるノード、 894 00:52:47,910 --> 00:52:52,100 しかし、私は、同じ形状を使用して、それを描いています。だから、誰も気にしない? 895 00:52:52,100 --> 00:52:56,820 さて、HTMLについて素敵なものだ、それがこの階層的な性質を持っていないということです。 896 00:52:56,820 --> 00:53:01,010 そして、何JavaScriptについて素敵だし、自由に利用できます特にライブラリ 897 00:53:01,010 --> 00:53:07,120 とjQueryのような人気のある、あなたはとても驚くほど簡単にツリー構造をナビゲートすることができます。 898 00:53:07,120 --> 00:53:11,790 我々は、ポインタと横断木を使用してCでやったようなもののすべてとノードで再帰する 899 00:53:11,790 --> 00:53:15,300 右の子の左の子、我々が当たり前のように並べ替えることができますすべての突然の 900 00:53:15,300 --> 00:53:19,450 少しイライラしない場合は、驚くほどの啓発であるとして 901 00:53:19,450 --> 00:53:22,470 はなく、ほぼプログラミングについて移動する効率的な方法です。 902 00:53:22,470 --> 00:53:24,470 それで、JavaScriptのようなこれらのより高いレベルの言語で 903 00:53:24,470 --> 00:53:28,340 我々は、はるかに直感的にこのツリーをナビゲートすることができるでしょう。 904 00:53:28,340 --> 00:53:30,430 >> そして確かに構文は非常に精通していることになるだろう。 905 00:53:30,430 --> 00:53:32,950 あなたが前にJavaScriptを見たことがないなら、これは本当に素晴らしい参照です 906 00:53:32,950 --> 00:53:35,910 Mozillaの人々は、Firefoxを作る人、から 907 00:53:35,910 --> 00:53:38,370 ので、あなたの都合に合わせてそれを拾い読みして自由に感じています。 908 00:53:38,370 --> 00:53:41,590 あなたは何を見つけることができます - そしてこれらのスライドは、我々は先日使用したものと同じです - 909 00:53:41,590 --> 00:53:44,030 同様に、メインがなくなっています。 910 00:53:44,030 --> 00:53:47,010 だから、JavaScriptでプログラムを書くとき、何主な機能はありません。 911 00:53:47,010 --> 00:53:48,690 あなただけのコードを書き始める。 912 00:53:48,690 --> 00:53:51,660 しかし、JavaScriptとCとPHPの間の重要な違い 913 00:53:51,660 --> 00:53:55,890 つまりCとPHPはこれまでサーバー側を実行されたのに対し、 914 00:53:55,890 --> 00:53:59,180 この場合のアプライアンスによって、またはより一般的に、サーバーによって、 915 00:53:59,180 --> 00:54:04,270 デザインではJavaScriptを通常ブラウザで実行されています。 916 00:54:04,270 --> 00:54:08,440 言い換えれば、あなたは、我々がうとしているように、JavaScriptコードを書くかもしれない 917 00:54:08,440 --> 00:54:13,080 アプライアンス内のサーバが、あなたはあなたのCSSの間では、HTMLの中でそれを含んで、 918 00:54:13,080 --> 00:54:16,100 あなたのGIFやPNGを使い、あなたのJPEGファイルの間で 919 00:54:16,100 --> 00:54:19,170 もしそうなら、あなたはJavaScriptを使用している場合、ユーザーがWebページを訪問したときにその 920 00:54:19,170 --> 00:54:21,770 そのJavaScriptコードは、サーバーからブラウザに来る 921 00:54:21,770 --> 00:54:24,540 そしてそれは実際にそれを実行するブラウザーです。 922 00:54:24,540 --> 00:54:27,960 だから、これはあっても知的財産のための有意義な意味を持っています。 923 00:54:27,960 --> 00:54:32,600 それも、それはJavaScriptのコードに来るとき、あなたのIPを保護を考える愚かなものだ 924 00:54:32,600 --> 00:54:37,560 言語の性質によって、それは通常ブラウザ側に実行されますので。 925 00:54:37,560 --> 00:54:40,360 >> あなたはそれが狂気と醜い見えるようにすることができますを意味し、それを難読化することができ 926 00:54:40,360 --> 00:54:45,400 スペースなしで、人々があなたのIPアドレスを盗むことが難しくなるために恐ろしい変数名、 927 00:54:45,400 --> 00:54:48,120 しかしキーは、それがブラウザ側に実行されるということです。 928 00:54:48,120 --> 00:54:51,790 さておき、JavaScriptなどのサーバー側を使用することができるにもかかわらず、 929 00:54:51,790 --> 00:54:54,480 最も一般的なユースケースは、現在ブラウザに残っている。 930 00:54:54,480 --> 00:54:59,800 そして、ここではそれがどのように見えるのです。ここでのif-else if-elseのただPHPのように、ちょうどCのような構築物である。 931 00:54:59,800 --> 00:55:02,420 とき "または" 2物事が一緒にここにブール式です。 932 00:55:02,420 --> 00:55:04,330 ここで一緒にしたときには "と" 2物事。 933 00:55:04,330 --> 00:55:08,300 ここではPHPに似ているswitch文があり、 934 00:55:08,300 --> 00:55:10,810 という点では、様々なタイプの値に切り替えることができます。 935 00:55:10,810 --> 00:55:15,180 ループは、同様に、我々は前に見たものとまったく同じように構造化されているここでループのために持っている。 936 00:55:15,180 --> 00:55:18,110 しながらループしておりますが、ループしながらやるんだ。 937 00:55:18,110 --> 00:55:20,290 変数は、ほんの少し異なる。 938 00:55:20,290 --> 00:55:24,560 あなたはPHPとC言語で行うようにして、変数を宣言し、 939 00:55:24,560 --> 00:55:27,860 しかし、同様にJavaScriptを弱く型付けされています。 940 00:55:27,860 --> 00:55:32,730 通常は、そのようなintやfloatや文字列または何も指定しない。 941 00:55:32,730 --> 00:55:34,240 あなたは、varを指定することができます。 942 00:55:34,240 --> 00:55:38,040 あなたは、varを指定する必要はありませんが、そうでない場合、それは意味を持っています。 943 00:55:38,040 --> 00:55:42,000 varを省略した場合は通常、あなたが誤ってではなく、ローカルのグローバル変数を作成します。 944 00:55:42,000 --> 00:55:46,420 だから、変数の名前、あなたはほとんど常にちょうどvarの言うことを私は提案してみましょうと。 945 00:55:46,420 --> 00:55:48,740 それはタイプではない、それは変数のVARだけだ。 946 00:55:48,740 --> 00:55:52,930 これは、123または "hello、world"のものかどうか、例でしょう。 947 00:55:52,930 --> 00:55:58,910 配列が存在し、PHPの文法的に似ています。 948 00:55:58,910 --> 00:56:03,690 私はvar数字を言うだろうし、私は変数を宣言するには、もう一度、角括弧を使用 949 00:56:03,690 --> 00:56:08,870 その型はコンマで区切られ、その中にこれらの特定の番号を持っている配列です。 950 00:56:08,870 --> 00:56:11,740 そして、最後に、これは本当に違って見えるだけです。 951 00:56:11,740 --> 00:56:16,700 PHPで私たちは学生のための連想配列を実装しているであろうことを思い出してください 952 00:56:16,700 --> 00:56:20,220 Zamylaような変数は学生と呼ばれる場所だから、このようになります。 953 00:56:20,220 --> 00:56:23,370 角括弧は、ここで配列が来ることを意味します。 954 00:56:23,370 --> 00:56:28,500 >> 私は数値インデックスが、文字列を使用していないという事実 - イド、家、名前 - 955 00:56:28,500 --> 00:56:30,990 これは連想配列であることを意味します 956 00:56:30,990 --> 00:56:34,490 等号と角度ブラケット付きとこれらの矢印 957 00:56:34,490 --> 00:56:37,310 キーは "id"があることを意味し、値は1です。 958 00:56:37,310 --> 00:56:39,310 鍵は "家"であり、値はウィンスロップハウスです。 959 00:56:39,310 --> 00:56:41,800 キーは "名前"ですが、値がZamylaチャンです。 960 00:56:41,800 --> 00:56:47,110 だから内部の独自の値をそれぞれ有するこの連想配列、の3つのキーがあります。 961 00:56:47,110 --> 00:56:52,880 我々は、pset 7であることを見てきたか、あなたは間もなく、JavaScriptの同じ考えで、 962 00:56:52,880 --> 00:56:55,220 それはこのように見えるだろう。 963 00:56:55,220 --> 00:57:00,070 だから、varの学生は - noドル記号と種類には言及しないが、それでもVAR - 964 00:57:00,070 --> 00:57:05,860 は、キーと値のペアを持っている場合、JavaScriptであるため、中括弧を開き等しく、 965 00:57:05,860 --> 00:57:08,900 実際にはオブジェクトと呼ばれるものを使用しています。 966 00:57:08,900 --> 00:57:13,490 とAPCを取るかのようでしたあなたの人々は、Javaのオブジェクトを思い出すかもしれない 967 00:57:13,490 --> 00:57:15,140 またはそれに似た言語。 968 00:57:15,140 --> 00:57:17,880 JavaScriptは、まず第一に、Javaではありません。 969 00:57:17,880 --> 00:57:21,600 それは、人気がありました何か他のものをノックするために数年前に意図的な設計上の決定だった 970 00:57:21,600 --> 00:57:25,640 その名前、それ自体がJavaには根本的な関係を持っていないにもかかわらず。 971 00:57:25,640 --> 00:57:31,490 JavaScriptはオブジェクトを持って、あなたは中括弧の表記の方法で作成してください。 972 00:57:31,490 --> 00:57:36,710 JavaScriptでのオブジェクトはPHPの連想配列のほとんど同等である 973 00:57:36,710 --> 00:57:40,030 それはそれらの内部のデータを保存するために来るとき。 974 00:57:40,030 --> 00:57:44,100 >> しかし、さらに強力にJavaScriptで、非常に簡単に機能を関連付けることができます 975 00:57:44,100 --> 00:57:48,040 オブジェクトの内側に、あなたは、他の言語でこれを行うことができますけど 976 00:57:48,040 --> 00:57:50,040 我々が見るように、それは、かなり一般的なパラダイムです。 977 00:57:50,040 --> 00:57:54,380 要するに、このオブジェクトには、特にZamylaある学生を、表し、 978 00:57:54,380 --> 00:58:00,380 そしてそれは、概念的にはこれよりわずかに異なる構文的に似ています。 979 00:58:00,380 --> 00:58:03,840 実際にファイルにJavaScriptを使用してみましょう。 980 00:58:03,840 --> 00:58:05,570 scriptタグがあるとアウトそれは変わります。 981 00:58:05,570 --> 00:58:08,180 我々は、styleタグを見てきたし、我々は他のHTMLタグを見てきました。 982 00:58:08,180 --> 00:58:11,510 スクリプトタグは、実際にいくつかのJavaScriptコードが含まれます。 983 00:58:11,510 --> 00:58:15,500 私は、我々はいくつかのソースコードがあらかじめセットされているアプライアンスに行こう。 984 00:58:15,500 --> 00:58:18,700 私はウェブサイト上でそれをまだ投稿していないが、私は授業の後それをやる。 985 00:58:18,700 --> 00:58:21,770 この1、blink.htmlを開いてみましょう。 986 00:58:21,770 --> 00:58:27,560 1990年代に、BLINKタグと呼ばれるHTMLタグは、文字通りありました 987 00:58:27,560 --> 00:58:30,340 これはインターネット上で最も素晴らしく使い古さタグの一つであった 988 00:58:30,340 --> 00:58:36,140 それによってあなたは、いくつかの90年代スタイルのWebページにアクセスし、このようにあなたを点滅するテキストを見て起動したい 989 00:58:36,140 --> 00:58:39,810 テキストこのように起こっていた侯爵タグの結果、。 990 00:58:39,810 --> 00:58:45,070 世界が実際にWeb標準に合意している数少ない例の一つ、 991 00:58:45,070 --> 00:58:48,250 軒並み皆は、何年か前にブリンクタグを殺した。 992 00:58:48,250 --> 00:58:52,860 しかし、我々はあなたが持っている力のデモンストレーションとして、JavaScriptでそれを復活させることができます 993 00:58:52,860 --> 00:58:56,660 あなたがWebページ内のプログラムを書くことができるとき。 994 00:58:56,660 --> 00:59:00,240 まず最初は新しいものを飛ばし、古​​いだけに集中しましょう​​。 995 00:59:00,240 --> 00:59:01,780 >> ここでは、この例では、古いものです。 996 00:59:01,780 --> 00:59:06,350 私は、HTMLタグ、headタグ、タイトルタグを持っている。 997 00:59:06,350 --> 00:59:11,210 それから私は、リコールはちょうど長方形のページの分割であるdiv、とここでbodyタグを持っている 998 00:59:11,210 --> 00:59:14,720 私は、への "挨拶"の任意の一意のIDを与えてくれたこと 999 00:59:14,720 --> 00:59:18,320 ちょうどので、私はいくつかの非常に単純なテキストを持っている唯一それを参照する方法を持っている: 1000 00:59:18,320 --> 00:59:20,220 こんにちは、世界。 1001 00:59:20,220 --> 00:59:23,940 今私は、このファイルの先頭までスクロールして、何が新しくなったのか見てみましょう。 1002 00:59:23,940 --> 00:59:27,710 新しいアップ上部にある最初の事は、スクリプトタグです 1003 00:59:27,710 --> 00:59:31,280 とscriptタグの通知の中に私は、関数を宣言した。 1004 00:59:31,280 --> 00:59:34,610 PHPに非常に類似したJavaScriptの関数を宣言するには、 1005 00:59:34,610 --> 00:59:37,930 あなたは、文字通り、その関数の名前、かっこを、関数を書く 1006 00:59:37,930 --> 00:59:40,400 そしておそらくいくつかの引数は、任意のを取る場合。 1007 00:59:40,400 --> 00:59:43,510 、それから私はいつものように私の中括弧を持っている、そして今我々はいくつかのわずかに新しいコードを持っている 1008 00:59:43,510 --> 00:59:45,230 しかし、これが何を意味するのか見てみましょう。 1009 00:59:45,230 --> 00:59:48,670 だから、varのdivは、これはちょうど私と呼ばれる変数のdivを与えることを意味します。 1010 00:59:48,670 --> 00:59:50,530 私はそれをfooと呼ばれるかもしれないが、私はそれはdiv要素と呼ばれることを望んで 1011 00:59:50,530 --> 00:59:52,620 第二には明らかであろう理由のため。 1012 00:59:52,620 --> 00:59:57,480 それはJavaScriptで判明 - そしてこれは私のWebページに埋め込まれたJavaScriptのコードです - 1013 00:59:57,480 --> 01:00:01,760 ドキュメントと呼ばれるある種の特別なグローバル変数があります。 1014 01:00:01,760 --> 01:00:04,780 JavaScriptは、実際にはオブジェクト指向言語です。 1015 01:00:04,780 --> 01:00:07,230 我々は、それが何を意味するかのように50で詳細には触れません 1016 01:00:07,230 --> 01:00:11,180 しかし、今のオブジェクトが構造体と非常に良く似ていることを知っている。 1017 01:00:11,180 --> 01:00:14,740 最古の問題のいずれかで設定したとき、我々は戻って道を見たような 1018 01:00:14,740 --> 01:00:17,150 ここで我々は、構造体で多くの情報を入れ 1019 01:00:17,150 --> 01:00:21,330 同様に、ブラウザに付属の専用構造を文書化されている 1020 01:00:21,330 --> 01:00:24,810 任意のWebページが付属しています。それは私が作成したものではない。 1021 01:00:24,810 --> 01:00:28,210 この文書構造の内部には、しかし、あなたはデータだけでなく、持っている 1022 01:00:28,210 --> 01:00:30,010 しかし、あなたはまた、機能を持っています。 1023 01:00:30,010 --> 01:00:34,090 >> あなたはオブジェクトの内部、構造体の内部機能を持っており、いつでも、 1024 01:00:34,090 --> 01:00:36,490 それはメソッドと呼ばれています。しかし、それは同じことだ。 1025 01:00:36,490 --> 01:00:40,110 方法はちょうどので、何か他のものの中にあることを起こる機能です。 1026 01:00:40,110 --> 01:00:42,990 この特別なグローバル変数はドキュメントと呼ばれることを意味しますので、 1027 01:00:42,990 --> 01:00:47,690 この関数は、文字通りその行いgetElementByIdを呼びかけている。 1028 01:00:47,690 --> 01:00:52,460 それはあなたのDOM、ドキュメントオブジェクトモデルツリーから要素を取得する 1029 01:00:52,460 --> 01:00:55,520 この場合の挨拶で、そのIDである。 1030 01:00:55,520 --> 01:00:59,200 言い換えれば、我々は、データ構造に費やしたすべての時間は、ここで場に出る。 1031 01:00:59,200 --> 01:01:01,400 我々は少し前に持っていたDOMのこの絵、 1032 01:01:01,400 --> 01:01:06,100 私はこの絵にdivを持っていた場合、ページは、少し異なっているにもかかわらず、 1033 01:01:06,100 --> 01:01:11,180 何のdocument.getElementByIdが私に戻ってくると、効果的にポインタであろう 1034 01:01:11,180 --> 01:01:15,440 ツリーは、ツリー内の矩形を基準に四角形へ。 1035 01:01:15,440 --> 01:01:18,410 だから、それはそれは実際にそれらのいずれかの関数を呼び出すために何を意味するかだ。 1036 01:01:18,410 --> 01:01:21,960 この場合、再びそれはdivです。それは、身体またはタイトルはありません。 1037 01:01:21,960 --> 01:01:26,480 だから私は、その後すぐに私はそれは、この変数と呼ばれるdivの内側に持っていることをこのdivで何かを見てみましょう。 1038 01:01:26,480 --> 01:01:32,580 それはあなたが動的にページのCSSを微調整する能力を持っているJavaScriptを使用して判明した。 1039 01:01:32,580 --> 01:01:39,060 今まで、我々は限られたとはいえ、やったCSS、のすべてが、style属性である 1040 01:01:39,060 --> 01:01:41,730 または他にどこ私たちは、CSSを入れている? 1041 01:01:42,730 --> 01:01:45,810 甘やかされて育ったその1の私は一種。ファイルの先頭にあるstyleタグで。 1042 01:01:45,810 --> 01:01:49,180 または3位はでてきた? 1043 01:01:50,710 --> 01:01:54,590 >> 外部ファイルは、何か。CSS。 1044 01:01:54,590 --> 01:01:56,730 だからそれらは、我々はCSSのこれまで行ってきた3の場所です 1045 01:01:56,730 --> 01:01:59,310 しかし、漁獲量は、我々は一生懸命それをすべてコーディングしています。 1046 01:01:59,310 --> 01:02:04,060 私たちのCSSはどのようになるか講義前にPSET 7に鳩のようにして決定した、我々は決めた。 1047 01:02:04,060 --> 01:02:07,380 あなたのCSSを変更したい場合は、しかし、あなたが実際にそれを行うことができます 1048 01:02:07,380 --> 01:02:09,370 一度は、実際のプログラミング言語を持っています。 1049 01:02:09,370 --> 01:02:13,910 CSS、HTML、 - しないプログラミング言語。 JavaScriptがある。 1050 01:02:13,910 --> 01:02:18,200 だから、できるだけ早くあなたが木からこれらの矩形のいずれかを持っていることが判明 1051 01:02:18,200 --> 01:02:23,050 DOMと呼ばれる、それ自体がその中のいくつかのデータを持っています。 1052 01:02:23,050 --> 01:02:27,820 だから、僕は木から取っているdiv要素は、我々はその中にプロパティを呼んでいるものがあります 1053 01:02:27,820 --> 01:02:34,390 スタイルと呼ばれ、スタイルプロパティは、それ自体が視認性と呼ばれる性質を有している。 1054 01:02:34,390 --> 01:02:37,330 私はCSSのユーザーズマニュアルを調べることによって、このことを知っているだろう。 1055 01:02:37,330 --> 01:02:41,160 それが言うことない視認性のCSSプロパティがあるとアウトそれは変わります。 1056 01:02:41,160 --> 01:02:44,530 それが見えるか見えない、見えるか見えない何かになります。 1057 01:02:44,530 --> 01:02:46,810 そして、これはどのようにこれを行うことである。 1058 01:02:46,810 --> 01:02:50,510 このdivの視認性が隠されている場合、私は、プログラムで求めている 1059 01:02:50,510 --> 01:02:53,390 私はそれを何を変更するのですか?目に見える。 1060 01:02:53,390 --> 01:02:58,840 このページの視認性が隠されていない場合は、Else、論理的に私はそれが隠されたことはない。 1061 01:02:58,840 --> 01:03:04,070 私はそれが目に見えると隠されたと目に見えるものと見えないではない理由はわかりません。 1062 01:03:04,070 --> 01:03:06,000 これは、道に沿って貧弱な設計上の決定だった。 1063 01:03:06,000 --> 01:03:09,530 表示と非表示:しかし、それらは確かにCSSで反対語です。 1064 01:03:09,530 --> 01:03:15,520 このすべては、オンとオフ、それはオンとオフを私のファイルのCSSを変更することを意味しているん 1065 01:03:15,520 --> 01:03:16,870 その特定のdivの。 1066 01:03:16,870 --> 01:03:20,630 しかし、再び、これは点滅に呼び出される関数である。点滅機能はいつ呼ばれているのですか? 1067 01:03:20,630 --> 01:03:24,080 それは、他の特別なグローバル変数と呼ばれるウィンドウがあることが判明 1068 01:03:24,080 --> 01:03:28,220 、文書とその精神においては似ていますが、文書のに対し、あなたのWeb​​ページを参照する 1069 01:03:28,220 --> 01:03:31,700 DOMツリーのように、HTMLは、サーバーから送られてきた 1070 01:03:31,700 --> 01:03:35,250 ウィンドウには、その周りにクローム、アドレスバー、タイトルバーを指します 1071 01:03:35,250 --> 01:03:37,880 あなたのウェブページの周りにそのようなもののすべて。 1072 01:03:37,880 --> 01:03:42,800 >> そしてそれは、windowオブジェクトは、setIntervalと呼ばれるそれの特殊な機能を内部に持っていることが判明 1073 01:03:42,800 --> 01:03:44,360 それはそれは言うことありません。 1074 01:03:44,360 --> 01:03:48,600 それは間隔を設定します - この場合500ミリ秒ごとに - 1075 01:03:48,600 --> 01:03:52,270 と、推測を取る、何それは500ミリ秒ごとに何をするつもりだ? 1076 01:03:52,270 --> 01:03:55,240 その関数の点滅を実行するために起こっている。 1077 01:03:55,240 --> 01:03:58,560 そして、何ここでは素敵なのは、私たちがやったことがないにもかかわらず、我々はC言語でこれを行っている可能性があることです。 1078 01:03:58,560 --> 01:04:01,580 Cは、あなたの周りの関数を渡すことができ、関数ポインタと呼ばれるものを持っていません 1079 01:04:01,580 --> 01:04:03,140 引数として。 1080 01:04:03,140 --> 01:04:07,620 同様に、JavaScriptで別の関数に関数の名前を渡すことができます。 1081 01:04:07,620 --> 01:04:10,630 と私がやっていることに気づく。私はこれをやっていないよ。 1082 01:04:10,630 --> 01:04:14,380 私は瞬きの後に括弧を置く場合、それは点滅関数を呼び出すことを意味する。 1083 01:04:14,380 --> 01:04:17,430 私はここで意味し、それらを省略した場合は点滅機能です 1084 01:04:17,430 --> 01:04:21,330 ようのsetIntervalは500ミリ秒ごとに呼び出すことができます。 1085 01:04:21,330 --> 01:04:28,200 だからそれでありながら凶悪な最終的な結果は、、、私はlocalhostに行くとblink.htmlに行けば、ということである 1086 01:04:28,200 --> 01:04:32,120 私は今、何度も何度もこの出来事を持っています。 1087 01:04:32,120 --> 01:04:34,950 そして、私は実際に要素を検査した場合、我々はこれを見ることができるかどうか見てみましょう。 1088 01:04:34,950 --> 01:04:38,550 私はエレメントを点検してみましょう、私は少しだけ下にスクロールしてみましょう 1089 01:04:38,550 --> 01:04:44,320 私はこっちの要素を選択してみましょう、とChromeのインスペクタのDOM内側に気づく。 1090 01:04:44,320 --> 01:04:48,840 それは文字通り、前後に500ミリ秒ごとに変化しています。 1091 01:04:48,840 --> 01:04:55,660 私達は私達の友人ネイトに行けば、 1092 01:04:55,660 --> 01:05:00,020 あなたは今までの間隔で、これはどのように動作しているか、同様の考えを疑問に思い、場合 1093 01:05:00,020 --> 01:05:04,810 しかしネイトは、ここで実際にこの特定のケースの色の非常に有効に活用されています。 1094 01:05:04,810 --> 01:05:07,350 だから何より、我々は実際にこれを行うことができますか? 1095 01:05:07,350 --> 01:05:09,990 別の例を開き、何かを試してみましょう 1096 01:05:09,990 --> 01:05:12,940 それはプログラムで物事が点滅を作るよりも、さらに便利です。 1097 01:05:12,940 --> 01:05:17,990 私は今日の我々のformsディレクトリに移動して、form0に行こう。 1098 01:05:17,990 --> 01:05:20,820 これは、私が思い付くことを醜い形だった可能性 1099 01:05:20,820 --> 01:05:23,290 と私はちょうどそれがブラウザでどのように見えるかお見せしましょう​​。 1100 01:05:23,290 --> 01:05:28,960 >> 私は、localhost /フォームに行こう、これはform0です。 1101 01:05:28,960 --> 01:05:33,400 これは、パスワードの入力、電子メールのためのいくつかのフィールドを持っている超醜いHTMLフォームです 1102 01:05:33,400 --> 01:05:37,190 パスワードを入力し、いくつかの諸条件に同意する]チェックボックスを少し。 1103 01:05:37,190 --> 01:05:41,350 私はこのフォームを訪問し、私はあなたに私のメールアドレスを与えたくない場合は、catchは、です 1104 01:05:41,350 --> 01:05:44,730 私は多分契約条件に同意したくない、私は、[登録]をクリックすることができます 1105 01:05:44,730 --> 01:05:46,920 そして、それはとにかく私を介してすることができます。 1106 01:05:46,920 --> 01:05:50,800 これはdump.php呼ばれる愚かなPHPファイルに提出することを起こる。 1107 01:05:50,800 --> 01:05:58,420 それはないすべては、単に診断目的のための$ _GETの内容をプリントアウトしています。 1108 01:05:58,420 --> 01:06:01,580 それはちょうど今、ユーザによって提出されたものだった。 1109 01:06:01,580 --> 01:06:05,010 しかし、我々は実際にユーザのフォーム送信を検証したいとしましょう​​。 1110 01:06:05,010 --> 01:06:06,530 私はバージョン1に行こう。 1111 01:06:06,530 --> 01:06:11,420 これはform1.htmlです。それは審美的に同じように悪いように見えますが、それがどのように空想に気づく。 1112 01:06:11,420 --> 01:06:15,450 協力せずに私の登録]をクリックした場合、私は怒鳴りつけられる。 1113 01:06:15,450 --> 01:06:17,320 "あなたはあなたの電子メールアドレスを提供する必要があります。" 1114 01:06:17,320 --> 01:06:21,670 かしこまりました。だから私はそれを試してみましょう。だからmalan@harvard.edu。私は、パスワードは必要ありません。 1115 01:06:21,670 --> 01:06:25,100 登録します。 "あなたはパスワードを入力する必要があります。"かしこまりました。 1116 01:06:25,100 --> 01:06:28,470 だから私は、真紅のパスワードを提供します。登録します。 1117 01:06:28,470 --> 01:06:32,300 "パスワードが一致しません。"私は今ここに真紅で入力しなければなりません。 1118 01:06:32,300 --> 01:06:35,710 私は誤っていることを確認しました。登録します。 1119 01:06:35,710 --> 01:06:39,860 "あなたが契約条件に同意する必要があります。"かしこまりました。そこに同意するものとします。登録します。 1120 01:06:39,860 --> 01:06:43,700 そして今、それは私のあそこに診断出力を示しています。 1121 01:06:43,700 --> 01:06:45,630 >> だから、何が起こったのか? 1122 01:06:45,630 --> 01:06:48,330 我々は、フォーム送信を検証するには、この能力を持っていた。 1123 01:06:48,330 --> 01:06:51,420 あなたはPSET 7にダイブをした場合は実際には、謝る機能はあり 1124 01:06:51,420 --> 01:06:54,620 それは、画面上のメッセージを持つユーザで叫ぶことをとても簡単に行うことができます。 1125 01:06:54,620 --> 01:06:57,580 私はわずかに異なるメカニズム、アラート機能を使用しています 1126 01:06:57,580 --> 01:07:03,690 それはそれは非常に醜いユーザメッセージを作る際に微笑んだので、関数ではありません。 1127 01:07:03,690 --> 01:07:05,710 しかし、私がここでやってるのか見てみましょう。 1128 01:07:05,710 --> 01:07:09,620 これはform1.htmlです、と私はいくつかの非常に使い慣れた構文を持っていることがわかります。 1129 01:07:09,620 --> 01:07:12,920 bodyタグ、formタグのaction属性、method属性。 1130 01:07:12,920 --> 01:07:17,050 しかし、私は私のフォームの利便性の一意のIDを与えてくれたのに気づく。 1131 01:07:17,050 --> 01:07:19,190 それから私は、そのタイプがテキストである電子メールのフィールドを持っている 1132 01:07:19,190 --> 01:07:23,780 そのタイプがタイプされたパスワードですパスワード、確認フィールドでパスワードフィールド、 1133 01:07:23,780 --> 01:07:28,070 その後、名前がこっちに合意ですチェックボックスは、タイプはチェックボックスです。 1134 01:07:28,070 --> 01:07:30,380 そして私は送信ボタンを持っている。 1135 01:07:30,380 --> 01:07:33,050 しかし、より多くの私が持っているものを一番上に気付く。 1136 01:07:33,050 --> 01:07:35,810 まず第一に、scriptタグの別の使用方法があります。 1137 01:07:35,810 --> 01:07:40,520 あなただけのCSSと同じように、別のファイルにいくつかのJavaScriptコードがある場合、あなたはそれを含めることができます。 1138 01:07:40,520 --> 01:07:44,530 そして、あなたはスクリプトのソースを使用して行うことが、その後私は明らかに接続しているに気づく 1139 01:07:44,530 --> 01:07:50,349 googleapis.comに非常に長いパスへのが、そのファイル名jquery.minで終わる 1140 01:07:50,349 --> 01:07:52,420 最低。JS。 1141 01:07:52,420 --> 01:07:55,969 jQueryにはJavaScriptを行うJavaScriptのための超人気のライブラリです 1142 01:07:55,969 --> 01:07:58,230 使用するすべてのより多くのユーザーフレンドリー。 1143 01:07:58,230 --> 01:08:00,610 それは効果的にデファクトスタンダードになってきた。 1144 01:08:00,610 --> 01:08:04,090 それで、あなたが見ることについてだがそれ自体が純粋なJavaScriptでなくても、 1145 01:08:04,090 --> 01:08:09,340 それははるかにCS50のようなJavaScriptライブラリの上にライブラリが層である 1146 01:08:09,340 --> 01:08:13,670 低レベルのCコードの上に、現実にはほとんどインターネット上の誰もがそれを使用しています。 1147 01:08:13,670 --> 01:08:18,030 したがって、これらは補助輪ではありません。これは、単に最高のこれらの日の練習である。 1148 01:08:18,030 --> 01:08:22,830 今、私の独自のスクリプトタグでその下に気づく、と私はここで何をやったかがわかります。 1149 01:08:22,830 --> 01:08:27,450 これは、jQueryが何か少し派手なないことが判明した。 1150 01:08:27,450 --> 01:08:29,660 JavaScriptは、ドル記号がありますが、それらは意味がありません。 1151 01:08:29,660 --> 01:08:32,870 >> 彼らは、文字またはBまたはCのようなもの 1152 01:08:32,870 --> 01:08:36,670 jQueryは単に事実をのんびりとクレームの慣習やソートを採用しています 1153 01:08:36,670 --> 01:08:40,280 $は、彼らの特別なシンボルとなること。 1154 01:08:40,280 --> 01:08:44,950 だから、できるだけ早くあなたがスクリプトタグと一緒にここにこのグローバルJavaScriptファイルをロードするように、 1155 01:08:44,950 --> 01:08:49,080 あなたは$と呼ばれる特殊なグローバル変数にアクセスすることができます。 1156 01:08:49,080 --> 01:08:53,009 それは、より適切にはjQueryと呼ばれるが、それは$とほぼ同じくらいセクシーに見えることはありません。 1157 01:08:53,009 --> 01:08:56,250 しかし、$は特別な意味はありません。 PHPでそれは特別な意味を持っていた。 1158 01:08:56,250 --> 01:08:58,440 あなたは、変数の前にそれを持ってしなければならなかった。 1159 01:08:58,440 --> 01:09:01,670 これは、ちょうど彼らが上にかかったセクシーなものです。 1160 01:09:01,670 --> 01:09:03,389 ここで何が起こっている? 1161 01:09:03,389 --> 01:09:08,830 私はjQueryの関数に私のグローバル変数文書を渡しているに気付く 1162 01:09:08,830 --> 01:09:10,860 そして私は呼んでいる。準備が整いました。 1163 01:09:10,860 --> 01:09:15,480 何が本質的にjQueryのそれはあなたには、いくつかのバニラのJavaScript物事を取ることができないです 1164 01:09:15,480 --> 01:09:17,889 documentオブジェクトのように、ウィンドウオブジェクト、 1165 01:09:17,889 --> 01:09:20,790 そしてあなたは、jQueryの関数に渡した場合 - 1166 01:09:20,790 --> 01:09:24,429 そして再び、明確にすること、これはjQueryと呼ばれる関数です - 1167 01:09:24,429 --> 01:09:28,240 それが何をするかそれはあなたの文書の特別なバージョンを返す 1168 01:09:28,240 --> 01:09:30,700 それは、それに関連付けられた多くの機能を持っています。 1169 01:09:30,700 --> 01:09:34,760 だから、生のJavaScriptでなくレディ機能はありません、 1170 01:09:34,760 --> 01:09:37,810 しかし、あなたが最初にjQueryの関数に文書を渡した場合、 1171 01:09:37,810 --> 01:09:40,960 それはあなたに、ドキュメントオブジェクトの特別なバージョンを返す 1172 01:09:40,960 --> 01:09:43,030 それはもっと派手な機能を備えています。 1173 01:09:43,030 --> 01:09:48,230 人々がそれを好む理由だ。それはちょうど私たちが見るうとしているように、やることが容易になります。 1174 01:09:48,230 --> 01:09:49,820 だから、このコード行はどういう意味ですか? 1175 01:09:49,820 --> 01:09:52,690 ドキュメントの準備ができたときにこのコード行は、ここでいう - 1176 01:09:52,690 --> 01:09:56,830 言い換えれば、一度ブラウザがこのファイル上から下へを読んで行われる - 1177 01:09:56,830 --> 01:09:59,200 先に行くと、次の関数を実行します。 1178 01:09:59,200 --> 01:10:03,540 何がJavaScriptで本当に面白い - とPHPもこれを持っています - 1179 01:10:03,540 --> 01:10:05,450 匿名関数です。 1180 01:10:05,450 --> 01:10:10,560 JavaScriptではあなたには名前がありませんが、彼らは肉体を持って行う関数を宣言することができます。 1181 01:10:10,560 --> 01:10:12,570 ここで何が起こっているかに注目してください。 1182 01:10:12,570 --> 01:10:16,220 >> これは、準備と呼ばれる関数であり、それだけで次の手順を実行します。意味 1183 01:10:16,220 --> 01:10:20,220 それは、すべてのサーバーから読み込まれているとき、すべてのWebページには、準備ができています。 1184 01:10:20,220 --> 01:10:23,090 あなたは何をしたいのですか?私は、コードをまとめて実行したいと思います。 1185 01:10:23,090 --> 01:10:27,120 我々はすぐにこのコードを実行しないことに注意してください。 1186 01:10:27,120 --> 01:10:34,350 私はこれを省略した場合は、これらのコード行を実行して起動した直後を意味するでしょう。 1187 01:10:34,350 --> 01:10:39,040 しかし、私は、いや、いや、いや言っているという事実は、このように無名関数でこれをラップ 1188 01:10:39,040 --> 01:10:43,000 手段はまだそれを実行しません。最終的にそれを呼び出します。 1189 01:10:43,000 --> 01:10:45,430 私達は私達の前のフォームの例で一瞬前にこれを見た。 1190 01:10:45,430 --> 01:10:49,990 我々は、500ミリ秒後に、最終的にどのような関数を呼び出したのか?が点滅します。 1191 01:10:49,990 --> 01:10:51,480 同じ考え方はそう。 1192 01:10:51,480 --> 01:10:53,950 繰り返しますが、これは少し奇妙に見えても、ただ信仰で今のところ取る 1193 01:10:53,950 --> 01:10:57,060 最終的に呼ばれて無​​名関数を宣言することが、 1194 01:10:57,060 --> 01:11:01,720 あなたは単に関数を(){書く 1195 01:11:01,720 --> 01:11:05,380 だから、どのようなコードを、我々は最終的に実行するつもりですか?以下。 1196 01:11:05,380 --> 01:11:10,460 これは、あまりにも少し新しいように見えるが、これはここでは、jQueryの関数であることを意味します 1197 01:11:10,460 --> 01:11:13,430 そしてこれは今ショートカットです。 1198 01:11:13,430 --> 01:11:18,830 もちろん、画面の下部に表示されているHTMLのスニペットは、いくつかのツリー表現を持っています。 1199 01:11:18,830 --> 01:11:21,730 これはありません。このページには、このハロー、世界の例よりも興味深いものです。 1200 01:11:21,730 --> 01:11:25,210 しかし、このHTMLに対応していくつかの木があります。 1201 01:11:25,210 --> 01:11:28,910 これは、再帰関数のいくつかの種類を実装する必要があり、首の痛みであろう 1202 01:11:28,910 --> 01:11:34,380 ルートノードから開始し、その後、IDが登録しているノードを見つけることができます。 1203 01:11:34,380 --> 01:11:38,340 それでは、jQueryは私たちのために超簡単になり、文字通りこれです。 1204 01:11:38,340 --> 01:11:43,000 先に行くと、私を得るものは何でもdivまたはどんな形、どんなHTML要素 1205 01:11:43,000 --> 01:11:45,820 登録のIDを持っています。 1206 01:11:45,820 --> 01:11:52,440 これは、document.getElementById( '登録')と等価である。 1207 01:11:52,440 --> 01:11:54,170 >> なぜ、jQueryのような人がいますか? 1208 01:11:54,170 --> 01:12:00,110 それは入力するより短いだから。しかし、それはすべてです。それは同じ考えです。 1209 01:12:00,110 --> 01:12:02,630 私には、ID登録でタグを取得する。 1210 01:12:02,630 --> 01:12:06,300 とフォームであることを起こる、そのタグは、送信されたとき、 1211 01:12:06,300 --> 01:12:08,300 先に行くと、このコードを実行します。 1212 01:12:08,300 --> 01:12:11,320 それでは、我々はフォームの検証をやっている方法を見て今見て1を取ることができます。 1213 01:12:11,320 --> 01:12:15,950 構文は、最初は確かに謎めいていますが、何が起こっているのでしょうか? 1214 01:12:15,950 --> 01:12:21,050 このコード行がtrueであれば、私は彼または彼女の電子メールアドレスを提供するためにユーザーを怒鳴りつけるつもりです。 1215 01:12:21,050 --> 01:12:22,970 だから、このコード行は何ですか? 1216 01:12:22,970 --> 01:12:25,560 $はjQueryのことを意味します。さて、これに気づく。 1217 01:12:25,560 --> 01:12:27,920 これはCSSのような種類のものである。 1218 01:12:27,920 --> 01:12:33,370 あなたはまだCSSに潜ったことがあれば、これは、IDが登録である要素を意味することがわかります。 1219 01:12:33,370 --> 01:12:39,840 スペースは、子または名前が入力され、登録の子孫を見つけることを意味します。 1220 01:12:39,840 --> 01:12:42,970 そして、角カッコで囲まれた、このことは、少しフィルターです。 1221 01:12:42,970 --> 01:12:47,010 そして、これは不可解なように見えても、これは単に、そのIDを登録した形式に行く意味 1222 01:12:47,010 --> 01:12:51,230 名前電子メールであることのinput要素の内側に移動し、 1223 01:12:51,230 --> 01:12:55,440 その後、その値があることを起こるものは何でも、その値を取得する - 1224 01:12:55,440 --> 01:12:59,670 それは私が入力したものなら、それがすべてのI型またはmalan@harvard.eduだ場合空自。 1225 01:12:59,670 --> 01:13:05,250 だから、フォームのemailフィールドの値の場合==何も、ユーザーで叫ぶ。 1226 01:13:05,250 --> 01:13:09,700 他のパスワードフィールドの値は==何も、ユーザー怒鳴らない場合。 1227 01:13:09,700 --> 01:13:19,520 >> 他のパスワードフィールドの値が確認フィールドの値と等しくない場合には、 1228 01:13:19,520 --> 01:13:22,850 他のフォーム要素であった、ユーザー怒鳴りつける。 1229 01:13:22,850 --> 01:13:25,680 そして、最後に - そして、この1つはあまりにも、いくつかの独自の構文が新しく追加されてい 1230 01:13:25,680 --> 01:13:29,270 一度あなたがそれを見てきたけど、それは、少なくとも、もう少し合理的だ - 1231 01:13:29,270 --> 01:13:34,060 IDを持つ登録フォームでは、名前が合意されているinput要素を持っている他の場合 1232 01:13:34,060 --> 01:13:39,720 それがチェックされて、先に行くと、ユーザーで叫ぶ。 1233 01:13:39,720 --> 01:13:42,520 だから私は完全にこれは一見しただけでは完全に圧倒していると認めている。 1234 01:13:42,520 --> 01:13:46,530 これは、新しい構文の多くのです。しかし、jQueryのすべてのパターンのこれらの種類を次の。 1235 01:13:46,530 --> 01:13:49,880 そして正直なところ、私も数分前までは、これは存在を知らなかった。 1236 01:13:49,880 --> 01:13:53,640 私は、 "チェックボックスをjQueryでチェックされている場合はどのようにチェックしますか?"ググ 1237 01:13:53,640 --> 01:13:55,680 それを行うためのさまざまな方法があるので、これは、構文は次のとおりです 1238 01:13:55,680 --> 01:13:58,010 実際の生のJavaScriptコードで置き換えます。 1239 01:13:58,010 --> 01:14:01,030 だから問題セット7の非常に最初のページが強調するように、 1240 01:14:01,030 --> 01:14:04,500 PSET 7は非常に自分自身をブートストラップすることで練習です 1241 01:14:04,500 --> 01:14:08,650 ここで我々は、うまくいけば、PSETに取り組むとの概念的なフレームワークを提供してきました。 1242 01:14:08,650 --> 01:14:12,280 >> しかし、Webデザインでよくあるケースですが、それは周りをウロウロするのは本当にあなた次第です、 1243 01:14:12,280 --> 01:14:16,680 限り、あなたがそれらを引用するように、Webからのコードと例のスニペットを組み込む 1244 01:14:16,680 --> 01:14:17,960 その最初のシート上の条件につき、 1245 01:14:17,960 --> 01:14:21,460 その学習は、HTML、CSS、JavaScript、さらにはSQLの実現 1246 01:14:21,460 --> 01:14:26,020 本当に我々はこれらの補助輪を脱ぎ始めると、このアットホームな運動であることが意味されます。 1247 01:14:26,020 --> 01:14:29,150 そして、あまりにもあなたがブラウザを使って行うことができ、よりたくさんのことがあると認識しています。 1248 01:14:29,150 --> 01:14:33,790 これらの要素のほとんどの内にイベントハンドラと呼ばれる他のものがあります。 1249 01:14:33,790 --> 01:14:37,140 そして、我々だけ、onSubmitおよびonready呼ばれるものを見ていても 1250 01:14:37,140 --> 01:14:40,310 あなたは、onkeydownを、onkeyupのようなことを行うことができ 1251 01:14:40,310 --> 01:14:43,410 ユーザがキーに触れたときのように、あなたはそれとキーアップのために聞くことができます。 1252 01:14:43,410 --> 01:14:45,940 Gmailのキーボードショートカットを持っています。 1253 01:14:45,940 --> 01:14:49,490 どのようにGoogleが作成するためのCのようなキーボードショートカットを実装するのですか? 1254 01:14:49,490 --> 01:14:54,120 彼らは、OnKeyPressまたはOnKeyUpし、onKeyDownと同様に、彼らが呼ばれているように、イベントをリッスンする。 1255 01:14:54,120 --> 01:14:56,360 あなたは今までにいくつかのメニューオプションの上にマウスをホバーしている場合 1256 01:14:56,360 --> 01:15:00,180 そして突然、出来上がりのすべてと、メニューが表示され、またはグラフィックの色が変わります 1257 01:15:00,180 --> 01:15:01,920 どのように彼らはそれをやっている? 1258 01:15:01,920 --> 01:15:06,940 onreadyまたはonSubmitを待ち受けるのではなく、あなたは、onmouseoverイベントやonmouseoutを聞きます。 1259 01:15:06,940 --> 01:15:10,920 >> だから簡単に言えば、これらの非常に簡単な基本から、我々は今日の表面に傷を付け始めていることを 1260 01:15:10,920 --> 01:15:13,940 そして我々は、ますます、あなたが持っている、水曜日にさらにに飛び込むよ 1261 01:15:13,940 --> 01:15:17,530 あなたは既に精通していることの種類を実装するための電力。 1262 01:15:17,530 --> 01:15:21,620 それでは、そこに終わらせ、私たちは水曜日にこれを続けていきます。 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]