[Música tocando] DAVID Malan: Este é CS50, e este é o inicio da semana oito. E nós estamos tan animado para recebê- volta, sorpresa, propia Ramón do CS50 Galvan, un senior en ascenso que foi pasar os últimos meses desde xullo en Los Angeles, en Hollywood, literalmente traballando nun novo TV show chamado Colony, o creador dos cales é, en realidade, un alúmen de Harvard propio. E por iso estamos moi animado para ver este estrea na rede EUA en xaneiro deste ano. Polo tanto, sexa Nós prestamos moita atención para iso, e para Ramon máis para as próximas semanas. Sabemos que o fin está próximo. E o que isto significa que non hai todo o que moito deixou de CS50, é triste dicir. Temos tres problema conxuntos left-- hai conxunto de problemas, que é en six-- súas mans agora ou serán en breve, debido aínda este week-- destínase a cubrir nosos mundos de liña de comandos, onde temos pasado máis do noso tempo usando C, e no mundo da programación web. Ben, vai ver unha chea de ideas prestado do traballo de liña de comandos, pero tamén unha chea de novo e ideas interesantes que tamén van ser pertinente para aplicacións móbiles e para a tecnoloxía, de xeito máis xeral, co que caras son todos coñecemos hoxe en día en portátiles e teléfonos e afíns. Así que non aplicar unha páxina web, ou un sitio en si, pero un servidor web real. Vai escribir o resto de un servidor web escrito en C, cuxo propósito na vida é recibir solicitudes HTTP, estas sobres virtuais Estamos sempre falando aproximadamente, e realmente quere responder con algúns content-- estáticos como un punto HTML ficheiro, ou un punto ou JPEG calquera outro número de arquivos, ou mesmo un arquivo PHP en que o seu web servidor vai interpretar que o PHP código e cuspir os resultados. Agora, nós fornecen-lle con un pouco de cadro para ele-- de feito o código de distribución para problema definir seis é máis de 1.000 liñas, unha morea de comentarios que é, para ser fair-- pero esta é realmente significou ser unha oportunidade para comezar as súas mans sucias de mergullo nun proxecto moi grande que temos moi especialmente esculpidas pezas de para ti, de xeito que realmente cando saia e CS50 entrar no mundo real da programación e queren involucrarse calquera número de proxectos, terá moito maior confort descargar fonte código, algúns de código aberto proxectar na web, e ao mergullo e facer cambios que ve o axuste. Problema establecer sete será sobre facer o seu propio programa baseado na web que leva entrada dinámica e produce saída dinámica na forma dun sitio etrade.com-like. E problema axustou oito ha centrar aínda outra lingua coñecida como JavaScript. Mentres tanto, a finais proxecto está no horizonte. O chamado pre-proposta débese unha semana a partir de hoxe. Vista proposal-- segundo a especificación, que está website-- do CS50 é unha oportunidade moi casual para que envíe un correo-e así sucinto para o seu compañeiro de ensino só para informar-lle ou a de que está a pensar, a usar el ou ela como unha caixa de resonancia. E ten unha sanidade check-- se está a pensar sobre a mordedura de fóra tamén moito ou quizais moi pouco, ou que non ten idea do que sexa e queren involucrarse nunha conversa. A partir de aí é unha proposta e informe de estado, o chamado hackathon aquí en CS50 Cambridge para estudantes Harvard e Yale alike. O proxecto final implantación é entón debido. E, a continuación, unha feira CS50 aquí, en Cambridge, así como outro en New Haven. Polo tanto, a proposta, bótalle un ollo o sitio para estas indicacións. Pero o máis emocionante, tamén, é unha oportunidade de ensuciar as mans, e as súas mentes abertas para un todo chea de temas e ferramentas e técnicas que son acessórias ao núcleo Syllabus do curso, pero, con todo relacionados. E tamén pedras de chan marabilloso para facendo proxectos finais moi legal que van moito máis alá do material de nós Cubrimos formalmente en conxuntos de problemas ou na charla. Entón, vai á páxina web do CS50 para a listaxe de seminarios. Se non rexistrar, con todo, iso é bo. Dalle rexistrar aínda e nós o seguimento con unha ligazón de streaming en directo, o día ea hora está na páxina web. E todo se ve gravado e posto en liña se non pode facer a días e horarios específicos. En canto ao que está á fronte thereafter-- ben, por suposto, hai o hackathon CS50. Esta foto, recall, desde cero tomadas semana en torno 04:00 unha noite no ano pasado. A feira CS50, que unha vez máis terá lugar en ambas as cidades. E entón, só para plantar a semente, aínda que aínda ter un mes máis á esquerda do semestre, se desexa unirse propio ensino do CS50 equipo, e quere comezar pensando en facer unha AC, ou ensino compañeiro, sei que nós imos comezar a falar máis sobre iso a finais deste semestre. Pero é retratado aquí a maior parte do equipo deste ano. E así, PHP-- e eu estaba tan triste a semana pasada que [? Allyse?] Xentilmente foi para o esforzo de chegar nós estes adereços marabillosas que eu non acaban empregando, por iso, realmente só parecía un pouco estúpido que tiñamos unha pa sentado aquí último día do mércores, e un pouco de culler. Pero esta foi a miña metafórica forma de intentar pintar a imaxe de por que estamos en transición de C para unha linguaxe como PHP. E o mesmo podería dicirse de todos número de languages-- Java, Python, Ruby ou acios de outros-, pero mentres en C, por exemplo, escribir un programa en C pode normalmente ser como tomar unha culler como este e cavando un burato no chan, na area ou a sucidade. PHP permite que tome moito mordidas maiores fóra do problema, escribir moito menos código usando unha ferramenta moito menor, porque hai moito máis funcionalidade remendada in. Agora, se realmente dramático, teriamos algo pa aquí, pero que así sexa. Mentres tanto, a outra metáfora que xurdiu con é, por suposto, podería usar algo como unha chave a martelar en algo así como un cravo. Pero está claro que si o dereito ferramenta para uso vai sendo non tanto a linguaxe chamada C-- e agora eu só irritado [? Sanders ,?] Probablemente imos solucionar isto tan later-- a ferramenta correcta para usar moitas veces non vai ser esta ferramenta de nivel máis baixo. E, de feito, C non é unha linguaxe que a maioría de vós nunca van usar, ou debería necesariamente usar de novo. E, de feito, un pouco secret-- a única vez Eu uso C min é moi fermoso entre Setembro e decembro de cada caída semestre. E iso é porque usalo como unha oportunidade para ensinar os fundamentos de programación, e con el ordenador fundamentos da ciencia, datos estruturas, algoritmos e do como-- pero moi rapidamente vai vostede ver agora que a sintaxe e as ideas subxacentes C son tan marabillosas transferibles para máis moderno linguaxes de alto nivel, como PHP e Python e Perl e Java e Objective-C--, en realidade, non tanto Objective-C-- pero Swift, estes última linguas que moitos de vostedes a continuación, xogar contigo proxecto final. Así, sen máis delongas, imos realmente usar o PHP para resolver algúns problemas. Lembre que en principio, último semana, nós só utilizado CS50 IDE, escribimos un programa pequeno Dinky que dixo: "Ola, mundo". E entón eu salvo en un arquivo chamado hello.php. E entón eu execute este comando. E por que? En inglés, o que está pasando aquí? O que eu estaba facendo cando Corre ese mando? Si? Audiencia: Hai algunha función PHP que le o que está em-- entende iso. DAVID Malan: Bo, hai algunha función PHP-- e déixeme ser máis específico, hai un programa chamado PHP a.k.a. Un intérprete, que entende o contido de ola.php, e interpreta-lo de arriba baixo, de esquerda a dereita, e fai o que os mandos dicir. Os comandos ola.php, por suposto, é só fonte code-- funcións e variables e loops e semellantes, que nós mesmos comezaron a escribir en PHP. Pero a diferenza de C, que é unha linguaxe compilada, PHP acaba de escribir-lo e executalo. Saltar este paso intermedio de converténdoa en ceros e uns, e, a continuación, executa-lo. E entón o que é un lado positivo diso? Por que estamos saltar o paso? Por que linguaxes máis modernas tenden a ignorar este paso? Cal foi o beneficio? Ou só intuitivamente? Aínda que non teño PHP escrito moito antes, o que é beneficioso sobre non compilar o código que pensas? Non? Non cometer? Coçando a cabeza? Si. Audiencia: máis dinámico. DAVID Malan: máis dinámico? Que queres dicir? Audiencia: [inaudível] DAVID Malan: OK, bo, entón dependendo da entrada, non ten que recompila-lo cada vez. E iso realmente é tan sinxelo como o que isso-- é o punto de continuar para compilar o código? Este é un paso que é making-- este está esixindo, Para os últimos semanas, dúas veces como moitas etapas como só a execución do seu programa. Foi útil en ver que vexa algunhas mensaxes de erro e así por diante, senón que é un paso irritante. E para que os programadores entenderon co paso do tempo, polo que non nos comezar a escribir linguas que non o fan precisa que paso bastante mecánica, de xeito que pode só escribir seu código e executalo. Pero o que era o prezo que vimos que pagamos a semana pasada, cun exemplo particular? Si? Speed. Así [? o que é?] intérpretes un pouco máis lento, en que ceros e uns están agradable e rápido para un ordenador comprender, porque o Intel CPU, é dicir o que sexa, só entende o que está a suceder con eses patróns de bits. Tendo en conta que un intérprete é un programa que realmente ten que ler a fonte ASCII código que escribiu, e convertelo-lo, por así dicir, é descubrir como convértese en definitiva, a ceros e uns. Por iso, só ten un pouco pouco dun axuste de rendemento. Polo tanto, é un pouco de un trade-off. Agora, se facemos iso aquí, déixeme dalle facer un exemplo a seguir. Se eu entrar aquí, novo ficheiro, eu vou para salvar este novo é hello.php. E agora eu estou indo a ir adiante e dicir: "print Ola mundo" - e lembro que eu poida usar impresión, non ten que usar print-F. E agora aquí en baixo, se eu fai PHP de hello.php, eu huh-- non parecen interpretar iso. O que eu fixen de malo? Audiencia: As pulseiras anguladas. DAVID Malan: Si, ten que que top ángulo do soporte superior. Entón é medio chat, pero se acostumar con iso rapidamente. Se eu teño que escribir código PHP, I xeralmente que dicir ao programa, ou dicir o intérprete, hey PHP, vén aquí algún código PHP. E, a continuación, para unha boa medida, eu o faría pechar esta non con este, senón con só cuestión ángulo marca soporte, polo que agora aquí en baixo, se eu executar de novo, agora Eu conseguir o resultado desexado. Agora imos facer unha pequena optimización, só para que xa viu iso antes. Este é tipo de chat que eu ten que realizar PHP espazo hello.php, porque no pasado eu podería simplemente escribir barra dot nome do programa, que é tipo de Niza. É unha especie de unha mellor experiencia do usuario. Entón non é que pode facelo en PHP co I following-- Pode usar este críptica encanto na parte superior aquí, que é xeralmente chamado de shebang, polo que este é un símbolo afiada, por así dicir, este é un estrondo ou un signo de admiración. E iso agora é o camiño para un programa nun sistema Linux típico que chámase medio ambiente, ou recibidos. E este linha-- longa historia unha liña de short-- só di, hey ordenador, atope o PHP intérprete para me no medio ambiente, atopalo na súa memoria, por así dicir. E o que é bo momento, é que se eu baixar aquí, Podo facer barra dot Ola php punto, ou-- hmm. Permiso denegado. Ben, vai ver aínda máis este con problema de definir sete, se xa non o fixo, con permisos. Acontece que eu teño para realizar esta orde chamado [? chamod?] para o cambio mode-- un máis x ola.php. Necesito [inaudível] un agasallo adicional paso que está dicindo a meu ordenador, facer executable hello.php. E agora mira o que happens-- dot cortar hello.php, el só é executado. Non precisa especificar o intérprete máis. E podo facela aínda máis fermosa, aínda, se eu cambiar o nome desta cousa. Se eu mover hello.php só Hello-- así notar na esquina superior esquerda, o nome do programa é en realidade só agora Ola. Agora podo facer parecer que un programa C, aínda que está escrito en PHP-- ou francamente calquera número doutras linguas. Así mellora marxinal, ningunha diferenza funcional. Pero é só un pouco de curiosidade agora, para que poida escribir programas en calquera idioma, eo usuario non fai Ten que saber ou importarlle o que aqueles son. Ben, imos ollar para un máis exemplo convincente agora que chicoteado ata con antelación. E iso é chamado quote.php. E está dispoñible en liña. E teña en conta que é moi short-- pero é un programa da liña de comandos que se vai mirar para arriba os prezos das accións para min, o que está realmente a suceder ser pertinente para o problema definido sete. Entón imos ver o que estou facendo. Na parte superior Teño o aberto soporte de punto de interrogación PHP. Entón eu teño esa liña, polo que eu son esixindo un ficheiro chamado functions.php-- imos ver máis sobre iso nun bit, pero isto é como C do versión do sharp inclúen, onde quere ir incluír outro ficheiro. PHP chámalle esixen, aínda tamén ten unha función de incluír. E parece que é function.php só algo que escribín antes da clase. Eu colocar-lo no mesmo directorio, por mor Quería fatorar algún código que pode querer usar noutros lugares. Mentres tanto, pode seguramente inferir o que está pasando aquí. Este é un pouco diferente do C-- pero o que quero dicir con asegurar o uso axeitado? Traducir esta máis tecnicamente. En que circunstancias son saír do programa, ou saír? Si? Audiencia: Cando non ten dous argumentos de liña de comandos. DAVID Malan: Cando eu non teño para comandar os argumentos da liña. E recorda que un dos argumentos é o propio nome do programa. E a segunda será outra palabra que eu escriba despois do aviso. Entón, como C, este é a miña forma de comprobar, se o usuario cooperar e executar o programa como eu pretendía? Agora, hai algo un pouco diferente con C-- ante todo, ter este sinal de dólar, eo que fai un dólar asinar denotar en PHP? Só unha variable. Isto é tudo-- só unha variable seguido por o que sexa chamalo de feito. Teña en conta que hai algo falta meu programa PHP exactamente como estaba falta última semana, contra C, o que é o que? A tipo, pero tamén algo máis. Non hai algo function-- función principal. Non hai ningunha función principal. Acaba de comezar a escribir seu código sen preocuparse un moi arbitraria convenio de nomear algúns estándar función principal. Entón arg C é realmente só unha variable global que o intérprete fai dispoñible para min. Agora, iso é interesante. Entón, ollar para arriba stuff. Stock sinal de dólar é a á esquerda, que é a miña variable. No lado dereito, hai aparentemente unha función en PHP chamada investigación que Estou pasando miña última liña de comandos argumento a-- calquera que sexa a palabra é. E imos ver como este funciona en un momento. E entón, finalmente estou relatando o prezo. Estou imprimindo un partes de tal e tal. E lembre, esta é a en forma PHP-- un xeito en PHP-- onde non ten que facer o cifrão S anymore. Pode só usar claves e tapar nalgunha variable. Non ten que se preocupar de usando printf do mesmo xeito. E como un aparte, cando se pon unha variable dentro de comiñas dobres como este, vostede está a usar unha técnica de fantasía chamado de interpolación variable. Significa só que conectar a variable aquí. E como un aparte, algúns de vostedes que veñen programación de outros fondos, non pode usar comiñas simples cordas ao redor de facelo. Pode usar comiñas dobres para interpolación variable para traballar. Se non, literalmente ver aquelas claves. Entón, finalmente, imos adiante e executar este. Deixe-me facer meu terminal un pouco maior. Deixe-me ir adiante e executar dentro do meu directorio cotización. [? CDsource?] [? AM?] [? Cita?] Cita PHP dot PHP e eu vou buscar algo como GOOG, que é o seu símbolo Ticker, e unha acción do seu novo nome, Alfabeto Inc, custa US $ 717, a partir de hoxe. Todo ben, se queremos realizar este novo, calquera ter outro ticker stock queren mirar para arriba? Microsoft creo que é este, MSFT-- $ 53. Eu creo que o Yahoo é posible que iso. E o Facebook é que. Entón, o que é este programa está facendo? A maxia parece estar incorporado en que a función de procura. Entón, imos dar un ollo rápida. Acontece que non ven con PHP, está functions.php. E non imos pasar por esta en gran detalle, de notar a palabra clave aquí é que na liña de seis functions.php-- Eu literalmente dicir función. Eu especificar o nome da miña función. Eu, entón, especificar calquera argumentos ou parámetros, Quero que a función de take-- ningún tipo. E entón eu implementar lo. E eu vou acenar a man na implantación, xa que é dereito bastante avanzado agora, pero imos velo de novo, de feito, nunha semana no conxunto de problemas de sete. Pero podo limpar iso tamén. Tamén incluído no código de hoxe unha versión de citas, que non ten ficheiro dot PHP. Porque o que é de supoñer nas parte superior do programa chamado só citar? Que o chamado shebang-- o encantamento críptica que di atopar PHP e, a continuación, executa-lo no meu código aquí. Todo ben, entón que trae nós onde paramos última tempo-- aínda que con algúns exemplos máis avanzados. Calquera preguntas ata agora sobre PHP é o que estamos facendo? Não-- todo ben. Si? Audiencia: Inside the Arquivos HTML, facer vocę-- [? non é?] [? basta chamalo?] un [inaudível] ficheiro PHP? DAVID Malan: Boa pregunta. Nun contexto web, o que somos literalmente sobre a transición para, non usar o chamado shebang na parte superior, porque o server-- web, moitas veces un programa chamado Apache ou Microsoft IIS, Internet Information Server, é calquera número de software de servidor web, sabe que cando ve un ficheiro de punto de PHP, que debe realizar o intérprete nel. Non mira para que a primeira liña. Polo tanto, este primeiro truco liña é só cando está escribindo liña de comandos programs-- que non imos facer de super miúdo pero é a nosa forma de cubrir nosos exemplos de C para agora o noso PHP. Entón imos realmente cubrir este mundo do mundo da liña de comandos para a web facendo o seguinte. Deixe-me ir adiante e deseñar aquí só por un momento. Entón, se temos un servidor web, ou mellor, se temos meu portátil aquí, que eu vou chamar así. E aquí temos a Internet de algunha maneira. E entón para acá, temos un servidor nun building-- esta é a forma na que a Internet works-- e aquí é un servidor con algunhas luces quizais. O que está realmente a suceder entre estas dúas conexións? Polo tanto, neste edificio é un servidor web. Isto é só un ordenador que está executando algún operativo system-- quizais o software gratuíto chamado Apache, que CS50 IDE está en execución. Entón pode realmente pensas deste edificio como a construción en que CSt0 IDE é almacenado. É alí onde todos vostedes teñen contas, onde todos vostedes ter o seu propio servidor web execución, todos vostedes teñen as súas propias URLs únicas, como nós comezamos a discutir, e podes ver máis en P. definir seis. Aquí está o meu portátil nalgún lugar outro lugar en internet. E entón cando visitar unha URL que pertence para min, que o tráfico de Internet vai ao servidor, o servidor de recibir un HTTP request-- como un obter index.html e é responder a esta páxina web. Entón ese é o paradigma xeral. Considerando todo para arriba ata agora, hoxe, todo foi pasando só no límites deste edificio. Eu estaba usando o meu portátil, pero Eu estaba conectado a CS50 IDE, polo tanto, todos estes programas que eu estaba correndo estaba dentro dese servidor, en si. Pero agora, imos comezar a reutilización de PHP para escribir algúns programas reais que son servidos por un servidor web. E para facelo, eu estou indo a ir en unha morea de exemplos que introducir esta idea aquí. Polo tanto, esta é unha especie de unha forma elegante de describindo un paradigma de programación. E, de feito, como saír CS50 ou traballar en proxectos finais, ou tomar uns seguen na clase, vai comezar para ver que o mundo-- especialmente crecendo con linguaxes como C que son super baixo level-- entender que non hai mellor formas de software escrito. Hai certa patróns que pode seguir, certas formas de organizar os seus ficheiros e formas de nomear as súas funcións, de xeito que a longa historia curta, o mundo chegou a ser con unha morea de siglas e nomes para as formas de programación. Estes son só técnicas que pode usar. E un deles é chamado MVC, para Model View Controller. E este é só para agora, unha excesivamente complicado forma de dicir como ten que pór para fóra un sitio baseado en PHP, no noso caso. Como organizar os seus arquivos, Como organiza a súa lóxica, dunha forma que fai máis doado escribir sitios máis complicados? E, de feito, imos rapidamente chegar alí con p-set sete. Así, no mundo de MVC, está indo para ver que o noso código pode xeralmente ser caracterizado como calquera modelo de código, ou código do controlador, ou código vista. E eu vou simplificar-lo como follows-- o controlador é o cerebros do seu programa, é onde toda a lóxica interesante acontece. Entón todo o que fomos escribindo, ata agora, en clase, é tipo como controlador code-- está controlando seu programa, os seus loops, o seu condicións, as funcións e variables e todo iso. Puntos de vista, agora, van ser un pouco máis obvia do mundo da web. A vista é a estética do seu sitio. É o que o usuario sees-- as imaxes, as táboas HTML, as etiquetas HTML, e todo de que, todo o estético gordo cousas que non é tan difícil de escribir, pero é só o que está xerando, é a visión chamada, a estética. E modelo, en definitiva, vai a base de datos que ser stuff-- imos comezar a mergullo en todo a máis hoxe. Entón controlador é a lóxica, vista é o material estético, e modelo será onde nós gardados nosos datos reais. Entón, imos ollar para iso máis concretamente co seguinte exemplo. Eu estou indo a ir no meu directorio aquí de fonte de hoxe code-- todos os que está dispoñible en liña. E eu estou indo a ir á versión cero. E aquí é-- imos chamalo a versión cero do sitio web do CS50. Non hai moito aquí en todo. É unha páxina web moi sinxelo que é probablemente usando HTML tags-- só creo que a partir de exemplos do pasado? Que é iso? H1-- probablemente para ese gran negra título, que encima do logotipo, CS50. E o que máis está en xogo? Si? Audiencia: Lista desordenada. DAVID Malan: lista-- desordenada de xeito que o UL tag e quizais un par de etiquetas de LI. E se non se lembra deles, honestamente non importa. Estes son unha especie de gordo detalles de implementación da HTML que axiña mirar para arriba e está de volta no seu camiño. Imos concentrar-se máis sobre a programación ideas que son as pezas máis suculentas. Entón imos dar unha rápida mirar para o HTML-- e de feito se eu abrir a fonte vista aquí, si, Iso é o que está a suceder aquí. Hai unha marca UL. Aninhado dentro do que é a tags LI. E entón eu peguei prestado a URL do currículo real aquí. E, a continuación, no lectures.php é aparentemente outra páxina xerados dinamicamente que vai ter, imos see-- ah, as dúas primeiras semanas de clase. Así semana cero e unha semana, imos mirar para isto-- se eu ver fonte da páxina, Tamén super sinxelo. Estes están a levar a dúas páxinas chamado week0.php, e week1.php. Por iso, considero agora que está a suceder. Cando premo en week0.php, meu portátil está a facer unha proposta de week0.php. O servidor web, a.k.a., CS50 IDE, está a recibir o sobre virtual. É ver unha mensaxe como, obter week0.php. A continuación, é interpretar o ficheiro, arriba abaixo, de esquerda direito-- o ficheiro chamado week0.php-- e cuspindo os resultados. Entón, dentro deste arquivo, week0.php, debe ser a lóxica do controlador que está a xerar este HTML, e en breve veremos isto. Pero, por agora, deixe-me prema semanas cero, e agora temos mércores e venres, e agora temos os diapositivas lentamente desde a semana cero. E pode lembrar isto de camiño de volta cando. Entón, iso é todo o que esta web está facendo. Entón, imos considerar como está facendo iso. Vou volver para o código fonte aquí, en CS50 IDE, e eu vou abrir index.php. Na parte superior deste arquivo é unha morea de comentarios. E entón, no medio deste arquivo, Acontece que, hai código PHP que sexa. Porque se non ten calquera dos soporte aberto Tag signo de interrogación PHP está libre de só poñer HTML. Unha vez que o PHP intérprete se quere facer, é cando se le esta file-- arriba abaixo, de esquerda direita-- el só interpreta código que ve entre eses corchetes punto de interrogación. E outra cousa que non fai recoñecer como PHP, el só cospe para fóra. E HTML está entre as cousas ela só vai cuspir. Polo tanto, este ficheiro pode foi chamado index.html, pero eu estou nomeando todo dot PHP como un trampolín. Lectures.php-- semellante underwhelming, é só un pouco de HTML. Week0.php, semellante só algunhas HTML. Pero agora imos poñer no sombreiro enxeñaría proverbial, e considerar como podemos mellorar iso. Non é difícil facelo, pero eu medio de converteu copiar e pegar. E, de feito, se eu fai semana dous, sabe o que eu probablemente vou facer? Eu estou indo a ir a week1.php, eu son indo para destacar todo. Eu estou indo a copialo, pegalo nun novo ficheiro chamado week2.php, axustar algunhas URLs, e estar no meu camiño. Así, con base no que temos visto en C xa, esta non se sente ben, eu espero. Copiar, pegar raramente a solución correcta. Entón o que podemos comezar facer para mellorar isto? Onde están as oportunidades para mellor deseño? Ata o momento eu chegar oito semanas, que vai para ser realmente irritante se eu queira cambiar o tipo de letra de cada un dos miñas páxinas, ou se eu queira para cambiar a estrutura do esquema. Entón, onde está a oportunidade para mellor deseño? Ben, imos considerar o que é compartido entre todos eses arquivos. Aquí está unha semana, aquí está semana cero, aquí está lectures.php, aquí está index.php-- o que é o mesmo e o que é diferente, a grosso modo, en cada un destes ficheiros? Si? Audiencia: [inaudível] DAVID Malan: OK, bo. Polo tanto, non hai un patrón, con certeza, en que cada vez que eu escoller charla I, Eu debería estar xerando un A páxina que mira moi similar. E así quizais eu poida aproveitar o feito de que en realidade, deliberadamente numericamente indexado noso lectures-- se podo poñer aínda máis palabras a súa resposta. E cal é o único que, realmente, que está cambiando entre a semana um-- e déixeme rolar para abaixo polo que é aproximadamente na mesma Place-- entón aquí está semana cero, aproximadamente na parte superior. Aquí está unha semana, semana cero, unha semana, semana cero. OK, literalmente, se sabe ningún programa que sexa, isto é agora só como un xogo de correspondencia estándar. Entón, o que é diferente? Si? Audiencia: [inaudível] DAVID Malan: Bo, entón o título está cambiando, aínda que levemente. Cero vai, por suposto, para unha. O mesmo pasa na etiqueta H1. E nós non moi velo tan facilmente, porque as URLs son un pouco longo. Pero estas URL están cambiando un pouco. Pero o que non está cambiando é, atrévome dicir, a maior parte dos contidos do página-- tag HTML é o mesmo, a cabeza é o mesmo, o título é case o mesmo, o corpo é o mesmo, e case todo o resto é o mesmo, excepto para eses pequenos axustes. Entón, como podemos ir sobre factoring algúns dos iso? Ben, deixe-me propor exactamente que a próxima versión. Entón, aquí na versión un, teño a exacta mesmos arquivos, ademais dun par de outros. Aquí está index.php-- e mesmo se nunca viu antes de PHP, O que estou facendo probablemente para solucionar este problema-- a base do que ve aquí? Si, é que un lixeiro compromiso? Non? Si, vai adiante. Audiencia: [inaudível] DAVID Malan: Yep. Audiencia: [inaudível] DAVID Malan: Eu teño de ti para falar un pouco máis alto. Audiencia: [inaudível] DAVID Malan: OK, bo. E eu era penso-- difícil de escoitar, pero eu vocę-- creo que o que está querendo dicir é que as marcas que eran comúns encima, e as marcas que eran comúns na fondo, xa foron tidos fóra, ou relegado que arquivos? Header.php e footer.php-- e imos para facer algúns axustes para abordar a preocupación que acaba levantadas sobre o cambio de números, para exemplo, se eu oín vostede correctamente. Pero que parece ser a esencia do mesmo. Se había unha enorme cantidade de redundancia na parte superior da páxina, e unha enorme cantidade de redundancia no fondo, imos literalmente só destaque e cortar ese contido para fóra, poñelas nun file-- separado só como a idea de CSS, onde nós fatoramos estética moi semellantes, colocados lo nun ficheiro PHP punto separado, usar a esixir que mechanism-- é como C sharp que include-- é esencialmente o mesmo que dicir ir coller o contido header.php, e copiar e cola-los aquí. Pero o que isto significa que agora en index.php, teño estas dúas liñas. En lectures.php, eu tamén ter estas dúas liñas. En week0.php, eu tamén ter estas dúas liñas. Entón, agora, se eu queira cambiar o título de todas as miñas páxinas, ou quero cambiar o estrutura fundamental, Podo cambiar isto agora nun só lugar, ou dous places-- cabeceira e pé, respectivamente. Agora inicial do código de ollar un pouco máis enigmática, non? Pero se pensar sobre o que a páxina doing-- é se eu estou pedindo week0.php, así como no deseño sobre aqui-- cando week0.php é solicitado, que significa iso? Literalmente, este ficheiro é solicitado polo navegador. A.k.a. A web server-- CS50 ID-- agarra este arquivo, week0.php, e lê- Lo de arriba abaixo, de esquerda a dereita. Na liña un, el inmediatamente atopa soporte aberto signo de interrogación PHP, requiren cabeceira dot PHP, e por iso o que o intérprete PHP does-- que está construído na web servidor, porque preconfigurado Lo para você-- vai automaticamente en header.php, copia o contido, cola-los aquí. Pero entón os encontros de intérprete punto de interrogação próximo soporte, Entón, é todo feito a pensar. Agora é só cega cospe as liñas de dous a sete, porque é só HTML puro. Obtén a liña oito, e fai iso mesma maxia novamente-- abrir o ficheiro, agarrando o contido e obrigándoo os ou colando- dereito ou ben alí. Pero eu simplemente alusión a un erro. Este é un paso parcial cara atrás, porque se miramos en header.php, Eu medio que cortar un canto. O recurso que eu desistir, para para gañar este mellor proxecto discutible? Si? Audiencia: [inaudível] DAVID Malan: Si, eu medio de cortar un canto non trivial. Vostede apuntou que o que estaba cambiando foi o título, o número no título, eo número no H1. Así, a miña solución foi, OK, imos só cambiar o nome da páxina, e non tratar con isto problema algún. Entón iso é un parcial un paso atrás, con certeza. Pero o que é notable aquí é que o que eu fixen se non é consignado fóra todo o material común. E en footer.php, repare en que eu consignado fóra todo isto, aínda que pequena, material común. Entón eu teño de forma agora poder dar un paso á fronte, e corrigi- que as cuestións de título. Entón, imos facelo. Déixeme ir á miña segunda versión aquí, o que, unha vez máis, ten os mesmos arquivos excepto por unha nova adición. E é un pouco máis detallado, pero imos ver se nós pode provocar unha separación que está a suceder aquí. Entón, en vez de esixir header.php, e footer.php, Parece que estou esixindo só unha file-- chamado, por suposto, helpers.php. E déixeme estipular agora, o que está dentro helpers.php é só unha morea de funcións que escribín, como antes. Pero eu o chamei helpers.php. Agora, ao parecer, en liña de tres e 10, son chamando dúas funcións no facer cabeceira, pé de páxina renda. Aqueles non veñen con PHP, escribín aqueles min mesmo. E eu poñer-los en helpers.php. Agora, só vin esa sintaxe Unha vez máis, e foi super breve. Pero esta é, aparentemente, un argumento para procesar cabeceira, a función. Por que eu sei diso? Ben, aquí está un paréntese próximos, aquí está un paréntese aberta. E, por suposto, así como en C, algo entre eses parénteses é un ou unha input-- argumento para a función. Cal é o tipo dese argumento de datos, con base no que eu destacou? O que estes corchetes indicar, con base na última semana? Si, é unha array-- especialmente unha matriz asociativa. E esta sintaxe reconhecidamente é un pouco funky, pero iso é só de paso nun par de valor de clave. A clave é, entre comiñas título, eo valor é CS50. Se tivésemos feito isto en C, pode, en vez pareza máis con iso, só entre comiñas CS50-- ou, en realidade, sería rizado cintas, ou algo parecido en C, onde a clave é cero, eo valor é CS50. Pero, de novo, en PHP, aínda que o sintaxe é, de novo, un pouco raro, el permite que pase en palabras no canto de números para asociar as teclas cos valores. Entón o que iso todo significa? Se eu entrar en helpers.php, imos ollar para esta función. renderHeader.php, no canto RenderHeader é a miña función, e sei que, porque eu vexo a palabra clave aquí función. Isto é novo a partir C-- aparentemente leva un argumento chamado data-- pero eu podería chamar este calquera cousa, pero eu o chamei de datos, só para ser un pouco clean-- e só dar un palpite, especialmente se xa programou nalgún outro maior nivel de linguaxe antes, algo arriba C, conceptualmente. O que fai soporte aberto igual paréntese probablemente significa? Ou o que podería dicir? Non vimos isto en C. Si? Unha matriz baleira. En concreto, isto quere dicir que se o usuario non chamar RenderHeader cun argumento, eu aínda estou indo ter un argumento chamado de datos, pero o seu valor por defecto é vai ser unha matriz baleira. Entón é só unha conveniencia agradable. Non teño que berrar co usuario, ou dicir que usou miña función incorrecta. Só podo dar ao usuario un patrón valor, se eu non particularmente coidados. Agora esa función, eu son vai balance miñas mans en. Pero esta función permite extracto nos pasar estas variables en datos en header do seguinte xeito. E esta é a última peza, Coido que, de sintaxe descolados. Aquí é a miña nova versión de header.php --- lo adoitaba dicir literalmente aberta soporte título CS50, e foi iso. E mesmo para a H1. Agora é aparentemente di algo moi badalado. E déixeme simplificar esta por un momento como segue. Isto é o que eu teño cambiou o meu título para ser. Con todo, está quedando un pouco feo para soportes constantemente abertas con PHP, e, a continuación, use a función de impresión. Acontece que o PHP ten unha abreviación notación para esta, que non é máis que un signo igual, o que é tecnicamente un función chamada eco en vez de impresión, pero é o mesmo, de forma eficaz. Isto só queda mellor. É só unha sintáctica azucre, se quere, que fai que o meu código de ollar un pouco mellor. Pero ao parecer, e imos ver iso de novo en pouco tempo, temos que chamar este irritante longo función chamada HTML caracteres especiais en PHP, pois parece que hai certas entradas que o usuario pode darnos, ou que os usuarios poden dar, que está indo a romper a nosa web. Pero imos ver que o próximo semana con JavaScript. Pero, por agora, só sei que este ficheiro, headers.php, simplemente leva a que Título Pasei por dentro, facer seguro de que é seguro para ser inxectado nunha web páxina, e cospe-lo como o meu título e como o meu H1. Entón, se eu entrar nesta versión agora, Lembre que as conferencias ten o seu título de volta, semana cero ten o seu título de volta, e de feito, o HTML Estou xerando é o mesmo que o que a miña primeira versión foi-- excepto para o meu espazo en branco, porque eu comece o formato meu código un pouco diferente. Pero eu teño xerado todos o código que me interesa. Entón deixe-me facer unha pausa para só un momento para ver se hai algunha dúbida ou confusión que eu creei. Todo ben, entón imos torcer un pouco máis difícil aquí a ver se hai unha oportunidade de mellora. Helpers.php tamén tiña esa función, chamada RenderFooter. E o que é digno de nota sobre RenderHeader, e RenderFooter? E, de novo, con fins de hoxe, saber que a función é só extracto miña forma de pasar argumentos en header.php e footer.php. Sentímolo? Audiencia: [inaudível] DAVID Malan: Si, eu só cambiou a esixir liña. Entón, literalmente, eu teño cometido pecado de copiar e pegar, unha vez máis. Non é un número enorme de liñas, pero veñen on-- se eu estou copiando e colando todo só para cambiar unha pequena palabra, ea unha pequena palabra que apunta Alan fóra é rodapé aquí, contra cabeceira aquí. Se non, é todo idénticas, excepto para, por suposto, os nomes da función. Entón, o que poderiamos facer mellor? Ben, deixe-me abrir esta versión aquí, en que en helpers.php, por que non eu só obter un pouco máis intelixente sobre iso? Fai un pouco máis complicado código, pero chamalo facer? Entón o que eu fundamentalmente cambiou? Leva un argumento agora-- dous argumentos, os datos aínda. E entón cal é a primeira nome probablemente está a ser usado para, a base do que está lendo aquí? Mesmo se algúns dos sintaxe aínda é novo. Qué é o modelo de sinal de dólar? Sentímolo? Audiencia: cabeceira ou pé de páxina. DAVID Malan: cabeceira ou pé de páxina. Entón, ao parecer, eu decidir que se o único que está cambiando é o que quero modelo para print-- e por molde Quero dicir que é modelo para código que quero para a saída, pero quero tapar nalgunha values-- iso, se é só a cabeceira ou rodapé, por que non me parametrizar iso e chamar o sinal argumento dólar template? E, a continuación, esta sintaxe descolados permíteme para crear un camiño nunha variable aquí. Entón camiño sinal de dólar é unha variable. O que fai esta sintaxe facer, se é familiar? Si? Audiencia: [inaudível] DAVID Malan: Exactamente. Se template é, entre comiñas, cabeceira, ou que modelo é, entre comiñas, rodapé, esta liña non que destaque, liña oito, é simplemente tomar ese nome, como cabeceira, e concatenando-lo con PHP punto. Entón, nós non ten ese operador en C. Este operador punto é unha cousa incrible na PHP-- se está familiarizado con JavaScript ou Java, pode utilizar o signo máis asinar a facer concatenación. En C, é unha dor no pescozo e eu sinto moito, en p-axustou seis, vai ter que facer isto-- é unha dor no pescozo para concatenar cadeas. Por que? Ben, porque se ten unha cadea que é iso por moito tempo, e outra secuencia de caracteres que é iso por moito tempo, non pode simplemente liga-los xuntos. O que non ten que facer en C? Si? Audiencia: [inaudível] DAVID Malan: Ten que malloc memoria, ou usar unha matriz na pila. E realmente ten que facer esa matriz grande abondo para caber este máis este, ademais da barra invertida cero. Logo concatenar-los en conxunto, utilizando trasfega gato ou manualmente cun loop for, ou calquera número de técnicas. E imos amosar-lle un par in-p definir seis. É unha dor no pescozo. E iso é realmente o que quero dicir sobre este contra isto-- como C contra PHP. Só obteña moito máis funcións de balde, de xeito que poida concentrarse, idealmente, a diversión parte de codificación, o proxecto que quere resolver, no canto de o baixo nivel de minúcias. Entón, iso só xera header.php ou footer.php con base na que eu chamar. E, de feito, se eu for en index.php, aviso todo o que é changed-- No canto de chamando facer cabeceira ou pé de páxina renda, Estou chamando render, seguido polo nome do modelo que quero facer. E vai ver isto, tamén, no conxunto de problemas de sete, polo cal permitirá que use o mesma función para facer acios e acios de diferentes páxinas web. Entón en vez de me debruzouse moi máis sobre estes details-- que podes ver de novo en conxunto de problemas seven-- imos ollar en agora o inicio dunha solución de a un problema máis interesante. Ata agora, nada temos fixo os datos gardados. En realidade, a única vez que xa salvou algo que fixemos nesta clase é cando tivemos unha demostración moi sinxelo por algún tempo volta, en que usan ficheiro IO en C, e eu creo que eu escriba o meu nome, e O nome de Hannah, eo nome de María, ou que o nome de Andy, e logo gardado un file-- CSV separados por comas ficheiro valores. E usamos fopen-- creo usamos fprintf se ben me lembra, e nós gardadas nun arquivo. Agora, que é o máis simple forma de unha base de datos. Se queres facer un sitio para o Programa Frosh IMS, polo cal calouros podes rexistrarte para un deporte, idealmente quero facer algo con eses datos. A semana pasada, non fixemos nada co data-- nós só dixo: está rexistrado, non realmente. Ou que eu enviei un correo a Proctor, e foi iso. Pero sería bo se eu puidese dar que proctor un ficheiro CSV, como un arquivo de Excel. Ou mellor aínda, sería sería bo se eu puidese poñer os nomes destes usuarios e dormitorio nomes e todo iso en que unha base de datos só vive para sempre, ata que eu escoller para eliminar os datos. Unha base de datos que permite me para consultar información. E, de feito, é o que é unha base de datos. Nós introducimos hoxe, e a próxima semana, tamén, unha tecnoloxía chamado SQL-- unha Consulta Estruturada Linguaxe, que é outra lingua. É, esencialmente, un programación lingua, pero para bases de datos. E unha base de datos, por agora, só pensar en como unha versión super sofisticados Microsoft Excel, é Google Follas de cálculo ou Números de Apple. En xeral, é un programa que permite vostede gardar unha chea de datos en liñas e columnas, bastante como pode en Excel. Pero o que é bo, especialmente se non somos super-familiarizados co Excel, SQL que permite que a facer é esta consulta información escribindo liñas de código onde pode, aínda que o seu base de datos ten un millón de liñas na mesma, podes atopar cousas super rápido. En realidade, o Excel é particularmente mal de grandes conxuntos de datos. E, de feito, ata algúns anos, acabou Excel só permite que almacenar ata 65.535 liñas de data-- que Parece moito, pero ao época eu era un estudante de graduación, e lémbrome tropezar iso porque eu estaba xerando Arquivos CSV para a miña investigación e eu quería analiza-los rapidamente só abrindo-se en Excel. Por suposto, o meu ordenador só accidentado, porque eu tiña máis de 65.000 liñas. Pero de onde veu a 65.535 vén? O que estaba facendo Microsoft, presuntamente? Se é bo coas potencias de dous? Si, eles estaban a usar un 16-bit valor para representar o número de liña. E dous a 16 é 65,536-- menos un, porque se índice cero significa que foi o maior número de liñas que eu podería ter. E foi só unha decisión de deseño. Ao gardar 16 bits, me limitado 16.000 liñas, no canto de 4 millóns, que eu podería ter ideal. Pero, por agora, imos introducir esta máis nun contexto web. E o que é agradable sobre SQL é que, mesmo pero é moi poderosa e fermosa texto, que realmente reduce ata catro operacións fundamentais, catro funcións clave, se selecciona, will-- para recuperar datos, en busca aos datos; borrar ou eliminar datos; introducir para engadir liñas para a base de datos; e actualización. Entón, se xa usou Google Follas de cálculo, números Apple, Microsoft Excel, ten executado, moi probablemente, o único destas operacións como un ser humano por só usando teclado e mouse-- inserción de datos, utilizando os seus ollos para seleccionar ou buscar datos, ou datos actualización ou exclusión de datos. Entón o que significa isto? Ben, preinstalado en CS50 IDE é un programa chamado MySQL. É un libre, de código aberto base de datos que é super popular. Facebook, por exemplo, úsao para este día, entre outras ferramentas que empregan. E unha morea de sitios moi populares usar que en gran parte porque é rápido, e porque é gratuíto. Aínda que certamente existen alternativas. E algúns de vostedes poden se involucrar co alternativas para os proxectos finais. Esta é unha imaxe de pantalla, mentres, de unha ferramenta baseada na web chamada phpMyAdmin. É unha coincidencia que esta ferramenta baseada na web é tamén escrito nunha linguaxe, PHP, pero o que é que se destinan a facer é dar unha base WEB- interface para unha base de datos. Porque MySQL é tipicamente algo, historicamente, ía interactuar con só cunha liña de comandos. E sería super- irritante e arcano ter escribir ordes textuais para seleccionar datos, inserir datos e eliminar datos. Por iso, algunhas persoas en internet escribiu un programa baseado na web que só déixenos xestionar os datos da nosa base de datos. É como un dobre clic sobre o Excel, e executando unha versión baseada na web dos mesmos. E o que vai usar isto para en definitiva, a próxima semana, non en-p definir seis, pero é construír algo chamado CS50 Finanzas, que terá unha base de datos de usuarios, con nomes de usuario e contrasinais, dólar que equivale teñen nas súas contas bancarias. Será algo que usa para almacenar os símbolos e as cantidades de accións que os usuarios comprar usando virtual dólares que vai dar a eles. E iso vai permitir que os usuarios para rexistrar para o seu sitio web, de xeito que mesmo os seus amigos pode sintonizar a súa web e realmente facelo, log in, e xogar e tratar de atopar erros no seu código, e tratar de atopar erros no seu sitio. E van simplemente rexístrese pola engadindo que, de forma eficaz, vía código que escribe no seu banco de datos. Por exemplo, esta é unha captura de pantalla rápida que unha base de datos pode parecer. Isto era un dos solutions-- do ano pasado este é como un mini Excel arquivo, almacenadas na nosa base de datos almacenados neste software chamado MySQL. Na parte esquerda, eu teño visto dada a cada usuario un número único. Na segunda columna, eu dei- todos un usuario nome-- miña propia entre eles. E na parte dereita, Eu dei-lles un hash. Agora, esta é realmente unha contrasinal, pero non é un contrasinal de texto plano. É un contrasinal cifrado, se vai, ou un código de hash. Que imos volver antes de tempo. Pero se xa leu un artigo sobre como a chave nalgún banco ou algún sitio pode ser comprometida, el xeralmente pode significar unha de dúas cousas. Polo tanto, este é só un fragmento de seis usuarios. Todos vostedes poden agora descubrir para fóra a través de hacking ou fisuras o que os nosos seis contrasinais das persoas son. Pero se xa gañou unha alerta ou unha petición de desculpas dunha empresa ou sitio dito, Sentímolo, un hacker invadiu noso banco de datos vostede probabelmente debería cambiar o seu contrasinal, o que podería dicir? Ben, un, podería significar a empresa foi máis imbécil, e foi almacenando o seu contrasinal nunha columna como esta, sen cifrado. Que significa o adversario, que roubou a base de datos, literalmente coñece o seu nome de usuario e contrasinal. Iso é o peor escenario posible. E como podes ver en conxunto p- sete, tan fácil de evitar. Non hai absolutamente ningunha escusa para que forma de estupidez en internet de hoxe. Dois-- e imos atopar algúns artigos para dar testemuño do feito de que este aínda acontece, nonetheless-- dous, quizais o adversario roubou esta versión da base de datos. Que aínda é un pouco mal, porque agora saben que eu teño seis clientes, Sei que os nomes de usuario destes seis clientes, e sei que o cifrado versións, ou as versións de hash, de contrasinais eses seis dos clientes. Pero calquera de vostedes que pode facer [? Hacker 2?] onde rachado contrasinais ou tomou un ollar para esta versión do problema conxunto, por que é aínda un pouco preocupante se o adversario sabe o hash de contrasinais? Audiencia: porque poderían introducir todo o dicionario para a función hash. E se o seu contrasinal é un dicionario palabra, [? poden só match--?] DAVID Malan: Exactamente, o adversario pode só escribir o código, como algúns de vós fixo para [? Hacker?] 2, en que iterado todas as palabras do dicionario, ou todas as combinacións posibles dunha mediante Z e un medio nine-- que soa como un lote, e é. Pero, para un ordenador, é moi danado rápido. E, de feito, esa foi a punto de [? Hacker 2 ,?] Estaba para levar o material que literalmente parece iso, e enxeñería inversa o que realmente era. Entón, imos ver como podemos almacenar esta de forma máis eficiente. Acontece que, por sorte, en MySQL, alí vai ser tipo de datos. E unha das partes divertidas sobre deseño de base de datos, para ser honesto, é realmente decidir por si mesmo como ten que representar os datos? Se representar un número de teléfono como un int, como un número grande, ou moi? Ou realmente facelo como unha secuencia de caracteres? E non pode ser moi impactos non triviais deste. De feito, un dos primeiros, divertidas historias germane é cando Mark Zuckerberg estaba construíndo Facebook, que foi orixinalmente escrito en, e aínda é, en gran parte escrita en PHP. E un dos maiores retos eles afrontaron a comezos foi escalando. Cando eles continuaron engadindo escola despois escola, despois da escola, que eu saiba, unha das solucións orixinais era esencialmente para copiar e pegar algúns dos bancos de datos e parte do código, de xeito que era de Harvard executando no seu propio servidor, e MIT estaba correndo no seu propio servidor. E foi por iso que, para algúns de ti que pode lembrar, non podería ter amigos noutras redes. Probablemente non ten amigos en MIT ou Harvard 10 ou máis anos, pero non podería abarcar as redes por esa razón, en parte. E un dos maiores retos para a Mark e para empresas como Facebook en realidade, é de manexo centos e miles e millóns de solicitudes por segundo. Entón as cousas que vai comezar falando esta semana son realmente vai ser pertinente para escribir un bo software, e popularmente ferramentas de éxito que pode tratar con moitos usuarios. Entón, imos falar de cousas como indexación e busca, pero iso é todo por hoxe. Imos velo para saber máis sobre o mércores. [MUSIC - TEMA "Seinfeld"] DAVID Malan: pode lo, e restar. E non ten que ir con algúns importe predeterminado de memoria. Ben, que é o que vai ser chamado? COLUMNA 1: Ben, o que está pasando? COLUMNA 2: O que quere dicir? Está dando unha charla. DAVID Malan: E podemos utilizar un función chamada malloc para memory-- COLUMNA 1: Por que non están movendo os seus brazos? COLUMNA 2: Ben that's-- vostede sabe, iso é normal. É como ten só grandes salchichas colgado alí. COLUMNA 1: Isto é normal? COLUMNA 2: Si, eu creo que nós simplemente asumir que accidentalmente substituíu seu desodorante con supercola.