1 00:00:00,000 --> 00:00:02,405 >> [Jouer de la musique] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 DAVID MALAN: Très bien, cela est CS50. 4 00:00:11,980 --> 00:00:13,740 Ceci est la fin de la semaine huit. 5 00:00:13,740 --> 00:00:15,887 Et aujourd'hui, nous commençons de combler certaines pièces 6 00:00:15,887 --> 00:00:17,720 quand il vient à la construction choses sur le web. 7 00:00:17,720 --> 00:00:20,020 Donc, rappeler que le lundi nous passons beaucoup plus de temps 8 00:00:20,020 --> 00:00:22,530 sur PHP, qui est cette dynamique langage de programmation qui 9 00:00:22,530 --> 00:00:26,872 nous permet de sortie, entre autres choses, HTML et d'autres tel contenu 10 00:00:26,872 --> 00:00:27,830 que nous allons voulons voir. 11 00:00:27,830 --> 00:00:30,871 Mais nous ne sommes pas vraiment regardé comment nous allons stocker toute information. 12 00:00:30,871 --> 00:00:34,477 En effet, presque toutes que le super sites intéressants que vous visitez aujourd'hui 13 00:00:34,477 --> 00:00:36,560 avoir une sorte de base de données à l'extrémité arrière, à droite? 14 00:00:36,560 --> 00:00:39,540 Facebook stocke certainement beaucoup de données de nous tous et de tous les magasins de Gmail 15 00:00:39,540 --> 00:00:40,210 de vos emails. 16 00:00:40,210 --> 00:00:44,150 >> Et donc, beaucoup d'autres sites ne sont pas seulement contenu statique qui est informationnel. 17 00:00:44,150 --> 00:00:45,640 Il est réellement dynamique en quelque sorte. 18 00:00:45,640 --> 00:00:48,480 Vous fournissez entrée, il met à jour les pages pour d'autres personnes. 19 00:00:48,480 --> 00:00:50,620 Vous recevez des messages, vous envoyez messages, et ainsi de suite. 20 00:00:50,620 --> 00:00:54,250 Donc, aujourd'hui, nous regardons de plus près les fondements d'un projet 21 00:00:54,250 --> 00:00:57,330 que vous allez plonger dans la prochaine semaine, CS50 Finances, qui 22 00:00:57,330 --> 00:01:00,509 qui se passe réellement à avoir vous construisez quelque chose de pas en C, mais en PHP. 23 00:01:00,509 --> 00:01:02,550 Un site web qui ressemble un peu quelque chose comme ça 24 00:01:02,550 --> 00:01:05,810 qui permet d'acheter et de vendre les stocks qui sont en fait 25 00:01:05,810 --> 00:01:09,044 va puiser en temps réel les données de stock de Yahoo Finances. 26 00:01:09,044 --> 00:01:11,960 Et finalement, vous aurez la illusion pour vous et pour les utilisateurs 27 00:01:11,960 --> 00:01:14,550 que vous êtes réellement achat et la vente les stocks et obtenir le temps réel près 28 00:01:14,550 --> 00:01:16,800 mises à jour, la gestion d'un portefeuille, qui 29 00:01:16,800 --> 00:01:20,310 va exiger ayant, en fin de compte, une base de données d'utilisateurs. 30 00:01:20,310 --> 00:01:23,330 >> Donc, dans vos propres mots, surtout si vous n'êtes pas 31 00:01:23,330 --> 00:01:25,670 familiers avec des super ordinateur la science ou de bases de données, ce qui 32 00:01:25,670 --> 00:01:30,790 savez-vous une base de données pour être en ce moment, en termes non techniques? 33 00:01:30,790 --> 00:01:32,300 Qu'Est-ce que c'est? 34 00:01:32,300 --> 00:01:36,882 Comment le décririez-vous à un colocataire ou un ami? 35 00:01:36,882 --> 00:01:40,100 >> AUDIENCE: [inaudible] informations [inaudible] 36 00:01:40,100 --> 00:01:44,430 >> DAVID MALAN: Donc, une liste d'informations, ou un store-- une liste d'informations 37 00:01:44,430 --> 00:01:47,160 que vous pourriez vouloir stocker à propos de quelque chose, comme un utilisateur. 38 00:01:47,160 --> 00:01:50,190 Et qu'est-ce que les utilisateurs ont associé avec eux? 39 00:01:50,190 --> 00:01:53,160 Si vous êtes un utilisateur sur Facebook ou Gmail, quelles sont les caractéristiques 40 00:01:53,160 --> 00:01:54,940 que nous tous les utilisateurs ont? 41 00:01:54,940 --> 00:01:58,530 Comme, ce qui pourrait être une partie de la les colonnes de la feuille de calcul à laquelle nous 42 00:01:58,530 --> 00:01:59,390 fait allusion la dernière fois? 43 00:01:59,390 --> 00:02:01,140 Parce qu'encore une fois, vous pouvez penser à une base de données 44 00:02:01,140 --> 00:02:05,810 vraiment comme une fantaisie fichier Excel ou Google Tableur ou Apple File Numbers. 45 00:02:05,810 --> 00:02:08,280 >> Alors, que pensez-vous de quand vous pensez à un utilisateur? 46 00:02:08,280 --> 00:02:11,290 Qu'ont-ils? 47 00:02:11,290 --> 00:02:11,790 Qu'est ce que c'est? 48 00:02:11,790 --> 00:02:12,470 >> PUBLIC: Un nom. 49 00:02:12,470 --> 00:02:13,303 >> DAVID MALAN: Un nom. 50 00:02:13,303 --> 00:02:16,840 Donc, si le nom, comme, David Malan serait le nom d'un utilisateur. 51 00:02:16,840 --> 00:02:17,980 Quoi d'autre ne possède un utilisateur? 52 00:02:17,980 --> 00:02:18,770 >> Public: Une pièce d'identité. 53 00:02:18,770 --> 00:02:19,561 >> DAVID MALAN: Une pièce d'identité. 54 00:02:19,561 --> 00:02:23,320 Alors, comme un numéro d'identification, comme votre Harvard ID ou votre Yale Net ID ou similaire. 55 00:02:23,320 --> 00:02:24,923 Quoi d'autre pourrait avoir un utilisateur? 56 00:02:24,923 --> 00:02:25,890 >> AUDIENCE: Mot de passe. 57 00:02:25,890 --> 00:02:29,240 >> DAVID MALAN: Un mot de passe, peut-être une adresse, peut-être un numéro de téléphone, peut-être 58 00:02:29,240 --> 00:02:30,050 une adresse e-mail. 59 00:02:30,050 --> 00:02:32,640 Donc, il ya des grappes de champs et ce pourraient sorte de spirale hors de contrôle 60 00:02:32,640 --> 00:02:34,760 rapidement dès que vous commencez réaliser, oh, nous allons stocker cette 61 00:02:34,760 --> 00:02:36,190 et nous allons stocker ceci et cela. 62 00:02:36,190 --> 00:02:37,657 >> Mais comment pouvons-nous réellement le faire? 63 00:02:37,657 --> 00:02:39,740 Encore une fois, le modèle mental d'avoir pour aujourd'hui comme nous 64 00:02:39,740 --> 00:02:42,320 plonger dans SQL réelle, Structured Query Language, 65 00:02:42,320 --> 00:02:44,186 est une base de données qui ressemble à ceci. 66 00:02:44,186 --> 00:02:45,310 Ce ne sont que lignes et colonnes. 67 00:02:45,310 --> 00:02:48,309 Et vous pouvez imaginer Google Spreadsheets ou tout nombre d'autres programmes. 68 00:02:48,309 --> 00:02:52,130 Mais ce qui est la clé sur MySQL, qui est la logiciel de base de données que nous allons utiliser, 69 00:02:52,130 --> 00:02:54,920 l'librement ouvertement available-- utilisations Facebook 70 00:02:54,920 --> 00:02:59,200 et un certain nombre d'autres websites-- base de données stocke les choses sur le plan relationnel. 71 00:02:59,200 --> 00:03:01,770 Et une base de données relationnelle signifie simplement celui qui littéralement 72 00:03:01,770 --> 00:03:03,672 stocke ses données en rangées et colonnes. 73 00:03:03,672 --> 00:03:04,630 C'est aussi simple que ça. 74 00:03:04,630 --> 00:03:07,230 >> Donc, même quelque chose comme Oracle vous pourriez avoir entendu parler de général 75 00:03:07,230 --> 00:03:08,271 est une base de données relationnelle. 76 00:03:08,271 --> 00:03:10,929 Et sous le capot, il stocke des données en rangées et en colonnes. 77 00:03:10,929 --> 00:03:12,970 Et Oracle vous une facture beaucoup d'argent pour le faire, 78 00:03:12,970 --> 00:03:15,550 tandis que les frais de MySQL vous rien pour la même. 79 00:03:15,550 --> 00:03:18,790 Donc, SQL va nous donner au moins quatre opérations. 80 00:03:18,790 --> 00:03:23,190 La possibilité de sélectionner des données, comme lecture données, insérer, supprimer, et les données de mise à jour. 81 00:03:23,190 --> 00:03:25,525 En d'autres termes, ceux qui sont vraiment les quatre opérations clés 82 00:03:25,525 --> 00:03:28,950 qui vont nous permettre de changer trucs dans ces lignes et de colonnes. 83 00:03:28,950 --> 00:03:33,250 >> L'outil que nous allons utiliser aujourd'hui en particulier d'apprendre SQL et de jouer avec lui 84 00:03:33,250 --> 00:03:34,627 est de nouveau appelé PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 Il est outil Internet. 86 00:03:35,460 --> 00:03:38,200 Coïncidence totale que il est écrit en PHP. 87 00:03:38,200 --> 00:03:42,400 Mais ça va nous donner un graphique interface utilisateur afin que nous puissions effectivement 88 00:03:42,400 --> 00:03:46,054 créer ces lignes et de colonnes puis leur parler via le code. 89 00:03:46,054 --> 00:03:47,970 Donc, nous allons commencer dès maintenant à ce que je pense est franchement 90 00:03:47,970 --> 00:03:51,000 type de processus de fun la construction de l'extrémité arrière de sites Web, 91 00:03:51,000 --> 00:03:54,580 les pièces que les utilisateurs ne voir, mais sûrement nous soucions, 92 00:03:54,580 --> 00:03:56,170 parce que ce qui se passe plutôt données. 93 00:03:56,170 --> 00:03:59,570 Donc, similaire à C et un peu moins comme PHP, 94 00:03:59,570 --> 00:04:04,954 SQL, ou une base de données qui prend en charge SQL, a au moins ces types de données 95 00:04:04,954 --> 00:04:05,870 et grappes d'autrui. 96 00:04:05,870 --> 00:04:08,107 CHAR, VARCHAR, INT, BIGINT, DECIMAL, et DATETIME. 97 00:04:08,107 --> 00:04:09,940 Et il ya un ensemble de tas d'autres fonctions, 98 00:04:09,940 --> 00:04:11,940 mais nous allons le faire par A titre d'exemple réel. 99 00:04:11,940 --> 00:04:16,450 >> Je vais aller dans CS50 IDE où, à l'avance, je suis connecté 100 00:04:16,450 --> 00:04:19,372 et je l'ai aussi visité une URL pour cet outil appelé PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 Et dans le problème réglé sept, nous dirons vous exactement comment se rendre à cette interface 102 00:04:22,580 --> 00:04:23,200 aussi bien. 103 00:04:23,200 --> 00:04:25,640 Dans le coin supérieur gauche, remarquerez qu'il dit donner des conférences. 104 00:04:25,640 --> 00:04:27,610 Et cela signifie juste que à l'avance, je créé 105 00:04:27,610 --> 00:04:31,360 une base de données appelée conférence vide qui n'a pas encore de feuilles de calcul en elle. 106 00:04:31,360 --> 00:04:32,600 Il n'y a pas rangées et de colonnes. 107 00:04:32,600 --> 00:04:34,308 Parce que le premier chose que nous allons faire 108 00:04:34,308 --> 00:04:37,100 est de commencer à créer une table cela va stocker nos utilisateurs. 109 00:04:37,100 --> 00:04:39,100 >> Donc, littéralement plus ici pour le droit, je suis 110 00:04:39,100 --> 00:04:42,070 va dire à la base de données Je veux une table appelée utilisateurs. 111 00:04:42,070 --> 00:04:44,845 Donc, cela est comme le fichier que je vouloir stocker toutes mes données dans. 112 00:04:44,845 --> 00:04:45,720 Et combien de colonnes? 113 00:04:45,720 --> 00:04:47,740 Eh bien, nous allons garder les choses simples pour le moment. 114 00:04:47,740 --> 00:04:51,855 Je veux juste pour stocker comme un nom d'utilisateur et un nom pour un utilisateur. 115 00:04:51,855 --> 00:04:53,020 Nous allons commencer petit. 116 00:04:53,020 --> 00:04:55,370 Donc, je veux deux colonnes totale. 117 00:04:55,370 --> 00:04:57,360 Et je vais aller de l'avant et cliquez sur OK. 118 00:04:57,360 --> 00:04:59,210 Et puis, pour ceux-ci colonnes, ce que je vais 119 00:04:59,210 --> 00:05:04,576 si à ce do-- Internet cooperates-- tout droit, 120 00:05:04,576 --> 00:05:05,950 donc nous allons essayer encore une fois. 121 00:05:05,950 --> 00:05:09,180 Je vais créer une table appelée Utilisateurs avec deux colonnes, cliquez sur OK, OK. 122 00:05:09,180 --> 00:05:10,520 Maintenant, nous avons vraiment rapide. 123 00:05:10,520 --> 00:05:12,065 Merci, très bien fait. 124 00:05:12,065 --> 00:05:14,440 Très bien, alors que voulons-nous ces colonnes pour être appelé? 125 00:05:14,440 --> 00:05:16,080 >> Donc, on va être appelé Nom d'utilisateur. 126 00:05:16,080 --> 00:05:19,480 Donc, je ne vois ici-- et l'interface obtient franchement un peu laide éventuellement, 127 00:05:19,480 --> 00:05:21,270 une fois que vous commencez à taper dans toutes ces données. 128 00:05:21,270 --> 00:05:27,450 Mais ce qui est beau est ce genre de paradoxalement, je crée des colonnes, 129 00:05:27,450 --> 00:05:29,977 mais l'outil a bêtement les déposèrent en rangées 130 00:05:29,977 --> 00:05:31,560 de sorte que je peux configurer ces colonnes. 131 00:05:31,560 --> 00:05:33,550 Donc, il ya deux flans il sous Nom. 132 00:05:33,550 --> 00:05:36,180 Et l'un de ces domaines, je vouloir appelé Nom d'utilisateur, 133 00:05:36,180 --> 00:05:38,000 et l'autre domaine que je veux appeler Nom. 134 00:05:38,000 --> 00:05:40,340 >> Et maintenant, je dois choisir types de données pour ces choses. 135 00:05:40,340 --> 00:05:42,330 Ainsi, alors que dans Excel et Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 si vous voulez une colonne, vous littéralement il suffit de taper le nom ou nom d'utilisateur, appuyez sur Entrée. 137 00:05:45,531 --> 00:05:48,030 Peut-être que vous le rendre gras juste pour la clarté, mais ça y est. 138 00:05:48,030 --> 00:05:50,140 Vous ne spécifiez pas le les types de colonnes. 139 00:05:50,140 --> 00:05:53,790 Maintenant dans Google Spreadsheets ou Excel, vous pourrait indiquer comment les données est rendue. 140 00:05:53,790 --> 00:05:58,120 Vous pouvez aller dans le menu Format, et vous peut spécifier montrer ce signe comme du dollar, 141 00:05:58,120 --> 00:05:59,900 montrer cela comme une valeur en virgule flottante. 142 00:05:59,900 --> 00:06:01,990 >> Ainsi, il est similaire dans l'esprit que ce que nous sommes sur le point de le faire, 143 00:06:01,990 --> 00:06:04,740 mais ce qui se passe réellement à la force les données à un certain type. 144 00:06:04,740 --> 00:06:07,750 Maintenant, même si il ya un instant, je dit il ya seulement quelques types de données, 145 00:06:07,750 --> 00:06:11,120 il ya en fait un beaucoup, et ils sont 146 00:06:11,120 --> 00:06:12,910 en faisant varier les degrés de spécificité. 147 00:06:12,910 --> 00:06:14,970 Et en passant, vous peut même faire des choses fantaisistes 148 00:06:14,970 --> 00:06:17,520 comme géométries de stockage à l'intérieur d'une base de données. 149 00:06:17,520 --> 00:06:19,250 Vous pouvez stocker des choses comme les coordonnées GPS 150 00:06:19,250 --> 00:06:22,420 et effectivement trouver, mathématiquement, des points qui sont proches à d'autres. 151 00:06:22,420 --> 00:06:24,128 Mais nous allons garder ce super simple 152 00:06:24,128 --> 00:06:26,800 et aller jusqu'à ici, tous les types dits cordes. 153 00:06:26,800 --> 00:06:29,240 >> Donc, voici une liste de tas ensemble d'options. 154 00:06:29,240 --> 00:06:32,740 CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. 155 00:06:32,740 --> 00:06:34,110 Et il est un peu écrasante. 156 00:06:34,110 --> 00:06:37,610 Et malheureusement, un peu paradoxalement, à C, 157 00:06:37,610 --> 00:06:40,120 CHAR est pas vraiment un CHAR. 158 00:06:40,120 --> 00:06:44,170 Si vous indiquez dans une base de données que votre type de données est CHAR, 159 00:06:44,170 --> 00:06:47,390 cela veut dire que oui, il est un CHAR, mais il est un ou plusieurs caractères. 160 00:06:47,390 --> 00:06:49,630 Et vous devez spécifier combien de caractères que vous voulez. 161 00:06:49,630 --> 00:06:51,636 Donc, ce qui est un typique longueur pour un nom d'utilisateur? 162 00:06:51,636 --> 00:06:52,760 Y at-il une limite généralement? 163 00:06:52,760 --> 00:06:53,920 >> AUDIENCE: [inaudible] 164 00:06:53,920 --> 00:06:55,050 >> DAVID MALAN: 16 peut-être? 165 00:06:55,050 --> 00:06:55,990 Quelque chose comme ça. 166 00:06:55,990 --> 00:06:57,948 Vous savez, de retour dans le jour, il l'habitude d'être huit. 167 00:06:57,948 --> 00:07:00,289 Parfois, il est 16, parfois il est encore plus que cela. 168 00:07:00,289 --> 00:07:02,080 Et donc, cela ne dire me donner un CHAR. 169 00:07:02,080 --> 00:07:04,730 Cela signifie que je dois spécifier la longueur du champ, 170 00:07:04,730 --> 00:07:07,402 et maintenant je pourrais dire quelque chose comme 16. 171 00:07:07,402 --> 00:07:08,610 Et il ya un compromis ici. 172 00:07:08,610 --> 00:07:11,360 Donc, nous le verrons dans un instant cela signifie que l'un, 173 00:07:11,360 --> 00:07:14,620 chaque nom d'utilisateur doit être de 16 caractères. 174 00:07:14,620 --> 00:07:18,720 Mais attendez une minute, M-A-L-A-N. Si tel est mon nom et je suis seulement en utilisant cinq, 175 00:07:18,720 --> 00:07:23,070 que proposeriez-vous que la base de données à faire pour les 11 autres caractères 176 00:07:23,070 --> 00:07:24,471 Je l'ai réservé un espace pour? 177 00:07:24,471 --> 00:07:25,220 Que feriez-vous? 178 00:07:25,220 --> 00:07:26,480 >> AUDIENCE: [inaudible] 179 00:07:26,480 --> 00:07:27,160 >> DAVID MALAN: Ouais, juste rendre tous nuls. 180 00:07:27,160 --> 00:07:28,290 Faites-les espaces. 181 00:07:28,290 --> 00:07:30,816 Mais probablement nulle, donc un beaucoup de zéros de barre oblique inverse. 182 00:07:30,816 --> 00:07:33,190 Donc, d'une part, nous avons maintenant fait en sorte que mon nom d'utilisateur 183 00:07:33,190 --> 00:07:34,780 peut être pas plus de 16 caractères. 184 00:07:34,780 --> 00:07:37,590 Et le revers de la médaille est que si je devais vraiment un nom long 185 00:07:37,590 --> 00:07:39,940 ou voulu un très long username comme certains d'entre vous 186 00:07:39,940 --> 00:07:44,840 les gars pourraient avoir dans ce collège ou au Yale.edu, vous ne pouvez pas en avoir un. 187 00:07:44,840 --> 00:07:47,177 Et en fait, si vous avez jamais enregistré pour un site Web 188 00:07:47,177 --> 00:07:49,385 et vous obtenez crié à dire votre mot de passe est trop long 189 00:07:49,385 --> 00:07:52,710 ou votre nom d'utilisateur est trop long, il est tout simplement parce que un programmeur, lorsque 190 00:07:52,710 --> 00:07:55,500 la configuration de sa base de données, décidé que ce champ 191 00:07:55,500 --> 00:07:57,150 pas dépasser cette longueur. 192 00:07:57,150 --> 00:08:00,580 >> Très bien, tant pis si nous procédons à nommer? 193 00:08:00,580 --> 00:08:05,240 Combien de temps devrait une le nom de l'homme typique être? 194 00:08:05,240 --> 00:08:07,492 Combien de caractères, 16? 195 00:08:07,492 --> 00:08:09,450 Je devine que nous pourrions trouver quelqu'un dans cette salle 196 00:08:09,450 --> 00:08:13,210 où, par sa première, plus dernier nom est plus de 16 caractères. 197 00:08:13,210 --> 00:08:14,850 Alors, quoi de mieux que cela, 17? 198 00:08:14,850 --> 00:08:17,040 18? 199 00:08:17,040 --> 00:08:18,830 25? 200 00:08:18,830 --> 00:08:20,350 Plus gros? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> AUDIENCE: [inaudible] 203 00:08:21,855 --> 00:08:23,700 DAVID MALAN: 5000, oh mon Dieu. 204 00:08:23,700 --> 00:08:26,309 Donc, voilà sans doute une vie décente borne supérieure, dirons-nous. 205 00:08:26,309 --> 00:08:28,350 Et ici, nous avons sorte de pour faire un appel du jugement. 206 00:08:28,350 --> 00:08:30,400 Comme, il n'y a pas de bonne réponse ici. 207 00:08:30,400 --> 00:08:32,740 Infini est pas tout à fait possible, parce que nous sommes finalement 208 00:08:32,740 --> 00:08:34,781 aller à have-- nous sommes aller à manquer de mémoire. 209 00:08:34,781 --> 00:08:36,909 Donc, nous avons à faire un appel de jugement à un moment donné. 210 00:08:36,909 --> 00:08:41,010 >> Très commune serait, par exemple, à use-- et laissez-moi préciser CHAR ici 211 00:08:41,010 --> 00:08:46,050 comme before-- 255 était littéralement le limite supérieure de ce logiciel de base de données 212 00:08:46,050 --> 00:08:46,700 il y a des années. 213 00:08:46,700 --> 00:08:48,575 Et donc, beaucoup d'êtres humains dirais simplement, très bien. 214 00:08:48,575 --> 00:08:49,420 255 est la limite. 215 00:08:49,420 --> 00:08:50,620 Disons simplement utiliser le maximum. 216 00:08:50,620 --> 00:08:51,870 Et cela est assez ridicule. 217 00:08:51,870 --> 00:08:55,060 Comme, si vous tapez quelqu'un est nommer pour 200 caractères plus, 218 00:08:55,060 --> 00:08:56,140 que un peu ridicule. 219 00:08:56,140 --> 00:08:59,624 >> Mais, rappelez-vous que ASCII est pas le seul système pour les personnages. 220 00:08:59,624 --> 00:09:01,540 Ainsi, en particulier dans un beaucoup de langues asiatiques 221 00:09:01,540 --> 00:09:04,248 où il ya des personnages nous ne pouvons pas exprimer sur les claviers comme mon US 222 00:09:04,248 --> 00:09:08,209 Clavier, certains caractères réellement prendre jusqu'à 16 bits au lieu de huit bits. 223 00:09:08,209 --> 00:09:10,250 Et ainsi, ce fait est pas tout à fait déraisonnable 224 00:09:10,250 --> 00:09:12,250 que nous avons besoin de plus espace si nous voulons adapter 225 00:09:12,250 --> 00:09:16,252 caractères plus gros que le très américain celles centrées nous avons tendance à discuter. 226 00:09:16,252 --> 00:09:17,460 Donc, nous avons besoin d'une certaine limite supérieure. 227 00:09:17,460 --> 00:09:21,470 Je ne sais pas ce que le meilleur est, mais 255 est généralement une commune. 228 00:09:21,470 --> 00:09:22,700 25 se sent faible. 229 00:09:22,700 --> 00:09:23,857 16, 32 sentir faible. 230 00:09:23,857 --> 00:09:25,690 Je voudrais tromper sur le côté de quelque chose de supérieur. 231 00:09:25,690 --> 00:09:27,330 Mais il ya un compromis, comme toujours. 232 00:09:27,330 --> 00:09:31,902 Quel est le, peut-être, évident compromis de réserver 255 caractères 233 00:09:31,902 --> 00:09:33,360 pour le nom de tout le monde dans ma base de données? 234 00:09:33,360 --> 00:09:34,230 >> AUDIENCE: [inaudible] 235 00:09:34,230 --> 00:09:34,510 >> DAVID MALAN: Qu'est-ce que? 236 00:09:34,510 --> 00:09:35,430 >> AUDIENCE: [inaudible] 237 00:09:35,430 --> 00:09:37,138 >> DAVID MALAN: Il est un beaucoup de mémoire, non? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N. Je viens gaspillé 250 caractères juste pour stocker mon nom 239 00:09:42,280 --> 00:09:46,000 défensivement, juste au cas où quelqu'un dans la classe a un très long nom. 240 00:09:46,000 --> 00:09:47,940 Cela semble être un compromis indu. 241 00:09:47,940 --> 00:09:52,040 >> Donc, il se trouve que SQL, cette langue de base de données, 242 00:09:52,040 --> 00:09:55,480 soutient en fait quelque chose appelés VARCHAR, ou variable CHAR. 243 00:09:55,480 --> 00:09:59,390 Et cela est une sorte de Nice en ce qui vous permet de spécifier pas un fixe 244 00:09:59,390 --> 00:10:01,900 largeur, mais plutôt, une largeur variable. 245 00:10:01,900 --> 00:10:05,060 Et plus particulièrement, un la largeur maximale du champ. 246 00:10:05,060 --> 00:10:08,901 Donc, cela signifie qu'un nom peut pas plus de 250 caractères, 247 00:10:08,901 --> 00:10:10,150 mais il peut certainement être moins. 248 00:10:10,150 --> 00:10:11,733 Et la base de données va être intelligent. 249 00:10:11,733 --> 00:10:14,860 Si vous ne mettez dans M-A-L-A-N, il va seulement utiliser cinq, 250 00:10:14,860 --> 00:10:18,120 peut-être six octets pour comme un caractère nul final, 251 00:10:18,120 --> 00:10:23,330 et ne pas dépenser une somme additionnelle 249 ou 250 octets inutilement. 252 00:10:23,330 --> 00:10:27,380 >> Donc, cela semble comme je le devrais ont commencé avec cette histoire. 253 00:10:27,380 --> 00:10:29,140 Mais il ya toujours un compromis. 254 00:10:29,140 --> 00:10:33,024 Donc, d'une part, un nom d'utilisateur, je l'ai spécifiée pour être codé en dur à 16 ans, 255 00:10:33,024 --> 00:10:34,940 et peut-être était pas l'appel à droite, peut-être 256 00:10:34,940 --> 00:10:40,040 est, mais pourquoi ne pas utiliser Varchars pour tout? 257 00:10:40,040 --> 00:10:42,020 >> Il existe pour une raison. 258 00:10:42,020 --> 00:10:46,200 Pourquoi ne pas utiliser Varchars pour chaque champ dont la longueur que vous ne savez pas à l'avance 259 00:10:46,200 --> 00:10:48,180 si elle semble être une bonne chose, non? 260 00:10:48,180 --> 00:10:50,482 Utilisez uniquement autant d'espace que vous avez besoin jusqu'à cette limite? 261 00:10:50,482 --> 00:10:51,271 >> AUDIENCE: Plus lent. 262 00:10:51,271 --> 00:10:52,146 DAVID MALAN: Speller? 263 00:10:52,146 --> 00:10:53,120 AUDIENCE: rend plus lent? 264 00:10:53,120 --> 00:10:53,970 DAVID MALAN: Oh, il est plus lent. 265 00:10:53,970 --> 00:10:55,720 Bon, voilà presque toujours la réponse, franchement. 266 00:10:55,720 --> 00:10:56,520 Comme, quel est le compromis? 267 00:10:56,520 --> 00:10:58,570 Il coûte plus d'espace soit ou il en coûte plus de temps. 268 00:10:58,570 --> 00:11:00,111 Donc, dans ce cas, il pourrait être plus lent. 269 00:11:00,111 --> 00:11:00,920 Pourquoi? 270 00:11:00,920 --> 00:11:05,830 >> AUDIENCE: [inaudible] détermination [inaudible]. 271 00:11:05,830 --> 00:11:06,640 >> DAVID MALAN: Bon. 272 00:11:06,640 --> 00:11:09,670 Ainsi, vous pourriez rappeler de même PSED5, jouer avec votre approche 273 00:11:09,670 --> 00:11:12,750 le dictionnaire, si vous avez à allouer dynamiquement de la mémoire ou de garder 274 00:11:12,750 --> 00:11:14,630 la croissance d'une mémoire tampon, qui peut effectivement être lente. 275 00:11:14,630 --> 00:11:16,963 Si vous devez appeler malloc sous le capot et peut-être 276 00:11:16,963 --> 00:11:19,610 qui est ce que MySQL est en train de faire, de sorte sûrement que cela pourrait être le cas. 277 00:11:19,610 --> 00:11:22,430 Et si vous pensez façon Retour à PSet-- ou même 278 00:11:22,430 --> 00:11:26,340 deux semaines, quand nous avons fait des choses comme recherche binaire ou même la recherche linéaire, 279 00:11:26,340 --> 00:11:30,690 Une des belles choses sur chaque mot dans une base de données ou chaque mot dans une colonne 280 00:11:30,690 --> 00:11:33,690 étant exactement la même longueur, même si tout un tas de ces caractères 281 00:11:33,690 --> 00:11:37,390 sont vides, est que vous pouvez utiliser accès aléatoire sur vos données, non? 282 00:11:37,390 --> 00:11:40,310 >> Si vous savez que tous les mot est de 16 caractères de suite, 283 00:11:40,310 --> 00:11:46,460 vous pouvez utiliser un pointeur arithmétique, ainsi parler, et aller à nous 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 et vous pouvez simplement sauter instantanément en utilisant l'arithmétique 285 00:11:49,589 --> 00:11:51,130 à l'un des mots dans votre base de données. 286 00:11:51,130 --> 00:11:54,280 Tandis que si elle est une VARCHAR, qu'est-ce que vous avez à faire à la place? 287 00:11:54,280 --> 00:11:55,960 >> [Le téléphone sonne] 288 00:11:55,960 --> 00:11:58,680 >> Si il est une VARCHAR, vous ne peuvent pas utiliser l'accès aléatoire. 289 00:11:58,680 --> 00:12:01,341 Qu'est-ce que vous avez à chercher ou à faire? 290 00:12:01,341 --> 00:12:01,840 Ouais? 291 00:12:01,840 --> 00:12:03,240 >> AUDIENCE: [inaudible] 292 00:12:03,240 --> 00:12:04,310 >> DAVID MALAN: Regardez à travers la trace whole-- 293 00:12:04,310 --> 00:12:06,518 toute la liste à la recherche de ce que, le plus probable? 294 00:12:06,518 --> 00:12:08,356 Quel genre de valeur particulière? 295 00:12:08,356 --> 00:12:09,230 AUDIENCE: [inaudible] 296 00:12:09,230 --> 00:12:11,105 DAVID MALAN: Regarder pour les terminaisons null 297 00:12:11,105 --> 00:12:13,637 qui délimitent la séparation des mots. 298 00:12:13,637 --> 00:12:15,720 Donc encore une fois, un compromis, et il n'y a pas de bonne réponse. 299 00:12:15,720 --> 00:12:18,380 Mais cela est le cas, en particulier lorsque vos utilisateurs obtiennent d'être beaucoup 300 00:12:18,380 --> 00:12:21,700 et votre charge sur vos serveurs, le nombre de personnes qui l'utilisent devient haut, 301 00:12:21,700 --> 00:12:23,650 ce sont en fait des décisions non triviaux. 302 00:12:23,650 --> 00:12:26,640 Donc, nous pouvons laisser ceux-ci comme cela, mais nous allons faites défiler vers la droite 303 00:12:26,640 --> 00:12:27,332 Ici. 304 00:12:27,332 --> 00:12:30,290 Maintenant, il ya un couple de colonnes où nous avons à faire un appel du jugement. 305 00:12:30,290 --> 00:12:35,170 Est-il judicieux de permettre à un utilisateur de nom, le nom d'utilisateur ou d'un utilisateur d'un utilisateur 306 00:12:35,170 --> 00:12:36,370 nom, d'être nulle? 307 00:12:36,370 --> 00:12:37,610 Voilà, tout simplement vide. 308 00:12:37,610 --> 00:12:40,360 Se sent un peu absurde, donc je suis ne va pas vérifier ces boîtes. 309 00:12:40,360 --> 00:12:42,670 Mais il se trouve dans un base de données, vous pouvez dire, 310 00:12:42,670 --> 00:12:44,620 quelqu'un peut éventuellement avoir cette valeur. 311 00:12:44,620 --> 00:12:47,180 Cette colonne n'a pas pour être réellement là. 312 00:12:47,180 --> 00:12:48,570 >> Maintenant, il ya ce menu déroulant. 313 00:12:48,570 --> 00:12:50,810 Et notez que je suis encore dans la première rangée là, 314 00:12:50,810 --> 00:12:52,520 si je parle maintenant le nom d'utilisateur. 315 00:12:52,520 --> 00:12:56,290 Et il se trouve que d'une base de données, contrairement à un simple, simple feuille de calcul, 316 00:12:56,290 --> 00:12:58,520 a des fonctionnalités puissantes appelées indices. 317 00:12:58,520 --> 00:13:02,600 Et un indice est une façon de dire au base de données à l'avance que je l'humain 318 00:13:02,600 --> 00:13:03,900 suis plus intelligent que vous. 319 00:13:03,900 --> 00:13:10,430 >> Je sais quels types de requêtes, sélectionnez ou d'insérer ou de supprimer ou de mise à jour, 320 00:13:10,430 --> 00:13:13,182 que mon code va se terminer jusqu'à faire sur cette base de données. 321 00:13:13,182 --> 00:13:14,390 Je veux lire un grand nombre de données. 322 00:13:14,390 --> 00:13:15,681 Je veux insérer un grand nombre de données. 323 00:13:15,681 --> 00:13:17,530 Je veux constamment supprimer un grand nombre de données. 324 00:13:17,530 --> 00:13:21,520 Si je sais que je vais être l'accès à un domaine comme Nom d'utilisateur beaucoup, 325 00:13:21,520 --> 00:13:24,770 Je peux dire la préventivement base de données, je sais plus que vous, 326 00:13:24,770 --> 00:13:29,220 et je tiens à ce que le décret vous devriez indice ce domaine. 327 00:13:29,220 --> 00:13:33,200 Lorsque l'indexation d'un champ ou une colonne signifie que la base de données à l'avance 328 00:13:33,200 --> 00:13:37,040 devrait emprunter quelques idées à partir, comme, la semaine de quatre et cinq et six de CS50 329 00:13:37,040 --> 00:13:39,240 et effectivement construire quelque chose comme une recherche binaire 330 00:13:39,240 --> 00:13:41,560 arbre ou quelque chose généralement appelé un arbre B 331 00:13:41,560 --> 00:13:43,410 que vous souhaitez apprendre dans un cs124 comme de classe 332 00:13:43,410 --> 00:13:46,710 à Harvard, une classe d'algorithmes, ou tout nombre d'autres endroits. 333 00:13:46,710 --> 00:13:49,570 >> La base de données et la smart personnes qui mis en œuvre 334 00:13:49,570 --> 00:13:53,880 va comprendre comment stocker cette table d'informations 335 00:13:53,880 --> 00:13:57,061 en mémoire afin que les recherches et d'autres opérations sont super rapide. 336 00:13:57,061 --> 00:13:58,060 Vous n'êtes pas obligé de le faire. 337 00:13:58,060 --> 00:14:00,640 Vous ne disposez pas de mettre en œuvre recherche linéaire ou recherche binaire 338 00:14:00,640 --> 00:14:03,300 ou le tri par fusion ou de la sélection Trier, rien de tout cela. 339 00:14:03,300 --> 00:14:06,590 La base de données fait pour vous si vous dites il préventivement à l'index ce domaine. 340 00:14:06,590 --> 00:14:09,100 >> Et vous pouvez voir aussi, il ya d'autres caractéristiques 341 00:14:09,100 --> 00:14:11,010 nous pouvons dire la base de données à appliquer. 342 00:14:11,010 --> 00:14:16,431 Qu'est-ce que cela pourrait signifier si je choisis Unique à partir de ce menu, juste intuitivement? 343 00:14:16,431 --> 00:14:16,930 Ouais? 344 00:14:16,930 --> 00:14:17,889 >> AUDIENCE: [inaudible] 345 00:14:17,889 --> 00:14:19,930 DAVID MALAN: Ouais, le nom d'utilisateur doit être unique. 346 00:14:19,930 --> 00:14:23,330 Est-ce une bonne chose ou une mauvaise chose pour une base de données, pour un site Web avec les utilisateurs? 347 00:14:23,330 --> 00:14:24,965 Si les noms d'utilisateur unique? 348 00:14:24,965 --> 00:14:25,880 Oui, probablement. 349 00:14:25,880 --> 00:14:27,800 Si cela est ce que le domaine, nous utiliser pour vous connecter, 350 00:14:27,800 --> 00:14:31,867 vous ne voulez pas vraiment aux personnes ayant la même sensation ou le même nom d'utilisateur. 351 00:14:31,867 --> 00:14:33,700 Donc, nous pouvons avoir la base de données de sorte que les appliquer 352 00:14:33,700 --> 00:14:37,880 que maintenant dans mon code PHP ou toute autre langue, Je ne dois pas, par exemple, de vérifier 353 00:14:37,880 --> 00:14:41,490 n'a pas nécessairement ce nom d'utilisateur existe avant que je laisse quelqu'un inscrire? 354 00:14:41,490 --> 00:14:46,690 La base de données ne permettra pas que deux personnes nommées David ou Malans inscrire dans ce cas. 355 00:14:46,690 --> 00:14:50,030 >> Et en passant, même si cette menu ne vous permet de sélectionner l'un, 356 00:14:50,030 --> 00:14:54,550 un index unique est celui qui est indexées pour des performances ultra-rapide, 357 00:14:54,550 --> 00:14:56,100 mais il impose également l'unicité. 358 00:14:56,100 --> 00:14:58,850 Et nous allons revenir à ce que le deux autres dire dans un instant. 359 00:14:58,850 --> 00:15:00,930 Pendant ce temps, si je vais à mon deuxième rangée, qui 360 00:15:00,930 --> 00:15:06,230 est le nom de l'utilisateur, dois-je préciser que le nom doit être unique? 361 00:15:06,230 --> 00:15:09,550 Non, parce que vous pourriez certainement have-- il n'y a pas deux David 362 00:15:09,550 --> 00:15:11,050 Malans dans cette salle, le plus probable. 363 00:15:11,050 --> 00:15:14,290 Mais si nous choisissons un nom différent, nous pourrions sûrement avoir des collisions. 364 00:15:14,290 --> 00:15:16,130 >> Pensez aux différentes tables et autres. 365 00:15:16,130 --> 00:15:18,604 Donc, nous ne voulons certainement pas pour rendre le champ de nom unique. 366 00:15:18,604 --> 00:15:21,270 Donc, nous allons juste de quitter que tiret, tiret, tiret, rien. 367 00:15:21,270 --> 00:15:22,660 Et je vais quitter tout le reste seul. 368 00:15:22,660 --> 00:15:25,035 En effet, la plupart de ces champs nous ne devrons pas se soucier. 369 00:15:25,035 --> 00:15:27,830 Et quand je suis prêt à sauver ce, si coopère Internet, 370 00:15:27,830 --> 00:15:35,032 Je clique sur Enregistrer, et très, très, très lentement la base de données ne se sauva. 371 00:15:35,032 --> 00:15:37,240 Et maintenant, je suis de retour à cette interface, ce qui est vrai, 372 00:15:37,240 --> 00:15:38,680 est écrasante au premier coup d'œil. 373 00:15:38,680 --> 00:15:42,450 Mais tout ce que je vais faire est de cliquer sur sur le mot Utilisateurs en haut à gauche. 374 00:15:42,450 --> 00:15:47,630 Je vais monter ici, clique Utilisateurs, et par défaut, il 375 00:15:47,630 --> 00:15:50,180 a exécuté un certain SQL, mais plus de détails dans un instant. 376 00:15:50,180 --> 00:15:52,654 Voici juste un résumé de ce que je faisais. 377 00:15:52,654 --> 00:15:55,320 Et ne vous inquiétez pas que vous voyez parler du latin et suédois ici. 378 00:15:55,320 --> 00:16:00,490 Ce ne sont que la valeur par défaut paramètres, car MySQL à l'origine, 379 00:16:00,490 --> 00:16:04,000 ou PHP MyAdmin, l'un des deux est arrivé être écrit par des gens suédois. 380 00:16:04,000 --> 00:16:06,100 Mais il est hors de propos dans notre cas ici. 381 00:16:06,100 --> 00:16:08,280 >> Très bien, alors pourquoi est- tout cela intéressant? 382 00:16:08,280 --> 00:16:13,050 Il se trouve, je peux insérer des données dans une base de données en écriture de code. 383 00:16:13,050 --> 00:16:15,940 Et je vais de l'avant et dans mon fichier ici, je suis 384 00:16:15,940 --> 00:16:19,000 aller de l'avant et faire semblant comme ce qui est relié à la base de données, qui 385 00:16:19,000 --> 00:16:23,040 il est pas pour le moment, mais il sera quand nous arrivons à problème posé sept. 386 00:16:23,040 --> 00:16:25,640 Et je vais aller de l'avant et exécuter une fonction appelée requête, 387 00:16:25,640 --> 00:16:28,730 dont nous allons vous donner dans le problème réglez le code de distribution de sept, qu'il 388 00:16:28,730 --> 00:16:31,490 prend au moins un argument, qui est juste une chaîne. 389 00:16:31,490 --> 00:16:33,460 Une chaîne de code SQL. 390 00:16:33,460 --> 00:16:36,700 Donc, vous êtes sur le point d'apprendre à écrire Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Si je veux insérer une nouvelle ligne dans mon base de données parce que quelqu'un a soumis 392 00:16:41,270 --> 00:16:47,600 une forme à mon code, je serait littéralement écrire INSERT INTO utilisateurs la suivante 393 00:16:47,600 --> 00:16:52,800 champs: Nom d'utilisateur, virgule, le nom, les valeurs, 394 00:16:52,800 --> 00:16:57,480 et maintenant je dois insérer quelque chose comme Malan et devis, 395 00:16:57,480 --> 00:17:01,490 Ils ont dit 'David Malan. Et maintenant même pour ceux qui ne connaissent SQL, 396 00:17:01,490 --> 00:17:07,830 pourquoi suis-je en utilisant des guillemets simples à l'intérieur de cette chaîne verte? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 Quelle pourrait être la raison ici? 399 00:17:13,040 --> 00:17:14,609 >> Remarquez que je suis co-mélange deux langues. 400 00:17:14,609 --> 00:17:18,099 Query est une fonction PHP, mais il prend un argument. 401 00:17:18,099 --> 00:17:21,740 Et cet argument doit être lui-même écrit dans une autre langue appelée 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 Donc, tout ce que je viens de souligner ici 404 00:17:27,940 --> 00:17:30,380 est ce langage appelé SQL. 405 00:17:30,380 --> 00:17:36,290 Alors, quel est avec les guillemets simples, tout comme un test de cohérence rapide? 406 00:17:36,290 --> 00:17:37,324 Aller de l'avant. 407 00:17:37,324 --> 00:17:37,990 Ils sont des chaînes. 408 00:17:37,990 --> 00:17:41,590 Donc, entre guillemets Malan et devis, Ils ont dit David Malan sont des chaînes. 409 00:17:41,590 --> 00:17:45,210 Et juste à y penser intuitivement maintenant, sachant ce que vous savez à propos de C et PHP, 410 00:17:45,210 --> 00:17:50,220 pourquoi ai-je pas fait cela, que je généralement guillemets occasion pour les chaînes? 411 00:17:50,220 --> 00:17:52,310 Pourquoi ai-je veux pas faire cela? 412 00:17:52,310 --> 00:17:52,810 Ouais? 413 00:17:52,810 --> 00:17:53,685 >> AUDIENCE: [inaudible] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID MALAN: Exactement. 416 00:17:57,570 --> 00:17:59,653 Parce que je suis déjà en utilisant guillemets sur le chemin 417 00:17:59,653 --> 00:18:01,929 en dehors de l'argument à la fonction de PHP, 418 00:18:01,929 --> 00:18:03,470 Je voudrais juste confondre l'interprète. 419 00:18:03,470 --> 00:18:04,860 Il ne saura pas, ne ceux-ci vont ensemble? 420 00:18:04,860 --> 00:18:05,735 Ne ceux-ci vont ensemble? 421 00:18:05,735 --> 00:18:06,810 Ne ceux-ci vont ensemble? 422 00:18:06,810 --> 00:18:08,070 Donc, je alterne place. 423 00:18:08,070 --> 00:18:11,784 >> Ou je pourrais faire quelque chose comme ça, citant oblique ou barre oblique inverse devis. 424 00:18:11,784 --> 00:18:14,200 Franchement, qui commence juste à devenir très illisible et laid. 425 00:18:14,200 --> 00:18:16,790 Mais ce serait atteindre le même résultat que bien. 426 00:18:16,790 --> 00:18:19,760 >> Donc, si je devais exécuter cette requête maintenant, nous allons voir ce qui se passe. 427 00:18:19,760 --> 00:18:22,740 Je vais aller de l'avant maintenant et plutôt à exécuter le code PHP, qui 428 00:18:22,740 --> 00:18:24,610 est où vous allez jouer dans sept problème posé, 429 00:18:24,610 --> 00:18:27,200 Je vais aller à la place de PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 Et je vais manuellement pour aller à l'onglet SQL, 431 00:18:29,770 --> 00:18:31,580 et laissez-moi un zoom avant sur l'interface. 432 00:18:31,580 --> 00:18:34,007 Et je vais coller la chose que je viens tapé. 433 00:18:34,007 --> 00:18:36,090 Et le codage de couleur a changé un peu maintenant, 434 00:18:36,090 --> 00:18:38,750 simplement parce que les formats de programme les choses un peu différemment. 435 00:18:38,750 --> 00:18:41,960 Mais remarque que tout ce que je l'ai fait est je l'ai dit, insérer dans l'utilisateur. 436 00:18:41,960 --> 00:18:45,790 Je l'ai précisé, puis, dans une virgule séparés liste entre parenthèses les deux 437 00:18:45,790 --> 00:18:48,850 domaines que je veux insérer, et alors je l'ai dit littéralement valeurs 438 00:18:48,850 --> 00:18:51,510 suivie par une autre parenthèse, et ensuite les deux valeurs 439 00:18:51,510 --> 00:18:53,520 Je veux plug-in, et maintenant pour faire bonne mesure, 440 00:18:53,520 --> 00:18:55,010 Je vais mettre un point-virgule à la fin. 441 00:18:55,010 --> 00:18:56,570 Ainsi, ce ne sont pas C. Cela ne veut pas PHP. 442 00:18:56,570 --> 00:18:59,970 Ceci est maintenant SQL, et je suis coller dans cette interface basée sur le web qui est 443 00:18:59,970 --> 00:19:02,710 aller juste pour me laisser, dès que je clique sur Go, 444 00:19:02,710 --> 00:19:08,060 exécuter cette requête sur la base de données fonctionne à l'intérieur du CS50 IDE. 445 00:19:08,060 --> 00:19:09,470 >> Donc, ce qui est bon. 446 00:19:09,470 --> 00:19:12,520 Notez que dit une rangée inséré, est allé super rapide, 447 00:19:12,520 --> 00:19:15,190 0,0054 secondes pour insérer ces données. 448 00:19:15,190 --> 00:19:16,610 Donc, cela semble assez saine. 449 00:19:16,610 --> 00:19:19,350 Il reformaté mon requête pour moi ici juste pour le voir 450 00:19:19,350 --> 00:19:21,730 dans une sorte de version couleur codée. 451 00:19:21,730 --> 00:19:24,540 Mais maintenant, si je clique Parcourir, remarquer que, même 452 00:19:24,540 --> 00:19:29,070 si il ya beaucoup de désordre sur l'écran, ma table a maintenant deux rangées. 453 00:19:29,070 --> 00:19:30,700 >> Alors, laissez-moi aller de l'avant et faire une autre. 454 00:19:30,700 --> 00:19:33,760 Au lieu de cela, laissez-moi allez dans l'onglet SQL nouveau. 455 00:19:33,760 --> 00:19:40,723 Et cette fois, je vais insérer quelque chose comme Rob et son nom sera Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Disons cliquez sur Enregistrer. 458 00:19:44,040 --> 00:19:46,140 Oops, plutôt aller. 459 00:19:46,140 --> 00:19:48,890 >> Cliquez sur Parcourir à nouveau, et maintenant je dois remarquer deux rangées. 460 00:19:48,890 --> 00:19:52,390 Donc, cela est juste une façon plus complexe moyen d'ouvrir Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 et juste en tapant une ligne dans une colonne. 462 00:19:54,010 --> 00:19:57,070 Mais ce qui est important est que nous avons maintenant la syntaxe 463 00:19:57,070 --> 00:20:00,220 avec laquelle écrire le code de sorte que en fin de compte, nous pourrions réellement 464 00:20:00,220 --> 00:20:01,790 et faire un peu de cela. 465 00:20:01,790 --> 00:20:05,380 Rappelons que les supports de PHP des variables super-globales. 466 00:20:05,380 --> 00:20:08,415 >> Ce qui est à l'intérieur du dollar signer GET soulignement en PHP? 467 00:20:08,415 --> 00:20:10,290 Nous avons pris un coup d'œil à l'un ou deux exemples simples. 468 00:20:10,290 --> 00:20:15,640 Et dans PSet6, souvenez vous avez bonjour dot PHP qui utilise cette variable. 469 00:20:15,640 --> 00:20:17,870 Ce qui se passe là-dedans? 470 00:20:17,870 --> 00:20:21,015 Ou quel est-il? 471 00:20:21,015 --> 00:20:22,522 Un peu plus fort. 472 00:20:22,522 --> 00:20:23,790 >> AUDIENCE: [inaudible] 473 00:20:23,790 --> 00:20:25,030 >> DAVID MALAN: Il est un de neige graine de tableau, ce qui 474 00:20:25,030 --> 00:20:27,714 est juste une façon élégante de dire un tableau qui comporte des paires clé-valeur. 475 00:20:27,714 --> 00:20:28,880 Et les touches ne sont pas numérique. 476 00:20:28,880 --> 00:20:30,420 Ils sont des mots ou des chaînes. 477 00:20:30,420 --> 00:20:32,750 Et précisément, ce sont les paires clé-valeur? 478 00:20:32,750 --> 00:20:35,110 D'où viennent-ils? 479 00:20:35,110 --> 00:20:35,620 Pardon? 480 00:20:35,620 --> 00:20:36,994 >> AUDIENCE: [inaudible] 481 00:20:36,994 --> 00:20:37,660 DAVID MALAN: Non? 482 00:20:37,660 --> 00:20:40,700 Où faire les touche paires de valeurs viennent? 483 00:20:40,700 --> 00:20:42,490 Répete? 484 00:20:42,490 --> 00:20:44,610 De nouveau? 485 00:20:44,610 --> 00:20:46,472 Suis-je la seule chose de l'audience? 486 00:20:46,472 --> 00:20:47,810 >> [Rires] 487 00:20:47,810 --> 00:20:49,042 >> Cela est vrai, oui? 488 00:20:49,042 --> 00:20:50,435 >> AUDIENCE: [inaudible] 489 00:20:50,435 --> 00:20:52,560 DAVID MALAN: Ouais, ils provenir de la chaîne de requête. 490 00:20:52,560 --> 00:20:55,380 Donc, si vous rembobinez à temps pour quand nous avons joué avec Google 491 00:20:55,380 --> 00:20:59,600 et nous sommes passés à Google.com slash Recherche d'interrogation q est égal chats, 492 00:20:59,600 --> 00:21:03,550 si je devais appuyez sur Entrée et si Google ont été mis en œuvre en PHP, 493 00:21:03,550 --> 00:21:07,017 Code PHP que Google a écrit auraient accès à signe dollar 494 00:21:07,017 --> 00:21:11,600 GET souligner l'intérieur de laquelle est une clé appelée Q et une valeur 495 00:21:11,600 --> 00:21:17,680 appelés chats qu'il peut ensuite utiliser utilisé pour faire une recherche réelle avec. 496 00:21:17,680 --> 00:21:20,860 >> Donc, en fait, ce que je vais faire est maintenant revenir à mon code PHP 497 00:21:20,860 --> 00:21:23,140 que vous aurez à nouveau de voir davantage dans PSet7. 498 00:21:23,140 --> 00:21:25,440 Et au lieu de brancher dans lequel les valeurs codées des disques 499 00:21:25,440 --> 00:21:27,630 ne semble pas comme un très site web dynamique, 500 00:21:27,630 --> 00:21:30,680 Je vais vous donner un teaser de ce que votre code réel ferait. 501 00:21:30,680 --> 00:21:32,854 Vous mettriez en deux question marque comme ça. 502 00:21:32,854 --> 00:21:34,270 Je ne sais pas ce que le nom d'utilisateur est. 503 00:21:34,270 --> 00:21:37,390 Je ne sais pas ce que le nom va être, 504 00:21:37,390 --> 00:21:39,470 mais je ne sais que je peux obtenir dynamiquement. 505 00:21:39,470 --> 00:21:43,420 >> Donc, si le code que nous écrivons maintenant est le code en cours d'exécution sur les serveurs de Google, 506 00:21:43,420 --> 00:21:46,940 ou, si cela est bonjour dot PHP, qui est livré avec PSet6, 507 00:21:46,940 --> 00:21:48,650 Je vais passer dans la fonction de requête 508 00:21:48,650 --> 00:21:51,450 tout comme printf, deux autres arguments. 509 00:21:51,450 --> 00:21:57,120 GET, devis, nom d'utilisateur unquote, et GET, devis, nom unquote. 510 00:21:57,120 --> 00:22:00,720 Et maintenant, notez ce que le structure générale est ici. 511 00:22:00,720 --> 00:22:03,320 Je dois à gauche côté de l'appel, 512 00:22:03,320 --> 00:22:05,480 cette fonction appelée requête en PHP. 513 00:22:05,480 --> 00:22:08,160 Je dois toujours comme une première l'argument, juste une chaîne de texte. 514 00:22:08,160 --> 00:22:11,000 >> Mais cette chaîne de texte est écrite dans un langage appelé SQL. 515 00:22:11,000 --> 00:22:12,616 Et franchement, il est pas une grosse langue. 516 00:22:12,616 --> 00:22:14,990 Nous allons seulement parler formellement aujourd'hui, vraiment. 517 00:22:14,990 --> 00:22:17,031 Et puis en problème posé sept, il ya relativement 518 00:22:17,031 --> 00:22:18,800 quelques caractéristiques que nous sommes va exploiter. 519 00:22:18,800 --> 00:22:22,530 Les points d'interrogation, cependant, signifient brancher une valeur ici et bouchon dans une autre valeur 520 00:22:22,530 --> 00:22:23,130 Ici. 521 00:22:23,130 --> 00:22:26,010 Et remarquez, je l'ai omis ce du monde sacrément quote-- 522 00:22:26,010 --> 00:22:30,470 it-- autour de la cotation marque cette fois. 523 00:22:30,470 --> 00:22:34,930 Je l'ai omis la citation marques autour de l'interrogation, 524 00:22:34,930 --> 00:22:36,410 Désolé, cette fois-ci. 525 00:22:36,410 --> 00:22:38,870 >> Donc, ce qui est agréable à ce sujet interrogation caractéristique qui 526 00:22:38,870 --> 00:22:42,830 PHP tend à soutenir, Ruby et Python et d'autres langues, 527 00:22:42,830 --> 00:22:45,730 Cela signifie simplement prise dans certains appréciez ici et vous savez quoi? 528 00:22:45,730 --> 00:22:48,300 Vous comprenez si vous souhaitez utiliser guillemets simples ou doubles. 529 00:22:48,300 --> 00:22:50,966 Ne me dérangez pas avec ceux intellectuellement détails inintéressants. 530 00:22:50,966 --> 00:22:53,780 Mais, assurez-vous qu'il est correct de sorte que mon code est finalement 531 00:22:53,780 --> 00:22:57,010 opérationnelle et sécuritaire, qui aura un sens avant longtemps. 532 00:22:57,010 --> 00:23:00,460 >> Maintenant, combien d'arguments totalisera, juste pour être clair, est la fonction requête prise? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Tout le monde veut voter pour plus de deux? 535 00:23:07,581 --> 00:23:08,080 Trois? 536 00:23:08,080 --> 00:23:10,001 Bien sûr, pourquoi? 537 00:23:10,001 --> 00:23:10,920 Pourquoi trois? 538 00:23:10,920 --> 00:23:12,305 >> AUDIENCE: [inaudible] 539 00:23:12,305 --> 00:23:13,180 DAVID MALAN: Exactement. 540 00:23:13,180 --> 00:23:14,610 La première partie est la chaîne. 541 00:23:14,610 --> 00:23:18,640 Le second argument est le signe dollar souligner GET support nom d'utilisateur. 542 00:23:18,640 --> 00:23:21,950 Et le troisième argument est le même chose, mais juste le nom. 543 00:23:21,950 --> 00:23:24,590 En d'autres termes, maintenant si je devais un formulaire web 544 00:23:24,590 --> 00:23:27,149 qui a eu pour les champs de texte, un pour le nom de l'utilisateur, 545 00:23:27,149 --> 00:23:29,690 un pour son nom, tout simplement comme vous verriez dans un site Web 546 00:23:29,690 --> 00:23:32,120 lorsque vous vous inscrivez pour un certain site Web, cela pourrait 547 00:23:32,120 --> 00:23:35,450 être le code sur l'extrémité arrière que fait réellement l'insertion maintenant 548 00:23:35,450 --> 00:23:37,220 dans la base de données. 549 00:23:37,220 --> 00:23:40,870 >> Maintenant, en revanche, de laisser une avance rapide. 550 00:23:40,870 --> 00:23:43,840 Supposons un utilisateur est maintenant vous connecter et que vous voulez 551 00:23:43,840 --> 00:23:48,860 d'écrire du code PHP qui vérifie si la personne qui vient de se connecter 552 00:23:48,860 --> 00:23:52,250 est en fait un utilisateur, vous pouvez utiliser la syntaxe assez simple. 553 00:23:52,250 --> 00:23:55,832 Vous pouvez dire SELECT, disons étoiles, où étoiles signifie tout. 554 00:23:55,832 --> 00:23:57,540 Je ne sais pas ce que je veulent, donc juste me donner 555 00:23:57,540 --> 00:24:01,585 toutes les colonnes de la table appelé les utilisateurs où, et cela est agréable. 556 00:24:01,585 --> 00:24:03,710 Choisir soutient ce qui est appelé un prédicat, qui est 557 00:24:03,710 --> 00:24:06,630 comme une façon de qualifier ce que vous voulez. 558 00:24:06,630 --> 00:24:10,590 Où nom d'utilisateur est égal entre guillemets Malan. 559 00:24:10,590 --> 00:24:13,680 Donc, ici aussi, je l'ai embarqué l'intérieur de l'argument 560 00:24:13,680 --> 00:24:16,110 à une fonction de PHP, une ligne de code SQL. 561 00:24:16,110 --> 00:24:18,680 Et que ce code SQL le temps va littéralement 562 00:24:18,680 --> 00:24:21,790 pour rechercher entre guillemets Malan. 563 00:24:21,790 --> 00:24:24,420 >> Maintenant que tout ce qui est pas utile, donc je vais sauter cette 564 00:24:24,420 --> 00:24:28,650 et je vais mettre de côté cette astuce de Brady, et aller 565 00:24:28,650 --> 00:24:30,990 et plug-in à la place un point d'interrogation ici. 566 00:24:30,990 --> 00:24:33,290 Donc, juste pour être clair, ce qui devrait être mon second argument 567 00:24:33,290 --> 00:24:37,480 être si quelqu'un vient connecté et je vouloir vérifier si il ou elle est en fait 568 00:24:37,480 --> 00:24:39,265 un utilisateur? 569 00:24:39,265 --> 00:24:40,140 AUDIENCE: [inaudible] 570 00:24:40,140 --> 00:24:40,890 DAVID MALAN: Ouais. 571 00:24:40,890 --> 00:24:44,120 Je entends dollar signe de soulignement Obtenez un devis, nom d'utilisateur unquote. 572 00:24:44,120 --> 00:24:50,040 Et cela devrait revenir à moi l'une des lignes dans ma base de données 573 00:24:50,040 --> 00:24:51,986 qui ont un nom d'utilisateur de Malan. 574 00:24:51,986 --> 00:24:54,860 Maintenant, je l'espère, je vais revenir zéro si Malan n'a jamais été ici, 575 00:24:54,860 --> 00:24:56,290 ou si il a un. 576 00:24:56,290 --> 00:24:59,026 Je ne devrais pas revenir deux ou trois ou quatre. 577 00:24:59,026 --> 00:24:59,526 Pourquoi? 578 00:24:59,526 --> 00:25:00,220 >> AUDIENCE: [inaudible] 579 00:25:00,220 --> 00:25:01,120 >> DAVID MALAN: je l'ai dit uniques, non? 580 00:25:01,120 --> 00:25:01,750 Raison simple. 581 00:25:01,750 --> 00:25:04,030 Parce que je l'ai dit il faut que ce être unique, tout logiquement, 582 00:25:04,030 --> 00:25:07,940 vous ne pouvez avoir zéro ou une Malans dans cette table de base de données particulière. 583 00:25:07,940 --> 00:25:10,965 Maintenant, en passant, juste pour que vous avez vu il, même si je continue à utiliser GET 584 00:25:10,965 --> 00:25:14,350 et même si PSet6 seulement utilisés GET, vous pouvez certainement POST. 585 00:25:14,350 --> 00:25:17,212 Et de rappeler que Postes est un autre technique pour la soumission d'informations 586 00:25:17,212 --> 00:25:19,170 à partir d'un formulaire, mais il ne se présente pas dans l'URL. 587 00:25:19,170 --> 00:25:22,690 Il est un peu plus sécurisé certainement pour des choses comme les noms d'utilisateur et mots de passe, 588 00:25:22,690 --> 00:25:25,210 qui PSet7 sera, en fait, impliquer. 589 00:25:25,210 --> 00:25:28,130 >> Donc, nous allons le faire en PHP MyAdmin et de voir ce qui se passe. 590 00:25:28,130 --> 00:25:30,020 Je vais aller sur l'onglet MySQL. 591 00:25:30,020 --> 00:25:34,450 Et remarquez que la valeur par défaut pour PHP MyAdmin, juste pour essayer d'être utile, 592 00:25:34,450 --> 00:25:37,050 est de sélectionner étoiles des utilisateurs où un. 593 00:25:37,050 --> 00:25:39,430 Eh bien, on est toujours vrai, donc cela a l'idiot efficace 594 00:25:39,430 --> 00:25:40,400 il suffit de sélectionner du tout. 595 00:25:40,400 --> 00:25:42,691 Mais je vais être un peu plus pédant et manuellement 596 00:25:42,691 --> 00:25:45,920 taper étoiles SELECT FROM utilisateurs. 597 00:25:45,920 --> 00:25:48,294 >> Maintenant, techniquement, vous pouvez citer le nom des tables. 598 00:25:48,294 --> 00:25:50,460 Il est rare que vous devez, Mais remarquez ce ne sont pas 599 00:25:50,460 --> 00:25:52,240 vos citations normales sur le clavier américain. 600 00:25:52,240 --> 00:25:54,760 Ceci est la backtick dite, qui est généralement sur la main en haut à gauche 601 00:25:54,760 --> 00:25:56,000 coin de votre clavier. 602 00:25:56,000 --> 00:25:58,500 Mais il est rare que vous aurez effectivement besoin de se soucier de cela, 603 00:25:58,500 --> 00:25:59,950 donc je vais juste omettre de toute façon. 604 00:25:59,950 --> 00:26:02,280 Alors maintenant, laissez-moi aller de l'avant et a frappé aller. 605 00:26:02,280 --> 00:26:06,616 Et le nombre de lignes que je devrais obtenir retour lorsque je sélectionne étoiles des utilisateurs? 606 00:26:06,616 --> 00:26:08,407 >> AUDIENCE: [inaudible] 607 00:26:08,407 --> 00:26:09,990 DAVID MALAN: Le nombre de lignes, bien sûr. 608 00:26:09,990 --> 00:26:12,390 Mais combien dans ce histoire concrète en ce moment? 609 00:26:12,390 --> 00:26:14,640 Deux, parce qu'il n'y avait moi et il y avait Rob. 610 00:26:14,640 --> 00:26:19,370 Donc, si je clique sur OK, je vois visuellement que Je suis devenu le dos, en effet, deux rangées. 611 00:26:19,370 --> 00:26:22,060 Il ya beaucoup de désordre sur la écran, mais je ne vois que deux rangées. 612 00:26:22,060 --> 00:26:28,580 En revanche, si je fais cela à nouveau et à faire SELECT étoiles des utilisateurs, où username 613 00:26:28,580 --> 00:26:31,840 égal à égal entre guillemets Malan, maintenant si je clique sur Go, 614 00:26:31,840 --> 00:26:33,970 Je vais seulement revenir une rangée. 615 00:26:33,970 --> 00:26:36,499 Et enfin, si je fais quelque chose comme ceci, supposons 616 00:26:36,499 --> 00:26:38,290 que je ne me soucie pas obtenir tout, 617 00:26:38,290 --> 00:26:41,020 qui est une sorte de sens aujourd'hui, parce qu'il n'y a que deux colonnes. 618 00:26:41,020 --> 00:26:43,103 Il est pas comme je sélectionne une énorme quantité de données. 619 00:26:43,103 --> 00:26:46,720 Supposons que je vais de l'avant et ne SELECT name FROM 620 00:26:46,720 --> 00:26:51,990 utilisateurs, où username est égal Malan, Ce qui est bien à propos de SQL honnêtement, 621 00:26:51,990 --> 00:26:54,290 est que cela a vraiment fait juste ce que vous lui demandez de faire. 622 00:26:54,290 --> 00:26:57,550 Il est assez succinct, mais vous littéralement juste dire ce que vous voulez faire. 623 00:26:57,550 --> 00:27:01,130 Sélectionnez le nom des utilisateurs où le nom d'utilisateur est égal Malan. 624 00:27:01,130 --> 00:27:03,440 Et il est vraiment explicite. 625 00:27:03,440 --> 00:27:08,410 Donc, maintenant, si je frappe Go, combien rangées vais-je récupérer? 626 00:27:08,410 --> 00:27:10,770 Un, parce qu'il est juste Malan, je l'espère. 627 00:27:10,770 --> 00:27:13,100 Ou zéro si il est pas là, mais un maximum. 628 00:27:13,100 --> 00:27:17,610 >> Et combien de colonnes vais-je récupérer? 629 00:27:17,610 --> 00:27:18,450 Combien de colonnes? 630 00:27:18,450 --> 00:27:20,658 Cette fois, je vais juste pour en obtenir un parce que je ne l'ai pas 631 00:27:20,658 --> 00:27:22,380 sélectionnez étoiles, qui est tout. 632 00:27:22,380 --> 00:27:27,900 Maintenant, je suis tout simplement en sélectionnant le nom, donc je juste revenir une colonne et une rangée. 633 00:27:27,900 --> 00:27:31,730 Et il semble sorte de manière appropriée ridicule, simplement en regardant super- 634 00:27:31,730 --> 00:27:33,060 petite comme ça. 635 00:27:33,060 --> 00:27:34,290 Donc, ce qui se passe vraiment? 636 00:27:34,290 --> 00:27:36,890 Lorsque vous exécutez une requête SQL requête en utilisant select, 637 00:27:36,890 --> 00:27:38,700 ce que vous obtenez retour de la base de données 638 00:27:38,700 --> 00:27:42,970 est comme une table temporaire à rangées et colonnes, peut-être, 639 00:27:42,970 --> 00:27:46,260 mais que tout ce qui omettent n'a pas été effectivement choisi par vous. 640 00:27:46,260 --> 00:27:49,010 Ainsi, il est comme si quelqu'un avait un grand tableur de tous les élèves 641 00:27:49,010 --> 00:27:51,610 enregistré pour certains groupe d'étudiants, et vous dites, 642 00:27:51,610 --> 00:27:55,097 me donner la totalité de la première année qui ont enregistré pour notre groupe d'étudiants, ce qui 643 00:27:55,097 --> 00:27:56,930 votre collègue dans le groupe d'étudiants pourrait faire 644 00:27:56,930 --> 00:27:58,430 est qu'ils pourraient simplement la main vous toute la feuille de calcul. 645 00:27:58,430 --> 00:27:59,742 Cela revient à dire sélectionnez étoiles. 646 00:27:59,742 --> 00:28:02,200 Et il est un peu ennuyeux si vous ne vouliez la première année. 647 00:28:02,200 --> 00:28:05,640 Et donc, si vous dites à la place, Sélectionner la vedette de la table de base de données 648 00:28:05,640 --> 00:28:08,470 où l'année est égal à citation, freshman unquote, 649 00:28:08,470 --> 00:28:10,810 il est comme si votre ami dans le groupe d'étudiants 650 00:28:10,810 --> 00:28:13,770 littéralement mis en évidence et copiés uniquement les lignes de première année, 651 00:28:13,770 --> 00:28:16,780 les coller dans un nouveau Google Tableur ou un fichier Excel, 652 00:28:16,780 --> 00:28:18,860 et vous rendit le fichier résultant seulement. 653 00:28:18,860 --> 00:28:21,710 Voilà tout ce qui se passe sur le plan conceptuel ici. 654 00:28:21,710 --> 00:28:23,920 >> Donc à la fin, nous pouvons faire des choses assez de fantaisie 655 00:28:23,920 --> 00:28:26,560 en stockant des choses comme les noms d'utilisateur et les mots de passe et autres. 656 00:28:26,560 --> 00:28:30,310 Mais, il se trouve, nous devrions le faire un peu différemment que cela. 657 00:28:30,310 --> 00:28:34,750 Il est pas si intelligent pour ne stocker un nom d'utilisateur et un mot de passe. 658 00:28:34,750 --> 00:28:37,790 Quelqu'un plus tôt, je pense ici-bas, suggéré une ID. 659 00:28:37,790 --> 00:28:40,787 Maintenant, une pièce d'identité pourrait être comme un Harvard ID ou ID net de Yale, 660 00:28:40,787 --> 00:28:42,870 mais il pourrait être encore plus simple dans notre cas, de base de données. 661 00:28:42,870 --> 00:28:45,120 Et en effet, le cas commun est d'avoir une autre colonne. 662 00:28:45,120 --> 00:28:46,953 Et je vais aller de l'avant et modifier ma table. 663 00:28:46,953 --> 00:28:49,521 Et si vous jouez avec cette interface pour PSet7, 664 00:28:49,521 --> 00:28:51,770 vous verrez que vous pouvez vérifier ce bouton ici et ajouter 665 00:28:51,770 --> 00:28:53,750 un champ au début de la table. 666 00:28:53,750 --> 00:28:56,720 Et maintenant, si je clique sur OK, ça va de me donner une de ces formes 667 00:28:56,720 --> 00:28:57,600 à partir plus tôt. 668 00:28:57,600 --> 00:29:00,170 Je vais ajouter un champ appelé ID. 669 00:29:00,170 --> 00:29:03,070 Et je vais en faire un type numérique. 670 00:29:03,070 --> 00:29:05,362 >> Je dois tout un tas de valeurs pour des valeurs numériques. 671 00:29:05,362 --> 00:29:08,677 Je vais juste choisir un INT et ne vous inquiétez pas sur les tailles disparates. 672 00:29:08,677 --> 00:29:10,510 Je ne dois pas spécifier une longueur ou une valeur, 673 00:29:10,510 --> 00:29:13,710 parce que ça va être 32 bits, peu importe quoi. 674 00:29:13,710 --> 00:29:16,070 Attributs, nous ne voyions pas auparavant. 675 00:29:16,070 --> 00:29:18,410 Toute participation dans l'une de ces options de menu cette fois? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Pour un INT? 678 00:29:23,745 --> 00:29:24,620 Qu'est-ce que vous proposez? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 Non? 681 00:29:28,445 --> 00:29:29,570 Faire aucune de ces sens? 682 00:29:29,570 --> 00:29:30,536 Ouais. 683 00:29:30,536 --> 00:29:31,900 Ouais, non signé, non? 684 00:29:31,900 --> 00:29:35,930 >> Généralement, si nous allons donner à chacun un numéro unique, qui 685 00:29:35,930 --> 00:29:38,200 est où cette histoire est aller, je veux vraiment que 686 00:29:38,200 --> 00:29:41,919 une personne d'avoir le nombre comme zéro et un et deux et trois et quatre. 687 00:29:41,919 --> 00:29:43,710 Je ne veux pas faire face avec des chiffres négatifs. 688 00:29:43,710 --> 00:29:45,210 Il semble juste comme une complexité excessive. 689 00:29:45,210 --> 00:29:48,470 Je veux quatre milliards de valeurs possibles, pas quatre milliards valeurs possibles, 690 00:29:48,470 --> 00:29:50,699 donc je viens doublé la la capacité de mon INT. 691 00:29:50,699 --> 00:29:53,490 En aparté, si vous voulez porter ce à quelque chose comme Facebook, 692 00:29:53,490 --> 00:29:56,190 Retour dans une sorte de ma journée quand Facebook premier est sorti, 693 00:29:56,190 --> 00:29:59,510 Je crois que ce qu'ils étaient en utilisant dans leur base de données MySQL 694 00:29:59,510 --> 00:30:02,856 pour stocker un utilisateur de identificateur, était juste un INT. 695 00:30:02,856 --> 00:30:05,230 Mais bien sûr, il ya beaucoup de vraies personnes dans le monde. 696 00:30:05,230 --> 00:30:07,438 Il ya beaucoup de faux Facebook comptes dans le monde. 697 00:30:07,438 --> 00:30:11,701 Et donc finalement, Facebook a débordé la taille d'un INT, un quatre milliards 698 00:30:11,701 --> 00:30:12,200 valeur. 699 00:30:12,200 --> 00:30:15,032 Ce qui explique pourquoi, si vous regardez autour et il ya des sites Web 700 00:30:15,032 --> 00:30:16,740 qui peut vous dire ce que votre ID unique est. 701 00:30:16,740 --> 00:30:19,781 Et si vous ne choisissez un nom d'utilisateur dans Facebook, vous verrez votre ID unique. 702 00:30:19,781 --> 00:30:23,080 Je pense qu'il est le profil PHP dot interrogation ID est égal à quelque chose. 703 00:30:23,080 --> 00:30:27,210 Voilà maintenant quelque chose comme un grand INT ou un long si vous voulez, 704 00:30:27,210 --> 00:30:29,700 qui est une valeur de 64 bits ou quelque chose de comparable. 705 00:30:29,700 --> 00:30:33,620 >> Ainsi, même dans le monde réel faire ces questions finalement parfois importance. 706 00:30:33,620 --> 00:30:37,600 Et il se trouve ici, si je suis donnant tous mes utilisateurs un identifiant unique, 707 00:30:37,600 --> 00:30:41,750 Je veux être super explicite et minimalement faire de ce domaine unique. 708 00:30:41,750 --> 00:30:44,750 Mais il se trouve il ya une morceau de nomenclature aujourd'hui aussi 709 00:30:44,750 --> 00:30:46,470 qui est une clé primaire. 710 00:30:46,470 --> 00:30:49,800 Si vous concevez une base de données table et vous savez à l'avance 711 00:30:49,800 --> 00:30:55,580 que l'une des colonnes de la table devrait et va identifier de manière unique les lignes 712 00:30:55,580 --> 00:30:58,500 dans le tableau, vous voulez spécifier et dire à la base de données, 713 00:30:58,500 --> 00:31:00,250 ceci est mon clé primaire. 714 00:31:00,250 --> 00:31:02,110 Il pourrait y avoir des doublons dans d'autres domaines, 715 00:31:02,110 --> 00:31:06,330 mais je dis la base de données que cette est mon premier, mon domaine le plus important, 716 00:31:06,330 --> 00:31:08,420 qui est assuré d'être unique. 717 00:31:08,420 --> 00:31:09,660 >> Maintenant, cela semble redondant. 718 00:31:09,660 --> 00:31:13,830 Je propose maintenant que nous ajouter, en cliquant sur Enregistrer ici, 719 00:31:13,830 --> 00:31:17,210 un called-- sur le terrain et je vais aller de l'avant et cliquez sur AI, 720 00:31:17,210 --> 00:31:19,720 nous y reviendrons dans un instant, Enregistrer. 721 00:31:19,720 --> 00:31:22,540 Je propose maintenant que ma table ressembler à ceci. 722 00:31:22,540 --> 00:31:26,305 Je dois un champ INT appelé ID, un champ CHAR appelé Nom d'utilisateur, 723 00:31:26,305 --> 00:31:31,100 un champ de VARCHAR appelé Nom, mais ID, si elle est primaire et donc unique, 724 00:31:31,100 --> 00:31:33,760 pourquoi ai-je perds tout introduisant ce 725 00:31:33,760 --> 00:31:39,140 est effectivement une deuxième uniques champ appelé ID qui est un INT? 726 00:31:39,140 --> 00:31:41,980 >> Nom d'utilisateur, le rappel, était déjà unique, nous l'avons dit. 727 00:31:41,980 --> 00:31:45,350 Il suffit donc logiquement, vous ne devez pas une expérience à la raison de base de données 728 00:31:45,350 --> 00:31:47,570 grâce à cela, pourquoi pourrais-je vous ai présenté 729 00:31:47,570 --> 00:31:50,065 INT comme mon identifiant unique ainsi? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 Quel est this-- disent à nouveau? 732 00:31:53,930 --> 00:31:55,580 >> AUDIENCE: [inaudible] 733 00:31:55,580 --> 00:31:59,534 >> DAVID MALAN: Random l'accès est plus facile, pourquoi? 734 00:31:59,534 --> 00:32:00,410 >> AUDIENCE: [inaudible] 735 00:32:00,410 --> 00:32:02,367 DAVID MALAN: Ouais, il est simplement accéder numéros. 736 00:32:02,367 --> 00:32:04,750 Donc, si vous pensez vraiment de cette est une table, comme un tableau, 737 00:32:04,750 --> 00:32:07,690 maintenant je dois identificateurs uniques que je peux sauter partout. 738 00:32:07,690 --> 00:32:11,520 Et mieux que cela est encore celle Quelle est la taille d'un INT va être à nouveau? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bits ou des octets. Quatre 741 00:32:15,800 --> 00:32:17,750 >> Quelle est la taille de mon nom d'utilisateur va être? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Au maximum? 744 00:32:21,990 --> 00:32:22,880 16 octets. 745 00:32:22,880 --> 00:32:26,080 >> Donc, si vous êtes vraiment se soucier les performances de votre code, 746 00:32:26,080 --> 00:32:31,390 repensez à PSet5, préféreriez-vous à rechercher une valeur de quatre octets ou un 16 747 00:32:31,390 --> 00:32:32,240 valeur de l'octet, non? 748 00:32:32,240 --> 00:32:33,810 Il est vraiment aussi simple que cela. 749 00:32:33,810 --> 00:32:38,060 Vous avez à faire quatre fois plus de travail pour rechercher les noms d'utilisateurs, car ces 750 00:32:38,060 --> 00:32:38,830 sont 16 octets. 751 00:32:38,830 --> 00:32:41,320 Donc, vous avez littéralement comparer tous les 16 octets d'être 752 00:32:41,320 --> 00:32:43,140 que oui, cela est le nom d'utilisateur que je veux. 753 00:32:43,140 --> 00:32:46,610 Alors que pour une INT, vous pouvez le faire avec seulement quatre octets. 754 00:32:46,610 --> 00:32:49,212 >> Et comme un aparté pour ceux intéressé par le matériel informatique, 755 00:32:49,212 --> 00:32:52,420 il se trouve que vous pouvez adapter à quelque chose comme INT ou une valeur 32 bits dans quelque chose 756 00:32:52,420 --> 00:32:55,330 appelé un registre dans un ordinateur CPU, ce qui signifie qu'il est super, 757 00:32:55,330 --> 00:32:58,400 super rapide, même au plus bas niveau du matériel de l'ordinateur. 758 00:32:58,400 --> 00:33:00,530 Donc, il ya seulement des avantages tout autour. 759 00:33:00,530 --> 00:33:01,530 Qu'est-ce que cela signifie? 760 00:33:01,530 --> 00:33:04,850 En fait, lorsque vous concevez un table, presque tout le temps base de données 761 00:33:04,850 --> 00:33:07,170 allez-vous avoir pas seules les données que vous vous souciez, 762 00:33:07,170 --> 00:33:09,280 mais aussi quelque chose comme un identificateur unique 763 00:33:09,280 --> 00:33:11,280 parce que ce qui se passe à laissez-nous faire d'autres choses. 764 00:33:11,280 --> 00:33:13,160 Et nous allons trébucher sur un problème ici. 765 00:33:13,160 --> 00:33:15,990 >> Supposons que les utilisateurs disposent pas juste les noms d'utilisateur et les noms, 766 00:33:15,990 --> 00:33:19,540 mais ils ont aussi des choses comme villes et les États et les codes postaux, au moins 767 00:33:19,540 --> 00:33:20,432 ici aux États-Unis. 768 00:33:20,432 --> 00:33:22,390 Donc, je vais aller de l'avant et juste dire rapidement, 769 00:33:22,390 --> 00:33:26,180 me donner trois autres colonnes à la fin de la table. 770 00:33:26,180 --> 00:33:28,900 Et cela va être la ville, ce sera l'État, 771 00:33:28,900 --> 00:33:30,400 et cela va être Zip. 772 00:33:30,400 --> 00:33:32,710 >> Maintenant types City, quelles données ce devrait être, peut-être? 773 00:33:32,710 --> 00:33:35,460 774 00:33:35,460 --> 00:33:35,989 VARCHAR? 775 00:33:35,989 --> 00:33:37,780 Je ne sais pas ce que le le plus long nom est. 776 00:33:37,780 --> 00:33:40,571 Quelque part en Amérique, il ya probablement certains ridiculement long mot, 777 00:33:40,571 --> 00:33:43,605 alors disons juste aller avec 255, un peu historiquement ou arbitraire. 778 00:33:43,605 --> 00:33:44,730 État, ce que vous voulez faire? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Jugement appel, non? 781 00:33:50,367 --> 00:33:51,700 Ce qui est peut-être le plus efficace? 782 00:33:51,700 --> 00:33:53,500 Combien de caractères? 783 00:33:53,500 --> 00:33:55,950 Peut-être que deux, si nous le pouvons sortir avec faire juste, 784 00:33:55,950 --> 00:33:58,250 comme, MA pour le Massachusetts et ainsi de suite. 785 00:33:58,250 --> 00:34:00,520 Donc, je vais aller une valeur de CHAR de deux. 786 00:34:00,520 --> 00:34:03,080 >> Code postal est une question intéressante. 787 00:34:03,080 --> 00:34:06,679 Nous sommes ici à 02138, de sorte que suggère que nous devrions utiliser quoi? 788 00:34:06,679 --> 00:34:07,470 Il est un INT, non? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT, INT, courte? 791 00:34:12,800 --> 00:34:14,521 Court pourrait fonctionner. 792 00:34:14,521 --> 00:34:15,020 Non? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR ou cinq, mais je veux un INT. 795 00:34:20,870 --> 00:34:23,710 Pourquoi repousser sur un INT? 796 00:34:23,710 --> 00:34:26,820 Me persuader de cela. 797 00:34:26,820 --> 00:34:29,210 Quel est stupide au sujet d'un INT, mon idée? 798 00:34:29,210 --> 00:34:29,871 Ouais. 799 00:34:29,871 --> 00:34:31,199 >> AUDIENCE: Prendre plus de mémoire. 800 00:34:31,199 --> 00:34:32,909 >> DAVID MALAN: Prendre plus de mémoire. 801 00:34:32,909 --> 00:34:35,310 Quatre octets, mais vous êtes proposant un code postal 802 00:34:35,310 --> 00:34:39,000 que cinq octets ou quelqu'un était comme CHAR, qui se sent comme hein, qui est pas vraiment 803 00:34:39,000 --> 00:34:39,620 l'affaire. 804 00:34:39,620 --> 00:34:40,489 >> Eh bien, histoire amusante. 805 00:34:40,489 --> 00:34:43,179 Il ya des années, quand je l'habitude d'utiliser Microsoft Outlook pour mon e-mail, 806 00:34:43,179 --> 00:34:45,150 Je voulais éventuellement de passer à Gmail. 807 00:34:45,150 --> 00:34:48,949 Et donc, je exportés de mon contacts depuis Outlook dans un fichier CSV. 808 00:34:48,949 --> 00:34:50,699 Comma Separated Values, qui voulait juste dire que je 809 00:34:50,699 --> 00:34:54,060 eu tous mes noms d'amis et dernier noms et numéros de téléphone et codes postaux 810 00:34:54,060 --> 00:34:54,747 et tout cela. 811 00:34:54,747 --> 00:34:56,580 Et puis je fis la erreur de l'ouvrir 812 00:34:56,580 --> 00:34:58,640 dans Excel, qui est une tableur qui 813 00:34:58,640 --> 00:35:00,289 comprend des fichiers CSV que nous avons vu. 814 00:35:00,289 --> 00:35:03,080 Mais alors, je dois avoir frappé, comme, Commandement ou le contrôle S à un moment donné. 815 00:35:03,080 --> 00:35:06,250 Et Excel apparemment au moment eu une fonction pour laquelle chaque fois qu'il 816 00:35:06,250 --> 00:35:08,100 vu un certain nombre, il a essayé d'être utile. 817 00:35:08,100 --> 00:35:11,610 Et si ce nombre a commencé avec zéros, il serait tout simplement se débarrasser d'eux. 818 00:35:11,610 --> 00:35:13,420 Pourquoi avez-vous besoin leader zéros sur des entiers? 819 00:35:13,420 --> 00:35:15,140 Ils sont de sens, mathématiquement. 820 00:35:15,140 --> 00:35:17,530 Ils ne sont pas de sens dans le système postal américain. 821 00:35:17,530 --> 00:35:19,954 Donc, je l'ai eu pendant des années, à ce jour, je reste 822 00:35:19,954 --> 00:35:22,370 avoir des amis que lorsque le cas rare que je besoin de quelqu'un est 823 00:35:22,370 --> 00:35:24,078 répondre à ces jours, Je vais encore que je vois 824 00:35:24,078 --> 00:35:26,767 avoir un ami à Cambridge, Massachusetts 2138. 825 00:35:26,767 --> 00:35:29,350 Et il est ennuyeux si vous êtes essayer de trier de programmation 826 00:35:29,350 --> 00:35:30,975 générer des enveloppes ou tout simplement notez-le. 827 00:35:30,975 --> 00:35:33,599 Et cela est à cause de cette raison, Je choisi le mauvais type de données. 828 00:35:33,599 --> 00:35:34,490 Donc, je l'aime votre idée. 829 00:35:34,490 --> 00:35:35,650 Prenons un champ CHAR. 830 00:35:35,650 --> 00:35:38,340 Cinq personnages, à l'exception il ya un cas de coin. 831 00:35:38,340 --> 00:35:42,220 Si vous envoyez toujours courrier, parfois zip codes de ces jours, 832 00:35:42,220 --> 00:35:45,360 ils sont, comme, plus quatre. 833 00:35:45,360 --> 00:35:48,200 Donc, nous avons besoin d'un tiret, puis nous avons besoin de quatre autres numéros. 834 00:35:48,200 --> 00:35:50,330 Donc, pour être honnête, il pourrait aller de nombreuses façons différentes. 835 00:35:50,330 --> 00:35:52,371 >> Pour l'instant, je vais continuer à simple et je suis juste 836 00:35:52,371 --> 00:35:54,780 va dire qu'il est un cinq valeur de CHAR et nous sommes 837 00:35:54,780 --> 00:35:56,739 vais sauter tout le tableau de bord plus quatre. 838 00:35:56,739 --> 00:35:58,280 Mais ce sont les sortes de compromis. 839 00:35:58,280 --> 00:36:00,196 Et vous pouvez penser de la mêmes problèmes découlant 840 00:36:00,196 --> 00:36:01,860 avec numéros de téléphone ou d'autres domaines. 841 00:36:01,860 --> 00:36:04,350 >> Et maintenant, cela est effectivement une route folle de descendre. 842 00:36:04,350 --> 00:36:08,000 Supposons deux Rob et moi et Hannah et Maria et [? Davon?] Et Andy 843 00:36:08,000 --> 00:36:12,820 et d'autres sur le personnel vivent tous à Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 Ce fait sentir stupide que je suis ajouter à ma table d'utilisateurs, ville, état, 845 00:36:17,970 --> 00:36:18,630 et zip. 846 00:36:18,630 --> 00:36:20,980 Pourquoi? 847 00:36:20,980 --> 00:36:21,960 >> AUDIENCE: [inaudible] 848 00:36:21,960 --> 00:36:22,918 >> DAVID MALAN: Dites à nouveau? 849 00:36:22,918 --> 00:36:24,310 AUDIENCE: [inaudible] 850 00:36:24,310 --> 00:36:25,850 >> DAVID MALAN: Ils sont toujours va aller ensemble, non? 851 00:36:25,850 --> 00:36:28,660 Quand il se trouve, nous avons utilisé à penser ce fut le cas jusqu'à ce que nous exhaustive 852 00:36:28,660 --> 00:36:30,570 recherché l'ensemble des États-Unis, et il se trouve que 853 00:36:30,570 --> 00:36:32,653 certaines incohérences où plusieurs villes ont 854 00:36:32,653 --> 00:36:35,060 le même zip, ce qui est bizarre. 855 00:36:35,060 --> 00:36:40,580 Mais, si nous imposons pour l'instant que 02138 est toujours Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 Pourquoi dans le monde voudriez-vous stocker dans votre base de données et de Cambridge MA 02138 et 857 00:36:44,910 --> 00:36:49,357 pour moi et pour Hannah et pour Rob et pour [? Davon?] Et pour les autres qui vivent 858 00:36:49,357 --> 00:36:51,190 ici à Cambridge, il est parfaitement redondante. 859 00:36:51,190 --> 00:36:54,480 >> Nous devrions sortir avec juste stocker quoi? 860 00:36:54,480 --> 00:36:55,610 Juste le code postal. 861 00:36:55,610 --> 00:36:58,660 Mais alors, si nous stockons seulement le code postal, je ne veux, sans doute, 862 00:36:58,660 --> 00:37:02,160 pour mon site pour savoir où 02138 est. 863 00:37:02,160 --> 00:37:03,910 Donc, je dois une autre table. 864 00:37:03,910 --> 00:37:04,697 Et cela est OK. 865 00:37:04,697 --> 00:37:07,530 En fait, ceci est un des processus de conception de tables conception 866 00:37:07,530 --> 00:37:11,472 que vous ferez dans PSet7 ainsi lequel vous voulez factoriser données communes. 867 00:37:11,472 --> 00:37:14,430 Tout comme nous avons été hors affacturage code commun et l'affacturage hors commune 868 00:37:14,430 --> 00:37:17,380 styles de CSS, ici aussi dans la base, 869 00:37:17,380 --> 00:37:21,180 si je dois seulement 02138 à unique identifier la ville natale de quelqu'un, 870 00:37:21,180 --> 00:37:25,020 ne pas stocker Cambridge, Mass pour chaque utilisateur repriser dans votre table. 871 00:37:25,020 --> 00:37:29,770 >> Au lieu de cela, avoir un tableau distinct appelé Zips qui devrait avoir ce colonnes? 872 00:37:29,770 --> 00:37:33,490 Probablement un champ ID, juste parce que, pour les principes dont nous parlons maintenant. 873 00:37:33,490 --> 00:37:35,720 Probablement un champ postal pour 02138. 874 00:37:35,720 --> 00:37:38,400 Et puis sans doute ce que les autres colonnes? 875 00:37:38,400 --> 00:37:42,950 Ville et de l'Etat, mais avoir un seul ligne pour 02138, une ligne pour 02139, 876 00:37:42,950 --> 00:37:44,772 une ligne pour 90210. 877 00:37:44,772 --> 00:37:46,730 Et qui est littéralement tous les codes postaux je sais. 878 00:37:46,730 --> 00:37:49,012 >> Alors maintenant, que pouvez-vous faire? 879 00:37:49,012 --> 00:37:51,220 Cette situation est problématique, parce maintenant je dois deux tables. 880 00:37:51,220 --> 00:37:54,660 Donc, mes utilisateurs sont pour la plupart ici, mais leur informations d'état de la ville est 881 00:37:54,660 --> 00:37:55,390 ici. 882 00:37:55,390 --> 00:37:58,635 Donc, il se trouve avec SQL, il ya en fait une façon de joindre l'information, 883 00:37:58,635 --> 00:38:00,470 et vous verrez cela dans le PSet. 884 00:38:00,470 --> 00:38:03,000 >> Mais il se trouve que vous pouvez faire quelque chose comme ça. 885 00:38:03,000 --> 00:38:10,501 Étoiles SELECT FROM utilisateurs, REJOIGNEZ zips ON utilisateurs parsèment zip égale zips parsèment zip. 886 00:38:10,501 --> 00:38:13,360 Qui est un peu verbeux, certes, mais ce juste 887 00:38:13,360 --> 00:38:17,590 des moyens de sélection tout, de la processus de prise de ma table des utilisateurs 888 00:38:17,590 --> 00:38:19,580 et ma table de zips. 889 00:38:19,580 --> 00:38:22,120 Rejoignez-les sur une domaine qu'ils ont dans la colonne. 890 00:38:22,120 --> 00:38:24,780 Donc, en faisant littéralement quelque chose comme ça, et me donner en retour 891 00:38:24,780 --> 00:38:27,360 une nouvelle table temporaire qui est plus large, qui est plus grand, 892 00:38:27,360 --> 00:38:29,450 qui dispose de tous les des colonnes des deux d'entre eux. 893 00:38:29,450 --> 00:38:33,510 Et ce, tout simplement, serait la la syntaxe pour faire quelque chose comme ça. 894 00:38:33,510 --> 00:38:35,540 >> Donc, il ya cette avance, mais il va y 895 00:38:35,540 --> 00:38:38,950 à d'autres décisions de conception vous aurez avoir à faire, non seulement avec des index 896 00:38:38,950 --> 00:38:40,550 mais aussi se heurter à des défis. 897 00:38:40,550 --> 00:38:43,360 En fait, il ya un défi dans toute conception de base de données 898 00:38:43,360 --> 00:38:47,930 lequel parfois deux personnes pourraient vouloir d'accéder aux mêmes lignes de la base de données 899 00:38:47,930 --> 00:38:48,530 table. 900 00:38:48,530 --> 00:38:51,450 Donc, ceci est quelque chose que nous allons rencontrer dans PSet7 ainsi. 901 00:38:51,450 --> 00:38:54,686 >> Mais je pensais que je regarde un attaque qui est possible dans SQL. 902 00:38:54,686 --> 00:38:56,560 Quels sont certains des problèmes qui peuvent survenir? 903 00:38:56,560 --> 00:38:58,170 Donc, vous rencontrez ce dans PSet7. 904 00:38:58,170 --> 00:39:01,874 Et nous vous disons d'emblée ce que le solution codant pour ce problème est. 905 00:39:01,874 --> 00:39:04,790 Mais si vous prenez une classe de niveau supérieur, en particulier dans les systèmes d'exploitation, 906 00:39:04,790 --> 00:39:06,950 vous allez rencontrer une question d'atomicité, 907 00:39:06,950 --> 00:39:10,080 le problème d'essayer de faire plusieurs choses à la fois 908 00:39:10,080 --> 00:39:11,000 sans interruption. 909 00:39:11,000 --> 00:39:14,560 >> Et je pensais que je présente ce idée pour PSet7 par une métaphore 910 00:39:14,560 --> 00:39:18,160 que je me suis appris à Margo Les systèmes d'exploitation de CS164 de Seltzer 911 00:39:18,160 --> 00:39:18,990 années de classe Ago. 912 00:39:18,990 --> 00:39:22,230 Supposons que vous avez un de ces dortoir réfrigérateur dans votre chambre d'étudiant ou de la maison, 913 00:39:22,230 --> 00:39:24,474 et vous avez un vrai penchant pour le lait. 914 00:39:24,474 --> 00:39:27,140 Et oui, vous venez à la maison à partir de classes un jour, vous ouvrez le frigo. 915 00:39:27,140 --> 00:39:27,620 Oh, bon sang. 916 00:39:27,620 --> 00:39:28,870 Il n'y a pas de lait dans le réfrigérateur. 917 00:39:28,870 --> 00:39:32,470 Donc, vous fermez le réfrigérateur, verrouiller la porte, verrouillez votre dortoir, 918 00:39:32,470 --> 00:39:34,770 marcher autour du coin CVS, mettre en ligne, 919 00:39:34,770 --> 00:39:36,312 et commencer à vérifier pour un peu de lait. 920 00:39:36,312 --> 00:39:38,978 Et ça va prendre un certain temps, parce que ceux sacrément Self Checkout 921 00:39:38,978 --> 00:39:40,570 compteurs prennent une éternité à utiliser de toute façon. 922 00:39:40,570 --> 00:39:41,950 Alors en attendant, votre colocataire vient à la maison. 923 00:39:41,950 --> 00:39:43,470 Il ou elle aime vraiment le lait ainsi. 924 00:39:43,470 --> 00:39:45,520 Ils entrent dans la pièce de dortoir, ouvrir le réfrigérateur, oh, bon sang. 925 00:39:45,520 --> 00:39:46,490 Il n'y a pas plus de lait. 926 00:39:46,490 --> 00:39:49,040 >> Donc, il ou elle a aussi va autour du coin. 927 00:39:49,040 --> 00:39:51,670 Mais maintenant, car il est comme deux ou trois ou quatre CVSes proximité, 928 00:39:51,670 --> 00:39:53,800 ils se produisent pour aller à l'un des différentes ceux de la place. 929 00:39:53,800 --> 00:39:55,830 Et maintenant, quelques minutes plus tard, deux d'entre vous 930 00:39:55,830 --> 00:39:58,060 revenir à la maison et ugh, pire problème jamais. 931 00:39:58,060 --> 00:40:00,967 Maintenant, vous avez trop de lait parce que ça va aller aigre. 932 00:40:00,967 --> 00:40:03,050 Et vous aimez le lait, mais vous ne pas vraiment comme le lait. 933 00:40:03,050 --> 00:40:06,730 >> Alors maintenant, ce fut un coûteux erreur parce que vous deux 934 00:40:06,730 --> 00:40:09,870 pris une décision sur la base du état d'une variable que 935 00:40:09,870 --> 00:40:12,660 était en train de être changé par vous, 936 00:40:12,660 --> 00:40:14,560 l'initiateur d'aller chercher du lait. 937 00:40:14,560 --> 00:40:17,785 Donc, ce qui est peut-être un humain solution à ce problème? 938 00:40:17,785 --> 00:40:18,660 AUDIENCE: [inaudible] 939 00:40:18,660 --> 00:40:19,430 DAVID MALAN: Laisser une note, non? 940 00:40:19,430 --> 00:40:21,850 Toujours laisser une note, si vous êtes familier avec ce spectacle. 941 00:40:21,850 --> 00:40:23,100 Oui, il ya deux d'entre nous. 942 00:40:23,100 --> 00:40:25,940 Donc, il faut toujours laisser une note, ou verrouiller littéralement le réfrigérateur 943 00:40:25,940 --> 00:40:28,602 avec une sorte de cadenas ou quelque chose sur le dessus comme ça. 944 00:40:28,602 --> 00:40:31,310 Mais ce qui se passe réellement à être problème clé avec la conception de base de données, 945 00:40:31,310 --> 00:40:34,710 surtout quand vous pourriez avoir plusieurs navigateurs, plusieurs ordinateurs portables, 946 00:40:34,710 --> 00:40:37,450 plusieurs utilisateurs tout en essayant de mettre à jour l'information à la fois. 947 00:40:37,450 --> 00:40:40,590 Informations particulièrement sensibles comme l'information financière, 948 00:40:40,590 --> 00:40:43,350 lequel avec un stock trading site comme vous allez construire, 949 00:40:43,350 --> 00:40:47,270 que faire si vous voulez vérifier combien d'argent vous avez et puis si vous en avez assez, 950 00:40:47,270 --> 00:40:48,490 acheter des actions? 951 00:40:48,490 --> 00:40:50,899 >> Mais que faire si quelqu'un d'autre qui a un compte conjoint avec vous 952 00:40:50,899 --> 00:40:52,690 est essayant simultanément à acheter des actions? 953 00:40:52,690 --> 00:40:55,190 Donc, il ou elle est la vérification de la le solde du compte, à la fois de vous 954 00:40:55,190 --> 00:40:57,540 récupérer le même réponse, il n'y a pas de lait. 955 00:40:57,540 --> 00:41:00,580 Ou les deux de vous remettre la réponse, vous avez 100 $ dans le compte. 956 00:41:00,580 --> 00:41:04,680 Tous les deux vous essayer de faire la décision d'acquérir une action de certaines actions de la société. 957 00:41:04,680 --> 00:41:06,130 >> Et maintenant, qu'est-ce qui se passe? 958 00:41:06,130 --> 00:41:07,140 Vous avez deux actions? 959 00:41:07,140 --> 00:41:08,420 Vous avez pas d'actions? 960 00:41:08,420 --> 00:41:10,320 Problèmes de ce genre peuvent survenir. 961 00:41:10,320 --> 00:41:11,755 Donc, nous allons rencontrer que. 962 00:41:11,755 --> 00:41:14,630 Attaques par injection SQL, heureusement, sont quelque chose que nous allons vous aider avec, 963 00:41:14,630 --> 00:41:17,430 mais ceux-ci sont atrocement communes ces jours encore. 964 00:41:17,430 --> 00:41:18,680 Donc, ceci est juste un exemple. 965 00:41:18,680 --> 00:41:21,290 Je ne fais pas que les revendications Système Harvard PIN est 966 00:41:21,290 --> 00:41:23,130 vulnérable à cette attaque particulière. 967 00:41:23,130 --> 00:41:24,160 Nous avons essayé. 968 00:41:24,160 --> 00:41:26,120 Mais, vous savez que nous avoir un champ de ce type. 969 00:41:26,120 --> 00:41:29,620 Et Net ID de Yale a une semblable écran en regardant ces jours. 970 00:41:29,620 --> 00:41:33,190 Et il se trouve, que peut-être la Système d'axe est mis en oeuvre en PHP. 971 00:41:33,190 --> 00:41:37,050 >> Et si elle were-- il est pas-- qu'ils pourrait avoir le code qui ressemble à ceci. 972 00:41:37,050 --> 00:41:38,210 Ils ont deux variables. 973 00:41:38,210 --> 00:41:42,495 Donnez-moi le nom d'utilisateur et mot de passe de la variable globale Poster Super 974 00:41:42,495 --> 00:41:43,970 dont nous avons parlé plus tôt. 975 00:41:43,970 --> 00:41:47,310 Peut-être que Harvard a une requête comme étoiles SELECT FROM utilisateurs 976 00:41:47,310 --> 00:41:50,005 où username est égale à celle et le mot de passe est égale à celle. 977 00:41:50,005 --> 00:41:51,880 Et remarque que je suis juste de le brancher à l'aide 978 00:41:51,880 --> 00:41:55,050 la notation accolade de l'autre jour, ce qui signifie simplement brancher une valeur 979 00:41:55,050 --> 00:41:55,550 Ici. 980 00:41:55,550 --> 00:41:57,449 Je ne suis pas en utilisant le Aide à la recherche technique. 981 00:41:57,449 --> 00:41:59,240 Je ne ai pas toute seconde ou troisième arguments. 982 00:41:59,240 --> 00:42:02,350 Je suis juste littéralement la construction de la chaîne moi-même. 983 00:42:02,350 --> 00:42:04,930 >> Le problème, cependant, est que si quelqu'un aime un scroob, 984 00:42:04,930 --> 00:42:09,020 qui est une référence à un film, connecte avec quelque chose comme ça, 985 00:42:09,020 --> 00:42:11,250 et je l'ai enlevé les points qui couvrent habituellement 986 00:42:11,250 --> 00:42:14,370 mots de passe, ce qui si il est particulièrement malveillants 987 00:42:14,370 --> 00:42:18,860 et son mot de passe est peut-être 12345, par le film appelé "Spaceballs" 988 00:42:18,860 --> 00:42:21,970 mais il critique un types apostrophe après les cinq, 989 00:42:21,970 --> 00:42:24,790 alors littéralement le mot ou dans l'espace, puis devis, 990 00:42:24,790 --> 00:42:29,160 Ils ont dit l'un est égal à un devis, Mais remarquez qu'il a omis quoi? 991 00:42:29,160 --> 00:42:32,700 Il a omis la citation sur le droit et il a omis la citation sur la gauche. 992 00:42:32,700 --> 00:42:35,170 >> Parce que si un agresseur La présomption de scroob 993 00:42:35,170 --> 00:42:38,160 est que les gens qui ont écrit ce code PHP étaient pas si brillant, 994 00:42:38,160 --> 00:42:42,990 peut-être qu'ils ont juste un peu simple guillemets autour de l'interpolation 995 00:42:42,990 --> 00:42:45,210 d'une variable dans accolades? 996 00:42:45,210 --> 00:42:48,620 Et alors peut-être, il ne pouvait genre de compléter leur pensée 997 00:42:48,620 --> 00:42:53,290 pour eux, mais d'une manière qui va de le laisser piraté le système de code PIN. 998 00:42:53,290 --> 00:42:55,310 En d'autres termes, supposons ce qui est le code 999 00:42:55,310 --> 00:42:57,140 et nous branchons maintenant dans ce scroob tapé. 1000 00:42:57,140 --> 00:42:58,770 Et il est rouge, parce qu'il est mauvais. 1001 00:42:58,770 --> 00:43:01,310 >> Et le texte sous-jacent est ce qu'il a tapé dans, 1002 00:43:01,310 --> 00:43:05,510 scroob pourrait tromper le serveur de Harvard dans la construction d'une requête SQL 1003 00:43:05,510 --> 00:43:07,440 chaîne qui ressemble à ceci. 1004 00:43:07,440 --> 00:43:11,760 Mot de passe est égale à 12345 ou un égale un. 1005 00:43:11,760 --> 00:43:14,820 Le résultat de ce qui, logiquement, est que cela va se connecter scroob 1006 00:43:14,820 --> 00:43:18,360 si son mot de passe est 12345 ou si une égaux 1007 00:43:18,360 --> 00:43:22,660 une, ce qui est bien sûr toujours vrai, ce qui signifie scroob obtient toujours. 1008 00:43:22,660 --> 00:43:26,060 >> Et donc, la façon de fixer Ici, comme dans beaucoup de cas, 1009 00:43:26,060 --> 00:43:28,140 serait d'écrire davantage à la défense. 1010 00:43:28,140 --> 00:43:30,390 Pour utiliser quelque chose comme notre fonction de la requête réelle, qui 1011 00:43:30,390 --> 00:43:33,980 vous le verrez dans PSet7, où nous branchons quelque chose comme question marque ici. 1012 00:43:33,980 --> 00:43:35,980 Et la beauté de la fonction d'interrogation que nous 1013 00:43:35,980 --> 00:43:40,010 vous donner est qu'il défend contre ces soi-disant attaques par injection SQL, où 1014 00:43:40,010 --> 00:43:44,260 quelqu'un incitant votre code dans injecter son propre code SQL. 1015 00:43:44,260 --> 00:43:47,380 Parce que ce que la fonction de requête nous donnons vous allez réellement faire, 1016 00:43:47,380 --> 00:43:51,270 si vous utilisez la syntaxe d'interrogation et un deuxième et un troisième argument ici, 1017 00:43:51,270 --> 00:43:54,590 est ce que il ne ajouter à la entrée que l'utilisateur a fourni? 1018 00:43:54,590 --> 00:43:56,060 Ceux barre oblique inverse cite. 1019 00:43:56,060 --> 00:43:58,590 >> Ainsi, il échappe à toute potentiellement caractères dangereux. 1020 00:43:58,590 --> 00:44:01,000 Cela ressemble bizarre maintenant, mais il est pas vulnérable 1021 00:44:01,000 --> 00:44:03,260 parce qu'il ne changer la logique plus 1022 00:44:03,260 --> 00:44:06,470 parce que tout le mot de passe est maintenant une seule citation qui est pas, 1023 00:44:06,470 --> 00:44:07,596 En fait, le mot de passe scroob. 1024 00:44:07,596 --> 00:44:09,845 Donc, il ya eu quelques blagues à ce sujet depuis des années. 1025 00:44:09,845 --> 00:44:12,570 Alors, ce fut une photo prise de certains geek dans un parking 1026 00:44:12,570 --> 00:44:16,620 par lequel vous savez peut-être que certaines villes et les Etats essaient de scanner votre licence 1027 00:44:16,620 --> 00:44:19,460 plaque à vous ou à vous facturer billet si vous allez à travers sans, comme, 1028 00:44:19,460 --> 00:44:20,660 la chose E-Z Pass. 1029 00:44:20,660 --> 00:44:24,490 Donc, cette personne peut être présumé que les gens qui écrivent le système E-Z passe 1030 00:44:24,490 --> 00:44:28,240 étaient pas si brillant, et peut-être qu'ils simplement concaténés une chaîne, 1031 00:44:28,240 --> 00:44:32,190 afin qu'il ou elle ne pouvait pas l'intention de nuire pas seulement compléter leur pensée, 1032 00:44:32,190 --> 00:44:35,150 mais en fait exécuter une mauvaise commande, que nous ne l'avons pas encore parlé, 1033 00:44:35,150 --> 00:44:36,380 mais vous pouvez probablement le deviner. 1034 00:44:36,380 --> 00:44:39,820 Cela, en plus de supprimer et insérer et mettre à jour et sélectionnez, 1035 00:44:39,820 --> 00:44:43,370 il ya aussi un mot clé appelé goutte, qui supprime littéralement tout 1036 00:44:43,370 --> 00:44:45,300 dans la base de données, qui est particulièrement mauvaise. 1037 00:44:45,300 --> 00:44:48,760 >> Nous pouvons faire un zoom sur ce cas il est un peu difficile à voir. 1038 00:44:48,760 --> 00:44:52,300 Ceci, maintenant, est un célèbre dessin animé qui est merveilleusement intelligent maintenant 1039 00:44:52,300 --> 00:44:53,145 et compréhensible. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [Rires] 1042 00:45:04,750 --> 00:45:05,910 >> Ouais, cool. 1043 00:45:05,910 --> 00:45:06,800 Type de geeking out. 1044 00:45:06,800 --> 00:45:08,800 Donc, ce sont donc Attaques par injection SQL. 1045 00:45:08,800 --> 00:45:13,050 Et ils sont si faciles à éviter en utilisant le bon code ou les bonnes bibliothèques. 1046 00:45:13,050 --> 00:45:15,947 Et vous le verrez dans PSet7, qui est pourquoi nous vous donnons la fonction de requête. 1047 00:45:15,947 --> 00:45:17,780 Ainsi, un couple de teasers que nous avons pensé 1048 00:45:17,780 --> 00:45:19,930 vous donner ici, dans notre restante minutes ensemble. 1049 00:45:19,930 --> 00:45:24,030 Alors, que vous vous souvenez de la semaine zéro, nous introduit ces deux ampoules qui 1050 00:45:24,030 --> 00:45:26,610 sont belles, pas seulement parce que ils sont assez et sont colorés, 1051 00:45:26,610 --> 00:45:29,450 mais parce qu'ils soutiennent quelque chose appelé une API, une application 1052 00:45:29,450 --> 00:45:31,980 Programming Interface Et dans CS50 jusqu'à présent, nous avons 1053 00:45:31,980 --> 00:45:34,440 surtout porté sur GET et POST, mais il se trouve 1054 00:45:34,440 --> 00:45:37,390 il ya d'autres verbes HTTP comme PUT. 1055 00:45:37,390 --> 00:45:39,430 >> Et en fait, ce fut une diapositive à partir de zéro la semaine 1056 00:45:39,430 --> 00:45:44,930 laquelle, si vous écrivez du code qui envoie a la PSet6 Une requête HTTP 1057 00:45:44,930 --> 00:45:49,647 ressemble à ceci avec ce morceau de texte en bas, qui est appelé JSON, 1058 00:45:49,647 --> 00:45:52,230 ou JavaScript Object Notation que nous en parlerons la semaine prochaine, 1059 00:45:52,230 --> 00:45:57,030 vous pouvez activer ou désactiver ou de changement la couleur des feux comme ceux. 1060 00:45:57,030 --> 00:46:00,480 Donc, si CS50 a également, en plus de certaines de ces ampoules ici à New Haven 1061 00:46:00,480 --> 00:46:02,480 si vous souhaitez emprunter pour des projets finaux, 1062 00:46:02,480 --> 00:46:04,370 également certaines Microsoft Bandes, qui sont comme 1063 00:46:04,370 --> 00:46:07,619 montres que vous portez autour de votre poignet qui ont une API similaire de sorte que vous 1064 00:46:07,619 --> 00:46:10,040 peut écrire votre propre logiciel pour eux. 1065 00:46:10,040 --> 00:46:12,490 >> Nous avons un compte avec Le code iOS d'Apple afin 1066 00:46:12,490 --> 00:46:15,510 que si vous avez une montre Apple ou un iPhone ou un iPad ou un iPod, 1067 00:46:15,510 --> 00:46:17,707 vous pouvez écrire du code qui fonctionne actuellement sur ceux-ci. 1068 00:46:17,707 --> 00:46:19,540 Nous avons tout un tas de Arduinos, qui sont 1069 00:46:19,540 --> 00:46:22,010 minuscules ordinateurs sans cas, essentiellement, 1070 00:46:22,010 --> 00:46:25,240 que vous pouvez vous connecter via USB, généralement à votre propre Mac ou PC, 1071 00:46:25,240 --> 00:46:28,810 écrire du code qui fonctionne sur ces physique dispositifs qui ont souvent des capteurs sur eux 1072 00:46:28,810 --> 00:46:30,790 de sorte que vous pouvez interagir avec le monde réel. 1073 00:46:30,790 --> 00:46:32,860 Nous avons tout un tas de dispositifs Leap Motion, 1074 00:46:32,860 --> 00:46:36,500 qui sont des périphériques USB pour Mac et PC, ici et encore une fois, à New Haven. 1075 00:46:36,500 --> 00:46:40,080 Et si vous le connectez à votre Mac, vous pouvez réellement contrôler votre ordinateur 1076 00:46:40,080 --> 00:46:42,550 par un logiciel d'écriture que par l'intermédiaire de rayons infrarouges, 1077 00:46:42,550 --> 00:46:46,360 Chiffres où vos mains humaines sont, même sans toucher votre clavier. 1078 00:46:46,360 --> 00:46:49,135 Nous avons pensé partager un rapide entrevoir à cela, par exemple. 1079 00:46:49,135 --> 00:46:51,428 >> [Jouer de la musique] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 Donc, nous avons un ensemble tas de ces choses, 1082 00:47:57,590 --> 00:48:01,040 aussi, appelé brassards Myo que vous mettez sur votre avant-bras 1083 00:48:01,040 --> 00:48:04,595 et puis vous pouvez contrôler le réel monde ou le monde virtuel comme celui-ci. 1084 00:48:04,595 --> 00:48:06,471 >> [Jouer de la musique] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 Ou, nous avons aussi un certain Google Carton, qui est littéralement, comme, 1087 00:49:20,920 --> 00:49:24,841 une boîte en carton, vous pouvez mettre sur votre visage, mais diapositive de votre téléphone en elle 1088 00:49:24,841 --> 00:49:27,590 de sorte que vous mettez le verre de votre téléphone vraiment proche de vos yeux. 1089 00:49:27,590 --> 00:49:30,190 Et Google est en carton jolie pas cher à 10 $ ou 20 $. 1090 00:49:30,190 --> 00:49:32,230 Et il a de petites lentilles que légèrement hors changement 1091 00:49:32,230 --> 00:49:35,900 l'image sur l'écran pour votre homme yeux pour vous donner une impression de profondeur 1092 00:49:35,900 --> 00:49:39,550 de sorte que vous avez fait un 3D environnement en face de vous. 1093 00:49:39,550 --> 00:49:42,927 Nous avons également quelques Samsung Gear, qui est la version la plus chère de cette, 1094 00:49:42,927 --> 00:49:46,010 mais qui peut glisser de manière similaire dans un Téléphone Android et vous donner l'illusion 1095 00:49:46,010 --> 00:49:48,309 de-- ou donner l'expérience de la réalité virtuelle. 1096 00:49:48,309 --> 00:49:50,850 Et dans nos deux dernières minutes, nous avons pensé que nous pourrions essayer de le faire. 1097 00:49:50,850 --> 00:49:55,250 Si je peux projeter ce que Colton a ici juste pour aiguiser votre appétit, 1098 00:49:55,250 --> 00:49:58,442 laissez-moi aller de l'avant et jette sur le grand écran ici. 1099 00:49:58,442 --> 00:49:59,400 Laissez-moi tuer les lumières. 1100 00:49:59,400 --> 00:50:02,290 Colton, voulez-vous aller de l'avant et de mettre sur ton portable pendant un moment 1101 00:50:02,290 --> 00:50:05,171 et de venir sur plus de la milieu de la scène? 1102 00:50:05,171 --> 00:50:07,420 Et voulez-vous project-- voici ce que voit Colton. 1103 00:50:07,420 --> 00:50:10,560 >> Maintenant, le Wi-Fi est ici pas si fort pour cet appareil 1104 00:50:10,560 --> 00:50:13,870 que ce est super convaincante, mais Colton est littéralement 1105 00:50:13,870 --> 00:50:15,710 dans ce lieu magique futuriste. 1106 00:50:15,710 --> 00:50:16,796 Il ne voit qu'une image. 1107 00:50:16,796 --> 00:50:19,920 Vous voyez son œil gauche et à droite que son cerveau sont assemblant 1108 00:50:19,920 --> 00:50:22,260 dans une tridimensionnel environnement sur son visage. 1109 00:50:22,260 --> 00:50:24,319 Il est juste choisi une option de menu ici. 1110 00:50:24,319 --> 00:50:27,360 Et là encore, il porte ce casque avec un téléphone Samsung à ce que ce 1111 00:50:27,360 --> 00:50:29,080 sans fil faisant saillie au-dessus de notre. 1112 00:50:29,080 --> 00:50:30,349 Maintenant, vous êtes sur Mars, je pense? 1113 00:50:30,349 --> 00:50:31,140 COLTON: Je pense que oui. 1114 00:50:31,140 --> 00:50:32,181 Je ne sais pas [inaudible]. 1115 00:50:32,181 --> 00:50:34,250 [Rires] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID MALAN: avère Mars possède ces menus. 1117 00:50:36,374 --> 00:50:41,590 >> COLTON: [inaudible] une certaine fraîcheur endroits, si nous voulons aller to-- 1118 00:50:41,590 --> 00:50:43,330 >> DAVID MALAN: Où voulons-nous aller? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON: [inaudible] 1120 00:50:45,837 --> 00:50:48,170 DAVID MALAN: Et nous allons voir où Colton nous prendre maintenant. 1121 00:50:48,170 --> 00:50:48,961 COLTON: [inaudible] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> DAVID MALAN: Donc, il ya tellement de des endroits différents, vous pouvez prendre vous-même. 1124 00:50:56,380 --> 00:51:00,590 Il est FAPIS via laquelle vous pouvez écrire des jeux ou des interactions qui 1125 00:51:00,590 --> 00:51:01,950 exécuter, en fin de compte, sur le téléphone. 1126 00:51:01,950 --> 00:51:03,908 Donc, vous avez vraiment écrire une application de téléphone mobile. 1127 00:51:03,908 --> 00:51:06,380 Mais grâce au logiciel et les capacités graphiques, 1128 00:51:06,380 --> 00:51:08,765 maintenant Colton est dans ce minuscule chalet. 1129 00:51:08,765 --> 00:51:10,515 Et au risque de nous accabler, 1130 00:51:10,515 --> 00:51:13,330 Colton et je vais rester pour tandis qu'à la fin de la classe ici aujourd'hui 1131 00:51:13,330 --> 00:51:14,300 si vous voulez venir et de jouer. 1132 00:51:14,300 --> 00:51:16,350 Et nous allons leur apporter retour la semaine prochaine ainsi. 1133 00:51:16,350 --> 00:51:18,420 Sans plus tarder Voilà pour aujourd'hui. 1134 00:51:18,420 --> 00:51:21,990 Nous vous verrons la semaine prochaine. 1135 00:51:21,990 --> 00:51:24,140 >> [MUSIQUE - RAGGA TWINS, "Bad Man"] 1136 00:51:24,140 --> 00:55:23,146