1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Setmana 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Harvard University] 3 00:00:04,740 --> 00:00:07,170 [Aquesta és CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Està bé. Benvingut de nou. Això és CS50, i aquest és el començament de la setmana 9. 5 00:00:12,350 --> 00:00:16,600 Avui ens centrem en particular en el disseny, ja no en el context de la C 6 00:00:16,600 --> 00:00:20,010 però en el context de PHP i una mica de SQL i una mica de JavaScript, 7 00:00:20,010 --> 00:00:23,730 especialment cap a la fi dels dos pset 7 i també el seu projecte final. 8 00:00:23,730 --> 00:00:26,310 De fet, si vostè està en aquest punt en el projecte final 9 00:00:26,310 --> 00:00:30,100 on presumiblement a partir d'una hora o així que fa que almenys vam començar a pensar una mica 10 00:00:30,100 --> 00:00:33,730 al seu projecte final i estàs pensant que t'agradaria col · laborar amb 1 o 2 companys de classe, 11 00:00:33,730 --> 00:00:36,150 si vostè està tenint problemes per connectar-se amb aquests companys, 12 00:00:36,150 --> 00:00:40,570 no dubti en omplir el formulari en cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 Simplement et pregunta qui ets, quin tipus de projecte que vostè està pensant, 14 00:00:42,880 --> 00:00:44,870 on viu només per raons logístiques. 15 00:00:44,870 --> 00:00:49,510 I després, si voleu mantenir un ull en la setmana o així que l'URL de full de càlcul allà, 16 00:00:49,510 --> 00:00:53,520 A continuació, pot veure una versió de només lectura del document de Google Docs 17 00:00:53,520 --> 00:00:56,010 en el qual estem recollint aquesta informació. 18 00:00:56,010 --> 00:00:58,930 Així que si vostè vol treballar amb algú, per tots els mitjans no dubti en acostar-se a la gent 19 00:00:58,930 --> 00:01:00,480 a través d'aquest mecanisme. 20 00:01:00,480 --> 00:01:02,690 Però la majoria de la gent fer sol treball. Això és totalment bé. 21 00:01:02,690 --> 00:01:06,120 Així que no crec que això és d'alguna manera obligatòria. 22 00:01:06,120 --> 00:01:09,680 Divendres era només jo i uns pocs de l'equip d'aquí, 23 00:01:09,680 --> 00:01:11,100 teatre buit en la seva major part. 24 00:01:11,100 --> 00:01:14,600 Haver 3 turistes assegut allà dalt, així que va ser una mica incòmode. 25 00:01:14,600 --> 00:01:18,970 El que parlava era de bases de dades i parlem de pset 1 jul mica. 26 00:01:18,970 --> 00:01:22,200 I si no va ser així per capturar en vídeo que de moment, això està bé. 27 00:01:22,200 --> 00:01:26,770 Vaig a tractar de definir els termes que d'altra manera seria donar per fet 28 00:01:26,770 --> 00:01:28,840 basat en conferència de divendres. 29 00:01:28,840 --> 00:01:32,550 >> Però avui tractarem d'arribar al punt 30 00:01:32,550 --> 00:01:34,990 de no només ser capaç de fer una cosa així pset 7 31 00:01:34,990 --> 00:01:37,360 però realment entendre el que està passant sota la campana, 32 00:01:37,360 --> 00:01:41,910 en particular algunes de les abstraccions que hem posat en marxa a l'arxiu functions.php 33 00:01:41,910 --> 00:01:45,780 per fer la seva vida una mica més fàcil, però pel que entenc que en última instància 34 00:01:45,780 --> 00:01:48,760 de manera que quan les rodes d'entrenament sortir en un parell de setmanes vostè encara pot sobreviure 35 00:01:48,760 --> 00:01:53,750 en el món real i fer aquestes coses sense un marc CS50 sota de vostè. 36 00:01:53,750 --> 00:01:57,500 Aquest $ _SESSION, per a aquells de vostès que estan familiaritzats 37 00:01:57,500 --> 00:02:01,960 o que ja agafat el vídeo el divendres, què farem SESSIÓ 38 00:02:01,960 --> 00:02:04,330 en una aplicació web basada en PHP? 39 00:02:04,330 --> 00:02:09,650 Aquesta és una variable superglobal, el que significa que és similar en esperit a GET i POST 40 00:02:09,650 --> 00:02:13,970 i alguns altres, però què és això útil? 41 00:02:13,970 --> 00:02:18,320 >> Quin és SESSIÓ utilitza? Si. [Estudiant] Logueandote 42 00:02:18,320 --> 00:02:21,040 Com diu? [Estudiant] Logging in Logging in Indeed. 43 00:02:21,040 --> 00:02:25,100 En pset 7 que estem fent servir aquest superglobal sessió per facilitar la tala polz 44 00:02:25,100 --> 00:02:28,600 I el que és bo d'aquest superglobal és que és una matriu associativa. 45 00:02:28,600 --> 00:02:33,190 Una matriu associativa, recordar, és només un conjunt, però els índexs ja no han de ser nombres 46 00:02:33,190 --> 00:02:37,670 com 012. Ells poden ser nombres o poden ser fins i tot cadenes. 47 00:02:37,670 --> 00:02:44,890 I el que si ha bussejat en pset 7, però, cal recordar que estem emmagatzemant un ID de clau anomenada 48 00:02:44,890 --> 00:02:50,330 dins d'aquesta matriu associativa el valor és com 123 - 49 00:02:50,330 --> 00:02:53,780 qualsevol que sigui l'iniciat sessió ID d'usuari és. 50 00:02:53,780 --> 00:02:59,470 El motiu d'això és que fins i tot després que l'usuari ha visitat localhost 51 00:02:59,470 --> 00:03:02,720 o el meu lloc web en general i que han iniciat sessió, 52 00:03:02,720 --> 00:03:07,320 encara que no fa clic a un enllaç o tornar al meu lloc web durant 5 minuts 53 00:03:07,320 --> 00:03:10,730 o fins i tot una hora o fins i tot un dia, però deixen la seva finestra del navegador oberta, 54 00:03:10,730 --> 00:03:14,370 a través d'aquest superglobal puc recordar que s'ha entrat 55 00:03:14,370 --> 00:03:21,140 >> En altres paraules, el que em permet emmagatzemar qualsevol cosa una mica llarg termini Vull sobre un usuari. 56 00:03:21,140 --> 00:03:24,390 I vostè pot pensar que és realment com l'encarnació d'un carret de compres. 57 00:03:24,390 --> 00:03:27,740 Llocs com Amazon, òbviament, posarem les coses en un carret de la compra, 58 00:03:27,740 --> 00:03:32,230 però HTTP, el protocol que alimenta la web, és apàtrida 59 00:03:32,230 --> 00:03:34,230 en el sentit que quan vostè visita un lloc web, 60 00:03:34,230 --> 00:03:37,290 en la seva major part no té algun tipus de connexió de xarxa permanent 61 00:03:37,290 --> 00:03:39,270 entre el seu navegador i el servidor. 62 00:03:39,270 --> 00:03:42,190 Així que vostè hagi descarregat el codi HTML i JPEG i GIF les i els de tot, que 63 00:03:42,190 --> 00:03:48,200 la connexió desapareix i només hi ha una còpia del codi HTML i altres coses des del servidor. 64 00:03:48,200 --> 00:03:53,000 Però si el servidor vol recordar alguna cosa sobre tu, 65 00:03:53,000 --> 00:03:57,580 la càrrega és al servidor per registrar realment aquesta informació. 66 00:03:57,580 --> 00:04:00,130 I pel que el programador que té control sobre el servidor 67 00:04:00,130 --> 00:04:04,400 pot posar gairebé qualsevol cosa que vulguis dins d'aquesta matriu associativa superglobal 68 00:04:04,400 --> 00:04:06,850 i que hi serà la pròxima vegada que l'usuari torna, 69 00:04:06,850 --> 00:04:12,070 si es tracta de minuts o fins i tot dies més tard, a menys de tancar la finestra del navegador, 70 00:04:12,070 --> 00:04:14,360 en què SESSIÓ punt desapareix. 71 00:04:14,360 --> 00:04:17,779 Així que és efímer emmagatzematge, és no persistent, i que està destinat a desaparèixer 72 00:04:17,779 --> 00:04:22,360 tan aviat com l'usuari tanca el seu navegador - no només aquesta pestanya, sovint el navegador sencer, 73 00:04:22,360 --> 00:04:24,930 el que efectivament el registre l'usuari fora. 74 00:04:24,930 --> 00:04:28,000 Llavors, com és això en realitat pràctica? 75 00:04:28,000 --> 00:04:31,360 Fem una ràpida ullada a un exemple senzill vam veure el divendres. 76 00:04:31,360 --> 00:04:33,340 Per aquells no familiaritzats, és tan simple com això. 77 00:04:33,340 --> 00:04:35,910 Aquesta és una pàgina web l'únic propòsit en la vida és que em diguis 78 00:04:35,910 --> 00:04:38,000 quantes vegades he visitat aquesta pàgina. 79 00:04:38,000 --> 00:04:41,670 Aquesta és la primera vegada avui aquí que la vaig visitar, pel que diu 0 vegades. 80 00:04:41,670 --> 00:04:46,940 >> Però si començo a tornar a carregar aquesta pàgina, es diu 1 hora, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 i això finalment s'acaba de seguir comptant cap amunt, amunt, amunt, amunt, amunt 82 00:04:49,800 --> 00:04:53,130 per cada vegada que feu clic a Actualitza en realitat en ell. 83 00:04:53,130 --> 00:04:58,830 Llavors, com és aquest treball? Deixa anar dins d'aquest arxiu anomenat counter.php. 84 00:04:58,830 --> 00:05:02,490 La part superior de la mateixa és tots els comentaris blaus, però la part interessant és aquí. 85 00:05:02,490 --> 00:05:06,670 En la línia 13 es diu session_start aquesta funció, 86 00:05:06,670 --> 00:05:09,600 i que és, literalment, tot el que has de fer si vols tenir accés 87 00:05:09,600 --> 00:05:13,610 a aquest superglobal especial anomenada $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 Això fa que tot sigui possible, i veurem com en un moment en què tot és possible. 89 00:05:17,430 --> 00:05:20,350 En la línia 16 avís del que estic fent. 90 00:05:20,350 --> 00:05:25,960 Si la clau, anomenat contra - en altres paraules, el valor de l'índex - "comptador" 91 00:05:25,960 --> 00:05:32,310 existeix dins d'aquesta matriu anomenada SESSION, llavors què estic fent amb ell en la línia de sota? 92 00:05:32,310 --> 00:05:36,650 Quina és la línia 18 va? 93 00:05:36,650 --> 00:05:40,360 >> [Resposta dels estudiants inaudible] Què és això? [Estudiant] Emmagatzemar el valor. Bé. 94 00:05:40,360 --> 00:05:45,800 S'emmagatzema el valor que està en sessió en aquest moment en una nova variable temporal local, 95 00:05:45,800 --> 00:05:48,250 $ Contador en minúscules. 96 00:05:48,250 --> 00:05:50,770 Tingueu en compte que PHP ja està sent una mica mandrós aquí. 97 00:05:50,770 --> 00:05:55,550 Recordeu que no tenim cap menció de int o float o cadena ni res d'això 98 00:05:55,550 --> 00:06:00,480 pel fet que PHP és tipus febles, de manera que no cal especificar el tipus d'una variable, 99 00:06:00,480 --> 00:06:03,310 i en aquest cas aquí no he tan sols ho declarat encara. 100 00:06:03,310 --> 00:06:08,980 Ho estic declarant dins d'aquestes claus ia diferència de C, això és realment bo. 101 00:06:08,980 --> 00:06:13,800 No importa com profundament niat declaració d'una variable és en PHP - 102 00:06:13,800 --> 00:06:16,650 dins de clau, dins de clau de tancament i similars - 103 00:06:16,650 --> 00:06:21,230 serà en aquest moment en el temps existeix per a la resta del programa, 104 00:06:21,230 --> 00:06:22,680 per bé o per mal. 105 00:06:22,680 --> 00:06:26,930 Així que immediatament es converteix en global tan aviat com vostè el defineix com estem fent aquí. 106 00:06:26,930 --> 00:06:31,620 >> En cas contrari, si no em sembla que hi hagi res al superglobal REUNIÓ, 107 00:06:31,620 --> 00:06:34,680 Estic aparentment inicialitzar aquesta variable comptador a 0, 108 00:06:34,680 --> 00:06:37,580 per tant només suposant que l'usuari mai ha estat aquí abans. 109 00:06:37,580 --> 00:06:40,030 I després d'aquest curs és incrementar el comptador, com? 110 00:06:40,030 --> 00:06:44,480 Estic actualitzant el valor que hi ha dins d'aquesta matriu associativa 111 00:06:44,480 --> 00:06:49,530 fixant igual al que actualment és comptador + 1. 112 00:06:49,530 --> 00:06:53,520 Si em desplaço fins aquí per el codi HTML de la pàgina, en realitat és bastant simple. 113 00:06:53,520 --> 00:06:58,920 Tot el que tinc al cos d'aquesta pàgina és: "Vostè ha visitat aquest lloc vegades fulano de tal". 114 00:06:58,920 --> 00:07:00,350 I aquest és un constructe PHP. 115 00:07:00,350 --> 00:07:06,080 Si ho fa 00:07:12,600 Realment és equivalent a una cosa així com printf, que hem vist moltes vegades en C, 117 00:07:12,600 --> 00:07:15,940 encara que, com vostès saben ja de l'especificació en pset 7, 118 00:07:15,940 --> 00:07:20,160 impressió és també una funció que només imprimeix alguna cosa, en realitat no utilitzar codis de format, 119 00:07:20,160 --> 00:07:23,270 i en realitat es pot dir que trobo també. 120 00:07:23,270 --> 00:07:27,460 Són tots molt lleugerament diferent, encara que l'efecte net és en última instància el mateix. 121 00:07:27,460 --> 00:07:31,270 Així que aquest ús del signe igual és només una espècie d'una manera elegant de fer-ho 122 00:07:31,270 --> 00:07:34,910 més breument del que d'una altra manera podrien ser capaços de fer-ho. 123 00:07:34,910 --> 00:07:38,370 Així que això és tot el fa aquest lloc web. S'imprimeix el valor del comptador. 124 00:07:38,370 --> 00:07:40,550 Com és que tot això realment succeeixi? 125 00:07:40,550 --> 00:07:43,250 Vostè pot recordar una setmana o així que fa que vam començar a buscar sota de la caputxa 126 00:07:43,250 --> 00:07:47,910 la forma en que una pàgina web funciona mitjançant l'ús d'aquesta fitxa inspector. 127 00:07:47,910 --> 00:07:51,900 >> Chrome té aquesta tant en la versió per a Mac, la versió de Windows, i fins i tot la versió de Linux, 128 00:07:51,900 --> 00:07:59,510 i Firefox i IE tenen mecanismes similars mitjançant el qual vostè té aquest depurador integrat 129 00:07:59,510 --> 00:08:01,400 dins del navegador. 130 00:08:01,400 --> 00:08:03,040 Anem a fer una ullada a la següent. 131 00:08:03,040 --> 00:08:06,960 Tenim un munt de fitxes d'aquí, i recordar que l'esquerra és un Elements, 132 00:08:06,960 --> 00:08:10,700 i no importa el espantosa el codi HTML i JavaScript en una pàgina, 133 00:08:10,700 --> 00:08:15,710 Recordem que amb la pestanya Elements en realitat es pot navegar pel codi HTML jeràrquicament 134 00:08:15,710 --> 00:08:17,050 i agradable i ordenada. 135 00:08:17,050 --> 00:08:19,370 Així que si vostè està tractant d'aprendre d'un lloc web com Google o Facebook 136 00:08:19,370 --> 00:08:22,370 o en realitat qualsevol lloc web, compte que vostè està probablement millor 137 00:08:22,370 --> 00:08:26,360 mirar el codi font d'aquesta manera en lloc de veure la font de cru, 138 00:08:26,360 --> 00:08:29,580 que pot ser un desastre, com hem vist, especialment en el lloc de Google. 139 00:08:29,580 --> 00:08:32,220 Així que si en lloc feu clic a la fitxa Xarxa aquí, 140 00:08:32,220 --> 00:08:34,830 anem a veure el que està passant en la meva visita a aquesta pàgina. 141 00:08:34,830 --> 00:08:38,669 En primer lloc vull netejar la meva memòria cau. 142 00:08:38,669 --> 00:08:43,570 Vaig a anar a Ajustos en Chrome i després anar a la Història 143 00:08:43,570 --> 00:08:46,420 i després Esborrar dades de navegació. 144 00:08:46,420 --> 00:08:48,170 Pot ser utilitzat per fer això per a altres fins, [rialles] 145 00:08:48,170 --> 00:08:51,990 però quan es tracta de desenvolupament de llocs web, és realment útil - 146 00:08:51,990 --> 00:08:55,980 si rius tu saps. [Rialles] 147 00:08:55,980 --> 00:08:59,310 De fet, és molt útil en el desenvolupament de llocs web perquè la realitat és 148 00:08:59,310 --> 00:09:04,100 coses com galetes i coses per l'estil en memòria cau els fitxers HTML en memòria cau, arxius JavaScript 149 00:09:04,100 --> 00:09:06,390 pot arribar a ser un gran mal de cap, ja que si per qualsevol raó 150 00:09:06,390 --> 00:09:11,500 el navegador decideix emmagatzemar en memòria cau algun arxiu i, però vostè ha realitzat canvis en l'arxiu al servidor 151 00:09:11,500 --> 00:09:14,670 però el navegador no s'ha adonat realment que l'arxiu ha canviat 152 00:09:14,670 --> 00:09:19,060 i per tant no és realment tornar a descarregar-lo, fins i tot quan feu clic al botó Actualitzar, 153 00:09:19,060 --> 00:09:23,210 una de les formes més segures de fer només que la culpa no és del seu codi, 154 00:09:23,210 --> 00:09:26,480 és amb el comportament del navegador, és anar a aquí al navegador 155 00:09:26,480 --> 00:09:29,950 i simplement esborrar l'historial complet perquè no hi hagi confusió. 156 00:09:29,950 --> 00:09:33,210 >> I llavors, si vostè realment vol ser paranoic, sortiu del navegador, reinicia, 157 00:09:33,210 --> 00:09:35,660 i després assegurar-se que tot està funcionant com s'esperava. 158 00:09:35,660 --> 00:09:38,820 Així que en resum, la memòria cau de compensació és bo quan es fa el desenvolupament. 159 00:09:38,820 --> 00:09:40,690 Així que aquí tenim la pestanya Network. 160 00:09:40,690 --> 00:09:46,020 Jo havia visitat prèviament el lloc de 9 vegades, però m'ho dius a mi seguir endavant ara i feu clic a Actualitza. 161 00:09:46,020 --> 00:09:47,500 I estic de tornada a 0. 162 00:09:47,500 --> 00:09:52,100 Anem a veure realment com és que aquest superglobal sessió està sent implementat. 163 00:09:52,100 --> 00:09:55,990 Vaig a fer clic a la sol · licitud d'un HTTP que es va fer, 164 00:09:55,990 --> 00:09:58,810 i aquesta finestra de depuració em permet mirar dins d'això. 165 00:09:58,810 --> 00:10:01,970 Aquí veig només la resposta del servidor, que no és interessant. 166 00:10:01,970 --> 00:10:04,030 He vist això en qualsevol nombre de maneres. 167 00:10:04,030 --> 00:10:06,350 Però el que és tècnicament interessant són les capçaleres. 168 00:10:06,350 --> 00:10:11,770 Si em desplaço fins aquí i se centren en les capçaleres de petició i feu clic a Mostra la font, 169 00:10:11,770 --> 00:10:14,400 el que vaig a veure és, literalment, la petició HTTP 170 00:10:14,400 --> 00:10:17,250 que acaba d'anar del navegador al servidor, 171 00:10:17,250 --> 00:10:21,400 GET és la paraula clau i, a continuació, / counter.php sent el nom de l'arxiu 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 només és la versió d'HTTP que el navegador està utilitzant. 173 00:10:25,670 --> 00:10:31,070 Aquesta línia aquí és un petit recordatori des del navegador al servidor quin és el nom del servidor és 174 00:10:31,070 --> 00:10:33,020 que vol parlar. 175 00:10:33,020 --> 00:10:38,200 I a continuació, la resta d'aquest és de vegades interessant, però no és rellevant en aquest moment. 176 00:10:38,200 --> 00:10:40,090 >> Això és només una espècie de curiositat. 177 00:10:40,090 --> 00:10:43,530 Cryptic encara que aquesta cadena és, en qualsevol moment del seu navegador visita una pàgina web 178 00:10:43,530 --> 00:10:47,110 s'informa al servidor el navegador que utilitzeu 179 00:10:47,110 --> 00:10:50,040 i quin sistema operatiu que utilitzeu i la versió de la mateixa. 180 00:10:50,040 --> 00:10:52,650 Així que si alguna vegada es va preguntar com els llocs web com CNN i altres coses 181 00:10:52,650 --> 00:10:56,860 conèixer els percentatges d'usuaris de Mac en els usuaris de PC, Web, 182 00:10:56,860 --> 00:11:00,820 Usuaris d'Internet Explorer, els usuaris de Chrome i similars, és perquè tots els navegadors 183 00:11:00,820 --> 00:11:04,300 estan dient a tots els llocs web només per aquí el que som. 184 00:11:04,300 --> 00:11:07,410 No necessàriament contenen informació d'identificació personal, 185 00:11:07,410 --> 00:11:13,060 però sí li al servidor quina és la seva adreça IP és i quin navegador i sistema operatiu que utilitzeu. 186 00:11:13,060 --> 00:11:14,720 Així que aquí és on aquesta informació. 187 00:11:14,720 --> 00:11:19,960 Però el que és més interessant ara, quan es tracta d'aquestes sessions és la capçalera de resposta. 188 00:11:19,960 --> 00:11:22,530 Deixeu-me veure el codi font, feu clic a següent a la resposta. 189 00:11:22,530 --> 00:11:24,590 El que és interessant aquí és algunes coses. 190 00:11:24,590 --> 00:11:27,580 1, tenim un codi d'estat de 200. 191 00:11:27,580 --> 00:11:29,840 Mai veiem aquest codi d'estat perquè això vol dir que tot està bé. 192 00:11:29,840 --> 00:11:32,920 Significa, literalment, bé en contrast amb una altra cosa. 193 00:11:32,920 --> 00:11:36,380 Què és un nombre que de vegades veiem que això és dolent? [Estudiant] 404. 194 00:11:36,380 --> 00:11:39,860 404, arxiu no trobat, 403 és possible que ja ensopegar, 195 00:11:39,860 --> 00:11:43,660 el que està prohibit, el que significa que vostè es va oblidar d'alguna cosa chmod, el més probable. 196 00:11:43,660 --> 00:11:45,190 I hi ha un munt d'altres. 197 00:11:45,190 --> 00:11:47,760 >> Aquí baix, això és una mica boig. 198 00:11:47,760 --> 00:11:52,340 M'acabo d'escriure aquest arxiu fa uns minuts enganxant a gedit. 199 00:11:52,340 --> 00:11:57,100 Per què aquesta pàgina expira el 1981, abans que realment era una web? 200 00:11:58,010 --> 00:12:00,730 Què està passant aquí? 201 00:12:00,730 --> 00:12:04,390 >> [Resposta dels estudiants inaudible] La marca de temps. Però per què? 202 00:12:06,110 --> 00:12:09,120 És una cosa arbitrari, però és realment útil. 203 00:12:09,120 --> 00:12:15,500 El que això ens diu al meu navegador és l'arxiu PHP que acaba sol · licitat ja hagi expirat. 204 00:12:15,500 --> 00:12:18,580 De fet, expirat fa 30 anys. 205 00:12:18,580 --> 00:12:20,260 Però, què significa això realment? 206 00:12:20,260 --> 00:12:22,500 Només vol dir que la propera vegada que l'usuari visita aquesta pàgina, 207 00:12:22,500 --> 00:12:25,540 ja sigui per càrrega o escrivint la URL a la barra d'adreces, 208 00:12:25,540 --> 00:12:28,010 assegureu-vos d'anar a buscar una nova còpia. 209 00:12:28,010 --> 00:12:30,840 Aquesta és una espècie d'un exemple d'emmagatzematge en memòria cau, 210 00:12:30,840 --> 00:12:33,790 una paraula estúpida que només significa tractar de dissuadir els navegadors 211 00:12:33,790 --> 00:12:37,260 de fet HTML emmagatzematge en memòria cau que s'ha enviat des d'un servidor 212 00:12:37,260 --> 00:12:41,490 de manera que vostè no colpeja accidentalment recàrrega i després veure la mateixa versió de l'arxiu. 213 00:12:41,490 --> 00:12:43,730 Segur que vol que el servidor enviï una còpia nova. 214 00:12:43,730 --> 00:12:47,440 Així que el fet que és 1981 només significa que això és el que l'aparell està triant 215 00:12:47,440 --> 00:12:50,280 com una data arbitrària en el passat. 216 00:12:50,280 --> 00:12:53,380 Però la realitat és sucosa ara aquesta. 217 00:12:53,380 --> 00:12:57,550 Fins i tot abans dels 50 és probable que vagament familiaritzat amb les galetes. 218 00:12:57,550 --> 00:13:01,820 A partir d'ara, sobretot entre els menys còmoda o en el medi, 219 00:13:01,820 --> 00:13:04,120 Què és una galeta al vostre comprensió en aquest moment 220 00:13:04,120 --> 00:13:06,980 tot i que estem a punt de fer del seu coneixement més tècnic? 221 00:13:08,150 --> 00:13:10,070 Què és una galeta? Si. 222 00:13:10,070 --> 00:13:13,890 [Estudiant] Informació sobre l'usuari, com si han escrit el seu nom d'usuari o alguna cosa així. 223 00:13:13,890 --> 00:13:17,370 >> Bé. És una informació sobre l'usuari, ja sigui que hagi escrit en nom d'usuari ja. 224 00:13:17,370 --> 00:13:21,190 Les galetes són un mitjà pel qual els servidors poden recordar alguna cosa sobre un usuari. 225 00:13:21,190 --> 00:13:25,810 I el que realment és una galeta és un fitxer de text o d'alguna seqüència de bytes 226 00:13:25,810 --> 00:13:28,340 que està emplaçada a un servidor dins del navegador, 227 00:13:28,340 --> 00:13:31,960 i dins d'aquest arxiu o entre els bytes és algun tipus d'identificador. 228 00:13:31,960 --> 00:13:35,640 Potser és literalment el seu nom d'usuari, però més sovint és una mica més críptic d'aspecte 229 00:13:35,640 --> 00:13:43,700 com aquesta cosa aquí - bo8dal3ct i així successivament - aquesta cadena alfanumèrica molt gran 230 00:13:43,700 --> 00:13:47,050 que realment només pretén ser un identificador únic per a tu. 231 00:13:47,050 --> 00:13:49,790 O vostè pot pensar en ell com una mena de segell de mà virtual. 232 00:13:49,790 --> 00:13:53,020 Si vostè va a un club o un parc de diversions, recordar que vostè ha pagat 233 00:13:53,020 --> 00:13:55,850 i entrat, li van posar un adhesiu vermella a la mà d'algun tipus, 234 00:13:55,850 --> 00:13:59,270 i que recorda a la gent al taulell que ja has pagat 235 00:13:59,270 --> 00:14:01,340 i que pugui entrar i sortir quan vulgui. 236 00:14:01,340 --> 00:14:04,250 Les galetes són una mica similars en esperit a això. 237 00:14:04,250 --> 00:14:08,070 La primera vegada que vaig visitar aquest lloc web, com acabo de fer després de netejar la meva memòria cau, 238 00:14:08,070 --> 00:14:11,620 el lloc web, l'aparell en aquest cas, posar un segell a la mà 239 00:14:11,620 --> 00:14:15,030 el nom és PHPSESSID, ID de sessió, 240 00:14:15,030 --> 00:14:18,260 el valor és la cadena alfanumèrica molt llarg. 241 00:14:18,260 --> 00:14:22,470 >> Així que ara és una espècie d'estampat a la mà perquè la pròxima vegada que em va colpejar recarregar 242 00:14:22,470 --> 00:14:25,230 o manualment visitar aquesta URL al navegador, 243 00:14:25,230 --> 00:14:29,230 meu navegador per definició d'HTTP es presentarà el segell a la mà 244 00:14:29,230 --> 00:14:31,940 una i altra vegada i una altra. 245 00:14:31,940 --> 00:14:34,550 Així que, tot i que el servidor no ha de saber qui sóc, 246 00:14:34,550 --> 00:14:39,610 que almenys sé que sóc el mateix usuari o si més no, més concretament, el mateix navegador. 247 00:14:39,610 --> 00:14:45,660 I això és en última instància com el superglobal sessió s'implementa. 248 00:14:45,660 --> 00:14:51,200 El servidor no té idea de qui és vostè quan torni a visitar un lloc web per a la segona o tercera vegada 249 00:14:51,200 --> 00:14:53,410 menys que vostè present aquest segell a la mà. 250 00:14:53,410 --> 00:14:55,530 I tan aviat com vostè present que segell a la mà, 251 00:14:55,530 --> 00:14:59,370 el lloc web essencialment entra en una petita base de dades del seu propi 252 00:14:59,370 --> 00:15:06,040 i els xecs, val, acabo de veure el segell de la mà de bo8dal3ct usuari i així successivament. 253 00:15:06,040 --> 00:15:09,850 Deixa veure la informació que el programador ha emmagatzemat 254 00:15:09,850 --> 00:15:12,380 dins de la superglobal sobre aquest usuari, 255 00:15:12,380 --> 00:15:17,000 i després deixar que m'asseguri que aquestes dades són d'aquí a la sessió superglobal 256 00:15:17,000 --> 00:15:19,830 de manera que el programador pot tornar a accedir a aquestes dades 257 00:15:19,830 --> 00:15:23,360 fins i tot si s'ha establert alguns minuts o hores abans. 258 00:15:23,360 --> 00:15:26,150 Així que en altres paraules, les galetes, que ha rebut una mala reputació des de fa algun temps 259 00:15:26,150 --> 00:15:29,990 a causa de la inseguretat en els navegadors i que realment pot violar la nostra privacitat i tot això, 260 00:15:29,990 --> 00:15:31,900 en realitat tenen una gran utilitat ja que sense ells 261 00:15:31,900 --> 00:15:36,110 que constantment s'iniciï sessió a cada pàgina Facebook visites 262 00:15:36,110 --> 00:15:40,680 o tots els correus electrònics de Gmail de llegir si el navegador no tingués alguna manera de recordar 263 00:15:40,680 --> 00:15:43,320 que ja ha autenticat. 264 00:15:43,320 --> 00:15:46,640 >> Així que d'aquesta manera s'envien les galetes d'anada i tornada a través del cable. 265 00:15:46,640 --> 00:15:52,470 Una altra curiositat sobre les galetes, sobretot aquí, és que això és completament sense xifrar. 266 00:15:52,470 --> 00:15:54,930 No hi ha xifrat passant aquí en absolut, 267 00:15:54,930 --> 00:15:57,240 i de fet estic fent servir HTTP al moment. 268 00:15:57,240 --> 00:16:00,890 Un dels nostres moments favorits en CS50, que ara és de 2 anys, 269 00:16:00,890 --> 00:16:04,750 va ser al voltant del temps d'una eina anomenada Firesheep va sortir. 270 00:16:04,750 --> 00:16:08,320 Aquest era un fanàtic de la descàrrega que va ser fet per un investigador de seguretat 271 00:16:08,320 --> 00:16:13,250 com un toc d'atenció per a la comunitat de dir com atroçment implementat 272 00:16:13,250 --> 00:16:17,900 certs mecanismes d'autenticació a la xarxa eren. 273 00:16:17,900 --> 00:16:22,880 Així per algun temps, Facebook era gairebé completament a través d'HTTP, HTTPS no. 274 00:16:22,880 --> 00:16:25,640 I encara que no té idea de com funciona el xifrat, S és segur 275 00:16:25,640 --> 00:16:27,950 el que significa que hi ha almenys alguns xifrats. 276 00:16:27,950 --> 00:16:30,610 Facebook s'utilitza per xifrar els noms d'usuari i contrasenyes, 277 00:16:30,610 --> 00:16:33,560 però tan aviat com ho vas fer amb la teva pokes o els seus missatges o el seu servei de notícies, 278 00:16:33,560 --> 00:16:35,360 tot això va ser sense xifrar. 279 00:16:35,360 --> 00:16:37,870 Així va ser fins que Gmail només un any o dos enrere. 280 00:16:37,870 --> 00:16:41,100 Cada vegada que ha entrat en si, que utilitza xifrat segur 281 00:16:41,100 --> 00:16:44,300 però després no ho van fer. I per què podria ser? 282 00:16:44,300 --> 00:16:49,210 Per què no utilitzar la criptografia tot el temps en els casos d'ús d'aquest tipus? 283 00:16:49,210 --> 00:16:53,700 Què és això? Crec que he sentit alguna cosa. [Estudiant] Velocitat. 284 00:16:53,700 --> 00:16:56,250 Velocitat, no? Hi ha maneres d'evitar això. 285 00:16:56,250 --> 00:16:59,610 Però si només una mica de pensar-hi, lògicament, si xifra una mica, 286 00:16:59,610 --> 00:17:01,820 el que has de fer com a mínim una mica més de treball. 287 00:17:01,820 --> 00:17:05,460 En pset 2 quan vostè implementa Cèsar o Vigenère o esquerda, fins i tot, 288 00:17:05,460 --> 00:17:07,760 només imprimeix una cadena és relativament fàcil. 289 00:17:07,760 --> 00:17:12,040 Xifrar i després imprimir una cadena mínimament requereix una mica més. 290 00:17:12,040 --> 00:17:14,520 >>  Per als súper populars llocs web com Google i Facebook, 291 00:17:14,520 --> 00:17:18,839 si vostè ha de fer més treball per a cada usuari per a cada pàgina web única que visiten, 292 00:17:18,839 --> 00:17:20,520 que només es necessita més temps de CPU. 293 00:17:20,520 --> 00:17:22,920 I si vostè necessita més temps de CPU, és possible que necessiti més servidors, 294 00:17:22,920 --> 00:17:24,270 el que significa que vostè pot ser que necessiti més diners. 295 00:17:24,270 --> 00:17:27,579 I així, durant molts anys, aquest realment no era la millor pràctica. 296 00:17:27,579 --> 00:17:31,440 La gent utilitza xifrat SSL només quan era necessari. 297 00:17:31,440 --> 00:17:34,960 Però va resultar, i com aquest tipus amb Firesheep va fer súper clara, 298 00:17:34,960 --> 00:17:37,920 quan vostès que es troben actualment a Facebook en aquest moment - 299 00:17:37,920 --> 00:17:39,880 Per curiositat, a veure si va a confessar. 300 00:17:39,880 --> 00:17:42,620 Si estàs a Facebook ara mateix en alguna pestanya, encara que no estiguin en primer pla, 301 00:17:42,620 --> 00:17:46,610 és l'adreça URL HTTP o HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Els estudiants] diverses S. S? [Rialles] 303 00:17:50,560 --> 00:17:55,510 Bé. Qualsevol HTTP? A només 1? Bé. 304 00:17:55,510 --> 00:17:58,940 Així que tots podem hackejar compte d'aquest tipus Facebook en aquests moments. 305 00:17:58,940 --> 00:18:04,100 En la seva major part, això s'ha convertit s'activa per defecte, si més no en alguns llocs web. 306 00:18:04,100 --> 00:18:08,120 I conte llarg, si el trànsit del seu web no està xifrada, 307 00:18:08,120 --> 00:18:12,960 no només el codi HTML anar i venir a través de les wifis sense xifrar, 308 00:18:12,960 --> 00:18:16,760 així que coses com les galetes van i vénen tot l'aire 309 00:18:16,760 --> 00:18:18,940 sense cap tipus d'encriptació. 310 00:18:18,940 --> 00:18:23,540 Així que si tens una mica de sentit comú de programació o una mica de google habilitats 311 00:18:23,540 --> 00:18:27,410 per trobar programari lliure que fa això, l'únic que has de fer és seure a Starbucks 312 00:18:27,410 --> 00:18:30,680 o seure en un aeroport on hi ha generalment no xifrat WiFi 313 00:18:30,680 --> 00:18:36,070 i mira per paraules clau com a set-Cookie: o PHPSESSID 314 00:18:36,070 --> 00:18:39,300 perquè si vostè té el coneixement tècnic per veure només el WiFi 315 00:18:39,300 --> 00:18:43,010 per a tots els bits que flueixen a través de l'aire per a aquest patró, 316 00:18:43,010 --> 00:18:50,840 llavors es pot dir que PHPSESSID noi resulta ser bo8dal i així successivament. 317 00:18:50,840 --> 00:18:53,890 I després una altra vegada si ets prou expert en tecnologia o tenir l'eina adequada, 318 00:18:53,890 --> 00:18:58,890 a continuació, pot simplement tornar a configurar el seu propi navegador per iniciar la presentació d'aquest segell a la mà 319 00:18:58,890 --> 00:19:05,030 a Facebook.com, i Facebook és només suposarà que vostè és aquest tipus 320 00:19:05,030 --> 00:19:09,880 perquè tot el que saben no és el que ets, sinó que té el següent identificador únic. 321 00:19:09,880 --> 00:19:14,650 Així que si vostè roba aquest identificador únic i presentar-lo al servidor web com el seu propi, 322 00:19:14,650 --> 00:19:16,860 que només es mostrarà a aquesta persona feed de notícies 323 00:19:16,860 --> 00:19:18,980 o d'aquesta persona missatges o tocs. 324 00:19:18,980 --> 00:19:23,190 >> I jo faria Google ara com activar HTTPS a Facebook, potser. 325 00:19:23,190 --> 00:19:25,150 Però realment és tan simple com això. 326 00:19:25,150 --> 00:19:27,660 I així, Facebook i Google i similars s'han posat realment bo en això, 327 00:19:27,660 --> 00:19:31,870 però mantenir un ull cap a fora encara més pels llocs web que visiti que no utilitzen HTTP 328 00:19:31,870 --> 00:19:35,020 i tenen algun tipus d'informació sensible en ells, 329 00:19:35,020 --> 00:19:37,490 ja sigui financera o personal o similar. 330 00:19:37,490 --> 00:19:43,180 Si no utilitzeu aquesta, molt possiblement pot ser galetes com aquest molt fàcilment robats 331 00:19:43,180 --> 00:19:46,270 i després forjada, i això és exactament el que va fer Firesheep. 332 00:19:46,270 --> 00:19:48,250 No ha de ser un programador. 333 00:19:48,250 --> 00:19:51,680 Tot el que havia de fer era tenir una connexió a Internet, descàrrega aquesta eina gratuïta, 334 00:19:51,680 --> 00:19:56,490 i el que faria és que es connecti i després li mostrarà els noms de Facebook 335 00:19:56,490 --> 00:20:00,170 de tots en Sanders, en aquesta demostració particular, al seu voltant 336 00:20:00,170 --> 00:20:03,260 i tot el que havia de fer era fer clic en el seu nom i el programari automatitzat el procés 337 00:20:03,260 --> 00:20:05,970 d'olorar aquesta galeta, presentant a Facebook com el seu propi, 338 00:20:05,970 --> 00:20:07,990 i, voila, vostè està registrat 339 00:20:07,990 --> 00:20:11,190 Així que aquest és un altre d'aquests "no facis això" oficialment. 340 00:20:11,190 --> 00:20:14,660 Si vostè té la seva pròpia xarxa domèstica i voleu retocar, per tots els mitjans, 341 00:20:14,660 --> 00:20:17,530 però s'adonen que això fa creuar la línia en un entorn universitari. 342 00:20:17,530 --> 00:20:20,030 >> Però l'objectiu aquí és realment per destacar no com fer-ho 343 00:20:20,030 --> 00:20:22,320 però la forma de defensar-se aquest tipus de coses. 344 00:20:22,320 --> 00:20:26,180 I la solució trivial aquí, tot i que ella mateixa és defectuosa, 345 00:20:26,180 --> 00:20:31,360 és reduir realment l'ús de llocs que no utilitzen HTTPS constantment. 346 00:20:31,360 --> 00:20:34,520 Així que llocs com Facebook i Google tenen cada vegada més caselles de verificació 347 00:20:34,520 --> 00:20:36,200 on es pot optar per aquest tipus de coses, 348 00:20:36,200 --> 00:20:40,000 i els bancs han tingut això durant anys per raons similars. 349 00:20:40,000 --> 00:20:43,580 Així que una mica d'un factor de por si podem. Però això és en poques paraules. 350 00:20:43,580 --> 00:20:46,420 Així és com un servidor recordi qui és vostè. 351 00:20:46,420 --> 00:20:50,760 I tan aviat com puguin recordar qui són, poden recordar res de tu 352 00:20:50,760 --> 00:20:56,140 que el programador ha emmagatzemat a l'interior d'aquest superglobal especial anomenada $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 I per pset 7 ho estem fent servir trivialment només per recordar un int, 354 00:20:59,750 --> 00:21:02,260 a saber, la identificació única de l'usuari que ha iniciat sessió, 355 00:21:02,260 --> 00:21:05,880 pel que sabem que hi han estat abans. 356 00:21:05,880 --> 00:21:12,450 Qualsevol pregunta llavors sobre les sessions o les galetes o similars? 357 00:21:12,450 --> 00:21:15,130 Firesheep no funciona tan bé ja, 358 00:21:15,130 --> 00:21:18,310 i has de posar l'equip en un mode promiscu especial 359 00:21:18,310 --> 00:21:20,700 pel que en realitat estàs escoltant el trànsit a més de vostès mateixos. 360 00:21:20,700 --> 00:21:23,940 Així que si vostè està descarregant actualment Firesheep, fes-lo realitat no és tan fàcil 361 00:21:23,940 --> 00:21:26,850 com ho era abans de demostrar. 362 00:21:26,850 --> 00:21:29,070 Està bé. I no ho fan en Sanders. Fes-ho a casa. 363 00:21:29,070 --> 00:21:30,890 Bases de dades. 364 00:21:30,890 --> 00:21:33,580 Una de les coses que vam fer al conjunt de processadors 7 molt deliberadament 365 00:21:33,580 --> 00:21:37,780 Se li donarà una taula de base de dades de la mostra per als usuaris que té alguns identificadors d'usuari, 366 00:21:37,780 --> 00:21:41,020 alguns noms d'usuari, contrasenyes encriptades i alguns en el mateix. 367 00:21:41,020 --> 00:21:44,520 I com veuràs, si no ho ha fet, vostè va a haver de canviar la taula una mica. 368 00:21:44,520 --> 00:21:47,710 Vas a haver de afegir una mica de memòria cau per a cada un dels usuaris en aquesta taula, 369 00:21:47,710 --> 00:21:51,130 i hauràs afegir una altra taula d'història, una taula de carteres, 370 00:21:51,130 --> 00:21:53,310 o potser anomenar-lo d'una altra manera. 371 00:21:53,310 --> 00:21:56,740 Però en termes de pensar sobre com fer-ho, anem a obrir aquesta eina 372 00:21:56,740 --> 00:22:00,570 que utilitzem el divendres, però si no familiar, l'aparell ve amb una eina 373 00:22:00,570 --> 00:22:04,680 phpMyAdmin que es diu casualment escrit en PHP, 374 00:22:04,680 --> 00:22:07,950 però el seu propòsit en la vida, després d'iniciar sessió aquí com jharvard amb carmesí, 375 00:22:07,950 --> 00:22:15,160 és que em donés una manera fàcil d'usar de veure i canviar la meva base de dades. 376 00:22:15,160 --> 00:22:18,040 >> La base de dades que estic corrent en el dispositiu que es diu MySQL. 377 00:22:18,040 --> 00:22:23,420 Això és molt popular, i és una base de dades de codi obert que és meravellosament fàcil d'usar, 378 00:22:23,420 --> 00:22:25,620 especialment amb extrems davanters d'aquesta manera. 379 00:22:25,620 --> 00:22:29,350 El que aquesta eina em permet fer, per exemple, és furgar taules. 380 00:22:29,350 --> 00:22:30,890 Deixa anar endavant i fer-ho. 381 00:22:30,890 --> 00:22:36,580 Divendres vam crear una taula anomenada alumnes que era super simple. 382 00:22:36,580 --> 00:22:41,680 Tenia 3 columnes - id, nom i correu electrònic - i s'insereix manualment un parell de files 383 00:22:41,680 --> 00:22:44,420 com David i Mike en aquest exemple particular. 384 00:22:44,420 --> 00:22:47,290 Vegem això una mica més, i suposarem que volem recordar més 385 00:22:47,290 --> 00:22:49,660 que només el nom i el correu electrònic d'un usuari. 386 00:22:49,660 --> 00:22:53,090 Permetin-me feu clic a Estructura aquí a la part superior. 387 00:22:53,090 --> 00:22:55,440 I una altra vegada, el conjunt de processadors li guia pels passos necessaris aquí, 388 00:22:55,440 --> 00:22:58,150 així que no et preocupis si alguna cosa d'això és una mica ràpid. 389 00:22:58,150 --> 00:22:59,690 Llavors vaig a fer clic aquí. 390 00:22:59,690 --> 00:23:02,270 Vaig a afegir un cert nombre de columnes que segueixen email 391 00:23:02,270 --> 00:23:04,130 perquè vull afegir alguna cosa com a casa. 392 00:23:04,130 --> 00:23:06,640 Em vaig oblidar de registrar la casa d'un estudiant. 393 00:23:06,640 --> 00:23:11,400 Permetin-me fer clic a Vés, i ara tenim aquesta manera que per desgràcia és una mica ampli d'esquerra a dreta, 394 00:23:11,400 --> 00:23:13,710 però jo vaig a dir el nom d'aquesta casa de camp, 395 00:23:13,710 --> 00:23:16,050 i llavors el tipus que ara ha de triar. 396 00:23:16,050 --> 00:23:18,870 Així que anem a tenir una breu xerrada sobre els diferents tipus de MySQL 397 00:23:18,870 --> 00:23:24,590 perquè mentre que PHP és tipus febles i quin tipus de juga ràpid i lliurement amb els tipus, 398 00:23:24,590 --> 00:23:29,430 en una base de dades especial que és super important utilitzar realment escrivint al seu avantatge 399 00:23:29,430 --> 00:23:33,260 perquè una de les coses MySQL i altres motors de base de dades pot fer per vostè 400 00:23:33,260 --> 00:23:37,910 és assegurar-se que vostè no posa dades falses a la base de dades. 401 00:23:37,910 --> 00:23:41,850 Aquesta és una espècie d'error de xecs gratuïts a la seva disposició. 402 00:23:41,850 --> 00:23:46,250 >> A casa som nosaltres, òbviament, no volem que sigui un int, que és un valor de 32-bit en MySQL. 403 00:23:46,250 --> 00:23:49,810 Vam parlar breument el divendres sobre VARCHAR, que significa carbó longitud variable. 404 00:23:49,810 --> 00:23:54,720 Què és això? Això li permet especificar que voleu que es tracta d'una cadena d'algun tipus. 405 00:23:54,720 --> 00:23:56,840 No se sap molt bé per endavant quant temps és, 406 00:23:56,840 --> 00:24:00,100 pel que vaig a dir arbitràriament un nom de la casa pot ser de 255 caràcters, 407 00:24:00,100 --> 00:24:04,190 però es pot anar amb 32, 64 - un nombre realment. 408 00:24:04,190 --> 00:24:10,700 Però l'avantatge d'utilitzar un VARCHAR sobre un camp anomenat char és el que? 409 00:24:10,700 --> 00:24:15,110 Només intuïtivament si em desplaço fins aquí, noti que hi ha char i varchar hi. 410 00:24:15,110 --> 00:24:19,520 VARCHAR és la longitud de caràcters variable, char és una longitud fixa de caràcters. 411 00:24:19,520 --> 00:24:24,730 Així que basat només en aquesta definició, quina és l'avantatge o desavantatge de cada un d'aquests? 412 00:24:24,730 --> 00:24:30,490 En altres paraules, que es preocupa per la distinció, o per què t'importa? 413 00:24:31,660 --> 00:24:35,750 >> Si. [Estudiant] VARCHAR té més flexibilitat, però ocupa més memòria. 414 00:24:35,750 --> 00:24:40,730 Bé. VARCHAR ocupa més - Anem a veure. No estic segur si he sentit aquest dret. 415 00:24:40,730 --> 00:24:42,360 Es pot dir que una vegada més? 416 00:24:42,360 --> 00:24:45,850 [Estudiant] vaig dir VARCHAR probablement té més flexibilitat però ocupa més memòria. 417 00:24:45,850 --> 00:24:51,170 Interessant. Bé. VARCHAR probablement li dóna més flexibilitat, però ocupa més memòria. 418 00:24:51,170 --> 00:24:53,220 Aquest últim no és necessàriament cert. 419 00:24:53,220 --> 00:24:56,290 Depèn del context, però tornarem a això. 420 00:24:56,290 --> 00:25:03,230 >> [Resposta dels estudiants inaudible] Exactament. 421 00:25:03,230 --> 00:25:06,900 De fet, és el cas que char sol utilitzar més memòria 422 00:25:06,900 --> 00:25:10,950 perquè un char, com en C, és com una cadena, és una sèrie de caràcters. 423 00:25:10,950 --> 00:25:13,690 Així que si et diuen que un camp char de longitud 255, 424 00:25:13,690 --> 00:25:16,910 la base de dades és, literalment, et donarà 255 caràcters. 425 00:25:16,910 --> 00:25:22,290 I si la casa acaba sent personatges Mather i 6 en total, 426 00:25:22,290 --> 00:25:25,090 vostè està perdent més de 200 caràcters. 427 00:25:25,090 --> 00:25:29,640 >> Així que un VARCHAR efectivament només utilitza tants caràcters com sigui necessari 428 00:25:29,640 --> 00:25:31,590 fins a un import màxim. 429 00:25:31,590 --> 00:25:35,470 Però el preu que es paga és en realitat el rendiment, potencialment. 430 00:25:35,470 --> 00:25:39,740 Si vostè sap per endavant que totes les seves cadenes seran de 8 caràcters - 431 00:25:39,740 --> 00:25:43,090 Per exemple, suposeu que requereixen contrasenyes de longitud 8 - 432 00:25:43,090 --> 00:25:47,350 l'avantatge d'utilitzar un camp char de tant en tant, encara que no sovint, 433 00:25:47,350 --> 00:25:51,100 és especificar una longitud fixa per una mena contrasenya 434 00:25:51,100 --> 00:25:53,300 perquè ara la base de dades pot ser encara més intel · ligent. 435 00:25:53,300 --> 00:25:58,160 Si se sap que cada camp char, cada cadena en una columna és la mateixa longitud, 436 00:25:58,160 --> 00:26:00,780 a recuperar la funció d'accés aleatori. 437 00:26:00,780 --> 00:26:05,110 Vostè pot saltar entre els camps aprofitar diverses en la taula de base de dades 438 00:26:05,110 --> 00:26:07,940 perquè pensar en una base de dades com files i columnes. 439 00:26:07,940 --> 00:26:11,670 Així que si cadascuna de les cadenes de la mateixa longitud, 440 00:26:11,670 --> 00:26:17,820 Sabia vostè que la primera és en el byte 0, el següent és el byte 8 441 00:26:17,820 --> 00:26:20,240 i després 16 i després 24 i així successivament. 442 00:26:20,240 --> 00:26:24,500 Així que si totes les cordes són de la mateixa longitud, pot saltar molt més eficient. 443 00:26:24,500 --> 00:26:26,710 Així que pot ser un benefici en termes de rendiment, 444 00:26:26,710 --> 00:26:29,420 però en general vostè no té el luxe de saber per endavant, 445 00:26:29,420 --> 00:26:32,170 de manera que un VARCHAR és el camí a seguir. 446 00:26:32,170 --> 00:26:36,030 Hi ha un altre detall que fins i tot Facebook vaig trobar amb el temps. 447 00:26:36,030 --> 00:26:39,670 INT són genials, i ens tipus d'utilitzar per defecte cada vegada que vulguem un nombre, 448 00:26:39,670 --> 00:26:41,750 però és només 32 bits. 449 00:26:41,750 --> 00:26:46,210 >> I tot i que Facebook no acaba de tenir 4 mil milions d'usuaris ara, 450 00:26:46,210 --> 00:26:48,680 definitivament hi ha algunes persones per aquí amb més d'un compte 451 00:26:48,680 --> 00:26:50,960 o els comptes que s'han obert i tancat, 452 00:26:50,960 --> 00:26:55,130 i pel mateix crec que Facebook fa uns anys va tenir la transició de int 453 00:26:55,130 --> 00:27:00,010 que, com és ben anomenat, bigint, que és a 64 bits en el seu lloc. 454 00:27:00,010 --> 00:27:02,230 Així que això també és una decisió de disseny. 455 00:27:02,230 --> 00:27:06,570 Vostè seria increïblement afortunat si el seu projecte final es converteix en l'inici, 456 00:27:06,570 --> 00:27:10,010 Disposa de 4 milions de dòlars i els usuaris 1, més o menys, 457 00:27:10,010 --> 00:27:13,200 en aquest cas l'ús INT pot resultar una mica miop. 458 00:27:13,200 --> 00:27:16,230 Però, en realitat, la seva taula d'usuaris està probablement molt bé amb INT. 459 00:27:16,230 --> 00:27:19,340 Però perquè alguna cosa com pset 7, com la seva taula d'història, 460 00:27:19,340 --> 00:27:23,700 és possible que tingui milers, milions d'usuaris si esdevenir etrade.com. 461 00:27:23,700 --> 00:27:26,020 Així que, potser no tingui més de 4 mil milions d'usuaris, 462 00:27:26,020 --> 00:27:30,070 aquells usuaris que sí que tenen poden tenir més de 4 mil milions de transaccions a través del temps - 463 00:27:30,070 --> 00:27:33,200 compra i ven i les coses en la seva història. 464 00:27:33,200 --> 00:27:38,090 Així que si vostè fa preveure - una vegada més, aquests són bons problemes a tenir si vostè té aquesta quantitat de dades - 465 00:27:38,090 --> 00:27:40,920 si ho fa anticipar dades que superen la mida d'un int, 466 00:27:40,920 --> 00:27:47,740 anar amb alguna cosa com bigint és una adreça que no amb la freqüència suficient adoptat pels dissenyadors 467 00:27:47,740 --> 00:27:49,710 perquè figura gent que no serà un problema, 468 00:27:49,710 --> 00:27:51,930 però és tan fàcil de triar alguna cosa més gran que això. 469 00:27:51,930 --> 00:27:55,380 Decimal que estem fent servir en pset 7, que especifica la precisió fixa 470 00:27:55,380 --> 00:27:59,840 pel que pot evitar els problemes relacionats amb els flotadors i dobles i reals i similars. 471 00:27:59,840 --> 00:28:02,440 >> I després hi ha alguns altres camps aquí. Anem a agitar les mans en ells fins a cert punt. 472 00:28:02,440 --> 00:28:07,270 No obstant això, les dates, hores tenen un format establert en MySQL, 473 00:28:07,270 --> 00:28:10,830 i l'avantatge d'emmagatzemar dates com dates i VARCHAR no 474 00:28:10,830 --> 00:28:15,730 significa que la base de dades en realitat es pot canviar el format en diferents formats, 475 00:28:15,730 --> 00:28:18,800 si un format d'EUA o format europeu o similar - però vostè ho desitja - 476 00:28:18,800 --> 00:28:22,700 molt més eficient que si es tractés d'alguna cosa genèric VARCHAR. 477 00:28:22,700 --> 00:28:25,150 I després hi ha alguns altres binari, varbinary blobs. 478 00:28:25,150 --> 00:28:28,580 Aquests són objectes binaris grans, i també pot emmagatzemar dades binàries 479 00:28:28,580 --> 00:28:30,750 així com les dades geomètriques en una base de dades. 480 00:28:30,750 --> 00:28:34,350 Però per a nosaltres, en general va a importa sencers i VARCHAR i similars. 481 00:28:34,350 --> 00:28:36,230 Acabarem amb aquest exemple casa. 482 00:28:36,230 --> 00:28:40,030 Casa que diré arbitràriament en 255 caràcters. 483 00:28:40,030 --> 00:28:42,850 A continuació, el valor per defecte que poguéssim fer això. 484 00:28:42,850 --> 00:28:47,440 Podríem posar a tots per defecte en Mather House, per exemple. 485 00:28:47,440 --> 00:28:49,710 Així és com podríem especificar que la base de dades 486 00:28:49,710 --> 00:28:52,460 assegureu-vos que sempre hi ha algú que té un valor. Però vaig a deixar que sigui. 487 00:28:52,460 --> 00:28:55,270 De fet, per a les persones que viuen fora de l'escola i no en una casa, 488 00:28:55,270 --> 00:28:59,590 potser jo realment desitja especificar que el valor per defecte de la casa és NULL, 489 00:28:59,590 --> 00:29:04,890 i després he de marcar aquesta casella i dir-li a la base de dades que està bé si la casa de l'usuari és NULL. 490 00:29:04,890 --> 00:29:07,270 >> Un cop més, aquest és un altre mecanisme de defensa que pot posar en el seu lloc 491 00:29:07,270 --> 00:29:10,590 pel que no tenen ni tan sols per posar-lo al codi PHP necessàriament. 492 00:29:10,590 --> 00:29:14,630 La base de dades s'ha d'assegurar que les coses són o no són NULL. 493 00:29:14,630 --> 00:29:17,310 I finalment, Atributs. 494 00:29:17,310 --> 00:29:18,920 Cap d'aquests són realment rellevants. 495 00:29:18,920 --> 00:29:22,880 Binari sense signe - cap d'aquests són rellevants per a una VARCHAR. 496 00:29:22,880 --> 00:29:24,220 Index. 497 00:29:24,220 --> 00:29:27,320 Algú sap o no recorda o té una conjectura pel que fa al que és un índex 498 00:29:27,320 --> 00:29:29,510 per alguna cosa com la casa? 499 00:29:29,510 --> 00:29:35,240 També això és en realitat una decisió de disseny important i relativament fàcil. 500 00:29:35,240 --> 00:29:39,200 Per a aquells que encara no l'han vist, el divendres parlem breument sobre les claus principals. 501 00:29:39,200 --> 00:29:43,240 En una taula de base de dades, una clau primària és el camp o columna 502 00:29:43,240 --> 00:29:46,270 que identifica de manera única les files a la taula. 503 00:29:46,270 --> 00:29:49,150 Així, a la taula actual que tenim identificacions, tenim noms i correus electrònics. 504 00:29:49,150 --> 00:29:52,050 Quin d'ells és el millor candidat per ser una clau principal, 505 00:29:52,050 --> 00:29:55,810 la funció consisteix a identificar de forma única les files? 506 00:29:55,810 --> 00:29:57,530 Probablement ID. 507 00:29:57,530 --> 00:29:59,930 Sens dubte, també podríem utilitzar les opcions que no obstant això? 508 00:29:59,930 --> 00:30:02,860 Potser vostè podria utilitzar el correu electrònic pel fet que en teoria és únic 509 00:30:02,860 --> 00:30:05,380 llevat que la gent està compartint comptes de correu electrònic. 510 00:30:05,380 --> 00:30:09,980 Però la realitat és que si vostè està utilitzant un ID numèric com 1234, 511 00:30:09,980 --> 00:30:14,170 això és només de 32 bits, mentre que una adreça de correu electrònic podria ser aquesta quantitat de bytes o octets que aquest. 512 00:30:14,170 --> 00:30:16,610 Així que en termes d'eficiència dels identificadors únics, 513 00:30:16,610 --> 00:30:19,270 que tendeix a ser bona pràctica només per utilitzar un int 514 00:30:19,270 --> 00:30:23,090 fins i tot si vostè té algun candidat cadena que sens dubte podria utilitzar. 515 00:30:23,090 --> 00:30:26,760 >> Per alguna cosa com la casa, això no hauria de ser una clau principal 516 00:30:26,760 --> 00:30:30,770 perquè llavors només una persona podia viure en Mather i 1 persona de Currier i similars. 517 00:30:30,770 --> 00:30:32,790 De la mateixa manera, això no ha de ser única. 518 00:30:32,790 --> 00:30:37,830 La diferència entre el primari i únic és que en el cas de la nostra taula actual, 519 00:30:37,830 --> 00:30:42,620 ID seria primari però el correu electrònic no és primari per la raó que acabem d'esmentar - 520 00:30:42,620 --> 00:30:44,740 rendiment - però encara ha de ser únic. 521 00:30:44,740 --> 00:30:47,200 Pel que encara pot forçar unicitat sense fer la reclamació 522 00:30:47,200 --> 00:30:49,520 que és un súper camp primari important. 523 00:30:49,520 --> 00:30:52,610 Però aquest és bastant útil: Index. 524 00:30:52,610 --> 00:30:56,180 Si vostè sap per endavant pel seu projecte final, per pset 7, o en general, 525 00:30:56,180 --> 00:30:59,480 que aquesta casa de camp serà una cosa que vostè busca en un terreny 526 00:30:59,480 --> 00:31:01,910 usant la paraula clau de selecció o d'alguna altra cosa, 527 00:31:01,910 --> 00:31:05,180 llavors preventivament pot dir la base de dades per a treballar la seva màgia 528 00:31:05,180 --> 00:31:10,510 i assegurar-se que es crea en la memòria de qualsevol estructura de dades luxe necessari 529 00:31:10,510 --> 00:31:13,770 per agilitar les recerques basades a casa. 530 00:31:13,770 --> 00:31:17,860 Potser pugui utilitzar una taula hash, potser va a utilitzar una llista enllaçada. 531 00:31:17,860 --> 00:31:21,260 En realitat, es tendeix a utilitzar un arbre, sovint una estructura anomenada B-tree - 532 00:31:21,260 --> 00:31:24,090 no és un arbre binari i l'arbre B - que és un arbre molt gran 533 00:31:24,090 --> 00:31:27,370 que es poden veure en una classe com CS124, la classe d'estructures de dades. 534 00:31:27,370 --> 00:31:31,800 Però en fi, vostè no ha de preocupar-se que en utilitzar el programari de base de dades intel · ligent. 535 00:31:31,800 --> 00:31:35,890 Vostè pot simplement dir, "Índex d'aquest camp, així que pot buscar-hi de manera més eficient." 536 00:31:35,890 --> 00:31:40,250 >> Si deixa aquest apagat i vostè tracta de buscar per a cada CD a la base de dades que resideix a Mather, 537 00:31:40,250 --> 00:31:42,710 que recaurà en recerca lineal. 538 00:31:42,710 --> 00:31:45,360 I si vostè té 6.000 estudiants de llicenciatura tots els que viuen en una casa, 539 00:31:45,360 --> 00:31:47,900 vostè va a buscar a tota la taula per trobar les Matherites, 540 00:31:47,900 --> 00:31:52,190 mentre que si vostè diu Index, espero que sigui alguna cosa proper a una recerca logarítmica 541 00:31:52,190 --> 00:31:54,510 per trobar aquest tipus d'estudiants. 542 00:31:54,510 --> 00:31:56,750 Això és només una funció gratuïta per encendre, 543 00:31:56,750 --> 00:31:59,530 tot i que ve a un preu d'una certa quantitat d'espai. 544 00:31:59,530 --> 00:32:02,690 Finalment, l'increment automàtic, aquest camp AI, 545 00:32:02,690 --> 00:32:05,830 Només vol dir que si es tracta d'un enter i no vol cuidar incrementar vostè mateix 546 00:32:05,830 --> 00:32:07,570 cada vegada que hi ha un nou usuari, comprovar que, 547 00:32:07,570 --> 00:32:11,910 i cada usuari que s'insereix automàticament s'obtindrà una nova identificació. 548 00:32:11,910 --> 00:32:15,620 Farem clic a Desa, i ara trobarem cap defecte amb aquest disseny. 549 00:32:15,620 --> 00:32:20,200 Si entro a Browse, observi que tant Mike i casa meva és NULL. 550 00:32:20,200 --> 00:32:22,420 Puc utilitzar phpMyAdmin per editar aquest manual. 551 00:32:22,420 --> 00:32:25,110 Jo puc entrar aquí i escriviu Mather i després prem Enter, 552 00:32:25,110 --> 00:32:27,740 i ara compte de la taula és diferent. 553 00:32:27,740 --> 00:32:29,270 Però noti que podia fer alguna cosa més també. 554 00:32:29,270 --> 00:32:33,530 Identificació de David és 1, així que de nou phpMyAdmin és una eina administrativa; 555 00:32:33,530 --> 00:32:35,970 això no és una cosa que els usuaris són cada vegada va a veure. 556 00:32:35,970 --> 00:32:38,810 Així que si en lloc feu clic a la fitxa SQL sobre de la tapa - 557 00:32:38,810 --> 00:32:41,450 i una altra, pset 7 li donarà a conèixer més d'aquestes consultes - 558 00:32:41,450 --> 00:32:45,260 Em pot executar manualment l'ordre SQL Llenguatge de consulta estructurat 559 00:32:45,260 --> 00:32:56,410 Usuaris UPDATE SET casa = 'Pfoho' WHERE id = 1. 560 00:32:56,410 --> 00:33:00,830 Aquestes consultes SQL són, ben poc, bastant llegible d'esquerra a dreta. 561 00:33:00,830 --> 00:33:04,350 Actualització de la taula d'usuaris, estableixi el camp anomenat casa Pfoho 562 00:33:04,350 --> 00:33:06,830 on l'ID de l'usuari és 1. 563 00:33:06,830 --> 00:33:11,480 O fins i tot podria fer que email = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 Mentre que únicament m'identifica, que poden funcionar tan bé. 565 00:33:14,860 --> 00:33:18,810 Però Identificació tendeix a ser més alt rendiment, de manera que farem això. 566 00:33:18,810 --> 00:33:22,950 Anem, feu clic a Vés Bé, lecture.users no existeix. Quin és el meu error? 567 00:33:22,950 --> 00:33:26,220 Quina és la taula en realitat es diu aquí? 568 00:33:26,220 --> 00:33:28,770 Es diu als estudiants simplement perquè això és el que hem fet fins aquí dalt a l'esquerra. 569 00:33:28,770 --> 00:33:31,860 Es diu als estudiants no els usuaris. Llavors feu clic a Vés ara. 570 00:33:31,860 --> 00:33:34,330 1 fila afectada. Consulta prendre 0,01 segons. 571 00:33:34,330 --> 00:33:38,010 Si faig clic a Explorar ara, ara viu a Pfoho Malan. 572 00:33:38,010 --> 00:33:42,070 Així que aquesta és una altra mostra de SQL, però el conjunt de processadors explica el procés de més una mica d'això. 573 00:33:42,070 --> 00:33:44,710 >> Hi ha una decisió estúpida que ja he fet aquí. 574 00:33:44,710 --> 00:33:47,820 Jo diria que aquest disseny de base de dades és ineficient 575 00:33:47,820 --> 00:33:51,650 perquè com més persones que se sumen a la taula dels estudiants, 576 00:33:51,650 --> 00:33:54,730 els més de nosaltres que començar a afegir, més de la TFS de començar a afegir, 577 00:33:54,730 --> 00:33:58,320 començarem a veure el que els acomiadaments en aquesta taula? 578 00:34:00,840 --> 00:34:06,020 >> Si. [Alumne] Veient que està en els estudiants, estem usant la mateixa [inaudible] 579 00:34:06,020 --> 00:34:07,360 El mateix - És clar, exactament. 580 00:34:07,360 --> 00:34:10,400 Llavors, si 400 persones viuen en Mather, més o menys, 581 00:34:10,400 --> 00:34:15,000 finalment aquesta taula va a tenir 400 files que diuen "Mather", "Mather," 582 00:34:15,000 --> 00:34:16,590 "Mather", "Mather", "Mather". 583 00:34:16,590 --> 00:34:19,820 Estem perdent tots aquests bytes, i hi ha un parell de robatoris de pilota allà. 584 00:34:19,820 --> 00:34:23,080 1, hi ha el cas de la cantonada boja en què si algú paga un munt de diners 585 00:34:23,080 --> 00:34:25,949 i canvia el nom Mather, ara hem de canviar la nostra taula de base de dades completa. 586 00:34:25,949 --> 00:34:29,730 Això no passarà sovint, encara Pfoho un cop va ser anomenat North House fa 15 anys, 587 00:34:29,730 --> 00:34:32,310 així succeeix. Però això no és tot el que convincent. 588 00:34:32,310 --> 00:34:36,000 Més convincent que un cas com aquest racó de la necessitat d'actualitzar les dades de forma massiva 589 00:34:36,000 --> 00:34:41,150 per a una base de dades és per què emmagatzemar Mather una i altra vegada i una altra i una altra vegada? 590 00:34:41,150 --> 00:34:43,020 Això és un munt de caràcters, 6 caràcters. 591 00:34:43,020 --> 00:34:45,500 No podem fer-ho millor que això, especialment per Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Segur que podem fer alguna cosa millor que aquest nombre de caràcters. 593 00:34:48,320 --> 00:34:51,790 Per què no associar un identificador únic a cada casa 594 00:34:51,790 --> 00:34:55,020 i la botiga que per a cada usuari? Així que anem a provar això. 595 00:34:55,020 --> 00:35:00,610 En lloc d'utilitzar la taula dels estudiants, deixa anar a la meva base de dades de lectura fins aquí dalt a l'esquerra. 596 00:35:00,610 --> 00:35:02,600 Noteu aquí que diu Crear taula. 597 00:35:02,600 --> 00:35:04,550 Crearem una taula nova anomenada cases. 598 00:35:04,550 --> 00:35:08,880 El nombre de columnes serà 2. Retorn. 599 00:35:08,880 --> 00:35:11,200 Ara tinc dos camps. 600 00:35:11,200 --> 00:35:14,600 Vaig a trucar a això el nom, i que serà un VARCHAR de longitud 255, 601 00:35:14,600 --> 00:35:18,770 >> però això és bastant arbitrària. Déjame posar això aquí per convenció. 602 00:35:18,770 --> 00:35:22,840 Així que posi una identificació aquí. Donarem a cada casa un identificador únic. 603 00:35:22,840 --> 00:35:25,360 Donarem a cada casa un nom. 604 00:35:25,360 --> 00:35:30,980 Anem a especificar que l'identificador no està signat només per convenció d'utilitzar només números positius. 605 00:35:30,980 --> 00:35:35,020 Seguirem endavant i donar a aquest un camp d'increment automàtic per ara. 606 00:35:35,020 --> 00:35:38,160 I necessitem alguna cosa més? 607 00:35:38,160 --> 00:35:41,010 Seguirem endavant i feu clic a Desa. 608 00:35:41,010 --> 00:35:42,480 Ara tinc una segona taula. 609 00:35:42,480 --> 00:35:45,860 Observi com un a part aquest és l'ordre SQL lleugerament críptica 610 00:35:45,860 --> 00:35:50,280 que hauria hagut de escriure manualment si no s'utilitza una eina administrativa com phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 Així que una altra raó per la qual l'utilitzi. 612 00:35:51,990 --> 00:35:55,480 És una cosa meravellosament útil pedagògicament perquè pot fer clic al voltant de 613 00:35:55,480 --> 00:36:01,050 i esbrinar com funcionen les coses amb només copiar i enganxar el que phpMyAdmin va fer. 614 00:36:01,050 --> 00:36:04,150 No obstant això, la comanda CREATE TABLE és l'executat just, i aquí està la meva taula. 615 00:36:04,150 --> 00:36:11,370 Deixa anar endavant ara i utilitzar SQL primes en lloc de simplificar massa, feu clic a la pestanya Inserir. 616 00:36:11,370 --> 00:36:15,040 Deixa fer INSERT INTO cases, 617 00:36:15,040 --> 00:36:22,230 i jo vaig a dir el nom de la casa tindrà un valor de 'Mather. 618 00:36:22,230 --> 00:36:24,790 Això és tot. Aquesta sintaxi és una mica més críptica. 619 00:36:24,790 --> 00:36:26,660 Aquest és el nom dels camps que voleu inserir. 620 00:36:26,660 --> 00:36:30,390 Aquests són els valors que volem inserir en aquests camps. Permetin-me fer clic a Endavant 621 00:36:30,390 --> 00:36:34,410 1 fila inserida va prendre 0,02 segons. Permetin-me feu clic a Navega ara. 622 00:36:34,410 --> 00:36:42,020 >> Observi si faig clic a Navega, hi Mather, el ID és l'automatització del número 1. 623 00:36:42,020 --> 00:36:45,000 Permetin-me fer un altre. Deixa anar a la pestanya SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO cases. El nom de la casa tindrà un valor de Pfoho i així successivament. 625 00:36:52,950 --> 00:36:56,350 Go. I puc seguir fent això una i altra vegada i una altra. 626 00:36:56,350 --> 00:36:59,470 O si t'avorreixes amb phpMyAdmin, pots fer servir la pestanya Inserir 627 00:36:59,470 --> 00:37:01,000 i no haver d'escriure el codi SQL en brut. 628 00:37:01,000 --> 00:37:04,690 Vostè només pot colpejar a terme amb major rapidesa en escriure, per exemple, Currier, Enter, 629 00:37:04,690 --> 00:37:07,610 i ara, si fem clic a Navega, hi Currier amb un diàmetre interior de 3. 630 00:37:07,610 --> 00:37:09,920 Així que això és el que volem dir amb increment automàtic. 631 00:37:09,920 --> 00:37:12,280 Però ara hem d'arreglar alguna cosa en els estudiants. 632 00:37:12,280 --> 00:37:16,240 Pel que als estudiants si el tipus de dades del camp casa ara ser? 633 00:37:16,240 --> 00:37:19,450 Ha de ser un enter, no? 634 00:37:19,450 --> 00:37:23,950 Així, l'objectiu aquí és per excloure, també conegut com normalitzar, les taules 635 00:37:23,950 --> 00:37:27,940 de manera que nosaltres no emmagatzemem informació redundant en cap dels meus quadres. 636 00:37:27,940 --> 00:37:31,130 I de nou, el camí que eren aquí dirà Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, que és molt redundant 638 00:37:34,220 --> 00:37:36,240 en termes de malbaratament dels caràcters. 639 00:37:36,240 --> 00:37:40,820 Així que permetin-me seguir endavant i canviar això fent clic en Estructura, 640 00:37:40,820 --> 00:37:44,620 i m'ho dius a mi seguir endavant i marcar el camp de casa, feu clic a Canvia 641 00:37:44,620 --> 00:37:46,990 i ara em canviaré això sigui un int. 642 00:37:46,990 --> 00:37:49,490 255 ja no és rellevant. 643 00:37:49,490 --> 00:37:54,010 Deixin-me seguir endavant i dir que està bé si encara NULL. Guardar. 644 00:37:54,010 --> 00:37:55,870 Ara els estudiants de taula ha estat alterat amb èxit, 645 00:37:55,870 --> 00:37:59,090 i observi de nou la casa és un int. 646 00:37:59,090 --> 00:38:02,220 Com acotació al marge, ignora el nombre entre parèntesi quan es tracta d'INT. 647 00:38:02,220 --> 00:38:03,770 >> Això és per raons d'herència. 648 00:38:03,770 --> 00:38:06,920 De tornada en el dia en què no tenia GUIs, en el seu lloc hi havia un entorn de línia d'ordres, 649 00:38:06,920 --> 00:38:11,580 els 10 i 11, respectivament, s'especifiquen el nombre de caràcters que han de mostrar 650 00:38:11,580 --> 00:38:13,950 a la finestra de terminal per veure realment els camps. 651 00:38:13,950 --> 00:38:19,150 No té res a veure amb la longitud en bits del camp real, de manera que només haurem de fer cas omís d'això per ara. 652 00:38:19,150 --> 00:38:20,990 Ara he d'entrar en aquesta taula. 653 00:38:20,990 --> 00:38:24,610 I si David viu a Mather, la casa no ha de ser 0, 654 00:38:24,610 --> 00:38:27,350 que és un valor predeterminat int més proper a NULL. 655 00:38:27,350 --> 00:38:29,810 Ell ha de viure a la casa 1. 656 00:38:29,810 --> 00:38:36,870 Anem a dir que arbitràriament Mike viu a Pfoho casa, de manera que el número 2. 657 00:38:36,870 --> 00:38:40,160 Ara la meva taula es veu una mica més críptic. 658 00:38:40,160 --> 00:38:41,960 Però tingui en compte l'eficiència. 659 00:38:41,960 --> 00:38:44,860 Ara estic fent servir només 32 bits per identificar la casa, 660 00:38:44,860 --> 00:38:49,530 el que significa que només hi ha una definició canònica de casa Mather i Pfoho 661 00:38:49,530 --> 00:38:52,090 i que està a la taula de les cases. 662 00:38:52,090 --> 00:38:55,880 Així que si vull a reunir ara aquestes taules, pensar d'aquesta manera. 663 00:38:55,880 --> 00:39:01,980 Aquí tinc la meva taula dels estudiants, i en la part dreta hi ha aquests números, 1 i 2. 664 00:39:01,980 --> 00:39:04,180 1 és Mather, 2 és Pfoho. 665 00:39:04,180 --> 00:39:08,580 Tenim els mateixos números en aquesta altra taula, que es diu cases, 666 00:39:08,580 --> 00:39:11,020 1 i 2 i 3 per les 3 cases. 667 00:39:11,020 --> 00:39:14,990 El que ara vull fer és tenir la capacitat en el codi, PHP i SQL, 668 00:39:14,990 --> 00:39:18,800 a una espècie de reunir-se amb aquestes taules, en la qual si aquests són els estudiants i aquests són les cases, 669 00:39:18,800 --> 00:39:22,050 volem d'alguna manera de combinar perquè un s'alinea amb 1, 670 00:39:22,050 --> 00:39:25,670 2 línies amb 2, i que pel que podem esbrinar on David 671 00:39:25,670 --> 00:39:28,000 i on Mike i on tothom viu. 672 00:39:28,000 --> 00:39:31,850 En aquest cas podria executar una consulta SQL com la següent. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM estudiants TE cases ON - 674 00:39:40,470 --> 00:39:43,000 I ara quins camps volem que s'uneixin els? 675 00:39:43,000 --> 00:39:49,520 Així students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> Una mica críptic, sinó que significa aquesta part literalment crear una nova taula temporal 677 00:39:54,150 --> 00:39:56,690 que és el resultat d'unir als estudiants i cases. 678 00:39:56,690 --> 00:40:00,340 I com es vol combinar la punta dels dits en aquesta llista? 679 00:40:00,340 --> 00:40:05,280 Set de camp de cases iguals a les cases dels estudiants "camp ID. 680 00:40:05,280 --> 00:40:10,220 I si jo ara feu clic a Vés, torni exactament el que jo esperava. 681 00:40:10,220 --> 00:40:15,890 David està en Mather, Mike està en Pfoho, i també veig els identificadors únics. 682 00:40:15,890 --> 00:40:18,640 Però el punt és que ara tinc una taula completa. 683 00:40:18,640 --> 00:40:23,020 I així, el menjar per emportar aquí per pset 7 o realment per al projecte final: 684 00:40:23,020 --> 00:40:25,830 Si trobeu que vostè està emmagatzemant qualsevol tipus d'informació redundant, 685 00:40:25,830 --> 00:40:28,850 si es tracta d'una casa, potser és una ciutat, estat i codi postal 686 00:40:28,850 --> 00:40:32,050 on ZIP pot en general, però no sempre s'utilitza com un identificador únic, 687 00:40:32,050 --> 00:40:35,810 passen per l'exercici mental i després amb alguna cosa com phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 de factoring que les dades comuns sobretot perquè la pàgina web atrau més ben utilitzat 689 00:40:40,660 --> 00:40:45,440 i més popular, aquesta és la forma d'assegurar-se que tot és súper ràpid, 690 00:40:45,440 --> 00:40:51,930 donant a la base de dades com molts suggeriments pel que fa a la singularitat com sigui possible. 691 00:40:51,930 --> 00:40:53,860 Això era molt. 692 00:40:53,860 --> 00:40:59,010 Alguna pregunta? Està bé. Anem a prendre un descans de 5 minuts allà i reagrupar. 693 00:41:01,600 --> 00:41:03,540 Està bé. 694 00:41:03,540 --> 00:41:08,680 El següent és un exemple que es va utilitzar fa uns anys quan vaig prendre CS161, 695 00:41:08,680 --> 00:41:10,960 que és la classe de sistemes operatius al col · legi 696 00:41:10,960 --> 00:41:15,160 que és conegut per ser increïble, però una increïble quantitat de treball, 697 00:41:15,160 --> 00:41:19,810 i es concentra realment en alguns dels problemes de baix nivell que sorgeixen en els sistemes operatius 698 00:41:19,810 --> 00:41:22,700 i també fins i tot en el món de les bases de dades. 699 00:41:22,700 --> 00:41:27,040 >> La història que va ser explicada pel meu professor, Margo Seltzer, aquest any va ser el següent. 700 00:41:27,040 --> 00:41:30,990 Suposem que vostè té una nevera petita residència per a vostè i el seu company de quart 701 00:41:30,990 --> 00:41:34,030 i els dos que realment li agrada la llet. 702 00:41:34,030 --> 00:41:36,360 Així que arribes a casa de classe un dia, el seu company de quart no és encara allà, 703 00:41:36,360 --> 00:41:39,650 s'obre la nevera, i t'adones, "Oh maleïda sigui, ens quedem sense llet." 704 00:41:39,650 --> 00:41:42,070 Així es tanca la nevera, es pot caminar pel carrer per CVS 705 00:41:42,070 --> 00:41:45,830 i obtenir en les línies cada vegada més llargues per comprar una mica de llet en CVS. 706 00:41:45,830 --> 00:41:48,470 Mentrestant, el seu company de quart arriba a casa de la seva classe, 707 00:41:48,470 --> 00:41:51,690 entra a l'habitació, obre la nevera realment volen una mica de llet, 708 00:41:51,690 --> 00:41:54,130 obre la nevera i, "Maleïda sigui, no hi ha llet". 709 00:41:54,130 --> 00:41:57,890 Així que ell o ella tanca la nevera, surt per la porta, i es va a ABP 710 00:41:57,890 --> 00:42:00,910 o en algun lloc que no sigui CVS en què no anem a xocar entre si 711 00:42:00,910 --> 00:42:02,790 per anar a buscar una mica de llet. 712 00:42:02,790 --> 00:42:04,820 Per descomptat, uns minuts més tard, els dos tornar a casa 713 00:42:04,820 --> 00:42:07,740 i ara vostè té la llet dues vegades més que en realitat volia. 714 00:42:07,740 --> 00:42:10,670 I sent la llet, ara anirà malament perquè li agrada la llet 715 00:42:10,670 --> 00:42:14,200 però no m'agrada molt la llet, de manera que ara té molta llet, així que va a agrir. 716 00:42:14,200 --> 00:42:16,830 Aquesta és una situació horrible, horrible. 717 00:42:16,830 --> 00:42:22,920 Què podria haver resolt aquesta situació si fos el company de quart a casa per primera vegada? Sí 718 00:42:22,920 --> 00:42:25,970 [Estudiant] Hi hauria d'haver deixat una nota. [Rialles] 719 00:42:25,970 --> 00:42:28,090 Bé. Hi hauria d'haver deixat una nota. 720 00:42:28,090 --> 00:42:32,320 Vostè hauria d'haver posat una nota Post-it o similar, dient: "El que per a la llet" 721 00:42:32,320 --> 00:42:36,830 i després el seu company de quart conceptualment hauria estat bloquejada de realment fer això. 722 00:42:36,830 --> 00:42:38,010 O vostè podria anar un pas més enllà. 723 00:42:38,010 --> 00:42:41,060 Vostè, literalment, podria bloquejar la nevera amb una mena de cadenat, 724 00:42:41,060 --> 00:42:44,870 i ara el seu company de quart, literalment, es va tancar la porta de la nevera. 725 00:42:44,870 --> 00:42:48,520 Si generalitzem tornar a la programació, 726 00:42:48,520 --> 00:42:51,610 gairebé es pot pensar en la nevera com una mena de variable o una estructura, 727 00:42:51,610 --> 00:42:53,500 algun tipus de contenidor d'informació. 728 00:42:53,500 --> 00:42:58,290 El problema fonamental aquí és que tots dos se'ls va permetre inspeccionar 729 00:42:58,290 --> 00:43:02,370 o llegir l'estat d'aquesta estructura de dades, 730 00:43:02,370 --> 00:43:08,050 però segons sembla en diferents moments i no obstant això tots dos es va prendre una decisió 731 00:43:08,050 --> 00:43:11,920 basat en l'estat del món en aquests moments diferents en el temps. 732 00:43:11,920 --> 00:43:15,570 Així que t'havia bloquejat la nevera, hauria almenys evitar el seu company de quart 733 00:43:15,570 --> 00:43:19,070 d'haver estat capaç d'inspeccionar l'estat del món, 734 00:43:19,070 --> 00:43:22,530 perquè ell o ella no podria haver fet la mateixa decisió. 735 00:43:22,530 --> 00:43:25,780 Llavors, bases de dades, com a resultat, tenen aquest problema constantment. 736 00:43:25,780 --> 00:43:31,050 >> A veure si podem construir un escenari. 737 00:43:31,050 --> 00:43:34,310 Suposem que ets una mena de noi dolent i et Bank of America 738 00:43:34,310 --> 00:43:37,950 o un dels altres llocs en el quadrat que tenen una banda parell caixers automàtics per banda, 739 00:43:37,950 --> 00:43:41,200 i d'alguna manera va descobrir com duplicar una targeta de caixer automàtic - no és tan difícil. 740 00:43:41,200 --> 00:43:42,730 És només una banda magnètica. 741 00:43:42,730 --> 00:43:45,180 I per això el que vols fer és tractar de jugar a aquest joc 742 00:43:45,180 --> 00:43:49,060 mitjançant el qual es posa una targeta en una màquina, una altra targeta en la màquina, 743 00:43:49,060 --> 00:43:51,980 i bàsicament es vol tractar de treure diners a la vegada, 744 00:43:51,980 --> 00:43:54,930 perquè imagino que la història és la següent. 745 00:43:54,930 --> 00:43:57,350 La màquina de l'esquerra pren el seu targeta i el seu PIN, 746 00:43:57,350 --> 00:44:00,240 i després dius: "Dóna'm 100 dòlars". 747 00:44:00,240 --> 00:44:04,790 El caixer automàtic està programat per fer primer una selecció a la base de dades o el seu equivalent - 748 00:44:04,790 --> 00:44:10,780 qualsevol base de dades que està utilitzant - per veure què aquest usuari tenir a $ 100 en el seu compte? 749 00:44:10,780 --> 00:44:16,180 Si és així, llavors escopir els $ 100 i restar $ 100 del seu balanç. 750 00:44:16,180 --> 00:44:20,470 Però és clar, si hi ha diverses màquines aquí o diverses formes d'inspecció 751 00:44:20,470 --> 00:44:23,560 l'Estat d'aquest món, la volta d'un banc, per veure quants diners vostè té, 752 00:44:23,560 --> 00:44:26,780 suposem que per casualitat la màquina a l'esquerra i la dreta 753 00:44:26,780 --> 00:44:30,140 tant aquesta pregunta gairebé al mateix moment en el temps. 754 00:44:30,140 --> 00:44:34,160 >> I això sí que pot succeir. Els caixers automàtics són les computadores en aquests dies. 755 00:44:34,160 --> 00:44:37,670 Així que si la màquina de l'esquerra diu: "Sí, vostè té com a mínim $ 100" 756 00:44:37,670 --> 00:44:42,150 Mentrestant, l'equip de la dreta diu: "Sí, vostè té almenys 100 dòlars" 757 00:44:42,150 --> 00:44:47,420 llavors ambdós procedir a finalitzar els seus programes i, de fet escopir dels $ 100 758 00:44:47,420 --> 00:44:50,820 i dir: "Anteriorment vostè tenia $ 200." 759 00:44:50,820 --> 00:44:54,890 "Anem a actualitzar la variable a ser ara $ 100 que queda en el compte." 760 00:44:54,890 --> 00:44:58,780 Però si tots dos han comprovat el saldo del seu compte, hem detectat que és $ 200 761 00:44:58,780 --> 00:45:02,000 i dos d'ells després fer els càlculs i 200 diuen - 100, 762 00:45:02,000 --> 00:45:06,990 les màquines potencialment escopir dos bitllets de $ 100 en cada màquina, 763 00:45:06,990 --> 00:45:11,360 però només he actualitzat el saldo del seu compte a la suma de $ 100. 764 00:45:11,360 --> 00:45:15,130 En altres paraules, vostè ha pres fora de $ 200, però pel fet que va inspeccionar l'estat del món 765 00:45:15,130 --> 00:45:18,840 simultàniament i després va prendre una decisió sobre la base d'aquest valor, 766 00:45:18,840 --> 00:45:21,930 pot ser que no faci els comptes en última instància correctament. 767 00:45:21,930 --> 00:45:25,520 Així que en una situació massa banc que vols tenir algun tipus de bloqueig 768 00:45:25,520 --> 00:45:28,450 de manera que tan bon punt s'hagi comprovat l'estat d'alguna variable 769 00:45:28,450 --> 00:45:31,220 això és molt important, igual que el saldo del seu compte, 770 00:45:31,220 --> 00:45:36,070 No deixeu que altres persones prenguin decisions sobre la base que fins que hagi acabat de fer la seva cosa, 771 00:45:36,070 --> 00:45:38,920 on en aquest cas és el caixer automàtic de l'esquerra. 772 00:45:38,920 --> 00:45:41,160 Bloquegi tots els altres fora. 773 00:45:41,160 --> 00:45:44,650 En realitat es pot aconseguir aquest efecte en un parell de maneres diferents. 774 00:45:44,650 --> 00:45:48,660 >> La forma més senzilla de MySQL és una línia de SQL que li va donar 775 00:45:48,660 --> 00:45:52,030 en l'especificació de conjunt de problemes que es veu exactament com aquesta. 776 00:45:52,030 --> 00:45:57,420 Inseriu a la taula - com es digui - un id, un símbol, i compartir, un nombre d'accions, 777 00:45:57,420 --> 00:45:59,660 els següents valors, per exemple. 778 00:45:59,660 --> 00:46:03,370 Si vostè no ha llegit les especificacions, però, aquest és un exemple relacionat amb com vostè va sobre 779 00:46:03,370 --> 00:46:07,340 la compra de 10 accions d'aquesta acció de penic per al president Skroob, 780 00:46:07,340 --> 00:46:10,340 el ID d'usuari passa a ser el número 7? 781 00:46:10,340 --> 00:46:14,070 Això diu INSERT INTO taula l'identificador següent, el símbol i el nombre d'accions 782 00:46:14,070 --> 00:46:18,200 de 7, 'DVN.V', i 10. 783 00:46:18,200 --> 00:46:21,510 Però - però, però, però - la segona línia és la important. 784 00:46:21,510 --> 00:46:26,310 DUPLICATS D'ACTUALITZACIÓ accions clau = accions + Valors (accions). 785 00:46:26,310 --> 00:46:28,350 Així que totalment d'aspecte críptic a primera vista. 786 00:46:28,350 --> 00:46:31,990 Però el fet que aquesta consulta SQL, tot i que s'ajusta a 2 línies, 787 00:46:31,990 --> 00:46:35,920 és una consulta de llarga, això significa que és atòmica 788 00:46:35,920 --> 00:46:41,000 en el sentit que aquesta consulta sigui serà executat tots junts o no en absolut. 789 00:46:41,000 --> 00:46:45,100 I per definició de MySQL, que és com s'implementa aquesta consulta. 790 00:46:45,100 --> 00:46:51,010 És, per definició, al manual garanteix que executa tot d'una vegada o en absolut. 791 00:46:51,010 --> 00:46:54,020 La motivació per això és la següent. 792 00:46:54,020 --> 00:46:58,540 Si en aquest cas vostè està tractant de comprar 10 accions, 793 00:46:58,540 --> 00:47:02,260 és una espècie de la mateixa història que la llet, és una espècie de la mateixa història que el caixer automàtic. 794 00:47:02,260 --> 00:47:04,970 >> Si comet l'error de no utilitzar aquesta sintaxi 795 00:47:04,970 --> 00:47:09,610 però en lloc de seleccionar la base de dades per veure quantes accions d'aquesta penny estoc 796 00:47:09,610 --> 00:47:13,750 diu el president Skroob tenir, i suposem que té 10 accions, 797 00:47:13,750 --> 00:47:19,330 i una mica fracció de segon més tard, a continuació, fer una instrucció UPDATE, 798 00:47:19,330 --> 00:47:24,810 que és una altra declaració de SQL que diu seguir endavant i afegir 10 accions més 799 00:47:24,810 --> 00:47:28,700 al seu actual 10 idealment de manera que el total és de 20, 800 00:47:28,700 --> 00:47:33,490 el problema es deu al fet que en els sistemes de bases de dades d'avui en dia i pel fet que en els ordinadors d'avui en dia 801 00:47:33,490 --> 00:47:35,990 té diversos processadors, nuclis múltiples - 802 00:47:35,990 --> 00:47:38,920 en altres paraules, els ordinadors, literalment, pot fer diverses coses alhora - 803 00:47:38,920 --> 00:47:44,270 no es garanteix que el SELECT i la seva actualització en aquest cas 804 00:47:44,270 --> 00:47:46,150 van a succeir una darrere l'altra. 805 00:47:46,150 --> 00:47:49,140 Així que un mal escenari seria fer el SELECT 806 00:47:49,140 --> 00:47:51,670 per veure quantes accions d'aquesta acció de penic és Skroob tenen, 807 00:47:51,670 --> 00:47:54,710 i després només per casualitat una altra consulta de base de dades s'executa - 808 00:47:54,710 --> 00:47:57,740 potser la seva Skroob a part del navegador tractant de comprar 10 accions 809 00:47:57,740 --> 00:48:00,700 en una finestra nova del tot, igual que el caixer automàtic - 810 00:48:00,700 --> 00:48:05,410 i suposem que es fica en una altra consulta SELECT i UPDATE entre el. 811 00:48:05,410 --> 00:48:10,210 Podria passar que Skroob perd ara un cert nombre d'accions 812 00:48:10,210 --> 00:48:14,340 perquè un altre procés està inspeccionant l'estat del seu món, 813 00:48:14,340 --> 00:48:17,800 o es posa més accions del que hauria de tenir. 814 00:48:17,800 --> 00:48:23,250 No entrarem en els detalls de exactament quines són aquestes línies de la història en particular seria, 815 00:48:23,250 --> 00:48:28,380 però el punt és que si vostè ha de comprovar un valor de variables i després prendre una decisió, 816 00:48:28,380 --> 00:48:32,500 si hi ha un risc que algú més fent una cosa entre aquests dos estats, 817 00:48:32,500 --> 00:48:36,220 com succeeix en els sistemes multiprocessador, en sistemes multi-nucli, 818 00:48:36,220 --> 00:48:41,220 equips amb la capacitat de fer diverses coses alhora, les coses dolentes poden succeir 819 00:48:41,220 --> 00:48:44,530 comptes bancaris, com s'efectua el càrrec incorrectament, la compra de llet dues vegades més, 820 00:48:44,530 --> 00:48:46,730 o en aquest cas el nombre equivocat d'accions. 821 00:48:46,730 --> 00:48:48,370 Però hi ha una manera més fàcil pensar en això. 822 00:48:48,370 --> 00:48:53,290 >> Resulta que també és compatible amb SQL, si configura la seva taula correctament, 823 00:48:53,290 --> 00:48:56,920 una cosa que es diu les transaccions, que jo diria que és fins i tot més fàcil d'entendre 824 00:48:56,920 --> 00:49:00,650 que això, però no és un 1-liner, pel que en realitat és una mica més complicat. 825 00:49:00,650 --> 00:49:04,960 Hi ha, literalment, una declaració en SQL anomenat START transaction. 826 00:49:04,960 --> 00:49:08,300 Igual que hi ha SELECT, UPDATE, INSERT, DELETE i JOIN i un munt d'altres, 827 00:49:08,300 --> 00:49:10,970 hi ha paraules clau com START transaction. 828 00:49:10,970 --> 00:49:13,560 I el que vostè fa en el context del conjunt de processadors 7 - 829 00:49:13,560 --> 00:49:17,270 vostè no ha de fer això per pset 7, és negada explícitament que no és necessari, 830 00:49:17,270 --> 00:49:18,830 però per a projectes de fi pot ser útil - 831 00:49:18,830 --> 00:49:22,820 si es crida a una consulta de START transaction i després una altra consulta 832 00:49:22,820 --> 00:49:25,620 i després una altra consulta i després un altre, un altre, i un altre, 833 00:49:25,620 --> 00:49:31,860 les consultes en realitat no s'executarà fins que es diu a la sentència SQL COMMIT, 834 00:49:31,860 --> 00:49:37,220 moment en el qual, si es tracta de dues declaracions o afirmacions 20, tots ells seran executats al mateix temps, 835 00:49:37,220 --> 00:49:42,770 el que significa que ningú més pot voler comprar massa llet o dèbit massa diners 836 00:49:42,770 --> 00:49:46,340 o recomprar accions massa perquè totes les consultes s'executarà 837 00:49:46,340 --> 00:49:48,410 esquena amb esquena a esquena amb esquena. 838 00:49:48,410 --> 00:49:51,580 I això és super important, sobretot quan estàs fent alguna cosa com això. 839 00:49:51,580 --> 00:49:54,900 Aquest és un exemple arbitrari que diu que anem a actualitzar el compte bancari 840 00:49:54,900 --> 00:50:00,200 mitjançant l'establiment d'un equilibri igual al saldo - $ 1000 on el número de compte: 2. 841 00:50:00,200 --> 00:50:04,260 I després la segona declaració és que ara anem a dipositar que $ 1000 842 00:50:04,260 --> 00:50:07,310 en el compte d'un altre banc el número de compte: 1. 843 00:50:07,310 --> 00:50:10,400 >> En altres paraules, aquest és un exemple perfecte d'on vostè vol assegurar-se 844 00:50:10,400 --> 00:50:13,590 que tots dos d'aquests estats ocórrer o no en absolut 845 00:50:13,590 --> 00:50:15,450 perquè si el client s'ha de follar 846 00:50:15,450 --> 00:50:17,670 i vostè va a prendre els seus diners i no dipositar en una altra part, 847 00:50:17,670 --> 00:50:20,470 o el banc va a follar a on va a dipositar els diners 848 00:50:20,470 --> 00:50:23,140 però en realitat no ho restar del compte de l'usuari. 849 00:50:23,140 --> 00:50:25,810 Així que vostè vol a tots dos a executar en conjunt. 850 00:50:25,810 --> 00:50:29,140 Així entra en les transaccions mundials. 851 00:50:29,140 --> 00:50:31,360 Així que això és una cosa a tenir en la part de darrere de la teva ment, 852 00:50:31,360 --> 00:50:34,710 no tant pels efectes d'un projecte final, 853 00:50:34,710 --> 00:50:36,700 però si vol continuar amb el seu projecte final en algun lloc, 854 00:50:36,700 --> 00:50:39,040 si vol posar en marxa alguna empresa que l'envolta, 855 00:50:39,040 --> 00:50:41,270 si vol resoldre el problema d'algun grup d'estudiants al campus 856 00:50:41,270 --> 00:50:45,210 i en realitat té un lloc web en viu, actiu, aquest és el tipus d'errors subtils que poden sorgir 857 00:50:45,210 --> 00:50:49,480 si no arribes a pensar a través del que pot succeir si 2 persones 858 00:50:49,480 --> 00:50:54,190 Està intentant accedir al seu lloc web en, literalment, en el mateix moment en el temps, 859 00:50:54,190 --> 00:50:56,890 per la qual cosa les seves consultes d'una altra manera podrien quedar entrellaçats. 860 00:50:58,840 --> 00:51:01,420 >> Preparat per una mica de JavaScript, un teaser del mateix? 861 00:51:01,420 --> 00:51:04,320 Aquest és el nostre últim idioma per al semestre. Està bé. 862 00:51:04,320 --> 00:51:09,940 Afortunadament, JavaScript sembla molt, molt, molt similar als 2 idiomes, C i PHP, 863 00:51:09,940 --> 00:51:11,140 que hem fet fins ara. 864 00:51:11,140 --> 00:51:14,340 No hi ha cap conjunt de processadors Javascript al 7, però és una eina increïblement útil 865 00:51:14,340 --> 00:51:18,840 quan es tracta de fer basats en la web els projectes finals o en realitat només la programació web més general. 866 00:51:18,840 --> 00:51:20,950 Així que una ràpida visió general d'una cosa que es diu DOM. 867 00:51:20,950 --> 00:51:23,600 Aquí hi ha una pàgina web súper simple que realment només diu hola, món 868 00:51:23,600 --> 00:51:25,970 tant en el títol i en el cos. 869 00:51:25,970 --> 00:51:29,270 Com la indentació ha estat suggerint durant algun temps, 870 00:51:29,270 --> 00:51:31,380 en efecte, hi ha una jerarquia de pàgines web. 871 00:51:31,380 --> 00:51:34,220 Podia dibuixar aquest fragment de codi HTML mateixa com un arbre, 872 00:51:34,220 --> 00:51:37,470 pensant en tornar a la nostra discussió de les estructures de dades en C, com s'indica a continuació. 873 00:51:37,470 --> 00:51:40,710 Tinc algun node arrel especial anomenat el node de document, 874 00:51:40,710 --> 00:51:43,650 i anem a veure l'analogia d'això en JavaScript en un moment. 875 00:51:43,650 --> 00:51:48,330 El primer fill i únic fill que en aquest cas és l'etiqueta HTML. 876 00:51:48,330 --> 00:51:49,880 No hi ha cap assignació directa del tipus de document. 877 00:51:49,880 --> 00:51:53,170 Això és una cosa especial, de manera que hauríem ignorar quan es tracta d'aquesta DOM, 878 00:51:53,170 --> 00:51:55,810 Aquest Model d'Objectes de Document arbre. 879 00:51:55,810 --> 00:51:59,530 Observeu que l'etiqueta HTML, que he representat arbitràriament com un rectangle, 880 00:51:59,530 --> 00:52:02,890 té 2 fills: cap i cos. 881 00:52:02,890 --> 00:52:04,840 >> Aquells són igualment elaborat en forma de rectangles. 882 00:52:04,840 --> 00:52:08,970 És significatiu que el cap és gràficament a l'esquerra del cos. 883 00:52:08,970 --> 00:52:11,960 La implicació és que el cap és el primer en l'arbre. 884 00:52:11,960 --> 00:52:14,910 Així que en realitat és una comanda per a un arbre quan el dibuixa com aquest, 885 00:52:14,910 --> 00:52:17,460 tot i que les formes i altres coses són arbitràries. 886 00:52:17,460 --> 00:52:20,360 Head per la seva part té un fill únic anomenat títol, 887 00:52:20,360 --> 00:52:25,170 i el títol en realitat té el seu propi fill, que és "hola, món", 888 00:52:25,170 --> 00:52:32,210 que em va atreure deliberadament com un oval aquí perquè sigui una mica diferent de la del rectangle. 889 00:52:32,210 --> 00:52:37,420 Aquests rectangles són elements, mentre que hola, món és en realitat un node de text. 890 00:52:37,420 --> 00:52:39,850 Així que és un node a l'arbre, però és un tipus diferent de node 891 00:52:39,850 --> 00:52:41,730 així que el va treure arbitràriament diferent. 892 00:52:41,730 --> 00:52:45,000 De la mateixa manera es té el cos d'un nen anomenat hola, món, així, 893 00:52:45,000 --> 00:52:47,910 node de forma diferent tot són casualment el mateix text, 894 00:52:47,910 --> 00:52:52,100 però l'he dibuixat amb la mateixa forma. Llavors, qui li importa? 895 00:52:52,100 --> 00:52:56,820 Bé, el bo d'HTML és que té aquest caràcter jeràrquic. 896 00:52:56,820 --> 00:53:01,010 I el que és bo de JavaScript i en particular les biblioteques que estan lliurement disponibles 897 00:53:01,010 --> 00:53:07,120 i populars com jQuery, pot navegar per l'estructura d'arbre tan increïblement fàcil. 898 00:53:07,120 --> 00:53:11,790 Qualsevol de les coses que vam fer en C amb els punters i els arbres de desplaçament i recursivitat en els nodes 899 00:53:11,790 --> 00:53:15,300 fill de l'esquerra a la dreta nen, de sobte podem classificar de donar per fet 900 00:53:15,300 --> 00:53:19,450 per ser increïblement il · luminadora si no és una mica frustrant 901 00:53:19,450 --> 00:53:22,470 però no gairebé una forma eficient d'anar sobre la programació. 902 00:53:22,470 --> 00:53:24,470 I així, amb aquests llenguatges d'alt nivell com Javascript 903 00:53:24,470 --> 00:53:28,340 serem capaços de navegar per aquest arbre molt més intuïtiva. 904 00:53:28,340 --> 00:53:30,430 >> I de fet la sintaxi serà molt familiar. 905 00:53:30,430 --> 00:53:32,950 Si vostè mai ha vist abans Javascript, aquesta és una referència molt agradable 906 00:53:32,950 --> 00:53:35,910 de la gent de Mozilla, la gent de fer que el Firefox, 907 00:53:35,910 --> 00:53:38,370 així que si fóssiu lliure de navegar que a la seva conveniència. 908 00:53:38,370 --> 00:53:41,590 El que trobaràs - i aquestes diapositives són idèntics als que es va utilitzar l'altre dia - 909 00:53:41,590 --> 00:53:44,030 De la mateixa manera, la principal s'ha anat. 910 00:53:44,030 --> 00:53:47,010 Així que quan s'escriu un programa en JavaScript, no hi ha una funció principal. 911 00:53:47,010 --> 00:53:48,690 Vostè acaba de començar a escriure codi. 912 00:53:48,690 --> 00:53:51,660 No obstant això, una distinció clau entre JavaScript i C i PHP 913 00:53:51,660 --> 00:53:55,890 és que, mentre que C i PHP fins ara han estat executades costat del servidor 914 00:53:55,890 --> 00:53:59,180 per l'aparell en aquest cas, o més generalment, per un servidor, 915 00:53:59,180 --> 00:54:04,270 JavaScript per disseny normalment s'executa en un navegador. 916 00:54:04,270 --> 00:54:08,440 En altres paraules, és possible escriure codi JavaScript, ja que estem a punt de, 917 00:54:08,440 --> 00:54:13,080 en un servidor en l'aparell, sinó que l'inclou entre el seu HTML, entre la CSS, 918 00:54:13,080 --> 00:54:16,100 entre els seus GIFs i PNGs teus i els teus JPEGs 919 00:54:16,100 --> 00:54:19,170 de manera que quan l'usuari visita la seva pàgina web, si vostè està utilitzant JavaScript, 920 00:54:19,170 --> 00:54:21,770 que el JavaScript arriba des del servidor al navegador, 921 00:54:21,770 --> 00:54:24,540 i és el navegador que realment s'executa. 922 00:54:24,540 --> 00:54:27,960 Així que això té implicacions significatives per a la propietat intel · lectual, fins i tot. 923 00:54:27,960 --> 00:54:32,600 És una mica ximple per pensar en la protecció de la seva propietat intel · lectual quan es tracta de codi JavaScript 924 00:54:32,600 --> 00:54:37,560 ja que per la naturalesa de la llengua, el fitxer és executat normalment costat del navegador. 925 00:54:37,560 --> 00:54:40,360 >> Es pot confondre, el que significa que vostè pot fer que sembli una bogeria i el lleig 926 00:54:40,360 --> 00:54:45,400 sense espais en blanc, horribles noms de les variables, perquè sigui més difícil per a la gent a robar la seva IP, 927 00:54:45,400 --> 00:54:48,120 però la clau és que s'executi costat del navegador. 928 00:54:48,120 --> 00:54:51,790 Tot i que com a part del servidor de banda JavaScript es pot utilitzar, 929 00:54:51,790 --> 00:54:54,480 el cas d'ús més comú en aquest moment està encara en el navegador. 930 00:54:54,480 --> 00:54:59,800 I això és el que sembla. Aquest és un if-else if-else construir igual que C, igual que PHP. 931 00:54:59,800 --> 00:55:02,420 Heus aquí una expressió booleana quan vostè "o" les coses 2 junts. 932 00:55:02,420 --> 00:55:04,330 Aquí és quan vostè "i" 2 coses juntes. 933 00:55:04,330 --> 00:55:08,300 Aquí és una declaració interruptor, que és similar a PHP 934 00:55:08,300 --> 00:55:10,810 en què es pot canviar en diferents tipus de valors. 935 00:55:10,810 --> 00:55:15,180 Loops similar per tenir llaços aquí, que s'estructuren de forma idèntica al que hem vist abans. 936 00:55:15,180 --> 00:55:18,110 Mentre que els bucles; Hem de fer bucles while. 937 00:55:18,110 --> 00:55:20,290 Variables, molt lleugerament diferent. 938 00:55:20,290 --> 00:55:24,560 No declarar les variables com es fa en PHP i C, 939 00:55:24,560 --> 00:55:27,860 però igualment és JavaScript tipus febles. 940 00:55:27,860 --> 00:55:32,730 No s'especifica int o float o cadena ni res d'això en general. 941 00:55:32,730 --> 00:55:34,240 Podeu especificar var. 942 00:55:34,240 --> 00:55:38,040 No ha d'especificar var, però té implicacions si no ho fas. 943 00:55:38,040 --> 00:55:42,000 En general, si s'omet var accidentalment crear una variable global en lloc de local. 944 00:55:42,000 --> 00:55:46,420 Així que permetin-me proposar que gairebé sempre acaba de dir var i després el nom de la variable. 945 00:55:46,420 --> 00:55:48,740 No és un tipus, que és només per a la variable var. 946 00:55:48,740 --> 00:55:52,930 Aquest seria un exemple, ja sigui 123 o "hola món". 947 00:55:52,930 --> 00:55:58,910 Les matrius són presents i sintàcticament similar a PHP. 948 00:55:58,910 --> 00:56:03,690 Vaig a dir nombres var i aleshores utilitzar claudàtors de nou per declarar una variable 949 00:56:03,690 --> 00:56:08,870 el tipus és array que té aquests números particulars-hi, separats per comes. 950 00:56:08,870 --> 00:56:11,740 I després, finalment, aquesta és l'única que realment es veu diferent. 951 00:56:11,740 --> 00:56:16,700 Recordem que en PHP que s'han posat en marxa una matriu associativa per a un estudiant 952 00:56:16,700 --> 00:56:20,220 com Zamyla que pot tenir un aspecte com aquest, on la variable es diu estudiant. 953 00:56:20,220 --> 00:56:23,370 Els claudàtors signifiquen aquí ve una matriu. 954 00:56:23,370 --> 00:56:28,500 >> El fet que no estic fent servir índexs numèrics sinó cadenes - id, casa, i nom - 955 00:56:28,500 --> 00:56:30,990 significa que es tracta d'una matriu associativa, 956 00:56:30,990 --> 00:56:34,490 i aquestes fletxes amb el signe igual i el suport angular 957 00:56:34,490 --> 00:56:37,310 significa que la clau és "id", el valor és 1; 958 00:56:37,310 --> 00:56:39,310 la clau està en "casa", el valor és Winthrop House; 959 00:56:39,310 --> 00:56:41,800 la clau és "nom", el valor és Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 Així que hi ha tres claus dins d'aquesta matriu associativa, cadascun dels quals té el seu propi valor. 961 00:56:47,110 --> 00:56:52,880 Hem vist que en el conjunt de processadors 7, o aviat ho sabrà, en la idea JavaScript mateixa, 962 00:56:52,880 --> 00:56:55,220 però tindrà aquest aspecte. 963 00:56:55,220 --> 00:57:00,070 Així estudiant var - sense signe de dòlar i no s'esmenta però encara tipus var - 964 00:57:00,070 --> 00:57:05,860 equival a continuació, obriu les claus perquè en JavaScript quan es té parells de claus de valor, 965 00:57:05,860 --> 00:57:08,900 que realment utilitza una cosa anomenada un objecte. 966 00:57:08,900 --> 00:57:13,490 I aquells de vostès que van prendre APCS o similar podria recordar els objectes de Java 967 00:57:13,490 --> 00:57:15,140 o llenguatges similars. 968 00:57:15,140 --> 00:57:17,880 JavaScript és Java, primer de tot. 969 00:57:17,880 --> 00:57:21,600 Va ser un any de disseny deliberada decisió fa per desprendre alguna cosa més que era popular, 970 00:57:21,600 --> 00:57:25,640 seu nom, tot i que no té una relació fonamental amb Java en si. 971 00:57:25,640 --> 00:57:31,490 JavaScript té els objectes, i es creen mitjançant la notació de claudàtor. 972 00:57:31,490 --> 00:57:36,710 Els objectes en JavaScript són més o menys equivalents a les matrius associatives en PHP 973 00:57:36,710 --> 00:57:40,030 quan es tracta d'emmagatzematge de dades dins d'ells. 974 00:57:40,030 --> 00:57:44,100 >> Però fins i tot amb més força en JavaScript es pot associar molt fàcilment les funcions 975 00:57:44,100 --> 00:57:48,040 dins d'un objecte, i encara que es pot fer això en altres llengües, 976 00:57:48,040 --> 00:57:50,040 és tot un paradigma comú, com veurem. 977 00:57:50,040 --> 00:57:54,380 En resum, aquest objecte representa un estudiant, que és particularment Zamyla, 978 00:57:54,380 --> 00:58:00,380 i és similar conceptualment, només sintàcticament diferent d'això. 979 00:58:00,380 --> 00:58:03,840 Que en realitat el Javascript en un arxiu. 980 00:58:03,840 --> 00:58:05,570 Resulta que hi ha una etiqueta script. 981 00:58:05,570 --> 00:58:08,180 Hem vist una etiqueta d'estil i hem vist altres etiquetes HTML. 982 00:58:08,180 --> 00:58:11,510 L'etiqueta de script en realitat contenen una mica de codi JavaScript. 983 00:58:11,510 --> 00:58:15,500 Déjame entrar en l'equip on tenim una mica de codi font pre-fets. 984 00:58:15,500 --> 00:58:18,700 Jo no l'he publicat encara al lloc web, però faré això després de classe. 985 00:58:18,700 --> 00:58:21,770 Anem a obrir aquest, blink.html. 986 00:58:21,770 --> 00:58:27,560 De tornada a la dècada de 1990, havia literalment una etiqueta HTML anomenat l'etiqueta blink, 987 00:58:27,560 --> 00:58:30,340 i aquesta va ser una de les etiquetes més usades en excés meravellosament a Internet 988 00:58:30,340 --> 00:58:36,140 per la qual cosa t'agradaria visitar alguna pàgina web estil dècada de 1990 i començar a veure el text parpellejant d'aquesta manera, 989 00:58:36,140 --> 00:58:39,810 els resultats de l'etiqueta marquès, que havia text va així. 990 00:58:39,810 --> 00:58:45,070 Una de les poques vegades en què el món realment ha acordat un estàndard web, 991 00:58:45,070 --> 00:58:48,250 tot el món en tots els àmbits de l'etiqueta blink assassinat fa alguns anys. 992 00:58:48,250 --> 00:58:52,860 Però podem ressuscitar amb JavaScript com una demostració del poder que té 993 00:58:52,860 --> 00:58:56,660 quan es pot escriure un programa dins d'una pàgina web. 994 00:58:56,660 --> 00:59:00,240 Primer passarem per alt les coses noves i centrar-se només en el vell. 995 00:59:00,240 --> 00:59:01,780 >> Aquí està el material antic en aquest exemple. 996 00:59:01,780 --> 00:59:06,350 Tinc una etiqueta HTML, una etiqueta del cap, i una etiqueta del títol. 997 00:59:06,350 --> 00:59:11,210 Llavors tinc una etiqueta de cos aquí amb un div, el que recordo és només una divisió rectangular de la pàgina 998 00:59:11,210 --> 00:59:14,720 que li he donat un identificador únic arbitràriament de "salutació" a, 999 00:59:14,720 --> 00:59:18,320 només pel que tenen una forma única de referir-s'hi, que té un text molt simple: 1000 00:59:18,320 --> 00:59:20,220 hola, món. 1001 00:59:20,220 --> 00:59:23,940 Ara vaig a desplaçar-se fins la part superior d'aquest arxiu i veure què hi ha de nou. 1002 00:59:23,940 --> 00:59:27,710 El primer que hi ha a dalt fins nou és l'etiqueta script, 1003 00:59:27,710 --> 00:59:31,280 i en l'interior de la notificació etiqueta script que he declarat una funció. 1004 00:59:31,280 --> 00:59:34,610 Per declarar una funció en JavaScript, bastant similar a PHP, 1005 00:59:34,610 --> 00:59:37,930 que, literalment, escriure la funció, llavors el nom de la funció, entre parèntesis, 1006 00:59:37,930 --> 00:59:40,400 i potser alguns arguments si es necessita cap. 1007 00:59:40,400 --> 00:59:43,510 Llavors tinc el meu clau de tancament com de costum, i ara tenim una mica de codi nou lleugerament, 1008 00:59:43,510 --> 00:59:45,230 però anem a veure el que això significa. 1009 00:59:45,230 --> 00:59:48,670 Així div var, això només significa dóna'm un div anomenat variable. 1010 00:59:48,670 --> 00:59:50,530 Podria haver anomenat foo, però jo volia que fos anomenat div 1011 00:59:50,530 --> 00:59:52,620 per raons que seran evidents en un segon. 1012 00:59:52,620 --> 00:59:57,480 Després resulta en JavaScript - i aquest és el codi JavaScript incrustat a la meva pàgina web - 1013 00:59:57,480 --> 01:00:01,760 hi ha una variable global de tipus especial anomenat document. 1014 01:00:01,760 --> 01:00:04,780 JavaScript és de fet un llenguatge orientat a objectes. 1015 01:00:04,780 --> 01:00:07,230 No entrarem en detall en el 50 pel que fa al que significa, 1016 01:00:07,230 --> 01:00:11,180 però per ara sabem que un objecte és molt semblant a una estructura. 1017 01:00:11,180 --> 01:00:14,740 Com vam veure en el camí de retorn quan un dels primers butlletins de problemes 1018 01:00:14,740 --> 01:00:17,150 on posem una gran quantitat d'informació en una estructura, 1019 01:00:17,150 --> 01:00:21,330 igualment es documenten una estructura especial que ve amb el navegador, 1020 01:00:21,330 --> 01:00:24,810 ve amb qualsevol pàgina web. No és una cosa que he creat. 1021 01:00:24,810 --> 01:00:28,210 Dins d'aquesta estructura del document, però, té no només les dades 1022 01:00:28,210 --> 01:00:30,010 però també hi ha funcions. 1023 01:00:30,010 --> 01:00:34,090 >> I cada vegada que tenen una funció dins d'una estructura, dins d'un objecte, 1024 01:00:34,090 --> 01:00:36,490 es crida a un mètode. Però és la mateixa cosa. 1025 01:00:36,490 --> 01:00:40,110 Un mètode és una funció que només dóna la circumstància d'estar dins d'alguna cosa més. 1026 01:00:40,110 --> 01:00:42,990 Així que això significa que aquesta variable global document especial denominat 1027 01:00:42,990 --> 01:00:47,690 té una funció anomenada getElementById que literalment fa això. 1028 01:00:47,690 --> 01:00:52,460 Se li aconseguirà un element del DOM, Document Object arbre del model, 1029 01:00:52,460 --> 01:00:55,520 amb identificador en aquest cas salutació. 1030 01:00:55,520 --> 01:00:59,200 En altres paraules, tot el temps que passem a les estructures de dades entra en joc aquí. 1031 01:00:59,200 --> 01:01:01,400 Aquesta imatge d'un DOM que vam tenir fa un moment, 1032 01:01:01,400 --> 01:01:06,100 tot i que la pàgina és una mica diferent, si jo tingués un div a aquesta imatge, 1033 01:01:06,100 --> 01:01:11,180 document.getElementById ho tornaria a mi efectivament seria un punter 1034 01:01:11,180 --> 01:01:15,440 per el rectangle en l'arbre, una referència al rectangle en l'arbre. 1035 01:01:15,440 --> 01:01:18,410 Així que això és el que significa cridar realment una d'aquestes funcions. 1036 01:01:18,410 --> 01:01:21,960 En aquest cas de nou es tracta d'un div. No és un cos o un títol. 1037 01:01:21,960 --> 01:01:26,480 Així que anem a veure el que vull fer amb això llavors div ara que el tinc dins d'aquest div variable anomenada. 1038 01:01:26,480 --> 01:01:32,580 Resulta que amb el llenguatge Java té la capacitat de modificar el CSS de la pàgina de forma dinàmica. 1039 01:01:32,580 --> 01:01:39,060 Fins ara, tot el CSS que hem fet, encara que limitat, és en els atributs d'estil, 1040 01:01:39,060 --> 01:01:41,730 o on més hem posat CSS? 1041 01:01:42,730 --> 01:01:45,810 Jo com que malmesa que un. A l'etiqueta d'estil en la part superior de l'arxiu. 1042 01:01:45,810 --> 01:01:49,180 O el tercer lloc ha estat? 1043 01:01:50,710 --> 01:01:54,590 >> Un arxiu extern, alguna cosa. Css. 1044 01:01:54,590 --> 01:01:56,730 Així que aquests són els 3 llocs que hem fet fins ara CSS, 1045 01:01:56,730 --> 01:01:59,310 però el problema és que hem codificat tot. 1046 01:01:59,310 --> 01:02:04,060 Vostè decideix com es va submergir en pset 7, vam decidir fer una conferència abans del que el nostre CSS seria. 1047 01:02:04,060 --> 01:02:07,380 Però si vostè vol canviar la seva CSS, vostè realment pot fer que 1048 01:02:07,380 --> 01:02:09,370 una vegada que tingui un llenguatge de programació real. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - Llenguatges de programació no. JavaScript és. 1050 01:02:13,910 --> 01:02:18,200 Així que resulta que tan aviat com vostè té un d'aquests rectangles en l'arbre 1051 01:02:18,200 --> 01:02:23,050 anomenat el DOM, que en si té algunes dades dins de la mateixa. 1052 01:02:23,050 --> 01:02:27,820 Així que el div que em va agafar per l'arbre té el que anomenarem a una propietat dins d'ella 1053 01:02:27,820 --> 01:02:34,390 anomenat estil, i la propietat d'estil en si té una propietat anomenada visibilitat. 1054 01:02:34,390 --> 01:02:37,330 Jo sé que això només per buscar un manual de l'usuari CSS. 1055 01:02:37,330 --> 01:02:41,160 Resulta que hi ha una propietat de visibilitat CSS que fa el que diu. 1056 01:02:41,160 --> 01:02:44,530 Fa una mica visible o no, visible o no. 1057 01:02:44,530 --> 01:02:46,810 I com es fa això és la següent. 1058 01:02:46,810 --> 01:02:50,510 Estic demanant programació si la visibilitat d'aquest div s'oculta, 1059 01:02:50,510 --> 01:02:53,390 Què he de canviar? Visible. 1060 01:02:53,390 --> 01:02:58,840 Perquè si la visibilitat d'aquesta pàgina no està ocult, lògicament jo faig el ocult. 1061 01:02:58,840 --> 01:03:04,070 No tinc idea de per què és visible i ocult i no és visible i invisible. 1062 01:03:04,070 --> 01:03:06,000 Aquesta va ser una decisió de disseny pobre al llarg del camí. 1063 01:03:06,000 --> 01:03:09,530 Però aquests són realment oposats en CSS: mostrat i ocults. 1064 01:03:09,530 --> 01:03:15,520 Tot això fa és que significa canviar el CSS del meu arxiu d'encesa i apagat, encès i apagat 1065 01:03:15,520 --> 01:03:16,870 perquè div particular. 1066 01:03:16,870 --> 01:03:20,630 Però, de nou, aquesta és una funció anomenada parpelleig. Quan es crida a la funció de parpelleig? 1067 01:03:20,630 --> 01:03:24,080 Resulta que hi ha una altra especial per finestres de Global variable anomenada, 1068 01:03:24,080 --> 01:03:28,220 similar en esperit al document, però, mentre que el document es refereix a la seva pàgina web 1069 01:03:28,220 --> 01:03:31,700 com l'arbre DOM, l'HTML que envia des del servidor, 1070 01:03:31,700 --> 01:03:35,250 finestra es refereix al crom voltant d'ella, la barra d'adreces, la barra de títol, 1071 01:03:35,250 --> 01:03:37,880 i tot això al voltant de la seva pàgina web. 1072 01:03:37,880 --> 01:03:42,800 >> I resulta que l'objecte finestra té una funció especial dins de la mateixa trucada setInterval 1073 01:03:42,800 --> 01:03:44,360 que fa el que diu. 1074 01:03:44,360 --> 01:03:48,600 S'establirà un interval - en aquest cas cada 500 mil · lisegons - 1075 01:03:48,600 --> 01:03:52,270 i, prendre una conjectura, què farà cada 500 milisegons? 1076 01:03:52,270 --> 01:03:55,240 Es va a executar aquest obrir i tancar la funció. 1077 01:03:55,240 --> 01:03:58,560 I el que és bo aquí és que podríem haver fet això en C, encara que mai ho va fer. 1078 01:03:58,560 --> 01:04:01,580 C té una cosa anomenada punters a funcions on es pot trigar funcions 1079 01:04:01,580 --> 01:04:03,140 com arguments. 1080 01:04:03,140 --> 01:04:07,620 De la mateixa manera en JavaScript pot passar el nom d'una funció a una altra funció. 1081 01:04:07,620 --> 01:04:10,630 I adonar-se del que estic fent. No faré això. 1082 01:04:10,630 --> 01:04:14,380 Si poso entre parèntesis després d'obrir i tancar, això significaria que cridar a la funció de parpelleig. 1083 01:04:14,380 --> 01:04:17,430 Si els omet, que vol dir aquí és la funció d'obrir i tancar 1084 01:04:17,430 --> 01:04:21,330 per la qual cosa es pot dir setInterval cada 500 mil · lisegons. 1085 01:04:21,330 --> 01:04:28,200 Així, el resultat final, atroç que sigui, és que si vaig a anar a localhost i blink.html, 1086 01:04:28,200 --> 01:04:32,120 Ara he de això passi una i altra vegada. 1087 01:04:32,120 --> 01:04:34,950 I si realment Inspeccionar element, veurem si podem veure això. 1088 01:04:34,950 --> 01:04:38,550 Permetin-me Inspeccionar element, deixa desplaceu-vos cap avall una mica, 1089 01:04:38,550 --> 01:04:44,320 permetre triar elements d'aquí i observi l'interior de DOM inspector de Chrome. 1090 01:04:44,320 --> 01:04:48,840 És, literalment, canviar d'anada i tornada cada 500 mil · lisegons. 1091 01:04:48,840 --> 01:04:55,660 Si anem al nostre amic Nate, 1092 01:04:55,660 --> 01:05:00,020 si alguna vegada es va preguntar com funciona, idea similar, amb un interval de temps, 1093 01:05:00,020 --> 01:05:04,810 però Nate és en realitat fer un ús molt eficaç del color en aquest cas particular aquí. 1094 01:05:04,810 --> 01:05:07,350 Llavors, què més podem fer realment amb això? 1095 01:05:07,350 --> 01:05:09,990 Anem a obrir un altre exemple i provar alguna cosa 1096 01:05:09,990 --> 01:05:12,940 això és programació encara més útil que fer parpellejar les coses. 1097 01:05:12,940 --> 01:05:17,990 Déjame entrar al nostre directori formes avui i entrar en form0. 1098 01:05:17,990 --> 01:05:20,820 Aquesta va ser la forma més lletja possible que jo pogués arribar a, 1099 01:05:20,820 --> 01:05:23,290 i dóna'm mostrar el que sembla en un navegador. 1100 01:05:23,290 --> 01:05:28,960 >> Déjame entrar localhost / forms, i això és form0. 1101 01:05:28,960 --> 01:05:33,400 Aquesta és una forma súper lleig HTML que té uns camps de correu electrònic, la contrasenya, 1102 01:05:33,400 --> 01:05:37,190 contrasenya, i després una casella petita d'acceptar alguns termes i condicions. 1103 01:05:37,190 --> 01:05:41,350 El problema és si torno a visitar aquesta manera i no vull donar-te la meva adreça de correu electrònic, 1104 01:05:41,350 --> 01:05:44,730 No vull estar d'acord amb els termes i condicions potser, pot fer clic a Registre 1105 01:05:44,730 --> 01:05:46,920 i em deixa passar de totes maneres. 1106 01:05:46,920 --> 01:05:50,800 Això succeeix a sotmetre a un arxiu PHP anomenat estúpid dump.php. 1107 01:05:50,800 --> 01:05:58,420 Tot el que fa és imprimir el contingut de $ _GET només per a fins de diagnòstic. 1108 01:05:58,420 --> 01:06:01,580 Això va ser el que va ser presentat per l'usuari en aquest moment. 1109 01:06:01,580 --> 01:06:05,010 Però suposem que en realitat vol validar la presentació del formulari d'usuari. 1110 01:06:05,010 --> 01:06:06,530 Deixa anar a la versió 1. 1111 01:06:06,530 --> 01:06:11,420 Això és form1.html. Es veu estèticament tan dolent, però observi com de fantasia que és. 1112 01:06:11,420 --> 01:06:15,450 Si faig clic a Fes sense cooperar, em va cridar. 1113 01:06:15,450 --> 01:06:17,320 "Vostè ha de proporcionar la seva adreça de correu electrònic." 1114 01:06:17,320 --> 01:06:21,670 Està bé. Així que tractaré això. Així malan@harvard.edu. No necessito una contrasenya. 1115 01:06:21,670 --> 01:06:25,100 Registra't. "Vostè ha de proporcionar una contrasenya." Està bé. 1116 01:06:25,100 --> 01:06:28,470 Així que vaig a proporcionar una contrasenya de carmesí. Registra't. 1117 01:06:28,470 --> 01:06:32,300 "Les contrasenyes no coincideixen." He de escriure ara aquí a carmesí. 1118 01:06:32,300 --> 01:06:35,710 Per error, he comprovat això. Registra't. 1119 01:06:35,710 --> 01:06:39,860 "Vostè ha d'acceptar els termes i condicions." Està bé. Accepto allà. Registra't. 1120 01:06:39,860 --> 01:06:43,700 I ara em mostra la sortida de diagnòstic per allà. 1121 01:06:43,700 --> 01:06:45,630 >> Llavors, què ha passat? 1122 01:06:45,630 --> 01:06:48,330 Hem tingut aquesta capacitat de validar els enviaments de formularis. 1123 01:06:48,330 --> 01:06:51,420 De fet, si es va fer submergir-se en pset 7, hi ha una funció disculpes 1124 01:06:51,420 --> 01:06:54,620 que fa que sigui molt fàcil per cridar a l'usuari mitjançant un missatge a la pantalla. 1125 01:06:54,620 --> 01:06:57,580 Estic usant un mecanisme lleugerament diferent, la funció d'alerta, 1126 01:06:57,580 --> 01:07:03,690 que no és una funció que està somrigut ja que fa que els missatges d'usuari molt lletjos. 1127 01:07:03,690 --> 01:07:05,710 Però anem a veure el que estic fent aquí. 1128 01:07:05,710 --> 01:07:09,620 Això és form1.html, i noti que tinc una sintaxi força familiar: 1129 01:07:09,620 --> 01:07:12,920 cos de l'etiqueta, etiqueta de la forma, atribut d'acció, atribut mètode. 1130 01:07:12,920 --> 01:07:17,050 Però cal notar que he donat la meva forma un identificador únic per a major comoditat. 1131 01:07:17,050 --> 01:07:19,190 Llavors tinc un camp de correu electrònic el tipus és text, 1132 01:07:19,190 --> 01:07:23,780 un camp de contrasenya el tipus és la contrasenya, confirmació camp el tipus és la contrasenya, 1133 01:07:23,780 --> 01:07:28,070 i després una casella de verificació que es diu acord de per aquí, és de tipus checkbox. 1134 01:07:28,070 --> 01:07:30,380 I després tinc un botó d'enviament. 1135 01:07:30,380 --> 01:07:33,050 Però noti en la part superior el més que tinc. 1136 01:07:33,050 --> 01:07:35,810 En primer lloc, hi ha un altre ús de l'etiqueta script. 1137 01:07:35,810 --> 01:07:40,520 Si té algun JavaScript en un altre arxiu, igual que amb CSS es pot incloure. 1138 01:07:40,520 --> 01:07:44,530 I ho fa amb una font de seqüència de comandaments, i després s'adona que estic connectant pel que sembla 1139 01:07:44,530 --> 01:07:50,349 a googleapis.com a un camí molt llarg, però el nom acabi en jquery.min 1140 01:07:50,349 --> 01:07:52,420 per mínim. js. 1141 01:07:52,420 --> 01:07:55,969 jQuery és una biblioteca superpopular per a JavaScript que només ho fa amb JavaScript 1142 01:07:55,969 --> 01:07:58,230 tant més fàcil d'usar d'usar. 1143 01:07:58,230 --> 01:08:00,610 Ha convertit de fet en un estàndard de facto. 1144 01:08:00,610 --> 01:08:04,090 Així que tot i que el que vas a veure no és pur JavaScript per se, 1145 01:08:04,090 --> 01:08:09,340 és una biblioteca de JavaScript a la part superior de la mateixa manera que la biblioteca CS50 és una capa 1146 01:08:09,340 --> 01:08:13,670 a la part superior de codi de baix nivell C, la realitat és que gairebé tot el món a través d'Internet que utilitza. 1147 01:08:13,670 --> 01:08:18,030 Així que no es tracta de rodes d'entrenament. Això és simplement la millor pràctica en aquests dies. 1148 01:08:18,030 --> 01:08:22,830 Ara noti sota d'aquest és el meu etiqueta de script propi i adonar-se del que he fet aquí. 1149 01:08:22,830 --> 01:08:27,450 Resulta que jQuery fa alguna cosa una mica sofisticat. 1150 01:08:27,450 --> 01:08:29,660 JavaScript té signes de dòlar, però no tenen sentit. 1151 01:08:29,660 --> 01:08:32,870 >> Són com la lletra A o B o C. 1152 01:08:32,870 --> 01:08:36,670 jQuery simplement ha adoptat la convenció o el tipus de reclamar al fet 1153 01:08:36,670 --> 01:08:40,280 que $ serà el seu símbol especial. 1154 01:08:40,280 --> 01:08:44,950 Així que tan aviat com es carrega aquesta imatge global JavaScript fins aquí amb l'etiqueta script, 1155 01:08:44,950 --> 01:08:49,080 vostè té accés a una variable global especial que es diu $. 1156 01:08:49,080 --> 01:08:53,009 És millor conegut com jQuery, però que no es veu tan sexy com $. 1157 01:08:53,009 --> 01:08:56,250 Però $ no té cap significat especial. En PHP que tenia un significat especial. 1158 01:08:56,250 --> 01:08:58,440 Calia tenir al davant d'una variable. 1159 01:08:58,440 --> 01:09:01,670 Això és només una cosa sexy que va assumir. 1160 01:09:01,670 --> 01:09:03,389 Què està passant aquí? 1161 01:09:03,389 --> 01:09:08,830 Tingueu en compte que estic passant a la funció jQuery meu document variable global 1162 01:09:08,830 --> 01:09:10,860 i després et dic. llest. 1163 01:09:10,860 --> 01:09:15,480 El que fa és essencialment jQuery que et permet prendre algunes coses Javascript vainilla 1164 01:09:15,480 --> 01:09:17,889 com l'objecte de document, l'objecte finestra, 1165 01:09:17,889 --> 01:09:20,790 i si se li passa a la funció jQuery - 1166 01:09:20,790 --> 01:09:24,429 i de nou, per ser clar, aquesta és una funció anomenada jQuery - 1167 01:09:24,429 --> 01:09:28,240 el que fa és que et torna a una versió especial del document 1168 01:09:28,240 --> 01:09:30,700 que té més funcionalitat associada amb ell. 1169 01:09:30,700 --> 01:09:34,760 Així que en JavaScript primera no hi ha cap funció llest, 1170 01:09:34,760 --> 01:09:37,810 però si es passa el document a la funció jQuery en primer lloc, 1171 01:09:37,810 --> 01:09:40,960 retorna a vostè una versió especial de l'objecte de document 1172 01:09:40,960 --> 01:09:43,030 que té més característiques de luxe. 1173 01:09:43,030 --> 01:09:48,230 I per això la gent li agrada. Simplement fa les coses més fàcils de fer, ja que estem a punt de veure. 1174 01:09:48,230 --> 01:09:49,820 Llavors, què significa aquesta línia de codi significa? 1175 01:09:49,820 --> 01:09:52,690 Aquesta línia de codi aquí voldrà dir que el document està llest - 1176 01:09:52,690 --> 01:09:56,830 en altres paraules, una vegada que el navegador es realitza la lectura d'aquest arxiu superior a la inferior - 1177 01:09:56,830 --> 01:09:59,200 seguir endavant i executar la següent funció. 1178 01:09:59,200 --> 01:10:03,540 El que és realment interessant en JavaScript - PHP té i això també - 1179 01:10:03,540 --> 01:10:05,450 és funcions anònimes. 1180 01:10:05,450 --> 01:10:10,560 En JavaScript es poden declarar funcions que no tenen nom però tenen un cos. 1181 01:10:10,560 --> 01:10:12,570 Observi el que està passant aquí. 1182 01:10:12,570 --> 01:10:16,220 >> Aquesta és una funció anomenada llista, i només significa fer el següent 1183 01:10:16,220 --> 01:10:20,220 quan la pàgina web tot està a punt, quan tot ha estat llegit des del servidor. 1184 01:10:20,220 --> 01:10:23,090 Què vols fer? Vull executar un bloc de codi. 1185 01:10:23,090 --> 01:10:27,120 Tingueu en compte que nosaltres no volem executar aquest codi seguida. 1186 01:10:27,120 --> 01:10:34,350 Si s'omet això, això significaria iniciar immediatament l'execució d'aquestes línies de codi. 1187 01:10:34,350 --> 01:10:39,040 Però el fet que jo estic dient no, no, no, acabar amb això en una funció anònima com aquest 1188 01:10:39,040 --> 01:10:43,000 vol dir que no s'executarà però, cridar amb el temps. 1189 01:10:43,000 --> 01:10:45,430 Ho vam veure fa un moment, en el nostre exemple anterior forma. 1190 01:10:45,430 --> 01:10:49,990 Quina funció tenia que anomenem el temps, a 500 mil · lèsimes de segon més tard? Blink. 1191 01:10:49,990 --> 01:10:51,480 Així que la idea mateixa. 1192 01:10:51,480 --> 01:10:53,950 Un cop més, fins i tot si això li sembla una mica estrany, simplement prengui de moment en la fe 1193 01:10:53,950 --> 01:10:57,060 que per declarar una funció anònima que es diu el temps, 1194 01:10:57,060 --> 01:11:01,720 simplement introduïu function () { 1195 01:11:01,720 --> 01:11:05,380 Llavors, què codi anem a executar amb el temps? El següent. 1196 01:11:05,380 --> 01:11:10,460 Això també es veu una mica nou, però això vol dir que aquesta és la funció jQuery, 1197 01:11:10,460 --> 01:11:13,430 i això ara és una drecera. 1198 01:11:13,430 --> 01:11:18,830 Aquest fragment de codi HTML a la part inferior de la pantalla, per descomptat, té una representació d'arbre. 1199 01:11:18,830 --> 01:11:21,730 No és això. Aquesta pàgina és més interessant que aquest exemple Hello World. 1200 01:11:21,730 --> 01:11:25,210 Però hi ha un arbre que correspon a aquest HTML. 1201 01:11:25,210 --> 01:11:28,910 Seria un dolor al coll a haver d'implementar algun tipus de funció recursiva 1202 01:11:28,910 --> 01:11:34,380 per iniciar en el node arrel i després trobar el node amb identificador el registre. 1203 01:11:34,380 --> 01:11:38,340 Llavors, què jQuery fa molt fàcil per a nosaltres és literalment això. 1204 01:11:38,340 --> 01:11:43,000 Vagi per davant i m'ho div o la manera que sigui, qualsevol element HTML 1205 01:11:43,000 --> 01:11:45,820 té un ID de registre. 1206 01:11:45,820 --> 01:11:52,440 Això és equivalent a document.getElementById ('registre'). 1207 01:11:52,440 --> 01:11:54,170 >> Per què la gent com jQuery? 1208 01:11:54,170 --> 01:12:00,110 Com que és més curta d'escriure. Però això és tot el que és. És la mateixa idea. 1209 01:12:00,110 --> 01:12:02,630 Pose-me'n amb el tag amb identificador el registre. 1210 01:12:02,630 --> 01:12:06,300 I quan aquesta etiqueta, que passa a ser una forma, es presenta, 1211 01:12:06,300 --> 01:12:08,300 seguir endavant i executar aquest codi. 1212 01:12:08,300 --> 01:12:11,320 Així que donem una ullada ara a com ho estem fent validació de formularis. 1213 01:12:11,320 --> 01:12:15,950 La sintaxi és certament críptic al principi, però què està passant? 1214 01:12:15,950 --> 01:12:21,050 Si aquesta línia de codi és cert, vaig a cridar que l'usuari proporcioni la seva adreça de correu electrònic. 1215 01:12:21,050 --> 01:12:22,970 Llavors, què és aquesta línia de codi? 1216 01:12:22,970 --> 01:12:25,560 $ Significa jQuery. Ara noti això. 1217 01:12:25,560 --> 01:12:27,920 Aquesta és una espècie de CSS. 1218 01:12:27,920 --> 01:12:33,370 Si has bussejat en CSS, però, vostè sabrà que això significa que l'element el ID és la inscripció. 1219 01:12:33,370 --> 01:12:39,840 L'espai significa trobar a un nen o un descendent de registre el nom és el d'entrada. 1220 01:12:39,840 --> 01:12:42,970 I després aquesta cosa entre claudàtors és un filtre poc. 1221 01:12:42,970 --> 01:12:47,010 I encara que això sembla críptica, això només significa anar al formulari amb identificador el registre, 1222 01:12:47,010 --> 01:12:51,230 anar a l'interior d'aquest element d'entrada el nom és el correu electrònic, 1223 01:12:51,230 --> 01:12:55,440 i després obtenir el seu valor, sigui quina sigui el seu valor passa a ser - 1224 01:12:55,440 --> 01:12:59,670 asdf si això és tot el escrit o malan@harvard.edu si això és el que he escrit. 1225 01:12:59,670 --> 01:13:05,250 Així que si el valor del camp email del formulari == res, crida a l'usuari. 1226 01:13:05,250 --> 01:13:09,700 Perquè si el valor del camp de contrasenya == res, crida a l'usuari. 1227 01:13:09,700 --> 01:13:19,520 >> Else si el valor del camp de contrasenyes no és igual al valor del camp de confirmació 1228 01:13:19,520 --> 01:13:22,850 que era l'element altra manera, cridar a l'usuari. 1229 01:13:22,850 --> 01:13:25,680 I finalment - i aquesta també té una mica de nova sintaxi pròpia, 1230 01:13:25,680 --> 01:13:29,270 però una vegada que ho has vist, és si més no una mica més raonable - 1231 01:13:29,270 --> 01:13:34,060 else if el formulari el ID és la inscripció té un element d'entrada el nom és un acord 1232 01:13:34,060 --> 01:13:39,720 i es comprova que, endavant i cridar en l'usuari. 1233 01:13:39,720 --> 01:13:42,520 Així que estic totalment d'admetre que això és completament aclaparador a primera vista. 1234 01:13:42,520 --> 01:13:46,530 Es tracta d'una gran quantitat de nova sintaxi. Però tots jQuery segueix aquest tipus de patrons. 1235 01:13:46,530 --> 01:13:49,880 I honestament, jo ni tan sols sabia que això existia fins fa uns minuts. 1236 01:13:49,880 --> 01:13:53,640 Vaig buscar a Google "Com comprovar si una casella està marcada en jQuery?" 1237 01:13:53,640 --> 01:13:55,680 i aquesta és la sintaxi, perquè hi ha diferents maneres de fer-ho 1238 01:13:55,680 --> 01:13:58,010 amb codi real brut JavaScript. 1239 01:13:58,010 --> 01:14:01,030 Així com la primera pàgina del Butlletí de problemes 7 emfatitza, 1240 01:14:01,030 --> 01:14:04,500 pset 7 és molt més que un exercici en si mateix bootstrapping 1241 01:14:04,500 --> 01:14:08,650 en què proporcionem, amb sort, un marc conceptual per abordar el conjunt de processadors. 1242 01:14:08,650 --> 01:14:12,280 >> Però, com sol ser el cas amb el disseny web, li toca a vostè realment a furgar, 1243 01:14:12,280 --> 01:14:16,680 incorporar fragments de codi i exemples del Web sempre que se'ls citi 1244 01:14:16,680 --> 01:14:17,960 pels termes en què el primer full, 1245 01:14:17,960 --> 01:14:21,460 i adonar-se que l'aprenentatge d'HTML, CSS, JavaScript i fins i tot SQL 1246 01:14:21,460 --> 01:14:26,020 està realment destinat a ser aquest exercici a casa a mesura que comencem a prendre aquestes rodes d'entrenament apagat. 1247 01:14:26,020 --> 01:14:29,150 I adonar-se també que hi ha moltes coses més que pots fer amb un navegador. 1248 01:14:29,150 --> 01:14:33,790 A l'interior de la majoria d'aquests elements, hi ha altres coses anomenats controladors d'esdeveniments. 1249 01:14:33,790 --> 01:14:37,140 I tot i que acabem de veure en els anomenats onsubmit i onReady, 1250 01:14:37,140 --> 01:14:40,310 vostè pot fer coses com onkeydown, onkeyup, 1251 01:14:40,310 --> 01:14:43,410 com quan l'usuari toca una tecla, es pot escoltar per això i tecla de dalt. 1252 01:14:43,410 --> 01:14:45,940 Gmail té dreceres de teclat. 1253 01:14:45,940 --> 01:14:49,490 Com fa Google per posar en pràctica mètodes abreujats de teclat com C per compondre? 1254 01:14:49,490 --> 01:14:54,120 Escolten per esdeveniments, com se'ls anomena, com onkeypress o onkeyup i onkeydown. 1255 01:14:54,120 --> 01:14:56,360 Si mai ha rondat el ratolí sobre alguna opció de menú 1256 01:14:56,360 --> 01:15:00,180 i, de sobte voila, apareix un menú o la canvia de color gràfic, 1257 01:15:00,180 --> 01:15:01,920 Com es fa això? 1258 01:15:01,920 --> 01:15:06,940 En lloc d'escoltar onReady o onsubmit, escoltes o onmouseout onMouseOver per. 1259 01:15:06,940 --> 01:15:10,920 >> Així que en resum, amb aquests conceptes bàsics molt senzills que hem començat a rascar la superfície d'avui 1260 01:15:10,920 --> 01:15:13,940 i anem a bussejar-hi per al dimecres, que té, cada vegada més, 1261 01:15:13,940 --> 01:15:17,530 facultat d'aplicar el tipus de coses que vostè ja coneix. 1262 01:15:17,530 --> 01:15:21,620 Així que anem a acabar aquí, i continuarem aquest dimecres. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]