ANDI PENG: Nous sommes presque à travers tous les psets. En fait, nous sommes à travers la majorité des psets les plus difficiles. Donc, nous sommes en fait juste va sorte de brise à travers les deux prochaines semaines. Nous allons commencer à parler de notre derniers projets, les événements à venir dans les prochaines semaines. Et la vie sera un jeu d'enfant. Donc pas trop aujourd'hui. Espérons, sera effectivement brise l'ordre du jour pour aujourd'hui, puis sortir d'ici avec un peu de temps à perdre. Aussi, je tiens à présenter des excuses le manque de bonbons aujourd'hui. Je ne sais pas pourquoi. Mais dans la semaine précédant Halloween, je voudrais oublier bonbons. Donc, je suis en fait juste un vaste déception pour vous en ce moment. Parce que je me souviens littéralement bonbons pour chaque classe, mais Halloween. Mais la semaine prochaine, je ferai venir doubler la quantité de bonbons pour compenser cela, tout pour vous. Ça va être génial. Je dois donc quelques annonces au sujet de certaines ordonnancement. Je ai quelques questions de calendrier. Ensuite, nous allons passer à parler de ce qu'on appelle chmod. Nous allons parler rapidement TCP / IP HTTP. Et puis nous allons coder notre propre site Web en utilisant HTML et CSS. Et puis, je vais peut-être effectivement laisse comme 20 minutes pour parler de pset6. Parce pset6 est effectivement beaucoup de choses que nous avons déjà vu avant, mais je voulais rafraîchir certains de ces concepts ainsi que enseigner une couple de nouvelles fonctions. Frais. Alors tout d'abord, accueillir de retour de pause. Je l'espère vous êtes rupture était agréable. Souhaitez-vous faire pour les vacances? AUDIENCE: Je suis allé à New York. ANDI PENG: Vous êtes allé à New York? Je pense que la moitié de notre école est allé à New York. C'est bon. Je passais la plupart de mon séjour sédentaire dans son lit Netflixing. Et ce fut un bon moment. Mais nous sommes maintenant de retour, de retour dans session, de retour dans le swing de choses. Nous avons un pset raison ce vendredi à midi. Je pense que vous avez déjà ramassé votre quiz, ouais? Donc, quiconque a pas eu leurs questionnaires, s'il vous plaît venir chercher vos quiz de moi à la fin de la section. Ou suivre me down sur le campus. Je l'ai avec moi quelque part. Notre projet final de proposition préliminaire aussi. Donc, pour ceux d'entre nous qui ont jamais pris cette classe avant, le couronnement de CS50 est très abouti dans ce grand projet que les étudiants proposent. Et la pré-proposition, juste une idée générale de ce que l'on pourrait vouloir faire pour leur projet, cette idée est due lundi lundi prochain à midi. Donc, à peu près, David, je pense, parler plus à ce sujet dans la leçon si il n'a pas déjà. Et il ya une page solide sur notre site Web expliquant toutes les exigences du projet. Mais essentiellement, ramasser un sujet que vous avez été intéressé par tout au long de votre temps ici à CS, que ce soit des jeux ou conception ou vidéo ou quoi que ce soit. Et vous pouvez vraiment une sorte de maintenant appliquer certaines des leçons que nous avons appris ici à CS50-- salut, welcome-- à peu près la conduite un projet final de votre choix. Tout cela est dû le lundi est juste un bref texte de présentation par courriel pour moi, une phrase rapide, comme, hey, Andi, Je suis vraiment intéressé à la conception un jeu qui fait ça pour iOS. Frais. Laissez-moi votre mémoire initial des idées pour vos projets finaux. Et nous allons parler à travers ou non qui est en fait une bonne idée ou non, si elle est une bonne idée ou non réalisable. Mais juste la pré-proposition est due lundi prochain. pset6, notre belle web-- ce qui est faux. Pset7? pset6? Il est pset6, non? pset6, notre serveur, est dû Vendredi à midi avec la fin du jour. Les heures de bureau reprennent normalement du lundi au jeudi à 11h00 8:00 semaine. Je pense que pour les communes les trois prochaines nuits. Frais. Avant, nous avions dans le matériau, personne ne avez des questions, des blagues, histoires? Qu'avez-vous fait pour les vacances d'automne? Public: Ce que je fais? ANDI PENG: Déjà il est effectivement il ya des siècles. Christabel allé à New York. Je suis resté ici et Netflixed. AUDIENCE: Oh, oui, je était ici. ANDI PENG: Oh, OK. AUDIENCE: Je ne me souviens pas ce qui en particulier. ANDI PENG: Voilà OK. AUDIENCE: Netflixing probablement. ANDI PENG: Netflixing. Ouais, il est un bon moment. D'ACCORD. Bien. Des questions avant nous sautons dans le matériau? Aussi, nous allons essayer de accélérer à travers la section d'aujourd'hui, pas trop à couvrir. Et nous espérons, nous obtiendrons ici un peu plus tôt. Désolé de ne pas bonbons, aussi. Je suis une déception, surtout pendant Halloween. Bien. Frais. Donc, nous allons commencer à parler un argument de ligne de commande appelé chmod. chmod, tout ce qu'il est est juste un système Unix appelez menée à partir de la ligne de commande de modifier les permissions de fichiers. Ainsi, par exemple, nous avons tous rencontré une page comme cela probablement dans le courant de notre durée de vie d'être un Internet utilisateur, où notre serveur a nous a donné l'erreur de Interdite. Vous ne disposez pas de l'autorisation d'accès, bla, bla, bla, sur ce serveur. Tout ce que signifie vraiment est que les permissions qui étaient attachés à n'importe quel page que vous tentez d'accéder étaient pas ouverts pour vous. Donc, à peu près, chmod est la manière dont nous pouvons modifier les autorisations du système de donner à chacun, l'utilisateur, le groupe, ou dans le monde, ou tout combinaison de ceux-accès à certains fichiers, répertoires, quelque chose de vraiment, quelle sorte de système sur un système d'exploitation. Donc, si l'un des gars ont ordinateurs Si vous vous sentez comme suivre avec moi aujourd'hui, totalement sentir libre de taper simplement les choses dans. Si non, vous pouvez tout simplement flâner. Donc, je vais effectivement tirer jusqu'à mon terminal à l'heure actuelle. Ainsi, la commande à exécuter chmod, ou au moins juste de lister les autorisations de votre répertoire de fichiers, est juste ls -l. Comme vous pouvez le voir, un tas de trucs apparaît dont la plupart est important pour nous sur le côté gauche ici. Les gars, vous voyez un tas de RS, ws, 1 /. Ouais. Ce sont essentiellement juste toutes les autorisations de fichier pour expliquer ce que certains répertoires et les fichiers dans votre système ont. Donc, revenons à Le point ici de puissance. Donc, en plus des noms de fichiers comme vous les gars pouvez voir sur la droite, nous cherchons à voir essentiellement seulement la colonne de gauche. Donc, en plus juste les noms de fichiers, nous peuvent voir les permissions des fichiers, leur le groupe propriétaire, le nom du groupe, la date que le dossier était dernière modifiée, et cetera. Vous pouvez voir beaucoup de choses en utilisant chmod. Donc, la façon dont nous lisons chmod est que la première lettre que nous ignorons à peu près en termes d'autorisations de lecture. La première lettre nous dit exactement ce que type de système que nous accédons. d, dans ce cas, est un dossier ou répertoire. Nous savons donc que le moment mon espace de travail la section sept était un répertoire. Et puis vous voyez trois triades, essentiellement juste trois ensembles de trois caractères. Et vous pouvez penser de chacun comme un peu. Donc, vous avez juste trois ensembles de trois bits, neuf bits au total. Vous les traitez en groupes de trois. Ainsi, le premier groupe de trois est toujours vos autorisations utilisateur. Votre deuxième groupe de trois est toujours vos permissions de groupe. Et votre troisième ensemble de trois est toujours comme le monde, les autorisations partout. Donc je suppose que la facilité question à se poser est ce qui est la différence entre l'utilisateur et le groupe. La principale différence entre l'utilisateur et groupe est que l'utilisateur est tout simplement vous personnellement accède à ce qu'il est maintenant. Un groupe peut être si vous avez plusieurs utilisateurs sur un ordinateur, par exemple. Chacun d'entre eux peuvent être traités comme un groupe. Et puis le monde est tout le monde, tout le monde. Donc, nous pouvons voir plus tard comment nous pouvons modifier ceux en différentes autorisations. Donc, à peu près, nous sommes va se concentrer encore sur la partie de gauche, où pour le répertoire CS50 nous voyons drwx, où le r signifie simplement qu'il est lisible. Le W signifie simplement qu'il est accessible en écriture. Et puis les x juste signifie qu'il est exécutable. Vous penseriez il sorte de n'a pas de sens. Il devrait être e. Mais en fait assez x fonctionne un peu mieux, parce que vous pouvez vous rappeler mieux. Ainsi, les trois types de choses que vous peut faire, vous pouvez soit lire un fichier, vous pouvez avoir la permission d'écrire un déposer, ou vous pourriez avoir l'autorisation d'exécuter un fichier. Et la façon dont nous avons réellement représenter ceux qui en bits est le nombre 4, 2 et 1. Donc tout ce qui est lisible est représenté par le nombre de quatre. Tout ce qui est accessible en écriture est représenté par deux. Et tout ce qui est exécutable représentée par 1. Donc, dans ce sens, nous pouvons aussi représenter ces numbers-- salut, accueillir, d'une manière différente. Pardon. Avant tout le monde, je vais présenter des excuses au nom de tous entrant dans la classe aujourd'hui. Je bonbons oublié aujourd'hui. Je suis désolé, je suis un échec cette semaine de l'Halloween. Je vais faire venir le double de la quantité de bonbons prochaine fois pour rattraper cela. Mais de toute façon, désolé à propos de ce que les gars, désolé. Ainsi, la manière que nous pouvons réellement entrée sur notre commande l'argument est que nous peut faire autorisations groupe slash chmod, où le groupe est juste ce groupe, nous essayons de changer. Et les autorisations sont ce que nous voulons ajouter. Ainsi, par exemple, la Plus ajoute des autorisations, et la soustraction enlève autorisations. Et les types de groupe, nous avons notre une pour tous, pour les utilisateurs u, g pour les groupes, ou o pour les autres. Il est un peu abstrait en ce moment. Mais nous allons passer en revue quelques exemples juste pour montrer ce vrai rapide. Tout le monde sur cette bonne diapositive, donc je ne peux passer? Frais. Ainsi, par exemple, rwx. Avant de parler de ce qu'il représente, tout d'abord ce qui ne signifie rwx? Si vous voyez que cette certaine fichier dispose d'autorisations de rwx, ça veut dire quoi la personne pourrait être en mesure de le faire? AUDIENCE: lire, écrire et exécuter. ANDI PENG: Oui, exactement. Vous pouvez lire écrire et exécuter. Parce que tous les trois de ceux personnages sont présents. Donc, si nous allons de l'avant et de parler à ce sujet en termes de bits, la rwx peut également être représenté en tant que 700. Parce que, comme vous pouvez le voir dans quelle sorte de fichier permission de répertoire, il ya trois triades. Dans ce cas, seul le premier triade a rien là. Donc dans ce cas, le r est 4, le w est égal à 2, et x est le 1. Si vous ajoutez ceux ensemble, il est 7. Et donc si vous convertissez à binaire, il est 700. Parce que 7 est la première triade. 0, il n'y a rien présent dans la deuxième triade. Et puis il n'y a rien présent dans la troisième triade, de sorte que l'autre est 0. Donc, dans le même sens, un tas de triades peut être représenté simplement en bits, juste en binaire ainsi. Donc 700 signifie exactement la même chose que rwx ------ en termes d'autorisations. Tout le monde a bien compris? Frais. Et ainsi chmod 111 donnerait les autorisations pour le fichier? Donnez-vous les gars un couple secondes pour convertir cela. Rappelez-vous, la première triade est pour l'utilisateur. La deuxième triade est pour le groupe. Et la troisième triade est pour tout le monde. Et ainsi chmod 111 donnerait qui type d'autorisations et à qui? Prenez quelques secondes pour réfléchir et revenir. Ouais. Auditoire: Alors, tout le monde peut exécuter. ANDI PENG: Ouais, exactement. AUDIENCE: Mais personne ne peut lire ou écrire. ANDI PENG: Et sentir libre pour expliquer à tout le monde comment vous êtes arrivé à cette conclusion. AUDIENCE: Eh bien, pour l'utilisateur, le groupe, et le monde, tout est 1, qui est le code de l'exécutable. ANDI PENG: Oui, exactement. Donc 1, dans ce cas, tout ce que nous savons est que ce soit le code exécutable. Parce que la lecture est 4. L'écriture est 2. Et l'exécutable est 1. Donc, est tous les trois triades sont 1, que signifie que dans le monde, à l'utilisateur, et pour le groupe, ils sont tous exécutable. Tout le monde bien avec qui? D'ACCORD. Et si la deuxième voie que nous pouvons réellement écrire ce aussi est que vous pourrait juste faire chmod un plus x. un moyen tout ou tout le monde. Le moyen de plus de donner des autorisations. Et puis le x signifie exécutable. Donc, il ya deux commandes sont en fait identiques. Donc, si vous souhaitez exécuter ceci dans votre terminal, vous faites chmod 111, nom de votre répertoire ou votre fichier. Ou vous pouvez faire un plus chmod x, nom de votre fichier de répertoire. Même chose, juste un moyen plus facile, peut-être, pour certains de représenter ou de changement permissions de fichiers. Chacun OK avec chmod avant de passer? Frais. Alors maintenant, nous allons à la tête dans un quelques diapositives de concepts très abstraits que je suis à peu près va brise à travers. Et il est tout à fait OK si vous ne comprends pas tout. Même maintenant, je fais toujours pas vraiment comprendre complètement tout. Mais il est plus d'obtenir le haut niveau de compréhension de la façon dont certaines de ces choses fonctionnent. Donc, nous allons parler rapidement sur le protocole TCP / IP, qui est juste Transmission Control Protocole slash protocole Internet. Rappel de conférence, David, vous at-il enseigner l'exemple où il avait passe les notes dans une enveloppe jusqu'à que le haut de la salle de conférence? Donc, dans l'auditorium de l'école de droit David a démontré essentiellement comment TCP / IP fonctionne dans le sens que tout ce qu'il est est un moyen de garantir que les données a été livré à travers un serveur ou sur l'Internet. Ainsi dans l'exemple de l'enveloppe et le message, l'utilisateur à la fin pourraient voir que, oh, je devais recevoir quatre paquets d'informations. Mais je effectivement reçu que trois. Cela signifie que je dois manquer un. Et on n'a pas été livré. Et si TCP / IP sur Internet, grâce à votre ordinateur et le serveur, fait exactement la même chose. Tout ce qu'il fait est de spécifier une cadre dans lequel une des données perdues les paquets peuvent être renvoyés et reçus. Comme sur Internet lorsque vous essayez pour accéder aux fichiers en ligne ou envoyer des fichiers à votre ami ou de regarder web navigateurs, des milliers des milliards et des milliards d'octets d'informations sont transférés par milliseconde. Et il est vraiment, vraiment déroutant. Et il est vraiment difficile de réellement savoir ce qui a été envoyé et ce qui pas été envoyé. Et si TCP / IP spécifie simplement un cadre cohérent dans lequel votre site Web navigateur et votre serveur peut sorte de communiquer une avec l'autre, il suffit assurez-vous que les paquets sont tous ici et rien de perdu et toutes les données que vous avez demandé est en fait afficher correctement. Tout le monde sur OK juste que très brève niveau élevé comprendre? Frais. Alors nous allons déplacer à parler de HTTP, qui est juste Hypertext Transfer Protocol. HTTP, tout ce qu'il est est ce que toute page ou le fichier est accessible sur votre site, le serveur renvoie une HTTP code d'état en réponse à la demande veillant à ce que soit, oh, cette demande a traversé. Et tout va afficher correctement. Ou, oh, non, 404. Quelque chose a mal tourné. Oh, je ne peux pas afficher. Tout ce qu'il est que tout ce qui est vous essayez de l'accès, utiliser que l'utilisateur tente d'accéder, sur la internet-- tout en veillant que soit vous avez avec succès accessible quelle qu'elle soit ou non accessible avec succès tout ce qu'il était. Et si le statut HTTP Code vous fournit simplement un moyen d'être en mesure de savoir si elle était ou non couronnée de succès ou non. Ainsi, par exemple, une demande d'exemple. Vous pouvez voir ici, il est habituellement généralement de quatre lignes. Nous avons un HTTP GET 1.1, qui est juste l'URL de demande de procédé, le protocole la version, le nom du champ, et la valeur du champ. Donc pas besoin de complètement mémoriser quelque chose ici. Tout type de familiariser vous avec la façon dont ceux-ci regardent. Dans cet exemple, la méthode de demande URL est simplement tout ce que demande vous envoyez le serveur. Comme, hey, serveur, je veux vraiment accès bla, bla, bla, page HTTP. La version du protocole est juste ce la version de votre hôte ou votre serveur utilise pour accéder aux informations. Le nom de domaine est le site ou de la URL que vous tentez d'accéder, dans ce cas, www.apple.com. Et la valeur de champ est juste généralement name, value. Et il peut être toute sorte de combinaison des lettres ou des chiffres ou que ce soit. Ainsi, une demande typique, de sorte que ce que votre ordinateur fait envoie au serveur qui dit, hey, vous savez ce que je dois cette affiche, Voilà le genre de demande en fait qu'ils reçoivent. Une réponse d'exemple de ce que le serveur enverrait de nouveau à vous serait à peu près la même chose, sauf avec un code d'état au sommet. Donc, 200, 2 0 0 est toujours le code de statut pour OK. Comme, OK, cette demande a traversé. Vous étiez en mesure d'accéder tout correctement. La vie est belle. La vie est belle. Tout est totalement bon. Et donc cela indique simplement votre navigateur et votre serveur, hey, la bonne de tout. Je suis toutes les informations que je dois. Frais. Mais le problème est parfois des problèmes viennent lorsque vous have-- dernière, je pense Je parlais de doublons. Vous avez des réponses moins bonnes. Ainsi, par exemple, 404 La page est introuvable. Vous avez parfois un accès Interdite. Vous avez divers autres codes d'état que je suis sûr que vous avez tous vu quand vous êtes en essayant de faire des recherches sur Internet. Et votre navigateur vous donne la, non, ne peuvent pas accéder. Et vous êtes comme, eh bien, merde. Il suffit donc à peu près, il ya certains codes d'état assez communs. Peut-être vous familiariser avec lesquels ceux-ci sont. Le plus drôle que Je pense que je l'ai jamais entendu de-- si vous arrivez à voir tous en ligne, pour une raison quelconque il ya effectivement un véritable code de statut Je suis appelé 418 une théière. Je googled où le origine de cette était. Et apparemment, un poisson d'avril " Il ya un jour quelques décennies, quelqu'un a pensé que ce serait drôle pour créer un nouveau code d'état, appelé 418 Je suis une théière. Légitimement, le nom de cette code est appelé, je suis une théière. Je oublier ce que vous avez à la page aller à réellement faire cet affichage. Mais apparemment, vous pouvez réellement obtenir un code d'état de Je suis une théière en quelque sorte par faire quelque chose. Donc, il ya des centaines et des centaines de codes d'état. Certains d'entre eux font plus sens que d'autres. Mais à peu près juste familiariser vous avec les plus courantes. Le corps d'entité est demandée court et fort, apparemment. Alors parfois il ya plus erreurs effrayant que je suis une théière. Mais cela est une que je suppose vous sorte d'espoir de frapper. Mais je ne pense pas que vous voulez. Tout le monde bien sur tout statut codes, les demandes, les processus, décisions que l'information est livrée correctement? Alors maintenant, nous allons à la transition dans une partie amusante de l'article aujourd'hui, où l'on parle un peu de HTML. HTML, tout ce qu'il est HyperText Langage de balisage. Il est juste la langue standard vous utilisez pour créer tous les web pages sur Internet. Ainsi, toute page Web, ce qui est votre page web préféré? Quel est votre page Web préférée? AUDIENCE: [inaudible]. ANDI PENG: Désolé? AUDIENCE: Tumblr. ANDI PENG: Tumblr. Donc, Tumblr est écrit en HTML. Et donc nous allons effectivement passer et jouer avec certaines de ces choses plus tard. Quasiment tout ce que vous besoin d'apprendre, de connaître, à écrire en HTML vous pouvez probablement Google vient sur Internet. HTML, il est pas un programme comme C où vous pouvez créer des variables et à faire choses cool avec elle. Il est plus juste de, oh, voilà comment je veulent que les choses apparaissent sur mon site. Et je vais juste mettre dans. Et ça va coiffer. Donc, HTML, en un sens, il est juste comme un langage de mise en forme ou un modèle. Il est beaucoup plus facile. Il est beaucoup plus facile à apprendre, beaucoup plus facile à écrire dans que votre programmation typique la langue, très facile, très accessible à l'utilisateur et convivial. Donc, nous allons en fait à jouer autour, écrire nos propres pages aujourd'hui. Mais avant de commencer, je veux juste aller sur quelques brèves meilleures pratiques. Parce que le HTML est un tel facile langue et parce que même si vous faites quelques choses mal, il peut parfois ne pas remarquer, nous voulons nous assurer que nous sommes effectivement adhérer à nos meilleures pratiques à faire en sorte que les choses qui pourrait aller autour, mais ne vont pas toujours de ne pas aller à droite assurez-vous qu'ils sont minimisés. Donc, à peu près, assurez- vos fermeture toutes vos balises quand vous écrivez en HTML. Si vous ouvrez un corps, assurez-vous que vous êtes fermeture avec un corps quelque part. Vous voulez vous assurer que votre page Web valide en utilisant ce qui est appelé le W3 Validator. Vous pouvez simplement que Google en ligne, et il ya un lien vers elle. Et puis vous voulez HTML distinct, qui est votre langage de balisage de votre style, qui est la langue de CSS que David démontré que nous sommes aussi va jouer un peu avec conférence. Frais. Donc, chaque fois que vous voulez exécuter HTML sur l'appareil de CS50, nous allons lancer un programme appelé apache, qui tout ce qu'il est juste un construit en serveur web que tout le monde dans CS50 a accès. Nous appelons cela apache50 juste parce que nous appeler tout 50 en CS50. Donc, la façon dont vous démarrez le web CS50 serveur est en tapant sur votre commande ligne apache50 commencer dot. Et si vous voulez mettre fin à tout temps, vous ne finissez apache50 aucun point. Et vous frappez simplement sur Entrée. Et il devrait se diriger ici bientôt. Ouaip. Donc je vais juste aller rapidement sur un exemple d'une page web très brève. Et nous allons passer comme 10, 15 minutes à jouer autour d'écrire nos propres pages Web. D'ACCORD. Donc, ici, dans la IDE-- tout le monde peut voir que? Pas vraiment. Ici, je vais un zoom avant. Je viens de cette brève modèle ici avec rien fait en elle. Nous allons juste d'écrire rapidement un programme HTML dans lequel nous venons dire bonjour au monde. Donc même chose que dans C, maintenant nous sommes juste faire en HTML. Quelqu'un veut-il en fait juste essayer de me donner la première chose que vous aurait à mettre dans un document HTML? Ouais. Audience: Les supports, le [inaudible]. ANDI PENG: Yep. Donc, quelque chose qui est très unique HTML que nous typiquement traditionnellement ne rencontre pas dans les autres commande langages de programmation de niveau ligne est que nous réellement spécifier le type de fichier ce qui va être au sommet de notre code. Donc, dans ce instance-- je pense que ce soit la bonne commande, non? Ouaip. Au sommet, vous voulez juste d'inclure Bang DOCTYPE html entre parenthèses juste de dire à votre ordinateur, hey, regarder dehors. Et le document HTML est à venir. Et puis, comment voulons-nous pour commencer notre dossier? Si nous voulons juste pour dire bonjour, avoir une page web qui dit bonjour au monde, comment allons-nous à propos de la construction de cette? En fait, nous allons tourner à Google. Et nous pouvons le faire. Ouaip. Nous y voilà. Donc HTML. Comme vous pouvez le voir, mon navigateur est en fait coiffer automatiquement pour moi. Même chose que dans C, lorsque vous créer une accolade ouverte, votre navigateur automatiquement ajoute dans une accolade à proximité. Heureusement, notre IDE aime faire pour nous aussi. Alors maintenant, nous pouvons genre de type le début d'une balise, et il va nous dire toujours pensez à taper la fin de l'étiquette. Je pense que ce doit être capitalisé. Et puis, nous voulons ajouter, toujours, une tête dans laquelle est le titre. Nous voulons juste à appeler peut-être ce bonjour, puis le corps. Et là vous allez. Qui est en fait notre document HTML. Ainsi, la manière que tout document HTML est toujours de style in-- même chose avec void main int. Vous voulez toujours avoir HTML une balise ouverture et de fermeture en haut et en bas de votre code. Vous voulez avoir une tête à l'intérieur de qui contient le titre, juste ce va afficher l'onglet de votre web page, puis un corps à l'intérieur duquel seront effectivement afficher le contenu de ce que vous voulez faire. Donc, si vous vouliez réellement fonctionner ceci, je vais faire un zoom arrière. Vous pouvez réellement commencer apache50 commencer dot. Frais. Et comme vous pouvez le voir, maintenant ce lien a surgi. Il dit que votre site est maintenant disponible à un certain lien ci-dessous. Donc toute notre IDE a done-- pas IDE, sorry-- ouais, notre IDE a fait est de créer un web lien sur lequel l'ensemble de nos pages web peut être consultée sur le serveur. Donc, nous allons jeter un coup d'oeil ici. Cliquons sur ce point, aller à hello.html. Et vous voyez une très simple page web pour Bonjour tout le monde. D'ACCORD. Nous allons en fait juste avoir everyone-- ouais, quoi de neuf? AUDIENCE: Je dois une question fondamentale. ANDI PENG: Yup. Public: Comment épargnez-vous votre fichier au format HTML? ANDI PENG: Ouais. Donc, si je devais créer un nouveau fichier, si je fais un nouveau fichier, Untittle, si je le fais, section.html, boom, qui est ce que je dois faire. AUDIENCE: [inaudible]? PENG ANDI: Non AUDIENCE: [inaudible]. PENG ANDI: Non AUDIENCE: [inaudible]. ANDI PENG: Ouais. Pretty much, l'extension sur le fichier qui est à l'intérieur de votre IDE, qui indique à l'ordinateur, qui dit le navigateur, hey, regarder dehors. Cela va être le code écrit dans cette langue. Ainsi, par exemple, dans Microsoft Word, qu'est-ce que tous les documents Word terminer, quelle extension? .doc ou .docx, non? Tout ce qui est fait précise à votre système d'exploitation, hey, vous avez un document Word à venir. Ouvrez-le avec Word. Même chose avec les fichiers PDF. Il sait, oh, je dois d'ouvrir ce fichier avec Adobe Reader ou Adobe Acrobat. Et si les extensions fonctionnent de la même façon que dans votre ordinateur. Si vous indiquez votre page de code d'être nommé HTML, alors il sait, oh, vous avez le code HTML. Je vais traiter comme code html. Donc, il est super intelligent dans ce sens. Donc tout le monde, prenons comme 10 minutes et il suffit de créer nos propres sites Web. Ajoutons dans les belles choses. Sentez-vous libre de dire ce que vous voulez. Je veux juste vous assurer que Les serveurs de chacun sont en cours d'exécution correctement avant que nous vous libérons dans le pset. Parce que si vos serveurs ne pas courir pour le pset, ce sera vraiment, vraiment mauvais. Je vais juste flotter autour et voir ce que tout le monde travaille. Comment ça va? AUDIENCE: Je viens d'avoir sur mon ordinateur. ANDI PENG: Voilà OK. AUDIENCE: [inaudible]. ANDI PENG: Juste votre IDE. Ouais. AUDIENCE: [inaudible]. PENG ANDI: Il est OK. AUDIENCE: [inaudible]. ANDI PENG: Totalement amende. Tout le monde est accès leur serveur Web OK? Est en cours d'exécution apache50 OK? Je pense que dans certains des les autres sections, nous eu des problèmes avec des personnes non pouvoir accéder au serveur. Ouais. Donc, il suffit de lancer apache50 Espace Start période de l'espace. AUDIENCE: [inaudible]. ANDI PENG: Yup. Bien? AUDIENCE: [inaudible]. ANDI PENG: Oh, OK. Donc, vous êtes censé avoir un espace. Donc apache50-- AUDIENCE: je l'ai fait. ANDI PENG: espace --start. AUDIENCE: Oh, l'espace dot. ANDI PENG: Yup, espace dot. Et voilà. Alors si vous avez une page HTML créée, alors vous pouvez simplement aller directement le lien qu'il spécifie. Et vous devriez être en mesure d'y accéder. Tout le monde été en mesure de accéder à leurs pages Web OK? AUDIENCE: [inaudible]. ANDI PENG: Oh, qui est OK. AUDIENCE: [inaudible]. ANDI PENG: Ouais. Je pense que vous pouvez réellement ouvrir il au sein de votre navigateur, navigateur et pas seulement votre navigateur IDE. Ouais, je pense que si vous copiez et collez. Public: Et puis comment pouvons-nous l'éteignons? [INAUDIBLE] ANDI PENG: Ouais, vous faites apache50 arrêter sans délai. Ouaip. AUDIENCE: [inaudible]. ANDI Peng: En l'absence de période. Ouais. Nous y voilà. Ouaip. Nous créons nos propres pages Web. AUDIENCE: Oh, cool. ANDI PENG: Ouais. AUDIENCE: Je ai une question. Donc apache 50-- PENG ANDI: 50, ouais. AUDIENCE: [inaudible]. ANDI PENG: Quoi? C'est étrange. Voir, qui était un peu de la question ce qui se passait avant. D'ACCORD. Me voir après l'article. Parce que nous avons de la problèmes avec le serveur. Et vous voulez faire Vérifiez que votre serveur est courir avant de commencer le jeu de processeurs. Parce que vous allez en avoir besoin. Ouais. Y at-il quelqu'un d'autre qui n'a pas été en mesure d'obtenir leur serveur pour commencer? Pour ceux d'entre vous qui veulent ajouter de style supplémentaire à vos pages Web, nous pouvons réellement faire ce que David a fait en conférence ainsi, qui est de créer un style supplémentaire feuille, qui est un point de CSS, Cascading Style Sheet et effectivement il suffit d'ajouter dans. Ainsi, par exemple, je viens de créer à peu près à peu près la même exacte David a fait en cours. Vous pouvez très bien juste faire corps. Vous avez ce qu'on appelle des balises dans laquelle vous pouvez demander à ce que la section IDE vous voulez au sein de votre réelle à la page HTML. Ainsi, le corps de la page, vous peut faire centre d'alignement de texte. Et puis je vais créative une balise appelée haut à l'intérieur dont je veux ces choses arriver, attribuer une plus grande taille de pixel pour la police. Je veux que le poids de la police à faire preuve d'audace. Et je veux la couleur être bleu, juste arbitraire valeurs que je décidé de choisir. Je peux créer une autre balise appelée milieu. Taille de la police, le rendre un peu plus petit. Et puis je peux créer une autre balise appelé en bas où je veux que la taille de la police être encore plus petit encore. Et donc à peu près ceci est juste exemple de code source ou de sources de feuilles de style qu'il est très facile de simplement Google. Si vous dites, oh, je veux que mon police être en italique et de couleur vert foncé, vous pouvez probablement Google, puis il vous dira les étiquettes ou les ID appropriés pour créer. Et la façon dont vous le feriez effectivement genre d'avoir cette dans un document HTML ou utilisez il est tout ce que vous avez à faire ici est à la tête ajouter un lien vers la feuille de style. Ainsi, vous pouvez juste un lien égaux href quel que soit le nom de votre feuille de style est. Et puis la relation est une feuille de style. Donc, dans les tout document HTML, aussi longtemps que vous incluez cette feuille CSS de dot, vous devriez être en mesure d'accéder à et y ont les propriétés. Ainsi, par exemple, ici je viens créer une autre page web par exemple. Ce sont les bienvenus à la section de CS50 Les mardis de 02h00 à 3h30 avec moi. Et puis je l'ai ajouté une belle image qui nous devrions être potentiellement en mesure de voir. Donc, si vous jetez un oeil ici, si vous allez à style.html, nous avons créé une page web avec des chatons. Parce chaton sont impressionnantes. Donc, l'ajout d'une image est juste img Link SRC. Joli beaucoup, si il ya toute sorte de fonction vous voulez ajouter à votre website-- alors disons, vous voulez ajouter un menu ou une barre de recherche ou comme un image-- seulement Google comment faire cela. Et vous venez de plop dans ce format. Et vous pouvez juste assez bien il suffit d'ajouter dans. Il est vraiment, vraiment facile. Nous créons notre propre pages web en ce moment. Si tu veux-- AUDIENCE: [inaudible] ANDI PENG: Désolé? AUDIENCE: [inaudible]. ANDI PENG: Oh, la div est juste une division en me disant que, oh, je dois une certaine section intitulée milieu dans lequel je sollicite mon tag CSS, puis mon autre division avec le fond. Voilà tout ce qu'il vous dit. Parce qu'il est bon de garder choses intéressantes dans l'ordre, de sorte que le programme sait exactement comment faire fonctionner. Et pense que je peux copier-coller ce dans mon navigateur réel ainsi. Il devrait être bon. Ouais. Yay. Donc, si tout le monde veut tout simplement essayez de créer une page web, nous allons prendre encore deux à trois minutes. Je veux juste vous assurer Les serveurs de chacun sont en cours d'exécution et tout le monde a un idée de la façon de le faire. Si vous les gars veulent sortez vos ordinateurs. Ne fonctionne toujours pas? AUDIENCE: Je suis juste [inaudible]. ANDI PENG: Peut-être essayer de mettre à jour 50 ainsi. Ouais. AUDIENCE: [inaudible]. ANDI PENG: Ouais. Ainsi, la manière que vous commencez une nouvelle serveur web sur l'IDE est juste faire apache50 espace démarrage de l'espace dot. Je voulais juste vous assurer Les serveurs de chacun sont en cours d'exécution sur OK. AUDIENCE: Ici, sur le terminal? ANDI PENG: Ouais. AUDIENCE: [inaudible]. ANDI PENG: Apache. En fait, je pense que vous êtes fonctionnant déjà quelque chose. Ouais, vous êtes réellement l'exécution d'un autre serveur. Ouais, vous êtes bon. Tant que cela fonctionne, vous êtes OK. AUDIENCE: OK. PENG ANDI: Il ya deux façons d'exécuter des serveurs. Donc, tant que l'un des moyens travaille, tout va bien. Nous allons prendre une minute juste sorte de finir les finitions de ce que page Web que vous les gars voulaient faire. Tout le monde est travaillé par le chemin? Les serveurs de chacun sont courir ailleurs pour le vôtre? Nous allons comprendre cela. Et HTML est assez simple. Donc, je pense que nous sommes tous bons. Ouais. Je reviendrai. AUDIENCE: [inaudible]. ANDI PENG: OK. AUDIENCE: Donc, il est tout simplement commencé à charger. ANDI PENG: Pas de soucis. Donc, HTML, il ya le code source qui sera en ligne après l'article. De plus, David a un ensemble tas en ligne aussi bien. Tout type de regard sur elle pour voir comment les pages HTML sont écrits. Il est assez facile. Tout ce que vous ne savez pas, vous avez à peu près juste Google et vous êtes bon. Je veux juste vous assurer que vos serveurs sont en cours d'exécution. Public: Est-il faire cela souvent? PENG ANDI: Il n'a jamais passé pour moi. Je ne savais pas que cela pouvait même hiberner. AUDIENCE: [inaudible]. ANDI Peng: Je pense everyone-- la mine n'a jamais hiberné avant. Et je ne sais pas pourquoi. C'est étrange. AUDIENCE: [inaudible]. ANDI PENG: est le vôtre en hibernation? AUDIENCE: [inaudible]. ANDI PENG: Ouais. PUBLIC: Il est OK. Donc, une fois qu'il est ouvert. ANDI PENG: OK. Nous allons traiter avec un serveur questions après l'article. Vous devriez être bien. Bien, vous voulez vous assurer que vous obtenir les résoudre avant de vous quitter. Parce que si votre serveur de ne fonctionne pas, alors vous êtes ne va pas être en mesure de faire la pset, comme une partie de la pset. Donc, vous voulez vous assurer que ce qui travaille. Frais. Bien. Dites au revoir chatons. Je passais beaucoup de temps à la recherche de cette image de chaton à enfiler. Donc, de toute façon. AUDIENCE: [inaudible]. ANDI PENG: Désolé? AUDIENCE: [inaudible]. ANDI Peng: Je pense qu'il est sur le site. Comme la spécification? AUDIENCE: [inaudible]. Je pense que la spec est juste en ligne dans sept semaines. Je pense qu'il est appelé pset6, même si nous sommes sur la semaine de sept, qui est un calcul binaire. AUDIENCE: Mais je veux dire si vous vouloir regarder si vous at-- vouloir tirer vers le haut notre version de le site Web de notre Sever? Donc, comme server.c est le pset, non? Si vous voulez regarder cela, comme la façon dont il vérifie? ANDI PENG: Oh, donc en fait le pset, tout ce que nous faisons ici est implementing-- ici, Je vais aller plus brièvement. Donc, pour tout le monde qui vient obtenu de l'article, vous les gars avez de la chance. Il ya très peu de matériel pour couvrir effectivement aujourd'hui. Je vais passer la prochaine 20 minutes en passant par pset aide. Parce qu'il ya une certaine utile fonctions qui aideront votre vie. Et nous espérons, nous serons sur d'ici comme 20 minutes. D'ACCORD. Donc pset7 est erroné. Même si nous sommes sur la semaine sept, il ya en fait pset6. Je vais changer cela. Tout ce que nous faisons dans pset6 est la création d'un serveur web. Cela sonne super-effrayant. Et surtout pour ceux d'entre vous qui ont déjà regardé le code de distribution, il ya beaucoup de code, beaucoup de code. Mais est totalement OK. Parce que le Nitty Gritty fait partie de la création le serveur se fait par nous. Tout ce que vous êtes vraiment demandé à faire dans ce pset est juste pour faire un peu de manipulation de chaînes dans le fichier I / O. Il est en fait comme assez simple. Donc, lorsque vous téléchargez premier that-- qui ici a effectivement déjà téléchargé le pset et pris un coup d'oeil? Bien. Ouais. Il est comme 500 lignes de code que vous allez être comme, que se passe-t-il? Et cela est tout à fait bien. Assurez-vous que vous regardez les walk-through. Parce que David et-- Je ne sais pas. Je ne pense pas que ce soit de Zamyla, celui-ci. Mais je pense que d'autres walk-through sont assez utile en termes de juste vous savez ce qui se passe à l'intérieur de votre code. Et il est tout à fait OK. Parce que les quatre fonctions que vous êtes demande de mettre en oeuvre réellement avoir zéro à voir avec le serveur réel. Tout ce qu'ils ont à faire est de simplement l'analyse des chaînes différentes, recherche par le biais des chaînes, à assurer que les choses sont en train de faire ce qu'ils sont censés faire. Donc, à cet effet, il ya certaines fonctions très, très utiles, en particulier pour les cordes la manipulation, que nous devrions tous aller plus que je pensais que je être très utile pour vous les gars à apprendre avant de tenter la pset. Et ils sont tous contenus au sein de votre bibliothèque string.h. Il ya probablement plus utile fonctions que je ne l'ai pas inclus ici, parce que je soit ne les utilise jamais ou peut-être que je ne savais pas qu'ils existent. Sentez-vous libre de parcourir student.h. Parce qu'il va y avoir beaucoup des fonctions qui sont très utiles. Donc les six que je utilisez le plus dans mon pset quand je faisais la semaine dernière étaient strtok, strchr, strrcher, strstr, strcasecmp et strcpy. Et si les deux derniers peuvent sembler assez familier à la plupart d'entre vous. Str comparer cas, il ne fait que comparer cordes pour les vérifier pour l'égalité, y compris les cas. Et strcpy seulement des copies une corde dans un tampon. Et si ces deux devrait sembler très familiers à vous les gars à ce point. Parce que nous les avons utilisé beaucoup, surtout pour les dernières psets. Mais peut-être les quatre premiers vous avez pas vu jusqu'à présent. Mais je vais juste marcher à travers eux. Parce qu'ils vont faire vos vies vraiment, vraiment facile pour-- pas facile, mais beaucoup plus facile pour cette prochaine pset. D'ACCORD. Donc char * strtok, telle est la fonction définition de cette fonction contenait au sein de la chaîne, bibliothèque h. Si vous êtes donné une entrée du char * chaîne, qui est juste une chaîne, ou un caractère constant * deliminator, delim pour faire court, tout qu'il fait est casser la plus grande chaîne dans une série de ce que nous appelons jetons séparés par une certaine valeur. Donc dans un sens, si je devais donner vous section.7.php, ceci est une chaîne. Donc, ce serait si je devais passer dans ce que mon str, mon char * str, si mon deliminator était point, tout cela voudrais faire est la recherche par chaîne. Et la première fois qu'il voit un point, il serait tout simplement revenir au pointeur pour le dernier jeton trouvé dans la chaîne avant cela. Donc, ce serait aller à droite ici. Et il serait juste me donner 7.php. Et si je devais appeler le fonctionner une fois de plus, il serait juste me donner l'.php. Et ainsi tout cette fonction fait est briser la chaîne plus grande en chaînes plus petites en fonction sur ce que vous cherchez. Ainsi par exemple, dans votre fonction Look Up si vous voulez regarder ce certains personnages viennent à propos ou si des points se produisent ou extensions se produisent, cette fonction serait assez utile. Ouais. Pas de soucis. Ce sera tout être-- ouais, quoi de neuf? Auditoire: Alors, dans la première ligne, si nous utilisions cet exemple, Que ferions-nous insérer dans cela? ANDI PENG: Ouais. Vous souhaitez tout simplement appeler un strtok delim chaîne de virgule. Et chaîne est égale à section.7.php. Et puis vous êtes delim pourrait être égale à tout point. AUDIENCE: OK. ANDI PENG: Ouais. Juste comme ça. Toutes ces fonctions sont assez même quand nous allons à travers eux. Ils font juste des choses légèrement différentes. Mais ils vont tous vous rendre la vie beaucoup plus facile. Deuxième fonction, celle-ci est comme super, super, super important, est the-- tenir. Oops. Recherches strchr pour la première occurrence-- effectivement, oui. Strchr est la fonction qui Je suis allé certainement juste. Donc ignorer ce que je disais pour la première fonction. Il est en fait appelé strchr. Donc ce qui est arrivé ici est si vous avez reçu une chaîne dans un char c, il serait tout simplement donner vous quels qu'ils soient. Ouais. Alors, pensez-y comme str, qui est une chaîne, et CHR en tant que char. Donc, tout ce que vous essayez de faire est de rechercher pour le cas où un caractère est dans une chaîne. Et il recherche la première occurrence du caractère c dans la chaîne str. AUDIENCE: [inaudible]. ANDI PENG: Yup. Et puis, si elle n'a pas trouvé , il va retourner NULL. Donc, quelque chose qui va être très utile pour vous les gars à faire le pset Si, par exemple, vous recherchez un l'extension comme un .docx pour un mot document ou un .pdf pour un document PDF, vous pouvez sorte de l'utiliser pour regarder pour tout ce qui est la suite chaque fois que vous voyez un point, non? Et donc à peu près, si vous fonctionner que grâce à la fonction, si elle renvoie NULL, alors vous savez qu'il ne pas trouver de point, ce qui signifie est clairement pas une extension de fichier valide. Ou si elle renvoie quelque chose, alors vous savez il va retourner tout ce qui est en fait après l'extension. Donc ceux d'entre vous qui avait commencé en regardant à travers recherche et analyser, cette fonction de va être super utile. Donc, nous allons en fait de démontrer à l'aide de cette. Pourquoi ne pas vous essayer d'écrire un gars fonction bool phrase char * s que retourne simplement true si s est un phrase et false sinon. Donc, Hint, vous allez à utiliser probablement strchr. Ou vous venez de recherche dans le chaîne pour un certain caractère. Et donc dans une phrase, ce qui sépare une phrase à partir d'une non-phrase, ce caractère spécifique? PUBLIC: Un espace. ANDI PENG: Un espace, non? Et qu'est-ce qu'on va probablement envie de faire au sein de cette fonction ici? AUDIENCE: [inaudible]. ANDI PENG: Nous allons vouloir strchr chaîne pour l'apparence de l'espace. Parce que si elle retourne quelque chose, nous savons que ce doit être une phrase. Cela signifie que nous devons avoir un espace dans cette chaîne. Si il n'y a pas d'espace, alors nous savons que, hey, suppose qu'il est pas une chaîne. Il est probablement juste un très long mot. Donc, je vais vous donner les gars un couple minutes pour écrire cette fonction. Ouais. Public: Avez-vous cette chaîne de l'utilisateur? ANDI PENG: Ouais. Donc, ceci est juste une fonction. Alors, imaginez l'intérieur de votre fonction principale vous avez déjà have-- allons-y ici. D'ACCORD. Donc, je l'ai écrit ce programme où Je dois ma principale fonction où Je viens de créer deux chaînes. Le premier est Salut, mon nom Andi-- est clairement une phrase. Mon deuxième est juste Andi, clairement pas la peine. Et donc je suis exécutant à la fois de ceux cordes à travers cette fonction. Je veux que vous les gars pour écrire phrase froid. Et je stocker ces valeurs, et puis juste les imprimer. Alors, pensez que l'utilisateur est va passer dans une chaîne. Et puis vous allez à l'essentiel déterminer si elle est ou non une phrase et retourner true ou false en conséquence. Si vous les gars veulent donner un bravo ou heads up, hochement de tête, est quiconque est prêt à démarrer ce qui serait bien. Peut-être comme 30 secondes de plus? Bien. Voyons voir si vous pouvez essayer écrit cette fonction. Donc pseudo coding-- je vais juste sorte de marcher à travers ce droit maintenant. Joli beaucoup, nous savons que le fonction que nous devons utiliser. Nous allons appeler cette fonction sur notre chaîne et la recherche d'un espace. Si elle retourne quelque chose, alors nous devons savent que, de toute évidence, cela est une phrase. Parce qu'il ya des espaces. Ensuite, nous allons retourner vrai. Sinon, nous allons retourner faux. Quelqu'un veut-il donner moi la première ligne de code que nous allons réellement à utiliser pour écrire cela? Il est en fait le plus dur ligne de code ainsi. Ouais. Audience: Si strtok s-- ANDI PENG: Juste strchr. AUDIENCE: [interposition VOIX] l'espace est pas égal à null. ANDI PENG: Cool. Tout à fait exact. Tout le monde comprend que la première ligne? Nous allons appeler strstr, qui est une fonction qui effectue des recherches la chaîne s pour l'omble de l'espace. Et si il le trouve, il va retourner un pointeur à l'endroit où ce qui est. Si elle ne trouve pas, il va retourner NULL. Donc, si elle renvoie autre chose que NULL, alors nous savons qu'il a trouvé un espace. Cela a-t-il du sens? Frais. Bien. Donc, si nous savons qu'il a trouvé un espace, que voulons-nous faire? AUDIENCE: Retour vrai. ANDI PENG: Yup. Retour vrai. Et puis, quelqu'un veut finir la fonction pour moi? Ouais. Sinon, juste comme ça. Et essayez de le compiler cela. Ouaip. Donc, comme vous pouvez le voir sur les gars de la sorties, rappelez-vous booléens en C sont toujours exprimées en binaire. 1 est vrai. 0 est faux. Si nous devions exécuter ce fonction sur une seule chaîne, qui est Salut, mon nom de Andi-- Il est clair que le résultat d'une sentence-- imprimé à 1 ce qui est vrai. Le second, qui est juste un mot, le résultat imprimé à 0, ce qui est faux. Tout le monde sorte claire de la façon dont cette fonction a été écrit? Ouais. AUDIENCE: pouvons-nous faire aussi, au lieu de ne correspond pas à pas, est égal à égal à 0, de sorte qu'il est égal à? PENG ANDI: Non Parce strchr est une fonction. Je vais revenir. Alors, quel est le type de retour de notre fonction de strchr? AUDIENCE: Oh, OK. Ou NULL. ANDI PENG: Ouais. Il est un char * qui me dit que tout ce que cette fonction va revenir, ça va être un pointeur. Soit le pointeur va être pointant vers où il l'a trouvé, ou il va revenir un pointeur NULL. Dans les deux cas, ça va pour retourner un pointeur sur quelque chose. Et si vous étiez à assimiler ce qui équivaut, est égale à 0, vous allez obtenir une erreur de compilation. Parce qu'il va retourner un pointeur. Et vous allez essayer de comparer un pointeur sur un entier. Et l'ordinateur est pas allez aimer ça. Oui exactement. Frais. Tout le monde la bonne? Et deuxièmement, nous allons aller sur une fonction appelée strstr. Pas de soucis si ces fonctions sont vous confondent. Ils me confondre. En tant que tel, vous les gars pourrait avoir vu, ils sonnent tous peu près la même. Juste quand vous êtes confus, tirer vers le haut la bibliothèque string.h. Et vous les gars pouvez trier à travers lequel son qui. Donc strstr, qui ne fait que des recherches une chaîne pour une toute autre chaîne. Alors, où seulement strchr recherches pour un seul caractère, Recherches strstr pour une chaîne entière. Donc, je voulais regarder dans, je ne sais pas savoir, Salut, mon nom est Andi. Et le nom de mon meilleur ami est également Andi. Si je voulais chercher dans ce peine pour le mot entier d'Andi, mon aiguille aurait été tout ce que vous cherchez. Et quel que soit votre botte de foin est vous cherchez dans. Donc, si vous êtes à la recherche d'un mot spécifique dans une phrase, ce mot va être votre aiguille. Et puis la phrase elle-même va être votre botte de foin. Et donc il recherche juste la première occurrence de l'aiguille de chaîne dans la botte de foin de chaîne. Il renvoie le pointeur à la première occurrence. Sauf, rappelez-vous, dans ce cas, il est le première occurrence de la chaîne entière que vous êtes à la recherche pour, non seulement un caractère. Et ce qui est presque le même chose que la fonction nous venons de faire, juste avec un peu plus de spécificité. Parce que vous êtes à la recherche pour plus que juste un caractère. Et l'utilisation est exactement la même comme celui que nous venons de faire. Tout le monde OK avec ça? D'ACCORD. Dernière celui que nous allons aller plus est strrchr, qui ne sont pas confondre avec strstr ou strchr. strrchr a une r supplémentaire dans il. Soyez prudent lorsque vous tapez. Vous pouvez vous retrouver, y compris un r supplémentaire compris ou non un r, puis votre fonction est obtenue ne marchera pas. Et vous allez être confus. Veillez à ce que vous orthographe toutes ces fonctions à droite. Donc, est l'exacte strrchr même chose que strchr sauf qu'il cherche pas la première occurrence d'un caractère spécifique, mais plutôt la dernière occurrence. Et donc, dans ce sens, il est presque exactement la même. Mais au lieu de se déplacer transmettre dans une chaîne, vous allez être en mouvement en arrière dans une chaîne. Exactement la même chose, vous êtes juste la recherche dans un ordre différent. Et donc cela pourrait être super, super utile pour votre recherche la fonction, le premier fonction sur votre pset. Imaginons que nous devions écrire un fonction de l'extension vide dans lequel nous passer un nom de fichier * char constant, juste une chaîne, un nom de fichier, qui prend dans ce nom et gravures l'extension de ce fichier. Ainsi, par exemple, si je devais passer dans la chaîne de pset7.zip, il va imprimer simplement l'extension, qui est .zip. Et cela fonctionnera pour toute sorte d'extension, .docx pour Word ou PDF pour une PDF déposer ou .html pour un fichier HTML. Joli beaucoup, écrire un fonction qui peut faire cela. Je vais en fait passer à l'IDE. On ne load-- là nous allons. Donc, tout ce que je l'ai fait ici est créé un char *, une première chaîne, appelé pset7.zip. Je vais pour agrandir. Je ai créé une deuxième chaîne appelé finalpaper.docx. Et moi écrire une fonction que lorsque appelé va simplement imprimer les extensions de fichier. Peut-être prendre quelques minutes pour réfléchir sur la façon dont vous allez le faire. Un peu plus difficile que le précédent, mais l'utilisation est presque exactement le même. Ouais. Donc, écrire une extension de fonction appelée que, si je vous donne le nom d'un fichier, si je devais vous donner pset7.zip-- I que vous souhaitez imprimer simplement le fichier .zip. Si je donne vous aimez finalpaper.docx, Il suffit d'imprimer le .docx, que l'extension de tout fichier. Cette réalité seulement prend deux lignes de code. Donc, essayez de voir si vous peut peut-être le faire à cela. En fait, ce que prend une ligne de code. Mais deux lignes est probablement plus standard. Quelle fonction sommes-nous probablement allez vouloir appeler? AUDIENCE: strrchr. ANDI PENG: strrchr, à droite. Parce que nous sommes à la recherche de la droite gauche. Je ne vous donne gars un exemple de ce genre, mais si je vous ai donné un exemple comme www.apple.com et je voulais juste .com, ce serait un exemple de cas où vous voulez appeler la dernière instance de la période et non la première, non? Si vous étiez strchr appel, il serait vous ai donné l'apple.com. Si vous avez appelé strrchr, il vous aurait donné le .com. Et donc être prudent sur ce qui ways-- dans mon exemple, vous pourriez probablement pourriez avoir juste qu'il écrit en utilisant strchr, car il n'y a qu'un seul point. Mais dans d'autres cas, qui peut ne pas être le cas. Et il faut donc toujours essayer de concevoir votre code, donc that-- ouais? Auditoire: Alors, dans le exemple vous venez de dire, quand vous ne strrchr il serait donnez vous .com ou tout simplement venez? ANDI Peng: Ce serait vous donner le .com. AUDIENCE: OK. ANDI PENG: Ouais. Elle rappelle l'endroit où il l'a trouvé. Ouais. 30 secondes peut-être? Ouais. Tout le monde peut être bon ou un peu plus de temps? Vote à main levée? Afficher de têtes? Frais. Tout le monde veut me donner le premier ligne de code pour ce programme? AUDIENCE: [inaudible]. ANDI PENG: Alors tout d'abord, nous allons briser peut-être ce vers le bas. Alors, quel est le type de strrchr de retour? Allons en arrière. strrchr, quel est le type de retour? AUDIENCE: Char * PENG ANDI: Il est un char *, non? Ce qui signifie que vous allez probablement à vouloir créer un autre type char * du magasin chaque fois qu'il est retour, non? Parce que si vous appelez la fonction strrchr, ça va vous donner un pointeur vers où il a trouvé cette dernière période, droit? Mais vous allez vouloir stocker que quelque part, non? Et alors comment pouvons-Code Nous cela dans notre programme? Public: Vous faites le char * [inaudible]. ANDI PENG: Yep. AUDIENCE: [inaudible]. ANDI PENG: strrchr. Ouais. Oh, manqué une r il. AUDIENCE: Nom du fichier [inaudible]. Qu'Est-ce que c'est? Oh, il est est juste. ANDI PENG: Oh, ça est juste. Yup, désolé. Ma faute. Exemples ne correspondent pas. Public: Et puis dot. ANDI PENG: Yup. Soyez prudent lorsque vous les gars soient: ici, laissez-moi un zoom avant. Nous y voilà. Soyez prudent lorsque vous les gars sont tapant, surtout quand vous faites simplement un caractère. Il est vraiment facile à accidentellement juste faire guillemets plutôt que seul. Ça ne marchera pas. Votre compilateur ne va se plaindre. Et votre fonction est tout simplement pas à courir. Et alors soyez prudent lorsque vous faites les choses avec les caractères qu'il est apostrophes. Et il en va de cette ligne de Code de sens pour tout le monde? Nous créons un char * pointeur. Parce que les déclarations de strrchr quelque chose de type pointeur. Et donc nous allons appeler strchr sur s, ce qui est la chaîne, le fichier nom, que nous passons en. Et nous sommes à la recherche pour la dernière exemple d'une période, qui est juste l'apostrophe dot apostrophe. Ouais. PUBLIC: Quand est-ce que nous utilisons des guillemets doubles et quand le faire, nous utilisons des guillemets simples? ANDI PENG: Ouais. Donc citations sont doubles toujours utilisé lorsque vous avoir une chaîne de plus que juste un. Donc, si vous faites strstr, qui est celui que vous rechercher une chaîne pour chaîne, vous passerait de guillemets. Mais chaque fois qu'il est juste un caractère unique, vous voulez faire des guillemets simples. Il est une bonne chose à garder à l'esprit. Alors, maintenant que nous avons notre pointeur, que faisons-nous avec elle? Je vous demande de gars l'imprimer, non? Donc, [inaudible], vous voulez me donner la ligne de code? AUDIENCE: printf-- ANDI PENG: Ouais. AUDIENCE: --vous besoin d'une place de titulaire. ANDI PENG: Yup. AUDIENCE: Imprimer la place de titulaire. Je ne sais pas ce que l'endroit titulaire est, mais sert à rien. D'ACCORD. Passons maintenant, alors que, pour. Public: Et puis comma-- ANDI PENG: Pointeur, non? AUDIENCE: Pointeur, yup. ANDI PENG: Donc une sorte de question piège, a à faire avec des pointeurs et des chaînes que nous avons sorte de déjà parlé. Quel genre d'endroit titulaire-nous besoin d'un pointeur pour un char *? AUDIENCE: [inaudible]. ANDI PENG: Ouais. Il est plus facile que vous pensez les gars il est. AUDIENCE: String? PENG ANDI: Il est juste une chaîne, exactement. Car rappelez cordes ne existent pas vraiment. Un char * est l'exacte même chose comme une chaîne. Et si vraiment cette S est ce que auraient dû être utilisés tout au long. D'ACCORD. Voyons voir si nous pouvons essayer d'exécuter ce. Faisons une extension de marque. Frais. Les gars, vous voyez comment je suis passé dans le psset7.zip et la finalpaper.docx, et il se contente d'afficher .zip et .docx? Donner un sens? OK Donc, je pense que dans votre look up fonction dans votre pset vous êtes va être demandé si le chaîne a une certaine fin, vous devez donner un certain code d'erreur. Et alors ce sera assez horrible. Parce que si vous pouvez comprendre ce que l'extension est, vous pouvez ensuite comparer cette l'extension pour voir si elle correspond en place avec une certaine extension. Et puis vous pouvez revenir un message d'erreur, non? Ouais. AUDIENCE: nous faisons donc pas avoir à ajouter 1 ou quoi que ce soit? Le pointeur ira à the-- PENG ANDI: Non. AUDIENCE: --point après. ANDI PENG: Ouais. Elle rappelle exactement à où l'événement était. Ainsi, par exemple ici, nous sommes la recherche pour la période. Donc, il va revenir un pointeur sur la période. Et puis il va imprimer à partir de la période. Donc, vous ne devez ajouter 1. Bien, il est tout à fait bien à, si vous êtes pas certain, à juste genre de tester par vous-même. Construire un exemple de programme. Testez-le vous-même et voir où il est l'impression. Voilà également pas une mauvaise façon de le faire. Frais. Et voilà à peu près tout Je devais pour vous les gars aujourd'hui. Nous avons fait beaucoup de choses pset aujourd'hui. Donc, en cas de doute, comme Je l'ai dit, regarde toujours la bibliothèque string.h pour cette pset. Il va y avoir beaucoup de fonction là-dedans qui peut être utile. Certains peuvent ne pas être utile. Je ne sais pas vraiment. Wade à travers elle, il ya tout un tas d'entre eux. strstr, strchr, sont strrchr super, super utile, ainsi que les strcpys et strcasecmps que nous avons déjà utilisé. Il est beaucoup juste de déconner avec cordes, déterminer si elles sont égales, obtenir des trucs sur les chaînes, et être en mesure d'ouvrir des fichiers correctement. Il ya beaucoup de fichier I / O. pset est vraiment pas si mal. Vous allez prendre une regarder, télécharger, et de voir tout un tas de code. Pas de soucis, le code que vous écrire effectivement est pas mal du tout. Si quelqu'un a des problèmes avec leur serveur, viennent me voir après l'article. Apologize une fois de plus pour ne pas apportant des bonbons pour Halloween. Je ne sais pas quel était le problème avec moi. Mais nous allons avoir le double les bonbons prochaine fois. Et bonne chance dans votre pset cette semaine. Ouaip.