DAVID MALAN: Très bien, nous sommes de retour. Donc, pour l'excitante conclusion, notre dernière section sur la programmation web, que je pensé que nous utilisons comme un terme général pour capturer quelques sujets restants. Ainsi, à la fin de la jour, nous allons effectivement faire un peu de mains sur la programmation web avec un langage appelé JavaScript. Et je pense que nous allons jeter un coup d'oeil à quelque chose lié à des images et découvrir quelque chose secrètement caché dans une image, et aussi jeter un oeil à la Google Maps API, programmation d'application interface, comme quelque chose représentatif du type de logiciels qui est de plus en plus et librement disponibles aujourd'hui. Mais pourquoi ne pas prendre un coup d'oeil à un ingrédient dans ce monde que nous avons été en sorte de en prenant pour acquis existe pendant un certain temps, une base de données. Pour la dernière journée et demi, nous avons supposé que nous avons accès à une base de données, mais ce problème ne résout une base de données? Que fait-il pour nous? Qu'Est-ce que c'est? AUDIENCE: [Inaudible] DAVID MALAN: Contient toutes les informations, OK, et quels types d'informations pourriez-vous mettre? AUDIENCE: [Inaudible] DAVID MALAN: Toute information vous mettez dedans, vous récupérerez. C'est vrai. Et sur un site web ou sur le Web typique demande, quels types d'informations, précisément, pourriez-vous mettre en? AUDIENCE: [Inaudible] DAVID MALAN: Utilisateurs. Alors qu'est-ce qu'un utilisateur? AUDIENCE: [Inaudible] DAVID MALAN: OK, enregistré utilisateur du site. Et qu'est-ce que cela signifie pour l'information des utilisateurs du magasin? Qu'est-ce que compose un utilisateur? Un utilisateur a quoi? AUDIENCE: [Inaudible] DAVID MALAN: Ouais, personnel données, et moi comme ça. Soyons plus précis. Ainsi, un utilisateur dispose typiquement d'un nom, quoi d'autre pourrait avoir un utilisateur? AUDIENCE: [Inaudible] DAVID MALAN: Une OK addr--, donc le prénom, le nom. C'est bon. En fait, nous allons fixer que, parce que ça va d'ouvrir une opportunité pour discussion, encore, plus loin. Prénom, nom, sexe. Un ID de quelque sorte. Quoi d'autre? J'ai entendu d'autre avant que quelque chose, aussi. Un e-mail, adresse postale. Donc, nous allons faire une pause là et maintenant considérer pas ce que nous stocker dans la base de données, mais-- et pas pourquoi, car il est peut-être évident qu'une fois que vous enregistrez un utilisateur, vous voulez les retenir pour un certain temps. Vous ne voulez pas qu'il juste être stocké dans la mémoire RAM et être forgotten-- donc concentrons-nous sur le comment. Il se trouve que, dans le monde des bases de données, il y a au moins deux types de ces jours. Quelque chose a appelé une base de données SQL, Structured Query Language, ou, cutely nommé, NoSQL, qui ne sont pas SQL. Et le second est un exemple de ce qui pourrait être appelé orientée objet, ou un magasin d'objets, une base de données qui stocke des objets, et non, excuse moi, comme nous le verrons bientôt, lignes. Donc, nous allons concentrer pour un instant sur le premier d'entre eux, à savoir un SQL base de données, si seulement parce qu'il est déjà si familier, à tout le monde qui a utilisé Excel ou Feuilles Google ou d'Apple Numbers ou toute norme tableur, ou, de manière équivalente, ou plus sophisticatedly, quelque chose comme Microsoft Access ou Oracle ou MySQL ou PostgreSQL, qui sont les noms de produits pour les implémentations de l'idée suivante. Une base de données relationnelle est simplement ce qui a des rangées et des colonnes. Et par des rangées et des colonnes, Je veux dire littéralement quelque chose comme celui-ci, de sorte que nous puissions avoir la le nom d'un champ et son type ici. Et en fait, laissez-moi commencer dès maintenant à la carte ci. Donc, en fait, je ne sais pas pourquoi je dessinais un tableau distinct. Gardons cette simple. Nous avons ici la débuts de notre table, où ceci est le nom du champ ce qui est le type de données, et par type, je veux dire ce qui suit. Est-il un certain nombre, est-il une chaîne, une courte chaîne comme un mot, est-il un paragraphe, est-il des données binaires, comme une image? Et disons simplement taquiner cette à part pour un instant. Donc, prénom, numéro, ficelle, gros morceau de text-- AUDIENCE: [Inaudible] DAVID MALAN: Oui, chaîne. Et dans un contexte de base de données, nous allons généralement appeler ce domaine char. Je vais juste dire omble pour le moment mais nous sommes va affiner dans un instant. champ Caractère. Nom de famille est probablement le même. Le genre? Homme ou femme, de sorte qu'il pourrait être un champ char. Il pourrait être soit entre guillemets «Mâle» ou entre guillemets "femelle" ou il peut être m ou f. Si vous voulez être plus inclusif, vous pourriez avoir besoin d'une troisième valeur ou une sorte d'autre domaine tout à fait. Et pour que vous puissiez utiliser vrai faux. Le champ pourrait être appelé mâle, et alors vous pourriez dire vrai ou faux. Mais cela ne rend pas nécessairement toutes les informations que vous voudrez peut-être. Donc, il se trouve qu'il ya un autre type de champ qui pourrait être utile ici dans une base de données classique, appelée enum, où il est un champ de caractères, mais vous, le concepteur, obtenez énumérer les valeurs possibles, comme entre guillemets "mâle", citation, unquote «femelle» et ainsi de suite. Donc, que quelle que soit la valeur est dans votre base de données, est en effet basée sur des caractères, mais elle doit être l'une de ces valeurs. Nous ne voudrions probablement pas un enum pour prénom ou nom. Sinon, nous aurions d'énumérer, comme son nom dérive de, littéralement chaque possible prénom et nom. OK, donc ce devrait ID un ID être? Oui, peut-être un certain nombre. Donc, nous allons coller avec que pour l'instant, le nombre. Et par numéro, le numéro est un peu trop large maintenant. Pour la fin de la seconde jour, je me sens comme nous devrait être un peu plus précis. Nombre pourrait signifier que, il pourrait être quelque chose comme 1.236. Et c'est probablement pas ce que nous entendons par un ID. Qu'entendons-nous probablement par un ID? AUDIENCE: [Inaudible] DAVID MALAN: Oh, OK, peut-être il est même pas un numéro. Peut-être qu'il est en fait un identifiant unique qui est une chaîne, comme un nom d'utilisateur. Donc, absolument, pourrait être. Je pense que quelqu'un probablement signifié numérique, cependant. Donc, nous allons rester avec cela. Quel genre de numéro? Qu'est-ce qu'un plus precise-- un nombre entier. Donc, un nombre comme 0, 1, 2, 3, de sorte que nous appellerons un nombre entier. Et même alors, je pouvais être tatillon, il est pas vraiment juste un entier général que vous voulez. Vous ne voulez probablement pas de valeurs négatives, juste parce que, il se sent juste bizarre. Vous voulez probablement des nombres entiers positifs. Ainsi, vous pouvez également exprimer que, dans une base de données, mais pour l'instant, nous dirons entier. Email? Ceci est probablement just-- quoi? AUDIENCE: [Inaudible] DAVID MALAN: Il est un e-mail, mais c'est des caractères, non? Il a juste un personnage génial comme un symbole «à» ou autre chose, mais il est encore un champ de caractères. Et adresse postale? champ Caractère. Voilà donc un beau début, mais soyons un peu plus précis maintenant. Donc, il se trouve que, dans une base de données, vous avez souvent avoir le choix sur plus raffiné versions de ces choses. En effet, dans une base de données SQL typique, SQL, ou de façon plus générale, la base de données relationnelle, bases de données avec des rangées et les colonnes, vous avez souvent obtenir de préciser non seulement le type de field-- permettez-moi de faire quelques ici-- de chambre mais aussi la longueur. Alors combien de temps est un prénom? Je pense que, D-A-V-I-D. OK, je l'ai eu probablement juste offensé comme la moitié des gens dans la salle, à droite, étant donné que vos noms sont plus longs que cinq lettres, donc cinq semble un peu égoïste et naïf, donc ce qui est une meilleure valeur? 10, tout droit, et je pense que nous sommes OK dans la chambre. 13? 30? Pourquoi dois-je prends pas le approche plus tôt lorsque nous parlaient des tableaux et de la mémoire? Pourquoi ne pas que je viens de dire comme 1000? le nom ne va être supérieure à 1000. Repousser. AUDIENCE: [Inaudible] DAVID MALAN: Oui, il est gaspillage, à droite, en particulier si la plupart des noms ne sont que cinq ou 10 ou 15 caractères, qui est très coûteux. Donc, vous savez quoi? C'est un peu une question difficile. Maintenant, nous pouvons certainement analyser English et les noms de toute autre langue et de comprendre, eh bien, quelle est la moyenne average-- n'a pas vraiment aider us-- ce qui est le max est probablement ce que nous voulons vraiment. Mais il se trouve que nous avons même un certain choix sur le type ici. Dans une base de données SQL typique, vous ont quelque chose appelé un champ omble et aussi un varchar, V-A-R, pour le champ char variable. Et la différence est la suivante. Un champ de char, vous le concepteur, doivent spécifier à l'avance la longueur exacte du champ. Alors peut-être le premier nom comme 20 se sent sorte de coffre-fort. Pourrait avoir à faire quelques googler à voir si cela suffit réellement sans danger. Il y a probablement un nom avec 21 caractères, mais pour l'instant, supposons 20 est sans danger. Un champ char impliquerait dans une base de données que vous sont en utilisant 20 et toujours 20 caractères. Maintenant, si elle est juste D-A-V-I-D, 15 de ceux ne sont que va être des caractères blancs, mais vous êtes toujours en utilisant tous les 20 octets. Un champ varchar, en revanche, les moyens de chaîne doit être jusqu'à 20 caractères mais si elle est seulement cinq, vous allez seulement utiliser cinq, ou peut-être six pour un valeur spéciale à la fin, comme ça 0 nous avons discuté de ce que signifie la fin d'un caractère séquence dans la mémoire. Alors, quand pensez-vous vous pouvez choisir l'omble par rapport à varchar, étant donné que le commerce-off? Char utilise que de nombreux caractères, varchar utilise pas plus que de nombreux personnages. AUDIENCE: [Inaudible] DAVID MALAN: OK, lorsque vous connaissez la longueur de la chaîne assez convaincante d'utiliser simplement char, parce que si vous le savez, il suffit de mettre le bas. Et peut-être cela est vrai pour un zip code, aux États-Unis, au moins, 02138, il va toujours être de cinq caractères jusqu'à ce que vous ajoutez le tableau de bord quatre. Mais vous pourriez avoir quelques valeurs pour que vous connaissez toujours la longueur. Ou peut-être des symboles de l'Etat, comme NY pour New York, et MA pour le Massachusetts aux États-Unis. Peut-être que vous n'avez certaines situations où cela est tout à fait raisonnable, mais par cette logique, pourquoi nous avons même overthinking cela? Pourquoi utilisons-nous pas seulement varchar puis nous allons juste toujours utiliser deux caractères de toute façon, ou toujours utiliser cinq caractères de toute façon? Pourquoi ne pas simplement enregistrer varchar pour tout, par cette logique? Il doit y avoir un hic. AUDIENCE: [Inaudible] DAVID MALAN: Could écrire quelque chose de mal. Donc, ce qui est vrai. Mais même alors, ils ne peuvent pas utiliser plus de mémoire que j'allouer. J'ai encore la finale dire sur la longueur, de sorte qu'ils ne puissent pas faire cette erreur, mais une bonne pensée. Il est plus subtil, mais il est très lié à notre discussion, en fait, de tableaux et listes liées plus tôt. Il se trouve que la base de données si on sait que toutes les valeurs sont d'une longueur fixe, même si certaines de ces valeurs sont vides, sorte d'esthétique vierge, D-A-V-I-D et 15 blancs, il se trouve que si chaque champ est la même longueur, un peu comme un tableau avait tous ses trucs dos à dos à dos à dos de telle sorte que vous pourriez juste plus 1 pour se rendre à la prochaine valeur, même idée dans une table de base de données. Si tout votre personnage les chaînes ont la même longueur, vous avez ce qu'on appelle l'accès aléatoire. Si toutes les chaînes sont des longueur 20, vous faites non seulement faire plus 1 vous faites juste, plus 20, plus 20, plus 20, plus 20, et vous pouvez très rapidement faire défiler ou recherche à travers toutes vos données. Un champ de la variable de carbonisation, au contraire, n'a pas toujours 20 caractères. Il pourrait avoir 20 puis 15, puis 19, puis 10, et donc si vous voulez rechercher à travers elle, vous ne pouvez pas aveuglément ajouter 20 octets pour se rendre à la prochaine. Vous avez littéralement à parcourir parce que le bord de la structure de données, si vous voulez, est en lambeaux. Ce genre de va et basée sur la longueur réelle de la corde. Donc, quand vous savez que la longueur, comme Kareem dit, utiliser un champ de char, parce que vous gagnez l'efficacité d'être capable de rechercher à travers elle plus rapide lorsque vous êtes à la recherche pour les données, sinon utiliser une variable. Malheureusement, je ne bonne réponse combien de temps le nom devrait être, mais pour quelque chose comme un nom, je dirais varchar est commun parce que ça ne va pas être une longueur fixe pour tout le monde. 20, je ne sais pas, 20 sent un peu serré. Disons simplement que 50, 50. Il n'a pas vraiment vous coûte que beaucoup plus à dire 50 au lieu de 40, mais à un moment donné, vous avez besoin pour faire un appel du jugement. Très fréquent, franchement, pour [? historique ?] raisons, même si elle est excessive, est-à-dire 255, parce que il y a quelque temps, dans les systèmes de bases de données populaires, comme MySQL, un outil gratuit open source que beaucoup de sociétés comme même Facebook utilisé, ce fut le défaut maximal afin que les gens juste allé avec elle. Donc pas déraisonnable, mais nous allons utiliser un peu plus d'intuition et dire, que 50, qui est probablement un peu excessive. Sexe, je fais comme enum, et ainsi nous pouvons donc énumérer mâle ou femelle, ou peut-être plus efficace, m ou f ou d'un autre symbologie, mais enum se sent comme un bon choix là-bas. Pour être clair, le sexe pourrait juste être un varchar, et nous pourrions tout simplement d'accord que des gens sympathiques, de toujours mettre les mêmes valeurs là. Homme ou femme ou quoi. Mais le problème est donc que nous pourrions faire une erreur, comme [Inaudible] proposé précédemment dans un contexte différent. Si nous faisons une erreur, nous pourrions obtenir des valeurs incorrectes dans notre base de données. Alors qu'est-ce qui est bien sur les bases de données comme Oracle et MySQL et d'autres, est que vous avez cette dernière couche de défense où votre administrateur DBA, base de données, celui qui conçoit ce tableau comme nous sont verbalement, pourrait mettre en place un enum qui protège contre ce en spécifiant mâle, femelle, et donc personne ne d'autre aucun programmeur peut accidentellement insérer toute autre valeur. Donc, ce serait une bonne chose. Ceci est une caractéristique. Donc, une pièce d'identité, en supposant un identifiant numérique, il devrait probablement être un entier positif. Et nous ont parfois occasion de discuter longuement. Vous ne voudriez pas généralement spécifier un numéro ici, vous à la place de spécifier ceci est un int, ou un grand int, car ils sont généralement appelés. Mais en général, un nombre entier serait, disons, 4 octets. Et si elle est de 4 octets, qui est le nombre de bits? AUDIENCE: [Inaudible] DAVID MALAN: 32 bits. Donc, le nombre d'utilisateurs que nous pouvons avoir dans notre base de données si elles ont tous un ID et cet ID doit être unique? 32 bits signifie que nous avons des motifs d'un, deux, trois, quatre, five-- alors comment de nombreux modèles différents de zéros et ceux peuvent vous s'il y a 32? C'est la même chose que demandant ce qui est de deux à 32? Il est un grand nombre qui Je ne peux pas tout à fait obtenir le droit, mais je sais qu'il est à peu près 4 milliards. Donc, cela signifie que votre table de base de données peut ont quatre milliards d'utilisateurs et voilà. Donc, ceci est un intéressant conception implication. Un nombre décent d'entreprises ont décidé, peut-être pas tant pour leur table d'utilisateurs, parce qu'ayant 4 milliards d'utilisateurs est un problème rare. Ceci est une sorte de style Facebook problème, pas un problème de société typique. Mais peut-être si vous avez des journaux de transactions ou une sorte de données constamment les écrit dans votre base de données qu'absolument pourrait avoir des milliards et des milliards de lignes et vous utilisez un entier pour elle, ce qui va se passer dès vous obtenez à la ligne numéro 4 milliards et puis vous essayez d'insérer le 4000000000e et 1, pour ainsi dire? Je simplifie les numéros un peu. Vous pouvez réduire, je te veux dire avoir à gérer en quelque sorte. Et quel ordinateur serait généralement faire, penser même à partir de ce matin, si vous avez une valeur de 4 bits comme 1, 1, 1, 1, qui, juste pour attacher le matin ensemble pour l'après-midi, ce qui est-ce nombre représente en binaire? OK, nous allons faire plus facilement. Qu'est-ce que ce nombre représentent en binaire? OK, nous allons faire plus facilement, ce qui ce que cela représente en binaire? AUDIENCE: Trois. DAVID MALAN: Trois, parce nous avons ceux column-- [RIRE] Ouf! Nous avons eu la colonne des unités et la colonne de deux. Supposons donc que, en effet, notre [? infield?] étaient pas 32 bits, mais ce sont deux bits, nous pouvons compter du numéro 0, 1, 2, 3 utilisateur, et nous sommes en quelque sorte retour à l'utilisateur 00 à nouveau. Donc, voilà ce qui arrive généralement. Si vous avez déjà entendu le expression-- probablement pas, mais si vous have-- débordement d'entier, où vous garder retournement tous vos morceaux être les plus grandes valeurs possibles, et puis vous êtes hors de bits, ce qui serait généralement arriver? Pourquoi dis-je 00? Eh bien, cela est trois. Comment puis-je représente 4? Comment puis-je représente la pour le numéro 4 en binaire? AUDIENCE: [Inaudible] DAVID MALAN: One-- ouais, ne pas dire 100 en soi, parce qu'il a le mauvais connotation, mais 1-0-0. Donc, ce nombre 1-0-0 est en effet correct, mais si vous avez seulement deux bits, qu'est-ce que vous avez vraiment fait? Vous avez roulé sur 00. Et en effet, voilà ce qui se passerait. En fait, vous pouvez penser sur cet aspect plus familièrement. Si vous vous souvenez, ce qui, il y a 16 ans, le monde était censé prendre fin lorsque le problème Y2K est arrivé. Pourquoi? Eh bien la plupart des ordinateurs, pour des décisions raisonnables, ont été le stockage des numéros comme le 1975 ou l'année 1999 en utilisant simplement deux chiffres dans la mémoire de l'ordinateur. Alors bien sûr, ce qui se passe quand vous arrivez à l'an 2000, vous allez à cela, ou plutôt, oui. Donc, vous allez à l'an 2000, mais si vous êtes seulement en utilisant deux chiffres, il regarde comme l'année 00 et de sorte que vous avez roulé sur. Et voilà pourquoi beaucoup de systèmes nécessaire pour être mis à jour à l'époque. Donc, avec cela dit, des sociétés comme Facebook courir contre cela. Donc, la seule façon de gérer la la situation, franchement, est d'anticiper. Ou la manière la plus propre à gérer cette situation est d'anticiper afin de ne pas avoir à faire des changements plus tard. Ainsi, au lieu de 8 octets, vous savez quoi? Je vais être avant-gardiste ici, même si elle est un peu optimiste nous allons avoir 4 milliards et 1 utilisateurs sur notre site Web. Mais nous allons simplement utiliser 8 octets, ou 64 bits, ce qui serait généralement appelé un grand entier, très technique. Et cela signifie que vous pouvez avoir encore plus de chiffres dans votre numéro. Mais ceci est une importante décision de conception, parce que si vous choisissez un nombre qui a trop peu de bits d'expressivité vous pouvez réellement créer un bug dans votre logiciel. Très bien, alors laissez Terminons avec email et adresse postale. Donc, email, combien de temps devrait une adresse e-mail soit? 50. Je ne sais vraiment pas, mais il est probablement quelque chose comme ça, parce que sinon on ne va vous écrire si elle est trop longue, de sorte que 50, allons avec elle pour le moment. Adresse postale, combien de temps devrait-il être? AUDIENCE: [Inaudible] DAVID MALAN: Il est pas juste un code postal, cependant. Adresse postale, j'ai entendu. Donc, cela ressemble à 1 Brattle Square, virgule, Cambridge Mass., virgule, 02138. Et en fait, permettez-moi de tirer un peu feuille ici. Cela se sent comme il est une occasion manquée. Si nous avons 1 Brattle Square, virgule, Cambridge MA 02138, Je me sens comme nous pouvons faire mieux qu'un simple adresse postale. Pourquoi avons-nous exploser ce pas un peu? Que suis-je en venir? Que devrions-nous avoir la place pour nos lignes ici, peut-être? AUDIENCE: [Inaudible] DAVID MALAN: Oui, nous allons donc appeler street_number, et un trait de soulignement est juste une commune façon d'avoir ce qui ressemble à un espace, mais pas, en fait. Street, puis ville-- désolé? AUDIENCE: [Inaudible] DAVID MALAN: Nous pourrions faire cela. Ligne un, la deuxième ligne. Pourquoi ne pas nous conserverons simple pour l'instant, mais cela est tout à fait une décision acceptable. Et puis l'état, puis nous allons être un peu centré sur les US pour l'instant et juste faire code postal, juste parce que il va conduire à une erreur intéressante ou un problème ici. Donc, supposons que maintenant est notre adresse. Il est un peu plus ennuyeux que nous avons tous ces autres domaines, mais maintenant nous pouvons marquer les choses un peu mieux. Numéro Alors maintenant la rue probablement ne devrait pas être un char, devrait-il? Que devrait-il être? AUDIENCE: [Inaudible] DAVID MALAN: Peut-être, un certain nombre comme un entier à nouveau? Un grand nombre entier? Vous avez probablement ne vivez pas à 4 milliards de Main Street ou quelque chose de fou comme ça. Donc entier est probablement très bien, mais il a tout le monde jamais vécu à une adresse comme 1A Brattle Square, ou 1 et 1/2? Ces choses existent, malheureusement, même si vous ne l'avez pas vécu là-bas, il y a ces anomalies comme appartement 1A, 1B, 1C. Donc, vous savez quoi, nous avons probablement ne devrait pas aller avec entier, sinon nous allons perdre quelques ventes. champ Char, peut-être? Je ne sais pas combien de temps. Il est probablement ne va pas être ce long, donc 10 ou quelque chose. Personne ne va à écrire un nombre plus, peut-être. Mais encore une fois, nous devrions probablement donner plus de pensée à ce sujet. Peut-être que google, faire des recherches, mais nous irons avec nos tripes pour le moment. Rues, char, 50, je ne sais pas. À un certain moment, personne ne va de l'écrire sur une enveloppe, aussi, donc il n'y a probablement certaines limites supérieures là-bas. Ville, même, bien sûr, de sorte carboniser 50. État, peut être centré sur les US pour l'instant. Ainsi, il pourrait être une liste, si gentil d'un appel de jugement, l'Etat. Il pourrait être comme deux caractères. Donc en fait, peut-être, je répétais l'omble. Je veux dire probablement varchar, seulement pour une certaine efficacité, mais nous y reviendrons cette décision dans un moment. Peut-être un caractère de longueur 2 pour l'état. Si aux États-Unis, ils ont, comme MA, Massachusetts, État de New York, New York, New Jersey, New Jersey, et ainsi de suite. Donc, il pourrait être fixé à ce sujet. DC pour Washington DC. Mais je pense que, Olivier, vous proposé une autre approche. AUDIENCE: [Inaudible] DAVID MALAN: Oui, il est donc un peu ennuyeux à taper, mais une énumération serait plus logique, car de cette façon, au moins aux États-Unis, vous pourriez énumérer, si fastidieusement, mais vous faites juste une fois dans votre base de données et ne jamais avoir à nouveau penser à elle, tous les 50 codes de deux caractères. J'aime enum. Restons avec ce là, parce que il sorte d'applique une plus grande rigueur. Et puis zip code? Je pense que Andrew a eu une pensée sur ce AUDIENCE: [Inaudible] DAVID MALAN: Oui, cinq ou neuf. Disons simplement rester simple. Il suffit de faire cinq pour le moment. Mais peut-être que je pourrais juste faire un entier, non? Je pourrais, mais vous savez quoi, je fait cette erreur une fois, dans un certain sens. Il y a des années, je suis la migration à partir Microsoft Outlook à Gmail, et Outlook a une façon d'exporter tous vos contacts sous forme de fichier Excel, un fichier CSV, séparés par des virgules fichier de valeurs. Et je fait l'erreur, je penser, de double-cliquant dessus, une fois que je téléchargé l'exportation, à assurez-vous qu'il regardait comme je m'y attendais. Je dois avoir frappé Enregistrer ou laisser auto-save coup ou quelque chose. Parce que quand je puis importé dans Gmail, tout fonctionnait. Mais pendant des années, jusqu'à ce jour, et Je l'ai fait cinq, il y a 10 ans, Je suis toujours à trouver des amis qui ont adresses qui ressemblent à ceci. Pourquoi? AUDIENCE: [Inaudible] DAVID MALAN: Il a fallu le 0, eh bien, plutôt, il a pris tout le code postal comme un certain nombre, et donc il est un 0 qui signifie il n'a pas de sens. Et 2138 semble être mon code postal. Et cela est, franchement, Excel ennuyeux fonction pour laquelle je pense que par défaut, même si elle est destinée à tout être du texte, Microsoft Excel décide, laissez-moi être utile, et oh, je ne vois que des chiffres. Nous allons les traiter comme des numéros. Et il tronque les zéros. Je jure devant Dieu, tous les deux mois, je trouve une adresse, et sur une sorte de trouble obsessionnel-compulsif, je reviens et ajouter le 0, même si je ne envoyer des gens de lettres ou de quoi que ce soit. Mais je suis encore trouver des restes de cela. Donc, c'est-à-dire, est-ce une bonne idée? OK, non, parce que tout le monde en Massachusetts, dans ce domaine, va avoir un o les conduisant. Allons donc avec comme char, probablement, cinq. Et ici, nous rendre compte pourrait utiliser une énumération et nous pourrait énumérer 10.000 codes postaux possibles, mais cela se sent comme il est probablement traverser une ligne de, comme, avantages. Si vous avez à l'entrée que beaucoup de données dans votre base de données pour protéger contre quelque chose. Donc, l'omble réalisé vous pouvez taper en H-E-L-L-O en tant que votre code postal, ce qui est évidemment pas numérique. Donc il n'y a aucun moyen, en une base de données classique, spécifier uniquement numérique et seulement cinq caractères, de sorte que nous allons avoir de le faire dans le code. Nous allons le faire en PHP ou Java ou quelle que soit la langue que nous sommes en utilisant sur le serveur pour appliquer ce genre de contrainte. Whoo! D'accord, donc des questions pour l'instant? Faisons une autre décision de conception. Il se trouve que vous obtenir aussi de choisir, lors de la conception d'une base de données SQL, ou database-- typiques relationnelles où encore une fois, juste relationnelle des moyens lignes et colonnes, voilà comment vous organisez vos data-- et se rendre compte que ce que cela signifie est, J'ai été trompeuses dans ça, je suis drawing-- cette est ce qu'on appelle le schéma pour une table de base de données. Cela ressemble à la spécifications pour le table-- mais quand vient le temps pour réellement stocker des données, et nous ferons ce que par exemple ici. Je vais ouvrir Excel, parce Excel va me donner des lignes et des colonnes. Et c'est exactement ce que Oracle et MySQL et d'autres outils vont me donner. Donc, je vais juste utiliser pour l'amour de la discussion. Laissez-moi aller de l'avant et d'ouvrir un document représentatif ici, agrandir un peu. Ainsi, par exemple, nos têtes sont maintenant prénom, nom, sexe, ID, email, numéro de rue, rue, whoops. Rue, ville, état, juste convient à propos de l'écran. Donc, cela signifie que lorsqu'un utilisateur enregistre d'abord pour mon site, ça va être quelque chose comme David, Malan, m, disons 1, malan@harvard.edu, numéro de rue sera être comme 1 Brattle Square, Cambridge, MA, 02138, puis ainsi de suite. Donc, quand je dis qu'une base de données relationnelle ou une base de données SQL est rangées et colonnes, Je veux dire. Que les données réelles sont stockées en lignes et en colonnes. Ceci est juste une coïncidence, que nous parlions, et je viens de le dessiner en lignes et en colonnes. Ceci est juste le schéma, la définition globale. Donc, de ces champs ici, ou de manière équivalente, là, quels sont les domaines que vous pensez Je suis susceptible de rechercher sur si je suis un utilisateur ou si je suis l'administrateur de base de données? Comme, quels domaines suis-je effectivement aller à la recherche sur? AUDIENCE: [Inaudible] DAVID MALAN: Le nom, ouais donc J'aime le fait that-- ouais, email pourrait être assez commun. Désolé, vous avez dit nom. Alors maybe-- et encore, nous sommes sorte de parler dans l'abstrait. Je ne sais pas pourquoi vous feriez être à la recherche d'un nom, mais qui se sent raisonnable si vous êtes à la recherche d'un utilisateur. Peut-être que les Etats, bien sûr, ID. Et il est un glissante pente, parce que je pouvais ingénier un scénario où peut-être mon patron m'a demandé, combien d'hommes avons-nous sur notre site? Combien de femmes avons-nous sur notre site? Et à ce moment-là, vous voudrez peut-être pour la recherche sur le terrain entre les sexes, aussi, et rien d'autre. Donc, il y a un compromis ici. Encore une fois, il n'y a pas bonne réponse, mais il est une caractéristique dans la plupart des bases de données SQL connu sous le nom d'indexation, de sorte que vous, le concepteur, le administrateur de base de données, se décider à l'avance qui Les champs de la base de données devrait optimiser pour les recherches sur. Vous pourriez très naïvement dire optimiser ce, d'optimiser cela, optimiser cela, optimiser cela et ce, et la base de données faire quelque chose magique sous le hotte, et faire quelque chose de manière que la prochaine fois que vous recherchez sur l'un de ces domaines, il sera, en fait, être plus rapide. C'est possible. Il ne s'annule pas. Mais il doit y avoir un prix payé. Si vous naïvement, ou trop d'enthousiasme disons, index tous ces domaines, pour ainsi dire, faire tous efficacement consultable, quel prix vous payez probablement? AUDIENCE: [Inaudible] DAVID MALAN: Performance. Que voulez-vous dire? Ainsi le rendement, au moins dans la contexte je parle, est mieux maintenant. Voilà la définition de l'indexation. Il fera des recherches plus rapidement. Donc, le temps diminue, pour ainsi dire. AUDIENCE: [Inaudible] DAVID MALAN: Space. Encore une fois, ce sont un métier commun. Je peux accélérer vos recherches, mais il est va vous coûter plus d'octets d'espace. Pourquoi? Eh bien, par défaut, si nous avons aucun des ces étoiles rouges, aucun de ces indices, comme je l'ai dit, comment voulez-vous rechercher un nom dans cette base de données? Donc, nous allons tirer notre attention à cet exemple. Si nous avons David et Scully et Kareem et Arwa et d'autres dans ces lignes, par exemple. Donc, nous allons faire exactement cela. Scully est ici, puis nous avons Kareem, et Arwa, et tout le monde, si vous ne le faites pas ont un indice défini, pour ainsi dire, le mieux que vous pouvez faire est la recherche linéaire. Si vous recherchez Arwa, nous ne sommes pas va être en mesure de sauter droit de la rapidement. Nous allons commencer en haut et aller tout le chemin vers le bas, pas à la différence de notre originale par exemple Mike Smith. Si, cependant, je dis, hey, base de données, indexer le premier champ de nom, alors il va faire quelque chose colombophile et soutenir quelque chose comme la recherche binaire. Il est probablement pas binaire de recherche en soi. Les bases de données ont tendance à utiliser un autre structure de données appelée b-arbres, à ne pas confondre avec des arbres binaires, qui vient de le rendre plus rapide à la recherche quelque chose logarithmique dans la nature. Mais le prix que vous payez pour construire que fonctionnalité, cette structure de données dans la mémoire, est plus d'octets. Ainsi, il pourrait prendre quelques mégaoctets, quelques giga-octets, qui sait? Cela dépend des données. Donc, à un moment donné, vous devez décider, il est probablement pas un cas commun. Alors, quelles sont la réelle commune des cas, si vous avez vraiment eu à choisir, ce qui pourrait être vos domaines de prédilection? Email. Et j'aime email parce email, en théorie, devrait être unique. Et si typiquement, quand vous savez à l'avance que l'un de vos champs est ou sera unique, que a tendance à être un bon champ à la recherche, parce que de cette façon, lorsque vous recherchez quelque chose, vous allez récupérer un ou zéro réponses et vous avez terminé. Vous n'êtes pas obligé de garder à la recherche d'autres encore. Et dans ce cas là, email, aussi longtemps que vous ne pouvez pas enregistrer deux fois avec le même email, est un bon. ID par définition, dans la la science informatique mondial, si vous parlez d'un ID, qui avait mieux d'être unique. C'est un peu la connotation d'ID ou identifiant. Et le reste de ceux-ci pourraient être, appelons-les bien de nantis, mais pas vraiment nécessaire. Et dans une base de données, vous spécifiez les index, mais vous pouvez être encore plus précis. Vous pouvez dire, hey, base de données, assurez-vous que chaque ID dans ce tableau est unique. Ne même pas laisser un programmeur accidentellement mis dans un e-mail en double ou dupliquer numéro d'identification. Donc, un peu comme les énumérations nous protéger de manière similaire, vous peut avoir les moyens de défense de niveau inférieur. Et donc la conception de base de données, en un certain sens, est une sorte de plaisir, parce que vous le faites à la défense. Vous sorte de supposer que vous travaillez avec horribles, horribles programmeurs et vous voulez mettre en autant de défenses que vous pouvez pour protéger vos données, mais en même temps vous voulez pour les aider à un meilleur rendement en choisissant les champs d'optimiser pour. Mais vous ne pouvez pas nécessairement le faire dans un vide comme nous sorte de sont ici. Vous devez savoir quels sont les cas communs étant. Si les développeurs sont la mise en œuvre d'un carnet d'adresses, vous pourriez très bien voulez être en mesure pour la recherche sur presque tous les domaines, seulement par la nature de l'application. Alors peut-être que vous dépensez que l'espace supplémentaire. Droit, des questions? Ouais. AUDIENCE: [Inaudible] DAVID MALAN: Non AUDIENCE: [Inaudible] DAVID MALAN: OK. AUDIENCE: [Inaudible] DAVID MALAN: Oh, donc nous parlons d'une manière maintenant que est tout à fait la langue agnostique. Donc, nous parlons maintenant bases de données relationnelles plus généralement, ou bases de données SQL plus généralement. AUDIENCE: [Inaudible] DAVID MALAN: Un meilleur mot à utiliser est, peut être utilisé par toutes les langues. Je peux donc écrire du code JavaScript, C code, code C ++, le code Java, le code Ruby, qui tous parlent à un requêtes de base de données et exécuter. En fait, ce n'est pas une mauvaise segue à un exemple de requête. Et encore une fois, on ne va pas aller dans Java ou C ++ ou tout cela plus, mais dans SQL, la langue à laquelle je garde se référant, Structured Query Language, cela est en soi un langage de programmation, mais il est destiné à être utilisé pour, aucune surprise, structuré de requêtes d'interrogation. Par cela, je veux dire ceci. La façon dont vous sélectionnez les données à partir d'une base de données MySQL est littéralement vous tapez dans votre programme quelque chose comme select étoile des utilisateurs. Je suppose que ce tableau, désormais est appelé les utilisateurs. Je pourrais l'appeler tout ce que nous voulons, mais ce genre de logique. Et sélectionnez est un très verbe commun, si vous sera, dans SQL, est-ce que la lettre que. Que pensez-vous étoiles signifie dans ce contexte? AUDIENCE: [Inaudible] DAVID MALAN: Je suis désolé? AUDIENCE: [Inaudible] DAVID MALAN: Pas nécessaire, il est plus inclusif que cela, en fait. Il est le caractère générique. Étoile presque toujours signifie quoi que ce soit, donc cela signifie, dans ce cas, tout sélectionner à partir de la base de données. Donc, quand je dis cela, je veux dire rends-moi chaque colonne de ma table appelée utilisateurs. Donnez-moi donc un jeu de résultats, comme on l'appelle. En d'autres mots, donnez-moi une copie de la tableur, est ce que je veux en venir. Mais si je disais select étoiles des utilisateurs où ID est égal à 1, la taille devrait mon jeu de résultats alors? Ou de manière équivalente, le nombre de lignes devrait Je être remis en retrait de la base de données? Probablement juste un, si je dois en effet ID traité comme un identifiant unique, et si David a cette ID unique, je devrait revenir une et une seule rangée contenant toutes les informations de David. Si je l'ai dit où ID est égal à 99, je devrais retourner, dans ce contexte, aucune ligne, au moins à l'heure actuelle. Toutefois, si je ne me soucie pas vraiment à propos de toutes ces informations, Je pourrais dire, où David vit-il? Sélectionner le code postal de utilisateurs où ID est 1. Cela permet de sélectionner seulement à moi zip David Code et non la totalité de cette ligne. Pourquoi pourrais-je faire cela au lieu de la requête d'étoile, la wild card? AUDIENCE: [Inaudible] DAVID MALAN: Oui, je pourrais seulement besoin. Donc, la performance est à nouveau la réponse ici. Pourquoi demander plus informations que vous avez besoin, parce que même si elle est bien ensemble, vous avez encore de copier ces données, il semblerait, à partir de la base de données en quelque sorte votre programme, et c'est tout simplement ridicule si vous seulement besoin de cinq de ces chiffres, pas la totalité de la ligne. Alors, comment puis-je insérer un utilisateur? Supposons qu'un utilisateur a juste enregistrée pour la première fois. La syntaxe serait généralement ressembler à ceci. Insérer dans les utilisateurs, et alors nous dirions des valeurs, puis nous dirions des valeurs comme, disons, Lauren Scully, notre vidéaste ici. Et le champ suivant est le sexe. Donc, nous allons dire entre guillemets "F", alors nous avons un ID et je vais say-- nous allons prétendre qu'elle est pas vraiment ici, donc nous allons rembobiner dans l'histoire. Donc 2 sera son ID. Et puis le champ suivant voici son email. Donc, ça va être comme Lauren Scully et ainsi de suite, et nous allons simplement dot dot dot loin de là sur. Maintenant, il va obtenir un peu fastidieux, mais la requête d'insertion finirait par ressembler à ça. Si je veux me débarrasser de Scully, uh-oh, disons désenregistrer elle, elle supprime son compte, supprimer des utilisateurs où ID est égal à 2, va se débarrasser de Scully. Ou je peux dire les utilisateurs de mise à jour définis, disons, que pourrions-nous changer? Supposons qu'elle se déplace. Set zip est égal à 021-- Nope, qui est son zip actuel. 90210. Le seul autre code Je sais que dans le monde. Alors que cela changerait son zip code-- effectivement, cela ne changerait pas son code postal. Qu'est-ce que je viens de faire? Même si la syntaxe est probablement nouvelle. AUDIENCE: [Inaudible] DAVID MALAN: Oui, je me suis déplacé tout le monde à Beverly Hills, en Californie. Donc je devrais effectivement dire où ID est égal à 2. Et ainsi de suite. Donc, SQL est tout au sujet de ces types d'instructions. Sélectionnez, insérer, supprimer, mettre à jour, avec ces prédicats à la fin ces clauses where, pour ainsi dire. Et il y a beaucoup plus que vous pouvez faire, mais il a vraiment se résume juste en bas simplement, si arcanely, exprimant ce que vous voulez que la base de données à faire. Et puis la base de données va comprendre, quand vous insérez Lauren Scully dans la base de données, où la mettre en mémoire afin que nous puissions très rapidement obtenir son basé sur son adresse e-mail ou sur la base de son numéro d'identification ou analogue. Ouais, Dan. AUDIENCE: [Inaudible] DAVID MALAN: Très bonne question. Est-ce que ces scripts de changer Microsoft Access à Oracle MySQL vers PostgreSQL? La réponse courte est que cela dépend. En théorie, il existe une très sous-ensemble commun significatif de SQL qui est partagé dans l'ensemble de ces mises en œuvre. Cependant, divers fabricants ont ajouté des fonctionnalités à leurs bases de données pour faire certaines choses au-delà de la portée de ces caractéristiques, qui pourrait, en fait, briser. Donc, la façon dont les développeurs couvrir contre cela, est que, plutôt que d'écrire brut code SQL comme je vous écris ici, ils utilisent à la place une bibliothèque, une bibliothèque commune qui se est de niveau supérieur en quelque sorte et les résumés de là qui produit que vous utilisez. Et il vous donne fonctions et procédures d'appeler de sorte que vous ne réellement écrire SQL brut. En théorie, donc, vous pouvez changer produits d'Oracle à Microsoft ou vice versa, ou quoi que ce soit d'autre, et vous littéralement rien changer au sujet de votre code. La réalité, cependant, est, vous parfois renoncer à des caractéristiques à la suite. Vous pourriez avoir choisi un produit parce il possède ces caractéristiques à valeur ajoutée, et vous êtes juste pas maintenant les utiliser consciemment. Et anecdotique, la plupart des entreprises ont tendance jamais de se déplacer loin de leur base de données. Ainsi, alors que ceci est un bon de ont fonctionnalité, la réalité est, si vous êtes la refonte votre base de données, vous êtes probablement faire des grappes d'autres changements de toute façon, que vous ne faites pas nécessairement besoin d'anticiper cela. Donc, il est sans doute over-engineering du problème, mais cela dépend vraiment du contexte. Mais en théorie, SQL est partagée sur ces différents produits. Vraiment de bonnes questions. Ouais. AUDIENCE: [Inaudible] DAVID MALAN: Ouais, donc vous pouvez penser une base de données est juste un serveur, à la fin de la journée, et à l'intérieur de ce serveur est tout un tas de tables, des lignes et des colonnes. Et lorsque vous envoyez une requête comme ceci à partir de votre programme, votre site web, écrit en Java, Ruby, Python, que ce soit, le serveur reçoit cette commande et l'interprétation dans littéralement de la même façon nous avons discuté plus tôt avec langages interprétés, puis effectuer une action sur le zéro ou plusieurs lignes de zéro ou plusieurs tables. AUDIENCE: [Inaudible] DAVID MALAN: Exactement, exactement. Donc, le pseudocode pour quelque chose comme ce pourrait être cela. Dans votre fichier PHP ou votre fichier Python ou votre fichier Java, vous auriez du code pseudocode, ou blocs Scratch-like que, si les visites des utilisateurs acme.com/register~~V pour la première fois, puis l'insérer dans les utilisateurs et ainsi de suite. Et nous traduisons cela plus de code concret à la fin. Mais vraiment, nous avons tous les blocs de construction ici, même si nous sauter quelques-uns des étapes de mise en oeuvre. Alors permettez-moi de trouver à redire à ce que nous merveilleusement fait il y a un instant. Vous avez créé une jolie tableau complet pour les utilisateurs. Certes, nous pourrions mettre en œuvre en quelques façons différentes, mais vous avez réellement nous conduit en bas de la path-- et je vous dis, mais il est probablement mon fault-- d'une assez la mise en oeuvre de bases de données inefficace. Ce n'est pas normalisée. Et je veux dire normalisée il va être, au fil du temps, une redondance importante, et donc l'inefficacité, qui est gaspillage d'espace. Basé sur seulement ce que vous voyez ici, peut vous imaginez où ces déchets de l'espace va venir, au fil du temps, que le registre de plus en plus d'utilisateurs pour votre site web? Quelles données pourrait devenir redondant? AUDIENCE: [Inaudible] DAVID MALAN: Pourquoi voulez-vous dire? AUDIENCE: [Inaudible] DAVID MALAN: Oui. Et supposons aux fins d'aujourd'hui que cela est vrai. Les tours dehors, et nous avons appris cette la dure, qui est pas vrai. Somehow plusieurs villes ont, en quelque sorte, le même code postal, qui rompt cette merveilleuse intuition. Mais supposons que ce soit vrai, car il est presque toujours vrai. Donc, supposons qu'un code postal est toujours associés à la même ville et de l'Etat, qui est une sorte des hypothèses raisonnables, mais incorrect, il se trouve. Mais une hypothèse raisonnable pour les besoins d'aujourd'hui. Puis suppose que je vis à Cambridge, MA, selon la table de cet utilisateur, et supposons que Lauren Scully vit à Cambridge, MA, et supposons que Kareem vit à Cambridge, MA, et Arwa vit à Cambridge, MA, nous tous en 02138. Pourquoi sommes-nous souvenant de Cambridge, MA, 02138 pour les quatre d'entre nous? Que devrait suffire à retenir? AUDIENCE: [Inaudible] DAVID MALAN: Juste le code postal. Juste que 02138 existe, parce que vous savez ce que nous pourrions faire? Nous pourrions obtenir un peu de fantaisie ici et ici, définir une autre table où cela va être le nom, cela va être le type, cela va être le longueur, et désormais, je suis va appeler cela ma table de villes. Cela a été appelé, de Bien sûr, ma table d'utilisateurs. Et que dois-je mettre ici pour ma table villes, pensez-vous? AUDIENCE: [Inaudible] DAVID MALAN: Oui. Donc, zip et de l'État et la ville. Et donc le type ici, on va dire cela va être un omble 5 nouveau, sujet au débat plus tôt. Ce sera un enum, peut-être comme avant, et la ville sera un varchar 50. Et maintenant qu'est-ce que je reçois effacer de ce tableau pour éliminer cette inefficacité? AUDIENCE: [Inaudible] DAVID MALAN: Nice. État et la ville vont, je me suis donc maintenant éliminé l'inefficacité potentielle pour se rappeler de manière redondante, Cambridge, MA, Cambridge, MA, Cambridge, MA, Cambridge, MA, qui, nous l'espérons ne va jamais changer. Et même si elle le fait, il est minorly ennuyeux, maintenant que je dois changer en plusieurs rangées, alors qu'ici, je ne pouvais tout simplement changer en un seul endroit. Maintenant, quel est le compromis, peut-être? C'était super pratique. Nous avons passé toutes mes données bien ensemble. Mais ce qui est clairement le cas maintenant? AUDIENCE: [Inaudible] DAVID MALAN: Exactement, et je suis heureux que vous ayez utilisé le mot se joindre, parce que ce fait le mot-clé, dans le monde des bases de données relationnelles dans SQL, il est un mot réel vous pourrait taper ou au moins transmettre. Et en fait, ce que nous avons maintenant à faire pour sélectionner une information complète de David est quelque chose comme select étoile à partir de utilisateurs, rejoignent les villes, on-- et maintenant Je vais passer tout simplement à une deuxième ligne de sorte que cette users.zip fits-- est égal à cities.zip où users.ID est égal à 1. Alors que se passe-t-il? Il est moche, mais vous pouvez sorte de lire de gauche à droite, de haut en bas. Sélectionnez étoiles des utilisateurs est le même que précédemment, mais pas des utilisateurs, en soi. Il est des utilisateurs rejoignent les villes. Que vais-je joins ces deux tables sur? Eh bien, apparemment, la tables utilisateurs zip champ, et cette période est tout simplement spéciale la syntaxe pour exprimer cette idée, et ce sont les tables de villes zip champ. Je veux que ces deux être égaux, mais je veux choisir finalement seules les lignes où ID dans la table des utilisateurs est égal à 1, ce qui est arrivé à être le mien. Et juste pour être clair, un programmeur, généralement lorsque hardcode quelque chose comme le nombre 1, parce que sinon le site ne soutient David ou tout premier utilisateur, vous serait plutôt faire quelque chose comme ID, où cela représente un variables, ce qui peut changer au fil du temps, semblable dans l'esprit de ce que je disais plus tôt avec ces types de caractères génériques. Mais pour l'instant, nous allons simplement hardcode comme 1. Et qu'est-ce que cela signifie? Eh bien, une belle façon de visualiser cela est que si cette main est la table des utilisateurs, et cette main est les zips table, nous sommes en quelque sorte finding-- et le bout de mes doigts sont zip ici, et le bout de mes doigts voici zip, vous êtes sorte de verrouillage, il de sorte que vous obtenez en retour le résultat table d'origine, par vraiment se joindre à les deux tables sur le champ commun. Et il ne doit pas être zip. Il pourrait être plus rien d'autre, mais zip est agréable, parce que l'un, il est court, deux, il y a toujours la même longueur, donc il n'y a une réelle efficacité à ce que Olivier propose ici avec l'affacturage le zip, et [Inaudible] proposant que nous nous débarrassons de la ville et les Etats. Donc, ceci est le processus connu comme la normalisation. Toute question à ce sujet? Eh bien, laissez-moi de souligner c'est le genre de choses, même si elle est faible niveau assez, cette discussion, que vous penseriez vous êtes sorte d'obtenir perdu dans les mauvaises herbes, ceci est une manifestation de la vaste occasion pour les développeurs d'être mauvais. Et en fait, même si nous, en cours que j'ai enseigné, quand nous avons eu, par exemple, inexpérimenté programmeurs de premier cycle construire des sites Web, à première vue, les sites peuvent sembler terrible. Et ils ont tous les fonctionnalité, nous avons demandé, les développeurs ont fait un bon travail. Mais ils ne savaient pas nécessairement assez sur la conception de base de données ou ils ne pensaient pas difficile assez sur les types de données et les types d'utilisateurs des site allait avoir, et nous trouvons, puis, six mois plus tard, après qu'ils ont obtenu leur diplôme ou déplacés sur, que bon sang, notre site Web est vraiment, vraiment lent. Et je ne parle même pas d'avoir des millions ou des milliers d'utilisateurs. Je veux dire quelques centaines d'utilisateurs sur le campus, qui ont tous aiment, par exemple, acheter des cours à En même temps, ils sont utiliser ce catalogue de cours application que je mentionnais et la chose devient vraiment ralentir parce qu'il n'y avait pas d'index. Il n'y avait pas des étoiles rouges, ainsi parler, ou nous avons eu pas nécessairement pris en compte sur les données communes à obtenir des économies d'espace. Et donc quand vetting un développeur ou d'une personne de base de données ou analogue, le genre de questions à penser par est encore, lors de la révision du code de quelqu'un, à-dire, pas nécessairement regarder à travers l'ensemble de leur code, mais disons, regardons à travers les tables de base de données. Qu'est-ce que vous stockez? Et puis dire, eh bien, attendez un minute, pourquoi utilisez-vous un nombre entier? Que faire si nous avons 4 milliards et 1 de ces lignes? Et ces types de questions est une occasion à type de repousser et avoir une idée de où si vous n'êtes pas à l'aise il, avoir quelqu'un plus technique poser ces questions, de savoir si ou non la personne sait vraiment leur truc. Et ceci est le genre de choses, aussi, que les gens sur l'Internet qui sont autodidacte, peut-être apprendre moins souvent, parce que vous ne viennent pas nécessairement à travers elle autant, parce que vous pouvez obtenir le haut de la base et en cours d'exécution, mais à moins que vous avez lu sur des tutoriels ou été dit à propos de la base de données de normalisation et de l'indexation et de la performance, ce sont le genre de choses qui vont vous faire mal. Et vous pourriez penser, ou un mauvais ingénieur pourrait-on dire, oh, eh bien, nous une meilleure rémunération pour une plus grande base de données ou une base de données plus rapide ou tout simplement jeter de l'argent à cela, échelle verticale, pas nécessairement. Si vous allez in-- et vous pouvez aller en après les indices fact-- et ajouter, et il peut prendre quelques heures pour la base de données pour construire que de nouvelles données structure qui je l'ai mentionné plus tôt, vous pouvez toujours corriger cela après le fait, que ce soit l'endroit où vous commencer à distinguer bons designers de mauvais designers, pas seulement esthétiquement, mais la performance sage aussi bien. Des questions? Non? Donc, pour NoSQL, qui est l'autre type de base de données à laquelle je faisais allusion plus tôt, vous ne disposez pas des lignes et des colonnes. Au lieu de cela, vous auriez quelque chose qui ressemble un peu plus comme ça. Je vais utiliser la syntaxe commune. Les accolades se trouvent être utilisé ici beaucoup. Vous pourriez avoir quelque chose comme le premier nom est David, vous pourriez avoir la dernière nom est Malan, citations, vous pourriez avoir ID est-- excusez-moi, whoops-- ID est 1, email est malan@harvard.edu, et je ne la peine de taper le reste, puis d'autres choses. En d'autres termes, ceci est une représentation textuelle de ce que nous généralement appeler un objet dans un programme informatique. Et un objet est généralement juste un ensemble de paires de valeurs clés. Encore une fois, ce thème récurrent. Nous avons vu des paires de valeurs clé dans HTML, nous avons vu des paires de valeurs clés maintenant dans le contexte de bases de données, et nous vu des paires de valeurs clés dans le contexte de, je pense, un langage plus tôt aujourd'hui. Garde à venir. Et en effet, c'est vraiment quelles données se résume à, données et de métadonnées, ou des valeurs et les touches, respectivement. Ainsi, un non-relationnel la base de données, sur la base chose sur des objets, où vous Clump juste tout ensemble et le mettre dans la mémoire, serait généralement photo comme, ou pensé, comme cela. Et je vais laisser ça maintenant comme type d'approche alternative. Et on est pas nécessairement mieux que l'autre. En fait, très en vogue ces jours sont des systèmes de base de données comme MongoDB et Redis et quelques d'autres outils, disponibles gratuitement, mais ils sont de plus en plus en vogue. En partie parce qu'ils offrent plus propose plus de ces approches tabulaires, mais aussi parce qu'ils sont un peu plus facile à utiliser, parce que vous ne devez pas penser aussi dur sur beaucoup de ces décisions de conception. Donc, avantages et inconvénients. Ainsi se rendent compte qu'il ya des options au-delà de ce que nous venons de passer du temps sur. Donc, nous allons le faire. Faisons un peu de transition retour maintenant à la programmation web, de sorte que nous sorte de conclure aujourd'hui avec quelque chose qui est un peu pratique, le remplissage certaines lacunes d'hier. Laisse-moi aller à cette première. Donc, rappeler que, hier, nous avons eu quelques canonique HTML pages qui avaient initialement, seulement HTML, puis secondairement avait CSS, feuilles de style en cascade. Ceci est une nouvelle variable que nous ne l'avons pas voir hier, ou insister sur, soi-disant balise script. Il s'avère que vous pouvez réellement intégrer un langage appelé JavaScript dans votre site Web la page et de faire votre web pages font quelque chose. Alors qu'est-ce que je veux dire par là? Eh bien, laissez-moi aller de l'avant et juste emprunter ce code pour un moment. Je vais aller dans Cloud9, pas besoin aller juste encore là-bas vous-mêmes, et je vais appeler ce alert.HTML. Je vais coller dans mon dossier ici. Et juste pour clarifier ce que je l'ai fait, laissez moi aller à cette adresse et aller à alerter, et vous voyez le Bonjour tout le monde. Mais cela est un peu décevante. je veux faire quelque chose un peu différent. Donc, je vais effectivement faire. Je vais ici e, et entre mes balises de script, dire alert ( 'bonjour, monde »); donc un avis il est un peu bâclée, mais j'ai HTML, à l'intérieur duquel se trouve un langage appelé JavaScript, et ceci est ce qu'on appelle un appel de fonction ou de la procédure d'appel. Ceci est un verbe, littéralement, dans ce cas, et j'invoque la fonctionnalité de code que quelqu'un d'autre a écrit. De telle sorte que la fonctionnalité est un alerte, alors allons-y vers cette page maintenant et cliquez sur reload, et maintenant vous voir un peu d'interactivité. Il est une sorte de vieille école et laid. Cela vous rappelle genre de la pop-ups, peut-être, d'antan mais il a fait faire quelque chose d'un peu plus programmatique. Donc, plus que cela, nous allons faire quelque chose de plus intéressant. Laisse-moi aller ici et me débarrasser de cela. Et je vais aller de l'avant et créer une forme comme nous l'avons fait hier. En fait, vous savez quoi? Je vais aller dans google.html, que nous commencé hier, qui ressemblait à ce, par l'intermédiaire duquel nous avons cherché chat Mais remarquez qu'il ya une sorte de bug dans la version actuelle. Il fonctionne pour les chats, mais supposons que Je ne coopérais pas et je tape rien, et je clique simplement soumettre. Ce genre de comportement est bizarre. Il m'a fallu au réel Google, ne me donne pas un message d'erreur. Je voudrais dire à l'utilisateur vous devez nous donner une valeur. Alors, comment pouvons-nous faire cela? Eh bien, laissez-moi revenir en Cloud9 et laissez-moi aller dans le haut de ma page et ajouter une balise de script comme celui-ci, où Je vais taper un code JavaScript. Et je vais faire ce qui suit. Si (document.getelementByID-- et le rappel dont nous avons parlé plus tôt, cette fonction. Quel ID que je veux obtenir? Je veux obtenir q, et je vais dire égale à rien, comme this-- effectivement me laisser utiliser des guillemets doubles juste pour consistency-- est égal à rien, puis alert ( "S'il vous plaît taper une requête") ici. Je dois donc ce qui semble être quelque chose comme une condition. Nous avons vu cette idée générale dans Scratch. Il est comme un de ces casse-tête morceaux qui ressemblaient à cela. Et que dis-je? Eh bien, ici-bas, notez que je suis va faire ce qui suit. Je vais donner ce formulaire domaine, non seulement un nom de q, qui est ce qui est passé à Google, mais je suis va lui donner un identifiant local, également appelé q. Mais je pourrais appeler cela tout ce que je voulez, je vais juste garder les choses simples et aussi l'appeler q, juste pour la simplicité. Et maintenant, je vais faire quelque chose d'un peu plus. Sur les champs de formulaire ici, je vais ajouter ce qu'on appelle un gestionnaire d'événements. Sur soumettre, je veux appeler une fonction appelée valider. Cela n'existe pas encore, cela mot, ou ce verbe valider, parce que ce que je vais faire ici est maintenant ajouter un peu de code. Je vais dire la fonction validate. Je vais mettre en retrait cela et ajouter un autre accolade ici et un autre ici. Pensez à ce que cela est en train de faire. Je maintenant-- penser à cela comme créé mon propre morceau de puzzle qui n'a pas précédemment existe, et je l'ai appelé ce puzzle reconstituer la pièce validate de puzzle. Son but dans la vie est d'exécuter les quatre lignes de code à l'intérieur de celui-ci. Si document.getElementById donc conceptuellement, qui va entrer dans l'élément, l'élément HTML dont unique, idée est juste q, puis même si la syntaxe est un peu bizarre, que l'égalité est égal signifie simplement égaux. Cela signifie donc que si l'élément de la identifiant unique de q, lorsque obtenu, n'a pas de valeur, il est égal à juste entre guillemets, rien là-dedans, alors qu'est-ce que je veux faire? Je veux crier à l'utilisateur. Et nous ne rentrerons pas les détails ici. Je vais retourner false. C'est une erreur. Sinon, je vais retourner vrai. Donc, soit il a travaillé ou qu'il n'a pas. Faux ou vrai. Et maintenant, si je ne fais aucune erreur, permettez-moi de sauver ceci et recharger cela. Et laissez-moi juste vérifiez que Je ne suis pas, en fait, faire des fautes de frappe, donc je ne me suis pas embarrasser. Voyons voir si cela fonctionne. Alors maintenant, je vais taper les chats. Il fonctionne toujours, ou des travaux de la moitié, au moins. Maintenant, permettez-moi de le recharger, et maintenant laissez moi essayer de soumettre sans taper anything-- damn it, il a éclaté. Un moment. Permettez-moi d'ouvrir la console, [Inaudible] log, rechargez la page. Permettez-moi d'essayer encore une fois. Oh, bon sang. J'ai oublié. J'ai fait une faute de frappe. Je me rappelle ce qu'il est. .valeur. Je voulais dire si la valeur de l'élément dont l'ID est q est égale à celle, puis crier à l'utilisateur. Alors maintenant, permettez-moi de tenir à nouveau mon souffle. Et c'est parti. Nous y voilà. S'il vous plaît taper une requête. Donc, ça ne me laisser passer. Je peux être une sorte de ludique avec cela, et au lieu de vérifier aucune valeur, Je peux dire quelque chose comme, pas plus de recherche pour les chats, et maintenant nous pouvons simplement laisser plus ludique la recherche de l'utilisateur pour les chiens s'il ou elle veut, ou si je vais ici et chercher des chats, maintenant je ne peux pas. Alors, quel est l'emporter ici? Donc un, nous avons introduit dans notre monde de HTML et CSS, fonctionnalité de programmation. Je peux effectivement maintenant prendre des décisions dans le code. Auparavant, tout ce que je pouvais faire est de marquer le contenu textuel ou graphique contenu et lui dire ce qu'il faut comme et où afficher. Maintenant, je peux effectivement demander les questions de la page Web et prendre des décisions fondées là-dessus, et invite l'utilisateur si je dois crier à lui. Donc, nous allons essayer quelque chose sur notre propre avec cela. Allez-y, laissez-moi ouvrir la diapositive suivante ici, et juste souligner une chose. Tout comme avec CSS, nous pouvons factoriser notre code JavaScript dans un fichier séparé, vous pouvez faire la même chose avec JavaScript comme avec CSS. Et vous utilisez que l'utilisation d'une source attribut de la balise de script. Mais nous ne compliquer les choses pour le moment. Au lieu de cela, si vous pouviez aller à pas cette page, mais-- permettez-moi de passer ceci autour de order-- aller, si vous pouviez, cette page ici. Cette URL ici. Il est dans les diapositives d'aujourd'hui. Vous pourriez avoir à recharger parce J'ai ajouté quelques chose. Mais il y aller là où quelques énigmes attendent. Et cela va nous donner une chance, dans un contexte un peu plus de plaisir, barboter avec un peu de JavaScript. Et quand vous y arrivez, Je vais vous expliquer ce qui l'attend. Obtenez vert. Set bleu. Règle verte, fixe rouge. Oops. Pardon. Ceci est la mesure de nos documentation pour relever ce défi. Et cela va fonctionner comme suit. Donc ce que vous avez sur ce page est tout un tas des images casse-tête par un copain à l'Université de Stanford. Donc, ce que vous voyez ici est presque sorte de l'un de ces casse-tête pour les yeux magiques, mais si vous venez de regarder fixement, rien ne va sortir de vous. Au contraire, quelque chose est caché dans cette image. Et il est caché de la manière suivante. Images, comme vous le savez, peut être composée de seulement trois couleurs. Du rouge, du bleu et du vert. Et nous pouvons faire toute la couleurs de l'arc-en en mélangeant ces trois couleurs en quelque sorte. Donc, cela ressemble surtout vert et bleu, mais comme Nick dit ici, cette image de fer de puzzle est un puzzle. Il contient une image de quelque chose célèbre, cependant, l'image a été déformée. L'objet est célèbre dans les valeurs de rouge. valeurs Toutefois, le rouge ont tous été divisé par 10. Donc, ils sont trop petits par un facteur de 10. En d'autres termes, Nick a pris une image originale, et il désaturé tous du rouge de celui-ci, l'abaissement de la quantité de rouge encre, si vous voulez, en elle. Les valeurs bleues et vertes sont tous à sens, des valeurs aléatoires, aka bruit conçus à obscurcir l'image réelle. Alors, que Nick a fait était-il atténué le rouge puis il a juste jeté au hasard quantités de bleu et vert à l'image de type obscure ce qui est effectivement toujours là. Vous devez annuler ces distorsions pour révéler l'image. Tout d'abord, définir toutes les valeurs bleues et vertes à zéro pour les sortir de la voie, et regardez le résultat. alors multiplier chaque valeur rouge de 10, mise à l'échelle de retour jusqu'à environ sa valeur finale. Quel est le fameux objet? Donc, vous avez tous ce rectangle dans votre navigateur en ce moment. Et remarquez qu'il ya un certain le code de démarrage, pour ainsi dire. Ceci est du code JavaScript qui Nick a écrit pour vous. Et remarquez qu'il ya une ligne au milieu qui commence par une barre oblique, qui est ce qui est généralement appelé un commentaire. Cela signifie qu'il est une phrase pour le programmeur qui n'a pas de signification fonctionnelle. Il est juste un repère visuel à l'humain. Ainsi, vous pouvez aller de l'avant et supprimer simplement cette ligne, et être super prudent de ne pas supprimer ou changer quoi que ce soit d'autre. Et permettez-moi de vous guider à travers ce que ce code fait et je vais laisser à vous de comprendre l'image secret. Cette première ligne ici que je viens surligné vous donne ce qui suit. Sur la gauche, vous avez ce qu'on appelle une variable que Nick a arbitrairement, mais raisonnablement appelé im pour l'image. Du côté de la main droite de ce signe égal, il dit me donner une nouvelle entre guillemets "simple image". Simple image, dans ce contexte, est ce qu'on appelle une classe, eh bien, il est un peu comme un class-- techniquement un prototype-- mais vraiment, cela me donne un nouvel objet, dont le contenu sont le fichier, fer-puzzle.png. En d'autres termes, Nick a créé cette notion d'une simple image afin que nous puissions, pour pédagogique fins, jouer avec l'image et changer son rouge, les valeurs vertes et bleues. Et comment faisons-nous cela? Cette syntaxe quelque peu cryptique ici est un peu comme le bloc de répétition que certains d'entre vous ont vu dans Scratch tôt aujourd'hui, où vous pouvez répéter 10 fois. Dans ce cas, Nick n'a pas hardcoded un nombre comme 10. Au lieu de cela, il dit, initialiser une variable appelée x à 0, vérifier si x est inférieur à la largeur de l'image. Et pour être plus appropriée, l'image est le variable point signifie aller à l'intérieur de celui-ci et obtenir sa largeur, et puis paren ouverts, fermés paren est juste façon de programmeur de dire cela est une fonction. Ceci est une procédure. Ceci est une fonctionnalité quelqu'un d'autre a écrit. Utilisez-le et donnez-moi une réponse. Et puis x ++ est une façon élégante de dire, une fois que vous l'avez fait une fois, incrémenter x par 1. En d'autres termes, cette est la manière d'un programmeur d'induire une boucle qui est va parcourir toutes les colonnes d'une image. Une image est juste une grille de des points, des lignes et des colonnes de points. Ceci est une façon d'itérer sur l'ensemble de ces colonnes. Et à l'intérieur, Pendant ce temps, nous itérer sur les hauteurs, ici et ici et ici. Donc, ceci est juste une façon de Traipsing, presque comme une vieille machine à écrire à l'école, pour aller un peu plus de la toute l'image itérative. Même c'est pas tout à fait à part entière clair, il suffit de prendre sur la foi pour l'instant, que ces trois lignes du code ensemble sont va vous permettre de regarder itérative à chaque pixel, chaque point de l'image. Qu'est-ce qu'un pixel? Eh bien, pour être clair, si nous regardons à l'original et un zoom avant, si vous mettez vraiment vos yeux à l'écran de l'ordinateur, qui est juste un tas de points, plusieurs mille points entassés là. Et que faites-vous faire? Chacun de ces points, une définition finale, est le résultat de ce qui est généralement appelé RVB, rouge, vert, bleu, qui de plus, peuvent être combinés pour vous donner un certain nombre de couleurs. En fait, si vous vous souvenez de beaucoup il y a, de nombreuses années, écrans de projection comme ces choses l'habitude d'avoir non pas un objectif mais trois. L'un d'eux cracher lumière rouge, l'un des cracher le feu vert, l'un d'entre eux cracher la lumière bleue. Et si vous étiez dans un collège comme je l'étais où ils étaient jamais correctement aligné, vous étiez toujours regarder des films d'histoire qui étaient légèrement déformées, parce que les trois couleurs ne sont pas combinant correctement. Mais il se trouve que chacun des ces valeurs de rouge, vert et bleu, peut avoir un numéro qui leur est associé. Par exemple, 0 pour le rouge signifie pas rouge, 0 pour le vert signifie pas vert, et 0 pour le bleu signifie pas bleu. Donc, si vous avez pas de rouge, pas de vert, et pas de bleu, de quelle couleur avez-vous? AUDIENCE: [Inaudible] DAVID MALAN: Vous feriez espère, il est blanc. Malheureusement, ce operates-- désolé? AUDIENCE: [Inaudible] DAVID MALAN: Donc, vous avez réellement avoir noir, dans ce cas. Donc, si vous avez aucune de ces couleurs est activée, vous avez noir. Toutefois, si vous avez, disons beaucoup d'entre eux, comme beaucoup de rouge, 255 de celui-ci, beaucoup de vert, et beaucoup de bleu, qui est blanc. Donc, ce sont les deux extrêmes. Donc, par cette logique, si j'ai beaucoup de rouge et pas de vert et pas de bleu, quelle couleur est-ce? AUDIENCE: [Inaudible] DAVID MALAN: Oui, évidemment. Et puis pas de rouge, beaucoup de vert, pas de bleu, puis si vous have-- bien, nous allons terminer elle, juste parce que, mais cela, bien sûr, maintenant, est bleu. Et maintenant, vous pouvez combiner ces couleurs. Maintenant, en passant, si l'un d'entre vous ont jamais fait une certaine conception de site Web réel, vous pourriez effectivement voir des symboles comme celui-ci. FFF-- et effectivement, il est probablement même pas. Il est FFFFFF. Quiconque a déjà vu des F et E de et A through-- donc il se trouve, nous avons parlé hier décimal, et aujourd'hui, le type d'environ décimal. Aujourd'hui, nous avons parlé de binaire. Tours dehors, hexadécimal est un très système de base commun à utiliser dans le calcul. Binary est deux, décimal est 10, hex est 16. Et il se trouve, comment faire vous comptez en hexadécimal? Zéro, un, deux, trois, quatre, cinq, six, sept, huit, neuf, qu'est-ce que vous utilisez après neuf? Quel est le prochain numéro? Nous avons déjà utilisé zéro. J'ai besoin 16 d'entre eux. Zéro, un, deux, trois, quatre, cinq, six, sept, huit, neuf, vous avez besoin d'une certaine convention arbitraire. Et ce que l'humanité a décidé un certain temps il y a que, après neuf vient la lettre A puis B puis C. Ainsi, le façon dont vous comptez en hexadécimal est égal à zéro, un, deux, trois, quatre, cinq, six, sept, huit, neuf, A, B, C, D, E, F, et que comptera vous tout le chemin, il se trouve, à 15. Donc, de zéro à 15 est égal à zéro par F. Maintenant, pourquoi est-ce important? Eh bien, quand vous avez deux F de, voilà comment vous exprimez 255. Donc, longue histoire courte, en le monde de Photoshop, que le logiciel de conception graphique, dans le monde du développement web, où vous avez beaucoup de couleurs, bien sûr, de jouer avec, souvent les programmeurs les exprimer en hexadécimal, juste parce qu'il tend être un peu plus simple. Même si, à première vue il est beaucoup plus complexe. Ainsi, dans tous les cas, il est important parce que Nick à Stanford nous a donné six morceaux de fonctionnalité que vous, les programmeurs en herbe, auront désormais la possibilité d'utiliser. Construit dans ce web page est six fonctions, six procédures que Nick a écrit. Trois d'entre eux vous obtiendrez un certain nombre, un rouge, un vert, ou une valeur bleue. Trois d'entre eux mis cette valeur. Et ces soulignement ne sont que des espaces réservés, si vous avez besoin de savoir ce que ceux-ci sont. Donc, avec ces trois fonctions, la première de ces choses va être une coordonnée x, et la seconde de ces choses va être une coordonnée y. En d'autres mots, qui parsèment, qui pixel voulez-vous obtenir le vert, obtenir le bleu, obtenir le rouge. Et puis ici, cela va être x, cela va être une valeur y, et cela va être un certain nombre. Alors, faisons le premier ligne de cela ensemble et puis je vais laisser à vous pour essayer d'en déduire le reste. Donc, selon les instructions sur cette page, nous avons besoin augmenter le rouge d'un facteur 10, et nous avons besoin d'enlever le vert et enlever le bleu. Commençons par les derniers scénarios. Donc, si je veux, et je vais mettre en retrait en utilisant des espaces, si je veux régler le rouge, le vert, ou la valeur de bleu, Je vais faire ce qui suit. Image, im.setBlue, puis sur la base de mes instructions ici, ce que trois choses que je devrais tapez l'intérieur des parenthèses maintenant? J'ai besoin de la valeur de x, la valeur y, et ce nombre dois-je mettre ici si je veux me débarrasser du bleu, sur la base de cette histoire ici? Juste zéro. Si je veux pas de bleu, je suis juste va changer à zéro. Maintenant, nous allons récapituler tout ce que cela fait. J'ai ici sur ces top deuxième et troisième lignes, Je prétendais deux boucles, boucles imbriquées, si vous aura, vont que pour avoir l'effet de progresser de gauche à droite, de haut en bas sur l'ensemble de x les valeurs et toutes les valeurs y. Parce qu'encore une fois, une image seulement une grille de lignes et de colonnes. Donc, cela va obtenir débarrasser de tout le bleu. Permettez-moi de laisser dans la ligne suivante pour vous. Comment puis-je me débarrasser de tous les verts? AUDIENCE: [Inaudible] DAVID MALAN: Nice. AUDIENCE: [Inaudible] DAVID MALAN: Nice. Et je vais faire un zoom arrière, et juste prendre souciez de ce que vous avez pas fait de fautes de frappe. Et si vous êtes à l'aise avec ce que vous avez fait, allez-y et cliquez sur le bouton Exécuter / Enregistrer et voir ce que vous obtenez. Et encore une fois, nous avons fait seulement trois changements. Nous avons supprimé cette première commenter et remplacé avec ces deux lignes de code. Et il est OK si vous avez besoin de frapper Run / bouton Enregistrer une ou deux fois de réparer quelque chose. Et laissez-moi aussi un zoom avant sur mon le code de sorte que vous pouvez transcrire. Bien. Donc, je vois Andrew a ce semble être une erreur. Il a juste un grand noir rectangle sur son écran. Quelqu'un at-il un grand rectangle noir? AUDIENCE: Oui. DAVID MALAN: Big rectangle noir? OK, donc nous allons réfléchir ce que cela signifie. Nous avons dit que zéro, zéro, zéro, donc pas de vert, pas rouge, pas de bleu, va vous donner noir. Et il se trouve que la plupart de nos ordinateurs portables il suffit de ne pas avoir assez de fidélité. Vous ne pouvez pas tout à fait dire qu'il est en fait quelque chose. Et si vous penchez genre de peut-être votre écran avant et en arrière, peut-être voyez-vous un petit quelque chose là-bas? Peut-être, en quelque sorte, en quelque sorte? Il est pas tout à fait noir. AUDIENCE: [Inaudible] DAVID MALAN: Spoiler! Il y a un peu de rouge, mais souvenez-vous des spécifications du problème, Nick atténué vers le bas. Il désaturé quelque peu, mais pas complètement à zéro. Donc, si nous voulons agrandir le montant de rouge, je vous propose cette astuce. Permettez-moi un zoom avant sur mon écran. Et laissez-moi aller de l'avant et de dire montant est égal à im.getRed (x, y). Cette ligne de code me donne ce qu'on appelle une variable. J'ai arbitrairement, mais, sans doute, raisonnablement appelé ma variable ce que, Apparemment? Montant. montant Just. J'aurais appelé tout ce que je veux, mais je suis en utilisant cette autre fonction que je l'ai décrit plus haut pour obtenir la quantité de rouge à x virgule y. Pourquoi ai-je fait cela? Que voulez-vous faire ici? Vous devez add-- AUDIENCE: [Inaudible] DAVID MALAN: Oui, peut-être multiplier par 10. Et si vous ne savez pas cela, je suis aller de l'avant et de le faire. Je vais aller de l'avant et par exemple, je veux que la quantité de rouge Je veux être tout ce que est au rouge, 10 fois, et l'étoile, l'astérisque sur votre clavier est the-- ne pas utiliser x. Utilisez l'étoile. Voilà comment vous multipliez les choses dans la plupart des langages de programmation. Ainsi, selon l'intuition de Kareem, stockée dans cette variable appelée quantité, est combien rouge que je veux à l'emplacement xy. Comment, maintenant, ce que je fais cette pixel avoir ce numéro? Vous avez déjà fait ça avant. Vous définissez le vert et le bleu pour aucune valeur, à zéro. AUDIENCE: [Inaudible] DAVID MALAN: Oui, bien vous ne voulez pas à 10. Vous avez déjà fait le calcul ici. Donc, nous obtenons la valeur de rouge, qui est un faible nombre, sans doute. Nous multiplier par 10. Ce que vous voulez faire avec le montant variable maintenant? AUDIENCE: [Inaudible] DAVID MALAN: Nice. Alors im.set-- quoi? AUDIENCE: setRed. DAVID MALAN: setRed, à l'emplacement xy. Ouais. Et juste montant. En d'autres termes, une variable est un espace réservé temporaire que vous pouvez mettre tout ce que vous voulez dans. Il nous arrive à mettre un nombre en elle, en ce moment. Nous avons multiplié par 10 pour le rendre plus grand. Et maintenant je remplace cette variable comme ce troisième argument, ou d'entrée de mettre en rouge. Et pour que une fois que vous terminer que, et de prendre note des points-virgules et les parenthèses. Allez-y et cliquez sur exécuter / enregistrer à nouveau, et vous devrait voir, comme par magie, ce qui était en fait Là. [? Arwa,?] Ce qui est là? La Tour Eiffel en part entière rouge, pas tout à fait sombre. il devrait être plus évident maintenant, oui? D'ACCORD. Et Andrew, boîte pas plus noir? AUDIENCE: [Inaudible] DAVID MALAN: Très bien. Donc, je vais garder cela sur l'écran. Si vous voulez jouer avec cette plus tard, je vais recréer pour vous. Mais ce code ici a fait exactement cela. Pourquoi faisons-nous pas un autre. Permettez-moi de faire défiler vers le bas légèrement. Donc dans ce cas, le projecteur ne pas vraiment faire justice. Mais sur vos écrans, vous avez probablement avoir une boîte très rouge et très noir. Cela, aussi, est un casse-tête qui montre quelque chose célèbre. Cependant, l'image a été déformée. L'image vraie, cette fois, est les valeurs bleues et vertes. Cependant, ils ont tous été divisés par 20 conséquent, les valeurs sont très faibles. Les valeurs rouges sont juste nombres aléatoires, le bruit. Annuler ces distorsions pour révéler l'image vraie. Alors Nick vous dit alors ce qu'il faut faire. Définir les valeurs de rouge à zéro, et alors ne gâche pas ce qu'elle est. Puis, multiplier le bleu et les valeurs vertes par 20. Il est donc presque même programme comme avant, mais vous inverser le processus. Et je mettrai mon code de avant sur l'écran en cas vous voulez vous y référer ou jouer davantage avec celui-là. Permettez-moi un zoom avant sur ce point. Mais l'image de cuivre résoudre puzzle, numéro deux. AUDIENCE: [Inaudible] DAVID MALAN: OK, donc ce que je suis ne vais pas donner autant de conseils. Je would-- oh, allons voyez, vous avez une faute de frappe ici. Alors rappelez-vous, cela ici effectivement besoin d'y aller. Donc, ce que je propose, si vous voulez se concentrer sur celui-ci, il y a la réponse. Si vous voulez transcrire ce que devrait obtenir une première travail. Et puis, vous pouvez l'utiliser comme inspiration pour le second. Agréable. Bien. Et pour les curieux, ceci est un exemple simple d'une science ou un art appelé stéganographie, l'art de cacher des informations dans les images. En règle générale, les images peuvent être filigrané très flagrante avec un logo dans le fond coin, mais il est clair, vous peut être beaucoup plus sophistiqué à ce sujet et en fait cacher d'autres images dans les images en quelque sorte avec cette technique. Prenez 30 secondes, puis nous allons au moins annoncer ce que vous devriez voir. Et je vais laisser la troisième l'un comme un exercice à la maison, si vous souhaitez plus d'un contester ce week-end. Et je pense que Andrew pourrait ont obtenu le premier. Quelle est la deuxième image, Andrew? AUDIENCE: Statue de la Liberté. DAVID MALAN: Statue de la Liberté sera la réponse cette fois-ci. Donc, encore une fois, juste quelques simples Des exemples, dont l'objectif est de vous donner une idée de la façon dont nous avons traduit Scratch picturale blocs de plus ennuyeux et plus code compliqué, mais toutes les idées sont toujours exactement les mêmes, mais avec l'introduction maintenant de la notion d'une variable, étant capable de stocker quelque chose temporairement. Faisons un plus de mains sur, juste pour se connecter maintenant les points à quelque chose d'un peu plus du monde réel. Lorsque vous êtes prêt, si vous pouviez aller à cette URL sur l'écran. C'est aussi dans votre copie de la diapositives, developers.google.com/maps~~V~~singular~~3rd. Nous allons effectivement faire quelque chose réel, pour ainsi dire, sur le web en utilisant l'API Google Maps, ou Interface de programmation d'applications, de la façon suivante. Google, comme de nombreuses entreprises, fournit un grand nombre de fonctionnalités gratuit que vous pouvez utiliser pour construire votre propres applications intéressantes. En fait, si vous avez déjà utilisé Uber pour obtenir un taxi ou une voiture, vous savez probablement que Uber a une carte et il montre des voitures sur elle. Autrement dit, le mieux que je peux dire, Google Maps API. Ils utilisent en fait les cartes de Google, mais Uber est pas une société de cartographie, ni que ce serait un problème particulièrement intéressant pour résoudre au sommet de leur problème de service de voiture. Et ils sont debout, à nouveau, sur les épaules d'autres, Google dans ce cas. Donc, ils utilisent les cartes de Google, mais leur propre services de voiture et autres caractéristiques. Nous allons donc profiter de ce faire ce qui suit. Et si je suis allé trop vite, appelez-moi plus dans un instant. Heureux de récapituler certains de l'image des choses. Vous devriez vous voir à une page comme ça. Donc, la belle de Google, et ils sont parmi les meilleurs de fournir non seulement des API, mais API gratuits que vous peut jouer avec ou utiliser commercialement. Ils ne commencent à vous charger si votre utilisation est élevé, mais je suis allé à venir à l'avance et nous signé pour un compte gratuit qui, espérons-le, 10 ordinateurs ne nous disqualifie pour soudainement. Donc, nous espérons que cette démonstration fonctionnera. Et remarquez qu'ils ont des API pour Android, iOS, les services Web et Web, Quoique ce soit. Concentrons-nous sur Internet. Alors cliquez sur la case rose, web, et que vous mènera, nous l'espérons, à une page ici. Et ils ont tout un tas d'API. Et il peut être un peu écrasante au premier abord, mais je vais nous orienter à travers ce que nous voulons. En haut à gauche est la carte Google Maps JavaScript API, l'API JavaScript. Alors allez-y et cliquez sur celui-là. Et cela vous mènera maintenant à la page suivante, des démos et des exemples de code. Permettez-moi de zoom ici. Et laissez-moi nous to-- défiler vers le bas à l'endroit où il est dit des étapes de démarrage rapide. Votre écran doit ressembler à la mienne. Et il y a deux étapes, obtenir une clé et commencer à développer. Je l'ai déjà fait la première étape pour nous, obtenir une clé dite. Et cela est une idée commune. Une clé API est généralement juste un grand nombre aléatoire ou une chaîne que vous êtes censé à coller dans votre code, de sorte que Google sait qui vous êtes quand vous utilisez leur service, leur API. Ne pas dire que nous sommes être accusé quoi que ce soit. Et maintenant, cliquez sur, au lieu de un, cliquez commencer à développer. Si vous pouviez me vague plus si ne sais pas où nous sommes. Nous allons donc rayer la surface, ici, mais ce Je pensais être convaincant est d'avoir fait de nous tous, à l'aide Cloud9 dans une fenêtre, et ce tutoriel dans une autre fenêtre, laisse réellement obtenir notre propre l'application et au fonctionnement qui intègre une coutume Google carte dans notre propre page Web, et ajoute ensuite une ou deux caractéristiques. Mais nous allons juste gratter la surface de ce que nous pouvons faire. Il suffit donc d'un test de cohérence rapide. Tout le monde est à cette page, API Google Maps JavaScript? Devrait-dire la mise en route. On ne va pas passer par le tout par tout moyen. OK, dans un autre onglet, si vous ne le faites pas ont ouvert, ne vont en Cloud9 et vous obtenez juste un nouvel onglet, en fin de compte. Donc, encore une fois, c9.io d'hier, c9.io, et il suffit de créer un nouveau fichier. Et allez-y et appel ce que vous voudriez. J'ai appelé map.html mien. Appelez quoi que ce soit se terminant par .html. Et vous devriez être à peu près où je suis dans ce processus avec juste une invite à clignoter dans un vide onglet appelé quelque chose comme map.html. Ou fichier, nouveau fichier cette fois. Et maintenant, plus sur la API Google Maps JavaScript, nous allons sauter la lecture à travers tout ce texte. Mais notez que monde bonjour est en effet partout, vous voyez maintenant. Bonjour tout le monde a ce grand coloré exemple de tout un tas de HTML. Allez-y et copier et coller seulement HTML, donc du type de doc en haut tout le chemin à la balise HTML proche, allez avant et copier tous that-- à nouveau, qui est sous le monde bonjour exemple-- et le coller dans votre onglet Cloud9, de sorte que maintenant votre écran devrait ressembler à peu près comme le mien. Et vous pouvez l'enregistrer, mais ne chargez pas seulement encore. Regardons d'abord à le code et voir si nous ne peut pas en déduire ou d'apprendre de ce qu'il est Google a eu de nous copier et coller aveuglément. Ils veulent juste aider, littéralement, nous aider à démarrer, mais il n'y a pas grand-chose complexité réellement là. Une question pour l'instant? Nous sommes en sécurité pour aller de l'avant? D'ACCORD. Alors vite, faisons juste certains contrôles rapides. Ligne un de ce que je voir, et nous l'espérons, vous voyez, qu'est-ce que cela veut dire, doctype HTML? Kareem, rappeler? AUDIENCE: [Inaudible] DAVID MALAN: Oui. Voici venir HTML 5. Pendant ce temps, la deuxième ligne sur la écran signifie ici hey navigateur, voici le code HTML réel. Ligne trois est bon navigateur, voici la tête. Ligne quatre est, bien sûr, hé navigateur, voici le titre. Qu'est-ce que la ligne de cinq faire? En fait, cela ne vraiment faire quelque chose pour nous. Dans ce cas, il redimensionne juste la page à un défaut. Ligne six, nous avons pas parlé, mais il spécifie le codage de caractères. Il y a différentes façons d'encoder des fichiers, en particulier pour les langues étrangères. UTF-8 tend juste à être la valeur par défaut. Alors maintenant, nous allons voir en ligne sept à 16, certains CSS. Et même si nous avons pas vu toutes ces choses avant, nous pouvons sorte de déduire. Donc, la ligne huit moyens, hé navigateur, appliquez tous les éléments suivants à laquelle deux balises, Apparemment? Le texte HTML et le corps. Donc, la virgule est la nouvelle chose là-bas. Et c'est juste une façon de spécifiant plusieurs balises à la fois. Ensuite, nous avons les accolades. Donc, apparemment, cela indique au navigateur, rendre la hauteur de la page 100%. Donc, même s'il y a très peu contenu, faire toute la page, faire la chose à remplir la page. Faire la carte remplir finalement la page. Marge, qu'est-ce que cela signifie? C'est habituellement comme arbitraire espace blanc autour des bords que certains concepteur de navigateur juste décidé devrait être là, parce qu'il sorte de fait les choses semblent plus propre. Mais nous ne voulons pas que. Nous voulons que la carte va tout le chemin vers les bords. Rembourrage, dans le même esprit à des marges. Les marges signifient l'extérieur, des moyens de remplissage à l'intérieur, mais il est le même genre d'affaire. Il est un peu d'un tampon entre vous et les bords. Et puis la ligne 13 est un bon chance pour un examen rapide. Qu'est-ce que le signe dièse carte signifie, ou hashtag carte signifie? Qu'est-ce que font référence à, en principe? AUDIENCE: [Inaudible] DAVID MALAN: Exactement. Cette propriété, cette propriété CSS applique à une seule chose, la balise HTML qui a un ID d'entre guillemets "map". avance rapide, défilement de Et maintenant laissez jusqu'à la fin du fichier, qui est pas trop loin, et un avis en ligne 19, si vous collez exactement comme je l'ai fait, la ligne 19 a juste un div, qui est un division de la page, qui, hier, je appelée une zone rectangulaire. Il n'y a rien dans il a obtenu. Il est une balise ouverte, à proximité tag. Mais elle a un ID unique. Donc, ce qui semble être passe ici est Google est en préparant notre page Web pour avoir une hauteur totale de 100%, et pas de remplissage, sans marges, parce ce que nous allons mettre à l'intérieur de ce div, dont ID unique est la carte est une carte réelle intégré. Et nous voulons qu'elle se remplisse la page et non pas seulement être un petit rectangle au milieu. Donc, la ligne 14 souligne de même, le lui-même la carte doit avoir une hauteur de 100%. Donc remarquerez maintenant entre les lignes 20 et 28, ceci est le code JavaScript. Et cela est, même si elle est syntaxiquement un peu étrange, il n'y a pas que ça se passe ici. Dans la ligne 21, cela se déclarant ce qu'on appelle une variable. Au lieu de l'appeler les montants, comme nous l'avons fait avant, nous disons plus précisément var, qui signifie simplement variable. Nous aurions pu utiliser que dans le code de Nick, mais il n'a pas, donc je n'a pas pris la peine de le faire non plus. Il est une variable appelée map, et puis il y a une fonction qui est apparemment appelé initMap. Donc, cela est comme notre propre coutume pièce de puzzle dans Scratch. Nous avons créé un morceau de initMap fonctionnalité appelée, et vous pouvez sorte de déduire que se passe t-il ici. Sur la gauche, nous avons une variable, donc nous allons mettre ce qui suit chose à l'intérieur de cette variable, de droite à gauche. Le côté droit dit, hé navigateur, donnez-moi une nouvelle carte Google. Et google.maps.map est juste une façon géniale de préciser que cette fonctionnalité appartient à Google Maps. Après les parenthèses, nous avons vu cela avant, hey navigateur, obtenir moi les éléments de la page, la balise dans la page dont ID unique est-- AUDIENCE: [Inaudible] DAVID MALAN: --map. Et ce qui se passe, eh bien, cette ligne ensemble, ligne 23, est essentiellement en disant: hey navigateur, allez me chercher que div vide sur la page dont ID unique est la carte, parce que je veux insérer en it-- injecter en elle, si vous will-- tout un tas de contenu ce qui arrive à venir à partir du Web, par la suite. Et Google fait tout cela pour nous. Encore une fois, à la fin de la journée, nous avons cet exemple d'abstraction. Je ne sais pas ce qu'est une carte est ou comment mettre en œuvre une carte API. Nous ne devons pas. Nous avons juste besoin de dire la carte où se mettre, et de laisser ceux qui sous-tend la mise en œuvre détails à Google. Maintenant, il est apparemment deux éléments de données que cet exemple est fournir à l'API de Google. Apparemment, le centre de la carte, et le niveau de zoom, pour ainsi dire. Et que quelqu'un reconnaît ces coordonnées, latitude et longitude? Probablement pas, mais nous pouvons revenir en arrière le tutoriel, voir littéralement. Mais nous allons le voir dans un instant. Le niveau de zoom est une valeur entre, je ne savoir, un dans 13 ou quelque chose comme ça. Il a juste à voir avec quelle distance vous êtes zoom avant ou arrière, et voilà. Et maintenant, à la fin de la page, ligne préavis 29-- il est un peu laid parce il wraps-- cette ligne de code est ce que la télécharge navigateur API réelle de Google. Tout le code que Google Les ingénieurs ont écrit qui mettent en œuvre toute cette fonctionnalité de cartes intégrables. Maintenant, il ne faut pas changer quoi que ce soit. Si vous suivez, allez-y et il suffit de sauvegarder ce fichier, si vous avez en effet ce que j'ai. Aller à son URL. Vous pouvez cliquer sur le bouton Exécuter là-haut et que nous le dira vous l'URL de votre serveur Web à nouveau. Et il vous mènera à un nouvel onglet. Si vous cliquez sur Ouvrir pour map.html, et les chances sont que vous êtes allez obtenir une alerte, un message d'erreur, oui? Message d'erreur, un message d'erreur? Donc, malheureusement, l'erreur message est pas éclairant à moins que vous ouvrez en fait la console, cet onglet spécial que nous gardé l'ouverture hier et un peu plus tôt aujourd'hui. Mais je suis tombé sur déjà plus tôt, donc je compris ce que la solution est. Dans les diapositives d'aujourd'hui, ou plutôt, dans Cloud9, avis que nous ne l'avons pas quelque chose de délibérément. Notez que cette balise de script dans ligne 29, si vous lisez à travers elle, il est comme maps.googleapis.com/ quelque chose, quelque chose, quelque chose, puis notez quelqu'un, l'un des développeurs, écrit dans la totalité du capital lettres, votre clé API. Nous avons besoin de coller quelque chose là-dedans. Et ce fut l'étape Je l'ai fait pour nous avant, et encore ils pourraient la liste noire nous si soudainement, 12 ou plus de nous commencer à utiliser la même clé, mais nous allons voir ce qui se passe. Donc, si vous allez dans aujourd'hui diapositives, une diapositive plus tard, il est cette chaîne très funky à la recherche du texte. Allez-y et il suffit de copier et que collez-le où il est dit votre clé API. C'est celui que je signé pour. Et certainement ne pas essayer tapant manuellement, parce qu'il se sent lourd avec les fautes de frappe, potentiellement. Il suffit donc de copier et coller cela. Et il va faire la ligne plus longtemps, mais maintenant, juste pour être clair, il devrait ressembler un peu plus comme celui-ci, où la clé est égale à pas capitalisés crier à vous. Enregistrez votre page, revenir à l'autre onglet, recharger, et l'espoir de voir une carte d'où? AUDIENCE: Australie. DAVID MALAN: Australie. Donc, apparemment, ce sont les Coordonnées GPS de l'Australie. Et laissez-moi marcher autour pendant un moment et aider toute personne qui est pas tout à fait là, mais permettez-moi de proposer, via Google, trouver les coordonnées GPS de votre propre ville natale ou dans votre propre pays d'origine. Et probablement Google peut transformer cette up, ou Wikipedia peuvent vous dire. Mais choisir deux valeurs différentes pour la latitude et la longitude, revenir en arrière et de les coller, et puis recharger la page après avoir sauvegardé et voyez si vous pouvez avoir un carte pour votre propre ville natale. Et quand vous avez terminé avec que, le suivi challenge-- et je vais vous donner un peu moins direction, délibérément, de sorte que vous avez délibérément avoir à lutter pour un couple minutes avec la documentation, changer la carte à ne pas être présent défaut de dessin animé, mais une carte satellite. Donc, vous voyez réellement satellite des images au lieu de les jolies couleurs. Et le soupçon Je vais vous donner est de changer le type de la carte. Retour à qu'obtenir commencé page pour inspiration. Comme vous avez pu glaner, si vous êtes à la recherche, Il y en a tant d'autres choses que vous pouvez faire. Certains d'entre vous ont déjà modifié le type de carte. Mais vous pouvez do-- par exemple, laissez-moi aller à quelque chose que nous avons fait pour le cours I teach-- maps.cs50.net. L'un de nos undergrads ont fait cela. Nous centrons notre carte sur Harvard Yard et superposer tous ces noms de construction, et nous avons eu l'ajouter ceci. Donc, si je veux chercher, par exemple, Matthews Hall, nous avons un menu déroulant peu. Et je pense qu'il utilise Bootstrap, le bibliothèque, nous avons discuté plus tôt pour cela. Et si vous cliquez sur Matthews Hall, immédiatement saute la carte à un certain emplacement, et il montre vous une image dans ce petit pop-up. Mais même ce petit pop-up, nous ne mettons en œuvre. Si je fais défiler vers le bas sur notre obtenir commencé et cherchez des fenêtres d'information, vous verrez que certains des fonctionnalité vous vous peut ajouter, mais avec un peu plus de complexité, est ce qu'on appelle une fenêtre d'information. Et si je clique sur un exemple ici, ce qui est ce qui est amusant, vous pouvez faire des choses comme ça, en cliquant sur un marqueur, puis voila, informations apparaît. Nous avons donc pas tout à fait mis en place suffisamment de fonctionnalités de JavaScript de brosser un tableau de exactement comment vous pourrait câbler toutes ces choses ensemble, mais nous avons sorte de gratté la surface. En fait, ce que je viens de le faire quand J'ai cliqué sur ce marqueur, a déclenchement d'un événement, un que l'on appelle le clic événement. Et nous avons effectivement vu une événement plus tôt aujourd'hui, le soi-disant soumettre un événement, quand nous empêchons l'utilisateur de rechercher des chats. Nous avons donc choisi de genre et choosed parmi toutes ces différentes caractéristiques, pour vous donner une idée, nous l'espérons, de ce que vous pouvez réellement faire avec un peu plus le confort dans la programmation, et des ressources complètement libres. Des questions? Non? Ceci est votre dernière chance, au moins aujourd'hui, un vendredi, pour obtenir quelque chose de votre poitrine de sorte que vous sortez d'ici, confiant et confortable. Oui. AUDIENCE: Pourquoi ne pas vous ajoutez une chose? DAVID MALAN: Oh mon Dieu. Je dois me reposer ce week-end, je pense. D'autres questions? AUDIENCE: [Inaudible] DAVID MALAN: Vous can-- dans Internet Explorer, repose en paix, vous avez utilisé pour être en mesure de mettre VB scénario, script de base virtuelle, mais qui n'a jamais vraiment pris. Donc, la réponse courte est juste JavaScript. D'autres questions? Bon, eh bien, laissez-moi faire. Laissez-moi prendre nos collègues à l'extérieur. Ils ont une certaine évaluation formes qu'ils veulent tout le monde passer quelques minutes complétant. Ils veulent recueillir ce formulaire et tout renonciations que vous pourriez avoir à l'extérieur. Ils vont aussi avoir des certificats. Je devine qu'il ya encore quelques collations à l'extérieur. Laissez-moi passer ces out, et si vous Pour toute question, dans l'intervalle, Je vais marcher autour de plus individuellement et nous pouvons vous aider à démarrer. Oui bien sûr. AUDIENCE: [Inaudible] DAVID MALAN: C'est généralement vrai ces jours-ci. Certes, avec web logiciel, vous penchez sur d'autres, vous êtes soit utilisant esthétiquement choses comme Bootstrap, afin de ne pas avoir à mettre en œuvre le niveau bas les détails de menus et boutons et tout ça. Vous êtes penché sur quelqu'un comme Google afin que vous ne pas avoir à construire un Uber affaires et une entreprise de cartographie, et un certain nombre de semblables applications. En fait, les connexions sont très populaires, aussi. Si vous avez utilisé Spotify ou un certain nombre de sites, vous connecter à certains sites Web en utilisant Facebook. Alors, quelle est belle, il sont des API pour les connexions de nos jours, de sorte que vous n'avez pas d'avoir votre propre table d'utilisateurs et l'ensemble de votre propre base de données nécessairement dans la même mesure. Vous pouvez laisser faire tout Facebook de cette complexité pour vous. Donc, il est un moment excitant, honnêtement, dans la programmation, parce qu'il ya tant de tiers services que vous pouvez construire sur le dessus. Et encore une fois, le prix que vous payez est financière ou les temps d'arrêt. Si Google descend, il en va de Uber, sans doute, mais peut-être que c'est un compromis raisonnable. Et encore, ce fut l'un des thèmes, espérons-le, pour les deux derniers jours, est ces compromis. Et est rarement là va être une bonne réponse. Il est vraiment le meilleur de deux ou plusieurs réponses. Passez ces autour. Et ces comptes Cloud9 continueront au travail, en théorie, à perpétuité. Vous trouverez peut-être si vous attendez quelques jours ou une semaine ou plus de se connecter de nouveau en eux, il pourrait prendre comme une ou cinq minutes pour ouvrir la sauvegarde, mais c'est juste parce qu'ils ont mis pour dormir à économiser les ressources.