1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID Malan: Très bien. 3 00:00:12,360 --> 00:00:15,970 C'est CS50, et c'est la fin de la neuvième semaine. 4 00:00:15,970 --> 00:00:18,560 Il a été un tourbillon sur ces derniers jours. 5 00:00:18,560 --> 00:00:21,580 Et problème réglé sept, si vous êtes genou profond en elle, se rendent compte qu'il ya tout un 6 00:00:21,580 --> 00:00:23,340 peu nouveau que c'est là-dedans. 7 00:00:23,340 --> 00:00:26,660 Mais nous allons voir si nous ne pouvons pas reconstituer le tout brièvement ici 8 00:00:26,660 --> 00:00:29,230 avant puis virant au large dans l'instant une autre direction et de voir 9 00:00:29,230 --> 00:00:30,510 où que nous pouvons aller. 10 00:00:30,510 --> 00:00:32,630 >> Donc, jusqu'à présent, nous avons parlé de HTML. 11 00:00:32,630 --> 00:00:33,740 Nous avons parlé de CSS. 12 00:00:33,740 --> 00:00:34,705 Nous avons parlé de PHP. 13 00:00:34,705 --> 00:00:36,520 Vous avez commencé à faire l'expérience de SQL. 14 00:00:36,520 --> 00:00:38,360 Aujourd'hui, nous allons parler un peu sur JavaScript. 15 00:00:38,360 --> 00:00:41,230 Mais comment faire tout cela disparate langues s'emboîtent? 16 00:00:41,230 --> 00:00:44,970 >> Nous avons donc parlé la semaine dernière sur la idée d'avoir un serveur. 17 00:00:44,970 --> 00:00:48,470 Alors disons simplement tirer ce rectangle comme un serveur web ici. 18 00:00:48,470 --> 00:00:52,200 Et un serveur Web sert sûrement fichiers. 19 00:00:52,200 --> 00:00:54,640 Et certains de ces fichiers peuvent être des fichiers HTML. 20 00:00:54,640 --> 00:00:58,270 Donc, une des choses que d'un serveur Web peut cracher peut être un fichier qui 21 00:00:58,270 --> 00:01:01,290 nous allons tirer comme ça contenant du code HTML. 22 00:01:01,290 --> 00:01:04,786 Donc, en termes simples, ce ne laissez HTML que vous faites? 23 00:01:04,786 --> 00:01:06,036 >> PUBLIC: page joli. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID Malan: OK, faire une page de belle apparence, même si je pense que j'ai prouvé 26 00:01:12,310 --> 00:01:13,370 que le contraire. 27 00:01:13,370 --> 00:01:18,250 Donc HTML ne laisse vous disposez pages structurellement, et il vous permet de 28 00:01:18,250 --> 00:01:22,410 sorte de marquer esthétiquement une page, marquer le contenu statique, de sorte que vous 29 00:01:22,410 --> 00:01:23,640 peut ensuite visualiser avec un navigateur Web. 30 00:01:23,640 --> 00:01:24,690 >> Mais c'est la clé. 31 00:01:24,690 --> 00:01:26,130 C'est le contenu statique. 32 00:01:26,130 --> 00:01:28,590 Vous écrivez, vous enregistrez, et puis vous l'expédier. 33 00:01:28,590 --> 00:01:31,130 Et le serveur Web sert alors il à vos visiteurs. 34 00:01:31,130 --> 00:01:35,700 >> Mais nous styliser les choses en utilisant un autre langue tout à fait. 35 00:01:35,700 --> 00:01:40,150 Nous avons commencé à utiliser un attribut de style sur certaines balises. 36 00:01:40,150 --> 00:01:43,400 Et l'attribut de style Posons des choses comme la taille de police et la couleur. 37 00:01:43,400 --> 00:01:46,460 Et vous avez probablement commencé à découvrir, ou vous allez bientôt pour finale 38 00:01:46,460 --> 00:01:50,160 projets potentiellement, d'autres encore propriétés que vous pouvez utiliser en CSS. 39 00:01:50,160 --> 00:01:54,710 Et donc, en termes simples, ce alors vraiment ne faire CSS? 40 00:01:54,710 --> 00:01:57,810 Ce ne sont que des exemples de ceux-ci. 41 00:01:57,810 --> 00:02:00,730 Que faut-il vous laisser faire ce que HTML ne semble pas de ce 42 00:02:00,730 --> 00:02:02,606 nous avons vu jusqu'à présent? 43 00:02:02,606 --> 00:02:04,850 >> PUBLIC: Définir modèles par vous-même. 44 00:02:04,850 --> 00:02:06,700 >> DAVID Malan: Définir les styles par vous-même. 45 00:02:06,700 --> 00:02:10,280 Donc, définir les choses comme les classes que vous peut avoir rencontré, ou unique 46 00:02:10,280 --> 00:02:13,800 identifier les nœuds dans un document afin que vous pouvez les styliser. 47 00:02:13,800 --> 00:02:16,890 Mais plus spécifiquement, je dirais que le CSS vous permet vraiment de prendre les choses les 48 00:02:16,890 --> 00:02:20,790 dernier mile et vous permet de spécifier beaucoup plus précisément l'esthétique, 49 00:02:20,790 --> 00:02:24,340 alors que HTML pour la plupart permet vous structurez vos pages. 50 00:02:24,340 --> 00:02:27,310 >> Et même si il ya quelques défauts, comme nous l'avons vu l'étiquette pour 51 00:02:27,310 --> 00:02:30,690 un tag position, qui grosso modo fait les choses en grand et gras. 52 00:02:30,690 --> 00:02:34,250 C'est une définition assez générique de l'étiquette - gros et gras. 53 00:02:34,250 --> 00:02:35,260 Qu'est-ce que la taille de police est-ce? 54 00:02:35,260 --> 00:02:36,080 De quelle couleur est-ce? 55 00:02:36,080 --> 00:02:36,890 Comment audacieux que c'est? 56 00:02:36,890 --> 00:02:39,830 Et CSS vous permet plus finement tuner des choses comme ça. 57 00:02:39,830 --> 00:02:42,150 Ainsi que la mise en page, comme certains vous avez vu. 58 00:02:42,150 --> 00:02:45,180 >> Et franchement, CSS est un peu d'une langue désordonnée. 59 00:02:45,180 --> 00:02:48,370 Il est très puissant en ce que vous pouvez faire littéralement n'importe quel site Web que vous avez 60 00:02:48,370 --> 00:02:51,880 vu sur le web aujourd'hui, mais c'est une sorte de douleur dans le cou. 61 00:02:51,880 --> 00:02:54,440 Et certains d'entre vous ont cogné la tête contre les murs déjà juste pour faire 62 00:02:54,440 --> 00:02:58,560 quelque chose de stupide comme centre d'un menu sur problème réglé sept si vous avez appris à 63 00:02:58,560 --> 00:02:59,470 ce point déjà. 64 00:02:59,470 --> 00:03:01,530 >> Mais réaliser, ces choses plus facile au fil du temps. 65 00:03:01,530 --> 00:03:02,820 Vous commencez à remarquer les modèles. 66 00:03:02,820 --> 00:03:06,020 Et encore une fois, Google sera votre ami pour les différents moyens par lesquels vous pouvez 67 00:03:06,020 --> 00:03:07,220 résoudre ces types de problèmes. 68 00:03:07,220 --> 00:03:11,520 >> Et j'ose dire avec CSS et HTML plus généralement, vous pouvez résoudre les problèmes dans 69 00:03:11,520 --> 00:03:15,910 beaucoup plus de manières, qui pourrait très bien être exact, que vous pourriez 70 00:03:15,910 --> 00:03:18,900 dans quelque chose comme C, même maintenant PHP ou JavaScript. 71 00:03:18,900 --> 00:03:21,080 Il ya juste beaucoup de différents moyens pour jeter les choses. 72 00:03:21,080 --> 00:03:22,570 >> Mais cela a commencé à se malpropre, nous l'avons dit. 73 00:03:22,570 --> 00:03:26,480 Tout type de commingling votre code HTML et votre CSS avec l'attribut style est 74 00:03:26,480 --> 00:03:27,590 un peu bâclé. 75 00:03:27,590 --> 00:03:31,460 Et si nous disions à la place, une sorte de parler abstraitement, que vous devriez 76 00:03:31,460 --> 00:03:34,050 au moins commencer à facteur Départ probablement votre CSS. 77 00:03:34,050 --> 00:03:37,430 Ce n'est pas votre attributs de style, mais au moins utiliser la balise de style à l'intérieur ce qui 78 00:03:37,430 --> 00:03:38,840 partie de la page Web? 79 00:03:38,840 --> 00:03:39,560 >> PUBLIC: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID Malan: Dans la tête. 81 00:03:40,120 --> 00:03:43,270 Jusqu'à présent, nous n'avions que le titre jusqu'à là, mais vous pouvez également ajouter un style 82 00:03:43,270 --> 00:03:47,230 tag, et vous pouvez mettre votre CSS ou moins parlant vers le haut de la page. 83 00:03:47,230 --> 00:03:52,550 Mais nous avons pris les choses un peu plus loin et nous pondérée que plus 84 00:03:52,550 --> 00:03:54,130 dans un fichier séparé. 85 00:03:54,130 --> 00:03:57,240 >> Et si ces deux dossiers étaient en quelque sorte maintenant lié. 86 00:03:57,240 --> 00:03:59,550 Et en effet, c'était la tag qui a fait cela. 87 00:03:59,550 --> 00:04:02,920 Et ce qui était un des objectifs primordiaux motivations pour l'affacturage notre CSS 88 00:04:02,920 --> 00:04:04,057 d'autant plus? 89 00:04:04,057 --> 00:04:05,280 >> PUBLIC: réutilisation. 90 00:04:05,280 --> 00:04:05,785 >> DAVID Malan: réutilisation. 91 00:04:05,785 --> 00:04:06,150 Droite? 92 00:04:06,150 --> 00:04:09,470 Vous avez peut être vu dans le p-mis sept déjà que beaucoup de pages, le 93 00:04:09,470 --> 00:04:12,260 Cette page d'achat, la page de vente, la portefeuille page sont probablement 94 00:04:12,260 --> 00:04:13,550 structuré de façon assez similaire. 95 00:04:13,550 --> 00:04:17,579 Il ya un logo de financement du CS50 au sommet sauf si vous avez décidé de changer. 96 00:04:17,579 --> 00:04:19,839 Il ya une page sur les bas des pages. 97 00:04:19,839 --> 00:04:24,315 Et CSS vous permet alors à l'intégrer à dans un fichier séparé de sorte que si 98 00:04:24,315 --> 00:04:27,780 vous voulez changer quelque chose à l'échelle mondiale dans l'ensemble de votre site, vous pouvez vraiment 99 00:04:27,780 --> 00:04:29,390 il suffit de changer en un seul endroit. 100 00:04:29,390 --> 00:04:32,750 >> Mais il ya un prix que vous payez potentiellement en ayant pris en compte les 101 00:04:32,750 --> 00:04:38,380 CSS de mon fichier HTML dans un distinct fichier de référencement avec le 102 00:04:38,380 --> 00:04:40,650 tag, que nous avons vu lundi. 103 00:04:40,650 --> 00:04:43,850 Quel pourrait être le inconvénient être cela? 104 00:04:43,850 --> 00:04:48,830 En y repensant, il ya une semaine quand nous sommes parler HTTP et TCP / IP et comment 105 00:04:48,830 --> 00:04:52,070 Internet fonctionne. 106 00:04:52,070 --> 00:04:53,530 Quelque chose ici? 107 00:04:53,530 --> 00:04:54,730 >> PUBLIC: Il faut plus de temps. 108 00:04:54,730 --> 00:04:55,470 >> DAVID Malan: Il faut plus de temps. 109 00:04:55,470 --> 00:04:56,750 Pourquoi? 110 00:04:56,750 --> 00:04:59,450 >> PUBLIC: [inaudible]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID Malan: Ouais. 112 00:04:59,750 --> 00:05:01,240 Donc, il faut sans doute un peu plus de temps. 113 00:05:01,240 --> 00:05:04,290 Parce que l'un, le CSS est évidemment pas dans le même fichier. 114 00:05:04,290 --> 00:05:06,920 Alors maintenant que vous avez à faire pas un, mais deux demandes. 115 00:05:06,920 --> 00:05:11,230 Et chacune de ces demandes que nous avons vu dans Chrome dans le soi-disant inspecteur, 116 00:05:11,230 --> 00:05:15,740 et nous avons examiné l'onglet Réseau, chaque de ces fichiers nécessite un HTTP 117 00:05:15,740 --> 00:05:18,360 demande, que nous avons vu se un certain laps de temps. 118 00:05:18,360 --> 00:05:19,290 Maintenant, c'est peut-être pas beaucoup. 119 00:05:19,290 --> 00:05:20,670 C'est peut-être seulement 20 millisecondes. 120 00:05:20,670 --> 00:05:22,260 C'est peut-être de 200 millisecondes. 121 00:05:22,260 --> 00:05:25,530 >> Mais pensez à une page comme Facebook, ou CNN, ou Google, qui sont beaucoup 122 00:05:25,530 --> 00:05:28,060 plus grande que les exemples que nous avons regardé jusqu'à présent. 123 00:05:28,060 --> 00:05:32,070 Ces pages peuvent avoir des dizaines de fichiers, , dont chacun peut exiger une 124 00:05:32,070 --> 00:05:33,550 téléchargement d'un fichier. 125 00:05:33,550 --> 00:05:35,800 Donc, les choses peuvent potentiellement commencer à ralentir. 126 00:05:35,800 --> 00:05:39,280 >> Et surtout ces jours où nous sommes tous avoir des téléphones mobiles dans nos poches et 127 00:05:39,280 --> 00:05:43,010 connexions Internet lentes, ayant pour attendre quelques millisecondes, un peu 128 00:05:43,010 --> 00:05:46,110 plus de millisecondes pour plus fichiers peuvent effectivement être lente. 129 00:05:46,110 --> 00:05:50,430 La latence est le mot qui décrit le genre d'attente que vous avez que vous 130 00:05:50,430 --> 00:05:53,110 l'expérience lors de l'attente pour un morceau de l'information. 131 00:05:53,110 --> 00:05:54,430 >> Mais il ya un côté positif. 132 00:05:54,430 --> 00:05:56,600 Donc ce n'est pas tout sorte de - 133 00:05:56,600 --> 00:05:58,170 il est en fait un peu de balançoire ici. 134 00:05:58,170 --> 00:06:02,970 La baisse, maintenant, mais ce que les navigateurs peuvent faire si ils sont intelligents, afin d'éviter 135 00:06:02,970 --> 00:06:08,870 avoir à demander la même styles.css déposer à nouveau peut être pour quoi faire? 136 00:06:08,870 --> 00:06:09,390 >> Mettre en cache. 137 00:06:09,390 --> 00:06:10,370 Donc, la mise en cache - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 signifie généralement ici juste pour sauver la déposer vous avez demandé la première fois, et 140 00:06:15,810 --> 00:06:17,440 puis vérifiez votre cache pour cela. 141 00:06:17,440 --> 00:06:20,400 Vérifiez que vous êtes en quelque sorte de réservoir de stockage, et si vous avez déjà un 142 00:06:20,400 --> 00:06:24,520 copie de styles.css, même si un autre page dans le p-ensemble, ou tout site Web, 143 00:06:24,520 --> 00:06:28,560 demande à nouveau, juste pour donner l' ce même utilisateur copie mise en cache. 144 00:06:28,560 --> 00:06:30,140 Ne vous embêtez pas la demande. 145 00:06:30,140 --> 00:06:32,560 >> Inconvénient il, si, comme certains d'entre vous ont trébuché dans le p-ensemble. 146 00:06:32,560 --> 00:06:35,870 Si vous faites un changement sur le serveur et vous revenez au navigateur et vous 147 00:06:35,870 --> 00:06:39,250 recharger, parfois le navigateur fait vous une faveur et ne dérange pas 148 00:06:39,250 --> 00:06:43,660 re-télécharger votre fichier styles.css car, come on, quelles sont les chances 149 00:06:43,660 --> 00:06:47,620 que ces styles qui utilise Facebook vont changer d'heure en heure ou 150 00:06:47,620 --> 00:06:48,140 au jour le jour? 151 00:06:48,140 --> 00:06:48,800 Il est assez faible. 152 00:06:48,800 --> 00:06:52,260 Ils pourraient changer au fil du temps, mais pas à la minute ou à l'heure. 153 00:06:52,260 --> 00:06:55,810 >> Donc, une astuce, juste FYI Web lorsque vous faites développement, est souvent maintenez la 154 00:06:55,810 --> 00:06:59,500 Maj par exemple, puis cliquez sur recharger dans votre navigateur, et que la volonté 155 00:06:59,500 --> 00:07:03,280 dire généralement le rechargement du navigateur tout, même si vous avez déjà 156 00:07:03,280 --> 00:07:04,180 dans la mémoire cache. 157 00:07:04,180 --> 00:07:06,630 Encore une fois, positifs et négatifs, mais chacun d'eux 158 00:07:06,630 --> 00:07:08,260 finalement décisions de conception. 159 00:07:08,260 --> 00:07:11,520 >> Alors maintenant, nous n'avons pas seulement fin de l'histoire ici. 160 00:07:11,520 --> 00:07:15,790 Si je retourne maintenant et à l'arrière et à l'arrière et dos, nous avons commencé à introduire non seulement 161 00:07:15,790 --> 00:07:18,060 HTML, mais PHP. 162 00:07:18,060 --> 00:07:20,786 Donc, en termes simples, ce PHP ne laissez nous faire? 163 00:07:20,786 --> 00:07:22,770 >> PUBLIC: [inaudible]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID Malan: Qu'est-ce que c'est? 165 00:07:24,258 --> 00:07:25,250 >> PUBLIC: Présentez-logique dans le code. 166 00:07:25,250 --> 00:07:26,620 >> DAVID Malan: Ouais, introduire logique dans votre code. 167 00:07:26,620 --> 00:07:29,570 C'est donc un véritable langage de programmation avec des boucles et des variables, et 168 00:07:29,570 --> 00:07:32,620 les fonctions et les conditions, et tous les choses que nous avons utilisé le chemin du retour 169 00:07:32,620 --> 00:07:33,780 quand depuis zéro. 170 00:07:33,780 --> 00:07:36,780 Et PHP, nous l'avons vu, peut être utilisé soit à la ligne de commande - il 171 00:07:36,780 --> 00:07:39,190 ne pas avoir quelque chose à voir avec le web, même si c'est 172 00:07:39,190 --> 00:07:43,150 vraiment ses origines et ce qu'il tend d'être bon et propice à - 173 00:07:43,150 --> 00:07:47,130 mais vous pouvez utiliser PHP simplement par la nature du fait qu'il a un print () 174 00:07:47,130 --> 00:07:49,660 fonction, et une fonction printf (), ou une fonction () echo. 175 00:07:49,660 --> 00:07:52,440 Il ya des grappes de façons dont vous peut imprimer du texte avec PHP. 176 00:07:52,440 --> 00:07:56,540 >> Par conséquent, vous pouvez utiliser cette programmation langue de sortie exactement 177 00:07:56,540 --> 00:07:58,460 ce que nous parlions auparavant. 178 00:07:58,460 --> 00:08:01,360 Vous pouvez générer dynamiquement votre code HTML. 179 00:08:01,360 --> 00:08:02,300 Peut-être pas tout. 180 00:08:02,300 --> 00:08:06,460 Peut-être vous durs choses de code, comme le tête et le pied de page, et le logo, 181 00:08:06,460 --> 00:08:07,950 et vos feuilles de style, et tout cela. 182 00:08:07,950 --> 00:08:11,190 Mais pour quelque chose comme p-ensemble de sept, où vous manipuler les stocks et 183 00:08:11,190 --> 00:08:14,690 montrant le portefeuille de l'utilisateur, qui est va changer dynamiquement, vous pouvez 184 00:08:14,690 --> 00:08:18,960 utiliser sûrement PHP et la logique, il donne vous en tant que langage de programmation pour 185 00:08:18,960 --> 00:08:22,320 production sous-ensembles dynamiquement de la page. 186 00:08:22,320 --> 00:08:25,900 >> Ainsi, lorsque vous parlez de sites web dynamiques, ou la programmation web, c'est 187 00:08:25,900 --> 00:08:27,200 ce que vous êtes vraiment parler. 188 00:08:27,200 --> 00:08:31,450 En utilisant un langage comme PHP, ou des choses appelé Python, ou Ruby ou Java, ou 189 00:08:31,450 --> 00:08:35,900 encore d'autres langues, pour interroger une base de données souvent, ou un autre serveur, et 190 00:08:35,900 --> 00:08:38,580 puis cracher dynamiquement HTML. 191 00:08:38,580 --> 00:08:42,470 >> Maintenant, le résultat final, en passant, est que le code HTML de la plupart des sites, 192 00:08:42,470 --> 00:08:45,970 y compris votre p-ensemble de sept, est probablement va être un énorme gâchis si 193 00:08:45,970 --> 00:08:48,060 vous regardez la source code dans un navigateur. 194 00:08:48,060 --> 00:08:49,010 Ce n'est pas une grosse affaire. 195 00:08:49,010 --> 00:08:51,550 À ce moment, quand nous nous soucions modèle, nous nous soucions de la 196 00:08:51,550 --> 00:08:52,740 choses que vous écrivez. 197 00:08:52,740 --> 00:08:56,240 Nous ne serons pas se soucier de l'étoffe que ce que vos sorties de code. 198 00:08:56,240 --> 00:08:59,520 Donc, ne vous inquiétez pas indentation ici si c'est PHP c'est 199 00:08:59,520 --> 00:09:01,190 sortie effectivement choses. 200 00:09:01,190 --> 00:09:04,430 Après tout, le navigateur ne s'en soucient pas, et un être humain ne sera pas à la recherche 201 00:09:04,430 --> 00:09:05,400 à la source de toute façon. 202 00:09:05,400 --> 00:09:09,000 Nous le personnel, par exemple, serait être à la recherche à votre PHP. 203 00:09:09,000 --> 00:09:13,440 >> Permettez-moi de donner un exemple rapide maintenant de quelle autre raison cela pourrait être utile. 204 00:09:13,440 --> 00:09:18,620 Donc, franchement, je ne me souviens pas la dernière fois que j'ai utilisé C à résoudre un problème en 205 00:09:18,620 --> 00:09:19,620 le monde réel. 206 00:09:19,620 --> 00:09:22,330 Il a probablement été à l'école d'études supérieures quand J'avais besoin d'utiliser un langage qui 207 00:09:22,330 --> 00:09:26,710 était assez faible niveau et m'a donné l' possibilité de faire quelque chose de très haute 208 00:09:26,710 --> 00:09:30,720 effectuer pour sauver vraiment autant de CPU cycles que j'ai pu, en grande partie 209 00:09:30,720 --> 00:09:33,990 parce que j'étais en utilisant d'énormes ensembles de données, et chaque cycle de la CPU en compte. 210 00:09:33,990 --> 00:09:37,750 Et franchement, même dans les choses comme les téléphones ces jours-ci et d'autres dispositifs 211 00:09:37,750 --> 00:09:39,910 où vous n'avez pas tout à fait autant mémoire et vous n'avez pas tout à fait comme avez 212 00:09:39,910 --> 00:09:44,160 de CPU, en utilisant des langages plus rapides toujours en appel. 213 00:09:44,160 --> 00:09:47,290 >> Mais dans le monde réel, quand vous venez de vouloir jeter un programme ensemble pour 214 00:09:47,290 --> 00:09:50,340 analyser des données, ou que vous avez recueillies tout un tas d'enregistrements pour 215 00:09:50,340 --> 00:09:53,330 un groupe d'étudiant et que vous voulez très automatiser rapidement l'envoi de courriels 216 00:09:53,330 --> 00:09:56,240 un par un pour chacun de ces inscrits, vous allez atteindre pour 217 00:09:56,240 --> 00:09:59,240 un langage de haut niveau que C pour ainsi dire. 218 00:09:59,240 --> 00:10:04,060 Quelque chose comme PHP ou Python, ou Ruby, ou une demi-douzaine d'autres qui existent 219 00:10:04,060 --> 00:10:04,550 ces jours-ci. 220 00:10:04,550 --> 00:10:07,200 Mais ces trois sont probablement le plus à la mode en ce moment. 221 00:10:07,200 --> 00:10:10,840 >> Et ce que cela signifie est que vous pouvez ouvrir un éditeur de texte comme gedit ou 222 00:10:10,840 --> 00:10:14,030 plus rien d'autre et puis il suffit de commencer écrire du code sans avoir à se soucier 223 00:10:14,030 --> 00:10:17,800 sur la compilation, sans avoir à vraiment s'inquiéter gestion de la mémoire, 224 00:10:17,800 --> 00:10:20,820 en gardant à l'esprit que un peu négligence finira par revenir 225 00:10:20,820 --> 00:10:24,790 à vous mordre si l'ensemble de données devient plus grand ou le problème devient grand. 226 00:10:24,790 --> 00:10:27,230 Mais ce que cela signifie pour nous est la suivante. 227 00:10:27,230 --> 00:10:29,860 >> Permettez-moi aller de l'avant et lance orthographe de problème posé six. 228 00:10:29,860 --> 00:10:33,480 Donc, c'est ma mise en œuvre sur la base trie- que j'ai utilisé sur le grand 229 00:10:33,480 --> 00:10:35,500 conseil où j'ai effectué pas si bien. 230 00:10:35,500 --> 00:10:38,720 Nous y reviendrons dans le temps d'une semaine et revoir ceux qui ne finissent au sommet de la 231 00:10:38,720 --> 00:10:40,430 grand tableau lors de notre dernière conférence. 232 00:10:40,430 --> 00:10:44,520 Mais pour l'instant, laissez-moi aller de l'avant et juste exécuter ma solution dans le texte, et nous ferons 233 00:10:44,520 --> 00:10:48,460 la King James Bible, et nous y voilà. 234 00:10:48,460 --> 00:10:51,080 >> Donc, ce sont tous les soi-disant les mots mal orthographiés sur 235 00:10:51,080 --> 00:10:52,240 la Bible King James. 236 00:10:52,240 --> 00:10:55,560 Et ma mise en œuvre a une demi-seconde au total. 237 00:10:55,560 --> 00:10:58,270 Donc, pas trop mal sur ce particulier ordinateur. 238 00:10:58,270 --> 00:11:01,540 Mais pensez à combien code que j'ai eu à écrire. 239 00:11:01,540 --> 00:11:02,880 Pensez combien le code que vous aviez à écrire. 240 00:11:02,880 --> 00:11:06,170 Pensez combien d'heures vous avez passé dans la D-hall ou votre dortoir ou ailleurs 241 00:11:06,170 --> 00:11:07,890 effectivement le codage de cette solution. 242 00:11:07,890 --> 00:11:11,850 >> Eh bien, si j'ai fait un niveau plus élevé langue comme PHP, prendre note des 243 00:11:11,850 --> 00:11:13,350 ce que je peux faire ici. 244 00:11:13,350 --> 00:11:16,410 Tout d'abord, supposons que c'est la place votre code de distribution. 245 00:11:16,410 --> 00:11:17,790 Il s'agit d'un fichier appelé correcteur orthographique. 246 00:11:17,790 --> 00:11:20,220 Il est disponible dans le cadre d'aujourd'hui code de distribution. 247 00:11:20,220 --> 00:11:22,670 Et je vais agiter ma main au plus des détails, mais il s'agit en fait 248 00:11:22,670 --> 00:11:25,500 un exemple intéressant de la manière dont vous aimerez le port d'une langue 249 00:11:25,500 --> 00:11:28,870 comme C vers PHP. 250 00:11:28,870 --> 00:11:33,420 J'ai littéralement ouvert deux fenêtres de texte, un avec ma version de C de speller.c, 251 00:11:33,420 --> 00:11:36,960 et j'ai commencé à le traduire dans mon tête de PHP et taper à l'aide 252 00:11:36,960 --> 00:11:38,840 les plus proches des fonctions équivalentes. 253 00:11:38,840 --> 00:11:40,100 >> Ainsi, certaines de ces choses sont différentes. 254 00:11:40,100 --> 00:11:43,730 Nous avons vu la dernière fois que PHP n'utilise pas inclure exactement de la même façon. 255 00:11:43,730 --> 00:11:47,050 Il utilise généralement besoin, si inclure n'existe. 256 00:11:47,050 --> 00:11:50,330 Définir est un peu différent de # Define en C, mais c'est 257 00:11:50,330 --> 00:11:51,890 comment nous faisons une constante. 258 00:11:51,890 --> 00:11:55,860 $ Argc il s'avère existe en PHP, de sorte que nous avons vu auparavant. 259 00:11:55,860 --> 00:11:58,650 Ce ne sont que des variables, l'ensemble des qui commencent avec des signes dollar. 260 00:11:58,650 --> 00:12:00,590 Rappelons ce sont juste un groupe de points flottants. 261 00:12:00,590 --> 00:12:03,970 >> Tant histoire courte, vous êtes invités à parcourir ce si curieux, c'est 262 00:12:03,970 --> 00:12:10,010 presque une conversion de la ligne à la ligne La version C de speller.c en PHP. 263 00:12:10,010 --> 00:12:12,630 Et vous pouvez le faire à nouveau pour une demi-douzaine d'autres langues. 264 00:12:12,630 --> 00:12:14,910 >> Mais ce qui est intéressant, c'est ce. 265 00:12:14,910 --> 00:12:16,910 Ou ce qui est franchement décourageant est la suivante. 266 00:12:16,910 --> 00:12:20,790 Permettez-moi aller de l'avant et tape sur dictionary.php, et demande que je suis 267 00:12:20,790 --> 00:12:23,670 aller de l'avant et re-mettre en œuvre problème réglé six ici. 268 00:12:23,670 --> 00:12:27,530 >> Donc, nous allons proposer d'abord que dans cette fichier, qui sera mis en œuvre dans 269 00:12:27,530 --> 00:12:30,550 PHP, alors laissez-moi ouvrir mes tags comme ça. 270 00:12:30,550 --> 00:12:34,780 Permettez-moi de me donner un mondial variable $ taille devient zéro. 271 00:12:34,780 --> 00:12:36,710 Et je vais donner me une table de hachage. 272 00:12:36,710 --> 00:12:38,110 Je vais utiliser une table de hachage pour cette chose. 273 00:12:38,110 --> 00:12:42,070 Comment dois-je déclarer une table de hachage en PHP? 274 00:12:42,070 --> 00:12:42,990 Fait. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> Support de façon à ouvrir fermer support représente ce en PHP, comme nous l'avons vu? 277 00:12:48,870 --> 00:12:51,850 Un tableau, mais un tableau qui pourrait être un tableau associatif. 278 00:12:51,850 --> 00:12:54,320 Un tableau associatif est une structure de données qui 279 00:12:54,320 --> 00:12:55,860 associe des touches avec des valeurs. 280 00:12:55,860 --> 00:12:59,430 >> Or, dans le plus simple indexé numériquement tableau, ces touches sont quoi? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Zéro, un, deux, trois, non? 283 00:13:03,960 --> 00:13:08,780 Vieux trucs d'école de retour de C. Mais il peut être également des chaînes comme foo et bar, 284 00:13:08,780 --> 00:13:12,210 ou maxwell, ou une telle chaîne. 285 00:13:12,210 --> 00:13:14,240 Je ne peux donc tirer parti de cette dans un instant. 286 00:13:14,240 --> 00:13:17,550 >> Permettez-moi aller de l'avant et déclare une fonction comme - 287 00:13:17,550 --> 00:13:19,020 Faisons load () d'abord. 288 00:13:19,020 --> 00:13:20,690 Donc, la charge de la fonction (). 289 00:13:20,690 --> 00:13:23,440 Et PHP est un peu différent en ce que vous tapez littéralement fonction, mais vous 290 00:13:23,440 --> 00:13:24,930 ne tapez pas un type de retour. 291 00:13:24,930 --> 00:13:28,760 Je vais aller de l'avant et de dire que la la fonction load () devrait prendre en 292 00:13:28,760 --> 00:13:31,000 argument $ dictionnaire, juste comme la version C fait. 293 00:13:31,000 --> 00:13:32,510 Je fais que de la mémoire. 294 00:13:32,510 --> 00:13:34,910 >> Et je propose que je suis va le faire. 295 00:13:34,910 --> 00:13:37,080 Je vais simplement faire foreach. 296 00:13:37,080 --> 00:13:40,710 Je vais appeler une fonction appelée déposer (), en transmettant le nom de cette 297 00:13:40,710 --> 00:13:44,990 déposer, qui est la variable $ $ Dictionnaire comme mot. 298 00:13:44,990 --> 00:13:49,410 Et puis à l'intérieur de ma boucle for ici, je suis aller de l'avant et de stocker dans mon 299 00:13:49,410 --> 00:13:57,440 $ Table $ word obtient vrai. 300 00:13:57,440 --> 00:13:57,918 Terminé. 301 00:13:57,918 --> 00:14:01,264 Oh, attendez. 302 00:14:01,264 --> 00:14:02,422 Terminé. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> C'est la fonction de chargement () dire en PHP. 305 00:14:04,970 --> 00:14:05,865 Maintenant, pourquoi ça marche? 306 00:14:05,865 --> 00:14:07,010 Et je suis une sorte de tricherie ici. 307 00:14:07,010 --> 00:14:09,980 >> Alors, un, foreach, nous avons vu brièvement dernière fois. 308 00:14:09,980 --> 00:14:13,680 Cela signifie simplement que vous pouvez parcourir un tableau sans embêter avec i 309 00:14:13,680 --> 00:14:16,150 et n et plus plus, et tout cela. 310 00:14:16,150 --> 00:14:21,350 Dictionnaire est bien sûr le nom du fichier, quelque chose comme grandes ou petites, les deux 311 00:14:21,350 --> 00:14:22,830 dictionnaires, nous avons utilisé la dernière fois. 312 00:14:22,830 --> 00:14:26,715 Le fichier est une fonction qui ouvre texte fichier, lit en ligne par ligne, et 313 00:14:26,715 --> 00:14:29,840 mains vous sauvegardez un choix énorme, chacun des éléments dont est une 314 00:14:29,840 --> 00:14:31,340 La ligne à partir de ce fichier. 315 00:14:31,340 --> 00:14:36,040 C'est donc la combinaison de fopen, et fread et boucle while, et fclose, 316 00:14:36,040 --> 00:14:37,080 et tout ça. 317 00:14:37,080 --> 00:14:40,150 Enfin, comme le mot signifie simplement que c'est le variables, je vais avoir accès à 318 00:14:40,150 --> 00:14:41,890 à chaque itération dans cette boucle. 319 00:14:41,890 --> 00:14:46,910 >> Donc en bref, cette ligne de commande signifie ici ouvrir le fichier dont le nom est en 320 00:14:46,910 --> 00:14:50,750 dictionnaire, la variable, itérer sur ligne par ligne, et chaque fois que vous obtenez 321 00:14:50,750 --> 00:14:54,290 une ligne, stocker dans un appelé mot variable, et puis faire quelque chose avec le mot. 322 00:14:54,290 --> 00:14:55,280 Ce que je veux faire? 323 00:14:55,280 --> 00:14:58,110 Je veux mettre le mot dans ma table de hachage. 324 00:14:58,110 --> 00:15:00,860 >> Eh bien, je peux mettre quelque chose dans mon table de hachage comme en C 325 00:15:00,860 --> 00:15:02,140 utilisant des crochets. 326 00:15:02,140 --> 00:15:03,660 C'est le nom de ma table de hachage. 327 00:15:03,660 --> 00:15:07,180 Je vais à l'index dans ce hachage table à cet endroit. 328 00:15:07,180 --> 00:15:08,920 Ainsi, non support de zéro, pas un support. 329 00:15:08,920 --> 00:15:11,990 Support devis unquote quelque chose, tout ce que ce mot est. 330 00:15:11,990 --> 00:15:15,200 Et tout comme vous pourriez avoir dans votre table de hachage trie de travail, il vous suffit de stocker 331 00:15:15,200 --> 00:15:17,650 effectivement un booléen, implicitement ou explicitement. 332 00:15:17,650 --> 00:15:18,260 Terminé. 333 00:15:18,260 --> 00:15:20,000 Je stocker la valeur réelle. 334 00:15:20,000 --> 00:15:23,150 >> Maintenant, il ya un certain nombre de choses Je coupe les coins ronds sur ici. 335 00:15:23,150 --> 00:15:27,720 Techniquement, il va y avoir une nouvelle ligne gênant, / n, à la fin de 336 00:15:27,720 --> 00:15:28,820 chacun de ces mots. 337 00:15:28,820 --> 00:15:31,770 Donc, je devrais probablement appeler une fonction PHP appelé chop (), qui sera 338 00:15:31,770 --> 00:15:33,460 littéralement abattre cet arrêt. 339 00:15:33,460 --> 00:15:35,020 Et j'ai vraiment besoin de faire autre chose. 340 00:15:35,020 --> 00:15:38,380 Je devrais sans doute augmenter la taille de chaque itération, donc je suis garder la trace 341 00:15:38,380 --> 00:15:39,560 le monde de quoi il s'agit. 342 00:15:39,560 --> 00:15:43,180 Et franchement, et c'est l'un des aspects plus stupides de PHP, si vous êtes 343 00:15:43,180 --> 00:15:46,950 en utilisant une variable globale, vous devez de dire explicitement que vous êtes. 344 00:15:46,950 --> 00:15:51,670 Donc, je vais effectivement taper mondial $ Taille, $ tableau global, et maintenant 345 00:15:51,670 --> 00:15:52,690 ma fonction est terminée. 346 00:15:52,690 --> 00:15:57,475 >> Donc, pas tout à fait aussi simple qu'avant, mais probablement pris moins de temps que le C 347 00:15:57,475 --> 00:15:58,220 La version, peut-être? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> Alors maintenant, nous allons faire la fonction check (). 350 00:16:00,390 --> 00:16:04,300 Voyons voir si ce au moins eu le des heures qu'il nous a fallu en C. Donc, 351 00:16:04,300 --> 00:16:06,500 laissez-moi aller de l'avant et déclare vérifier en fonction. 352 00:16:06,500 --> 00:16:09,070 Prend le mot d'argument, qui est va venir Speller. 353 00:16:09,070 --> 00:16:13,410 Et je vais juste vérifier si l' suite isset variable tableau 354 00:16:13,410 --> 00:16:18,400 support strtolower de mot - 355 00:16:18,400 --> 00:16:20,590 nous allons équilibrer l'ensemble de mes parenthèses - 356 00:16:20,590 --> 00:16:24,275 alors retourner vrai. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Autres - 359 00:16:28,460 --> 00:16:30,330 c'était vraiment le dur cadre de ce programme. 360 00:16:30,330 --> 00:16:31,940 Sinon, retourne false. 361 00:16:31,940 --> 00:16:32,630 Terminé. 362 00:16:32,630 --> 00:16:33,460 C'est chèque (). 363 00:16:33,460 --> 00:16:34,520 >> Maintenant, pourquoi ça marche? 364 00:16:34,520 --> 00:16:37,040 Eh bien, je passais un en un mot, qui est une chaîne de caractères. 365 00:16:37,040 --> 00:16:41,400 Deux, je vérifie à l'intérieur du hachage table, qui s'appelle $ table. 366 00:16:41,400 --> 00:16:45,470 Je suis le forçant à minuscules en appelant une fonction tolower assez similaire () dans 367 00:16:45,470 --> 00:16:48,580 C, mais cela ne le mot en entier, pas un seul caractère. 368 00:16:48,580 --> 00:16:52,680 Et si cela est réglé, en d'autres termes, il est un ensemble de valeurs, en d'autres termes, 369 00:16:52,680 --> 00:16:54,880 si c'est vrai, alors oui, il s'agit d'un mot. 370 00:16:54,880 --> 00:16:56,530 Parce que je l'ai mis là avec load (). 371 00:16:56,530 --> 00:16:59,100 Et sinon, je vais retourner faux. 372 00:16:59,100 --> 00:17:00,090 >> Maintenant, les autres sont faciles. 373 00:17:00,090 --> 00:17:03,570 taille de la fonction (), comment puis-je faire cela? 374 00:17:03,570 --> 00:17:05,230 Je ne reviens essentiellement $ taille. 375 00:17:05,230 --> 00:17:07,770 Mais je dois techniquement cela ennuyeux. 376 00:17:07,770 --> 00:17:10,640 Et en fait, vous entends, je coupais un coin de trop. 377 00:17:10,640 --> 00:17:12,920 J'ai vraiment besoin de faire $ tableau global. 378 00:17:12,920 --> 00:17:16,260 >> Mais cela étant dit, déchargement). 379 00:17:16,260 --> 00:17:17,380 Décharger () est incroyable. 380 00:17:17,380 --> 00:17:20,500 Fonctionner décharger (). 381 00:17:20,500 --> 00:17:23,990 Comment puis-je veux mettre en œuvre décharger (?) 382 00:17:23,990 --> 00:17:25,079 Terminé. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> Alors décharger (), gestion de la mémoire est entièrement pris en charge pour vous en 385 00:17:28,900 --> 00:17:31,800 quelque chose comme PHP et beaucoup des langages de haut niveau. 386 00:17:31,800 --> 00:17:32,600 Donc, c'est incroyable. 387 00:17:32,600 --> 00:17:36,080 Comme pourquoi diable avons-nous passé la dernière huit semaines ainsi que sur la rédaction C 388 00:17:36,080 --> 00:17:41,030 apparemment très lent, vraiment temps problèmes de consommation avec des dizaines d'heures 389 00:17:41,030 --> 00:17:42,530 de travail sous nos ceintures? 390 00:17:42,530 --> 00:17:46,110 >> Eh bien, pour une chose, cela peut fonctionner très bien pour les petits programmes. 391 00:17:46,110 --> 00:17:47,840 Il a certainement accéléré mon temps de développement. 392 00:17:47,840 --> 00:17:49,790 Mais nous allons voir ce qui se passe dans le monde réel. 393 00:17:49,790 --> 00:17:52,370 >> Laissez-moi aller dans ce répertoire dans une fenêtre de terminal. 394 00:17:52,370 --> 00:17:53,370 Il ya Speller. 395 00:17:53,370 --> 00:17:56,570 Et remarquez en passant, et vous pourriez ont rencontré ce problème posé dans 396 00:17:56,570 --> 00:17:58,190 six ou sept problème réglé. 397 00:17:58,190 --> 00:18:01,610 Vous n'avez pas strictement aux fin fichiers PHP avec. php. 398 00:18:01,610 --> 00:18:05,250 Si vous mettez une ligne comme ça au premier Tout en haut, c'est une ligne spéciale 399 00:18:05,250 --> 00:18:10,980 de syntaxe qui signifie essentiellement trouver le programme appelé PHP et l'utiliser pour 400 00:18:10,980 --> 00:18:12,270 interpréter ce fichier. 401 00:18:12,270 --> 00:18:15,410 Alors maintenant, on ne sait pas vraiment qui Je cours un programme PHP. 402 00:18:15,410 --> 00:18:19,860 Je peux courir juste comme si elle ont quelque chose compilé en C. 403 00:18:19,860 --> 00:18:20,650 >> Mais voici la chose. 404 00:18:20,650 --> 00:18:21,600 En fait, nous allons le faire à nouveau. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Il ya Speller. 407 00:18:25,390 --> 00:18:26,720 OK, 0,44 secondes. 408 00:18:26,720 --> 00:18:28,080 Il est arrivé plus vite cette fois. 409 00:18:28,080 --> 00:18:29,745 >> Passons maintenant à la version PHP. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Gentille attention. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Mais il suffit de penser combien de temps J'ai économisé aux heures de bureau. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 OK. 416 00:18:57,790 --> 00:19:01,020 >> Donc 3,59 secondes, ce qui en fait ne semble pas exact non plus. 417 00:19:01,020 --> 00:19:03,710 Mais c'est parce que longue histoire courte, lorsque vous imprimez une quantité énorme 418 00:19:03,710 --> 00:19:06,840 de choses à l'écran, qui elle-même ralentit les choses. 419 00:19:06,840 --> 00:19:11,260 Qu'est-ce qu'il a vraiment pris la CPU dans la appareil était de 3,59 secondes, en 420 00:19:11,260 --> 00:19:15,260 Contrairement à C, qui a pris 0,44 secondes plus récemment. 421 00:19:15,260 --> 00:19:17,620 C'est vraiment un ordre de ampleur différente. 422 00:19:17,620 --> 00:19:20,280 >> Alors, où est ce prix vient? 423 00:19:20,280 --> 00:19:21,790 Pourquoi est-il si lent? 424 00:19:21,790 --> 00:19:24,220 Pourquoi PHP effectuer si mal? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> PUBLIC: Vous n'avez pas vraiment utiliser une table de hachage. 427 00:19:26,550 --> 00:19:27,710 >> DAVID Malan: Je n'ai pas vraiment utiliser une table de hachage. 428 00:19:27,710 --> 00:19:28,760 Donc j'ai un peu fait. 429 00:19:28,760 --> 00:19:29,870 Il s'agit donc d'un tableau associatif. 430 00:19:29,870 --> 00:19:33,650 Très probablement si les gens de PHP sont très intelligent, ils ont utilisé sous la 431 00:19:33,650 --> 00:19:39,520 capot d'une table de hachage réelle mise en œuvre dans quelque chose comme C ou C + +. 432 00:19:39,520 --> 00:19:41,290 Mais. 433 00:19:41,290 --> 00:19:42,760 Ouais. 434 00:19:42,760 --> 00:19:44,010 >> PUBLIC: [inaudible]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID Malan: Ouais. 437 00:19:47,080 --> 00:19:50,780 Ainsi chacune des fonctions que j'ai écrit aujourd'hui - effectivement, pouvez-vous dire qu'une fois de plus un 438 00:19:50,780 --> 00:19:51,480 peu plus fort? 439 00:19:51,480 --> 00:19:54,509 >> PUBLIC: Chacune des fonctions que vous avez inclus a beaucoup plus complet 440 00:19:54,509 --> 00:19:56,610 la capacité de - 441 00:19:56,610 --> 00:19:57,550 >> DAVID Malan: C'est très vrai. 442 00:19:57,550 --> 00:20:01,490 Il ya beaucoup plus de frais généraux que nous sommes pas vraiment voir en se concentrant uniquement sur 443 00:20:01,490 --> 00:20:03,730 dictionary.php, que je viens d'écrire. 444 00:20:03,730 --> 00:20:08,020 En revanche, il ya tout un interprète passer en arrière-plan. 445 00:20:08,020 --> 00:20:12,040 En effet, quand j'ai couru ce programme, il n'était pas en cours d'exécution zéros et de uns compilées 446 00:20:12,040 --> 00:20:14,290 conçu pour mon CPU Intel. 447 00:20:14,290 --> 00:20:19,270 Au contraire, il a été en cours d'exécution ligne par ligne code PHP qui ressemble exactement 448 00:20:19,270 --> 00:20:20,350 comme nous avons tapé il. 449 00:20:20,350 --> 00:20:22,475 Et chaque fois que vous utilisez un langage interprété, vous 450 00:20:22,475 --> 00:20:23,850 effectivement ne pas payer ce prix. 451 00:20:23,850 --> 00:20:27,010 Il va prendre le temps de lire votre dossier haut en bas, de gauche à 452 00:20:27,010 --> 00:20:30,740 droite, puis exécuter chaque ligne, encore et encore. 453 00:20:30,740 --> 00:20:34,250 >> Or, dans la réalité, en particulier sur le web, vous pouvez réellement accélérer le processus 454 00:20:34,250 --> 00:20:38,660 en mettant en cache les résultats de l' code PHP interprété. 455 00:20:38,660 --> 00:20:41,640 Et cela fait sens sur le web, car si vous n'avez pas un utilisateur comme 456 00:20:41,640 --> 00:20:46,300 moi ici, mais 1000 ou 10 000 utilisateurs, peut-être la première fois que le fichier est 457 00:20:46,300 --> 00:20:49,050 consultée c'est lent, mais par la suite, c'est beaucoup plus rapide. 458 00:20:49,050 --> 00:20:51,000 >> Mais cela aussi, encore une fois, est un hors commerce. 459 00:20:51,000 --> 00:20:53,870 Et quelque chose comme une des données de recherche définir, ou même quelque chose de grand comme 460 00:20:53,870 --> 00:20:58,330 ce, les utilisateurs finiront commencer à se sentir ce ralentissement. 461 00:20:58,330 --> 00:21:02,670 >> Donc en bref, les langages interprétés sont très en vogue, très populaire, et 462 00:21:02,670 --> 00:21:06,710 franchement sont probablement les langues vous devrait atteindre pour la résolution de problèmes 463 00:21:06,710 --> 00:21:08,200 à la suite de CS50. 464 00:21:08,200 --> 00:21:12,720 Mais réalisez combien vous êtes vraiment en prenant pour acquis sous le capot 465 00:21:12,720 --> 00:21:15,910 vraiment ces dernières semaines dans hachage tables, et des arbres, et tente, 466 00:21:15,910 --> 00:21:20,770 qui sont utilisés en fin de compte à fait mettre en œuvre des choses comme support ouvert, 467 00:21:20,770 --> 00:21:24,200 crochet, que nous pouvons maintenant prendre gratitude pour acquis. 468 00:21:24,200 --> 00:21:26,360 >> Donc, nous allons jeter un coup d'oeil maintenant dans ce contexte web. 469 00:21:26,360 --> 00:21:29,890 Et je l'ai dit la dernière fois qu'il ya un tas de superglobals en PHP qui 470 00:21:29,890 --> 00:21:32,490 ne sont pas vraiment pertinentes à la ligne de commande. 471 00:21:32,490 --> 00:21:36,210 Ils sont plus pertinentes dans le contexte de l'utilisation de PHP dans un contexte web. 472 00:21:36,210 --> 00:21:41,220 Donc, l'utilisation de PHP sur un serveur web afin pour générer des trucs comme HTML. 473 00:21:41,220 --> 00:21:44,540 >> Et nous regardions à $ _GET et $ _POST, et c'est là automatiquement les utilisateurs ' 474 00:21:44,540 --> 00:21:49,100 entrée finit tout simplement si vous soumettez un former à un fichier se terminant par. php sur un site web 475 00:21:49,100 --> 00:21:50,460 serveur comme l'appareil. 476 00:21:50,460 --> 00:21:53,310 Mais regardons brièvement $ _COOKIE Et $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> En termes simples, ce qui est un cookie vous comprenez dans le contexte de 478 00:21:56,670 --> 00:21:58,220 en utilisant le web? 479 00:21:58,220 --> 00:21:59,450 >> PUBLIC: Dossier sur l'ordinateur. 480 00:21:59,450 --> 00:21:59,920 >> DAVID Malan: Ouais. 481 00:21:59,920 --> 00:22:03,500 Il s'agit d'un fichier sur l'ordinateur de l'utilisateur planté par tous les site web 482 00:22:03,500 --> 00:22:04,410 vous arrive de visiter. 483 00:22:04,410 --> 00:22:07,334 Donc quand vous allez à Facebook, quand vous allez à bankofamerica.com, quand vous allez 484 00:22:07,334 --> 00:22:10,330 à google.com, quand vous allez à presque n'importe quelle site dans le monde ces jours-ci, 485 00:22:10,330 --> 00:22:14,850 y compris cs50.net, un cookie est planté sur votre ordinateur, qui est 486 00:22:14,850 --> 00:22:19,800 soit une valeur stockée dans la RAM dans votre ordinateur dans la mémoire de votre navigateur, ou 487 00:22:19,800 --> 00:22:22,800 parfois même un fichier stocké sur votre disque dur. 488 00:22:22,800 --> 00:22:26,960 >> Et ce qui est généralement stocké dans ce fichier n'est pas votre nom d'utilisateur, pas votre 489 00:22:26,960 --> 00:22:31,060 mot de passe, généralement pas quelque chose sensible à moins que le site n'est pas si 490 00:22:31,060 --> 00:22:35,040 bon avec leur sécurité, mais plutôt c'est un grand identifiant unique parmi les 491 00:22:35,040 --> 00:22:35,680 d'autres choses. 492 00:22:35,680 --> 00:22:38,920 C'est un grand nombre aléatoire planté sur votre ordinateur, mais vous pouvez penser que 493 00:22:38,920 --> 00:22:42,740 une sorte de timbre virtuel de main comme de un club ou d'un parc d'attractions qui 494 00:22:42,740 --> 00:22:47,160 permet le personnel, les propriétaires de ce services, de se rappeler qui vous êtes. 495 00:22:47,160 --> 00:22:51,030 Donc, si le grand nombre aléatoire est comme 12345678, même si c'est évidemment 496 00:22:51,030 --> 00:22:54,180 pas trop aléatoire, penser que la Timbre à main que lorsque vous visitez 497 00:22:54,180 --> 00:22:57,930 facebook.com pour la première fois, ils éradiquer ce numéro sur votre main. 498 00:22:57,930 --> 00:23:01,510 Et puis parce que vous parlez HTTP, vous étant un navigateur, et parce Facebook 499 00:23:01,510 --> 00:23:06,440 parle évidemment la même que d'une bande serveur, dit le protocole HTTP qui 500 00:23:06,440 --> 00:23:09,930 quand vous visitez la suite facebook.com, qu'il s'agisse d'un deuxième 501 00:23:09,930 --> 00:23:13,560 plus tard, une heure plus tard, même le jour suivant, aussi longtemps que vous n'avez pas explicitement 502 00:23:13,560 --> 00:23:17,050 déconnecté, qui a effectivement c'est comme se laver les mains. 503 00:23:17,050 --> 00:23:20,280 HTTP dit que vous devez présenter votre timbre de main chaque fois que vous 504 00:23:20,280 --> 00:23:22,020 revenir à ce site web. 505 00:23:22,020 --> 00:23:24,390 >> Qu'est-ce que Facebook ne fait alors qu'ils regarder ce timbre à la main et 506 00:23:24,390 --> 00:23:26,850 ils disent, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 Je ne sais pas, à première vue que cette David Malan à Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, mais ils peuvent vérifier leur base de données et dire, oh, la personne 509 00:23:34,690 --> 00:23:39,930 pour lequel nous avons planté 123456789 ordinateur David Malan de Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Montrons que l'utilisateur puis son profil page ou son Nouvelles RSS. 512 00:23:46,000 --> 00:23:49,660 >> Mais il ya un problème ici si ce est de savoir comment fonctionne le web en effet. 513 00:23:49,660 --> 00:23:51,390 Jetons un oeil à un exemple rapide. 514 00:23:51,390 --> 00:23:55,190 Disons effectivement aller à dire facebook.com. 515 00:23:55,190 --> 00:23:58,130 Mais avant que nous puissions y aller, laisser moi aller de l'avant et d'ouvrir Chrome 516 00:23:58,130 --> 00:23:59,790 Inspecteur ici. 517 00:23:59,790 --> 00:24:01,140 Laissez-moi regarder à l'onglet Réseau. 518 00:24:01,140 --> 00:24:06,020 Et maintenant, nous allons aller de l'avant et saisissez dans https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 Et je fais cela pour que nous ne voyons pas tous ces redirections et des déchets 520 00:24:09,410 --> 00:24:10,660 temps en regardant à travers celles-ci. 521 00:24:10,660 --> 00:24:12,690 Permettez-moi de frapper entrer. 522 00:24:12,690 --> 00:24:13,130 >> Très bien. 523 00:24:13,130 --> 00:24:14,580 Nous voyons tout un tas de demandes. 524 00:24:14,580 --> 00:24:15,640 Il arrive Facebook. 525 00:24:15,640 --> 00:24:16,930 Il ya tout un tas de fichiers. 526 00:24:16,930 --> 00:24:19,290 Et ici, par ma mention de latence dernière fois, c'est 527 00:24:19,290 --> 00:24:21,240 un grand nombre de requêtes HTTP. 528 00:24:21,240 --> 00:24:23,700 Mais le premier est probablement le plus intéressant. 529 00:24:23,700 --> 00:24:26,420 >> Donc, nous allons faire défiler vers le bas ici, et Je zoome dans une seconde. 530 00:24:26,420 --> 00:24:29,090 Cela va être une sorte de un désordre, mais nous allons voir. 531 00:24:29,090 --> 00:24:31,660 Facebook nous envoie un tas de trucs. 532 00:24:31,660 --> 00:24:33,490 >> Mais whoa, intéressant. 533 00:24:33,490 --> 00:24:37,880 Ils plantation non pas un, mais quatre timbres main sur ma main ici. 534 00:24:37,880 --> 00:24:40,400 Set-Cookie, Set-Cookie, Set-Cookie, Set-Cookie. 535 00:24:40,400 --> 00:24:44,030 Et il ya quelques caractéristiques ici. 536 00:24:44,030 --> 00:24:46,170 Tout d'entre eux mentionnent une certaine genre d'expiration. 537 00:24:46,170 --> 00:24:50,090 Et il semble que Facebook espère me rappeler jusqu'en 2015. 538 00:24:50,090 --> 00:24:53,670 Donc, c'est sans doute le moment où Je dois vous déconnecter ou ils vont simplement 539 00:24:53,670 --> 00:24:55,710 suppose automatiquement que je suis ne reviendra pas. 540 00:24:55,710 --> 00:24:57,840 Donc, c'est en fait un décent quantité de temps. 541 00:24:57,840 --> 00:24:59,170 >> Et il ya un autre choses qui se passent ici. 542 00:24:59,170 --> 00:25:03,036 Ce cookie semble être de force supprimé en disant qu'il a expiré en 1970 543 00:25:03,036 --> 00:25:04,460 avant existaient cookies. 544 00:25:04,460 --> 00:25:06,510 Ainsi, le navigateur va juste à assumer OK, c'est comme 545 00:25:06,510 --> 00:25:07,910 le lavage des mains cachet. 546 00:25:07,910 --> 00:25:11,240 >> Mais maintenant, quand mon navigateur fait une demande ultérieure - 547 00:25:11,240 --> 00:25:14,340 laissez-moi aller de l'avant et faire ce encore et rechargement. 548 00:25:14,340 --> 00:25:18,170 Maintenant, laissez-moi revenir en arrière à l' haut demande et descendre 549 00:25:18,170 --> 00:25:20,760 ici, demander têtes. 550 00:25:20,760 --> 00:25:21,390 Notez ce. 551 00:25:21,390 --> 00:25:25,280 Alors maintenant, je suis sous non-têtes de réponse, mais remarquez qu'il dit têtes de requête. 552 00:25:25,280 --> 00:25:29,220 Et remarquez que mon navigateur dans le cadre de sa demande après avoir heurté rechargement a 553 00:25:29,220 --> 00:25:32,780 envoyé au moins les éléments suivants information. 554 00:25:32,780 --> 00:25:34,670 Non Set-Cookie, mais cookie. 555 00:25:34,670 --> 00:25:38,750 Donc, c'est la ligne, l'en-tête HTTP pour dire, où mon navigateur est en quelque sorte 556 00:25:38,750 --> 00:25:43,340 de mon insu présentant ma main pour l'inspection de Facebook. 557 00:25:43,340 --> 00:25:46,020 >> Donc, ces cookies peuvent être utilisé alors pour quoi? 558 00:25:46,020 --> 00:25:49,420 Pour rappeler qui vous êtes, ou se rappeler comment Plusieurs fois, vous avez été là, ou 559 00:25:49,420 --> 00:25:50,280 vraiment quelque chose. 560 00:25:50,280 --> 00:25:52,742 >> Voici donc counter.php. 561 00:25:52,742 --> 00:25:53,780 Et laissez-moi un zoom avant sur la police. 562 00:25:53,780 --> 00:25:58,380 Et chaque fois que je recharge cette page, un avis c'est se souvenir combien de fois 563 00:25:58,380 --> 00:25:59,250 Je suis passé par là. 564 00:25:59,250 --> 00:26:00,570 Eh bien, ce n'est pas tout ce qui impressionnant. 565 00:26:00,570 --> 00:26:03,140 Disons simplement fermer cet onglet, et maintenant revenons à 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, c'est intéressant. 568 00:26:08,970 --> 00:26:10,960 Il se souvient encore, même si je fermais l'onglet. 569 00:26:10,960 --> 00:26:14,010 Et franchement, si je ferme le navigateur, si elles sont appliquées dans le droit chemin, je 570 00:26:14,010 --> 00:26:18,950 pourrait encore se rappeler que cet utilisateur est qui il ou elle a été la première fois, et 571 00:26:18,950 --> 00:26:22,840 seulement une fois que je vais dans le menu de Chrome, qui ici est ici, et aller à 572 00:26:22,840 --> 00:26:25,990 Historique, cliquez sur Effacer et les données de navigation, comme certains d'entre vous peuvent avoir dans le 573 00:26:25,990 --> 00:26:33,050 passé, alors seulement vos cookies effectivement être supprimé lors web 574 00:26:33,050 --> 00:26:33,970 développement. 575 00:26:33,970 --> 00:26:35,340 >> Donc, si nous allons - 576 00:26:35,340 --> 00:26:37,080 fermons jusqu'à gedit ici. 577 00:26:37,080 --> 00:26:38,910 Et si nous passons maintenant à ce fichier. 578 00:26:38,910 --> 00:26:44,210 Laissez-moi aller dans notre vhosts / localhost / publique, et laissez-moi faire 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Notez que ceci est une jolie programme simple. 581 00:26:48,350 --> 00:26:50,250 C'est un site assez simple. 582 00:26:50,250 --> 00:26:51,770 >> Ainsi, le début du fichier est seulement commentaires. 583 00:26:51,770 --> 00:26:54,930 Mais voici une nouvelle ligne que vous pouvez ont déjà vu dans le p-mis sept, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Il s'agit d'une ligne de code PHP qui indique essentiellement le serveur web, make 586 00:27:00,380 --> 00:27:03,400 Assurez-vous d'apposer les mains et faire N'oubliez pas de vérifier les timbres à main. 587 00:27:03,400 --> 00:27:06,810 C'est tout ce qui fait la ligne, et il fait tout ce processus pour nous. 588 00:27:06,810 --> 00:27:09,510 Ensuite, notez que je viens de recevoir deux branches ici. 589 00:27:09,510 --> 00:27:14,150 Si la touche de compteur à l'intérieur de cette variable globale spéciale appelée 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Est réglé - en d'autres termes, si il ya une certaine valeur, il - 591 00:27:18,010 --> 00:27:22,440 nous allons l'obtenir et le stocker dans un locale variable appelée $ compteur. 592 00:27:22,440 --> 00:27:27,000 Sinon, nous allons assigner $ contre la valeur par défaut de 0. 593 00:27:27,000 --> 00:27:30,320 >> Maintenant, voici un aspect de PHP qui est à la fois une bénédiction et une malédiction. 594 00:27:30,320 --> 00:27:32,080 PHP est un peu bâclé. 595 00:27:32,080 --> 00:27:35,160 Ainsi, alors que dans C, ce qui serait la portée de compteur ont été 596 00:27:35,160 --> 00:27:36,725 soit ici ou ici? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Il aurait été confiné à ces accolades. 599 00:27:41,690 --> 00:27:42,090 Devinez quoi? 600 00:27:42,090 --> 00:27:46,920 En PHP, il existe même en dehors de ceux accolades, ici, et ici, 601 00:27:46,920 --> 00:27:49,120 et ici, et ici, et même en bas. 602 00:27:49,120 --> 00:27:52,400 Donc, je dis que c'est une bénédiction dans le sens que vous n'avez pas à penser que 603 00:27:52,400 --> 00:27:54,070 dur comme nous l'avons fait il ya quelques semaines. 604 00:27:54,070 --> 00:27:56,880 Mais c'est aussi un peu d'une malédiction en ce que peu importe où vous utilisez une variable dans 605 00:27:56,880 --> 00:28:00,020 PHP, au moins dans un programme comme celui-ci, il est globalement accessible pour 606 00:28:00,020 --> 00:28:01,170 le meilleur ou pour le pire. 607 00:28:01,170 --> 00:28:06,130 Donc, vous devez garder à l'esprit maintenant que vos variables ne peuvent pas être indéfini. 608 00:28:06,130 --> 00:28:07,640 Vous pourriez avoir les défini ailleurs. 609 00:28:07,640 --> 00:28:09,460 >> Mais qu'est-ce que je vais faire en fin de compte? 610 00:28:09,460 --> 00:28:13,160 Je vais stocker à l'intérieur de ce monde variable en tant que valeur de l' 611 00:28:13,160 --> 00:28:17,060 compteur clé le résultat de faire contre plus 1. 612 00:28:17,060 --> 00:28:18,910 Donc, ce n'est que le calcul cela ne l' 613 00:28:18,910 --> 00:28:20,590 incrémentation de ce compteur. 614 00:28:20,590 --> 00:28:24,850 Et le fait que je suis le stockage que valeur de retour ici est moyen à 615 00:28:24,850 --> 00:28:29,970 essentiellement de mettre à jour la base de données pour rappelez-vous que l'utilisateur 123456789 a été 616 00:28:29,970 --> 00:28:31,010 ici deux fois. 617 00:28:31,010 --> 00:28:33,780 Et quand je le fais à nouveau la prochaine fois que je recharger la page, il va vérifier 618 00:28:33,780 --> 00:28:36,710 mon timbre de la main et dire, oh, 123456789 utilisateur a maintenant 619 00:28:36,710 --> 00:28:38,410 été ici trois fois. 620 00:28:38,410 --> 00:28:43,390 >> Et donc ce que PHP langues et assimilés font pour nous, c'est qu'ils essaient de trouver 621 00:28:43,390 --> 00:28:47,720 comment, où et pour combien de temps pour stocker des valeurs dans cette spéciale 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 Et cette superglobal la prochaine fois que je visitez la page est une sorte de magie 624 00:28:52,750 --> 00:28:57,440 pré-remplie, remplie avec des valeurs qui étaient là la dernière fois que vous avez consultées, 625 00:28:57,440 --> 00:29:02,310 si c'était il ya une seconde, une semaine il ya, ou en 2013 et nous parlons maintenant 626 00:29:02,310 --> 00:29:03,790 2015 environ. 627 00:29:03,790 --> 00:29:07,600 PHP et le serveur Web se chargent de tout cela pour vous. 628 00:29:07,600 --> 00:29:08,850 >> AUDIENCE: [inaudible]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID MALAN: les variables en PHP sont essentiellement toujours mondial à moins que vous 631 00:29:15,760 --> 00:29:18,400 les déclarer à l'intérieur d'une fonction, et puis ils correspondent à 632 00:29:18,400 --> 00:29:19,420 la seule fonction. 633 00:29:19,420 --> 00:29:22,300 Mais parce que je n'ai pas écrit fonctions, ils sont maintenant efficacement 634 00:29:22,300 --> 00:29:25,090 mondiale tout au long de mon dossier ici. 635 00:29:25,090 --> 00:29:26,040 >> AUDIENCE: Y at-il un moyen pour les faire local? 636 00:29:26,040 --> 00:29:28,470 >> DAVID MALAN: Yat-il un moyen de les faire local? 637 00:29:28,470 --> 00:29:30,680 Seulement en les enveloppant dans des fonctions. 638 00:29:30,680 --> 00:29:32,790 Qui dans la dernière version de PHP, vous pouvez le faire avec 639 00:29:32,790 --> 00:29:34,130 une fonction anonyme. 640 00:29:34,130 --> 00:29:35,930 Mais plus que dans le contexte de JavaScript. 641 00:29:35,930 --> 00:29:37,260 Mais la réponse est non. 642 00:29:37,260 --> 00:29:40,888 Une réponse plus longue est oui. 643 00:29:40,888 --> 00:29:42,380 Nice. 644 00:29:42,380 --> 00:29:43,380 Bonne question du quiz. 645 00:29:43,380 --> 00:29:43,930 Très bien. 646 00:29:43,930 --> 00:29:47,760 >> Alors, enfin, la page elle-même est en fait assez simple. 647 00:29:47,760 --> 00:29:51,470 Notez qu'une fois que je sors de mode PHP, rappeler que toutes ces choses vers le bas 648 00:29:51,470 --> 00:29:53,700 ci-dessous va tout simplement pour obtenir spit à cru au navigateur. 649 00:29:53,700 --> 00:29:57,050 Ce qui est bien, parce que je ne veux envoyer l'utilisateur du code HTML, mais je ne veux 650 00:29:57,050 --> 00:29:59,140 de mettre à jour dynamiquement HTML. 651 00:29:59,140 --> 00:30:03,930 Et d'une manière que je peux faire est de trier de tomber très vite dans PHP 652 00:30:03,930 --> 00:30:07,730 mode, utilisez ouverte support interrogation signe égal, puis sortie de la valeur 653 00:30:07,730 --> 00:30:08,650 du compteur. 654 00:30:08,650 --> 00:30:12,360 >> Ou si cela ressemble un peu cryptique, cette signe égal est en fait quelques-unes 655 00:30:12,360 --> 00:30:16,190 sucre syntaxique pour cette printf ($ compteur). 656 00:30:16,190 --> 00:30:19,160 Mais franchement, c'est un peu laid et un peu ennuyeux à taper. 657 00:30:19,160 --> 00:30:23,660 Donc, PHP propose très bien cette fonctionnalité où vous pouvez simplement dire plus 658 00:30:23,660 --> 00:30:25,450 succinctement de la même manière. 659 00:30:25,450 --> 00:30:26,940 >> Alors qu'est-ce qui se passe en dessous le capot? 660 00:30:26,940 --> 00:30:31,210 Voyons rapidement regarder le réseau tab ici pour counter.php. 661 00:30:31,210 --> 00:30:35,090 Et permettez-moi d'aller de l'avant et le premier nous allons effacer vos cookies. 662 00:30:35,090 --> 00:30:38,670 Les données de navigation claires Let depuis le début des temps. 663 00:30:38,670 --> 00:30:39,680 Maintenant revenons ici. 664 00:30:39,680 --> 00:30:41,340 Maintenant, nous allons recharger la page. 665 00:30:41,340 --> 00:30:42,170 Et je suis de retour à zéro. 666 00:30:42,170 --> 00:30:44,810 Parce que mon timbre de main a été lavé, Je reçois maintenant un nouveau cookie. 667 00:30:44,810 --> 00:30:48,780 >> En effet, si je regarde l'onglet réseau et regardez-têtes de réponse, notez 668 00:30:48,780 --> 00:30:51,960 que l'appareil est m'envoie un cookie dont le nom est quelque peu 669 00:30:51,960 --> 00:30:55,820 arbitrairement, mais un peu raisonnablement, phpsessid. 670 00:30:55,820 --> 00:30:58,440 Et il m'envoie ce vraiment grand nombre aléatoire. 671 00:30:58,440 --> 00:30:59,440 Ce n'est pas tout à fait un certain nombre. 672 00:30:59,440 --> 00:31:00,390 Ce n'est pas tout à fait hexadécimal. 673 00:31:00,390 --> 00:31:03,600 C'est une sorte de chaîne de caractères alphanumériques, mais on peut supposer que c'est aléatoire. 674 00:31:03,600 --> 00:31:06,830 Et c'est le cachet de la main afin d' dis ce que je fais allusion. 675 00:31:06,830 --> 00:31:11,960 >> Pendant ce temps, si je puis cliquez sur Recharger regarder cette seconde ligne pour mon deuxième 676 00:31:11,960 --> 00:31:17,600 demande, remarquez maintenant que ma demande têtes comprennent PHPSESSID équivaut à cela, 677 00:31:17,600 --> 00:31:19,390 pas Set-Cookie, mais juste cookie. 678 00:31:19,390 --> 00:31:22,950 Et c'est la présentation de mon navigateur de mon cachet à la main. 679 00:31:22,950 --> 00:31:28,820 >> Alors maintenant, comme un teaser, et nous parlerons plus à ce sujet dans une semaine ou deux, mais 680 00:31:28,820 --> 00:31:31,590 En quoi ce que vous faites vulnérables, votre compte Facebook 681 00:31:31,590 --> 00:31:34,137 vulnérables, et d'autres comme comptes vulnérables? 682 00:31:34,137 --> 00:31:35,510 >> AUDIENCE: Si quelqu'un a votre cookie. 683 00:31:35,510 --> 00:31:36,750 >> DAVID MALAN: Ouais, si quelqu'un a votre cookie. 684 00:31:36,750 --> 00:31:39,920 Je veux dire vraiment, un peu comme certains d'entre vous aurait tenté à comme un club ou un 685 00:31:39,920 --> 00:31:44,030 parc d'attractions, si vous essayez quelque chose comme ça pour copier le timbre, mais 686 00:31:44,030 --> 00:31:47,560 en arrière sur la main d'une autre personne, et puis il ou elle le présente comme 687 00:31:47,560 --> 00:31:53,250 eux-mêmes, si elle en fait ne regarde identique, 123456789, puis le web 688 00:31:53,250 --> 00:31:57,980 serveur est apparemment juste va confiance que l'utilisateur, c'est vous. 689 00:31:57,980 --> 00:32:01,450 >> Et c'est en effet un élément fondamental menace une fois que vous utilisez les cookies 690 00:32:01,450 --> 00:32:05,420 parce que si quelqu'un usurpe tellement à parler de vos biscuits, les chiffres sur ce qu'il 691 00:32:05,420 --> 00:32:08,660 est, soit en copiant vraiment en regardant votre ordinateur 692 00:32:08,660 --> 00:32:09,890 et étant semblable, OK. 693 00:32:09,890 --> 00:32:14,520 Le cookie de David est JJ3JIK et ainsi de suite, et puis ils sont assez intelligents pour savoir 694 00:32:14,520 --> 00:32:18,080 comment trier des envoyer manuellement que cookie à partir d'un navigateur ou d'un 695 00:32:18,080 --> 00:32:22,350 programme, écrivent-ils, ils ne pouvaient totalement se connecter à un site Web que vous. 696 00:32:22,350 --> 00:32:28,560 Il n'est pas si difficile à faire semblant d'être quelqu'un d'autre à moins que nous revisitons p-set 697 00:32:28,560 --> 00:32:30,790 deux, qui a introduit ce? 698 00:32:30,790 --> 00:32:32,065 >> AUDIENCE: Cryptographie. 699 00:32:32,065 --> 00:32:33,860 >> DAVID MALAN: Un peu peu de cryptographie. 700 00:32:33,860 --> 00:32:36,550 Cryptographie simple, au moins dans la édition standard, mais crypto 701 00:32:36,550 --> 00:32:36,870 néanmoins. 702 00:32:36,870 --> 00:32:37,410 moins. 703 00:32:37,410 --> 00:32:41,440 Ainsi, il s'avère si vous chiffrez tous ces en-têtes à l'aide de quelque chose que vous 704 00:32:41,440 --> 00:32:48,770 pourraient désormais savoir plus familièrement comme SSL, secure socket layer, ou URL https:// 705 00:32:48,770 --> 00:32:51,890 puis toutes ces choses que nous avons été en regardant sont réellement crypté, 706 00:32:51,890 --> 00:32:54,800 ce qui signifie que c'est comme si vous ne peut pas lire le cachet de la main. 707 00:32:54,800 --> 00:32:59,350 Seulement facebook.com peut, ou google.com, ou dans ce cas, l'appareil peut 708 00:32:59,350 --> 00:33:00,550 lire cette empreinte de la main. 709 00:33:00,550 --> 00:33:04,020 >> Tragiquement cependant, et encore, ce n'est trop appropriée avec les trucs NSA 710 00:33:04,020 --> 00:33:06,410 de la fin, même SSL est cassable. 711 00:33:06,410 --> 00:33:09,850 Et c'est en fait pas si difficile de même casser le cryptage. 712 00:33:09,850 --> 00:33:12,040 Pas tellement par craquage du chiffrement, mais en incitant le 713 00:33:12,040 --> 00:33:15,720 navigateur dans le décryptage les données prématurément. 714 00:33:15,720 --> 00:33:17,880 Mais encore une fois, nous allons vous taquiner avec qu'avant longtemps. 715 00:33:17,880 --> 00:33:21,242 Pour l'instant, avoir peur. 716 00:33:21,242 --> 00:33:23,070 C'est tragiquement genre de vrai. 717 00:33:23,070 --> 00:33:23,760 >> Très bien. 718 00:33:23,760 --> 00:33:27,910 Alors, d'où vient ce maintenant laissez-nous? 719 00:33:27,910 --> 00:33:29,010 Eh bien, nous allons le faire. 720 00:33:29,010 --> 00:33:31,790 Allons de l'avant et prendre une rapide Teaser avant de prendre une pause. 721 00:33:31,790 --> 00:33:33,790 Et je pense que nous allons s'attarder un peu plus longtemps aujourd'hui, mais nous allons plonger dans 722 00:33:33,790 --> 00:33:37,850 quelque chose de nouveau et sexy, qui sera aiguiser votre appétit pour encore plus. 723 00:33:37,850 --> 00:33:38,950 C'est donc le teaser. 724 00:33:38,950 --> 00:33:41,520 >> Donc, SQL, nous avons commencé à parler de jamais si brièvement la dernière fois. 725 00:33:41,520 --> 00:33:44,670 Vous allez vraiment vous salir les mains avec certaines d'entre elles dans le p-mis sept ans. 726 00:33:44,670 --> 00:33:46,480 Et en termes simples, ce qui ne SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 faire pour vous? 729 00:33:49,850 --> 00:33:50,310 Qu'est-ce que c'est? 730 00:33:50,310 --> 00:33:51,546 Ouais. 731 00:33:51,546 --> 00:33:53,240 >> PUBLIC: Voyons vos données d'accès. 732 00:33:53,240 --> 00:33:53,360 >> DAVID Malan: Ouais. 733 00:33:53,360 --> 00:33:55,120 C'est toi données d'accès laisser dans une base de données. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 Et c'est essentiellement un langage de programmation. 736 00:33:59,890 --> 00:34:03,400 Il ya des caractéristiques de celui-ci que nous allons même pas utiliser en classe. 737 00:34:03,400 --> 00:34:04,710 Mais vous pouvez effectivement définir des fonctions. 738 00:34:04,710 --> 00:34:06,870 Ils sont appelés stockée procédures SQL. 739 00:34:06,870 --> 00:34:09,860 Mais nous gardons assez simple et juste l'utiliser pour certaines opérations de base 740 00:34:09,860 --> 00:34:14,320 comme la sélection de données, insérer des données, la mise à jour des données, et la suppression de données. 741 00:34:14,320 --> 00:34:17,400 >> Et vous pouvez vraiment penser à une base de données, comme une base de données SQL, comme on vient de 742 00:34:17,400 --> 00:34:18,800 étant Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Étant donné que SQL se réfère à un relationnel base de données, où 744 00:34:21,989 --> 00:34:23,480 relation signifie simplement tableaux. 745 00:34:23,480 --> 00:34:24,739 Les lignes et les colonnes. 746 00:34:24,739 --> 00:34:27,929 Donc, tout ce que vous pouvez mettre dans une feuille de calcul comme ceci ou Google Docs, 747 00:34:27,929 --> 00:34:32,460 vous pourriez mettre dans une base de données SQL en déclarant une table. 748 00:34:32,460 --> 00:34:34,800 >> Maintenant, comment voulez-vous accéder à fait cette information? 749 00:34:34,800 --> 00:34:38,239 Eh bien, avec des commandes ou requêtes de ce genre. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE et DELETE. 751 00:34:40,199 --> 00:34:44,489 Et, pour la plupart, ceux-ci sont l' quatre seuls ingrédients dont vous aurez besoin pour 752 00:34:44,489 --> 00:34:47,370 faire quelque chose de très puissant dans sept problème posé. 753 00:34:47,370 --> 00:34:49,940 >> Maintenant de retour dans la journée, vous serait en fait interagir avec une base de données dans un 754 00:34:49,940 --> 00:34:52,730 fenêtre du terminal noir et blanc à une invite à clignoter comme ceci. 755 00:34:52,730 --> 00:34:56,370 Et la base de données nous courir sur la appareil est appelé MySQL, qui est 756 00:34:56,370 --> 00:34:58,560 moteur de base de données libre et open source. 757 00:34:58,560 --> 00:35:02,240 Si vous Google et lire la Wikipedia article, vous saurez que le nom est 758 00:35:02,240 --> 00:35:05,060 un bit de transition pour quelque versions de Linux. 759 00:35:05,060 --> 00:35:10,460 Base de données Maria est en fait une débourser pour ainsi dire de MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Longue histoire courte, Oracle a acheté MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle est une grande entreprise. 762 00:35:13,870 --> 00:35:17,010 Les gens ont été inquiet qu'il serait plus rester tout à fait en open source, 763 00:35:17,010 --> 00:35:20,930 donc c'est juste une copie de MySQL qui est toujours libre, toujours open source, et 764 00:35:20,930 --> 00:35:23,550 installé dans Fedora Linux par défaut. 765 00:35:23,550 --> 00:35:26,130 >> Mais ce n'est une sorte de douleur dans la cou de se familiariser avec un 766 00:35:26,130 --> 00:35:27,310 base de données de cette façon. 767 00:35:27,310 --> 00:35:30,560 Donc, nous incluons dans l'appareil de CS50 un outil gratuit et open source appelé 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Juste une coïncidence que il est écrit en PHP. 770 00:35:33,940 --> 00:35:36,450 Il n'y a pas fondamentale besoin pour PHP ici. 771 00:35:36,450 --> 00:35:40,090 Mais c'est juste un outil basé sur le Web qui nous avons téléchargé gratuitement, installé dans 772 00:35:40,090 --> 00:35:43,850 l'appareil, qui nous permet d'avoir une interface d'utilisateur graphique avec laquelle 773 00:35:43,850 --> 00:35:48,610 pour explorer la base de données de sept p-set avec qui de créer de nouvelles bases de données, 774 00:35:48,610 --> 00:35:51,980 dire pour votre propre projet final si vous voulez comme, et, finalement, de créer 775 00:35:51,980 --> 00:35:55,900 sites web dynamiques comme CS50 Finances qui vous permettent d'interroger les données et 776 00:35:55,900 --> 00:35:58,140 mettre à jour les données dynamiquement. 777 00:35:58,140 --> 00:36:01,420 >> Vous n'allez pas avoir à utiliser seulement un simple fichier texte ou CSV. 778 00:36:01,420 --> 00:36:05,950 Vous pouvez réellement utiliser une base de données intelligente programme de sorte que vous pouvez exécuter plus 779 00:36:05,950 --> 00:36:10,240 requêtes sophistiquées que la simple lecture à travers tout linéaire. 780 00:36:10,240 --> 00:36:14,150 >> Ainsi, par exemple, c'est ce que nous donnons vous hors de la boîte pour le p-mis sept ans. 781 00:36:14,150 --> 00:36:18,280 Il s'agit d'une table avec au moins en apparence trois colonnes, dont l'une est 782 00:36:18,280 --> 00:36:21,450 nom d'utilisateur, dont l'un est hachage, et l'autre qui est ID. 783 00:36:21,450 --> 00:36:26,200 >> Mais la chose intéressante, et juste pour démêler une pensée ici, le nom d'utilisateur 784 00:36:26,200 --> 00:36:29,270 est sans doute déjà unique, non? 785 00:36:29,270 --> 00:36:31,190 Je veux dire, la plupart n'importe quel site Web, si vous avez un nom d'utilisateur, il 786 00:36:31,190 --> 00:36:32,370 ne peut pas être deux Césars. 787 00:36:32,370 --> 00:36:33,440 Il ne peut y avoir deux Malans. 788 00:36:33,440 --> 00:36:34,950 Il ne peut y avoir deux jharvards. 789 00:36:34,950 --> 00:36:35,600 Son unique. 790 00:36:35,600 --> 00:36:38,610 Sinon, ils ne savent pas qui jharvard qu'il est réellement. 791 00:36:38,610 --> 00:36:42,710 Alors, que peut-être la motivation pour également ayant une troisième colonne de gauche 792 00:36:42,710 --> 00:36:46,970 il appelé ID, qui ressemble à un nombre qui est similaire unique? 793 00:36:46,970 --> 00:36:51,300 Il se sent un peu redondant me au premier coup d'œil. 794 00:36:51,300 --> 00:36:54,910 Pourquoi peut-il être convaincant d'avoir non seulement les noms d'utilisateurs uniques, 795 00:36:54,910 --> 00:36:56,837 mais aussi des numéros uniques? 796 00:36:56,837 --> 00:36:59,460 >> PUBLIC: Ils pourraient avoir le même mot de passe. 797 00:36:59,460 --> 00:37:01,720 >> DAVID Malan: Les gens pourraient avoir le même mot de passe, bien sûr. 798 00:37:01,720 --> 00:37:03,900 Cela pourrait arriver absolument. 799 00:37:03,900 --> 00:37:08,270 Mais si elles ont ce nom d'utilisateur unique, je diront que cela n'a pas vraiment d' 800 00:37:08,270 --> 00:37:11,630 question, parce que si ils tapent dans leur nom d'utilisateur, j'ai seulement besoin de vérifier leur 801 00:37:11,630 --> 00:37:15,060 mot de passe, leur hachage de celui-ci. 802 00:37:15,060 --> 00:37:15,970 Sinon, pourquoi? 803 00:37:15,970 --> 00:37:17,950 >> PUBLIC: Recherche plus rapide. 804 00:37:17,950 --> 00:37:18,680 >> DAVID Malan: Recherche plus rapide. 805 00:37:18,680 --> 00:37:19,548 Pourquoi? 806 00:37:19,548 --> 00:37:21,460 >> PUBLIC: ID est juste un. 807 00:37:21,460 --> 00:37:24,040 >> DAVID Malan: ID est un seul caractère, ou pour être plus précis, il s'agit d'un nombre, 808 00:37:24,040 --> 00:37:26,910 il est donc probablement 32 bits ou quelque chose comme ça. 809 00:37:26,910 --> 00:37:30,270 Considérant que le nom d'utilisateur, apparemment Jason La place de Hirschhorn il est une sorte de 810 00:37:30,270 --> 00:37:33,900 ridiculement longue, et il va me prendre beaucoup plus de temps à chaîne 811 00:37:33,900 --> 00:37:40,910 comparer H-I-R-S-C-H-H-O-R-N, et peut-être a / 0 ou quelque chose comme ça, dans l'ordre 812 00:37:40,910 --> 00:37:45,100 à voir Jason, plutôt que de simplement disant de me donner l'utilisateur numéro deux. 813 00:37:45,100 --> 00:37:46,510 C'est 32 bits. 814 00:37:46,510 --> 00:37:48,550 C'est un RC qui vous avez à comparer. 815 00:37:48,550 --> 00:37:52,150 Et en effet, c'est exactement la raison pour laquelle les bases de données ont tendance à attribuer des identifiants uniques à 816 00:37:52,150 --> 00:37:53,710 les lignes en eux. 817 00:37:53,710 --> 00:37:56,280 >> Maintenant, ce que d'autres types de données sont là outre RC et apparemment 818 00:37:56,280 --> 00:37:57,160 chaînes de ce genre? 819 00:37:57,160 --> 00:37:59,700 Eh bien, pour être plus correct, bases de données SQL, comme 820 00:37:59,700 --> 00:38:02,060 MySQL, ont des champs CHAR. 821 00:38:02,060 --> 00:38:05,320 Et CHAR un peu trompeuse est pas un seul CHAR. 822 00:38:05,320 --> 00:38:10,290 Un champ CHAR dans une base de données MySQL est un ou plusieurs caractères, mais c'est un 823 00:38:10,290 --> 00:38:11,780 nombre fixe de caractères. 824 00:38:11,780 --> 00:38:15,710 >> Ainsi, par exemple, si je dépasse à phpMyAdmin que vous avez déjà, ou 825 00:38:15,710 --> 00:38:21,340 va bientôt un problème posé sept, et je vais à ma base de données, et juste pour le fun, 826 00:38:21,340 --> 00:38:25,700 nous allons créer une nouvelle table appelée test avec seulement deux colonnes. 827 00:38:25,700 --> 00:38:27,160 Je puis cliquez sur OK. 828 00:38:27,160 --> 00:38:30,070 Et cela va devenir assez familier, surtout que vous bricolez 829 00:38:30,070 --> 00:38:31,130 autour sur votre propre. 830 00:38:31,130 --> 00:38:34,140 Ici, je pourrais taper ID pour créer une nouvelle table de type INT. 831 00:38:34,140 --> 00:38:37,770 Mais ici, je pourrais taper le nom d'utilisateur de recréer cette table plus tôt. 832 00:38:37,770 --> 00:38:40,700 Et remarquez que j'ai tout un tas de types à choisir. 833 00:38:40,700 --> 00:38:43,610 >> Et cela aussi est pourquoi phpMyAdmin est plutôt agréable. 834 00:38:43,610 --> 00:38:46,770 C'est une sorte d'auto-enseignement dans que vous peut juste sorte de point et clic, et 835 00:38:46,770 --> 00:38:50,730 regarder des menus déroulants, et en déduire que ce pouvoir SQL vous donne. 836 00:38:50,730 --> 00:38:54,090 >> Et en effet, si je choisis CHAR, je puis à spécifier la longueur, ou comment 837 00:38:54,090 --> 00:38:55,940 de nombreuses valeurs, combien de chars. 838 00:38:55,940 --> 00:39:00,090 Ainsi, les valeurs très fréquents sont des choses comme 255, mais c'est un peu long. 839 00:39:00,090 --> 00:39:02,250 Est couramment huit pour un nom d'utilisateur. 840 00:39:02,250 --> 00:39:03,590 Mais c'est un petit peu ces jours-ci. 841 00:39:03,590 --> 00:39:05,430 Donc, c'est une décision de conception. 842 00:39:05,430 --> 00:39:08,630 Est-ce 8 caractères max, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 C'est vraiment à vous. 844 00:39:09,830 --> 00:39:12,350 Mais un champ CHAR est un nombre fixe. 845 00:39:12,350 --> 00:39:16,420 Alors, choisissez trop peu et vous êtes un peu vissé si vous voulez un nom d'utilisateur plus. 846 00:39:16,420 --> 00:39:19,132 Choisissez un trop grand nombre et ce qui est la baisse? 847 00:39:19,132 --> 00:39:20,820 >> PUBLIC: [inaudible]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID Malan: C'est du gaspillage. 849 00:39:21,620 --> 00:39:24,835 Tout comme en C, si vous avez une plus grande morceau de mémoire que vous avez besoin, vous êtes 850 00:39:24,835 --> 00:39:27,190 une perte de temps et de gaspiller l'espace. 851 00:39:27,190 --> 00:39:31,430 Ainsi, en variante, il existe VARCHAR, qui résout ce problème en 852 00:39:31,430 --> 00:39:36,390 le traitement de la longueur non comme une longueur fixe, mais comme une longueur maximale, et en utilisant un 853 00:39:36,390 --> 00:39:40,990 nombre variable de caractères, qui a ensuite a tendance à n'utiliser que de nombreux CHARs que vous 854 00:39:40,990 --> 00:39:42,710 réellement besoin. 855 00:39:42,710 --> 00:39:43,670 Cela semble parfait. 856 00:39:43,670 --> 00:39:45,640 >> Pourquoi ne pas se débarrasser de l' données de type char alors? 857 00:39:45,640 --> 00:39:48,500 Quelle pourrait être la baisse de utilisant Varchars, ce qui semble 858 00:39:48,500 --> 00:39:51,644 comme c'est une belle victoire? 859 00:39:51,644 --> 00:39:52,596 Ouais? 860 00:39:52,596 --> 00:39:53,846 >> PUBLIC: [inaudible]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID Malan: OK, bon. 863 00:39:57,790 --> 00:40:01,101 Donc, si l'ensemble de vos données est la même longueur, ce qui est le problème? 864 00:40:01,101 --> 00:40:05,250 >> PUBLIC: Parce que vous perdez données par tous dire. 865 00:40:05,250 --> 00:40:09,060 >> DAVID Malan: Donc, si toutes vos données est la même longueur, mais, je dirais 866 00:40:09,060 --> 00:40:12,300 que la spécification d'une longueur maximale sur VARCHAR n'est pas différent de 867 00:40:12,300 --> 00:40:16,070 spécifiant une longueur fixe sur CHAR si vous savez que nombre à l'avance. 868 00:40:16,070 --> 00:40:19,500 Mais il est en effet, et je vais trier de extrait de la réponse de la réalité 869 00:40:19,500 --> 00:40:22,610 qu'il ya encore un max, ce qui pourrait être gênant, surtout si vous 870 00:40:22,610 --> 00:40:25,920 rencontrer le nom d'une personne qui est inhabituellement longue que vous ne l'avez pas 871 00:40:25,920 --> 00:40:26,860 anticiper. 872 00:40:26,860 --> 00:40:31,420 Et c'est aussi un peu moins efficace pour réellement chercher sur Varchars comme 873 00:40:31,420 --> 00:40:35,620 opposition à la recherche CHARs, en particulier pendant de longues tables qui ont beaucoup et 874 00:40:35,620 --> 00:40:36,510 beaucoup de données. 875 00:40:36,510 --> 00:40:40,060 Donc, ici aussi, thématique est de nouveau pas de choix évident. 876 00:40:40,060 --> 00:40:42,870 >> Donc, juste pour vous donner une idée de l'autre les types de données qui pourraient être d'intérêt 877 00:40:42,870 --> 00:40:45,400 soit pour le p-mis sept ou l'avenir, il est INT. 878 00:40:45,400 --> 00:40:47,270 Il ya BIGINT, qui est comme long long. 879 00:40:47,270 --> 00:40:48,880 Elle tend à être de 64 bits. 880 00:40:48,880 --> 00:40:51,640 Il ya DECIMAL, qui vous le verrez dans l'ensemble du problème, qui est une bien 881 00:40:51,640 --> 00:40:55,300 réponse propre aux problèmes que nous rencontré avec flotteur et flottant 882 00:40:55,300 --> 00:40:55,980 Point imprécision. 883 00:40:55,980 --> 00:40:57,390 Et puis il ya DATETIME. 884 00:40:57,390 --> 00:41:01,530 Il ya littéralement un type de données qui a pour ressembler à un an, un mois, un jour, 885 00:41:01,530 --> 00:41:03,730 et une heure, minute et seconde. 886 00:41:03,730 --> 00:41:07,470 >> Mais les bases de données SQL ont aussi choses que nous appelons index. 887 00:41:07,470 --> 00:41:11,630 Et un indice est quelque chose que vous spécifier lors de la création de la table de 888 00:41:11,630 --> 00:41:15,720 faire des recherches et d'autres activités plus efficace. 889 00:41:15,720 --> 00:41:18,550 Plus précisément, il ya quelque chose qui s'appelle l'index primaire que vous pourriez 890 00:41:18,550 --> 00:41:19,440 déclare ce qui suit. 891 00:41:19,440 --> 00:41:22,330 >> Nous l'avons fait pour vous, avec le table des utilisateurs, nous vous donnons. 892 00:41:22,330 --> 00:41:26,160 Mais remarquez si je recréé manuellement la table des utilisateurs ici donner 893 00:41:26,160 --> 00:41:27,110 un nom d'utilisateurs. 894 00:41:27,110 --> 00:41:28,125 J'ai déjà précisé ID. 895 00:41:28,125 --> 00:41:29,330 J'ai précisé RC. 896 00:41:29,330 --> 00:41:32,000 J'ai spécifié le nom d'utilisateur avec 32 caractères maximum. 897 00:41:32,000 --> 00:41:36,140 Mais si nous continuons à faire défiler dans ce assez large fenêtre, il ya un avis 898 00:41:36,140 --> 00:41:38,260 tas d'autres choses que je peux préciser. 899 00:41:38,260 --> 00:41:40,950 >> Un, je peux spécifier les attributs comme, vous savez quoi, ce 900 00:41:40,950 --> 00:41:42,190 RC devrait être signé. 901 00:41:42,190 --> 00:41:45,510 Je ne veux pas les nombres négatifs, Faisons donc il UNSIGNED. 902 00:41:45,510 --> 00:41:48,660 Null n'est pas pertinente ici parce que Je ne veux que chaque utilisateur 903 00:41:48,660 --> 00:41:49,640 avoir un numéro unique. 904 00:41:49,640 --> 00:41:50,830 Je ne veux pas qu'il soit nul. 905 00:41:50,830 --> 00:41:52,330 >> Mais ce qui est intéressant. 906 00:41:52,330 --> 00:41:57,780 Je peux préciser que ID est soit le clé primaire de cette base de données, ou il est 907 00:41:57,780 --> 00:42:00,620 unique, ou il est indexé, ou le texte intégral. 908 00:42:00,620 --> 00:42:05,630 Donc, pour les fins d'aujourd'hui, longue histoire Bref, le principal moyen que ce doit 909 00:42:05,630 --> 00:42:10,570 être à la fois conceptuellement et techniquement le domaine que nous utilisons pour unique 910 00:42:10,570 --> 00:42:12,140 identifier les utilisateurs. 911 00:42:12,140 --> 00:42:16,140 >> Alors, quand nous regardons les utilisateurs, c'est en quelque sorte d'une promesse de les chercher principalement par 912 00:42:16,140 --> 00:42:17,370 cet identifiant unique. 913 00:42:17,370 --> 00:42:21,930 Et la base de données fera en sorte que si vous avoir un numéro d'utilisateur 3, vous ne pouvez pas 914 00:42:21,930 --> 00:42:25,400 insérer physiquement un autre utilisateur avec le même nombre 3. 915 00:42:25,400 --> 00:42:28,380 La base de données sera simplement refuser pour enregistrer vos modifications. 916 00:42:28,380 --> 00:42:32,310 Qui est une bonne chose, parce que vous pouvez vous protéger contre vous-même. soi 917 00:42:32,310 --> 00:42:34,270 >> Sinon, le nom d'utilisateur. 918 00:42:34,270 --> 00:42:37,670 Donc, la deuxième ligne, le rappel, est le champ Nom d'utilisateur. 919 00:42:37,670 --> 00:42:41,860 Donc, la deuxième ligne est ici le nom d'utilisateur, comme nous l'avons fait à l'extrême gauche il. 920 00:42:41,860 --> 00:42:43,940 >> Alors quoi d'autre pourrais-je vouloir préciser? 921 00:42:43,940 --> 00:42:47,840 Je n'ai pas le droit, selon SQL, de spécifier deux clés primaires. 922 00:42:47,840 --> 00:42:50,750 vous pouvez spécifier une clé commune où vous regarder les deux domaines, mais ils ne peuvent pas 923 00:42:50,750 --> 00:42:52,260 être individuellement clés primaires. 924 00:42:52,260 --> 00:42:54,750 Donc, c'est hors de question. 925 00:42:54,750 --> 00:42:56,040 Alors qui pourrais-je vouloir choisir? 926 00:42:56,040 --> 00:42:59,710 >> Eh bien, UNIQUE est similaire dans l'esprit à un clé primaire où vous spécifiez ce 927 00:42:59,710 --> 00:43:03,570 domaine doit être unique, mais il est ne va pas être une 928 00:43:03,570 --> 00:43:04,410 J'utilise tout le temps. 929 00:43:04,410 --> 00:43:08,450 Et nous n'allons pas utiliser celui-ci tout le temps pour quelle raison déjà? 930 00:43:08,450 --> 00:43:10,490 C'est plus lent potentiellement si c'est un long nom d'utilisateur. 931 00:43:10,490 --> 00:43:11,740 C'est juste une perte de temps. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, quant à lui, précise que c'est ne vais pas être unique, mais j'aimerais 933 00:43:16,140 --> 00:43:19,470 vous permet de travailler votre magie sous l' capot pour le rendre plus rapide pour moi d' 934 00:43:19,470 --> 00:43:21,420 recherche sur ce domaine. 935 00:43:21,420 --> 00:43:23,320 Donc, ce n'est probablement pas pertinente ici. 936 00:43:23,320 --> 00:43:26,500 Pour identifiant, je dirais que Unique est une bonne réponse. 937 00:43:26,500 --> 00:43:31,200 Mais supposons que nous avons fait plus d'utilisateurs intéressant que les noms d'utilisateurs seulement, 938 00:43:31,200 --> 00:43:32,430 hash et numéros d'identification. 939 00:43:32,430 --> 00:43:33,860 Et si on donnait aux gens les noms complets? 940 00:43:33,860 --> 00:43:37,700 Et si nous donnions les adresses et d'autres données à leur sujet? 941 00:43:37,700 --> 00:43:43,360 >> Eh bien, si vous spécifiez que une colonne dans une base de données est indexée, ce qui signifie que 942 00:43:43,360 --> 00:43:47,730 MySQL ou Oracle, ou quoi que base de données que vous utilisez, doit travailler sa magie 943 00:43:47,730 --> 00:43:51,300 et utiliser certains types de données de fantaisie Structure d'un arbre, ou une structure arborescente, ou une 944 00:43:51,300 --> 00:43:55,940 table de hachage, ou quelque chose de garantir que lorsque vous recherchez des données à l'aide 945 00:43:55,940 --> 00:43:58,150 sélectionner sur ce domaine particulier - 946 00:43:58,150 --> 00:44:01,310 que je montrer à tous que vit sur Oxford Street. 947 00:44:01,310 --> 00:44:02,540 Une requête de ce genre. 948 00:44:02,540 --> 00:44:06,250 Si vous avez spécifié à l'avance que vous voulez un index sur ce champ, le 949 00:44:06,250 --> 00:44:09,050 Les recherches seront beaucoup, beaucoup plus rapide. 950 00:44:09,050 --> 00:44:12,090 >> Si vous ne spécifiez pas d'index, le meilleur vous pouvez faire une recherche linéaire si 951 00:44:12,090 --> 00:44:13,030 ce n'est pas triée. 952 00:44:13,030 --> 00:44:16,220 Mais si vous spécifiez INDEX, la smart personnes qui ont fait la base de données - 953 00:44:16,220 --> 00:44:19,340 des gens comme vous qui connaissent maintenant des arbres et tente et les tables de hachage - 954 00:44:19,340 --> 00:44:23,220 va construire automatiquement un de ces données la structure en RAM pour s'assurer que 955 00:44:23,220 --> 00:44:26,050 ces recherches sont beaucoup plus rapides. 956 00:44:26,050 --> 00:44:29,660 >> FULLTEXT est quant à lui dans le même esprit, mais vous permet de faire joker 957 00:44:29,660 --> 00:44:35,480 recherches, comme me montrer à tous que vie aux rues qui commencent par la 958 00:44:35,480 --> 00:44:36,960 lettre O pour une raison quelconque. 959 00:44:36,960 --> 00:44:38,850 Vous pouvez effectuer des recherches génériques comme ça. 960 00:44:38,850 --> 00:44:45,880 Or, les choses plus convaincantes comme spectacle moi tout le monde qui a le dernier mot - 961 00:44:45,880 --> 00:44:49,400 montrez-moi tous ceux dont le nom commence par une lettre donnée. 962 00:44:49,400 --> 00:44:51,880 Vous pouvez rechercher des mots-clés de cette manière. 963 00:44:51,880 --> 00:44:52,630 Très bien. 964 00:44:52,630 --> 00:44:55,760 >> Ainsi, les possibilités de conception il ya potentiellement. 965 00:44:55,760 --> 00:44:57,740 Il ya d'autres que je serai agiter les mains au. 966 00:44:57,740 --> 00:45:00,530 Il s'avère que vous pouvez avoir différents moteurs de stockage. 967 00:45:00,530 --> 00:45:04,390 Et ce n'est plus mystérieux que nous devons certainement pour problème posé sept ans. 968 00:45:04,390 --> 00:45:06,920 Par défaut, les gars vous utilisez quelque chose qui s'appelle InnoDB. 969 00:45:06,920 --> 00:45:10,910 Vous verrez mention de ce quelque part dans L'interface de phpMyAdmin plus probable. 970 00:45:10,910 --> 00:45:14,130 Mais sachez qu'il ya autre conception des décisions qui sont du potentiel 971 00:45:14,130 --> 00:45:18,030 intérêt viennent projets finaux si vous faites quelque chose sur le web. 972 00:45:18,030 --> 00:45:19,330 >> Mais nous allons le faire. 973 00:45:19,330 --> 00:45:23,130 Allons de l'avant et mettre cela sur le écran comme un teaser pour une histoire 974 00:45:23,130 --> 00:45:26,330 vous, un colocataire, impliquant et un verre de lait. 975 00:45:26,330 --> 00:45:28,240 Prenons deux minutes ou alors casser ici. 976 00:45:28,240 --> 00:45:31,060 Et si vous pouvez rester dans les parages, Venons en arrière, regarder un peu plus à SQL, et 977 00:45:31,060 --> 00:45:35,160 puis un peu de JavaScript avec p-ensemble de huit à l'esprit. 978 00:45:35,160 --> 00:45:36,120 >> Très bien. 979 00:45:36,120 --> 00:45:40,420 Donc, nous allons vous faire réfléchir sur un cas d'angle qui peut très facilement se produire 980 00:45:40,420 --> 00:45:44,240 dans le cadre de l'utilisation d'une base de données, ou franchement, même en utilisant des choses du monde réel 981 00:45:44,240 --> 00:45:46,280 comme les guichets automatiques pour obtenir de l'argent. 982 00:45:46,280 --> 00:45:47,640 Alors, voici un réfrigérateur. 983 00:45:47,640 --> 00:45:50,040 Supposons que vous avez un trop dans votre dortoir ou votre maison. 984 00:45:50,040 --> 00:45:54,990 Et vous avez un colocataire, et les deux vous aimez vraiment le lait par exemple. 985 00:45:54,990 --> 00:45:57,210 >> Alors, vous rentrez chez vous classe un jour. 986 00:45:57,210 --> 00:45:58,490 Il ou elle n'est pas encore de retour. 987 00:45:58,490 --> 00:45:59,180 Vous ouvrez le frigo. 988 00:45:59,180 --> 00:46:00,870 Vous voulez vraiment un grand verre de lait. 989 00:46:00,870 --> 00:46:01,820 Il n'ya pas de lait. 990 00:46:01,820 --> 00:46:02,920 Alors, que faites-vous? 991 00:46:02,920 --> 00:46:03,840 Vous fermez le réfrigérateur. 992 00:46:03,840 --> 00:46:04,670 Vous prenez vos clés. 993 00:46:04,670 --> 00:46:05,930 Vous sortez de la place. 994 00:46:05,930 --> 00:46:09,240 Et vous obtenez en ligne à CVS à ceux auto choses de caisse, qui a toujours 995 00:46:09,240 --> 00:46:11,180 prendre plus de temps que réellement ayant caissiers. 996 00:46:11,180 --> 00:46:11,820 Quoi qu'il en soit. 997 00:46:11,820 --> 00:46:15,490 >> Alors, en attendant, dot dot dot, votre colocataire vient à la maison et il ou elle 998 00:46:15,490 --> 00:46:17,440 a même un penchant pour du lait. 999 00:46:17,440 --> 00:46:20,380 Alors, il ou elle ouvre le frigo, regarde à l'intérieur, et oh, zut. 1000 00:46:20,380 --> 00:46:21,160 Pas de lait. 1001 00:46:21,160 --> 00:46:24,750 Alors, il ou elle se dirige, qui arrive à aller aux autres CVS, qui n'était qu'une 1002 00:46:24,750 --> 00:46:27,900 pâté de maisons pour quelque raison, et il elle se fait la queue pour acheter du lait. 1003 00:46:27,900 --> 00:46:30,480 >> Pendant ce temps, vous rentrez chez vous, il ou elle rentre à la maison, et qu'est-ce que 1004 00:46:30,480 --> 00:46:31,980 vous avez finalement? 1005 00:46:31,980 --> 00:46:33,080 Deux fois plus de lait beaucoup. 1006 00:46:33,080 --> 00:46:34,620 Mais vous n'aimez pas vraiment lait tant que ça. 1007 00:46:34,620 --> 00:46:37,300 Alors maintenant, vous avez tellement de lait que maintenant l'un d'eux va juste aller aigre 1008 00:46:37,300 --> 00:46:37,820 finalement. 1009 00:46:37,820 --> 00:46:39,370 Donc, c'est vraiment un mauvais problème. 1010 00:46:39,370 --> 00:46:39,900 Droite? 1011 00:46:39,900 --> 00:46:41,990 >> Alors, que s'est-il passé? 1012 00:46:41,990 --> 00:46:44,810 Donc, fondamentalement, c'est un peu d'un exemple ridicule. 1013 00:46:44,810 --> 00:46:48,580 Mais sous le capot, ce que nous avons eu se passer ici est à la fois de vous vérifié 1014 00:46:48,580 --> 00:46:52,390 l'état de certaines pièces de la mémoire, le réfrigérateur. 1015 00:46:52,390 --> 00:46:54,420 Tous les deux vous vérifié l'état d'une variable. 1016 00:46:54,420 --> 00:46:57,360 Vous avez tous deux tiré une conclusion que vous avez ensuite donné suite. 1017 00:46:57,360 --> 00:47:01,420 Mais malheureusement, alors que votre colocataire était au magasin, l'état de cette 1018 00:47:01,420 --> 00:47:05,670 variables changé, il ou elle est revenue et veut maintenant changer l'état, mais 1019 00:47:05,670 --> 00:47:07,480 il a déjà été changé sur lui. 1020 00:47:07,480 --> 00:47:11,120 Et bien sûr, il ou elle n'aurait pas allé au magasin s'ils savaient 1021 00:47:11,120 --> 00:47:13,010 que vous étiez déjà en route. 1022 00:47:13,010 --> 00:47:16,430 >> Ainsi, dans le monde réel, comment pourriez-vous éviter ce problème, en supposant que vous avez 1023 00:47:16,430 --> 00:47:18,940 un réfrigérateur, vous disposez d'un colocataire, et vous avez réellement comme le lait? 1024 00:47:18,940 --> 00:47:19,760 >> AUDIENCE: Communiquer. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID Malan: Communiquer. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Mais comment pourriez-vous communiquer? 1028 00:47:22,500 --> 00:47:23,990 >> PUBLIC: Laissez une note. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID Malan: Laissez une note, non? 1030 00:47:25,480 --> 00:47:28,025 Toujours laisser une note, pour fans de la série. 1031 00:47:28,025 --> 00:47:31,580 Tout droit, laissez donc toujours une note, ou mettre vraiment comme un cadenas ou quelque chose 1032 00:47:31,580 --> 00:47:35,440 sur le réfrigérateur qui garde votre colocation d'inspecter l'état de 1033 00:47:35,440 --> 00:47:36,540 cette variable. 1034 00:47:36,540 --> 00:47:40,800 >> Maintenant, pourquoi cela pourrait-il être germane à problème réglé sept, ou aux guichets automatiques. 1035 00:47:40,800 --> 00:47:46,780 Eh bien, imaginez un monde dans un guichet automatique où vous pourriez être en mesure d'aller à un guichet automatique 1036 00:47:46,780 --> 00:47:48,920 la machine ici, et un autre ATM ici. 1037 00:47:48,920 --> 00:47:50,680 Et cela arrive assez souvent. 1038 00:47:50,680 --> 00:47:54,150 Et supposons que vous ayez deux cartes ATM, ce qui est possible à obtenir. 1039 00:47:54,150 --> 00:47:57,420 Et vous vous connectez à deux machines efficacement simultanément, nous l'espérons 1040 00:47:57,420 --> 00:47:58,660 alors que personne ne regarde. 1041 00:47:58,660 --> 00:48:01,260 Et puis vous tapez votre code PIN à peu près en même temps. 1042 00:48:01,260 --> 00:48:06,280 Et puis vous faites une requête de l'équilibre pour voir combien d'argent vous avez. 1043 00:48:06,280 --> 00:48:08,920 Et disons que vous avez 100 $ laissé dans votre compte. 1044 00:48:08,920 --> 00:48:13,310 Donc, essentiellement, en même temps, vous dire un, zéro, zéro, entrez. 1045 00:48:13,310 --> 00:48:16,000 Et vous obtenez espérons un peu d'argent. 1046 00:48:16,000 --> 00:48:18,440 >> Mais combien d'argent pouvez-vous revenir? 1047 00:48:18,440 --> 00:48:21,710 Maintenant ordinateurs à la fin de la journée, surtout si ils parlent de 1048 00:48:21,710 --> 00:48:27,360 serveurs, ne font pas nécessairement les choses dans l'ordre que l'on attend. 1049 00:48:27,360 --> 00:48:30,860 >> Supposons donc ce qui se passe, en raison de quelles que soient les problèmes là réseau de vitesse 1050 00:48:30,860 --> 00:48:34,530 sont, ou des problèmes de CPU il ya, ou quelque chose comme ça, supposons que le 1051 00:48:34,530 --> 00:48:38,530 première ATM vérifie votre équilibre et voit, oh, cette personne a 100 $. 1052 00:48:38,530 --> 00:48:41,840 Mais obtient alors distrait car peut-être une sauvegarde est en cours et il est donc 1053 00:48:41,840 --> 00:48:42,500 ralentissement. 1054 00:48:42,500 --> 00:48:45,080 Ou peut-être lors de la vérification, le réseau connexion a obtenu un peu plus lent, car 1055 00:48:45,080 --> 00:48:45,910 cela se produit juste. 1056 00:48:45,910 --> 00:48:47,100 Ils sont des dispositifs physiques. 1057 00:48:47,100 --> 00:48:49,330 Donc, en attendant, la seconde ATM est poser la même question. 1058 00:48:49,330 --> 00:48:53,030 Combien d'argent David ont? $ 100 est la réponse. 1059 00:48:53,030 --> 00:48:58,930 Mais parce que le premier ATM n'a pas encore a envoyé le message soustraire de 100 $, à la fois 1060 00:48:58,930 --> 00:49:03,000 Distributeurs automatiques de billets ont inspecté la voûte de la banque, voir il ya $ 100 là, et maintenant 1061 00:49:03,000 --> 00:49:07,160 les deux machines sont potentiellement va cracher une réponse. 1062 00:49:07,160 --> 00:49:12,240 >> Maintenant, ce qui est excellent pour vous dans un certain sens si ce que la banque fait en fin de compte 1063 00:49:12,240 --> 00:49:17,200 est de changer le montant à moins de 100 par définissant la variable égal à votre 1064 00:49:17,200 --> 00:49:21,570 compte bancaire égal à 0, par opposition à faire moins 100. 1065 00:49:21,570 --> 00:49:24,410 Or, dans le pire des cas pour la banque - 1066 00:49:24,410 --> 00:49:27,470 ou dans le meilleur pour la banque, quant à lui, ils vous donnent 200 $ et 1067 00:49:27,470 --> 00:49:31,690 votre compte bancaire montre maintenant négatif De 100 $, ce qui n'est pas vraiment 1068 00:49:31,690 --> 00:49:32,950 vous bénéficier à tous. 1069 00:49:32,950 --> 00:49:36,500 Mais le fait est que cette course condition pour obtenir deux colocataires 1070 00:49:36,500 --> 00:49:40,660 lait, ou pour deux distributeurs automatiques de billets qui tentent d'obtenir des liquidités et changer l'état d'une voûte 1071 00:49:40,660 --> 00:49:44,510 en même temps, il existe toute fois que vous avez une base de données. 1072 00:49:44,510 --> 00:49:48,290 >> Maintenant en problème posé sept, cette question se pose dans le sens que si vous achetez un 1073 00:49:48,290 --> 00:49:52,110 part des actions Facebook, puis pour exemple, vous achetez une deuxième quote-part de 1074 00:49:52,110 --> 00:49:55,160 Facebook stock, vous devez faire une décision quant au programmeur. 1075 00:49:55,160 --> 00:49:58,710 Afin de décider de la façon de mettre à jour le base de données, les chances sont que vous allez à 1076 00:49:58,710 --> 00:50:02,250 avoir une ligne pour ce stock, et ce est une façon de mettre en œuvre. 1077 00:50:02,250 --> 00:50:06,640 Et vous allez avoir une action de FB, qui est leur symbole boursier 1078 00:50:06,640 --> 00:50:10,120 pour ce nom d'utilisateur, ou cet utilisateur ID, l'identifiant unique. 1079 00:50:10,120 --> 00:50:12,340 >> Mais la même histoire peut arriver ici. 1080 00:50:12,340 --> 00:50:15,800 Si vous faites un SELECT SQL, comme vous le verrez problème posé dans sept quand vous voyez, 1081 00:50:15,800 --> 00:50:18,460 oh, David a un part des actions Facebook. 1082 00:50:18,460 --> 00:50:23,240 Permettez-moi maintenant changer cela pour deux actions parce qu'il veut acheter une 1083 00:50:23,240 --> 00:50:24,120 deuxième quote-part. 1084 00:50:24,120 --> 00:50:27,860 Mais supposons que David avait fait deux les fenêtres de navigateur ouvertes, ou supposent que 1085 00:50:27,860 --> 00:50:32,150 c'est un compte conjoint avec deux conjoints, et deux d'entre eux tentent d'effectuer 1086 00:50:32,150 --> 00:50:36,770 la même opération, là aussi, l' Il existe un potentiel pour une décision d'être 1087 00:50:36,770 --> 00:50:39,670 faite sur la base de la précédente état du monde - 1088 00:50:39,670 --> 00:50:41,290 le compte a une action - 1089 00:50:41,290 --> 00:50:45,630 et deux personnes, ou deux serveurs, l'entreprise essayer de dire incrémenter deux actions. 1090 00:50:45,630 --> 00:50:49,020 Mais dans ce cas, vous pourriez avoir chargé moi de l'argent pour les actions, mais 1091 00:50:49,020 --> 00:50:50,830 incrémenté juste qu'une fois. 1092 00:50:50,830 --> 00:50:54,730 >> Donc en bref, le problème fondamental ici, comme dans la blague de laisser un 1093 00:50:54,730 --> 00:50:58,750 noter, ou de mettre un cadenas sur elle, est si deux personnes, ou deux fils - 1094 00:50:58,750 --> 00:50:59,930 penser à zéro - 1095 00:50:59,930 --> 00:51:03,220 peut vérifier l'état d'une variable et puis essayez de modifier cette variable, 1096 00:51:03,220 --> 00:51:07,950 mais ces deux choses ne se produisent pas à l' en même temps, mais peut être interrompue 1097 00:51:07,950 --> 00:51:11,500 par d'autres choses qui se passent, les données peuvent entrer dans un état très bizarre. 1098 00:51:11,500 --> 00:51:15,450 Et vous pouvez bénéficier ou vous pouvez souffrir dans le sens de l'exemple de l'argent. 1099 00:51:15,450 --> 00:51:18,110 >> Donc problème posé sept, nous vous donnons cette seule ligne de code, qui a longtemps 1100 00:51:18,110 --> 00:51:21,000 Bref, résout ce problème dans MySQL. 1101 00:51:21,000 --> 00:51:24,950 Cette instruction très long qui ne fait pas même tenir sur une seule ligne sur le 1102 00:51:24,950 --> 00:51:30,370 écran ici garantit que votre opération est ce qu'on appelle atomique. 1103 00:51:30,370 --> 00:51:33,720 Tout se passe à la fois, ou il ne se passe pas du tout. 1104 00:51:33,720 --> 00:51:37,530 Cette très longue phrase ne peut pas se interrompu partiellement. 1105 00:51:37,530 --> 00:51:39,840 >> Et ce qu'il fait est littéralement ce qu'il dit. 1106 00:51:39,840 --> 00:51:44,200 Insérer dans un certain tableau qui suit trois domaines ces valeurs spécifiques, 1107 00:51:44,200 --> 00:51:47,280 mais sur une clé en double, ne pas faire un insert. 1108 00:51:47,280 --> 00:51:48,280 Faire une mise à jour. 1109 00:51:48,280 --> 00:51:52,450 Donc, c'est comme faire un SELECT et une INSCRIRE pour ainsi dire en même temps. 1110 00:51:52,450 --> 00:51:55,150 Et quelle est la clé qui est probablement étant appelées ici? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Il s'avère, et vous verrez ce dans problème réglé de sept spec, parce 1113 00:52:01,380 --> 00:52:06,040 nous y avons déclaré être une clé unique sur cette table, tels que 1114 00:52:06,040 --> 00:52:08,480 vous ne pouvez pas avoir plusieurs lignes pour le même utilisateur avec le 1115 00:52:08,480 --> 00:52:10,150 penny même symbole boursier - 1116 00:52:10,150 --> 00:52:13,780 Dans cet exemple, ici, est DVN.V un penny stock idiot que nous 1117 00:52:13,780 --> 00:52:14,980 reportez-vous à la spécification. 1118 00:52:14,980 --> 00:52:17,860 Parce que nous avons déclaré qu'il est unique, ce que cela signifie, c'est que si vous 1119 00:52:17,860 --> 00:52:23,580 essayez d'insérer une ligne double, vous êtes au lieu d'aller le mettre à jour sans 1120 00:52:23,580 --> 00:52:27,020 toute autre personne ayant une chance de changer l'état du monde non plus. 1121 00:52:27,020 --> 00:52:29,400 Donc en bref, ce qui assure les choses sont atomiques. 1122 00:52:29,400 --> 00:52:32,530 >> Plus généralement cependant, les bases de données comme MySQL - 1123 00:52:32,530 --> 00:52:35,460 et vous n'avez pas besoin de cette fonction pour p-ensemble de sept, mais garder à l'esprit pour 1124 00:52:35,460 --> 00:52:36,200 l'avenir - 1125 00:52:36,200 --> 00:52:38,870 soutenir ce qu'on appelle des transactions, où vous pouvez dire 1126 00:52:38,870 --> 00:52:40,990 START TRANSACTION littéralement. 1127 00:52:40,990 --> 00:52:43,270 Vous pouvez ensuite exécuter deux instructions SQL. 1128 00:52:43,270 --> 00:52:45,710 Et une instruction SQL, comme vous le verrez en p-set sept, semble un peu 1129 00:52:45,710 --> 00:52:46,750 quelque chose comme ça. 1130 00:52:46,750 --> 00:52:48,820 Mettre à jour une table appelée compte. 1131 00:52:48,820 --> 00:52:52,550 Régler la colonne de solde correspondant à ce que la colonne du solde actuellement 1132 00:52:52,550 --> 00:52:57,280 est moins 1000, où le nombre est élevé, numéro de compte, comme l'identificateur d'utilisateur, 1133 00:52:57,280 --> 00:53:00,830 est égal à 2, et ensuite mettre à jour compte Dot Dot Dot. 1134 00:53:00,830 --> 00:53:04,350 >> Donc, en termes simples, ce que ne ces deux requêtes semblent faire dans le 1135 00:53:04,350 --> 00:53:05,840 réel sens de monde de la banque? 1136 00:53:05,840 --> 00:53:07,440 >> PUBLIC: Transfert à l'épargne. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID Malan: Exactement. 1138 00:53:08,020 --> 00:53:10,470 Transfert de fonds d'un rendre compte à l'autre. 1139 00:53:10,470 --> 00:53:14,400 Et ceci est un autre exemple où vous veulent vraiment ces deux choses se produisent 1140 00:53:14,400 --> 00:53:15,570 ou ne se produira pas. 1141 00:53:15,570 --> 00:53:18,880 Vous ne voulez pas quelque chose à mettre dans l' milieu d'eux et potentiellement gâcher 1142 00:53:18,880 --> 00:53:22,220 le calcul, ou gâcher combien l'argent que vous avez, ou combien 1143 00:53:22,220 --> 00:53:23,170 argent que la banque a. 1144 00:53:23,170 --> 00:53:26,890 Donc ce qui est vraiment agréable sur les transactions MySQL est que, et 1145 00:53:26,890 --> 00:53:30,160 bases de données, plus généralement, est qu'ils et des gens intelligents qui ont mis en œuvre 1146 00:53:30,160 --> 00:53:33,670 ces caractéristiques à comprendre comment faire vous que ces deux choses se produisent 1147 00:53:33,670 --> 00:53:35,120 ou pas du tout. 1148 00:53:35,120 --> 00:53:38,580 >> Et si vous êtes vraiment aspirer à faire un site web qui est utilisé par les gens sur 1149 00:53:38,580 --> 00:53:41,490 campus, les gens dans le monde réel, en faisant quelque chose dans le sens de démarrage, 1150 00:53:41,490 --> 00:53:43,300 ce sont les types de décisions de conception qui 1151 00:53:43,300 --> 00:53:45,020 devenir de plus si important. 1152 00:53:45,020 --> 00:53:48,240 Sinon, vous commencez à perdre des données, perdre les utilisateurs, ou dans le pire des cas en tant que 1153 00:53:48,240 --> 00:53:51,800 nous avons vu ici, potentiellement perdre de l'argent. 1154 00:53:51,800 --> 00:53:56,180 Encore une fois, plus que dans problème posé sept, ainsi que peut-être pour certains d' 1155 00:53:56,180 --> 00:53:57,530 vous dans des projets définitifs. 1156 00:53:57,530 --> 00:54:01,870 >> Donc, nous allons changer cette image que nous avions il ya un moment juste une façon de plus. 1157 00:54:01,870 --> 00:54:04,070 Permettez-moi donc effectivement voir si je peux - 1158 00:54:04,070 --> 00:54:06,030 nope, qui a disparu. 1159 00:54:06,030 --> 00:54:06,690 Il est là. 1160 00:54:06,690 --> 00:54:09,020 >> C'est donc là que nous avons quitté la dernière fois. 1161 00:54:09,020 --> 00:54:12,390 Et il s'avère que nous allons lancer une chose de plus dans le mélange ici - 1162 00:54:12,390 --> 00:54:14,510 un langage appelé JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Donc JavaScript correspond effectivement dans cette pièce - 1164 00:54:18,060 --> 00:54:22,086 et je n'ai pas très bien laisse assez de place, si ce n'est pas maintenant à l'échelle. 1165 00:54:22,086 --> 00:54:23,900 OK, c'est vraiment pathétique. 1166 00:54:23,900 --> 00:54:27,075 OK, donc c'est JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Très bien. 1168 00:54:27,340 --> 00:54:28,760 Je suis vraiment faire un mauvais service. 1169 00:54:28,760 --> 00:54:29,390 Très bien. 1170 00:54:29,390 --> 00:54:34,790 >> Donc, JavaScript est un autre programmation langue, et notre dernière, Si cela aide 1171 00:54:34,790 --> 00:54:37,770 rassurer qu'il n'y a pas beaucoup plus des bouches d'incendie ici. 1172 00:54:37,770 --> 00:54:41,100 Donc JavaScript est également une interprétation langue, ce qui signifie que vous n'avez pas 1173 00:54:41,100 --> 00:54:42,670 compiler dans zéros et de uns. 1174 00:54:42,670 --> 00:54:43,690 Vous venez de l'exécuter. 1175 00:54:43,690 --> 00:54:47,680 Mais ce qui est fondamentalement différent de JavaScript est généralement que vous 1176 00:54:47,680 --> 00:54:49,815 ne pas l'exécuter sur votre serveur web. 1177 00:54:49,815 --> 00:54:52,570 Il n'obtient pas exécuté dans le appareil en soi. 1178 00:54:52,570 --> 00:54:57,490 Au contraire, il est téléchargé par un utilisateur via HTTP dans leur navigateur - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, quelle que soit - 1180 00:55:00,260 --> 00:55:03,860 et c'est le navigateur qui exécute cette notamment langage de programmation. 1181 00:55:03,860 --> 00:55:08,000 >> Donc, pour être clair, PHP a été jusqu'ici exécuté soit à la ligne de commande dans 1182 00:55:08,000 --> 00:55:11,290 notre fenêtre en noir et blanc, sur un serveur comme l'appareil, un ordinateur 1183 00:55:11,290 --> 00:55:14,490 certainement l'appareil, ou il a été exécuté par un serveur Web 1184 00:55:14,490 --> 00:55:15,860 fonctionnant sur un ordinateur. 1185 00:55:15,860 --> 00:55:20,490 Mais le thème ici est que PHP jusqu'ici a été exécuté du côté serveur, de sorte que 1186 00:55:20,490 --> 00:55:24,820 l'utilisateur et le navigateur de l'utilisateur ne voit jamais une ligne de code PHP. 1187 00:55:24,820 --> 00:55:28,530 >> En fait, si jamais vous ouvrez un navigateur pour votre site Web ou d'une autre et vous 1188 00:55:28,530 --> 00:55:32,400 réellement voir le code PHP dans votre fenêtre, quelqu'un a foiré. 1189 00:55:32,400 --> 00:55:34,950 Parce qu'il n'est pas censé être envoyé directement à un navigateur. 1190 00:55:34,950 --> 00:55:38,150 Il est censé être exécuté et transformé en quelque chose comme HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Mais JavaScript est essentiellement le contraire. 1192 00:55:40,120 --> 00:55:44,350 Il est destiné à être exécuté généralement à l'intérieur de la fenêtre du navigateur d'un utilisateur. 1193 00:55:44,350 --> 00:55:46,840 Et quels types de sites Web utiliser JavaScript puis ces jours? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Comme littéralement chaque site Web populaire. 1196 00:55:52,180 --> 00:55:55,430 Chaque site que vous les gars probablement utiliser quotidiennement utiliser JavaScript pour la 1197 00:55:55,430 --> 00:55:57,330 le plus simple et le même caractéristiques les plus sexy. 1198 00:55:57,330 --> 00:55:59,800 >> Donc, quelque chose comme Facebook Discuter si vous l'utiliser. 1199 00:55:59,800 --> 00:56:01,040 Comment cela fonctionne? 1200 00:56:01,040 --> 00:56:05,090 Eh bien ce jour, toutes les choses que nous avons fait avec HTML et PHP suppose que 1201 00:56:05,090 --> 00:56:08,750 vous tirez une URL, et vous appuyez sur Entrée, et vous voyez une partie du contenu HTML. 1202 00:56:08,750 --> 00:56:11,970 Et vous cliquez sur le lien, qui modifie la URL, modifie la page, et recharge 1203 00:56:11,970 --> 00:56:12,740 un nouveau contenu. 1204 00:56:12,740 --> 00:56:16,340 Cliquez sur une autre URL ou soumettre un formulaire, vous se emmené vers une autre page et 1205 00:56:16,340 --> 00:56:17,420 vous voyez un nouveau contenu. 1206 00:56:17,420 --> 00:56:22,710 >> Mais en utilisant quelque chose comme Facebook Chat, ou Gchat ou Google Maps, rarement 1207 00:56:22,710 --> 00:56:27,350 ne toute la page rafraîchir tels que vous voyez un écran blanc et 1208 00:56:27,350 --> 00:56:28,470 puis de nouveau contenu. 1209 00:56:28,470 --> 00:56:32,610 Au contraire, les pages Web d'aujourd'hui sont dynamiquement se mis à jour à nouveau et 1210 00:56:32,610 --> 00:56:35,570 encore et encore toutes sortes de derrière les coulisses. 1211 00:56:35,570 --> 00:56:38,560 Et il s'avère que lorsque vous allez à quelque chose comme Facebook, ou Gchat, 1212 00:56:38,560 --> 00:56:43,050 ou Gmail, et les mises à jour de page automatiquement sans recharger la 1213 00:56:43,050 --> 00:56:47,630 tout l'écran, ce qui s'est passé, c'est que votre navigateur a fait sorte de secret 1214 00:56:47,630 --> 00:56:49,410 requêtes HTTP supplémentaires - 1215 00:56:49,410 --> 00:56:52,740 pas pour les pages Web en entier, mais seulement pour de petits morceaux de données, comme le 1216 00:56:52,740 --> 00:56:55,740 message instantané que votre ami vient de vous, ou la mise à jour d'état envoyé que 1217 00:56:55,740 --> 00:56:58,210 quelqu'un vient de vous, ou le tweet envoyé que quelqu'un vient d'envoyer. 1218 00:56:58,210 --> 00:57:02,120 C'est juste faire de petites demandes pour des données, et en utilisant ensuite le JavaScript ce 1219 00:57:02,120 --> 00:57:06,370 langage de programmation, pour modifier ce que la page Web ressemble sans l' 1220 00:57:06,370 --> 00:57:09,860 serveur aidant, sans que le serveur générer que HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Donc en bref, JavaScript peut être utilisé, non seulement chercher de nouvelles données de 1222 00:57:13,820 --> 00:57:16,750 le serveur sans recharger l'ensemble page ou soumettre un formulaire. 1223 00:57:16,750 --> 00:57:20,060 Il peut également être utilisé pour changer DOM soi-disant - 1224 00:57:20,060 --> 00:57:21,520 modèle objet de document - 1225 00:57:21,520 --> 00:57:24,620 qui est juste la manière de fantaisie pour dire l'arbre de HTML 1226 00:57:24,620 --> 00:57:26,220 que nous avons vu la dernière fois. 1227 00:57:26,220 --> 00:57:31,640 >> Donc, pour rassurer, Javascript syntaxiquement si semblable à C ainsi. 1228 00:57:31,640 --> 00:57:32,820 Il n'y a pas la fonction principale. 1229 00:57:32,820 --> 00:57:35,430 Vous venez de commencer à écrire le code et elle sera exécutée, ou 1230 00:57:35,430 --> 00:57:36,900 interprété plus correctement. 1231 00:57:36,900 --> 00:57:38,660 Conditions ressemblera à ceci. 1232 00:57:38,660 --> 00:57:41,230 Pas différent de C ou PHP pour cette question. 1233 00:57:41,230 --> 00:57:43,890 Expressions booléennes ou-ed ensemble ressemblera à ceci. 1234 00:57:43,890 --> 00:57:45,590 Anded ensemble ressembler à ceci. 1235 00:57:45,590 --> 00:57:47,750 >> Commutateurs ressemblera à ceci. 1236 00:57:47,750 --> 00:57:49,440 Pour les boucles seront ressembler à ceci. 1237 00:57:49,440 --> 00:57:51,060 Alors que les boucles seront ressembler à ceci. 1238 00:57:51,060 --> 00:57:53,316 Faire des boucles while ressemblera à ceci. 1239 00:57:53,316 --> 00:57:54,780 >> C'est nouveau. 1240 00:57:54,780 --> 00:57:58,753 Donc JavaScript a pas un foreach construire en soi, mais cette construction 1241 00:57:58,753 --> 00:58:03,870 pour la variable i dans le tableau, et je dans ce cas devient une valeur d'index. 1242 00:58:03,870 --> 00:58:06,880 Il est donc un peu différente de celle foreach, si de nouvelles versions de 1243 00:58:06,880 --> 00:58:10,280 JavaScript sortent tout le temps, de sorte que même ces caractéristiques linguistiques 1244 00:58:10,280 --> 00:58:10,880 sont en constante évolution. 1245 00:58:10,880 --> 00:58:16,920 >> Et en passant, ces JavaScript jours peut également être utilisé sur un serveur comme 1246 00:58:16,920 --> 00:58:19,920 PHP en utilisant un cadre appelé Node.js. 1247 00:58:19,920 --> 00:58:24,670 Un des CS50 de FO, Kevin, a entraîné une séminaire sur Node.js qui est disponible à 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Donc, si vous êtes curieux, sachez que vous peut l'utiliser sur le côté serveur 1250 00:58:28,830 --> 00:58:33,870 bien, mais c'est une tendance assez récente, mais une puissante à cela. 1251 00:58:33,870 --> 00:58:35,270 >> C'est un peu différent. 1252 00:58:35,270 --> 00:58:37,910 C'est un tableau en JavaScript. 1253 00:58:37,910 --> 00:58:40,115 Et ce qui frappe aussi différents par rapport à C ou PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Il ya quelques histoires rapides nous pouvons dire ici. 1256 00:58:47,420 --> 00:58:49,367 Ce qui manque par rapport à PHP? 1257 00:58:49,367 --> 00:58:51,652 >> PUBLIC: [inaudible]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID Malan: Oui? 1259 00:58:52,110 --> 00:58:53,322 Désolé, dire encore? 1260 00:58:53,322 --> 00:58:54,740 >> PUBLIC: Ne pas déclarer le type de variable. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID Malan: Nous ne sommes pas déclarer le type de variable. 1262 00:58:56,390 --> 00:58:59,630 Donc en fait tout à fait comme PHP, nous ne sommes pas spécifiant les types de cette variable. 1263 00:58:59,630 --> 00:59:02,670 Au contraire, nous sommes plus générique var dire pour la variable. 1264 00:59:02,670 --> 00:59:06,690 Nous n'avons pas de nuisance de PHP de l' signe du dollar, qui, tout fastidieux de 1265 00:59:06,690 --> 00:59:09,160 le type, ne fait plus clair que quelque chose est une variable. 1266 00:59:09,160 --> 00:59:11,830 Alors qu'ici, nous sommes en quelque sorte de retour à L'approche de C simplement en l'appelant une 1267 00:59:11,830 --> 00:59:14,500 variables par le nom que nous voulons de lui donner, comme les numéros. 1268 00:59:14,500 --> 00:59:17,170 Et aussi comme PHP, nous avons crochets pour la 1269 00:59:17,170 --> 00:59:19,170 valeurs à l'intérieur de ce tableau. 1270 00:59:19,170 --> 00:59:22,490 >> Donc variables JavaScript aussi pourrait ressembler à ceci. 1271 00:59:22,490 --> 00:59:26,900 Notez ici c'est une chaîne appelée s, mais avons-nous pas de même précisé 1272 00:59:26,900 --> 00:59:28,750 que c'est une chaîne. 1273 00:59:28,750 --> 00:59:33,160 Voici bien une fonction qui n'est pas exister exactement de la même manière en PHP, 1274 00:59:33,160 --> 00:59:34,460 mais un peu similaire. 1275 00:59:34,460 --> 00:59:36,530 Il s'agit d'un objet en JavaScript. 1276 00:59:36,530 --> 00:59:42,110 Et les objets sont en quelque sorte de l'armée suisse Couteau d'une structure de données en ce qu 'on 1277 00:59:42,110 --> 00:59:43,900 peuvent les utiliser pour un certain nombre de choses. 1278 00:59:43,900 --> 00:59:46,860 >> Voici, par exemple, nous déclarant une variable appelée citation. 1279 00:59:46,860 --> 00:59:49,110 Le type de cette variable est un objet. 1280 00:59:49,110 --> 00:59:53,550 Vous pouvez penser à cela comme une structure C qui a les clés et les valeurs. 1281 00:59:53,550 --> 00:59:55,250 Symbole est une clé. 1282 00:59:55,250 --> 00:59:57,350 FB est une valeur apparemment un symbole boursier. 1283 00:59:57,350 --> 00:59:57,930 Virgule. 1284 00:59:57,930 --> 01:00:02,180 Le prix est une autre clé, et sa valeur est apparemment une virgule flottante, ou un 1285 01:00:02,180 --> 01:00:06,510 nombre plus généralement dans JavaScript de $ 49,26. 1286 01:00:06,510 --> 01:00:09,030 >> Alors PHP n'a pas - 1287 01:00:09,030 --> 01:00:12,980 nous n'avons pas vu dans les objets PHP assez comme ça, mais nous n'avons analogique, 1288 01:00:12,980 --> 01:00:14,093 qui est ce? 1289 01:00:14,093 --> 01:00:14,980 >> PUBLIC: [inaudible]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID Malan: tableaux associatifs. 1291 01:00:16,110 --> 01:00:19,990 Ainsi, alors que PHP a tableaux associatifs dont la syntaxe est toujours légèrement pour 1292 01:00:19,990 --> 01:00:20,370 différent - 1293 01:00:20,370 --> 01:00:21,780 nous avons vu les crochets. 1294 01:00:21,780 --> 01:00:23,860 Nous avons vu les flèches étranges symboles. 1295 01:00:23,860 --> 01:00:27,330 JavaScript a des objets, mais ce n'est surtout une différence sémantique et un 1296 01:00:27,330 --> 01:00:29,260 synonyme différente pour le moment. 1297 01:00:29,260 --> 01:00:35,060 Toutefois, en aparté, PHP a également des objets de manière à Java et d'autres 1298 01:00:35,060 --> 01:00:37,810 langues ont des objets dans la programmation orientée objet. 1299 01:00:37,810 --> 01:00:40,440 Mais nous les utilisons seulement pour les types de données pour le moment. 1300 01:00:40,440 --> 01:00:42,170 Objets et les tableaux associatifs. 1301 01:00:42,170 --> 01:00:44,140 >> Celui-ci pourrait faire un peu plus clair. 1302 01:00:44,140 --> 01:00:45,890 Voici pourquoi un objet est utile. 1303 01:00:45,890 --> 01:00:48,760 Lorsque vous voulez déclarer un étudiant, comme Zamyla, nous pouvons effectivement 1304 01:00:48,760 --> 01:00:52,630 encapsuler pour ainsi dire à l'intérieur de ce objet en utilisant des accolades comme 1305 01:00:52,630 --> 01:00:55,060 avant tout un trousseau de clés et valeurs ici. 1306 01:00:55,060 --> 01:00:59,150 Nous avons une identité, une maison, et un nom pour Zamyla, suivi d'un point-virgule comme 1307 01:00:59,150 --> 01:01:00,690 d'habitude à la fin. 1308 01:01:00,690 --> 01:01:04,840 >> Ici aussi, ce qui est légèrement différente, mais aussi très puissant 1309 01:01:04,840 --> 01:01:05,690 ces jours-ci. 1310 01:01:05,690 --> 01:01:08,780 Voici un tableau, et je sais que parce il ya un crochet jusqu'à 1311 01:01:08,780 --> 01:01:11,090 haut et un crochet en bas. 1312 01:01:11,090 --> 01:01:16,050 Et c'est un tableau de données que tapez apparemment en JavaScript? 1313 01:01:16,050 --> 01:01:21,260 C'est un tableau de il semble comme trois objets. 1314 01:01:21,260 --> 01:01:24,580 Et je sais que c'est un objet que en raison des accolades. 1315 01:01:24,580 --> 01:01:28,760 Et remarquez qu'il ya ouvert accolade, des trucs, accolade près, virgule, 1316 01:01:28,760 --> 01:01:31,180 puis un peu plus, une virgule, et puis un peu plus. 1317 01:01:31,180 --> 01:01:33,800 Voilà donc trois arguments séparés par deux virgules. 1318 01:01:33,800 --> 01:01:36,810 >> Donc, c'est un tableau de trois les objets. 1319 01:01:36,810 --> 01:01:39,940 Et chacun de ces objets semble un étudiant ou membre du personnel de certains 1320 01:01:39,940 --> 01:01:42,370 sorte, chacun avec une pièce d'identité, maison, et le nom. 1321 01:01:42,370 --> 01:01:45,060 Mais je l'ai appelé ce quelque chose appelé JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 Et il s'agit d'un format de données qui fait est donc très populaire et en 1324 01:01:52,060 --> 01:01:55,100 vogue ces jours-ci que si vous écrivez un application qui utilise le Facebook 1325 01:01:55,100 --> 01:01:59,150 API, l'API de Twitter, vraiment presque une API là-bas ces jours, 1326 01:01:59,150 --> 01:02:02,820 y compris certains des propres de CS50, le données que vous obtenez en retour n'est pas dans 1327 01:02:02,820 --> 01:02:04,720 ancien format CSV scolaire. 1328 01:02:04,720 --> 01:02:06,780 >> Parce que le rappel que CSV est super simple. 1329 01:02:06,780 --> 01:02:10,230 Il est à seulement colonnes séparées par des virgules. 1330 01:02:10,230 --> 01:02:13,190 Données JSON vous donne plus de métadonnées. 1331 01:02:13,190 --> 01:02:17,800 Il associe une clé à chaque valeur ainsi ils ne doivent pas simplement supposer que 1332 01:02:17,800 --> 01:02:22,460 la colonne de zéro est une valeur, colonne on est une autre, la deuxième colonne est une autre. 1333 01:02:22,460 --> 01:02:26,790 Tout dans un objet JSON ici est une sorte des auto-description, parce que chaque 1334 01:02:26,790 --> 01:02:30,940 l'un des noms dans ce fichier a littéralement nom en face de lui comme un 1335 01:02:30,940 --> 01:02:32,510 chaîne entre guillemets. 1336 01:02:32,510 --> 01:02:34,950 >> Donc, nous allons jeter un oeil à un quelques exemples ici. 1337 01:02:34,950 --> 01:02:36,800 Permettez-moi d'entrer dans l'appareil. 1338 01:02:36,800 --> 01:02:41,000 Et laissez-moi aller dans notre vhost répertoire en public. 1339 01:02:41,000 --> 01:02:45,590 Et laissez-moi aller dans la JavaScript répertoire. 1340 01:02:45,590 --> 01:02:49,610 Et nous allons aller de l'avant et d'ouvrir dom-0.html, où DOM signifie simplement 1341 01:02:49,610 --> 01:02:51,010 modèle d'objet de document. 1342 01:02:51,010 --> 01:02:53,490 C'est la substance de l'arbre à laquelle J'ai parlé plus tôt. 1343 01:02:53,490 --> 01:02:54,950 >> Et permettez-moi de proposer ce qui suit. 1344 01:02:54,950 --> 01:02:57,720 Voici une page Web dont l' corps est assez simple. 1345 01:02:57,720 --> 01:03:00,170 Donc, ici en bas, remarquerez J'ai un formulaire. 1346 01:03:00,170 --> 01:03:01,500 Nous avons vu ceux d'avant. 1347 01:03:01,500 --> 01:03:07,600 Il comporte deux entrées, dont l'une a un Identification de nom, dont l'un a un type de 1348 01:03:07,600 --> 01:03:09,830 soumettre, et le premier son type est texte. 1349 01:03:09,830 --> 01:03:11,900 Donc, cela semble en fait assez simple. 1350 01:03:11,900 --> 01:03:13,090 >> Allons ici. 1351 01:03:13,090 --> 01:03:15,390 Revenons à cette page ici. 1352 01:03:15,390 --> 01:03:21,030 Allons dans localhost, et aller dans notre répertoire JavaScript, et aller à 1353 01:03:21,030 --> 01:03:24,640 dom-0, et nous avons ici ce formulaire. 1354 01:03:24,640 --> 01:03:26,550 C'est donc apparemment tous cette page fait. 1355 01:03:26,550 --> 01:03:28,740 Il dispose d'un champ de nom avec un bouton Envoyer. 1356 01:03:28,740 --> 01:03:30,340 Mais je ne vais pas utiliser PHP ici. 1357 01:03:30,340 --> 01:03:34,310 Je vais faire tout côté client pour ainsi dire en JavaScript comme suit. 1358 01:03:34,310 --> 01:03:39,100 >> Remarquez que je n'ai en effet donné le nom champ de cette entrée un cadre unique 1359 01:03:39,100 --> 01:03:42,350 identifiant, qui sera effectivement me faire gagner du temps dans un moment. 1360 01:03:42,350 --> 01:03:45,480 Et notez que je n'ai présenté une autre balise dans la tête de ma page web, l' 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> C'est donc dans ce sens que JavaScript est un langage de programmation côté client. 1363 01:03:50,120 --> 01:03:55,020 Dans ce cas, comme CSS, j'ai mis il directement à l'intérieur de mon HTML. 1364 01:03:55,020 --> 01:03:58,810 Mais remarquez j'ai déclaré une fonction qui ressemble un peu à PHP 1365 01:03:58,810 --> 01:04:01,530 syntaxiquement, mais il s'agit en fait JavaScript, car encore une fois, c'est 1366 01:04:01,530 --> 01:04:03,920 côté client dans le navigateur. 1367 01:04:03,920 --> 01:04:07,590 Et faire une supposition que cela va faire, même si une partie de la syntaxe 1368 01:04:07,590 --> 01:04:09,338 ici est nouveau. 1369 01:04:09,338 --> 01:04:11,760 >> PUBLIC: Dites bonjour à quiconque. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID Malan: Il va dire bonjour à quiconque visite cette page. 1371 01:04:14,020 --> 01:04:15,120 Alors, comment? 1372 01:04:15,120 --> 01:04:18,070 >> Donc remarqué, il s'avère en JavaScript il ya une fonction () alerte. 1373 01:04:18,070 --> 01:04:22,840 C'est une fonction très sorte de triste vraiment tendance juste pour embêter les utilisateurs. 1374 01:04:22,840 --> 01:04:25,440 Ce n'est pas celui que vous devriez vraiment utiliser généralement, mais c'est un rapide et sale 1375 01:04:25,440 --> 01:04:27,710 manière de sorte d'impression quelque chose d'une interface utilisateur graphique 1376 01:04:27,710 --> 01:04:29,180 l'interface, comme un navigateur. 1377 01:04:29,180 --> 01:04:31,400 Remarquez ici que j'ai un chaîne à guillemets simples. 1378 01:04:31,400 --> 01:04:36,010 Il s'avère que, contrairement à C, JavaScript peut effectivement vous faire usage unique 1379 01:04:36,010 --> 01:04:38,730 cite, et franchement c'est juste genre de la convention stylistique entre 1380 01:04:38,730 --> 01:04:41,180 JavaScript programmeurs à utiliser des guillemets simples. 1381 01:04:41,180 --> 01:04:43,750 PHP, elles ont en fait légèrement sens différent. 1382 01:04:43,750 --> 01:04:45,810 Mais pour l'instant, il suffit de savoir que C'est la seule raison. 1383 01:04:45,810 --> 01:04:49,270 La convention en JavaScript est souvent utiliser des guillemets simples, mais nous pourrions utiliser 1384 01:04:49,270 --> 01:04:50,950 guillemets dans les deux endroits. 1385 01:04:50,950 --> 01:04:52,610 >> Donc ce qui est intéressant. 1386 01:04:52,610 --> 01:04:56,430 Rappelons dernière fois que nous avons eu cette image sur l'écran qui a attiré un arbre 1387 01:04:56,430 --> 01:04:59,720 où vous aviez le nœud HTML, et la la tête de noeud, et le noeud de corps, 1388 01:04:59,720 --> 01:05:00,800 et puis un peu de texte. 1389 01:05:00,800 --> 01:05:04,700 Mais il y avait un noeud spécial à la très haut que j'ai appelé le document. 1390 01:05:04,700 --> 01:05:08,260 Eh bien, il s'avère en JavaScript, tout fois que vous écrivez un programme en JavaScript 1391 01:05:08,260 --> 01:05:11,040 dans un navigateur, vous avez accès à une variable globale spéciale. 1392 01:05:11,040 --> 01:05:14,130 Dans le même esprit pour les superglobals de PHP, celui-ci est appelé à 1393 01:05:14,130 --> 01:05:16,050 tous les documents minuscules. 1394 01:05:16,050 --> 01:05:21,480 >> C'est comme une structure, mais cette structure a également des fonctions à l'intérieur de celui-ci. 1395 01:05:21,480 --> 01:05:23,790 Ainsi, une structure C vient typiquement des données. 1396 01:05:23,790 --> 01:05:29,060 Mais un objet JavaScript que ce est techniquement aussi a des fonctions, 1397 01:05:29,060 --> 01:05:31,830 autrement connu comme méthodes, à l'intérieur de celui-ci. 1398 01:05:31,830 --> 01:05:35,750 Et vous pouvez appeler une fonction à l'intérieur de cet objet littéralement faire son 1399 01:05:35,750 --> 01:05:39,610 nom, point, puis le nom de la fonction, ou encore la méthode. 1400 01:05:39,610 --> 01:05:41,160 C'est juste un synonyme, vraiment. 1401 01:05:41,160 --> 01:05:42,450 >> Et qu'est-ce que cette fonction fait? 1402 01:05:42,450 --> 01:05:43,840 Vous pouvez sorte de deviner à partir de son nom. 1403 01:05:43,840 --> 01:05:45,590 Obtenez élément par ID. 1404 01:05:45,590 --> 01:05:50,040 Donc, cela va chercher la page Web, chercher cet arbre, à la recherche de 1405 01:05:50,040 --> 01:05:55,210 tout ce noeud, élément Alias, a une ID unique de devis nom unquote. 1406 01:05:55,210 --> 01:05:56,560 Et puis ce que je vais faire? 1407 01:05:56,560 --> 01:06:00,350 Je vais obtenir la valeur à l'intérieur de ce nœud dans l'arbre, et je vais 1408 01:06:00,350 --> 01:06:02,580 à-dire en quelque sorte bonjour à ce nom. 1409 01:06:02,580 --> 01:06:05,360 >> Alors, prenez une supposition, même si nous n'avons pas encore vu cela, qu'est-ce que le signe plus 1410 01:06:05,360 --> 01:06:07,396 symboles signifient ici et là sans doute? 1411 01:06:07,396 --> 01:06:08,230 >> AUDIENCE: Concatenate. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID MALAN: Concatenate. 1413 01:06:09,220 --> 01:06:11,290 Droit, et ce ne sont que sorte de décisions de conception 1414 01:06:11,290 --> 01:06:12,280 personnes ont fait il ya des années. 1415 01:06:12,280 --> 01:06:15,190 En PHP, vous concaténer choses avec des points. 1416 01:06:15,190 --> 01:06:18,800 En C, vous sautez à travers plusieurs cerceaux et appeler des fonctions comme StrCopy () ou 1417 01:06:18,800 --> 01:06:20,600 strcat () ou d'autres fonctions. 1418 01:06:20,600 --> 01:06:22,060 Mais en JavaScript, vous utilisez des atouts. 1419 01:06:22,060 --> 01:06:24,770 Donc, c'est juste concaténer trois cordes - 1420 01:06:24,770 --> 01:06:27,850 bonjour, un nom, puis un point d'exclamation. 1421 01:06:27,850 --> 01:06:30,390 >> Alors, quand et pourquoi cette fonction appelle cependant? 1422 01:06:30,390 --> 01:06:33,150 Eh bien, prenez une estimation de la HTML en bas. 1423 01:06:33,150 --> 01:06:35,810 Pourquoi est-il saluer () a appelé, ou quand? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Apparemment, du mieux que je peux dire, sur soumettre, lorsque ce formulaire est soumis, 1426 01:06:44,030 --> 01:06:47,200 Je vais faire tout ce qui est à l'intérieur de ces citations. 1427 01:06:47,200 --> 01:06:50,900 Et précisément, je vais appeler saluer () et puis retourner faux. 1428 01:06:50,900 --> 01:06:53,090 >> Eh bien, voyons ce que le net effet est ici en premier. 1429 01:06:53,090 --> 01:06:58,290 Alors laissez-moi aller de l'avant et tape dans, disons, Loren, Soumettre. 1430 01:06:58,290 --> 01:06:59,440 Bonjour Loren. 1431 01:06:59,440 --> 01:07:02,990 Voyons voir si c'était peut-être juste une mise en œuvre de la chance. 1432 01:07:02,990 --> 01:07:03,200 Nan. 1433 01:07:03,200 --> 01:07:05,990 Donc, c'est taper quoi que nomme en fait je n'y mets. 1434 01:07:05,990 --> 01:07:07,970 >> Mais remarquez ce qui ne change pas. 1435 01:07:07,970 --> 01:07:10,360 L'URL est encore dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 Il n'y a pas register.php. 1437 01:07:11,820 --> 01:07:13,110 Il n'ya pas de second fichier. 1438 01:07:13,110 --> 01:07:14,930 Il n'y a pas d'attribut action. 1439 01:07:14,930 --> 01:07:19,720 Alors, quelle est cette return false faisant sans doute? 1440 01:07:19,720 --> 01:07:23,660 Pourquoi suis-je appelant saluer (), puis retournant false probablement? 1441 01:07:23,660 --> 01:07:26,420 Qu'est-ce qui se passe normalement lorsque vous cliquez sur Envoyer un formulaire que même nous avons 1442 01:07:26,420 --> 01:07:27,854 vu la semaine dernière? 1443 01:07:27,854 --> 01:07:29,900 >> AUDIENCE: [inaudible]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID MALAN: Il va quelque part, non? 1445 01:07:30,860 --> 01:07:32,720 Il va vers une URL de destination. 1446 01:07:32,720 --> 01:07:34,120 Mais je ne veux pas que cela se produise ici. 1447 01:07:34,120 --> 01:07:37,620 Je veux que ma page Web pour être complètement dynamique comme Gmail, où une fois que vous êtes 1448 01:07:37,620 --> 01:07:38,650 là-bas, vous y restez. 1449 01:07:38,650 --> 01:07:42,900 L'URL ne change pas d'une manière qui indique la page entière est rechargement. 1450 01:07:42,900 --> 01:07:46,680 Au contraire, je veux juste changer quelque chose comme l'impression de quelque chose 1451 01:07:46,680 --> 01:07:48,320 ici à l'écran. 1452 01:07:48,320 --> 01:07:49,630 >> Eh bien, permettez-moi de nettoyer ce un petit peu. 1453 01:07:49,630 --> 01:07:55,370 Permettez-moi de m'ouvrir pas dom-0, mais permettez-moi de m'ouvrir dom-2. 1454 01:07:55,370 --> 01:07:57,350 Juste pour que vous avez vu quelque syntaxe ici. 1455 01:07:57,350 --> 01:08:02,080 >> Il s'avère que ce que nous venons DID est l'utilisation de JavaScript brut. 1456 01:08:02,080 --> 01:08:04,420 Donc, c'est vraiment la langue JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Certains d'entre vous connaissent peut-être une bibliothèque appelée jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Alors jQuery n'est pas la même chose comme JavaScript. 1459 01:08:09,980 --> 01:08:14,110 C'est juste une bibliothèque qui a vraiment intelligent Guy a écrit et popularisé par exemple 1460 01:08:14,110 --> 01:08:18,100 que presque tout le monde dans le monde aujourd'hui utilise jQuery pour l'utilisation de JavaScript. 1461 01:08:18,100 --> 01:08:20,890 Et à première vue, honnêtement, il regarde un peu plus cryptique. 1462 01:08:20,890 --> 01:08:24,990 Mais vous verrez, surtout si vous allez là pour votre projet final avec le web 1463 01:08:24,990 --> 01:08:29,029 développement, vous verrez que cette nettoie les choses et vous fait gagner assez 1464 01:08:29,029 --> 01:08:30,229 quelques lignes de code. 1465 01:08:30,229 --> 01:08:33,189 >> Donc, nous allons juste jeter un regard sur la façon dont Ce formulaire fonctionne. 1466 01:08:33,189 --> 01:08:35,664 Avis qu'ai-je supprimer apparemment de mon HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Il n'y a pas de présenter gestionnaire pour ainsi dire. 1469 01:08:40,630 --> 01:08:41,470 Il ya aucun attribut. 1470 01:08:41,470 --> 01:08:43,359 Parce que vous savez, ce Je n'ai pas vraiment aimé? 1471 01:08:43,359 --> 01:08:45,640 Je me sentais comme si nous tombions dans les vieilles habitudes là-bas. 1472 01:08:45,640 --> 01:08:49,340 Tout comme il commençait à se sentir négligée se mêler à la fois avec CSS 1473 01:08:49,340 --> 01:08:52,149 HTML, parce que vous êtes un peu jeter différentes langues partout dans le 1474 01:08:52,149 --> 01:08:56,180 place, de même at-il commencé à se sentir comme une mauvaise route pour aller vers le bas où 1475 01:08:56,180 --> 01:09:01,069 Je suis en train de code JavaScript à l'intérieur de mon HTML plutôt que l'affacturage it out. 1476 01:09:01,069 --> 01:09:02,279 >> Donc, c'est la leçon à retenir ici. 1477 01:09:02,279 --> 01:09:05,080 Dans dom-2.html, je suis affacturage it out. 1478 01:09:05,080 --> 01:09:07,399 Et je fais les choses un peu différemment. 1479 01:09:07,399 --> 01:09:09,630 Pour l'instant, je vais saluer mes mains à ce que cela fait vraiment 1480 01:09:09,630 --> 01:09:10,590 sous la hotte. 1481 01:09:10,590 --> 01:09:14,210 Mais juste pour l'instant supposer que cette première ligne de code dans cette bibliothèque 1482 01:09:14,210 --> 01:09:18,170 disant jQuery signifie simplement lorsque l' document est prêt, procédez comme suit. 1483 01:09:18,170 --> 01:09:20,080 >> Parce que les pages Web peuvent prendre un peu de temps à charger. 1484 01:09:20,080 --> 01:09:23,029 Vous pourriez être sur une lente internet connexion, et il pourrait être en train de tourner 1485 01:09:23,029 --> 01:09:25,290 et la filature, et finalement il est chargé. 1486 01:09:25,290 --> 01:09:29,060 Cette ligne de code dit juste attendre la page entière est prêt, le document 1487 01:09:29,060 --> 01:09:31,189 est prête, avant d'exécuter ce code. 1488 01:09:31,189 --> 01:09:34,390 >> Et maintenant, avis, c'est probablement le premier le plus utile 1489 01:09:34,390 --> 01:09:36,189 emporter de jQuery. 1490 01:09:36,189 --> 01:09:42,140 Cette ligne est très semblable dans l'esprit à cette plus longue ligne ici. 1491 01:09:42,140 --> 01:09:46,920 Alors que dans le code JavaScript brut, il il existe un objet global de document qui 1492 01:09:46,920 --> 01:09:50,460 a une fonction appelée getElementById (), les gens qui ont écrit 1493 01:09:50,460 --> 01:09:55,720 jQuery simplifié que de dire simplement signe du dollar, puis à l'intérieur de 1494 01:09:55,720 --> 01:10:00,250 parenthèses mis deux citations, puis mettre un dièse suivi par le 1495 01:10:00,250 --> 01:10:02,250 ID unique que vous souhaitez récupérer. 1496 01:10:02,250 --> 01:10:06,170 Donc, ce qui équivaut à document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Pendant ce temps,. Submit signifie simplement sur soumission de la forme que vous êtes 1498 01:10:11,090 --> 01:10:14,240 référant à gauche, aller avant et exécuter ce. 1499 01:10:14,240 --> 01:10:16,600 Mais c'est maintenant la curiosité aussi. 1500 01:10:16,600 --> 01:10:19,560 Ce qui est bizarre sur ce J'ai souligné ici? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Non seulement il est genre de syntaxe nouveau, il ya aussi quelque chose qui manque. 1503 01:10:28,594 --> 01:10:29,558 >> PUBLIC: Il vient d'appeler la fonction? 1504 01:10:29,558 --> 01:10:31,970 Il ne s'appelle pas alerter? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID MALAN: Ouais. 1506 01:10:32,440 --> 01:10:35,450 Eh bien, si alert () est en baisse ici, pour être juste. 1507 01:10:35,450 --> 01:10:39,520 Mais il n'est pas fait mention d'un nom, comme vous le savez, foo ou 1508 01:10:39,520 --> 01:10:40,980 quelque chose ici. 1509 01:10:40,980 --> 01:10:43,830 Et en effet, c'est l'une des caractéristiques de JavaScript qui est tout à fait 1510 01:10:43,830 --> 01:10:45,370 puissant, mais aussi tout à fait nouveau. 1511 01:10:45,370 --> 01:10:47,460 Et PHP a fait cela aussi. 1512 01:10:47,460 --> 01:10:49,500 >> Permettez-moi d'aller de l'avant et de faire quelque chose de réel rapide. 1513 01:10:49,500 --> 01:10:52,030 Permettez-moi d'aller de l'avant et de mettre ceci ici. 1514 01:10:52,030 --> 01:10:52,600 Permettez-moi de faire ça. 1515 01:10:52,600 --> 01:10:53,690 Fonction. 1516 01:10:53,690 --> 01:10:56,455 Appelons ce gestionnaire (). 1517 01:10:56,455 --> 01:10:58,290 Une fonction de gestionnaire pour ainsi dire. 1518 01:10:58,290 --> 01:11:00,110 Quelque chose qui gère une opération. 1519 01:11:00,110 --> 01:11:02,700 Permettez-moi de nettoyer mon empreinte. 1520 01:11:02,700 --> 01:11:04,380 Et de mettre cela ici. 1521 01:11:04,380 --> 01:11:06,090 Et mettre ici. 1522 01:11:06,090 --> 01:11:06,470 Yep. 1523 01:11:06,470 --> 01:11:07,060 OK. 1524 01:11:07,060 --> 01:11:10,300 >> Alors maintenant, j'ai une fonction appelée gestionnaire () que je ne sais pas vraiment 1525 01:11:10,300 --> 01:11:10,890 ce qu'il fait encore. 1526 01:11:10,890 --> 01:11:12,710 Il a juste encore ce genre de choses. 1527 01:11:12,710 --> 01:11:13,900 Oups. 1528 01:11:13,900 --> 01:11:15,820 Pris trop. 1529 01:11:15,820 --> 01:11:18,490 Faisons-le. 1530 01:11:18,490 --> 01:11:18,990 Très bien. 1531 01:11:18,990 --> 01:11:20,240 Désolé. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Très bien. 1534 01:11:23,690 --> 01:11:24,720 Permettez-moi de le faire. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Cela semble bien droit transmettre maintenant. 1537 01:11:27,040 --> 01:11:29,090 Permettez-moi de le faire. 1538 01:11:29,090 --> 01:11:29,860 Faire. 1539 01:11:29,860 --> 01:11:30,950 Et OK. 1540 01:11:30,950 --> 01:11:33,080 Alors maintenant, nous allons mettre ceci ici. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Pas plus de programmation à la volée. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> Alors maintenant, revenons à où l'histoire a commencé. 1545 01:11:40,000 --> 01:11:43,530 Auparavant, j'ai dit que cette ligne ici signifie que lorsque le document est prêt, aller 1546 01:11:43,530 --> 01:11:44,380 l'avant et le faire. 1547 01:11:44,380 --> 01:11:45,660 Qu'est-ce que je veux faire? 1548 01:11:45,660 --> 01:11:49,070 Eh bien précisément, je veux aller de l'avant et faire ce qui suit. 1549 01:11:49,070 --> 01:11:53,700 Exécuter cette ligne de code, puis ce que je veux que vous fassiez est d'appeler ce 1550 01:11:53,700 --> 01:11:56,370 fonction lorsque le formulaire est soumis. 1551 01:11:56,370 --> 01:11:57,730 >> Maintenant, c'est ce qui est intéressant. 1552 01:11:57,730 --> 01:11:59,170 Ce n'est pas en soi une fonction. 1553 01:11:59,170 --> 01:12:02,540 Remarquez que je ne mets pas entre parenthèses ici de la manière normale. 1554 01:12:02,540 --> 01:12:06,800 Je suis littéralement passer une fonction appelée gestionnaire () à une autre fonction 1555 01:12:06,800 --> 01:12:10,800 appelé submit () comme argument que si c'est comme une variable. 1556 01:12:10,800 --> 01:12:14,290 Et c'est l'une des caractéristiques de JavaScript est fonctions se 1557 01:12:14,290 --> 01:12:15,710 sont vraiment juste des objets. 1558 01:12:15,710 --> 01:12:18,350 En fait, ils sont vraiment juste variables d'une sorte. 1559 01:12:18,350 --> 01:12:21,340 Et si le nom de la fonction est gestionnaire (), il n'y a aucune raison pour laquelle je ne peux pas 1560 01:12:21,340 --> 01:12:23,390 passer en argument ici. 1561 01:12:23,390 --> 01:12:27,530 Et cela signifie quand la forme avec l'ID de démonstration est 1562 01:12:27,530 --> 01:12:29,320 soumis, appeler cette fonction. 1563 01:12:29,320 --> 01:12:32,770 >> Mais maintenant, si je défais tout cela, pourquoi donc ai-je peut-être faire 1564 01:12:32,770 --> 01:12:34,850 il ya ce moment? 1565 01:12:34,850 --> 01:12:36,840 Eh bien, c'est une fonction anonyme. 1566 01:12:36,840 --> 01:12:41,080 Parce que franchement, j'ai compris pourquoi suis-je la peine de perdre du temps en déclarant un 1567 01:12:41,080 --> 01:12:45,540 fonction appelée gestionnaire () que d'appeler dans un seul et même endroit? 1568 01:12:45,540 --> 01:12:48,640 Si je n'ai pas besoin de nom, et je ne sais pas besoin de l'appeler plus d'un endroit, 1569 01:12:48,640 --> 01:12:51,200 disons simplement mettre en œuvre la fonction là où j'en ai besoin. 1570 01:12:51,200 --> 01:12:55,190 Et si JavaScript et PHP soutiennent ce sont appelés fonctions anonymes 1571 01:12:55,190 --> 01:12:57,900 Permettez-moi de faire exactement cela ici. 1572 01:12:57,900 --> 01:12:59,570 >> Mais nous ne faisons que gratter la surface. 1573 01:12:59,570 --> 01:13:02,430 Allons taquiner avec juste un couple derniers exemples ici. 1574 01:13:02,430 --> 01:13:04,600 >> Si je vais dans quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Notez que ceci est en fait un PHP fonction, un programme PHP, que j'ai écrit 1577 01:13:11,870 --> 01:13:15,270 qui attend un paramètre HTTP appelé symbole, et je peux passer en 1578 01:13:15,270 --> 01:13:16,730 une valeur comme FB. 1579 01:13:16,730 --> 01:13:20,010 Et si nous regardons effectivement à la source code, ce interroge un site Web gratuit 1580 01:13:20,010 --> 01:13:23,680 appelé Yahoo Finance, comme p-ensemble sept, et il est de retour à moi 1581 01:13:23,680 --> 01:13:26,580 quelque chose dans l'apparence format connu est JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 C'est juste un objet. 1584 01:13:28,810 --> 01:13:32,500 Remarquez les accolades, les citations, le côlon, et les virgules. 1585 01:13:32,500 --> 01:13:34,720 >> Maintenant quant à lui, c'est plutôt cool. 1586 01:13:34,720 --> 01:13:38,520 Parce que je peux probablement utiliser une programmation langue pour générer des URL 1587 01:13:38,520 --> 01:13:40,370 qui ressemblent à ce dynamique, droit? 1588 01:13:40,370 --> 01:13:43,340 Je peux changer ce à Google et revenir de Google 1589 01:13:43,340 --> 01:13:47,930 prix de l'action de 1,017.55 $. 1590 01:13:47,930 --> 01:13:49,640 Donc, nous allons voir si nous ne pouvons pas utiliser maintenant. 1591 01:13:49,640 --> 01:13:56,590 >> Permettez-moi de passer à ajax-0 ici, qui ressemble à la suivante. 1592 01:13:56,590 --> 01:13:59,750 C'est juste un site qui a un formulaire avec un bouton. 1593 01:13:59,750 --> 01:14:05,860 Permettez-moi ici d'aller de l'avant et tape dans YHOO pour le symbole boursier de Yahoo, cliquez sur Obtenir 1594 01:14:05,860 --> 01:14:10,530 Citation, et remarque maintenant que j'ai obtenu une alerte à 32.86. 1595 01:14:10,530 --> 01:14:14,050 >> Permettez-moi de réellement aller vers une version amateur de cette page, la version deux, et 1596 01:14:14,050 --> 01:14:17,530 entrez dans disons Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Obtenez un devis. 1598 01:14:18,410 --> 01:14:19,850 Et maintenant le constater, pas d'alerte. 1599 01:14:19,850 --> 01:14:22,770 Remarquez où il est dit prix à déterminer? 1600 01:14:22,770 --> 01:14:27,060 Il est le plus simple des exemples qui allusion à ce Gchat et Facebook 1601 01:14:27,060 --> 01:14:30,070 Chat, Gmail, et d'autres comme sites font en fait 1602 01:14:30,070 --> 01:14:31,290 modification de la page Web. 1603 01:14:31,290 --> 01:14:31,800 >> Notez ce. 1604 01:14:31,800 --> 01:14:33,120 Permettez-moi de recharger la page. 1605 01:14:33,120 --> 01:14:35,080 Permettez-moi de m'ouvrir inspecteur de Chrome. 1606 01:14:35,080 --> 01:14:36,890 Permettez-moi de passer aux éléments languette vers le bas ici. 1607 01:14:36,890 --> 01:14:42,310 Maintenant, remarquez si je zoome ici et ouvrir cette place, notez que ceci est mon 1608 01:14:42,310 --> 01:14:44,500 DOM HTML - mon document modèle objet. 1609 01:14:44,500 --> 01:14:45,920 C'est mon HTML. 1610 01:14:45,920 --> 01:14:48,750 Mais maintenant, remarquez, même si ça va d'être un peu difficile de le voir à la fois 1611 01:14:48,750 --> 01:14:52,080 endroits à la fois, si je tape dans FB ici, regarder en bas 1612 01:14:52,080 --> 01:14:54,110 de l'écran seulement. 1613 01:14:54,110 --> 01:14:57,720 >> Il s'agit en fait de changer ma HTML à la volée. 1614 01:14:57,720 --> 01:15:01,670 Et il fait cela tout simplement en faisant quelque chose comme ça. 1615 01:15:01,670 --> 01:15:06,800 Si j'ouvre ajax-2, la mise en œuvre avis quelque chose d'aussi sexy que 1616 01:15:06,800 --> 01:15:09,560 que, même si c'est assez laid, mais aussi sophistiqué que celui 1617 01:15:09,560 --> 01:15:11,910 fonctionnellement, il a une certaine HTML sur le fond. 1618 01:15:11,910 --> 01:15:13,810 Mais notez que je l'habitude de marquer. 1619 01:15:13,810 --> 01:15:16,640 Nous n'avons pas utilisé cette avant, mais ce n'est comme un, mais il ne force pas 1620 01:15:16,640 --> 01:15:17,840 tout sur une nouvelle ligne. 1621 01:15:17,840 --> 01:15:20,830 C'est tout simplement une zone rectangulaire sur la même ligne essentiellement. 1622 01:15:20,830 --> 01:15:22,870 >> Remarquez que je lui ai donné un ID de prix. 1623 01:15:22,870 --> 01:15:26,800 Et il se trouve à l'aide de la même Bibliothèque JavaScript, J'ai une fonction 1624 01:15:26,800 --> 01:15:30,440 appelée quote () qui est appelée à chaque fois le formulaire est soumis. 1625 01:15:30,440 --> 01:15:31,800 Et ce que je fais est la suivante. 1626 01:15:31,800 --> 01:15:35,730 Je déclarer une variable en JavaScript appelée URL, enregistrement de la valeur 1627 01:15:35,730 --> 01:15:38,650 quote.php? symbole =. 1628 01:15:38,650 --> 01:15:44,220 En d'autres termes, je suis moi-même commence à préparer une requête HTTP, et ensuite 1629 01:15:44,220 --> 01:15:49,250 Je concaténation sur qu'avec un plus quel que soit l'élément avec l'ID 1630 01:15:49,250 --> 01:15:54,190 de symbole est, qui avis est que champ de texte de droite ici. 1631 01:15:54,190 --> 01:15:56,630 Ainsi, tout comme nous avions formes dans le passé. 1632 01:15:56,630 --> 01:16:01,450 >> Et puis il s'avère en jQuery, si vous appel. val (), qui appelle d'un val 1633 01:16:01,450 --> 01:16:05,900 fonction, une fonction de valeur, qui devient ce que l'utilisateur a tapé: 1634 01:16:05,900 --> 01:16:08,920 Et puis tout le trafic réseau ce qui se passe est la suivante. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> Et en passant, signe de dollar est juste une notation abrégée. 1637 01:16:13,720 --> 01:16:16,860 C'est vraiment jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Obtenez-moi de JSON de cette URL, et quand la demande revient, appelez cette 1639 01:16:21,520 --> 01:16:26,550 fonction et passer en tant qu'argument quelle que soit venu à partir du serveur. 1640 01:16:26,550 --> 01:16:31,205 >> En d'autres termes, si je reviens à la navigateur, et je reviens à quote.php, 1641 01:16:31,205 --> 01:16:35,590 ce que mon navigateur est en train de faire est d'obtenir ce bloc de données. 1642 01:16:35,590 --> 01:16:38,930 Et quand je vais vers cette page web ici, remarquer si nous allons à la place sur le réseau 1643 01:16:38,930 --> 01:16:43,820 onglet et l'effacer, puis tapez quelque chose comme GOOG pour Google et obtenir 1644 01:16:43,820 --> 01:16:46,340 Citation, notez la page n'a pas changé. 1645 01:16:46,340 --> 01:16:50,990 Mais une requête HTTP a été faite, et ce que revint ici si nous regardons l' 1646 01:16:50,990 --> 01:16:56,130 réponse est tout un tas de JSON que nous avons accédé finalement avec 1647 01:16:56,130 --> 01:16:58,070 cette simple ligne ici. 1648 01:16:58,070 --> 01:17:00,150 >> Données est ce qui a été obtenu à partir du serveur. 1649 01:17:00,150 --> 01:17:02,120 Le prix est le nom de la clé je me soucie. 1650 01:17:02,120 --> 01:17:05,230 Donc data.price me donne cela. 1651 01:17:05,230 --> 01:17:07,540 >> Maintenant quant à lui, et ce est le dernier exemple. 1652 01:17:07,540 --> 01:17:09,280 Vous pouvez faire encore plus à la page. 1653 01:17:09,280 --> 01:17:12,440 Un fait, bien deux. 1654 01:17:12,440 --> 01:17:14,780 Nous pouvons ramener l' marquer, si vous vous rappelez ce. 1655 01:17:14,780 --> 01:17:15,850 C'est JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Nous pouvons le faire. 1657 01:17:17,110 --> 01:17:17,690 Très excitant. 1658 01:17:17,690 --> 01:17:18,800 Nous allons laisser cela comme un cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Mais plus excitante, vous pouvez faire des choses comme ça. 1660 01:17:21,590 --> 01:17:25,940 Si je vais à la géolocalisation-1, il s'avère que Chrome sait que nous sommes à 1661 01:17:25,940 --> 01:17:30,672 longitude latitude 42.37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 Donc, il ya encore plus, il à votre disposition. 1663 01:17:32,940 --> 01:17:34,290 Mais plus que la semaine prochaine. 1664 01:17:34,290 --> 01:17:35,540 Rendez-vous lundi. 1665 01:17:35,540 --> 01:17:37,558