1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Semana 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Harvard University] 3 00:00:04,740 --> 00:00:07,170 [Esta é CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Todo ben. Benvido de volta. Este é CS50, e este é o inicio da semana 9. 5 00:00:12,350 --> 00:00:16,600 Hoxe, en particular, o deseño, non máis no contexto C 6 00:00:16,600 --> 00:00:20,010 pero no contexto do PHP e un pouco de SQL e un pouco de JavaScript, 7 00:00:20,010 --> 00:00:23,730 particularmente para un fin de ambos pset 7 e tamén o seu proxecto final. 8 00:00:23,730 --> 00:00:26,310 En realidade, se está nese punto no seu proxecto final 9 00:00:26,310 --> 00:00:30,100 onde presuntamente a partir dunha hora, ten polo menos comezou a dar un pensamento 10 00:00:30,100 --> 00:00:33,730 ao seu proxecto final e está a pensar que desexa colaborar con un ou dous compañeiros, 11 00:00:33,730 --> 00:00:36,150 Se vostede está tendo problemas para conectarse con compañeiros de clase dixen, 12 00:00:36,150 --> 00:00:40,570 Sinto-se libre para cubrir o formulario en cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 El só pide que o que é, o tipo de proxecto que está a pensar, 14 00:00:42,880 --> 00:00:44,870 onde vostede vive só por razóns loxísticas. 15 00:00:44,870 --> 00:00:49,510 E entón, se quere manter un ollo en durante a próxima semana ou así que a URL folla alí, 16 00:00:49,510 --> 00:00:53,520 entón podes ver unha versión de só lectura do documento de Google 17 00:00:53,520 --> 00:00:56,010 en que estamos traídos esta información. 18 00:00:56,010 --> 00:00:58,930 Entón, se quere traballar con alguén, por todos os medios sentirse libre para chegar á xente 19 00:00:58,930 --> 00:01:00,480 a través deste mecanismo. 20 00:01:00,480 --> 00:01:02,690 Pero a maioría das persoas fan traballo solo. Isto é totalmente ben. 21 00:01:02,690 --> 00:01:06,120 Polo tanto, non sinto que esta é de forma algunha obrigatorio. 22 00:01:06,120 --> 00:01:09,680 O venres era só eu e algúns do equipo aquí, 23 00:01:09,680 --> 00:01:11,100 teatro en branco para a maior parte. 24 00:01:11,100 --> 00:01:14,600 Foron tres turistas sentado alí enriba, de xeito que foi un pouco raro. 25 00:01:14,600 --> 00:01:18,970 O que falamos foi sobre bases de datos e nós conversas sobre pset 7 un pouco. 26 00:01:18,970 --> 00:01:22,200 E se non aconteceu para incorporarse aquela en vídeo aínda, iso é bo. 27 00:01:22,200 --> 00:01:26,770 Vou tentar definir os termos que, doutra forma que concedeu 28 00:01:26,770 --> 00:01:28,840 con base en charla do venres. 29 00:01:28,840 --> 00:01:32,550 >> Pero hoxe nós estamos indo para tratar de chegar ao punto 30 00:01:32,550 --> 00:01:34,990 de non só ser capaz de facer algo así pset 7 31 00:01:34,990 --> 00:01:37,360 pero realmente entender o que está a suceder debaixo do capó, 32 00:01:37,360 --> 00:01:41,910 particularmente algunhas das abstraccións que poñemos no lugar do ficheiro functions.php 33 00:01:41,910 --> 00:01:45,780 para facer a súa vida un pouco máis fácil, pero para que finalmente entender 34 00:01:45,780 --> 00:01:48,760 de xeito que cando as rodinhas saír algunhas semanas aínda pode sobrevivir 35 00:01:48,760 --> 00:01:53,750 no mundo real e facer isto sen marco CS50 debaixo de ti. 36 00:01:53,750 --> 00:01:57,500 Ese $ _SESSION, para aqueles de vostedes que están familiarizados 37 00:01:57,500 --> 00:02:01,960 ou que xa peguei o vídeo na venres, o que imos facer SESIÓN 38 00:02:01,960 --> 00:02:04,330 en unha aplicación web baseado en PHP? 39 00:02:04,330 --> 00:02:09,650 Esta é unha variable superglobal, o que significa que é similar en espírito para GET e POST 40 00:02:09,650 --> 00:02:13,970 e algúns outros, pero o que é esa cousa de útil para? 41 00:02:13,970 --> 00:02:18,320 >> ¿Que é SESIÓN utilizado? Si [Alumno] log in 42 00:02:18,320 --> 00:02:21,040 Sentímolo? [Alumno] log in log in feito. 43 00:02:21,040 --> 00:02:25,100 En pset sete estamos a usar esa superglobal sesión para facilitar log in 44 00:02:25,100 --> 00:02:28,600 E o que é agradable sobre este superglobal é que é un array asociativo. 45 00:02:28,600 --> 00:02:33,190 Unha matriz asociativa, recall, é só unha matriz, pero cuxos índices xa non teñen que ser números 46 00:02:33,190 --> 00:02:37,670 como 012. Poden ser números ou poden ser aínda cordas. 47 00:02:37,670 --> 00:02:44,890 E iso, se mergullou pset 7 aínda, ten que se lembrar que estamos almacenando unha identificación clave chamada 48 00:02:44,890 --> 00:02:50,330 dentro desa matriz asociativa cuxo valor é algo así como 123 - 49 00:02:50,330 --> 00:02:53,780 calquera que sexa conectado no momento ID de usuario é. 50 00:02:53,780 --> 00:02:59,470 A motivación para iso é que, mesmo despois de que o usuario visitou localhost 51 00:02:59,470 --> 00:03:02,720 ou o meu sitio máis xeral e entón eles rexistrado, 52 00:03:02,720 --> 00:03:07,320 aínda que non faga clic nun enlace ou volver para o meu sitio por 5 minutos 53 00:03:07,320 --> 00:03:10,730 ou incluso unha hora ou un día, pero eles deixan a xanela do navegador aberta, 54 00:03:10,730 --> 00:03:14,370 través deste superglobal podo lembrar que se identificou 55 00:03:14,370 --> 00:03:21,140 >> Noutras palabras, iso me permite almacenar un pouco longo prazo calquera cousa que quero sobre un usuario. 56 00:03:21,140 --> 00:03:24,390 E pode pensar realmente como a encarnación dun cesta da compra. 57 00:03:24,390 --> 00:03:27,740 Lugares como a Amazon, obviamente, deixar poñer as cousas nun cesta de la compra, 58 00:03:27,740 --> 00:03:32,230 pero HTTP, o protocolo que alimenta a web, é apátrida 59 00:03:32,230 --> 00:03:34,230 no sentido de que cando visita un sitio web, 60 00:03:34,230 --> 00:03:37,290 Para a maior parte, non ten algunha conexión de rede constante 61 00:03:37,290 --> 00:03:39,270 entre o navegador eo servidor. 62 00:03:39,270 --> 00:03:42,190 Así que teña baixo a HTML e os JPEGs e os GIFs e todo iso, 63 00:03:42,190 --> 00:03:48,200 a conexión vai e só ten unha copia do HTML e outras cousas do servidor. 64 00:03:48,200 --> 00:03:53,000 Pero se o servidor quere lembrar de algo sobre ti, 65 00:03:53,000 --> 00:03:57,580 a carga está no servidor para realmente gravar esa información. 66 00:03:57,580 --> 00:04:00,130 E así que o programador que teñen control sobre o servidor 67 00:04:00,130 --> 00:04:04,400 pode pór algo que sexa dentro desa matriz asociativa superglobal 68 00:04:04,400 --> 00:04:06,850 e vai estar alí a próxima vez que o usuario atrás, 69 00:04:06,850 --> 00:04:12,070 se é minutos ou mesmo días máis tarde, a menos que pechen a ventana do navegador, 70 00:04:12,070 --> 00:04:14,360 en que punto SESIÓN desaparece. 71 00:04:14,360 --> 00:04:17,779 Entón, é o almacenamento efémero, é non persistente, e está destinado a ir 72 00:04:17,779 --> 00:04:22,360 así que o usuario pecha o seu navegador - non só que guía, moitas veces, o navegador enteiro, 73 00:04:22,360 --> 00:04:24,930 así, efectivamente deslogar o usuario. 74 00:04:24,930 --> 00:04:28,000 Entón, como é esa cousa realmente aplicado? 75 00:04:28,000 --> 00:04:31,360 Imos dar unha rápida ollo a un exemplo simples, mirou o venres. 76 00:04:31,360 --> 00:04:33,340 Para quen non coñece, era tan sinxelo coma iso. 77 00:04:33,340 --> 00:04:35,910 Esta é unha páxina web, cuxo único propósito na vida é me diga 78 00:04:35,910 --> 00:04:38,000 cantas veces eu xa visitaron esta páxina. 79 00:04:38,000 --> 00:04:41,670 Esta é a primeira vez aquí o luns que o visitei, por iso di 0 veces. 80 00:04:41,670 --> 00:04:46,940 >> Pero se eu comezar a actualizar esta páxina, el di que unha vez máis, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 e iso acabará por só manter a conta subindo, subindo, subindo, subindo, ata 82 00:04:49,800 --> 00:04:53,130 para cada vez que eu realmente premer Recargar sobre el. 83 00:04:53,130 --> 00:04:58,830 Entón, como é este traballo? Deixe-me ir a dentro dese ficheiro chamado counter.php. 84 00:04:58,830 --> 00:05:02,490 A parte de arriba é todos os comentarios azuis, pero a parte interesante é aquí. 85 00:05:02,490 --> 00:05:06,670 Na liña 13 chamamos iso de session_start función, 86 00:05:06,670 --> 00:05:09,600 e que é, literalmente, todo o que cómpre facer se quere ter acceso 87 00:05:09,600 --> 00:05:13,610 a este superglobal especial chamada $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 Isto fai todo isto posible, e imos ver en un momento como este é posible. 89 00:05:17,430 --> 00:05:20,350 Nun comunicado liña 16 o que eu estou facendo. 90 00:05:20,350 --> 00:05:25,960 A clave, chamado contador - noutras palabras, o valor do índice - "contador" 91 00:05:25,960 --> 00:05:32,310 existe dentro desa matriz chamada sesión, entón o que estou facendo con el na liña de abaixo? 92 00:05:32,310 --> 00:05:36,650 Cal é a liña 18 está facendo? 93 00:05:36,650 --> 00:05:40,360 >> [Resposta do alumno inaudível] O que é isto? [Alumno] almacenar o valor. Bo 94 00:05:40,360 --> 00:05:45,800 É almacenar o valor que está en sesión agora nunha nova variable local temporal, 95 00:05:45,800 --> 00:05:48,250 $ Contador en todas as letras minúsculas. 96 00:05:48,250 --> 00:05:50,770 Teña en conta que o PHP xa está sendo un pouco preguiceiro aquí. 97 00:05:50,770 --> 00:05:55,550 Repare que non temos ningunha mención de int ou float ou cadea ou algo así 98 00:05:55,550 --> 00:06:00,480 porque o PHP é feblemente tipado, en que non ten que especificar o tipo dunha variable, 99 00:06:00,480 --> 00:06:03,310 e neste caso aquí eu non teño aínda declarou aínda. 100 00:06:03,310 --> 00:06:08,980 Estou declarando a dentro destas claves e ao contrario de C, este é realmente ben. 101 00:06:08,980 --> 00:06:13,800 Non importa o quão profundamente aniñados declaración dunha variable é en PHP - 102 00:06:13,800 --> 00:06:16,650 dentro rizado cinta, dentro rizado cinta e afíns - 103 00:06:16,650 --> 00:06:21,230 el naquel momento no tempo existen para o resto do programa, 104 00:06:21,230 --> 00:06:22,680 para mellor ou para peor. 105 00:06:22,680 --> 00:06:26,930 Por iso, inmediatamente convértese en global, logo que o define como estamos facendo aquí. 106 00:06:26,930 --> 00:06:31,620 >> Se non, se eu non cre que hai algo na superglobal session, 107 00:06:31,620 --> 00:06:34,680 Estou aparentemente arrincar este contador variable a 0, 108 00:06:34,680 --> 00:06:37,580 así, só asumindo o usuario nunca estivo aquí antes. 109 00:06:37,580 --> 00:06:40,030 E entón este curso é de incrementar o contador como? 110 00:06:40,030 --> 00:06:44,480 Estou a actualizar o valor que está dentro desa matriz asociativa 111 00:06:44,480 --> 00:06:49,530 fixándose a igual en calquera momento contador + 1. 112 00:06:49,530 --> 00:06:53,520 Se rolar ata aquí para o código HTML da páxina, é realmente moi simple. 113 00:06:53,520 --> 00:06:58,920 Todo o que teño no corpo desta páxina é: "Xa visitaron esta web veces así e así." 114 00:06:58,920 --> 00:07:00,350 E esta é unha construción PHP. 115 00:07:00,350 --> 00:07:06,080 Se fai 00:07:12,600 É realmente equivalente a algo como printf, que xa vimos moitas veces en C, 117 00:07:12,600 --> 00:07:15,940 aínda que, como xa debería saber a partir da especificación en pset 7, 118 00:07:15,940 --> 00:07:20,160 impresión tamén é unha función que só imprime algo, realmente non usar códigos de formato, 119 00:07:20,160 --> 00:07:23,270 e pode realmente dicir eco tamén. 120 00:07:23,270 --> 00:07:27,460 Son todos moi lixeiramente diferente, aínda que o efecto neto é basicamente o mesmo. 121 00:07:27,460 --> 00:07:31,270 Entón, ese uso do signo igual é só unha especie de un xeito elegante de facelo 122 00:07:31,270 --> 00:07:34,910 de forma máis sucinta do que podería ser capaz. 123 00:07:34,910 --> 00:07:38,370 Entón, iso é todo o que esta web fai. El amosa o valor de contador. 124 00:07:38,370 --> 00:07:40,550 Como se todo isto realmente acontece? 125 00:07:40,550 --> 00:07:43,250 Ten que lembrar de unha semana, comezamos a mirar debaixo do capó 126 00:07:43,250 --> 00:07:47,910 de como a páxina web funciona usando esta guía inspector. 127 00:07:47,910 --> 00:07:51,900 >> Chrome ten ese tanto na versión para Mac, a versión de Windows, e mesmo a versión do Linux, 128 00:07:51,900 --> 00:07:59,510 e Firefox e IE teñen mecanismos semellantes en que ten este depurador integrado 129 00:07:59,510 --> 00:08:01,400 dentro do navegador. 130 00:08:01,400 --> 00:08:03,040 Imos dar un ollo ao seguinte. 131 00:08:03,040 --> 00:08:06,960 Temos unha morea de guías aquí, e recordar que o máis á esquerda é unha Elementos, 132 00:08:06,960 --> 00:08:10,700 e non importa como godawful o código HTML e JavaScript está nunha páxina, 133 00:08:10,700 --> 00:08:15,710 lembrar que, coa guía Elementos realmente pode navegar no HTML xerarquicamente 134 00:08:15,710 --> 00:08:17,050 e agradable e ordenadamente. 135 00:08:17,050 --> 00:08:19,370 Entón, se está tentando aprender a partir dun sitio web como Google ou Facebook 136 00:08:19,370 --> 00:08:22,370 ou realmente calquera sitio, sabe que é probablemente mellor fóra 137 00:08:22,370 --> 00:08:26,360 mirando o código fonte desta forma en lugar de ver a fonte prima, 138 00:08:26,360 --> 00:08:29,580 o que pode ser unha desorde, como vimos, especialmente no sitio web de Google. 139 00:08:29,580 --> 00:08:32,220 Entón, se eu, no canto clica na guía Rede aquí, 140 00:08:32,220 --> 00:08:34,830 imos ver o que está a suceder cando visitar esta páxina. 141 00:08:34,830 --> 00:08:38,669 Primeiro déixeme borrar a caché. 142 00:08:38,669 --> 00:08:43,570 Eu estou indo para ir en Configuración no Chrome e despois ir a Historia 143 00:08:43,570 --> 00:08:46,420 e desmarque todos os datos de navegación. 144 00:08:46,420 --> 00:08:48,170 Podes estar acostumado a facelo para outros fins, [risas] 145 00:08:48,170 --> 00:08:51,990 pero cando se trata de sitios en desenvolvemento, é realmente útil - 146 00:08:51,990 --> 00:08:55,980 se está rindo sabe. [Risas] 147 00:08:55,980 --> 00:08:59,310 É realmente moi útil no desenvolvemento de sitios web, porque a realidade é 148 00:08:59,310 --> 00:09:04,100 cousas como galletas e cousas como caché de arquivos HTML, arquivos de caché de JavaScript 149 00:09:04,100 --> 00:09:06,390 Pode realmente facer unha gran dor de cabeza, porque se por calquera motivo 150 00:09:06,390 --> 00:09:11,500 o explorador decide facer caché algún arquivo e aínda así ten feito cambios que o ficheiro no servidor 151 00:09:11,500 --> 00:09:14,670 pero o seu navegador non ten realmente entendeu que o ficheiro foi modificado 152 00:09:14,670 --> 00:09:19,060 e, polo tanto, non realmente volver baixalo, mesmo cando fai clic no botón Recargar, 153 00:09:19,060 --> 00:09:23,210 unha das formas máis infalible para só asegúrese a culpa non é o seu código, 154 00:09:23,210 --> 00:09:26,480 é o comportamento do navegador, é ir aquí no seu navegador 155 00:09:26,480 --> 00:09:29,950 e só limpar toda a historia, así que non hai confusión. 156 00:09:29,950 --> 00:09:33,210 >> E entón, se realmente quere ser paranoico, saia do navegador, reinicias, 157 00:09:33,210 --> 00:09:35,660 e comproba se todo está funcionando como esperado. 158 00:09:35,660 --> 00:09:38,820 Así, en breve, limpeza de caché é bo cando se fai desenvolvemento. 159 00:09:38,820 --> 00:09:40,690 Polo tanto, temos aquí a guía Rede. 160 00:09:40,690 --> 00:09:46,020 Eu xa tiña visitado o sitio 9 veces, pero deixe-me ir adiante agora e prema en Recargar. 161 00:09:46,020 --> 00:09:47,500 E eu estou de volta a 0. 162 00:09:47,500 --> 00:09:52,100 Imos realmente ver como é que este superglobal sesión está sendo implementado. 163 00:09:52,100 --> 00:09:55,990 Eu estou indo a premer a solicitude HTTP 1 que foi feita, 164 00:09:55,990 --> 00:09:58,810 e esta xanela de depuración me permite ollar para dentro diso. 165 00:09:58,810 --> 00:10:01,970 Aquí eu vexo só unha resposta desde o servidor, o que non é interesante. 166 00:10:01,970 --> 00:10:04,030 Vin isto en calquera número de formas. 167 00:10:04,030 --> 00:10:06,350 Pero o que é tecnicamente interesante son as cabeceiras. 168 00:10:06,350 --> 00:10:11,770 Se rolar para abaixo aquí e centrar os cabezallos de solicitude e prema en ver fonte, 169 00:10:11,770 --> 00:10:14,400 o que eu vou ver se, literalmente, a solicitude HTTP 170 00:10:14,400 --> 00:10:17,250 que acaba de entrar no meu navegador para o servidor, 171 00:10:17,250 --> 00:10:21,400 Get é a palabra e, a continuación, / counter.php sendo o nome do ficheiro, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 ser só a versión HTTP que o meu ordenador está a usar. 173 00:10:25,670 --> 00:10:31,070 Esta liña aquí é un pequeno recordatorio de navegador para o servidor que o nome do servidor é 174 00:10:31,070 --> 00:10:33,020 que quere falar. 175 00:10:33,020 --> 00:10:38,200 E despois o resto que ás veces é interesante, pero non é relevante agora. 176 00:10:38,200 --> 00:10:40,090 >> Este é só un tipo de curiosidade. 177 00:10:40,090 --> 00:10:43,530 Cryptic aínda que esa secuencia é, en calquera momento o seu navegador visita un sitio web 178 00:10:43,530 --> 00:10:47,110 é informar ao servidor do navegador que está usando 179 00:10:47,110 --> 00:10:50,040 e que o sistema operativo que está a usar e que a versión do mesmo. 180 00:10:50,040 --> 00:10:52,650 Entón, se xa se preguntas como sitios como CNN e outros enfeites 181 00:10:52,650 --> 00:10:56,860 saber o que as porcentaxes son usuarios de Mac na web os usuarios, PC, 182 00:10:56,860 --> 00:11:00,820 Usuarios do IE, os usuarios de Chrome e afíns, é porque todos os nosos navegadores 183 00:11:00,820 --> 00:11:04,300 está dicindo cada único sitio aí fóra que somos. 184 00:11:04,300 --> 00:11:07,410 Iso non significa necesariamente conter información de identificación persoal, 185 00:11:07,410 --> 00:11:13,060 pero fai dicir ao servidor que o seu enderezo IP é eo que navegador e sistema operativo está a usar. 186 00:11:13,060 --> 00:11:14,720 Entón é aí onde esa información é. 187 00:11:14,720 --> 00:11:19,960 Pero o que é máis interesante agora, cando se trata destas sesións é a cabeceira de resposta. 188 00:11:19,960 --> 00:11:22,530 Deixe-me ver clic fonte próxima a resposta. 189 00:11:22,530 --> 00:11:24,590 O que é interesante aquí é algunhas cousas. 190 00:11:24,590 --> 00:11:27,580 1, temos de volta un código de estado 200. 191 00:11:27,580 --> 00:11:29,840 Nós nunca vemos este código de estado porque iso significa que está todo ben. 192 00:11:29,840 --> 00:11:32,920 Significa, literalmente, ben ao contrario de calquera outra cousa. 193 00:11:32,920 --> 00:11:36,380 ¿Que é un número que, ás veces, ver que é malo? [Alumno] 404. 194 00:11:36,380 --> 00:11:39,860 Arquivo de 404, non se atopou, 403 pode estar deparando coa xa, 195 00:11:39,860 --> 00:11:43,660 o que é prohibido, o que significa que vostede esqueceu de chmod algo, o máis probable. 196 00:11:43,660 --> 00:11:45,190 E hai unha morea de outros. 197 00:11:45,190 --> 00:11:47,760 >> Aquí, iso é un pouco tolo. 198 00:11:47,760 --> 00:11:52,340 Realmente só escribín este ficheiro hai uns minutos colando-gedit. 199 00:11:52,340 --> 00:11:57,100 Por que esa páxina caduca en 1981, antes de que realmente era un sitio? 200 00:11:58,010 --> 00:12:00,730 O que está a suceder alí? 201 00:12:00,730 --> 00:12:04,390 >> [Resposta do alumno inaudível] O selo de tempo. Pero por que? 202 00:12:06,110 --> 00:12:09,120 É un tanto arbitraria, pero é realmente útil. 203 00:12:09,120 --> 00:12:15,500 O que isto está dicindo para o meu navegador é o arquivo PHP que acabou solicitado xa caducou. 204 00:12:15,500 --> 00:12:18,580 Na verdade, el expirou hai 30 anos. 205 00:12:18,580 --> 00:12:20,260 Pero o que iso realmente significa? 206 00:12:20,260 --> 00:12:22,500 Significa só que a próxima vez que o usuario visita esta páxina, 207 00:12:22,500 --> 00:12:25,540 sexa por recarga ou escribindo a URL na barra de enderezos, 208 00:12:25,540 --> 00:12:28,010 asegúrese de ir buscar unha nova copia do mesmo. 209 00:12:28,010 --> 00:12:30,840 Esta é unha especie de un exemplo de bloqueo de caché, 210 00:12:30,840 --> 00:12:33,790 unha palabra estúpida que significa só tentando evitar navegadores 211 00:12:33,790 --> 00:12:37,260 realmente HTML caché que foi enviado a partir dun servidor 212 00:12:37,260 --> 00:12:41,490 para que non accidentalmente alcanzou recarga e despois ver a mesma versión do ficheiro. 213 00:12:41,490 --> 00:12:43,730 Realmente quere que o servidor para enviar unha nova copia. 214 00:12:43,730 --> 00:12:47,440 Así, o feito de que é 1981 só significa que é o que o aparello é escoller 215 00:12:47,440 --> 00:12:50,280 como unha data arbitraria no pasado. 216 00:12:50,280 --> 00:12:53,380 Pero a liña real suculento agora é este. 217 00:12:53,380 --> 00:12:57,550 Mesmo antes do 50 probablemente vagamente familiar cookies. 218 00:12:57,550 --> 00:13:01,820 A partir de agora, especialmente entre aqueles menos cómodo ou no medio, 219 00:13:01,820 --> 00:13:04,120 o que é unha cookie no seu entendemento agora 220 00:13:04,120 --> 00:13:06,980 aínda que estamos a piques de facer o seu entendemento máis técnico? 221 00:13:08,150 --> 00:13:10,070 ¿Que é unha cookie? Si 222 00:13:10,070 --> 00:13:13,890 [Estudante] Información sobre o usuario, como no caso de que xa escribiron o seu nome de usuario ou algo así. 223 00:13:13,890 --> 00:13:17,370 >> Bo É a información sobre o usuario, se introduciu o seu nome de usuario xa. 224 00:13:17,370 --> 00:13:21,190 As cookies son un medio polo cal os servidores poden lembrar de algo sobre un usuario. 225 00:13:21,190 --> 00:13:25,810 E o que é realmente unha cookie é un ficheiro de texto ou unha secuencia de bytes 226 00:13:25,810 --> 00:13:28,340 que é plantado polo servidor dentro do teu navegador, 227 00:13:28,340 --> 00:13:31,960 e dentro dese ficheiro ou entre os máis é algún tipo de identificador. 228 00:13:31,960 --> 00:13:35,640 Quizais sexa literalmente o seu nome de usuario, pero máis frecuentemente é algo máis crítico para o futuro 229 00:13:35,640 --> 00:13:43,700 como esta cousa aquí - bo8dal3ct e así por diante - este realmente grande secuencia alfanumérica 230 00:13:43,700 --> 00:13:47,050 iso é realmente só para ser un identificador único para ti. 231 00:13:47,050 --> 00:13:49,790 Ou pode pensar niso como unha especie de selo de man virtual. 232 00:13:49,790 --> 00:13:53,020 Se vai para algún club ou un parque de atraccións, para lembrar que realmente paga 233 00:13:53,020 --> 00:13:55,850 e foron eles colocar unha etiqueta vermella na súa man de calquera tipo, 234 00:13:55,850 --> 00:13:59,270 e que lembra as persoas no mostrador que xa pagou 235 00:13:59,270 --> 00:14:01,340 e pode ir e vir como sexa. 236 00:14:01,340 --> 00:14:04,250 As cookies son un pouco semellante en espírito a iso. 237 00:14:04,250 --> 00:14:08,070 A primeira vez que visitei o sitio web, como eu fixen despois de limpar a caché, 238 00:14:08,070 --> 00:14:11,620 o servidor web, o aparello, neste caso, poñer un selo na miña man 239 00:14:11,620 --> 00:14:15,030 cuxo nome é PHPSESSID, sesión ID, 240 00:14:15,030 --> 00:14:18,260 cuxo valor é esta secuencia alfanumérica moi longo. 241 00:14:18,260 --> 00:14:22,470 >> Entón esta é agora unha especie de estampada na miña man para que a próxima vez eu bati recargar 242 00:14:22,470 --> 00:14:25,230 ou manualmente visitar esta URL nun navegador, 243 00:14:25,230 --> 00:14:29,230 meu navegador por definición HTTP vai presentar o selo de man 244 00:14:29,230 --> 00:14:31,940 de novo e de novo e de novo. 245 00:14:31,940 --> 00:14:34,550 Así, aínda que o servidor non necesariamente saben quen eu son, 246 00:14:34,550 --> 00:14:39,610 eles polo menos saben que eu son o mesmo usuario, ou polo menos, máis especificamente, o mesmo navegador. 247 00:14:39,610 --> 00:14:45,660 E por iso esta é, en última análise como a superglobal sesión é aplicada. 248 00:14:45,660 --> 00:14:51,200 O servidor non ten idea de quen é vostede cando visita un sitio web para a segunda ou terceira vez 249 00:14:51,200 --> 00:14:53,410 se non presentar este selo man. 250 00:14:53,410 --> 00:14:55,530 E así que presentar ese selo de man, 251 00:14:55,530 --> 00:14:59,370 o servidor web, esencialmente, vai para unha base de datos pouco da súa propia 252 00:14:59,370 --> 00:15:06,040 e cheques, así, acabo de ver o selo de man de bo8dal3ct usuario e así por diante. 253 00:15:06,040 --> 00:15:09,850 Deixe-me ver a información que o programador teña almacenado 254 00:15:09,850 --> 00:15:12,380 interior da superglobal sobre ese usuario, 255 00:15:12,380 --> 00:15:17,000 e entón deixe-me asegurar que eses datos son de novo dentro da sesión superglobal 256 00:15:17,000 --> 00:15:19,830 para que o programador pode volver a acceder a estes datos 257 00:15:19,830 --> 00:15:23,360 aínda que foi definido uns minutos ou horas. 258 00:15:23,360 --> 00:15:26,150 Entón, noutras palabras, as cookies, o que causa unha mala reputación por algún tempo 259 00:15:26,150 --> 00:15:29,990 por mor da inseguridade en navegadores e poden realmente violan a nosa intimidade e todo iso, 260 00:15:29,990 --> 00:15:31,900 realmente teñen gran utilidade, porque sen eles 261 00:15:31,900 --> 00:15:36,110 ía ser constantemente sesión en cada páxina de Facebook que visita 262 00:15:36,110 --> 00:15:40,680 ou correo electrónico cada Gmail le o seu navegador non ten algunha forma de lembrar 263 00:15:40,680 --> 00:15:43,320 que xa está dentro do sistema. 264 00:15:43,320 --> 00:15:46,640 >> Así, deste xeito as cookies son enviados e cara atrás a través do fío. 265 00:15:46,640 --> 00:15:52,470 Outra curiosidade sobre as cookies, especialmente aquí, é que este é totalmente en texto puro. 266 00:15:52,470 --> 00:15:54,930 Non hai cifrado suceder aquí calquera, 267 00:15:54,930 --> 00:15:57,240 e en realidade eu estou usando HTTP neste momento. 268 00:15:57,240 --> 00:16:00,890 Un dos momentos favoritos en CS50, que agora é de 2 anos, 269 00:16:00,890 --> 00:16:04,750 foi na época unha ferramenta chamada Firesheep saíu. 270 00:16:04,750 --> 00:16:08,320 Esta foi unha peza de software libre que foi feita por un investigador de seguridade 271 00:16:08,320 --> 00:16:13,250 como unha chamada de espertar para a comunidade para dicir o quão atroz aplicado 272 00:16:13,250 --> 00:16:17,900 mecanismos de autenticación seguros na web eran. 273 00:16:17,900 --> 00:16:22,880 Entón, por algún tempo, Facebook foi case enteiramente sobre HTTP, HTTPS non. 274 00:16:22,880 --> 00:16:25,640 E mesmo se non ten idea de como funciona o cifrado, S é seguro 275 00:16:25,640 --> 00:16:27,950 entón iso significa que hai polo menos algúns cifrado implicados. 276 00:16:27,950 --> 00:16:30,610 Facebook foi usado para cifrar os nomes de usuario e contrasinais, 277 00:16:30,610 --> 00:16:33,560 pero, logo que mirou para o seu cutuca ou mensaxes ou o seu comentario de noticias, 278 00:16:33,560 --> 00:16:35,360 todo iso foi sen criptografía. 279 00:16:35,360 --> 00:16:37,870 Así foi Gmail ata que só un ano ou dous atrás. 280 00:16:37,870 --> 00:16:41,100 Cada vez que sesión, si, eles usaron cifrado segura 281 00:16:41,100 --> 00:16:44,300 pero despois diso non fixeron. E por que sería? 282 00:16:44,300 --> 00:16:49,210 Porque non usar o cifrado de todos os tempos en casos de uso como esta? 283 00:16:49,210 --> 00:16:53,700 ¿Que é iso? Creo que oín algo. [Alumno] Speed. 284 00:16:53,700 --> 00:16:56,250 Velocidade, non? Existen formas de evitar isto. 285 00:16:56,250 --> 00:16:59,610 Pero se só tipo de pensar loxicamente, se Encriptar algo, 286 00:16:59,610 --> 00:17:01,820 tes que facer polo menos un pouco máis traballo. 287 00:17:01,820 --> 00:17:05,460 En pset 2 cando aplicou César ou Vigenère ou mesmo de crack, 288 00:17:05,460 --> 00:17:07,760 só imprimir unha cadea é relativamente fácil. 289 00:17:07,760 --> 00:17:12,040 Encriptar e, a continuación, imprimir unha cadea require como mínimo un pouco máis traballo. 290 00:17:12,040 --> 00:17:14,520 >>  Para super sitios populares como Google e Facebook, 291 00:17:14,520 --> 00:17:18,839 se ten que facer máis traballo para cada usuario para cada única páxina web que visita, 292 00:17:18,839 --> 00:17:20,520 que só ten máis tempo de CPU. 293 00:17:20,520 --> 00:17:22,920 E se precisa de máis tempo de CPU, pode ter máis servidores, 294 00:17:22,920 --> 00:17:24,270 que significa que pode ter máis diñeiro. 295 00:17:24,270 --> 00:17:27,579 E así por moitos anos isto só realmente non foi a mellor práctica. 296 00:17:27,579 --> 00:17:31,440 As persoas usan cifrado SSL só cando é necesario. 297 00:17:31,440 --> 00:17:34,960 Pero acabou, e como ese suxeito con Firesheep fixo super claro, 298 00:17:34,960 --> 00:17:37,920 cando vostedes que están actualmente no Facebook agora - 299 00:17:37,920 --> 00:17:39,880 A modo de curiosidade, imos ver se vai confesar. 300 00:17:39,880 --> 00:17:42,620 Se está en Facebook agora en algún guía, mesmo se non está en primeiro plano, 301 00:17:42,620 --> 00:17:46,610 é a súa URL HTTP ou HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Varios alumnos] S. S? [Risas] 303 00:17:50,560 --> 00:17:55,510 Okay. Calquera HTTP? Só un? Okay. 304 00:17:55,510 --> 00:17:58,940 Entón, todos podemos hackear conta do cara Facebook agora. 305 00:17:58,940 --> 00:18:04,100 Para a maior parte, esta converteuse en activado por defecto, polo menos nalgúns sitios. 306 00:18:04,100 --> 00:18:08,120 E longa historia curta, o seu tráfico na web non é criptografía, 307 00:18:08,120 --> 00:18:12,960 non só o HTML ir e volver entre as WiFis non criptografada, 308 00:18:12,960 --> 00:18:16,760 así que as cousas como as cookies ir e volver todo o aire 309 00:18:16,760 --> 00:18:18,940 sen calquera forma de criptografía. 310 00:18:18,940 --> 00:18:23,540 Entón se ten un pouco de habilidade de programación ou un pouco de investigando habilidades 311 00:18:23,540 --> 00:18:27,410 para atopar software gratuíto que fai iso, todo o que tes que facer é sentarse no Starbucks 312 00:18:27,410 --> 00:18:30,680 ou sentir nun aeroporto, onde hai xeralmente non cifradas WiFi 313 00:18:30,680 --> 00:18:36,070 e só ver palabras clave como sep-Cookie: PHPSESSID ou 314 00:18:36,070 --> 00:18:39,300 porque se ten o coñecemento técnico para só observar o WiFi 315 00:18:39,300 --> 00:18:43,010 para todos os bits que flúen ó longo do aire por este estándar, 316 00:18:43,010 --> 00:18:50,840 Pode, entón, dicir que PHPSESSID cara pasa a ser bo8dal e así por diante. 317 00:18:50,840 --> 00:18:53,890 E, de novo, se vostede é suficientemente coñecemento técnico ou ter a ferramenta certa, 318 00:18:53,890 --> 00:18:58,890 pode só reconfigurar o seu propio navegador que comece a presentar este selo de man 319 00:18:58,890 --> 00:19:05,030 para o Facebook.com, Facebook e só vai asumir que é a cara 320 00:19:05,030 --> 00:19:09,880 porque todo o que eles non saben é quen é vostede, pero que ten ese identificador exclusivo. 321 00:19:09,880 --> 00:19:14,650 Entón, se roubar o identificador único e presenta-lo ao servidor web, como o seu propio, 322 00:19:14,650 --> 00:19:16,860 eles están indo só para mostrar a vostede que a persoa de alimentación de noticias 323 00:19:16,860 --> 00:19:18,980 ou daquela persoa mensaxes ou puxões. 324 00:19:18,980 --> 00:19:23,190 >> E gustaríame Google agora como activar HTTPS para Facebook quizais. 325 00:19:23,190 --> 00:19:25,150 Pero é realmente tan sinxelo coma iso. 326 00:19:25,150 --> 00:19:27,660 E así o Facebook e Google e outros quedaron moi bo niso, 327 00:19:27,660 --> 00:19:31,870 pero manter un ollo para fóra todo o máis para os sitios que visita que non usan HTTP 328 00:19:31,870 --> 00:19:35,020 e ter algún tipo de información sensibles sobre eles, 329 00:19:35,020 --> 00:19:37,490 se é financeira ou persoal ou similares. 330 00:19:37,490 --> 00:19:43,180 Se eles non están a usar iso, moi posiblemente pode galletas como este ser facilmente roubado 331 00:19:43,180 --> 00:19:46,270 e despois forxado, e iso é o que Firesheep fixo. 332 00:19:46,270 --> 00:19:48,250 Non ten que ser un programador. 333 00:19:48,250 --> 00:19:51,680 Todo o que tiña que facer era ter unha conexión á Internet, descarga esta ferramenta gratuíta, 334 00:19:51,680 --> 00:19:56,490 eo que quere facer é que faga o login e, a continuación, iria amosar-lle os nomes Facebook 335 00:19:56,490 --> 00:20:00,170 de todos na Sanders, nesta demostración particular, en torno de ti 336 00:20:00,170 --> 00:20:03,260 e todo o que tiña que facer era facer clic no seu nome e do software automatizou o proceso de 337 00:20:03,260 --> 00:20:05,970 de cheirar aquel biscoito, presentándose como o seu propio Facebook, 338 00:20:05,970 --> 00:20:07,990 e, listo, está rexistrado Pol 339 00:20:07,990 --> 00:20:11,190 Polo tanto, este é un dos "non fagas iso" oficialmente. 340 00:20:11,190 --> 00:20:14,660 Se ten rede propia casa e quere xogar, por todos os medios, 341 00:20:14,660 --> 00:20:17,530 pero enténdese que fai cruzar a liña nun ambiente universitario. 342 00:20:17,530 --> 00:20:20,030 >> Pero o obxectivo aquí é realmente para enfatizar non como facelo 343 00:20:20,030 --> 00:20:22,320 pero como se defender contra eses tipos de cousas. 344 00:20:22,320 --> 00:20:26,180 E a solución trivial aquí, aínda que en si é fallo, 345 00:20:26,180 --> 00:20:31,360 é realmente reducir o uso de calquera sitios que non están usando HTTPS constantemente. 346 00:20:31,360 --> 00:20:34,520 Así, sitios como Facebook e Google teñen cada vez máis caixas 347 00:20:34,520 --> 00:20:36,200 onde podes optar por este tipo de cousas, 348 00:20:36,200 --> 00:20:40,000 e os bancos tiveron que desde hai anos por razóns semellantes. 349 00:20:40,000 --> 00:20:43,580 Entón, un pouco de un factor de medo, se pudermos. Pero é iso en poucas palabras. 350 00:20:43,580 --> 00:20:46,420 É así que un servidor se lembra de quen é vostede. 351 00:20:46,420 --> 00:20:50,760 E así que poden lembrar quen é vostede, poden lembrar de nada sobre ti 352 00:20:50,760 --> 00:20:56,140 que o programador teña almacenado dentro deste superglobal especial chamada $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 E para pset sete estamos usando iso trivialmente só para lembrar un int, 354 00:20:59,750 --> 00:21:02,260 ou sexa, o ID único do usuario que fixo sesión, 355 00:21:02,260 --> 00:21:05,880 de xeito que sabemos que estiveron alí antes. 356 00:21:05,880 --> 00:21:12,450 Algunha preguntas, entón en sesións ou cookies ou similares? 357 00:21:12,450 --> 00:21:15,130 Firesheep non funciona tan ben máis, 358 00:21:15,130 --> 00:21:18,310 e ten que poñer o ordenador en un modo especial promiscuo 359 00:21:18,310 --> 00:21:20,700 entón está realmente escoitando para o tráfico ademais de si mesmos. 360 00:21:20,700 --> 00:21:23,940 Entón se está actualmente descarga Firesheep, entende que non é tan fácil 361 00:21:23,940 --> 00:21:26,850 como era antes de demostrar. 362 00:21:26,850 --> 00:21:29,070 Todo ben. E non facelo Sanders. Facelo na casa. 363 00:21:29,070 --> 00:21:30,890 Bases de datos. 364 00:21:30,890 --> 00:21:33,580 Unha das cousas que fixo o 7 pset moi deliberadamente 365 00:21:33,580 --> 00:21:37,780 foi nós dámoslle unha táboa de base de datos de mostra para os usuarios que ten algúns IDs de usuario, 366 00:21:37,780 --> 00:21:41,020 algúns nomes de usuario e contrasinais cifradas algúns nel contidas. 367 00:21:41,020 --> 00:21:44,520 E como podes ver, se non ten, vai ter que cambiar a táboa un pouco. 368 00:21:44,520 --> 00:21:47,710 Vai ter que engadir un pouco de memoria para cada un dos usuarios desta táboa, 369 00:21:47,710 --> 00:21:51,130 e vai ter que engadir outra táboa de histórico, unha mesa de carteiras, 370 00:21:51,130 --> 00:21:53,310 ou quizais chamar-lle outra cousa. 371 00:21:53,310 --> 00:21:56,740 Pero en termos de pensar en como facelo, imos abrir esta ferramenta 372 00:21:56,740 --> 00:22:00,570 o que foi usado o venres, pero non coñece, o aparello ven con unha ferramenta 373 00:22:00,570 --> 00:22:04,680 chamada phpMyAdmin, que é casualmente escrito en PHP, 374 00:22:04,680 --> 00:22:07,950 pero o seu propósito na vida, despois de eu entrar aquí como jharvard de carmesim, 375 00:22:07,950 --> 00:22:15,160 é dar-me unha maneira agradable de ver e cambiar o meu banco de datos. 376 00:22:15,160 --> 00:22:18,040 >> A base de datos que eu estou correndo no aparello chámase MySQL 377 00:22:18,040 --> 00:22:23,420 Isto é moi popular, e é unha base de datos de código aberto libre que é marabillosas fácil de usar, 378 00:22:23,420 --> 00:22:25,620 especialmente con front-ends como este. 379 00:22:25,620 --> 00:22:29,350 O que esta ferramenta permite que faga, por exemplo, é cotovelada en torno a mesas. 380 00:22:29,350 --> 00:22:30,890 Deixe-me ir adiante e facelo. 381 00:22:30,890 --> 00:22:36,580 O venres, creamos unha táboa chamada alumnos que foi super sinxelo. 382 00:22:36,580 --> 00:22:41,680 Tiña tres columnas - Id, nome, correo electrónico - e inseridos man un par de liñas 383 00:22:41,680 --> 00:22:44,420 como David e Mike neste exemplo en particular. 384 00:22:44,420 --> 00:22:47,290 Imos levar isto un pouco máis, e imos supor que queremos lembrar máis 385 00:22:47,290 --> 00:22:49,660 que só o nome e correo-e sobre un usuario. 386 00:22:49,660 --> 00:22:53,090 Deixe-me prema aquí Estrutura arriba. 387 00:22:53,090 --> 00:22:55,440 E, de novo, o pset percorre as medidas necesarias aquí, 388 00:22:55,440 --> 00:22:58,150 non te preocupes algúns iso é un pouco rápido. 389 00:22:58,150 --> 00:22:59,690 Entón eu vou para premer aquí. 390 00:22:59,690 --> 00:23:02,270 Eu estou indo para engadir un número de columnas despois e-mail 391 00:23:02,270 --> 00:23:04,130 porque quero engadir algo como casa. 392 00:23:04,130 --> 00:23:06,640 Esquecín de rexistrar a casa dun alumno. 393 00:23:06,640 --> 00:23:11,400 Deixe-me prema en ir, e agora temos esta forma que, por desgraza, é un pouco longo de esquerda a dereita, 394 00:23:11,400 --> 00:23:13,710 pero eu vou chamar o nome desta casa de campo, 395 00:23:13,710 --> 00:23:16,050 e entón o tipo que agora teño que escoller. 396 00:23:16,050 --> 00:23:18,870 Polo tanto, imos ter unha breve conversa sobre os distintos tipos en MySQL 397 00:23:18,870 --> 00:23:24,590 porque mentres o PHP é feblemente tipado e que tipo de xoga rápido e solto cos tipos, 398 00:23:24,590 --> 00:23:29,430 nunha base de datos especial que é super importante para realmente usar dixitación para a súa vantaxe 399 00:23:29,430 --> 00:23:33,260 porque unha das cousas MySQL e outros bancos de datos pode facer por ti 400 00:23:33,260 --> 00:23:37,910 é garantir que non poñer datos falsos na súa base de datos. 401 00:23:37,910 --> 00:23:41,850 Este é o tipo de erro corrente libre dispoñible para ti. 402 00:23:41,850 --> 00:23:46,250 >> Para a casa que, obviamente, non quero que sexa un int, que é un valor de 32 bits en MySQL 403 00:23:46,250 --> 00:23:49,810 Fixemos falar brevemente o venres sobre varchar, que significa lonxitude variable char. 404 00:23:49,810 --> 00:23:54,720 ¿Que é iso? Isto permite que especifique que quere que isto sexa unha secuencia de calquera tipo. 405 00:23:54,720 --> 00:23:56,840 Realmente non sabe de antemán o tempo que desexa, 406 00:23:56,840 --> 00:24:00,100 entón imos arbitrariamente dicir un nome de casa pode ser de 255 caracteres, 407 00:24:00,100 --> 00:24:04,190 pero pode ir con 32, 64 - calquera número realmente. 408 00:24:04,190 --> 00:24:10,700 Pero a vantaxe de usar un varchar sobre un campo chamado char é o que? 409 00:24:10,700 --> 00:24:15,110 Só intuitivamente se eu rolar por aquí, entender que hai char e hai varchar. 410 00:24:15,110 --> 00:24:19,520 Varchar é de lonxitude variable char; char é unha lonxitude fixa char. 411 00:24:19,520 --> 00:24:24,730 Así, con base só no que definición, cal é a vantaxe ou desvantaxe de cada unha delas? 412 00:24:24,730 --> 00:24:30,490 Noutras palabras, que se preocupa coa distinción, ou por que lle importa? 413 00:24:31,660 --> 00:24:35,750 >> Si [Alumno] Varchar ten máis flexibilidade, pero ocupa máis memoria. 414 00:24:35,750 --> 00:24:40,730 Bo Varchar ocupa máis - Imos ver. Eu non estou seguro se eu oíse ese dereito. 415 00:24:40,730 --> 00:24:42,360 Pode dicir que unha vez máis? 416 00:24:42,360 --> 00:24:45,850 [Alumno] dixo varchar, probablemente, ten máis flexibilidade, pero é preciso máis memoria. 417 00:24:45,850 --> 00:24:51,170 Interesante. Okay. Varchar probablemente lle dá máis flexibilidade, pero ocupa máis memoria. 418 00:24:51,170 --> 00:24:53,220 O último non é necesariamente verdade. 419 00:24:53,220 --> 00:24:56,290 El depende do contexto, pero imos volver a iso. 420 00:24:56,290 --> 00:25:03,230 >> [Resposta do alumno inaudível] Exactamente. 421 00:25:03,230 --> 00:25:06,900 É realmente o caso que char vai utilizar máis memoria 422 00:25:06,900 --> 00:25:10,950 porque un char, como en C, é como unha corda, que é unha matriz de caracteres. 423 00:25:10,950 --> 00:25:13,690 Entón, se di que un campo char de tamaño 255, 424 00:25:13,690 --> 00:25:16,910 a base de datos é, literalmente, vai dar-lle 255 caracteres. 425 00:25:16,910 --> 00:25:22,290 E se a casa acaba sendo personaxes Mather e 6 total, 426 00:25:22,290 --> 00:25:25,090 está perdendo máis de 200 caracteres. 427 00:25:25,090 --> 00:25:29,640 >> Así, un varchar efectivamente utiliza só cantos caracteres é necesario 428 00:25:29,640 --> 00:25:31,590 ata un importe máximo. 429 00:25:31,590 --> 00:25:35,470 Pero o prezo que paga é realmente rendemento, potencialmente. 430 00:25:35,470 --> 00:25:39,740 Se sabe de antemán que todas as cordas van ser 8 caracteres - 431 00:25:39,740 --> 00:25:43,090 Por exemplo, supoñamos que requiren claves de lonxitude 8 - 432 00:25:43,090 --> 00:25:47,350 A vantaxe de usar un campo char na ocasión, aínda que moitas veces non, 433 00:25:47,350 --> 00:25:51,100 é especificar unha lonxitude fixa para algo así como un contrasinal 434 00:25:51,100 --> 00:25:53,300 porque agora a base de datos pode ser aínda máis intelixente. 435 00:25:53,300 --> 00:25:58,160 Se sabe que todos os campos char, cada corda nunha columna é a mesma lonxitude, 436 00:25:58,160 --> 00:26:00,780 recibe de volta o recurso de acceso aleatorio. 437 00:26:00,780 --> 00:26:05,110 Pode saltar entre os distintos campos de char na súa táboa de base de datos 438 00:26:05,110 --> 00:26:07,940 porque pensar dun banco de datos como liñas e columnas. 439 00:26:07,940 --> 00:26:11,670 Entón, cada unha das cadeas é a mesma lonxitude, 440 00:26:11,670 --> 00:26:17,820 vostede sabe que o primeiro é o byte 0, a próxima é a de 8 bytes 441 00:26:17,820 --> 00:26:20,240 e, a continuación, 16 e, a continuación, 24 e así por diante. 442 00:26:20,240 --> 00:26:24,500 Entón, se todas as cordas son da mesma lonxitude, pode saltar moito máis eficiente. 443 00:26:24,500 --> 00:26:26,710 De xeito que pode ser unha vantaxe en termos de rendemento, 444 00:26:26,710 --> 00:26:29,420 pero normalmente non ten o luxo de saber con antelación, 445 00:26:29,420 --> 00:26:32,170 así un varchar é o camiño a percorrer. 446 00:26:32,170 --> 00:26:36,030 Aquí está outro detalle que mesmo Facebook foi para finalmente. 447 00:26:36,030 --> 00:26:39,670 Ints son grandes, e que tipo de usalos por defecto cada vez que precisa de un número, 448 00:26:39,670 --> 00:26:41,750 pero é só 32 bits. 449 00:26:41,750 --> 00:26:46,210 >> E aínda que Facebook non pode ter 4 millóns de usuarios, agora, 450 00:26:46,210 --> 00:26:48,680 hai sempre algunhas persoas alí fóra con varias contas 451 00:26:48,680 --> 00:26:50,960 ou contas que foron abertas e, a continuación, pechado, 452 00:26:50,960 --> 00:26:55,130 e así o propio Facebook Creo uns anos tiña a transición int 453 00:26:55,130 --> 00:27:00,010 para, como é apropiadamente chamado bigint, que queda só a 64 bits en vez. 454 00:27:00,010 --> 00:27:02,230 Polo tanto, esta tamén é unha decisión de deseño. 455 00:27:02,230 --> 00:27:06,570 Vostede sería incrible sorte seu proxecto final transfórmase inicio, 456 00:27:06,570 --> 00:27:10,010 ten 4 millóns e un usuarios, máis ou menos, 457 00:27:10,010 --> 00:27:13,200 caso en que ints pode ser un pouco miope. 458 00:27:13,200 --> 00:27:16,230 Pero, en realidade, a súa táboa de usuarios pode ser ben con ints. 459 00:27:16,230 --> 00:27:19,340 Pero para algo así como 7 pset, como a súa táboa de histórico, 460 00:27:19,340 --> 00:27:23,700 pode ter miles, millóns de usuarios se evolucionar para etrade.com. 461 00:27:23,700 --> 00:27:26,020 Así, mentres non pode ter máis de 4 millóns de usuarios, 462 00:27:26,020 --> 00:27:30,070 aqueles usuarios que ten pode ter máis de 4 millóns de transaccións ao longo do tempo - 463 00:27:30,070 --> 00:27:33,200 compra e vende e as cousas na súa historia. 464 00:27:33,200 --> 00:27:38,090 Entón, se fai anticipar - de novo, estes son bos problemas para ter se ten esta cantidade de datos - 465 00:27:38,090 --> 00:27:40,920 se anticipar datos que exceden o tamaño dun int, 466 00:27:40,920 --> 00:27:47,740 indo con algo bigint é unha dirección, non con frecuencia suficiente adoptado por deseñadores 467 00:27:47,740 --> 00:27:49,710 porque a xente figura que non vai ser un problema, 468 00:27:49,710 --> 00:27:51,930 pero é tan fácil de escoller algo maior que iso. 469 00:27:51,930 --> 00:27:55,380 Decimal que estamos usando o pset 7, que especifica precisión fixa 470 00:27:55,380 --> 00:27:59,840 así pode evitar as cuestións que envolven coches alegóricos e de dobres e reais e similares. 471 00:27:59,840 --> 00:28:02,440 >> E despois hai outros campos aquí. Imos axitar as mans para eles de algunha maneira. 472 00:28:02,440 --> 00:28:07,270 Pero as datas, horarios todos teñen un formato prescrito no MySQL 473 00:28:07,270 --> 00:28:10,830 ea vantaxe de almacenar datas como datas e non VARCHARs 474 00:28:10,830 --> 00:28:15,730 significa que a base de datos pode, en realidade, reflexa-los en diferentes formatos, 475 00:28:15,730 --> 00:28:18,800 un formato EUA ou formato europeo ou similar - con todo, quere que - 476 00:28:18,800 --> 00:28:22,700 moito máis eficiente do que se fose só algúns varchar xenérico. 477 00:28:22,700 --> 00:28:25,150 E despois hai algúns outros binarios, varbinary, blobs. 478 00:28:25,150 --> 00:28:28,580 Estes son obxectos binarios grandes, e tamén pode almacenar datos binarios 479 00:28:28,580 --> 00:28:30,750 así como os datos xeométricos dun banco de datos. 480 00:28:30,750 --> 00:28:34,350 Pero para nós, imos normalmente se preocupan ints e VARCHAR e similares. 481 00:28:34,350 --> 00:28:36,230 Imos rematar este exemplo coa casa. 482 00:28:36,230 --> 00:28:40,030 Casa eu vou dicir poderá ser arbitrariamente 255 caracteres. 483 00:28:40,030 --> 00:28:42,850 Entón o valor por defecto que podería facelo. 484 00:28:42,850 --> 00:28:47,440 Poderiamos, por defecto poñer todos Mather House, por exemplo. 485 00:28:47,440 --> 00:28:49,710 É así que pode especificar que a base de datos 486 00:28:49,710 --> 00:28:52,460 velarán por que alguén ten sempre un valor. Pero vou deixar que sexa. 487 00:28:52,460 --> 00:28:55,270 En realidade, para as persoas que viven fóra do campus e non nunha casa, 488 00:28:55,270 --> 00:28:59,590 quizais realmente quero especificar que o valor estándar para casa é NULL, 489 00:28:59,590 --> 00:29:04,890 e entón eu teño comprobar esta caixa e dicir a base de datos que está todo ben a casa do usuario é NULL. 490 00:29:04,890 --> 00:29:07,270 >> Unha vez máis, este é outro mecanismo de defensa que pode pór en práctica 491 00:29:07,270 --> 00:29:10,590 así que non precisa nin de poñelo no seu código PHP necesariamente. 492 00:29:10,590 --> 00:29:14,630 A base de datos pode garantir que as cousas son ou non son NULL. 493 00:29:14,630 --> 00:29:17,310 E entón, finalmente, atributos. 494 00:29:17,310 --> 00:29:18,920 Ningún destes son realmente relevantes. 495 00:29:18,920 --> 00:29:22,880 Binario, non asinado - ningún deles son relevantes para un varchar. 496 00:29:22,880 --> 00:29:24,220 Índice. 497 00:29:24,220 --> 00:29:27,320 Alguén sabe ou recorda ou ten un palpite sobre o que é un índice 498 00:29:27,320 --> 00:29:29,510 para algo como casa? 499 00:29:29,510 --> 00:29:35,240 Isto tamén é, en realidade, unha decisión de proxecto importante e relativamente doado. 500 00:29:35,240 --> 00:29:39,200 Para quen aínda non viu, o venres que falou brevemente sobre claves primarias. 501 00:29:39,200 --> 00:29:43,240 Nunha táboa de base de datos, unha chave primaria é o campo ou columna 502 00:29:43,240 --> 00:29:46,270 que identifica exclusivamente as liñas da táboa. 503 00:29:46,270 --> 00:29:49,150 Así, no marco actual temos IDs, temos nomes e correos electrónicos. 504 00:29:49,150 --> 00:29:52,050 Cal destes é o mellor candidato para ser unha chave primaria, 505 00:29:52,050 --> 00:29:55,810 cuxo papel é identificar liñas? 506 00:29:55,810 --> 00:29:57,530 Probablemente ID. 507 00:29:57,530 --> 00:29:59,930 Indiscutibelmente, nós tamén podemos empregar o que? 508 00:29:59,930 --> 00:30:02,860 Talvez podes usar o correo electrónico, porque, en teoría, é único 509 00:30:02,860 --> 00:30:05,380 a menos que as persoas están compartindo as contas de correo electrónico. 510 00:30:05,380 --> 00:30:09,980 Pero a realidade é que, se vostede está a usar unha identificación numérica como 1234, 511 00:30:09,980 --> 00:30:14,170 iso é só 32 bits, mentres que un enderezo de correo-e pode ser esta moitos máis ou esta moitos máis. 512 00:30:14,170 --> 00:30:16,610 Polo tanto, en termos de eficiencia de identificadores únicos, 513 00:30:16,610 --> 00:30:19,270 el tende a ser unha boa práctica só para usar un int 514 00:30:19,270 --> 00:30:23,090 mesmo se ten algún candidato cadea que sen dúbida podería usar. 515 00:30:23,090 --> 00:30:26,760 >> Para algo como casa, iso non debe ser unha chave primaria 516 00:30:26,760 --> 00:30:30,770 porque, entón, só unha persoa podería vivir en Mather e 1 persoa en Currier e similares. 517 00:30:30,770 --> 00:30:32,790 Do mesmo xeito, iso non debe ser único. 518 00:30:32,790 --> 00:30:37,830 A diferenza entre a primeira e única é que, no caso de que a mesa de corrente, 519 00:30:37,830 --> 00:30:42,620 ID sería primario, pero correo-e non é primaria para a razón que acabamos de mencionar - 520 00:30:42,620 --> 00:30:44,740 rendemento - pero aínda debe ser único. 521 00:30:44,740 --> 00:30:47,200 Entón, tamén se pode impoñer exclusividade sen ter a pretensión 522 00:30:47,200 --> 00:30:49,520 que é un importante campo de super primaria. 523 00:30:49,520 --> 00:30:52,610 Pero este é moi útil: Index. 524 00:30:52,610 --> 00:30:56,180 Se sabe de antemán para o seu proxecto final para pset 7, ou, en xeral, 525 00:30:56,180 --> 00:30:59,480 que esta casa de campo vai ser algo que busca nun lote 526 00:30:59,480 --> 00:31:01,910 usar a palabra clave de verificación ou algo máis, 527 00:31:01,910 --> 00:31:05,180 entón podes dicir anticipadamente a base de datos para traballar a súa maxia 528 00:31:05,180 --> 00:31:10,510 e asegúrese de que el cría na memoria calquera estruturas de datos de fantasía necesario 529 00:31:10,510 --> 00:31:13,770 para acelerar investigacións en base a casa. 530 00:31:13,770 --> 00:31:17,860 Quizais el vai usar unha táboa hash, quizais el vai usar unha lista ligada. 531 00:31:17,860 --> 00:31:21,260 En realidade, el tende a usar unha árbore, moitas veces chamado dunha estrutura de árbore B - 532 00:31:21,260 --> 00:31:24,090 non unha árbore binaria, mais unha árbore B - que é unha árbore moi grande 533 00:31:24,090 --> 00:31:27,370 que se pode ver nunha clase como CS124, os datos da clase estruturas. 534 00:31:27,370 --> 00:31:31,800 Pero, en resumo, non ten que se preocupar con iso ao usar o software de base de datos intelixente. 535 00:31:31,800 --> 00:31:35,890 Pode só dicir que, "Índice de este campo para que eu poida investigar sobre el de forma máis eficiente." 536 00:31:35,890 --> 00:31:40,250 >> Se deixar este fóra e tentar buscar a todos na base de datos que vive Mather, 537 00:31:40,250 --> 00:31:42,710 vai transformarse en busca lineal. 538 00:31:42,710 --> 00:31:45,360 E se ten 6.000 graduandos todos vivindo en algunha casa, 539 00:31:45,360 --> 00:31:47,900 vai buscar toda a táboa para atopar os Matherites, 540 00:31:47,900 --> 00:31:52,190 mentres que, se di Index, espero que sexa algo próximo a unha busca logarítmica 541 00:31:52,190 --> 00:31:54,510 para atopar eses tipos de alumnos. 542 00:31:54,510 --> 00:31:56,750 Este é só un recurso gratuíto para conectar, 543 00:31:56,750 --> 00:31:59,530 mesmo que vén a un prezo de unha certa cantidade de espazo. 544 00:31:59,530 --> 00:32:02,690 Por último, auto-incremento, este campo AI, 545 00:32:02,690 --> 00:32:05,830 o que significa só se é un int e non quere preocuparse para incrementar vostede mesmo 546 00:32:05,830 --> 00:32:07,570 cada vez que hai un novo usuario, asegúrese de que, 547 00:32:07,570 --> 00:32:11,910 e cada usuario que se insire automaticamente recibirá un novo ID. 548 00:32:11,910 --> 00:32:15,620 Imos facer clic en Gardar, e agora imos atopar o fallo con este proxecto. 549 00:32:15,620 --> 00:32:20,200 Se eu entrar en Buscar, aviso de que Mike e miña casa é NULL. 550 00:32:20,200 --> 00:32:22,420 Podo usar o phpMyAdmin para editar manualmente. 551 00:32:22,420 --> 00:32:25,110 Eu podo ir aquí e escriba Mather e prema a tecla Intro, 552 00:32:25,110 --> 00:32:27,740 e agora observar o cadro é diferente. 553 00:32:27,740 --> 00:32:29,270 Pero repare que eu podería facer outra cousa tamén. 554 00:32:29,270 --> 00:32:33,530 ID de David é un, entón phpMyAdmin novo é só unha ferramenta administrativa; 555 00:32:33,530 --> 00:32:35,970 iso non é algo que os usuarios están indo cada vez para ver. 556 00:32:35,970 --> 00:32:38,810 Entón, se eu, no canto clica na guía SQL enriba - 557 00:32:38,810 --> 00:32:41,450 e, de novo, pset 7 ha presenta-lo para unha desas consultas - 558 00:32:41,450 --> 00:32:45,260 Eu podo executar manualmente o comando da linguaxe SQL Structured Query 559 00:32:45,260 --> 00:32:56,410 Update users SET casa = 'Pfoho' Where id = 1. 560 00:32:56,410 --> 00:33:00,830 Estas consultas SQL son, ben o suficiente, bastante lexible de esquerda a dereita. 561 00:33:00,830 --> 00:33:04,350 Actualizar a táboa de usuarios, axuste o campo chamado casa para Pfoho 562 00:33:04,350 --> 00:33:06,830 onde ID do usuario é 1. 563 00:33:06,830 --> 00:33:11,480 Ou eu podería incluso facer, onde e-mail = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 Mentres que identifica comigo, que ía funcionar tan ben. 565 00:33:14,860 --> 00:33:18,810 Pero ID tende a ser maior rendemento, entón imos facelo. 566 00:33:18,810 --> 00:33:22,950 Imos prema en Ir Ok, lecture.users non existe. Cal é o meu erro? 567 00:33:22,950 --> 00:33:26,220 Cal é a táboa verdade chamado aquí? 568 00:33:26,220 --> 00:33:28,770 É chamado de alumnos só porque é o que nós fixemos aquí na esquina superior esquerda. 569 00:33:28,770 --> 00:33:31,860 É chamado de estudantes, e non usuarios. Entón prema en Ir agora. 570 00:33:31,860 --> 00:33:34,330 Unha liña afectada. Consulta levou 0,01 segundos. 571 00:33:34,330 --> 00:33:38,010 Se fai clic en Buscar agora, agora vive en Pfoho Malan. 572 00:33:38,010 --> 00:33:42,070 Entón, iso é outro sabor de SQL, pero o pset ha oriente-lo a través de un pouco máis do que iso. 573 00:33:42,070 --> 00:33:44,710 >> Hai unha decisión estúpida que eu xa fixen aquí. 574 00:33:44,710 --> 00:33:47,820 Eu diría que este proxecto de base de datos é ineficiente 575 00:33:47,820 --> 00:33:51,650 porque canto máis persoas eu engadir á táboa alumnos, 576 00:33:51,650 --> 00:33:54,730 máis de nós comezar a engadir, o máis das TFS comezar a engadir, 577 00:33:54,730 --> 00:33:58,320 imos comezar a ver o que Despedimentos na táboa? 578 00:34:00,840 --> 00:34:06,020 >> Si [Alumno] Vendo que está en estudantes, estamos usando o mesmo [inaudível] 579 00:34:06,020 --> 00:34:07,360 O mesmo - Dereito, exactamente. 580 00:34:07,360 --> 00:34:10,400 Entón, se 400 persoas viven en Mather, máis ou menos, 581 00:34:10,400 --> 00:34:15,000 finalmente esta táboa terá 400 liñas que din "Mather", "Mather," 582 00:34:15,000 --> 00:34:16,590 "Mather," "Mather," "Mather." 583 00:34:16,590 --> 00:34:19,820 Estamos perdendo todos estes bytes, e hai un par de takeaways alí. 584 00:34:19,820 --> 00:34:23,080 1, hai o caso de canto tolo onde se alguén paga unha morea de cartos 585 00:34:23,080 --> 00:34:25,949 e renomeia Mather, agora temos que cambiar a nosa táboa de base de datos enteiro. 586 00:34:25,949 --> 00:34:29,730 Iso non vai acontecer frecuentemente, aínda Pfoho xa foi chamado de Casa do Norte hai 15 anos, 587 00:34:29,730 --> 00:34:32,310 así acontece. Pero iso non é todo o que convincente. 588 00:34:32,310 --> 00:34:36,000 Máis convincente que un caso como o de canto a necesidade de actualizar os datos en masa 589 00:34:36,000 --> 00:34:41,150 para unha base de datos é por que está almacenando Mather novo e de novo e de novo e de novo? 590 00:34:41,150 --> 00:34:43,020 Isto é un monte de caracteres, 6 caracteres. 591 00:34:43,020 --> 00:34:45,500 Non podemos facer aínda mellor do que iso, especialmente para Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Certamente que podemos facer mellor do que moitos personaxes. 593 00:34:48,320 --> 00:34:51,790 Porque non basta asociar un identificador único, con cada casa 594 00:34:51,790 --> 00:34:55,020 e tenda que para cada usuario? Entón, imos tentar iso. 595 00:34:55,020 --> 00:35:00,610 En vez de só usar a táboa alumnos, deixe-me ir para o meu banco de datos charla aquí na esquina superior esquerda. 596 00:35:00,610 --> 00:35:02,600 Nótese aquí que di Crear táboa. 597 00:35:02,600 --> 00:35:04,550 Deixe-me facer unha táboa chamada casas. 598 00:35:04,550 --> 00:35:08,880 O número de columnas que vai ser 2. Intro. 599 00:35:08,880 --> 00:35:11,200 Agora eu teño dous campos. 600 00:35:11,200 --> 00:35:14,600 Vou chamar este nome, e que vai ser un varchar de lonxitude 255, 601 00:35:14,600 --> 00:35:18,770 >> pero que é bastante arbitraria. Deixe-me poñer isto aquí por convención. 602 00:35:18,770 --> 00:35:22,840 Entón engada unha identificación aquí. Imos dar a cada casa un identificador único. 603 00:35:22,840 --> 00:35:25,360 Imos dar a cada casa un nome. 604 00:35:25,360 --> 00:35:30,980 Imos especificar que o identificador será asinado só por convención usar só números positivos. 605 00:35:30,980 --> 00:35:35,020 Imos adiante e dar a este un campo de auto incremento por agora. 606 00:35:35,020 --> 00:35:38,160 E necesitamos algo máis? 607 00:35:38,160 --> 00:35:41,010 Imos adiante e faga clic en Gardar. 608 00:35:41,010 --> 00:35:42,480 Agora eu teño unha segunda táboa. 609 00:35:42,480 --> 00:35:45,860 Observe como un aparte, este é o pouco enigmática comando SQL 610 00:35:45,860 --> 00:35:50,280 que tería que escribir manualmente se non está a usar unha ferramenta administrativa como phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 Polo tanto, outra razón que usalo. 612 00:35:51,990 --> 00:35:55,480 É unha especie de marabillosas útil pedagoxicamente, porque pode facer clic en torno a 613 00:35:55,480 --> 00:36:01,050 e descubrir como as cousas funcionan por só copiando e colando o phpMyAdmin fixo. 614 00:36:01,050 --> 00:36:04,150 Pero o mando Crear táboa é o que foi só executado, e aquí é a miña mesa. 615 00:36:04,150 --> 00:36:11,370 Deixe-me ir adiante agora e utilizar o SQL prima en vez de simplificar, premendo na pestana Inserir. 616 00:36:11,370 --> 00:36:15,040 Deixe-me facer INSERT INTO casas, 617 00:36:15,040 --> 00:36:22,230 e eu vou dicir o nome da casa vai ter un valor de 'Mather'. 618 00:36:22,230 --> 00:36:24,790 É iso aí. Esta sintaxe é un pouco máis enigmática. 619 00:36:24,790 --> 00:36:26,660 Este é o nome dos campos que desexa inserir. 620 00:36:26,660 --> 00:36:30,390 Estes son os valores que queremos inserir eses campos. Deixe-me prema en Ir 621 00:36:30,390 --> 00:36:34,410 Unha liña inserida cada 0,02 segundos. Deixe-me faga clic en Buscar agora. 622 00:36:34,410 --> 00:36:42,020 >> Observe se eu faga clic en Buscar hai Mather, cuxa identificación é pola automatización do número 1. 623 00:36:42,020 --> 00:36:45,000 Deixe-me facer outro. Deixe-me ir a guía SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO casas. O nome da casa vai ter un valor de Pfoho e así por diante. 625 00:36:52,950 --> 00:36:56,350 Ir E podo seguir facendo iso de novo e de novo e de novo. 626 00:36:56,350 --> 00:36:59,470 Ou se estar aburrido usando o phpMyAdmin, pode só usar a guía Inserir 627 00:36:59,470 --> 00:37:01,000 e non ter que escribir o SQL prima. 628 00:37:01,000 --> 00:37:04,690 Pode só bater-lo máis axiña, escribindo, por exemplo, Currier, intro 629 00:37:04,690 --> 00:37:07,610 e agora, se premer en Buscar hai Currier cun ID de 3. 630 00:37:07,610 --> 00:37:09,920 Entón é iso que queremos dicir con auto-incremento. 631 00:37:09,920 --> 00:37:12,280 Pero agora temos que corrixir algo nos estudantes. 632 00:37:12,280 --> 00:37:16,240 Na alumnos que deben ao tipo de datos do campo casa agora? 633 00:37:16,240 --> 00:37:19,450 Debe ser un int, non? 634 00:37:19,450 --> 00:37:23,950 Así, o obxectivo aquí é o de fatorar, tamén coñecido como normalizar as táboas 635 00:37:23,950 --> 00:37:27,940 de xeito que non almacenar información de forma redundante en calquera dos meus cadros. 636 00:37:27,940 --> 00:37:31,130 E, de novo, o camiño que estabamos aquí vai dicir Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, que é moi redundante 638 00:37:34,220 --> 00:37:36,240 en termos de perda de caracteres. 639 00:37:36,240 --> 00:37:40,820 Entón deixe-me ir adiante e cambiar isto premendo Estrutura, 640 00:37:40,820 --> 00:37:44,620 e deixe-me ir adiante e marcar o campo casa, faga clic en Cambiar 641 00:37:44,620 --> 00:37:46,990 e agora eu vou cambiar isto sexa un int. 642 00:37:46,990 --> 00:37:49,490 255 non é máis relevante. 643 00:37:49,490 --> 00:37:54,010 Deixe-me ir adiante e dicir que está todo ben, aínda é NULL. Gardar. 644 00:37:54,010 --> 00:37:55,870 Agora os estudantes táboa foi modificada con éxito, 645 00:37:55,870 --> 00:37:59,090 e observe novo fogar é un int. 646 00:37:59,090 --> 00:38:02,220 Como un aparte, ignorar o número entre parénteses cando se trata de ints. 647 00:38:02,220 --> 00:38:03,770 >> Isto é por razóns de legado. 648 00:38:03,770 --> 00:38:06,920 Volver o día en que non ten GUI, en vez diso tiña un ambiente de liña de comandos, 649 00:38:06,920 --> 00:38:11,580 os 10 e 11 respectivamente especificados cantos caracteres debe amosar 650 00:38:11,580 --> 00:38:13,950 na fiestra de terminal para realmente mostrar campos. 651 00:38:13,950 --> 00:38:19,150 Non ten nada que ver coa lonxitude de bits do campo real, por iso imos ignorar que, por agora. 652 00:38:19,150 --> 00:38:20,990 Agora eu teño que ir a esta mesa. 653 00:38:20,990 --> 00:38:24,610 E se David vive en Mather, casa non debe ser 0, 654 00:38:24,610 --> 00:38:27,350 que é un valor máis próximo ao estándar int NULL. 655 00:38:27,350 --> 00:38:29,810 Debe morar na casa dun. 656 00:38:29,810 --> 00:38:36,870 Imos dicir arbitrariamente que vive Mike Pfoho, a casa de número 2. 657 00:38:36,870 --> 00:38:40,160 Agora miña mesa parece un pouco máis enigmática. 658 00:38:40,160 --> 00:38:41,960 Pero considere a eficiencia. 659 00:38:41,960 --> 00:38:44,860 Agora estou usando só 32 bits para identificar a casa, 660 00:38:44,860 --> 00:38:49,530 o que significa que hai só unha definición canónica da miña casa Mather e Pfoho 661 00:38:49,530 --> 00:38:52,090 e que está na mesa de vivendas. 662 00:38:52,090 --> 00:38:55,880 Entón, se eu queira voltar agora esas táboas, pensar deste xeito. 663 00:38:55,880 --> 00:39:01,980 Aquí eu teño a miña mesa os alumnos, e no lado dereito hai estes números, 1 e 2. 664 00:39:01,980 --> 00:39:04,180 1 é Mather, 2 e Pfoho. 665 00:39:04,180 --> 00:39:08,580 Temos os mesmos números nesta táboa outro, o que se denomina de vivendas, 666 00:39:08,580 --> 00:39:11,020 1 e 2 e 3 para as tres casas. 667 00:39:11,020 --> 00:39:14,990 O que queremos agora facer é ter a capacidade de código, PHP e SQL, 668 00:39:14,990 --> 00:39:18,800 a sorte de xuntarse estas táboas, onde se estes son os estudantes e estes son as casas, 669 00:39:18,800 --> 00:39:22,050 queremos dalgunha forma combina-los de xeito que unha liña con 1, 670 00:39:22,050 --> 00:39:25,670 2 liñas con 2, e para que poidamos descubrir onde David 671 00:39:25,670 --> 00:39:28,000 e onde Mike e onde toda a xente vive. 672 00:39:28,000 --> 00:39:31,850 Para facer isto, podemos realizar unha consulta SQL como o seguinte. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM alumnos RexistrarseFacebook casas ON - 674 00:39:40,470 --> 00:39:43,000 E agora que os campos que queremos participar? 675 00:39:43,000 --> 00:39:49,520 Entón students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> Un pouco enigmático, pero esta parte significa, literalmente, crear unha nova táboa temporal 677 00:39:54,150 --> 00:39:56,690 que é o resultado da unión de estudantes e casas. 678 00:39:56,690 --> 00:40:00,340 E como quere combinar as puntas dos meus dedos aquí? 679 00:40:00,340 --> 00:40:05,280 SET 'campo casa igual ás casas "os alumnos campo ID. 680 00:40:05,280 --> 00:40:10,220 E se eu agora prema en ir, eu volver exactamente o que eu esperaba. 681 00:40:10,220 --> 00:40:15,890 David está en Mather, Mike está na Pfoho, e tamén ver os identificadores únicos. 682 00:40:15,890 --> 00:40:18,640 Pero o punto é agora eu teño unha táboa completa. 683 00:40:18,640 --> 00:40:23,020 E así o takeaway aquí para pset 7 ou realmente para o proxecto final: 684 00:40:23,020 --> 00:40:25,830 Se cre que está almacenando calquera peza de información redundante, 685 00:40:25,830 --> 00:40:28,850 se é unha casa, quizais sexa unha cidade, provincia e código postal 686 00:40:28,850 --> 00:40:32,050 onde ZIP pode, normalmente, pero non sempre ser usado como un identificador único, 687 00:40:32,050 --> 00:40:35,810 non facer o exercicio mental e, despois, con algo así como phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 de factoring que os datos comúns, porque, especialmente como o seu sitio está máis ben utilizado 689 00:40:40,660 --> 00:40:45,440 e máis popular, é así que asegurarse de que todo é super rápido, 690 00:40:45,440 --> 00:40:51,930 dando á base de datos como moitas suxestións como a singularidade posible. 691 00:40:51,930 --> 00:40:53,860 Isto foi moito. 692 00:40:53,860 --> 00:40:59,010 Algunha pregunta? Todo ben. Imos dar un intervalo de 5 minutos alí e reagrupar. 693 00:41:01,600 --> 00:41:03,540 Todo ben. 694 00:41:03,540 --> 00:41:08,680 A continuación, un exemplo foi empregado hai uns anos cando tirei CS161, 695 00:41:08,680 --> 00:41:10,960 que é a clase operativo sistemas na facultade 696 00:41:10,960 --> 00:41:15,160 que é coñecido por ser incrible, pero unha cantidade tola de traballo, 697 00:41:15,160 --> 00:41:19,810 e concéntrase realmente en algúns dos problemas de baixo nivel que xorden nos sistemas operativos 698 00:41:19,810 --> 00:41:22,700 e tamén ata no mundo dos bancos de datos. 699 00:41:22,700 --> 00:41:27,040 >> A historia que foi contada polo meu profesor, Margo Seltzer, este ano foi como segue. 700 00:41:27,040 --> 00:41:30,990 Supoña que vostede ten unha neveira dormitorio para vostede eo seu compañeiro de cuarto 701 00:41:30,990 --> 00:41:34,030 e tanto que realmente lle gusta de leite. 702 00:41:34,030 --> 00:41:36,360 Entón chega na casa do día de clase un, o seu compañeiro de cuarto non está aí, 703 00:41:36,360 --> 00:41:39,650 abre a neveira, e entender, "Oh droga, estamos fóra de leite." 704 00:41:39,650 --> 00:41:42,070 Entón pechar a neveira, se atravesar a rúa para CVS 705 00:41:42,070 --> 00:41:45,830 e poñerse en liñas cada vez máis longas para mercar leite en CVS. 706 00:41:45,830 --> 00:41:48,470 Mentres tanto, o seu compañeiro de cuarto chega na casa da súa clase, 707 00:41:48,470 --> 00:41:51,690 entra no cuarto, abre a neveira realmente queren un pouco de leite, 708 00:41:51,690 --> 00:41:54,130 abre a neveira e "Droga, non de leite." 709 00:41:54,130 --> 00:41:57,890 Entón, el ou ela pecha a neveira, sae pola porta, e vai para ABP 710 00:41:57,890 --> 00:42:00,910 ou noutro lugar que CVS onde non vai chocar uns con outros 711 00:42:00,910 --> 00:42:02,790 para ir buscar un pouco de leite. 712 00:42:02,790 --> 00:42:04,820 Está claro que uns minutos máis tarde, tanto de voltar a casa 713 00:42:04,820 --> 00:42:07,740 e agora ten leite dúas veces tanto como realmente quería. 714 00:42:07,740 --> 00:42:10,670 E, sendo o leite, agora vai ir mal, porque lle gusta de leite 715 00:42:10,670 --> 00:42:14,200 pero realmente non me gusta de leite, entón agora tes moito leite, por iso vai aceda. 716 00:42:14,200 --> 00:42:16,830 Esta é unha situación terrible, terrible. 717 00:42:16,830 --> 00:42:22,920 O que podería ter resolto esta situación se fose o compañeiro de cuarto casa primeiro? Si 718 00:42:22,920 --> 00:42:25,970 [Estudante] Debe deixar unha nota. [Risas] 719 00:42:25,970 --> 00:42:28,090 Bo Debería deixar unha nota. 720 00:42:28,090 --> 00:42:32,320 Debería colocar unha nota de post-it ou o mesmo que dicir, "Gone para o leite", 721 00:42:32,320 --> 00:42:36,830 e, a continuación, o seu compañeiro de cuarto conceptualmente sería pechado para fóra de realmente facer iso. 722 00:42:36,830 --> 00:42:38,010 Ou podería ir un paso máis aló. 723 00:42:38,010 --> 00:42:41,060 Pode literalmente, bloquear o frigorífico con algún tipo de cadeado, 724 00:42:41,060 --> 00:42:44,870 e agora o seu compañeiro de cuarto vai ser literalmente protexida para fóra da neveira. 725 00:42:44,870 --> 00:42:48,520 Se generalizarmos volta á programación, 726 00:42:48,520 --> 00:42:51,610 case pode pensar no frigorífico como algún tipo de variable ou unha estrutura, 727 00:42:51,610 --> 00:42:53,500 algún tipo de recipiente para información. 728 00:42:53,500 --> 00:42:58,290 O problema fundamental aquí é que ambos foron autorizados a inspeccionar 729 00:42:58,290 --> 00:43:02,370 ou ler o estado desta estrutura de datos, 730 00:43:02,370 --> 00:43:08,050 pero viu en momentos diferentes e aínda así tanto tomou unha decisión 731 00:43:08,050 --> 00:43:11,920 con base no estado do mundo naqueles momentos diferentes no tempo. 732 00:43:11,920 --> 00:43:15,570 Entón, se tivese pechado a neveira, que tería polo menos evitar o seu compañeiro de cuarto 733 00:43:15,570 --> 00:43:19,070 de ser capaz de inspeccionar o estado do mundo, 734 00:43:19,070 --> 00:43:22,530 para que el ou ela non podería tomar esta decisión mesmo. 735 00:43:22,530 --> 00:43:25,780 Así, bancos de datos, como se ve, ten ese problema constantemente. 736 00:43:25,780 --> 00:43:31,050 >> Imos ver se podemos construír un escenario. 737 00:43:31,050 --> 00:43:34,310 Supoña que vostede é unha especie de vila e vai para o Bank of America 738 00:43:34,310 --> 00:43:37,950 ou un dos outros lugares na praza que ten unha parella ATMs lado a lado, 739 00:43:37,950 --> 00:43:41,200 e dalgunha forma se descubriu como duplicar unha tarxeta Multibanco - non tan difícil así. 740 00:43:41,200 --> 00:43:42,730 É só unha cinta magnética. 741 00:43:42,730 --> 00:43:45,180 E entón o que quere tentar facer é xogar este xogo 742 00:43:45,180 --> 00:43:49,060 polo cal se pon unha tarxeta nunha máquina, outro cartón noutra máquina, 743 00:43:49,060 --> 00:43:51,980 e, esencialmente, quere tentar retirar o diñeiro ao mesmo tempo, 744 00:43:51,980 --> 00:43:54,930 porque imaxinar que a historia é o seguinte. 745 00:43:54,930 --> 00:43:57,350 A máquina da esquerda leva a súa tarxeta e contrasinal, 746 00:43:57,350 --> 00:44:00,240 e entón di: "Deixa-me 100 dólares." 747 00:44:00,240 --> 00:44:04,790 A ATM está programa para primeiro facer un select no seu banco de datos ou equivalente - 748 00:44:04,790 --> 00:44:10,780 calquera base de datos que está a usar - a ver se este usuario ten polo menos US $ 100 na súa conta? 749 00:44:10,780 --> 00:44:16,180 Se si, entón cuspir o $ 100 e restar R $ 100 a partir do seu equilibrio. 750 00:44:16,180 --> 00:44:20,470 Pero está claro que, se hai varias máquinas aquí ou múltiples formas de inspeccionar 751 00:44:20,470 --> 00:44:23,560 o estado do mundo, o cofre do banco, a ver canto diñeiro ten, 752 00:44:23,560 --> 00:44:26,780 supoñer que só por casualidade a máquina á esquerda e á dereita 753 00:44:26,780 --> 00:44:30,140 tanto esta pregunta en aproximadamente no mesmo momento no tempo. 754 00:44:30,140 --> 00:44:34,160 >> E isto pode certamente pasar. As caixas electrónicos son ordenadores estes días. 755 00:44:34,160 --> 00:44:37,670 Entón, se a máquina da esquerda di: "Si, ten polo menos US $ 100", 756 00:44:37,670 --> 00:44:42,150 Mentres tanto, a máquina á dereita di: "Si, ten polo menos US $ 100", 757 00:44:42,150 --> 00:44:47,420 entón ambos avanzar para completar os seus programas e realmente cuspir os 100 dólares 758 00:44:47,420 --> 00:44:50,820 e dicir: "Antes tiña US $ 200." 759 00:44:50,820 --> 00:44:54,890 "Deixe-me actualizar a variable a ser agora 100 dólares deixados na conta." 760 00:44:54,890 --> 00:44:58,780 Pero ambos teñen comprobado o seu saldo de conta e descubrir que é 200 dólares 761 00:44:58,780 --> 00:45:02,000 e os dous a continuación, facer as contas e din que 200 - 100, 762 00:45:02,000 --> 00:45:06,990 as máquinas potencialmente cuspir dúas notas de $ 100 en cada máquina, 763 00:45:06,990 --> 00:45:11,360 pero só actualizou o seu saldo de conta suma é R $ 100. 764 00:45:11,360 --> 00:45:15,130 Noutras palabras, tomou a US $ 200, pero porque inspeccionaron o estado do mundo 765 00:45:15,130 --> 00:45:18,840 simultaneamente e, a continuación, tomou a decisión en base nese valor, 766 00:45:18,840 --> 00:45:21,930 eles non poden facer as matemáticas, en última análise correctamente. 767 00:45:21,930 --> 00:45:25,520 Polo tanto, nunha situación de base tamén realmente quere ter algún tipo de bloqueo 768 00:45:25,520 --> 00:45:28,450 de xeito que, logo que comprobar o estado dalgunha variable 769 00:45:28,450 --> 00:45:31,220 que é realmente importante, como saldo da súa conta, 770 00:45:31,220 --> 00:45:36,070 non deixe ninguén tomar decisións baseadas no que ata está disposto a facer a súa cousa, 771 00:45:36,070 --> 00:45:38,920 onde, neste caso, é o ATM do lado esquerdo. 772 00:45:38,920 --> 00:45:41,160 Bloquear todos os outros fóra. 773 00:45:41,160 --> 00:45:44,650 Pode realmente acadar ese efecto en un par de formas diferentes. 774 00:45:44,650 --> 00:45:48,660 >> O xeito máis sinxelo no MySQL é unha liña de SQL que lle deu 775 00:45:48,660 --> 00:45:52,030 na especificación do conxunto de problemas que se parece exactamente como este. 776 00:45:52,030 --> 00:45:57,420 Inserir na táboa - o que é chamado - un id, un símbolo, e por acción, un número de accións, 777 00:45:57,420 --> 00:45:59,660 os valores que se seguen, por exemplo. 778 00:45:59,660 --> 00:46:03,370 Se aínda non leu a especificación aínda, este é un exemplo que implica como vai facer sobre 779 00:46:03,370 --> 00:46:07,340 comprar 10 accións desta tostón stock para Presidente Skroob, 780 00:46:07,340 --> 00:46:10,340 cuxa identificación do usuario pasa a ser o número 7? 781 00:46:10,340 --> 00:46:14,070 Isto di INSERT INTO táboa id seguinte, símbolo e número de accións 782 00:46:14,070 --> 00:46:18,200 7, 'DVN.V', e 10. 783 00:46:18,200 --> 00:46:21,510 Pero - pero, pero, pero - a segunda liña é a máis importante. 784 00:46:21,510 --> 00:46:26,310 ON duplicados partes da actualización clave = partes + valores (accións). 785 00:46:26,310 --> 00:46:28,350 Entón, totalmente enigmático aspecto a primeira vista. 786 00:46:28,350 --> 00:46:31,990 Pero o feito de que esta consulta SQL, aínda que rompe en dúas liñas, 787 00:46:31,990 --> 00:46:35,920 É unha consulta longa, isto significa que é atómica 788 00:46:35,920 --> 00:46:41,000 no sentido en que esta consulta pode ser executado en conxunto ou non en todos. 789 00:46:41,000 --> 00:46:45,100 E, por definición do MySQL, que é como eles aplicaron esta consulta. 790 00:46:45,100 --> 00:46:51,010 El é, por definición, o manual garantir a executar todos dunha vez ou de xeito ningún. 791 00:46:51,010 --> 00:46:54,020 A motivación para iso é a seguinte. 792 00:46:54,020 --> 00:46:58,540 Neste caso está intentando comprar 10 accións do, 793 00:46:58,540 --> 00:47:02,260 é unha especie da mesma historia como o leite, é unha especie da mesma historia como o ATM. 794 00:47:02,260 --> 00:47:04,970 >> Se non fai o erro de empregar esta sintaxe 795 00:47:04,970 --> 00:47:09,610 pero a selección da base de datos para ver cantas accións desta tostón stock 796 00:47:09,610 --> 00:47:13,750 que o Presidente Skroob ten, e creo que ten 10 accións, 797 00:47:13,750 --> 00:47:19,330 e entón algúns fracción de segundo máis tarde faga unha declaración Update, 798 00:47:19,330 --> 00:47:24,810 que é outra declaración en SQL que se vai adiante e engadir 10 máis accións 799 00:47:24,810 --> 00:47:28,700 á súa 10 actual de xeito que, idealmente, o total de 20, 800 00:47:28,700 --> 00:47:33,490 o problema é que os actuais sistemas de base de datos e porque nos ordenadores de hoxe 801 00:47:33,490 --> 00:47:35,990 ten múltiples procesadores, núcleos múltiples - 802 00:47:35,990 --> 00:47:38,920 noutras palabras, os computadores poden ser literalmente facendo varias cousas ao mesmo tempo - 803 00:47:38,920 --> 00:47:44,270 non hai ningunha garantía de que o seu SELECT e Update no seu caso 804 00:47:44,270 --> 00:47:46,150 van ocorrer de costas. 805 00:47:46,150 --> 00:47:49,140 Así, un escenario malo sería facer o SELECT 806 00:47:49,140 --> 00:47:51,670 para ver cantas accións desta tostón stock non Skroob ten, 807 00:47:51,670 --> 00:47:54,710 e despois é só por casualidade outra consulta de base de datos é executado - 808 00:47:54,710 --> 00:47:57,740 quizais o seu Skroob noutra xanela do navegador tentando mercar 10 partes 809 00:47:57,740 --> 00:48:00,700 noutra ventá completamente, moi parecida coa ATM - 810 00:48:00,700 --> 00:48:05,410 e supor que outra consulta queda entre SELECT e Update. 811 00:48:05,410 --> 00:48:10,210 Podería ser o caso de que Skroob agora perde un pouco número de accións 812 00:48:10,210 --> 00:48:14,340 porque outro proceso está a inspeccionar o estado do seu mundo, 813 00:48:14,340 --> 00:48:17,800 ou que está máis accións que debe ter. 814 00:48:17,800 --> 00:48:23,250 Non vou entrar en detalles de exactamente o que esas liñas historia particular sería, 815 00:48:23,250 --> 00:48:28,380 pero o punto é, se ten que comprobar o valor de variábeis e entón tomar unha decisión, 816 00:48:28,380 --> 00:48:32,500 se hai un risco de alguén facer algo entre estes dous testemuños, 817 00:48:32,500 --> 00:48:36,220 como pode ocorrer en sistemas multiprocessados, en sistemas multicore, 818 00:48:36,220 --> 00:48:41,220 ordenadores con capacidade de facer varias cousas ao mesmo tempo, cousas malas poden ocorrer 819 00:48:41,220 --> 00:48:44,530 contas bancarias como debitado incorrectamente, a compra de leite dúas veces máis, 820 00:48:44,530 --> 00:48:46,730 ou, neste caso, o número incorrecto de accións. 821 00:48:46,730 --> 00:48:48,370 Pero hai unha maneira máis fácil pensar sobre iso. 822 00:48:48,370 --> 00:48:53,290 >> Acontece que tamén soporta SQL, se configurar a súa táboa correctamente, 823 00:48:53,290 --> 00:48:56,920 algo chamado transaccións, o que eu diría é realmente aínda máis doado de entender 824 00:48:56,920 --> 00:49:00,650 do que iso, pero non é un 1-liner, polo que é realmente un pouco máis implicado. 825 00:49:00,650 --> 00:49:04,960 Hai, literalmente, unha declaración en SQL chamado START Transaction. 826 00:49:04,960 --> 00:49:08,300 Así como hai SELECT, UPDATE, INSERT, DELETE e JOIN e unha morea de outros, 827 00:49:08,300 --> 00:49:10,970 hai palabras clave como START Transaction. 828 00:49:10,970 --> 00:49:13,560 E o que fai no contexto pset 7 - 829 00:49:13,560 --> 00:49:17,270 non ten que facer iso para pset 7, que é explicitamente negada como non é necesario, 830 00:49:17,270 --> 00:49:18,830 pero para proxectos finais pode ser útil - 831 00:49:18,830 --> 00:49:22,820 se chamar unha consulta de START Transaction e despois outra consulta 832 00:49:22,820 --> 00:49:25,620 e, a continuación, consulta outro e despois outro, outro, e outro, 833 00:49:25,620 --> 00:49:31,860 esas consultas non vai realmente ser executado ata que chamar a instrución SQL COMMIT, 834 00:49:31,860 --> 00:49:37,220 en que punto se é dúas declaracións ou 20 testemuños, todos eles van ser executados dunha soa vez, 835 00:49:37,220 --> 00:49:42,770 o que significa que ninguén pode accidentalmente mercar moito leite ou débito moito diñeiro 836 00:49:42,770 --> 00:49:46,340 ou comprar accións moitas porque todas as súas dúbidas executará 837 00:49:46,340 --> 00:49:48,410 de costas cara atrás, cara atrás. 838 00:49:48,410 --> 00:49:51,580 E iso é super importante, especialmente cando está facendo algo así. 839 00:49:51,580 --> 00:49:54,900 Este é un exemplo arbitrario que se imos actualizar a conta bancaria 840 00:49:54,900 --> 00:50:00,200 establecendo un equilibrio igual a equilibrio - $ 1000, onde o número de conta é 2. 841 00:50:00,200 --> 00:50:04,260 E entón a segunda instrución é agora imos depositar que $ 1000 842 00:50:04,260 --> 00:50:07,310 en alguén da conta bancaria cuxa conta número 1. 843 00:50:07,310 --> 00:50:10,400 >> Noutras palabras, este é un exemplo perfecto de onde quere estar seguro 844 00:50:10,400 --> 00:50:13,590 que ambas as afirmacións ocorrer ou non en todos 845 00:50:13,590 --> 00:50:15,450 porque se non o cliente vai ferrar 846 00:50:15,450 --> 00:50:17,670 e vai ter o seu diñeiro e non depositala lo noutro lugar, 847 00:50:17,670 --> 00:50:20,470 ou o banco vai ferrar, onde vai depositar o diñeiro 848 00:50:20,470 --> 00:50:23,140 pero en realidade non subtrai-lo da súa conta de usuario. 849 00:50:23,140 --> 00:50:25,810 Entón quere os dous xuntos para realizar. 850 00:50:25,810 --> 00:50:29,140 Así entra nas transaccións mundiais. 851 00:50:29,140 --> 00:50:31,360 Entón, iso é algo para manter na parte de atrás da súa mente, 852 00:50:31,360 --> 00:50:34,710 non tanto para fins de só un proxecto final, 853 00:50:34,710 --> 00:50:36,700 pero se quere ter o seu proxecto final en algún lugar, 854 00:50:36,700 --> 00:50:39,040 Se desexa iniciar algunha empresa en torno a el, 855 00:50:39,040 --> 00:50:41,270 se quere resolver problema algún grupo de estudantes no campus 856 00:50:41,270 --> 00:50:45,210 e realmente ten un sitio web, en directo activa, ese é o tipo de erros sutís que poden xurdir 857 00:50:45,210 --> 00:50:49,480 Se vostede non pode pensar no que pode pasar dúas persoas 858 00:50:49,480 --> 00:50:54,190 está intentando acceder o seu sitio en, literalmente, no mesmo momento no tempo, 859 00:50:54,190 --> 00:50:56,890 en que as súas consultas poderían entrelázanse. 860 00:50:58,840 --> 00:51:01,420 >> Preparado para un pouco de JavaScript, un teaser do mesmo? 861 00:51:01,420 --> 00:51:04,320 Este é o noso último idioma para o semestre. Todo ben. 862 00:51:04,320 --> 00:51:09,940 Afortunadamente, JavaScript parece moi, moi, moi semellante ás dúas linguas, C e PHP, 863 00:51:09,940 --> 00:51:11,140 que fixemos ata agora. 864 00:51:11,140 --> 00:51:14,340 Non hai Javascript no pset 7, pero é unha ferramenta incrible útil 865 00:51:14,340 --> 00:51:18,840 cando se trata de facer proxectos na web finais ou realmente só programación web en xeral. 866 00:51:18,840 --> 00:51:20,950 Así, unha visión rápida de algo chamado don. 867 00:51:20,950 --> 00:51:23,600 Aquí é unha páxina web super simples que realmente só di Ola mundo, 868 00:51:23,600 --> 00:51:25,970 tanto no título e no corpo. 869 00:51:25,970 --> 00:51:29,270 A medida que a sangría ten suxerido por algún tempo, 870 00:51:29,270 --> 00:51:31,380 existe realmente unha xerarquía para as páxinas web. 871 00:51:31,380 --> 00:51:34,220 Eu podería deseñar ese fragmento mesmo HTML como unha árbore, 872 00:51:34,220 --> 00:51:37,470 pensar de volta para as nosas discusións de estruturas de datos en C, como segue. 873 00:51:37,470 --> 00:51:40,710 Eu teño algún nodo raíz especial chamado nodo documento, 874 00:51:40,710 --> 00:51:43,650 e imos ver o análogo desta en JavaScript en só un momento. 875 00:51:43,650 --> 00:51:48,330 O primeiro fillo e fillo único de que neste caso é a etiqueta HTML. 876 00:51:48,330 --> 00:51:49,880 Non hai mapeamento directo do doctype. 877 00:51:49,880 --> 00:51:53,170 Iso é unha cousa especial, de xeito que temos que simplemente ignore-la cando se trata deste don, 878 00:51:53,170 --> 00:51:55,810 Este documento árbore obxecto Model. 879 00:51:55,810 --> 00:51:59,530 Teña en conta que a etiqueta HTML, que arbitrariamente representado como un rectángulo, 880 00:51:59,530 --> 00:52:02,890 ten 2 fillos: cabeza e corpo. 881 00:52:02,890 --> 00:52:04,840 >> Aqueles son igualmente deseñado como rectángulos. 882 00:52:04,840 --> 00:52:08,970 É significativo que a cabeza é pictoricamente á esquerda do corpo. 883 00:52:08,970 --> 00:52:11,960 A implicación é que a cabeza está en primeiro lugar na árbore. 884 00:52:11,960 --> 00:52:14,910 Polo tanto, non hai, en realidade, unha ordenación dunha árbore cando deseña-lo como este, 885 00:52:14,910 --> 00:52:17,460 aínda que as formas e whatnot son arbitrarias. 886 00:52:17,460 --> 00:52:20,360 Xefe mentres ten un fillo único chamado título, 887 00:52:20,360 --> 00:52:25,170 título, en realidade, ten o seu propio fillo, que é "Ola, mundo", 888 00:52:25,170 --> 00:52:32,210 que eu deliberadamente atraeu como un oval aquí para facelo un pouco diferente do rectángulo. 889 00:52:32,210 --> 00:52:37,420 Estes rectángulos son elementos, mentres Ola, mundo é realmente un nó de texto. 890 00:52:37,420 --> 00:52:39,850 Polo tanto, é un nó na árbore, pero é un tipo de nodo 891 00:52:39,850 --> 00:52:41,730 Entón eu deseño iso arbitrariamente diferente. 892 00:52:41,730 --> 00:52:45,000 Do mesmo xeito que o corpo ten un fillo chamado Ola mundo, así como, 893 00:52:45,000 --> 00:52:47,910 nó de xeito diferente, aínda que eles están casualmente o mesmo texto, 894 00:52:47,910 --> 00:52:52,100 pero eu deseño-lo usando a mesma forma. Entón, quen se importa? 895 00:52:52,100 --> 00:52:56,820 Ben, o que é agradable HTML é que ten esta natureza xerárquica. 896 00:52:56,820 --> 00:53:01,010 E o que é agradable sobre Javascript e particularmente bibliotecas que están dispoñibles gratuitamente 897 00:53:01,010 --> 00:53:07,120 e populares como jQuery, pode navegar pola estrutura de árbore de forma sorprendente fácil. 898 00:53:07,120 --> 00:53:11,790 Calquera das cousas que fixemos en C con punteiros e árbores de desprazamento e recursing en nós 899 00:53:11,790 --> 00:53:15,300 neno entregado o neno dereita, de súpeto, podemos clasificar de concedido 900 00:53:15,300 --> 00:53:19,450 como incrible esclarecedor se non un pouco frustrante 901 00:53:19,450 --> 00:53:22,470 pero non case un xeito eficiente de percorrer preto de programación. 902 00:53:22,470 --> 00:53:24,470 E así, con estas linguaxes de alto nivel como JavaScript 903 00:53:24,470 --> 00:53:28,340 nós imos ser capaces de ir esta árbore máis intuitiva. 904 00:53:28,340 --> 00:53:30,430 >> E de feito a sintaxe vai ser bastante familiar. 905 00:53:30,430 --> 00:53:32,950 Se nunca viu JavaScript antes, esta é unha referencia moi boa 906 00:53:32,950 --> 00:53:35,910 do persoal de Mozilla, as persoas que fan o Firefox, 907 00:53:35,910 --> 00:53:38,370 así me sinto libre para buscar que a súa conveniencia. 908 00:53:38,370 --> 00:53:41,590 O que vai atopar - e eses diapositivas son idénticos aos que usan o outro día - 909 00:53:41,590 --> 00:53:44,030 Similarmente, principal está desaparecido. 910 00:53:44,030 --> 00:53:47,010 Entón, cando escribir un programa en JavaScript, non hai ningunha función principal. 911 00:53:47,010 --> 00:53:48,690 Vostede acaba de comezar a escribir código. 912 00:53:48,690 --> 00:53:51,660 Pero unha distinción fundamental entre Javascript e C e PHP 913 00:53:51,660 --> 00:53:55,890 é que, mentres C e PHP, ata agora, ser executado no lado do servidor 914 00:53:55,890 --> 00:53:59,180 polo aparello, neste caso, ou máis xeralmente, por un servidor, 915 00:53:59,180 --> 00:54:04,270 JavaScript por proxecto é xeralmente executado por un navegador. 916 00:54:04,270 --> 00:54:08,440 Noutras palabras, pode escribir código JavaScript, como estamos a piques de, 917 00:54:08,440 --> 00:54:13,080 nun servidor no aparello, pero inclui-lo entre o seu HTML, entre o CSS, 918 00:54:13,080 --> 00:54:16,100 entre os seus GIFs e os seus PNGs e os seus JPEGs 919 00:54:16,100 --> 00:54:19,170 de modo que cando o usuario visita a páxina web, se está a usar JavaScript 920 00:54:19,170 --> 00:54:21,770 que o código JavaScript vén do servidor ao navegador 921 00:54:21,770 --> 00:54:24,540 e é o navegador que realmente executa. 922 00:54:24,540 --> 00:54:27,960 Entón, iso ten implicacións importantes para a propiedade intelectual, mesmo. 923 00:54:27,960 --> 00:54:32,600 É unha especie de parvo para pensar sobre como protexer o seu IP cando se trata de código JavaScript 924 00:54:32,600 --> 00:54:37,560 porque, por natureza da linguaxe que é executada normalmente lado do navegador. 925 00:54:37,560 --> 00:54:40,360 >> Pode ofuscar, o que significa que pode facelo parecer tolo e feo 926 00:54:40,360 --> 00:54:45,400 con ningún espazo en branco, horribles nomes de variables, para facer máis difícil para as persoas para roubar o seu IP, 927 00:54:45,400 --> 00:54:48,120 pero o fundamental é que é executado lado do navegador. 928 00:54:48,120 --> 00:54:51,790 Aínda que unha parte do servidor como de lado JavaScript pode ser usado, 929 00:54:51,790 --> 00:54:54,480 o caso de uso máis común agora aínda está no seu navegador. 930 00:54:54,480 --> 00:54:59,800 E aquí é o que parece. Aquí é un if-else if-else construír só como C, así como PHP. 931 00:54:59,800 --> 00:55:02,420 Aquí é unha expresión booleana cando "ou" 2 cousas xuntos. 932 00:55:02,420 --> 00:55:04,330 Aquí é cando "e" dúas cousas xuntas. 933 00:55:04,330 --> 00:55:08,300 Aquí está unha instrución switch, que é semellante ao PHP 934 00:55:08,300 --> 00:55:10,810 en que pode cambiar en distintos tipos de valores. 935 00:55:10,810 --> 00:55:15,180 Loops semellante ten loops aquí, que son estruturados de forma idéntica ao que xa vimos antes. 936 00:55:15,180 --> 00:55:18,110 Mentres lazos; temos facer mentres loops. 937 00:55:18,110 --> 00:55:20,290 Variables, sempre tan lixeiramente diferente. 938 00:55:20,290 --> 00:55:24,560 Vostede declarar variables, como fai en PHP e C, 939 00:55:24,560 --> 00:55:27,860 pero tamén é feblemente JavaScript ingresaran. 940 00:55:27,860 --> 00:55:32,730 Non especificar int ou float ou cadea ou algo así normalmente. 941 00:55:32,730 --> 00:55:34,240 Vostede pode especificar var. 942 00:55:34,240 --> 00:55:38,040 Non ten que especificar var, pero ten implicacións non o fai. 943 00:55:38,040 --> 00:55:42,000 Normalmente, se omitir var, accidentalmente crear unha variable global en vez do lugar. 944 00:55:42,000 --> 00:55:46,420 Entón deixe-me propor que case sempre só dicir var e entón o nome da variable. 945 00:55:46,420 --> 00:55:48,740 Non é un tipo, é só para a variable var. 946 00:55:48,740 --> 00:55:52,930 Este sería un exemplo, se é 123 ou "Ola mundo". 947 00:55:52,930 --> 00:55:58,910 Matrices están presentes e sintaticamente semellante ao PHP. 948 00:55:58,910 --> 00:56:03,690 Eu vou dicir números var e entón eu usar corchetes novo para declarar unha variable 949 00:56:03,690 --> 00:56:08,870 cuxo tipo é matriz que ten eses números específicos en que, separados por comas. 950 00:56:08,870 --> 00:56:11,740 E entón, finalmente, este é o único que realmente parece diferente. 951 00:56:11,740 --> 00:56:16,700 Lembre que en PHP que tería aplicado dunha matriz asociativa para un estudante 952 00:56:16,700 --> 00:56:20,220 como Zamyla que pode parecer como este, no que a variable é chamado de alumno. 953 00:56:20,220 --> 00:56:23,370 Os corchetes significan aquí vén unha matriz. 954 00:56:23,370 --> 00:56:28,500 >> O feito de que eu non estou usando índices numéricos pero cordas - id, casa, e nome - 955 00:56:28,500 --> 00:56:30,990 significa que esta é unha matriz asociativa, 956 00:56:30,990 --> 00:56:34,490 e esas frechas co signo igual eo soporte angular 957 00:56:34,490 --> 00:56:37,310 significa que a clave é "ID", o valor é 1; 958 00:56:37,310 --> 00:56:39,310 A clave é a "casa", o valor é Winthrop House; 959 00:56:39,310 --> 00:56:41,800 a clave é "nome", o valor é Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 Polo tanto, hai tres claves dentro desta matriz asociativa, cada cal ten o seu propio valor. 961 00:56:47,110 --> 00:56:52,880 Nós vimos que pset 7, ou en breve, en JavaScript mesma idea, 962 00:56:52,880 --> 00:56:55,220 pero iso vai quedar así. 963 00:56:55,220 --> 00:57:00,070 Estudante para var - sen sinal de dólar e ningunha mención de tipo aínda, pero var - 964 00:57:00,070 --> 00:57:05,860 iguais e abra claves porque JavaScript, cando ten pares de valores clave, 965 00:57:05,860 --> 00:57:08,900 realmente usa algo chamado un obxecto. 966 00:57:08,900 --> 00:57:13,490 E aqueles de vostedes que tardou APCS ou similar pode lembrar de obxectos Java 967 00:57:13,490 --> 00:57:15,140 ou linguas semellantes. 968 00:57:15,140 --> 00:57:17,880 JavaScript non é Java, en primeiro lugar. 969 00:57:17,880 --> 00:57:21,600 Foi unha decisión deliberada anos proxecto para derrubar outra cousa que era popular, 970 00:57:21,600 --> 00:57:25,640 o seu nome, aínda que non ten ningunha relación fundamental Java en si. 971 00:57:25,640 --> 00:57:31,490 JavaScript posúe obxectos, e crea-los a través da notación chaveta. 972 00:57:31,490 --> 00:57:36,710 Obxectos en JavaScript son practicamente equivalentes a arrays asociativos en PHP 973 00:57:36,710 --> 00:57:40,030 cando se trata de almacenamento de datos para dentro delas. 974 00:57:40,030 --> 00:57:44,100 >> Pero, aínda máis poderosa en JavaScript pode asociarse facilmente funcións 975 00:57:44,100 --> 00:57:48,040 dentro dun obxecto, e que pode facelo noutros idiomas, 976 00:57:48,040 --> 00:57:50,040 é ben un paradigma común, como imos ver. 977 00:57:50,040 --> 00:57:54,380 En suma, este obxecto representa un alumno, que é particularmente Zamyla, 978 00:57:54,380 --> 00:58:00,380 e é semellante conceptualmente, só sintaticamente diferente deste. 979 00:58:00,380 --> 00:58:03,840 Imos realmente usar JavaScript nun ficheiro. 980 00:58:03,840 --> 00:58:05,570 Acontece que hai unha etiqueta script. 981 00:58:05,570 --> 00:58:08,180 Vimos unha marca de estilo e vimos outras etiquetas HTML. 982 00:58:08,180 --> 00:58:11,510 A etiqueta script realmente contén algún código JavaScript. 983 00:58:11,510 --> 00:58:15,500 Deixe-me ir para dentro do aparello onde temos algún código pre-feita. 984 00:58:15,500 --> 00:58:18,700 Eu non teño posta aínda no sitio, pero eu vou facelo despois da aula. 985 00:58:18,700 --> 00:58:21,770 Imos abrir un agasallo, blink.html. 986 00:58:21,770 --> 00:58:27,560 Na década de 1990, houbo literalmente unha etiqueta HTML chamado tag palpebrar de ollos, 987 00:58:27,560 --> 00:58:30,340 e esta foi unha das marcas máis marabillosas demasia en internet 988 00:58:30,340 --> 00:58:36,140 polo cal visitar algúns década de 1990 páxina web estilo e comezar a ver texto piscando-así, 989 00:58:36,140 --> 00:58:39,810 os resultados da etiqueta marqués, que texto, indo así. 990 00:58:39,810 --> 00:58:45,070 Unha das poucas veces en que o mundo foi realmente estableceron un estándar web 991 00:58:45,070 --> 00:58:48,250 todos a través da tarxeta matou a etiqueta palpebrar hai uns anos. 992 00:58:48,250 --> 00:58:52,860 Pero podemos resucitalo lo JavaScript como unha demostración do poder que ten 993 00:58:52,860 --> 00:58:56,660 cando se pode escribir un programa dentro dunha páxina web. 994 00:58:56,660 --> 00:59:00,240 Primeiro imos saltar a cousas novas e concentrarse só na idade. 995 00:59:00,240 --> 00:59:01,780 >> Aquí está o material antigo neste exemplo. 996 00:59:01,780 --> 00:59:06,350 Eu teño unha etiqueta HTML, unha marca de cabeza, e un título de tag. 997 00:59:06,350 --> 00:59:11,210 Entón eu teño unha etiqueta corpo aquí cunha div, que recall é só unha división rectangular da páxina 998 00:59:11,210 --> 00:59:14,720 que teña dado unha única ID arbitrariamente da "saúdo" para, 999 00:59:14,720 --> 00:59:18,320 só así eu teño unha forma de exclusividade referíndose a el, que ten un texto moi sinxelo: 1000 00:59:18,320 --> 00:59:20,220 Ola, mundo. 1001 00:59:20,220 --> 00:59:23,940 Agora déixeme ir ata o cumio do ficheiro e ver o que hai de novo. 1002 00:59:23,940 --> 00:59:27,710 A primeira cousa que é top-se novo é a etiqueta de script, 1003 00:59:27,710 --> 00:59:31,280 e dentro do aviso de etiquetas script que eu teña declarado unha función. 1004 00:59:31,280 --> 00:59:34,610 Para declarar unha función JavaScript, bastante parecido ao PHP, 1005 00:59:34,610 --> 00:59:37,930 vostede literalmente escribir función, entón o nome da función, entre parénteses, 1006 00:59:37,930 --> 00:59:40,400 e quizais algúns argumentos tomar calquera. 1007 00:59:40,400 --> 00:59:43,510 Entón eu teño a miña chaveta como de costume, e agora temos un código un pouco novo, 1008 00:59:43,510 --> 00:59:45,230 pero imos ver o que iso significa. 1009 00:59:45,230 --> 00:59:48,670 Entón div var, isto significa só dar-me unha div chamada variable. 1010 00:59:48,670 --> 00:59:50,530 Eu podería telo chamado foo, pero eu quería que sexa chamado div 1011 00:59:50,530 --> 00:59:52,620 por razóns que quedará claro en un segundo. 1012 00:59:52,620 --> 00:59:57,480 A continuación, el se transforma en JavaScript - e este é o código JavaScript integrado na miña páxina web - 1013 00:59:57,480 --> 01:00:01,760 hai unha variable global especial do tipo chamado de documento. 1014 01:00:01,760 --> 01:00:04,780 JavaScript é na verdade unha linguaxe orientada a obxectos. 1015 01:00:04,780 --> 01:00:07,230 Non imos entrar en detalles en 50, como o que iso significa, 1016 01:00:07,230 --> 01:00:11,180 pero por agora saber que un obxecto é moi fermoso como unha estrutura. 1017 01:00:11,180 --> 01:00:14,740 Como vimos camiño de volta cando, nun dos máis antigos xogos de problema 1018 01:00:14,740 --> 01:00:17,150 onde imos poñer unha morea de información nunha estrutura, 1019 01:00:17,150 --> 01:00:21,330 Do mesmo xeito é documentar unha estrutura especial que vén co navegador, 1020 01:00:21,330 --> 01:00:24,810 ven con calquera páxina web. Non é algo que eu creei. 1021 01:00:24,810 --> 01:00:28,210 Dentro desta estrutura do documento, porén, ten non só datos 1022 01:00:28,210 --> 01:00:30,010 pero tamén ten funcións. 1023 01:00:30,010 --> 01:00:34,090 >> E en calquera momento que ten unha función dentro dunha estrutura dentro dun obxecto, 1024 01:00:34,090 --> 01:00:36,490 chámase método. Pero é a mesma cousa. 1025 01:00:36,490 --> 01:00:40,110 Un método é unha función que só acontece a estar dentro de outra cousa. 1026 01:00:40,110 --> 01:00:42,990 Entón iso significa que esta variable global especial chamado documento 1027 01:00:42,990 --> 01:00:47,690 ten unha función chamada getElementById que literalmente fai iso. 1028 01:00:47,690 --> 01:00:52,460 El vai te un elemento do Don, Document Object Model árbore, 1029 01:00:52,460 --> 01:00:55,520 cuxa identificación é nesta saúdo caso. 1030 01:00:55,520 --> 01:00:59,200 Noutras palabras, todo o tempo que pasamos en estruturas de datos entra en xogo aquí. 1031 01:00:59,200 --> 01:01:01,400 Esta imaxe dun don que tivemos un momento atrás, 1032 01:01:01,400 --> 01:01:06,100 aínda que a páxina é un pouco diferente, se eu tivese unha div na foto, 1033 01:01:06,100 --> 01:01:11,180 document.getElementById que volvería para min sería efectivamente un punteiro 1034 01:01:11,180 --> 01:01:15,440 para o rectángulo na árbore, unha referencia para o rectángulo na árbore. 1035 01:01:15,440 --> 01:01:18,410 Entón, iso é o que significa, en realidade, chamar a unha desas funcións. 1036 01:01:18,410 --> 01:01:21,960 Neste caso, unha vez é unha div. Non é un corpo ou un título. 1037 01:01:21,960 --> 01:01:26,480 Entón, imos ver o que eu faga con este div agora que eu teño iso dentro deste div variable chamada. 1038 01:01:26,480 --> 01:01:32,580 Acontece con JavaScript ten a capacidade de axustar o CSS da súa páxina dinamicamente. 1039 01:01:32,580 --> 01:01:39,060 Ata agora, todo o CSS que fixemos, aínda que limitado, é en atributos de estilo, 1040 01:01:39,060 --> 01:01:41,730 ou onde máis nos poñer CSS? 1041 01:01:42,730 --> 01:01:45,810 Eu medio mimada que un. Na etiqueta de estilo na parte superior do ficheiro. 1042 01:01:45,810 --> 01:01:49,180 Ou o terceiro lugar foi? 1043 01:01:50,710 --> 01:01:54,590 >> Un arquivo externo, algo. CSS. 1044 01:01:54,590 --> 01:01:56,730 Entón eses son os tres lugares que fixemos CSS, ata agora, 1045 01:01:56,730 --> 01:01:59,310 pero o problema é que xa codificado todo. 1046 01:01:59,310 --> 01:02:04,060 Decidiu que mergullou pset 7, decidimos antes de charla que o noso CSS sería. 1047 01:02:04,060 --> 01:02:07,380 Pero se quere cambiar o seu CSS, pode realmente facer iso 1048 01:02:07,380 --> 01:02:09,370 unha vez que ten unha linguaxe de programación real. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - linguaxes non. JavaScript é. 1050 01:02:13,910 --> 01:02:18,200 Así, verifícase que, logo que ten un deses rectángulos da árbore 1051 01:02:18,200 --> 01:02:23,050 chamado don, ten-se algúns datos dentro dela. 1052 01:02:23,050 --> 01:02:27,820 Así, o div que eu simplemente peguei a partir da árbore ten o que nós imos chamar unha propiedade no interior do mesmo 1053 01:02:27,820 --> 01:02:34,390 chamado estilo, e ten a propiedade de estilo en si unha propiedade chamada visibilidade. 1054 01:02:34,390 --> 01:02:37,330 Gustaríame saber iso só de ollar a un manual de usuario CSS. 1055 01:02:37,330 --> 01:02:41,160 Acontece que hai unha visibilidade propiedade CSS que fai o que di. 1056 01:02:41,160 --> 01:02:44,530 Fai algo visible ou non, visible ou non. 1057 01:02:44,530 --> 01:02:46,810 E como fai que é iso. 1058 01:02:46,810 --> 01:02:50,510 Estou pedindo programaticamente a visibilidade deste div está oculto, 1059 01:02:50,510 --> 01:02:53,390 o que eu cambiar a? Visible. 1060 01:02:53,390 --> 01:02:58,840 Outra cousa a visibilidade desta páxina non está oculto, loxicamente non facelo oculto. 1061 01:02:58,840 --> 01:03:04,070 Eu non teño idea por que é visible e oculto e non é visible e invisible. 1062 01:03:04,070 --> 01:03:06,000 Esta foi unha decisión mala concepción ao longo do camiño. 1063 01:03:06,000 --> 01:03:09,530 Pero eses son de feito opostos CSS: visíbeis e ocultas. 1064 01:03:09,530 --> 01:03:15,520 Todo iso fai que significa cambiar o CSS do meu arquivo e fóra, dentro e fóra 1065 01:03:15,520 --> 01:03:16,870 para que div particular. 1066 01:03:16,870 --> 01:03:20,630 Pero, de novo, esta é unha función chamada palpebrar de ollos. Cando é que a función de palpebrar chamado? 1067 01:03:20,630 --> 01:03:24,080 Acontece que hai outra fiestra especial variable global chamada, 1068 01:03:24,080 --> 01:03:28,220 similares en espíritu documento, pero que o documento se refire a súa páxina web, 1069 01:03:28,220 --> 01:03:31,700 como a árbore DOM, HTML que enviou o servidor, 1070 01:03:31,700 --> 01:03:35,250 fiestra se refire ao cromo en torno a el, a barra de enderezo, a barra de título, 1071 01:03:35,250 --> 01:03:37,880 e todo o material en torno a súa páxina web. 1072 01:03:37,880 --> 01:03:42,800 >> E verifícase que o obxecto da fiestra ten unha función especial dentro do que chamou de setInterval 1073 01:03:42,800 --> 01:03:44,360 que fai o que di. 1074 01:03:44,360 --> 01:03:48,600 El ha establecer un intervalo - neste caso cada 500 milisegundos - 1075 01:03:48,600 --> 01:03:52,270 e, dar un palpite, que é o que vai facer cada 500 milisegundos? 1076 01:03:52,270 --> 01:03:55,240 Vai para realizar esa función palpebrar. 1077 01:03:55,240 --> 01:03:58,560 E o que é bo aquí é que poderiamos ter feito isto en C aínda que nunca fixemos. 1078 01:03:58,560 --> 01:04:01,580 C ten algo chamado de punteiros de función onde podes pasar ao redor de funcións 1079 01:04:01,580 --> 01:04:03,140 como argumentos. 1080 01:04:03,140 --> 01:04:07,620 Do mesmo xeito en JavaScript pode pasar o nome dunha función a outra función. 1081 01:04:07,620 --> 01:04:10,630 E noten que eu estou facendo. Eu non estou facendo iso. 1082 01:04:10,630 --> 01:04:14,380 Se eu poñer parénteses despois do palpebrar, significa chamar a función de parpadeo. 1083 01:04:14,380 --> 01:04:17,430 Se eu omiti-los, iso significa que aquí é a función de palpebrar 1084 01:04:17,430 --> 01:04:21,330 para que setInterval pode chamalo cada 500 milisegundos. 1085 01:04:21,330 --> 01:04:28,200 Así, o resultado final, atroz que sexa, é que se eu entrar en localhost e ir blink.html, 1086 01:04:28,200 --> 01:04:32,120 Agora teño isto acontecer de novo e de novo. 1087 01:04:32,120 --> 01:04:34,950 E se realmente Inspect Element, imos ver se podemos ver iso. 1088 01:04:34,950 --> 01:04:38,550 Deixe-me Inspect Element, deixe-me rolar un pouco, 1089 01:04:38,550 --> 01:04:44,320 deixe-me escoller elementos máis aquí, e observe o interior DON do inspector de Chrome. 1090 01:04:44,320 --> 01:04:48,840 É literalmente cambiando e cara atrás cada 500 milisegundos. 1091 01:04:48,840 --> 01:04:55,660 Ou tamén para o noso amigo de Nate, 1092 01:04:55,660 --> 01:05:00,020 Se xa se preguntas como iso funciona idea, semellante cun intervalo 1093 01:05:00,020 --> 01:05:04,810 pero Nate está realmente facendo uso moi eficaz de cor, neste caso particular aquí. 1094 01:05:04,810 --> 01:05:07,350 Entón, o que máis podemos realmente facer isto? 1095 01:05:07,350 --> 01:05:09,990 Imos abrir un outro exemplo e tentar algo 1096 01:05:09,990 --> 01:05:12,940 iso é programaticamente aínda máis útil do que facer palpebrar cousas. 1097 01:05:12,940 --> 01:05:17,990 Deixe-me ir no noso directorio formas hoxe e ir form0. 1098 01:05:17,990 --> 01:05:20,820 Esta foi a forma máis fea posible que veña con, 1099 01:05:20,820 --> 01:05:23,290 e deixe-me amosar-lle o que parece nun navegador. 1100 01:05:23,290 --> 01:05:28,960 >> Deixe-me entrar en localhost / formas, e iso é form0. 1101 01:05:28,960 --> 01:05:33,400 Esta é unha forma desagradable de super HTML que ten algúns campos de correo electrónico, contrasinal, 1102 01:05:33,400 --> 01:05:37,190 contrasinal e, a continuación, unha caixa pequena de acordo con algúns termos e condicións. 1103 01:05:37,190 --> 01:05:41,350 O problema é se eu visitar esta forma e eu non quero darlle o meu enderezo de correo-e, 1104 01:05:41,350 --> 01:05:44,730 Eu non quero a aceptar os termos e condicións, quizais, poida prema en rexistrar 1105 01:05:44,730 --> 01:05:46,920 e deixa-me a través de calquera maneira. 1106 01:05:46,920 --> 01:05:50,800 Isto acontece se someter a un arquivo PHP chamado estúpido dump.php. 1107 01:05:50,800 --> 01:05:58,420 Todo o que fai é imprimir os contidos de $ _GET soamente con fins de diagnóstico. 1108 01:05:58,420 --> 01:06:01,580 Iso foi o que foi presentado polo usuario agora. 1109 01:06:01,580 --> 01:06:05,010 Pero supoña que realmente quere validar a submisión do form do usuario. 1110 01:06:05,010 --> 01:06:06,530 Deixe-me ir a versión 1. 1111 01:06:06,530 --> 01:06:11,420 Este é form1.html. Parece esteticamente tan malo, pero repare como é fantasía. 1112 01:06:11,420 --> 01:06:15,450 Se preme en Register sen cooperar, eu fico chamado. 1113 01:06:15,450 --> 01:06:17,320 "Debe proporcionar o seu enderezo de correo-e." 1114 01:06:17,320 --> 01:06:21,670 Todo ben. Entón deixe-me tentar iso. Entón malan@harvard.edu. Eu non teño un contrasinal. 1115 01:06:21,670 --> 01:06:25,100 Registre-se. "Debe proporcionar un contrasinal." Todo ben. 1116 01:06:25,100 --> 01:06:28,470 Entón eu vou ofrecer un contrasinal de carmesim. Registre-se. 1117 01:06:28,470 --> 01:06:32,300 "Os contrasinais non coinciden." Eu teño que escribir aquí agora carmesim. 1118 01:06:32,300 --> 01:06:35,710 Eu accidentalmente comprobado isto. Registre-se. 1119 01:06:35,710 --> 01:06:39,860 "Ten que aceptar os termos e condicións." Todo ben. Concordo alí. Registre-se. 1120 01:06:39,860 --> 01:06:43,700 E agora me mostra a saída de diagnóstico por alí. 1121 01:06:43,700 --> 01:06:45,630 >> Entón, o que pasou? 1122 01:06:45,630 --> 01:06:48,330 Tivemos esa capacidade de validar as submissões de formulario. 1123 01:06:48,330 --> 01:06:51,420 En realidade, se fixo mergullar en pset 7, hai unha función de desculparse 1124 01:06:51,420 --> 01:06:54,620 que o fai moi doado de berrar co usuario con unha mensaxe en pantalla. 1125 01:06:54,620 --> 01:06:57,580 Eu estou usando un mecanismo un pouco diferente, a función de alerta, 1126 01:06:57,580 --> 01:07:03,690 o que non é unha función que está encima sorriu unha vez que fai mensaxes de usuarios moi feas. 1127 01:07:03,690 --> 01:07:05,710 Pero imos ver o que eu estou facendo aquí. 1128 01:07:05,710 --> 01:07:09,620 Este é form1.html, e entender que eu teño algunha sintaxe moi familiar: 1129 01:07:09,620 --> 01:07:12,920 tag corpo, etiqueta formulario, atributo de acción, atributo método. 1130 01:07:12,920 --> 01:07:17,050 Pero teña en conta que eu dei a miña forma unha identificación única para o barrio. 1131 01:07:17,050 --> 01:07:19,190 Entón eu teño un campo de correo-e cuxo tipo é texto, 1132 01:07:19,190 --> 01:07:23,780 un campo de contrasinal, cuxo tipo é campo de confirmación de contrasinal, cuxo tipo é o contrasinal, 1133 01:07:23,780 --> 01:07:28,070 e, a continuación, unha caixa de verificación, cuxo nome é segundo por aquí, é tipo caixa de verificación. 1134 01:07:28,070 --> 01:07:30,380 E entón eu teño un botón de envío. 1135 01:07:30,380 --> 01:07:33,050 Pero repare no cume o que máis eu teño. 1136 01:07:33,050 --> 01:07:35,810 Primeiro de todo, hai outro uso da etiqueta script. 1137 01:07:35,810 --> 01:07:40,520 Se ten algún código JavaScript noutro arquivo, así como con CSS pode inclui-lo. 1138 01:07:40,520 --> 01:07:44,530 E fai iso con fonte do script, e despois entender que eu estou conectando aparentemente 1139 01:07:44,530 --> 01:07:50,349 para googleapis.com para un camiño moi longo, pero cuxo nome do ficheiro remata en jquery.min 1140 01:07:50,349 --> 01:07:52,420 para menos. js. 1141 01:07:52,420 --> 01:07:55,969 jQuery é unha biblioteca super popular para JavaScript que só fai JavaScript 1142 01:07:55,969 --> 01:07:58,230 todo o máis user-friendly para usar. 1143 01:07:58,230 --> 01:08:00,610 É efectivamente facer un estándar de feito. 1144 01:08:00,610 --> 01:08:04,090 Así, aínda que o que está a piques de ver non é puro JavaScript, por si só, 1145 01:08:04,090 --> 01:08:09,340 é unha biblioteca encima JavaScript moi parecido coa biblioteca CS50 é unha capa 1146 01:08:09,340 --> 01:08:13,670 enriba do código de baixo nivel C, a realidade é case todos en Internet usa. 1147 01:08:13,670 --> 01:08:18,030 Entón, estas non son as rodas de adestramento. Este é só o mellor practicar estes días. 1148 01:08:18,030 --> 01:08:22,830 Agora vexa abaixo que é o meu etiqueta script propio, e observe o que eu fixen aquí. 1149 01:08:22,830 --> 01:08:27,450 Acontece que o jQuery fai algo un pouco de fantasía. 1150 01:08:27,450 --> 01:08:29,660 JavaScript debe cifrões, pero eles non teñen sentido. 1151 01:08:29,660 --> 01:08:32,870 >> Son como a letra A ou B ou C. 1152 01:08:32,870 --> 01:08:36,670 jQuery simplemente adoptou a convención ou tipo de reivindicou o feito de 1153 01:08:36,670 --> 01:08:40,280 que US $ será o seu símbolo especial. 1154 01:08:40,280 --> 01:08:44,950 Así, logo que cargar este ficheiro JavaScript global ata aquí coa tag script, 1155 01:08:44,950 --> 01:08:49,080 ten acceso a unha variable global especial que se chama $. 1156 01:08:49,080 --> 01:08:53,009 É máis apropiadamente chamada jQuery, pero que non parece tan sexy como $. 1157 01:08:53,009 --> 01:08:56,250 Pero dólares non ten ningún significado especial. No PHP tivo un significado especial. 1158 01:08:56,250 --> 01:08:58,440 Tiña que ter iso na fronte dunha variable. 1159 01:08:58,440 --> 01:09:01,670 Esta é só unha cousa sexy que asumiron. 1160 01:09:01,670 --> 01:09:03,389 O que está a suceder aquí? 1161 01:09:03,389 --> 01:09:08,830 Repare que eu estou pasando para a función jQuery meu documento variable global 1162 01:09:08,830 --> 01:09:10,860 e entón eu estou chamando. listo. 1163 01:09:10,860 --> 01:09:15,480 O jQuery esencialmente fai é que permite que tome algunhas cousas JavaScript vainilla 1164 01:09:15,480 --> 01:09:17,889 como o obxecto documento o obxecto ventá 1165 01:09:17,889 --> 01:09:20,790 e se pasalo para a función jQuery - 1166 01:09:20,790 --> 01:09:24,429 e, de novo, para ser claro, esta é unha función chamada jQuery - 1167 01:09:24,429 --> 01:09:28,240 o que fai é que volve a unha versión especial de documento 1168 01:09:28,240 --> 01:09:30,700 que ten máis funcionalidades asociada a el. 1169 01:09:30,700 --> 01:09:34,760 Así, en JavaScript cru non hai ningunha función listo, 1170 01:09:34,760 --> 01:09:37,810 pero se pasar documento para a función jQuery primeira, 1171 01:09:37,810 --> 01:09:40,960 el retorna a vostede unha versión especial do obxecto do documento 1172 01:09:40,960 --> 01:09:43,030 que ten características máis extravagantes. 1173 01:09:43,030 --> 01:09:48,230 E é por iso que a xente quere del. Ela só fai as cousas máis fáciles de facer, como estamos a piques de ver. 1174 01:09:48,230 --> 01:09:49,820 Entón, o que esta liña de código significa? 1175 01:09:49,820 --> 01:09:52,690 Esta liña de código aquí significa que o documento está listo - 1176 01:09:52,690 --> 01:09:56,830 noutras palabras, unha vez que o navegador é rematar de ler este ficheiro de arriba cara abaixo - 1177 01:09:56,830 --> 01:09:59,200 vai adiante e executar a seguinte función. 1178 01:09:59,200 --> 01:10:03,540 O que é realmente interesante en JavaScript - e PHP ten iso tamén - 1179 01:10:03,540 --> 01:10:05,450 e funcións anónimas. 1180 01:10:05,450 --> 01:10:10,560 En JavaScript pode declarar funcións que non teñen nome, pero eles teñen un corpo. 1181 01:10:10,560 --> 01:10:12,570 Teña en conta o que está a suceder aquí. 1182 01:10:12,570 --> 01:10:16,220 >> Esta é unha función chamada listo, e iso significa só facer o seguinte 1183 01:10:16,220 --> 01:10:20,220 cando a páxina web enteira está listo, cando todo foi lido a partir do servidor. 1184 01:10:20,220 --> 01:10:23,090 O que quere facer? Eu quero facer un anaco de código. 1185 01:10:23,090 --> 01:10:27,120 Teña en conta que nós non queremos facer ese código inmediatamente. 1186 01:10:27,120 --> 01:10:34,350 Se eu omitido iso, iso significaría empezar inmediatamente a execución destas liñas de código. 1187 01:10:34,350 --> 01:10:39,040 Pero o feito de que eu estou dicindo non, non, non, involucrar este en unha función anónima como esta 1188 01:10:39,040 --> 01:10:43,000 significa non executa-lo aínda, chamalo, eventualmente. 1189 01:10:43,000 --> 01:10:45,430 Vimos iso hai un momento no noso formulario de exemplo anterior. 1190 01:10:45,430 --> 01:10:49,990 Cal é a función que chamamos finalmente, a 500 milésimas de segundo máis tarde? Blink. 1191 01:10:49,990 --> 01:10:51,480 Así, a mesma idea. 1192 01:10:51,480 --> 01:10:53,950 Unha vez máis, aínda que iso parece un pouco raro, só tomar agora en fe 1193 01:10:53,950 --> 01:10:57,060 que para declarar unha función anónima que se chama, finalmente, 1194 01:10:57,060 --> 01:11:01,720 simplemente escribir function () { 1195 01:11:01,720 --> 01:11:05,380 Entón, o que o código que imos facer, finalmente? O seguinte. 1196 01:11:05,380 --> 01:11:10,460 Isto tamén parece un pouco novo, pero iso significa que aquí é a función jQuery, 1197 01:11:10,460 --> 01:11:13,430 e este é agora un atallo. 1198 01:11:13,430 --> 01:11:18,830 Este fragmento de código HTML na parte inferior da pantalla, por suposto, ten algunha representación árbore. 1199 01:11:18,830 --> 01:11:21,730 Non é iso. Esta páxina é máis interesante do que este exemplo Ola mundo. 1200 01:11:21,730 --> 01:11:25,210 Pero hai algunha árbore que corresponde a este HTML. 1201 01:11:25,210 --> 01:11:28,910 Sería unha dor no pescozo para ter que aplicar algún tipo de función recursiva 1202 01:11:28,910 --> 01:11:34,380 para comezar o nodo raíz e, a continuación, atopar o nodo cuxo ID é o rexistro. 1203 01:11:34,380 --> 01:11:38,340 Entón, o que fai jQuery super doado para nós é literalmente iso. 1204 01:11:38,340 --> 01:11:43,000 Dalle me calquera div ou calquera forma, calquera que sexa elemento HTML 1205 01:11:43,000 --> 01:11:45,820 ten un ID de rexistro. 1206 01:11:45,820 --> 01:11:52,440 Isto é equivalente a document.getElementById ('Rexistro'). 1207 01:11:52,440 --> 01:11:54,170 >> Por que persoas como jQuery? 1208 01:11:54,170 --> 01:12:00,110 Porque é máis curto para escribir. Pero iso é todo o que é. É a mesma idea. 1209 01:12:00,110 --> 01:12:02,630 Tiren-me a etiqueta cuxa identificación é o rexistro. 1210 01:12:02,630 --> 01:12:06,300 E cando esa marca, que pasa a ser unha forma, é sometido, 1211 01:12:06,300 --> 01:12:08,300 vai adiante e executar o código. 1212 01:12:08,300 --> 01:12:11,320 Polo tanto, imos ter un ollar agora como estamos facendo validación de formulario. 1213 01:12:11,320 --> 01:12:15,950 A sintaxe é recoñecidamente enigmática en principio, pero o que está a suceder? 1214 01:12:15,950 --> 01:12:21,050 Esta liña de código é certo, eu vou berrar que o usuario facilite o seu enderezo de e-mail. 1215 01:12:21,050 --> 01:12:22,970 Entón o que é esta liña de código? 1216 01:12:22,970 --> 01:12:25,560 $ Significa jQuery. Agora, observe iso. 1217 01:12:25,560 --> 01:12:27,920 Este é tipo de como CSS. 1218 01:12:27,920 --> 01:12:33,370 Se xa mergullou en CSS, con todo, vostede sabe que iso significa que o elemento cuxa identificación é o rexistro. 1219 01:12:33,370 --> 01:12:39,840 O espazo significa atopar un neno ou un descendente de inscrición, cuxo nome é de entrada. 1220 01:12:39,840 --> 01:12:42,970 E entón esa cousa entre corchetes é un filtro pouco. 1221 01:12:42,970 --> 01:12:47,010 E mesmo se isto parece enigmático, isto significa só ir ao formulario cuxo ID é o rexistro, 1222 01:12:47,010 --> 01:12:51,230 ir ao interior do elemento de entrada que cuxo nome e correo-e, 1223 01:12:51,230 --> 01:12:55,440 e en seguida, obter o seu valor, calquera que sexa o seu valor pasa a ser - 1224 01:12:55,440 --> 01:12:59,670 asdf se iso é todo o que eu escriba ou malan@harvard.edu se é iso que eu escriba. 1225 01:12:59,670 --> 01:13:05,250 Entón, se o valor do campo do formulario de correo-e == nada, berrar co usuario. 1226 01:13:05,250 --> 01:13:09,700 Outra cousa, se o valor do campo de contrasinal == nada, berrar co usuario. 1227 01:13:09,700 --> 01:13:19,520 >> Else, o valor do campo de contrasinal non é igual ao valor do campo de confirmación 1228 01:13:19,520 --> 01:13:22,850 que era o elemento doutra forma, berrar co usuario. 1229 01:13:22,850 --> 01:13:25,680 E entón, finalmente - e esta tamén ten algunhas nova sintaxe propia, 1230 01:13:25,680 --> 01:13:29,270 pero unha vez que xa viu, e polo menos un pouco máis razoable - 1231 01:13:29,270 --> 01:13:34,060 máis o formulario cuxo ID é o rexistro ten un elemento de entrada, cuxo nome é segundo 1232 01:13:34,060 --> 01:13:39,720 e é marcada, vai adiante e berrar co usuario. 1233 01:13:39,720 --> 01:13:42,520 Entón, eu totalmente recoñecer que este é completamente esmagadora a primeira vista. 1234 01:13:42,520 --> 01:13:46,530 É un monte de nova sintaxe. Pero todos jQuery segue estes tipos de patróns. 1235 01:13:46,530 --> 01:13:49,880 E honestamente, eu nin sabía que iso existía ata poucos minutos. 1236 01:13:49,880 --> 01:13:53,640 Eu Googled: "Como é que comproba que a caixa de verificación está marcada en jQuery?" 1237 01:13:53,640 --> 01:13:55,680 e esta é a sintaxe, porque hai diferentes formas de facelo 1238 01:13:55,680 --> 01:13:58,010 con real código JavaScript prima. 1239 01:13:58,010 --> 01:14:01,030 Así como a primeira páxina do conxunto de problemas 7 enfatiza, 1240 01:14:01,030 --> 01:14:04,500 pset 7 é moito máis un exercicio de inicio se 1241 01:14:04,500 --> 01:14:08,650 onde nós fornecen, espero, un cadro conceptual que para afrontar o pset. 1242 01:14:08,650 --> 01:14:12,280 >> Pero, como é frecuentemente o caso con deseño web, cómpre a vostede realmente dar unha fuçada, 1243 01:14:12,280 --> 01:14:16,680 incorporar fragmentos de código e exemplos dende a web, sempre que cita-los 1244 01:14:16,680 --> 01:14:17,960 acordo cos termos en que a primeira folla, 1245 01:14:17,960 --> 01:14:21,460 e entender que aprender HTML, CSS, JavaScript e ata SQL 1246 01:14:21,460 --> 01:14:26,020 é realmente pretende ser este exercicio na casa, cando comezamos a tomar esas Rodas pequenas. 1247 01:14:26,020 --> 01:14:29,150 E entender tamén que hai tantas cousas máis que podes facer con un navegador. 1248 01:14:29,150 --> 01:14:33,790 Dentro da maioría destes elementos hai outras cousas chamados manipuladores de eventos. 1249 01:14:33,790 --> 01:14:37,140 E aínda que só mirou para os chamados onsubmit e onReady, 1250 01:14:37,140 --> 01:14:40,310 podes facer cousas como onkeydown, onkeyup, 1251 01:14:40,310 --> 01:14:43,410 como cando o usuario toca unha tecla, pode escoitar isto e cara arriba. 1252 01:14:43,410 --> 01:14:45,940 Gmail ten atallos de teclado. 1253 01:14:45,940 --> 01:14:49,490 Como Google aplicar atallos de teclado, como C para compoñer? 1254 01:14:49,490 --> 01:14:54,120 Eles escoitar eventos, como son chamados, como onkeypress ou onkeyup e onkeydown. 1255 01:14:54,120 --> 01:14:56,360 Se xa pairava o rato sobre algunha opción de menú 1256 01:14:56,360 --> 01:15:00,180 e, de súpeto, preparado, aparece un menú ou cambia de cor gráfico, 1257 01:15:00,180 --> 01:15:01,920 como eles están facendo iso? 1258 01:15:01,920 --> 01:15:06,940 En vez de escoitar onReady ou onsubmit, escoitar onmouseover ou onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> Así, en breve, con estes principios moi simples que nós comezamos a rabuñar a superficie de hoxe 1260 01:15:10,920 --> 01:15:13,940 e imos mergullar aínda máis para o mércores, que ten, cada vez máis, 1261 01:15:13,940 --> 01:15:17,530 poder de aplicar os tipos de cousas que xa está familiarizado. 1262 01:15:17,530 --> 01:15:21,620 Entón imos terminar alí, e nós imos seguir este mércores. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]