[Jouer de la musique] DAVID MALAN: Ceci est CS50, et ceci est le début de la huitième semaine. Et nous sommes très heureux d'accueillir dos, grosse surprise, propre Ramon CS50 Galvan, une personne âgée qui a été la hausse passé les derniers mois depuis Juillet à Los Angeles, à Hollywood, travailler littéralement sur un nouveau téléviseur de marque spectacle appelé Colony, le créateur de ce qui est en fait un alun Harvard lui-même. Et donc nous sommes très heureux de voir ce débuts sur le réseau USA ce Janvier. Alors restez à l'écoute pour cela, et pour Ramon plus pour les semaines à venir. Sachez maintenant que la fin est proche. Et cela signifie qu'il n'y a pas tout ce que beaucoup à gauche du CS50, triste à dire. Nous avons seulement trois problème ensembles gauche- il ya problème réglé six-- qui est en vos mains maintenant ou le seront bientôt, plus tard cette week-- est destiné à combler nos mondes de la ligne de commande, où nous avons passé la plupart de notre temps à l'aide C, et le monde de la programmation web. Eh bien, vous verrez beaucoup d'idées emprunté à l'ouvrage de la ligne de commande, mais aussi beaucoup de nouvelles et des idées intéressantes qui sont également va être germane pour applications mobiles et de la technologie, plus généralement, avec lequel vous les gars sont tous familiers de nos jours sur les ordinateurs portables et les téléphones et autres. Ainsi, vous aurez implémentez pas une page Web, ou d'un site Web en soi, mais un serveur Web réelle. Vous allez écrire le reste d'un serveur Web écrit en C, dont le but dans la vie est de recevoir les requêtes HTTP, ces enveloppes virtuelles, nous continuons à parler à propos, et effectivement répondre soit avec certains content-- statiques comme un point HTML fichier, ou un point ou JPEG tout autre nombre de fichiers, ou même un fichier PHP qui permet à votre web serveur va interpréter que PHP code et cracher les résultats. Maintenant, nous avons fourni avec vous un peu de cadre pour it-- effet le code de distribution pour le problème fixé six est plus de 1000 lignes, un beaucoup de ce qui est des commentaires, pour être fair-- mais cela est vraiment destiné à l'occasion pour obtenir vos mains sales plongée dans un assez grand projet que nous avons très précisément pièces sculptées sur de vous, de sorte que vraiment quand vous quittez et CS50 entrer dans le monde réel de la programmation et que vous voulez tremper dans un certain nombre de projets, vous aurez beaucoup plus confort téléchargeant une source Code, certains open source projeter sur le web, et la plongée dans et en faisant changements qui bon vous semble. Problème réglé sept va être à propos faire votre propre application basée sur le Web qui accepte une entrée dynamique et produit une sortie dynamique dans la forme d'un site de etrade.com-like. Et le problème réglé huit mettra l'accent sur l'instant une autre langue connue sous JavaScript. Pendant ce temps, le dernier projet est à l'horizon. La pré-proposition dite est due d'une semaine à partir d'aujourd'hui. Pré-proposal-- par la spécification, qui est sur le website-- de CS50 est une occasion assez décontracté pour d'envoyer un e-mail assez succincte à vos collègues de l'enseignement juste pour le prévenir ou elle de ce que vous pensez, à utiliser lui comme une caisse de résonance. Et avoir un bon sens check-- si vous songez à propos de mordre trop ou peut-être beaucoup trop peu, ou peut-être vous avez aucune idée et que vous souhaitez engager une conversation. Par la suite, est une proposition et rapport de situation, la soi-disant CS50 hackathon ici Cambridge pour les étudiants Harvard et Yale Identique. Le projet final la mise en œuvre est alors due. Et puis une foire CS50 ici, à Cambridge, ainsi qu'une autre à New Haven. Donc la proposition, jetez un oeil à le site Web pour ces indications. Mais plus excitante, aussi, est une occasion de vous salir les mains, et vos esprits ouverts à un tout tas de sujets et outils et les techniques qui sont accessoires au coeur du cursus de la formation, mais néanmoins liés. Et aussi merveilleuse pierres de gué à faire des projets définitifs vraiment cool que aller bien au-delà matériel que nous avons couvert formellement dans le problème fixe ou en cours. Alors, allez sur le site de CS50 pour la liste entière des séminaires. Si vous ne vous inscrivez pas encore, ça va. Allez-y et inscrivez-vous et nous le ferons encore suivi avec un lien live streaming, le jour et l'heure est sur le site. Et tout sera enregistré et mis en ligne si vous ne pouvez pas faire la jours et des moments particuliers. Quant à ce qui nous attend thereafter-- bien, bien sûr, il ya le hackathon CS50. Cette photo, de rappel, de la semaine zéro prise autour de quatre heures, un soir, dans les années passées. La foire de CS50, qui encore une fois aura lieu dans les deux villes. Et puis, juste pour planter la graines, même si nous avons encore un mois plus à gauche du semestre, si vous souhaitez rejoindre propre enseignement de CS50 le personnel, et vous voulez commencer penser à devenir CA, ou l'enseignement compatriote, sachez que Nous allons commencer à parler plus à ce sujet plus tard ce semestre. Mais on voit ici est la plupart de l'équipe de cette année. Et ainsi, et je PHP-- était si triste la semaine dernière que [? Allyse?] Aimablement est allé à l'effort d'obtenir nous ces magnifiques accessoires que je ne finissent par utiliser, de sorte qu'il vraiment juste regardé un peu stupide que nous avions une pelle assis ici tout jour mercredi dernier, et une petite cuillère. Mais ce fut ma métaphorique façon d'essayer de peindre l'image de pourquoi nous sommes en transition de C à un langage comme PHP. Et la même chose pourrait être dit de toute nombre de languages-- Java, Python, Ruby ou grappes de others-- mais alors que dans C, par exemple, écrire un programme en C pourrait être généralement comme prendre une cuillère de ce type et creuser un trou dans le terre, dans le sable ou la saleté. PHP vous permet de prendre beaucoup grandes morsures sur le problème, écrit beaucoup moins de code en utilisant un outil beaucoup plus faible, parce qu'il ya tellement plus fonctionnalité reconstitué dans. Maintenant, si nous étions vraiment dramatique, nous aurions quelque chose à la pelle ici, mais ainsi soit-il. Pendant ce temps, l'autre métaphore nous sommes arrivés avec est, bien sûr, vous pourriez utiliser quelque chose comme une clé à marteler dans quelque chose comme un clou. Mais bien sûr, le droit outil à utiliser va être pas tant le langage appelé C-- et maintenant je viens agacé [? Sanders,?] Probablement, Nous allons corriger cela afin later-- le bon outil pour utiliser souvent ne va pas être cet outil de plus bas niveau. Et en effet, C est pas une langue que la plupart d'entre vous allez jamais à utiliser, ou devrait nécessairement utiliser à nouveau. Et en fait, un peu secret-- la seule fois Je l'utilise moi-C est à peu près entre Septembre et Décembre de chaque automne semestre. Et cela est parce que nous l'utiliser comme une opportunité pour enseigner les fondamentaux de programmation, et avec lui ordinateur les sciences de base, des données structures, des algorithmes et la like-- mais va très vite vous voir maintenant que la syntaxe et les idées sous-jacentes C sont si merveilleusement transférable à plus moderne langages de plus haut niveau, comme PHP et Python et Perl et Java et Objective-C-- fait, pas tellement Objectif-C-- Swift mais, ceux-ci plus récent langues que vous serez nombreux à puis tremper avec vous projet final. Alors sans plus tarder, nous allons effectivement utiliser PHP pour résoudre certains problèmes. Rappelons que dès le début, dernière semaine, nous avons juste utilisé CS50 IDE, nous avons écrit un petit programme Dinky que vient de dire, "Bonjour tout le monde." Et puis je l'ai enregistré dans un fichier appelé hello.php. Et puis je suis tombé cette commande. Et pourquoi? En anglais, ce qui se passe ici? Que faisais-je quand Je courus cette commande? Ouais? PUBLIC: Il ya une fonction PHP qui lit ce qui se comprend que in--. DAVID MALAN: Bon, il ya une certaine fonction PHP-- et permettez-moi d'être plus précis, il ya un programme appelé PHP, alias Un interprète, qui comprend le contenu de hello.php, et l'interprète de haut en en bas, de gauche à droite, et fait ce ces commandes disent. Les commandes dans hello.php, bien sûr, est tout simplement la source code-- fonctions et les variables et les boucles et etc., que nous nous ont commencé à écrire en PHP. Mais contrairement à C, ce qui est un langage compilé, PHP vous suffit de l'écrire, et exécutez-le. Vous sautez cette étape de intermédiaire de convertir en zéros et de uns, puis de l'exécuter. Et ce qui est une hausse de cela? Pourquoi sommes-nous sautons l'étape? Pourquoi les langues les plus modernes ont tendance à passer cette étape? Quel est l'avantage? Ou tout simplement intuitivement? Même si nous ne l'avons pas beaucoup écrit avant PHP, ce qui est bénéfique de ne pas compiler votre code pensez-vous? Non? Ne pas commettre? Gratter la tête? Ouais. Audience: Plus dynamique. DAVID MALAN: Plus dynamique? Ce que tu veux dire? AUDIENCE: [inaudible] DAVID MALAN: OK, bon, si en fonction de l'entrée, vous ne devez pas le compiler chaque fois. Et il est vraiment aussi simple que ce que that-- est le point de continuer pour compiler votre code? Ceci est juste une étape qui est making-- cela est exigeant, depuis plusieurs semaines, deux fois plus nombreuses étapes comme on vient de l'exécution de votre programme. Il a été utile de voir que vous voir quelques messages d'erreur et ainsi de suite, mais il est encore juste une étape ennuyeux. Et si les programmeurs ont réalisé au fil du temps, pourquoi ne pas nous commencer à écrire des langues qui ne sont pas besoin de cette étape assez mécanique, de sorte que peut simplement écrire votre code et l'exécuter. Mais ce qui était le prix que nous avons vu que nous avons payé la semaine dernière, avec un exemple particulier? Oui? La rapidité. Ainsi [? ce qui est?] interprètes un peu plus lent, en ce zéros et de uns sont agréable et rapide pour un ordinateur à comprendre, parce que la Intel CPU, ou quoi que ce soit, comprend tout ce qui se passe avec les schémas de bits. Alors que d'un interprète est un programme qui a vraiment a lire la source de Ascii code que vous avez écrit, et de le convertir, pour ainsi dire, ou comprendre comment il convertit finalement de zéros et de uns. Donc, il faut juste un peu peu d'une baisse de performance. Donc, il est un peu un compromis. Maintenant, si nous le faisons ici, laissez-moi aller de l'avant et faire un exemple de la manière suivante. Si je vais ici, nouveau fichier, je vais pour enregistrer cette fois est hello.php. Et maintenant, je vais aller de l'avant et dire: «Bonjour tout le monde print» - et rappelle que je peux utiliser l'impression, je ne sais pas avoir à utiliser print-F. Et maintenant, ici-bas, si je fais de PHP hello.php, je huh-- ne semblent pas l'avoir interprété. Qu'ai-je fait de mal? Audience: Les bracelets en angle. DAVID MALAN: Ouais, vous avez besoin que l'équerre en haut. Donc, il est un peu ennuyeux, mais vous y habituer rapidement. Si je dois écrire du code PHP, je généralement besoin de dire le programme, ou de dire à l'interprète, hey PHP, voici un peu de code PHP. Et puis, pour faire bonne mesure, je le ferais fermer cette pas avec cela, mais plutôt avec juste interrogation angle support, de sorte que maintenant ici-bas, si je lance ce nouveau, maintenant Je reçois le résultat souhaité. Maintenant, nous allons faire une légère optimisation, juste pour que vous avez vu avant. Ceci est plutôt ennuyeux que je avoir à courir PHP espace hello.php, parce que dans le passé, je pourrait simplement écrire slash dot nom du programme, ce qui est plutôt agréable. Il est une sorte de meilleure expérience utilisateur. Donc, il se trouve que vous pouvez faire ce en PHP avec le je following-- peuvent utiliser ce assez cryptique incantation au sommet ici, qui est généralement appelé le tralala, celui-ci étant un symbole dièse, pour ainsi dire, cela est un bang ou un point d'exclamation. Et cela est maintenant la voie à un programme sur un système Linux typique est appelé environnement, ou env. Et ce line-- longue histoire short-- une ligne juste dit, hey ordinateur, trouver le PHP interprète pour moi dans l'environnement, trouver dans votre mémoire, pour ainsi dire. Et ce qui est bien maintenant, est que si je descends ici, Je peux le faire dot slash bonjour dot php, ou-- hmm. Permission refusée. Eh bien, vous verrez encore plus de cette avec sept problème posé, si vous avez pas déjà, avec des autorisations. Il se trouve que je dois pour exécuter cette commande appelé [? chamod?] pour le changement mode-- un plus x hello.php. Je dois [inaudible] celui supplémentaires étape qui est dit mon ordinateur, rendre exécutable hello.php. Et maintenant regarder ce que happens-- dot slash hello.php, il fonctionne simplement. Je ne pas besoin de spécifier l'interprète plus. Et je peux le faire encore plus jolie, encore, si je renomme cette chose. Si je hello.php passer à juste Hello-- alors remarqué en haut à gauche, le nom du programme est en effet maintenant juste Bonjour. Maintenant, je peux la faire ressembler à un programme C, même si il est écrit en PHP-- ou franchement quel nombre d'autres langues. Ainsi renforcement marginal, aucune différence fonctionnelle. Mais il est juste un peu de curiosité maintenant, de sorte que vous pouvez écrire des programmes dans toutes les langues, et l'utilisateur n'a pas avoir à vous soucier de ce que ceux-ci sont. Eh bien, regardons un plus exemple convaincant maintenant que je fouetté à l'avance. Et on appelle cela quote.php. Et il est disponible en ligne. Et remarquez qu'il est assez short-- mais il est un programme de ligne de commande qui est aller chercher une hausse des prix d'achat d'actions pour moi, ce qui se passe réellement être germane à problème réglé sept. Voyons donc ce que je fais. Au sommet, je l'ai parenthèse ouverte interrogation PHP. Ensuite, je dois cette ligne, par lequel je suis nécessitant un fichier appelé functions.php-- nous allons voir plus à ce sujet dans un peu, mais cela est comme C de version de forte comprennent, ou voulez-vous aller inclure un autre fichier. PHP appelle exige, si elle a également une fonction include. Et il se trouve que function.php est juste quelque chose je l'ai écrit avant la classe. Je l'ai mis dans le même répertoire, parce Je voulais factoriser du code que nous pourrions utiliser ailleurs. Pendant ce temps, vous pouvez probablement déduire ce qui se passe ici. Ceci est un peu différent de C-- mais qu'est-ce que je veux dire par assurer une utilisation correcte? Traduire cette techniquement plus. Dans quelles circonstances suis-je quitter le programme, ou de sortir? Ouais? AUDIENCE: Lorsque vous ne disposez pas deux arguments de ligne de commande. DAVID MALAN: Quand je ne ai pas pour commander des arguments de ligne. Et rappelez-vous que l'un de ceux arguments est le nom du programme lui-même. Et la seconde va être un autre mot que je tape après l'invite. Ainsi, tout comme C, ce est ma façon de vérifier, l'utilisateur n'a coopérer et exécuter le programme que je voulais? Maintenant, il ya quelque chose un peu différent C-- avec tout d'abord nous avoir cette signe de dollar, et qu'est-ce qu'un dollar signer désigner en PHP? Juste une variable. Voilà tous-- juste une variable suivie par tout ce que vous voulez réellement l'appeler. Notez qu'il ya quelque chose manquant de mon programme de PHP, tout comme il manquait dernière semaine, contre C, ce qui est quoi? A types, mais aussi quelque chose d'autre. Il n'y a pas quelque chose function-- fonction principale. Il n'y a pas la fonction principale. Vous venez de commencer à écrire votre code sans avoir à vous soucier assez arbitraire Convention de nommer un certain défaut fonction principale. Donc arg C est vraiment une variable globale que l'interprète met à la disposition moi. Maintenant, ce qui est intéressant. Donc, analysez les choses. Dollar sign boursier est sur le à gauche, qui est mon variable. Sur le côté droit, il ya apparemment une fonction en PHP appelé recherche qui Je passe ma dernière ligne de commande l'argument to-- quel que soit le mot est. Et nous allons voir comment cette travaille à un moment. Et puis enfin je rapporte le prix. Je imprimant un part de tel ou tel. Et rappelez-vous, ceci est le manière PHP-- une manière PHP-- où vous ne devez pas faire le signe du dollar S plus. Vous pouvez simplement utiliser des accolades et de brancher une variable. Vous ne devez pas vous inquiéter à propos de printf en utilisant de la même façon. Et en passant, quand vous mettez une variable à l'intérieur de guillemets doubles comme cela, vous utilisez une technique de fantaisie appelé interpolation variable. Cela signifie simplement de brancher la variable ici. Et en passant, certains d'entre vous qui viennent d'autres milieux de programmation, vous ne pouvez pas utiliser des guillemets simples autour de cordes pour ce faire. Vous devez utiliser des guillemets pour interpolation de variables à travailler. Sinon, vous aurez littéralement voir ces accolades. Alors enfin, allons de l'avant et lancer ce. Permettez-moi de faire mon terminal un peu plus grand. Permettez-moi aller de l'avant et courir à l'intérieur de mon répertoire de devis. [? CDsource?] [? UN M ?] [? devis?] devis PHP dot PHP, et je vais chercher quelque chose comme GOOG, qui est son symbole, et d'une action de son nouveau nom, Alphabet Inc, a coûté 717 $, à compter d'aujourd'hui. Très bien, si nous voulons exécuter ce nouveau, quiconque avoir un autre téléscripteur ils veulent regarder? Microsoft je pense est celui-ci, MSFT-- 53 $. Je pense que Yahoo est peut-être cela. Et Facebook est que. Alors, quel est ce programme de faire? La magie semble être embarqué en ce que la fonction de recherche. Donc, nous allons jeter un coup d'œil rapide. Il se trouve que ne vient pas avec PHP, il est dans functions.php. Et nous ne pourrons pas passer par ce dans les moindres détails, de remarquer le mot clé ici est que sur la ligne des six functions.php-- Je dis littéralement fonction. Je précise le nom de ma fonction. Je précise alors tout arguments, ou paramètres, Je veux que la fonction de take-- aucun type. Et puis je mettre en œuvre. Et je ferai signe ma main à la mise en œuvre, car il est juste assez avancé maintenant, mais nous verrons à nouveau fait en une semaine dans sept problème posé. Mais je peux nettoyer cette place, aussi. Je également inclus dans le code d'aujourd'hui une version des devis, qui n'a pas de fichier de point de PHP. Parce que ce qui est sans doute à la haut du programme appelé juste citer? Ce soi-disant l'shebang-- incantation assez cryptique qui dit trouver PHP et ensuite exécuter sur mon code ici. Très bien, alors qui apporte nous où nous avons laissé dernière time-- mais avec quelques exemples plus avancés. Vous avez des questions à propos de ce jour PHP ou ce que nous faisons? No-- tout droit. Ouais? AUDIENCE: Inside the Les fichiers HTML, font vous-- [? le faites vous ?] [? simplement l'appeler?] un [inaudible] fichier PHP? DAVID MALAN: Bonne question. Dans un contexte web, qui nous sommes littéralement sur le point de passer à, ne pas utiliser la soi-disant tralala au sommet, parce que la Server-- web souvent programme appelé Apache ou Microsoft IIS, Internet Information Server, ou un nombre quelconque d'autres logiciels de serveur web, sait que quand il voit un fichier de point de PHP, qu'il doit exécuter l'interprète sur elle. Il ne ressemble pas à ce que la première ligne. Donc, ce premier tour de ligne est juste quand vous êtes écriture ligne de commande programs-- que nous ne ferons pas de super souvent, mais il est notre façon de combler nos exemples de C à présent notre PHP. Donc, nous allons en effet combler ce monde du monde de la ligne de commande pour le web en procédant comme suit. Laissez-moi aller de l'avant et dessine ici pendant un moment. Donc, si nous avons un serveur web, ou plutôt si nous avons mon portable ici, que je vais dessiner comme ça. Et ici, nous avons le Internet dans une certaine forme. Et puis ici, nous avons un serveur dans un building-- voilà comment l'Internet et dans works-- ici est un serveur avec peut-être quelques lumières. Qu'est-ce qui se passe réellement entre ces deux connexions? Donc, dans ce bâtiment est un serveur web. Voilà juste un ordinateur qui exécute un certain exploitation system-- peut-être le logiciel libre appelé Apache, qui CS50 IDE est en marche. Ainsi, vous pouvez effectivement penser à ce bâtiment comme dans le bâtiment qui CST0 IDE est stocké. Cela est où vous avez tous comptes, où vous tous avoir votre propre serveur web courir, de vous tous avoir vos propres URL uniques, comme nous avons commencé à discuter, et vous verrez plus dans P. mis six. Voici mon ordinateur portable quelque part ailleurs sur l'internet. Et donc quand je visite une URL qui appartient pour moi, que le trafic Internet va sur le serveur, le serveur de recevoir une requête HTTP request-- comme un obtenir index.html et il est répondre à cette page Web. Voilà donc le paradigme général. Alors que tout jusqu'à jusqu'à présent, aujourd'hui, tout se passait seulement dans le limites de ce bâtiment. Je me sers de mon ordinateur portable, mais Je suis connecté à CS50 IDE, de sorte que tous ces programmes que je courais était à l'intérieur de ce serveur, lui-même. Mais maintenant, nous allons commencer la réutilisation PHP d'écrire des programmes réels qui sont servis par un serveur Web. Et pour ce faire, je vais aller dans tout un tas d'exemples qui introduisent cette idée ici. Donc, ce genre de est une façon élégante de décrivant un paradigme de programmation. Et en fait, que vous quittez CS50 ou travailler sur des projets définitifs, ou de prendre certains suivent sur la classe, vous allez commencer de voir que le monde-- surtout après avoir grandi avec des langages comme C qui sont super bas level-- réalisent qu'il ya de mieux façons de logiciel d'écriture. Il ya certains les modèles que vous pouvez suivre, certaines façons d'organiser vos fichiers et façons de nommer vos fonctions, de sorte que longue histoire courte, le monde a venir avec tout un tas d'acronymes et les noms des moyens de programmation. Ce ne sont que des techniques que vous pourriez utiliser. Et l'un d'eux est appelé MVC, pour Model View Controller. Et cela est juste, pour aujourd'hui, un trop compliqué façon de dire comment vous devez disposer un site web basé sur PHP, dans notre cas. Comment organisez-vous vos fichiers, comment vous organisez votre logique ne, d'une manière qui facilite la écrire sites plus complexes? Et en effet, nous allons rapidement y arriver avec p-set sept. Donc, dans le monde du MVC, vous allez de voir que notre code peut généralement être caractérisé que soit le code du modèle, ou code du contrôleur, ou code de vue. Et je vais schématiser comme follows-- le dispositif de commande est le cerveaux de votre programme, où il est tout de la logique intéressant se produit. Donc, tout ce que nous avons été écrit jusqu'à présent en classe, est un peu comme contrôleur code-- il a le contrôle votre programme, vos boucles, votre conditions, vos fonctions et les variables et tout ça. Vues, ​​maintenant, vont être un peu plus évident dans le monde du web. Une vue est l'esthétique de votre site web. Il est ce que l'utilisateur sees-- les images, les tables HTML, les balises HTML, et tous de cela, l'ensemble de l'esthétique duveteux des choses qui ne sont pas si difficile à écrire, mais est-ce que vous générez, est le point de vue que l'on appelle, l'esthétique. Et le modèle, en fin de compte, va comme base de données qui stuff-- nous allons commencer la plongée dans tous les plus ce mercredi. Donc contrôleur est la logique, vue est la substance esthétique, et le modèle va être là où nous stockons nos données réelles. Alors regardons cela de plus concrètement avec l'exemple suivant. Je vais aller dans mon répertoire ici de la source de tout aujourd'hui code-- dont est disponible en ligne. Et je vais aller dans la version zéro. Et ici est-- appelons-le la version zéro du site Web de CS50. Il n'y a pas beaucoup du tout ici. Il est une page web très simple qui est probablement en utilisant ce code HTML tags-- juste deviner à partir des exemples passés? Qu'est ce que c'est? H1-- probablement pour cette grande gras titre, ce logo en haut, CS50. Et quoi d'autre est en jeu? Ouais? AUDIENCE: Liste non ordonnée. DAVID MALAN: films-- non ordonnée de sorte que le UL tag et peut-être un couple de balises LI. Et si vous ne vous souvenez pas de ceux-ci, il ne vraiment pas d'importance. Ce sont des sortes de moelleux les détails de mise en œuvre de HTML que vous regardez rapidement et vous êtes de retour sur votre chemin. Nous allons nous concentrer davantage sur la programmation des idées qui sont les morceaux juteux. Donc, nous allons juste prendre un rapide regarder le HTML-- et même si je ouvre la source de vue ici, yup, Voilà exactement ce qui se passe ici. Il ya une étiquette UL. Niché à l'intérieur de ce qui est à des balises LI. Et puis je l'ai emprunté l'URL du syllabus réelle ici. Et puis, dans le lectures.php est apparemment une autre page générée dynamiquement cela va avoir, disons see-- ah, les deux premières semaines de cours. Donc, la semaine et la semaine d'un zéro, nous allons regarder this-- si je considère source de la page, aussi super simple. Ceux-ci mènent à deux pages week0.php appelé, et week1.php. Donc maintenant examiner ce qui se passe. Lorsque je clique sur week0.php, mon ordinateur portable est de faire une demande de week0.php. Le serveur web, alias, CS50 IDE, reçoit cette enveloppe virtuelle. Il est de voir un message comme, obtenir week0.php. Il est ensuite interpréter le fichier, en haut en bas, de gauche à droite- le fichier appelé week0.php-- et crachant les résultats. Donc, à l'intérieur de ce fichier, week0.php, doit être la logique de commande qui génère cette HTML, et nous verrez bientôt que. Mais pour l'instant, permettez-moi de clique sur la semaine zéro, et maintenant nous avons mercredi et vendredi, et maintenant nous avons les diapositives lentement à partir de zéro semaine. Et vous pourriez rappeler ce billet depuis chemin du retour quand. Donc, voilà tout ce site est fait. Donc, nous allons examiner comment il fait ça. Je vais retourner dans la code source ici, dans CS50 IDE, et je vais ouvrir index.php. Au sommet de ce fichier est un tas de commentaires. Et puis, au milieu de ce fichier, il avère être pas de code PHP que ce soit. Parce que si vous ne disposez pas de la parenthèse ouverte balises interrogation PHP, vous êtes libre de mettre juste HTML. Parce que ce que le PHP interprète est censé faire, est quand il lit ce file-- de haut en bas, de gauche à droite- il interprète uniquement code, il voit entre ces équerres d'interrogation. Et rien d'autre que ce ne reconnaître comme PHP, il crache vient de sortir. Et HTML est parmi les choses il sera simplement cracher. Donc, ce fichier pourrait avoir été appelé index.html, mais je suis tout de nommage dot PHP comme un tremplin. Lectures.php-- similaire décevante, il est juste un peu HTML. Week0.php, de même que quelques-uns HTML. Mais maintenant, nous allons mettre sur le chapeau de génie proverbiale, et d'examiner comment nous pouvons améliorer cette situation. Il est facile de faire cela, mais je genre dégénéré en de copier et coller. Et en fait, si je fais la deuxième semaine, vous sais ce que je vais probablement faire? Je vais aller à week1.php, je suis va mettre en évidence tout. Je vais le copier, coller dans un nouveau fichier appelé week2.php, modifier certains URL, et être sur mon chemin. Donc, sur la base de ce que nous avons en C vu déjà, cela ne se sent pas bien, je l'espère. Copier, coller rarement la bonne solution. Alors, que pouvons-nous commencer à faire pour améliorer cela? Où sont les opportunités pour une meilleure conception? Au moment où je reçois à huit semaines, ça va pour être vraiment ennuyeux si je veux changer la police de chacun de mes pages, ou si je veux de modifier la structure de la mise en page. Alors, où est l'occasion pour une meilleure conception? Eh bien, nous allons examiner ce qui est partagé entre tous ces fichiers. Voici la première semaine, voici la semaine zéro, voici lectures.php, voici index.php-- ce qui est la même chose et Ce qui est différent, grosso modo, dans chacun de ces fichiers? Ouais? AUDIENCE: [inaudible] DAVID MALAN: OK, bon. Donc, il ya un modèle, sûrement, dans lequel chaque fois que je choisis conférence I, Je serais générer un page Vous très similaire. Et alors peut-être que je peux tirer parti le fait que vraiment, nous avons délibérément numérique indexées notre lectures-- si je peux mettre encore plus mots dans votre réponse. Et ce qui est la seule chose, vraiment, cela change entre la semaine One-- et permettez-moi de faire défiler vers le bas il est donc à peu près de la même place-- alors voici la semaine zéro, à peu près au sommet. Voici la première semaine, la semaine zéro, la première semaine, la semaine zéro. OK, littéralement si vous savez aucun programme que ce soit, cela est maintenant comme un motif jeu de correspondance. Donc ce qui est différent? Ouais? AUDIENCE: [inaudible] DAVID MALAN: Bon, donc le titre est en mutation, un tant soit peu. Zéro va, bien sûr, à un. Même chose qui se passe dans la balise H1. Et nous ne voyons pas tout à fait aussi facilement, parce que les URL sont un peu long. Mais ces URL changent légèrement. Mais ce qui ne change pas est, oserais-je dire, la plupart des contenus du page-- la balise HTML est la même, la tête est de même, le document est presque la même, le corps est la même, et presque tout le reste est la même à l'exception de ces petits réglages. Alors, comment pouvons-nous aller sur affacturage certains de cela? Eh bien, laissez-moi de proposer exactement que, dans la version suivante. Donc, ici en version un, je dois l'exacte mêmes fichiers, plus quelques autres. Voici index.php-- et même si vous avez jamais vu avant PHP, ce que je fais sans doute de résoudre ce problem-- basé sur ce que vous voyez ici? Ouais, est-ce une légère engagement? Non? Oui continuer. AUDIENCE: [inaudible] DAVID MALAN: Yep. AUDIENCE: [inaudible] DAVID MALAN: Je dois vous parler un peu plus fort. AUDIENCE: [inaudible] DAVID MALAN: OK, bon. Et je think-- il était difficile à entendre mais je vous-- pense que ce que vous voulez en venir est que les balises qui étaient communes en haut, et les balises qui étaient sur la commune en bas, ont maintenant été pris en compte sur, ou relégué à quels fichiers? Header.php et footer.php-- et nous allons de faire quelques réglages pour répondre à la préoccupation que vous venez soulevées au sujet du changement des numéros, pour par exemple, si je vous ai bien compris. Mais cela semble être l'essentiel. Si il y avait une énorme quantité de redondance au haut de la page, et une énorme quantité de redondance au fond, nous allons littéralement juste clou et couper que le contenu sur, mettre dans un file-- séparée tout comme l'idée de CSS, où nous refactorisée l'esthétique très similaires, dans un fichier de point de PHP séparé, utiliser le nécessitent mechanism-- qui C est comme comprendre: forte qui est essentiellement comme dire aller saisir le contenu de header.php, et copier et les coller ici. Mais ce que cela signifie est que maintenant index.php, je dois ces deux lignes. Dans lectures.php, moi aussi avoir ces deux lignes. Dans week0.php, moi aussi avoir ces deux lignes. Alors maintenant, si je veux changer le titre de l'ensemble de mes pages, ou je veux changer le structure fondamentale, Je peux le changer maintenant en un seul endroit, ou deux tête et pied de page places--, respectivement. Maintenant, le départ du code pour regarder un peu plus cryptique, non? Mais si vous pensez à ce que la page est doing-- si je demande week0.php, tout comme sur le dessin plus ici-- quand week0.php est demandé, Qu'est-ce que cela veut dire? Littéralement, ce fichier est demandée par le navigateur. L'alias du web CS50 ID-- saisit cette fichier, week0.php, et lit il haut en bas, de gauche à droite. Sur une ligne, il rencontre immédiatement parenthèse ouverte interrogation PHP, exiger tête dot PHP, etc. ce que l'interpréteur PHP does-- qui est intégré dans le web serveur, parce que nous préconfigurés pour vous-- il va automatiquement dans header.php, copie le contenu, les colle ici. Mais alors, les rencontres d'interprètes Aide à la recherche fermer la parenthèse, de sorte qu'il est tout fait penser. Maintenant, il crache aveuglément les lignes de deux à sept, car il est juste HTML brut. Obtient à la ligne huit, et est-ce que même magie again-- l'ouverture du fichier, saisissant le contenu, et les obligeant ou en les collant à droite, puis et là. Mais je viens de faire allusion à un bug. Ceci est une étape partielle arrière, parce que si nous regardons dans header.php, Je suis genre de couper un coin. Quelle est la caractéristique ai-je renoncer pour pour obtenir cette meilleure conception défendable? Ouais? AUDIENCE: [inaudible] DAVID MALAN: Ouais, je genre de couper un coin non triviale. Vous avez souligné que ce qui était en train de changer était le titre, le nombre dans le titre, et le nombre dans le H1. Donc ma solution était, OK, disons simplement renommer la page, et pas traiter avec ce problème que ce soit. Voilà donc une partielle pas en arrière pour sûr. Mais ce qui est remarquable ici est que ce que je l'ai fait est par ailleurs pris en compte tous les trucs commun. Et dans footer.php, remarque je factoré sur tout cela, bien que moindre, étoffe commune. Je dois donc en quelque sorte maintenant être en mesure de prendre un autre pas en avant, et fixer que les questions de titre. Donc, nous allons le faire. Laissez-moi aller dans mon deuxième version ici, qui, de nouveau, a les mêmes fichiers sauf pour un nouvel ajout. Et il est un peu plus verbeux, mais nous allons voir si nous peut démêler ce qui se passe ici. Donc, au lieu d'exiger header.php et footer.php, Je semble ne nécessitent qu'un file-- appelé, bien sûr, helpers.php. Et laissez-moi en définit maintenant, ce qui est intérieur de helpers.php est juste un tas de fonctions que je écrit, comme avant. Mais je l'ai appelé helpers.php. Maintenant, apparemment, dans ligne de trois et 10, je suis appelant deux functions-- rendre en-tête, pied de page rendre. Ceux ne viennent pas avec PHP, je l'ai écrit ceux moi-même. Et je les ai mis dans helpers.php. Maintenant, nous avons seulement vu cette syntaxe une fois, et il était très brève. Mais cela est apparemment un argument pour rendre la tête, la fonction. Pourquoi dois-je le sais? Eh bien voici une proximité paren, voici une parenthèse ouverte. Et bien sûr, tout comme dans C, quelque chose entre ces parenthèses est un ou un input-- argument de la fonction. Quel est le type de cet argument de données, sur la base de ce que je l'ai souligné? Qu'est-ce que ces crochets indiquer, sur la base de la semaine dernière? Ouais, il est un array-- spécifiquement un tableau associatif. Et cette syntaxe certes est un peu excentrique, mais cela ne fait que passer dans une paire de valeur de clé. La clé est, entre guillemets titre, et la valeur est CS50. Si nous avions fait cela en C, elle pourrait à la place ressembler plus à ça, juste entre guillemets CS50-- ou en fait, ce serait bouclés accolades, ou quelque chose comme ça dans C, où la clé est égale à zéro, et la valeur est CS50. Mais encore une fois, en PHP, même si le syntaxe est, encore une fois, un peu bizarre, il vous permet de passer en mots au lieu de chiffres à associer avec des valeurs clés. Alors qu'est-ce que tout cela veut dire? Si je vais dans helpers.php, regardons cette fonction. renderHeader.php, plutôt renderHeader est ma fonction, et je le sais parce que je vois la fonction mot-clé ici. Ce qui est nouveau à partir C-- il a apparemment prend un argument appelé data-- mais je ne pouvais ai appelé ce quoi que ce soit, mais je l'ai appelé données, juste pour être un peu clean-- et il suffit de prendre une supposition, en particulier si vous avez programmé dans un autre plus élevé niveau de langue avant, quelque chose C ci-dessus, sur le plan conceptuel. Qu'est-ce parenthèse ouverte égale crochet signifierait probablement? Ou ce que cela pourrait signifier? Nous ne l'avons pas vu cela dans C Ouais? Un tableau vide. Plus précisément, cela signifie que si l'utilisateur ne remet pas renderHeader avec un argument, je vais quand même d'avoir un argument appelé données, mais sa valeur par défaut est va être un tableau vide. Donc, il est tout simplement une belle commodité. Je ne dois pas crier à l'utilisateur, ou dites que vous avez utilisé ma fonction tort. Je peux juste donner à l'utilisateur un défaut valeur, si je ne me soucie pas particulièrement. Maintenant cette fonction, je suis aller à agiter mes mains à. Mais cette fonction permet d'extrait nous passons ces variables dans les données dans header.php de la façon suivante. Et ceci est la dernière pièce, Je pense que, de la syntaxe funky. Voici ma nouvelle version de header.php-- il l'habitude de dire, littéralement, ouvert support titre CS50, et ce fut elle. Et même chose pour le H1. Maintenant, il dit apparemment quelque chose d'assez funky. Et permettez-moi de simplifier cette un instant comme suit. Voilà ce que je l'ai changé mon titre être. Cependant, il devient un peu laid de crochets ouverts en permanence avec PHP, puis utilisez la fonction d'impression. Il se trouve que PHP dispose d'un raccourci notation pour cela, ce qui est juste un signe égal, ce qui est techniquement une fonction appelée écho à la place de l'impression, mais elle est la même chose, effectivement. Cela semble juste mieux. Il est juste un syntaxique sucre, si vous voulez, qui rend mon code regarder un peu mieux. Mais il se trouve, et nous verrons ce nouveau Avant longtemps, nous devons appeler cette fâcheusement à long fonction appelée HTML caractères spéciaux dans PHP, car il se trouve il ya certaines entrées que l'utilisateur pourrait nous donner, ou que les utilisateurs pourraient nous donner, qui vont briser notre site. Mais nous verrons que la prochaine semaine avec JavaScript. Mais pour l'instant, sachez simplement que ce fichier, headers.php, tout simplement prend le titre qui Je passai en, il fait assurer qu'il est sécuritaire pour être injecté dans un web la page, et il recrache que mon titre et comme mon H1. Donc, si je vais dans cette version maintenant, remarquerez que des conférences a son titre de retour, semaine zéro a son titre de retour, et En effet, le code HTML je générer est identique à ce que ma première version était-- sauf pour mon espace, parce que je l'ai commencé formatage mon code un peu différemment. Mais je l'ai tous générés le code je me soucie. Alors permettez-moi de me arrêter juste un moment et voir si il ya des questions ou de confusion, je l'ai créé. Très bien, nous allons donc tordre un peu plus difficile ici pour voir si il ya une possibilité d'amélioration. Helpers.php avait aussi cette fonction, appelée renderFooter. Et ce qui est remarquable à propos renderHeader, et renderFooter? Et encore une fois, pour les besoins d'aujourd'hui, le savoir que la fonction d'extraction est juste mon chemin du passage d'arguments dans header.php et footer.php. Pardon? AUDIENCE: [inaudible] DAVID MALAN: Ouais, je ne changé l'exigent ligne. Donc, littéralement, je l'ai commis le péché de copier et coller, encore une fois. Il est pas un très grand nombre de lignes, mais viennent on-- si je copiant et collant tout juste pour changer un petit mot, et un petit mot qui pointe Alan OUT est pied de page ici, par rapport à-tête ici. Sinon, tout est identiques, sauf pour, bien sûr, les noms de la fonction. Alors, que pouvons-nous faire mieux? Eh bien, laissez-moi ouvrir jusqu'à cette version ici, de sorte que dans helpers.php, pourquoi ne pas je reçois juste un peu plus intelligent à ce sujet? Ecrire un peu plus compliqué code, mais l'appeler rendre? Alors qu'ai-je fondamentalement changé? Elle prend un argument maintenant-- deux arguments, les données encore. Et puis, ce qui est la première nom étant probablement utilisé pour, sur la base de ce que vous lisez ici? Même si certains de la syntaxe est encore nouveau. Quel est signe dollar modèle? Pardon? AUDIENCE: tête ou le pied. DAVID MALAN: tête ou le pied. Donc, apparemment, je décidai que si la seule chose qui change est ce que je veux modèle à print-- et par modèle Je veux dire ceci est modèle pour code que je veux à la sortie, mais je veux brancher dans certains values-- donc si elle est seulement tête ou le pied, pourquoi dois-je paramétrer pas cela et appeler le signe argument dollar modèle? Et puis cette syntaxe géniale me permet pour créer un chemin dans une variable ici. Donc signe dollar chemin est une variable. Qu'est-ce que cette syntaxe faire, si vous êtes familier? Ouais? AUDIENCE: [inaudible] DAVID MALAN: Exactement. Si le modèle est, entre guillemets, tête, ou si le modèle est, entre guillemets, pied de page, cette ligne il que je l'ai souligné, la ligne huit, est tout simplement en prenant ce nom, comme en-tête, et il concaténation avec PHP dot. Donc, nous ne disposions pas cet opérateur en C. Cette opérateur point est une chose étonnante dans PHP-- si vous êtes familier avec JavaScript ou Java, vous pouvez utiliser le signe plus signer à faire concaténation. En C, il est une douleur dans le neck-- et je suis tellement désolé, dans le p-défini six, vous allez avoir à faire this-- il est une douleur dans le cou pour concaténer des chaînes. Pourquoi? Eh bien, parce que si vous avez une chaîne qui est cette longue, et une autre chaîne qui est cette longue, vous ne pouvez pas il suffit de brancher ensemble. Qu'est-ce que vous avez la place pour faire en C? Ouais? AUDIENCE: [inaudible] DAVID MALAN: Vous avez à malloc la mémoire, ou d'utiliser un tableau sur la pile. Et vous avez réellement à faire ce tableau assez grand le montage de cette ainsi que cela, plus la barre oblique inverse zéro. Puis concaténer les ensemble en utilisant remuer chat ou manuellement avec une boucle, ou n'importe quel nombre de techniques. Et nous vous montrons un couple p-set six. Il est une douleur dans le cou. Et cela est vraiment ce que je veux dire ce rapport this-- comme C par rapport à PHP. Vous obtenez juste tellement plus fonctionnalité gratuitement, de sorte que vous pouvez vous concentrer, idéalement, sur le plaisir une partie de codage, la projet que vous voulez résoudre, plutôt que le faible niveau de minuties. Donc, ce qui génère ou simplement header.php footer.php basée sur celle que je l'appelle. Et en effet, si je vais dans index.php, préavis tout ce qui est changed-- lieu de appelant rendre en-tête ou le pied de page render, Je vous appelle rendre, suivie par le nom du modèle que je veux faire. Et vous verrez cela, aussi, dans sept problème posé, qui nous permettra d'utiliser la même fonction pour faire des bouquets et des grappes de différentes pages Web. Alors plutôt que de demeurer trop beaucoup plus sur ces details-- que vous verrez à nouveau dans jeu de problème seven-- regardons au moment du début d'une solution à un problème plus intéressant. Jusqu'à présent, rien ne nous avons a fait des données sauvegardées. En fait, la seule fois que nous ayons jamais enregistré quelque chose que nous avons fait dans cette classe est quand nous avons eu une démonstration très simple un certain temps dos, de sorte que nous avons utilisé le fichier IO en C, et je pense que je tapé mon nom, et Le nom de Hannah, et le nom de Maria, ou peut-être le nom d'Andy, et puis nous avons économisé un file-- CSV séparées par des virgules fichier valeurs. Et nous avons utilisé fopen-- je pense nous avons utilisé fprintf je me souviens bien, et nous avons économisé un fichier. Or, tel est le plus simple forme d'une base de données. Si vous voulez faire un site web pour le Programme Frosh GI, où étudiants de première année peut inscrire à un sport, vous idéalement vouloir faire quelque chose avec ces données. La semaine dernière, nous ne faisions rien avec le data-- nous venons de dire, vous êtes inscrit, pas vraiment. Ou peut-être que je l'ai envoyé Proctor, et ce fut tout. Mais ce serait bien si je pouvais donner ce surveillant un fichier CSV, comme un fichier Excel. Ou mieux encore, il serait serait bien si je pouvais mettre les noms de ces utilisateurs et dortoir noms et tout cela dans une base de données vit juste à l'infini, jusqu'à ce que je choisis de supprimer les données. Une base de données qui permet moi pour demander des informations. Et en effet, que ce qui est une base de données est. Nous introduisons aujourd'hui, et la semaine prochaine, aussi, une technologie appelé SQL-- un Structured Query Langue, qui est une autre langue. Il est essentiellement une programmation la langue, mais pour les bases de données. Et une base de données pour le moment, tout simplement considérer comme une version super chic de Microsoft Excel ou Google Feuilles de calcul ou Apple Numbers. Il est généralement un programme qui permet vous permet de stocker tout un tas de données en rangées et colonnes, tout à fait comme vous pourriez en Excel. Mais ce qui est agréable, surtout si nous ne sommes pas familiers avec des super Excel, ce SQL vous permet de faire cette requête est informations en écrivant lignes de code où vous pouvez, même si votre base de données a un million de lignes en elle, vous pouvez trouver des choses super rapide. En fait, Excel est particulièrement mauvais à grands ensembles de données. En fait, jusqu'à quelques il ya des années, est avéré Excel permettrait seulement de stocker jusqu'à 65.535 rangées de data-- qui ressemble beaucoup, mais à la fois que je suis un étudiant diplômé, et je me souviens de trébucher sur cela parce que je suis générant Les fichiers CSV pour mes recherches et je voulu les analyser rapidement en ouvrant simplement dans Excel. Bien sûr, mon ordinateur tombe en panne, parce que je devais plus de 65.000 lignes. Mais d'où vient le 65535 vient-il? Quel a été fait Microsoft, sans doute? Si vous êtes bon avec vos pouvoirs de deux? Ouais, ils utilisaient 16 bits valeur pour représenter le numéro de ligne. Et deux à 16 est 65,536-- moins un, parce que si vous signifie indice zéro qui était la plus grand nombre de lignes que je pourrais avoir. Et il était juste une décision de conception. En économisant 16 bits, ils me limitées 16.000 lignes, au lieu de 4 milliards de dollars, que je pouvais avoir, idéalement. Mais pour l'instant, nous allons introduire dans ce plus d'un contexte web. Et ce qui est bien sur SQL est que même mais il est assez puissant et assez sophistiqué, cela se résume vraiment jusqu'à quatre opérations clés, quatre fonctions clés, si vous sélectionnez, will-- pour récupérer des données, la recherche pour les données; supprimer ou supprimer des données; insert pour ajouter des lignes à la base de données; et mise à jour. Donc, si vous avez déjà utilisé Google Tableurs, Numbers Apple, Microsoft Excel, vous avez exécuté, le plus probable, tous les de ces opérations comme un être humain par simplement en utilisant votre clavier et mouse-- l'insertion de données, en utilisant vos yeux pour sélectionner ou rechercher des données, ou les données de mise à jour ou supprimer des données. Qu'est-ce que cela signifie? Eh bien, pré-installé dans CS50 IDE est un programme appelé MySQL. Il est un, open-source base de données qui est super populaire. Facebook, par exemple, utilise pour ce jour, entre autres outils qu'ils utilisent. Et beaucoup de sites très populaires utiliser en grande partie parce qu'il est rapide, et parce qu'il est gratuit. Bien sûr il existe des alternatives. Et certains d'entre vous pourraient tremper avec alternatives pour des projets finaux. Ceci est une capture d'écran, quant à lui, de un outil basé sur le Web appelé phpMyAdmin. Il est une coïncidence que cet outil basé sur le Web est également écrit dans un langage, PHP, mais ce qu'il est censé faire est nous donner un basé sur le Web une base de données à l'interface. Parce que MySQL est généralement quelque chose, historiquement vous, serait seulement interagir avec avec une ligne de commande. Et ce serait super- ennuyeux et des arcanes d'avoir à taper des commandes textuelles pour sélectionner données, insérer des données, et de suppression des données. Ainsi, certaines personnes sur Internet a écrit un programme basé sur le Web que faites-nous gérons les données dans notre base de données. Il est comme un double clic sur Excel, et l'exécution d'une version Web de celui-ci. Et ce que vous allez utiliser pour finalement, la semaine prochaine, pas dans six p-set, mais est de construire quelque chose appelé CS50 Finances, qui va avoir une base de données utilisateurs, avec des noms d'utilisateur et mots de passe, les montants en dollars qu'ils ont dans leurs comptes bancaires. Ce sera quelque chose que vous utilisez pour stocker les symboles et les quantités de stocks que les utilisateurs ont acheté en utilisant virtuelle dollars que vous allez leur donner. Et ça va permettre aux utilisateurs pour vous inscrire à votre site, de sorte que même vos amis pouvez accorder à votre site Web et fait enregistrer, connecter, et de jouer et essayer de trouver des défauts dans votre code, et essayer de trouver des bugs dans votre site web. Et ils vont tout simplement vous inscrire par eux-mêmes en ajoutant, de manière efficace, via le code que vous écrivez à votre base de données. Par exemple, ceci est une capture d'écran rapide de ce que une base de données pourrait ressembler. Ce fut l'un de Les solutions-- de l'an dernier cela ressemble à un mini-Excel déposer, stockée dans notre base de données, stockée dans ce logiciel appelé MySQL. Sur le côté gauche, je l'ai apparemment donné à chaque utilisateur un numéro unique. Dans la deuxième colonne, je vous ai donné tout le monde un utilisateur name-- ma propre parmi eux. Et sur le côté droit, Je leur ai donné une table de hachage. Maintenant, cela est réellement un mot de passe, mais pas un mot de passe de texte brut. Il est un mot de passe crypté, si vous voulez, ou un mot de passe de hachage. Que nous allons revenir à avant longtemps. Mais si vous avez déjà lu un article sur la façon votre mot de passe à une banque ou une site aurait pu être compromise, on peut généralement signifier deux choses. Donc, ceci est juste un extrait de six utilisateurs. Chacun d'entre vous peut maintenant comprendre via le piratage ou la fissuration ce que les mots de passe de nos six personnes sont. Mais si vous avez déjà obtenu une alerte ou une excuse d'une société ou site web dicton, Désolé, un hacker fait irruption dans notre base de données, vous devriez probablement changer votre mot de passe, ce qui pourrait que cela signifie? Eh bien, un, pourrait signifier la société a été plus débile, et a été stocker votre mot de passe dans une colonne comme ça, non chiffré. Ce qui signifie que l'adversaire, qui a volé la base de données, sait littéralement votre nom d'utilisateur et mot de passe. Voilà le pire scénario possible. Et comme vous le verrez dans le p-ensemble sept, si facile à éviter. Il n'y a absolument aucune excuse pour cela forme de bêtise dans l'Internet d'aujourd'hui. Two-- et nous trouverons quelques articles à témoigner du fait que ce encore qui se passe, nonetheless-- deux, peut-être l'adversaire volé cette version de la base de données. Qui est encore un peu mal, parce que maintenant Ils savent que je dois six clients, Je sais que les noms d'utilisateur de ces six clients, et je sais que la crypté versions ou les versions hachées, des mots de passe de ces six clients. Mais aucun d'entre vous qui pourraient ai fait [? Hacker 2?] où vous craqué mots de passe, ou pris Un regard sur cette version du problème ensemble, pourquoi est-il encore un peu inquiétante Si l'adversaire connaît votre hachage Les mots de passe? AUDIENCE: parce qu'ils ne pouvaient entrer dans le dictionnaire entier dans la fonction de hachage. Et si votre mot de passe est un dictionnaire mot, [? ils peuvent tout simplement match--?] DAVID MALAN: Exactement, l'adversaire pouvez simplement écrire de code, comme certains d'entre vous fait pour [? Hacker?] 2, par lequel vous itération sur tous les mots du dictionnaire, ou toutes les combinaisons possibles de A à Z et par une nine-- qui ressemble beaucoup, et il est. Mais pour un ordinateur, il est sacrément rapide. Et en fait, ce fut la le point de [? Hacker 2,?] Était de prendre des choses qui ressemble littéralement à cela, et l'ingénierie inverse ce qu'il était réellement. Donc, nous allons voir comment nous pouvons stocker cette manière plus efficace. Tours dehors, heureusement dans MySQL, il va y avoir des types de données. Et l'une des parties amusantes environ la conception de base de données, pour être honnête, est en fait de décider pour vous-même comment devriez-vous représenter les données? Si vous représenter un numéro de téléphone comme un int, comme un grand nombre, ou une longue? Ou voulez-vous faire réellement comme une séquence de caractères? Et il peut être très impacts non négligeables de cette. En fait, l'un des premières, des histoires amusantes germane est quand Mark Zuckerberg a été construit Facebook, il a été écrit en, et est encore largement écrit en PHP. Et l'un des plus grands défis ils ont fait face dès le début a été mise à l'échelle. Quand ils ont gardé ajoutant école après l'école après l'école, à ma connaissance, l'une des solutions originales était essentiellement de copier et coller certaines bases de données et une partie du code, de sorte que Harvard était courir sur son propre serveur, MIT et courait sur son propre serveur. Et ce fut la raison pour laquelle, pour certains d'entre vous qui pourrait rappeler, vous ne pourriez pas avoir des amis dans d'autres réseaux. Vous avez probablement pas amis au MIT ou d'Harvard il ya 10 ans environ, mais vous ne pouvez pas étendre les réseaux pour partie cette raison. Et l'un des plus grands défis pour Mark et pour des sociétés comme Facebook est en fait la manutention des centaines et des milliers et des millions de requêtes par seconde. Donc, les choses que nous allons commencer parler cette semaine allez vraiment être en rapport à écrire un bon logiciel, et populairement des outils efficaces qui peut gérer beaucoup d'utilisateurs. Donc, nous allons parler de choses comme indexation et la recherche, mais qui est tout pour aujourd'hui. Nous allons vous voir pour plus mercredi. [MUSIQUE - THEME "Seinfeld"] DAVID MALAN: Vous pouvez à , et en soustraire. Et vous ne devez pas coller avec un certain montant pré-déterminé de la mémoire. Eh bien, qu'est-ce que cela va être appelé? ENCEINTE 1: Eh bien, ce qui se passe? SPEAKER 2: Que voulez-vous dire? Il donne une conférence. DAVID MALAN: Et nous pouvons utiliser un fonction malloc appelé à memory-- ENCEINTE 1: Pourquoi ne sont pas les bras bougent? SPEAKER 2: Eh bien that's-- vous le savez, ce est normal. Il est juste comme il vient grandes saucisses accroché là. ENCEINTE 1: Ce qui est normal? SPEAKER 2: Ouais, je pense que nous simplement supposer il a accidentellement remplacé son déodorant avec de la colle.