HANNAH BLUMBERG: Hallo iedereen. We gaan aan de slag slechts een paar minuten te vroeg want we hebben een heleboel van het materiaal door te komen. Ik ben Hannah. Ik ben een TF. Maria zal toetreden ons in slechts een paar minuten. Zij doceert sectie net voor. Ik geef les sectie rechts na, dus we gaan om deze naar de anderhalf uur houden. Dus als je hier ziet, we hebben nogal een paar onderwerpen die we nodig hebben om door te komen, dus we gaan een beetje snel. Maar als we op enig moment iets te zeggen te snel of je het niet begrijpt, voel je vrij om te onderbreken met vragen. We willen in staat zijn om dit een te maken herzien sessie nuttig voor jullie allemaal als mogelijk. Geweldig. Dus laten we springen in met sommige onderwerpen die we eigenlijk heel, heel kort gedekt voor de quiz 0 in de quiz 0 beoordeling sessie. Dus beginnen met gelinkte lijsten. Dus zorg ervoor dat je wat basiskennis over gelinkte lijsten en zijn comfortabel doen sommige van de basisfuncties. Dus gewoon te herzien, gekoppeld lijsten zijn beter dan arrays omdat ze dynamisch kunnen groeien. Dus we hebben die enorm voordeel. We hebben gezien dat ze gebruikt in hash tafels toen we weet niet precies hoeveel dingen die we gaan te willen invoegen in onze gegevensstructuur. Helaas, we hebben stukken de gelinkte lijst over het geheugen, dus we zullen niet noodzakelijkerwijs in staat om een ​​constante toegang doen op elk element in de gekoppelde lijst. Om een ​​vondst bepaald element, we moet herhalen alle weg van het begin. Dus in gedachten houden dat de meeste basishandelingen zijn omega van 1. Dus insert is gewoon te nemen 1. Delete gaat nemen n omdat we moeten gaan vinden in de lijst. En zoek zou kunnen nemen, in het slechtste geval, n. We kunnen niet iets doen, zoals binaire zoekopdracht op een gekoppelde lijst want we kunnen niet zomaar willekeurig springen naar het midden. Koel. Geweldig. Een beetje van stacks. Dit, opnieuw, kwam op quiz 0, zodat u moet super comfortabel mee. Maar voor stacks, vragen wij u een stapel trays herinneren. En het gaat voor het eerst in zijn, last out. Dus we stapelen dingen in de stapel, en dan Als we proberen om iets te nemen off-- die noemen we knallen de stack-- komen we uit de top. En als we iets willen zetten in de stapel, noemen we het duwen. Dus het is altijd zal worden opgroeien van de bodem als een stapel trays. Geweldig. We hebben gezien stapels geïmplementeerd met zowel gelinkte lijsten en arrays. Als je de uitvoering met arrays, je wilt om er zeker van te houden van zowel de grootte en de capaciteit. Dus de grootte zal de huidige te zijn aantal dingen in je stack, terwijl de capaciteit is het totaal aantal dingen die je kunt opslaan in je stack. Koel. Zeer gelijke, we wachtrijen. In dit geval, in plaats van het denken over een stapel trays, denk aan een lijn. Dit zal worden first in, first out. Dus als je in de rij voor iets wat in de winkel, We hopen dat de persoon voor het eerst in lijn zal eerst worden geholpen. In plaats van te zeggen push en pop zoals wij doen voor stack, we gewoon enqueue en dequeue zeggen. En nogmaals, als je de uitvoering van deze met een array, we nodig hebben om bij te houden van niet alleen de grootte en capaciteit, maar ook het hoofd, die gaat de voorzijde van onze wachtrij. Koel. Heeft u vragen over een van die? Geweldig. Bewegende rechts langs. OK, hash tabellen. Hier is waar het begint te pas echt interessant. Dus een hash-tabel is een implementatie van een associatieve array. Dus eigenlijk wat er gebeurd is hebben we al deze input, en wij geven een hash functie, die zegt: OK, dit is waar de hash table het behoort. Dus de eenvoudigste hash-functie dat we hebben gezien is gewoon te zeggen, OK, stel dat we willen zetten strings in onze hash tafel. En een heel simpel idee zou zijn om te zeggen, OK, laten we gewoon te sorteren op de eerste letter van het woord. Zodat je hier kunt zien, nemen we banaan, we zetten door middel van een hash-functie, en het zegt, hey, dat moet gaan bij index 1. Dus we kunnen wezen denken aan een hash tabel als een heleboel andere emmers. En elk van die bakken gaat aan het hoofd van een gekoppelde lijst te houden. En in die gekoppelde lijst is waar we kunnen voerden verschillende stukken data. Dus duiken een beetje meer in een hash-functie, hier is het voorbeeld dat ik net beschreven waar we gewoon zeggen, OK, neem de eerste letter van het woord en we zijn gaat om het sorteren in de emmers. Dus vermoedelijk, zal er zijn 26 emmers, één voor elke letter van het alfabet. Waarom is dit niet een grote hash-functie? Wat maakt deze niet-ideale? Ja. PUBLIEK: Je gaat botsingen hebben. HANNAH BLUMBERG: Ja, precies. Je gaat om botsingen te hebben. Dus dat is een ding. En we praten over hoe we kunnen fix botsingen in slechts een seconde. Een ander probleem met deze bijzondere hash-functie is dat onze verschillende emmers zullen worden van vrij drastisch verschillende maten. We weten dat er een heleboel meer woorden die beginnen met A dan X, dus we gaan zeer hebben onevenwichtige emmers in onze hash tafel. Koel. Dus ja, laten we terug naar het punt van botsingen. Wat doen we als er een botsing? We hebben een paar verschillende opties. Zo een, dus denk dat we proberen Berry zetten in onze hash tafel. En wij zien, oh, we willen om het in-index 1 te zetten, maar banaan woont er al. Wat gaan we doen? We hebben twee opties. Nummer een is dat we kunnen zeggen, OK, is er geen ruimte in de index 1, maar laten we gewoon blijven kijken door totdat we kunnen nog een open plek te vinden. Dus we zullen zeggen, OK, laten we het in plaats 3. Dat is een optie. Dat heet lineaire sonderen. En een tweede optie is te zeggen, OK, goed, laten we gewoon elk van deze emmers zijn de hoofden van gekoppelde lijsten. En het is OK als er meer dan één ding in een emmer. We gaan gewoon voeg deze toe op de voorkant. Dus hier zie je, OK, toen we geplaatst berry, we net nam banaan, soort duwde het over een klein beetje en gooide een bes daar. En dat is ook helemaal prima. Dit heet een aparte chaining. U kunt denken aan dit als een soort van een reeks van hoofden gekoppelde lijsten. Heeft u vragen over hash tafels, hash functies? Geweldig. Bomen en probeert. Dus een boom is een soort van de gegevensstructuur waarbij er een soort hiërarchie of een soort ranking van uw verschillende objecten. En dit zal super geworden duidelijk als we zien een voorbeeld. En we zagen probeert, samen met hash tabellen, in pset5-- die, nogmaals, volstrekt eerlijk spel voor deze quiz-- als een andere data structuren die we kunnen slaan verschillende dingen. Bij woordenboek, we opgeslagen een heleboel woorden. Dus laten we eens een kijkje bij enkele bomen. Dit is dus een voorbeeld van een boom. Het heeft een soort structuur, dat hiërarchische structuur, waar je dat kunt zien 1 dit knooppunt aan de top heeft een soort van rang boven de 2 en 3, dat boven 4, 5 en 6 en 7 zijn, die boven 8 en 9. Dus dat is alles wat we bedoelen met een boom, dus je kunt gewoon een soort van dit beeld in je hoofd. Nu hebben we een paar meer gespecialiseerde bomen. Dus een voorbeeld is een binaire boom. En een binaire boom, weer gewoon gaat worden een gegevensstructuur met een soort van hiërarchie, maar elk van de knooppunten kan hooguit twee kinderen. Dat is waar het woord binary vandaan komt. Dit is dus een voorbeeld van een binaire boom. Dus dat is een kleinere categorie van bomen. Laten we nu nog meer specifieke en praten over binaire trees-- binaire zoekopdracht bomen, in plaats van. Dus hier het idee is niet alleen doet elke knoop hooguit twee kinderen, maar alle van de kinderen naar de links zullen worden kleiner en alle kinderen de recht zullen groter zijn. Dus het bericht in slechts onze binaire boom, er is geen relatie tussen de nummers. Maar in onze binaire zoekopdracht boom, we zien, OK, hier is 44. En elk nummer links van 44 is kleiner en alles rechts is groter. En dat geldt bij elke het niveau van de boom. Dus hier is dit kleiner dan 22 en deze groter is dan 22. En dat is binaire zoekboom. Waarom hebben we denk dat het zogenaamde een binaire zoekboom? Wat algoritme doet het je denken? Publiek: Binary zoeken. HANNAH BLUMBERG: Binary zoeken. Want als je op zoek bent naar een bepaald aantal in deze boom, op elk punt, kun je gewoon kloppen off helft van de boom, dat is geweldig. En dat gaat ons iets te geven dat lijkt veel op binaire zoeken. Nog vragen? Oké, cool. Oké, probeert. Favoriet iedereen. Dus dit is het voorbeeld dat we hebben een heleboel in de klas gezien. En nogmaals, dit is gewoon een andere dat we data kunnen opslaan. Bij woordenboek, weer, dit is gewoon gaan strings zijn. Dus laten we eens kijken wat dit eigenlijk ziet eruit als op een iets lager niveau. Dus laten we eens een kijkje nemen op een knooppunt in een trie. En wij zien, OK, er zal een Boolean en een node, een pointer naar een knooppunt. En we zien dat de Boolean wordt genoemd is_word. Dus in wezen, dat is zal corresponderen om deze kleine driehoekjes die zegt, als je hier hebt gekregen, u een compleet woord hebt gevonden. We weten dat "Turing" over Hier is een complete woord, terwijl slechts T-U-R is niet een woord omdat we niet zien dat er weinig delta. En dat kleine delta, opnieuw, correspondeert met is_word, Deze Boolean is_word. En dan hebben we een scala van kinderen. Dus op elk niveau, u een bepaald knooppunt, en dat knooppunten een matrix van de gehele alfabet. Zodat u kunt zien, nogmaals, in dit picture-- ik ben gaande te houden en terug te springen forth-- dat die array aan de top heeft een heleboel verschillende knooppunten komende uit van het. Het heeft 26 of 27 als je wilt een extra teken omvatten. En dit geeft ons een manier om onze gegevens op te slaan op een manier die kan worden bekeken op dat je kunt opzoeken super snel. Wat is de lookup tijd voor een trie? PUBLIEK: [onverstaanbaar]. HANNAH BLUMBERG: Ja. In theorie is het constante tijd. Het wordt alleen maar de grootte zijn van het woord dat u wilt opzoeken. Zelfs als we voegen een ontelbaar Meer woorden om onze trie, het gaat niet om ons langer te bepalen Als een bepaald woord in de Trie. Dus dat is echt leuk. Publiek: Heb je gewoon initialiseren die array? Je miste een punt of twee. Kun je gewoon praten over dat voor een tweede? HANNAH BLUMBERG: Tuurlijk, absoluut. Goede vraag. De vraag was, we een matrix die gaat knooppunt ster hebben als in tegenstelling tot enkel het knooppunt, toch? Koel. Dus hier wat we zeggen is ons aanbod is gewoon pointers naar andere arrays. Dus het is essentially-- deze soort voelt als een gelinkte lijst op deze manier waarbij elk van deze kinderen enkel punt aan het volgende knooppunt. En de manier waarop we eigenlijk bepalen, hey, OK, we hebben herhaald door middel van een hele woord, is dit woord in het woordenboek, Wij controleren alleen deze is_word. Grote vraag. Ja. Publiek: OK. Dus wat was de runtime voor de trie? HANNAH BLUMBERG: Zeker. Zodat de runtime voor een trie voor lookup gaat constant tijd. Dus het is gewoon naar de zijn aantal letters in het woord. Het is niet afhankelijk van de grootte van het woordenboek of de omvang van de datastructuur. Dus hier is een iets eenvoudiger voorbeeld. In dat geval kunt u dat zien het woord vleermuis is in het woordenboek en je hebt zoom, maar u heb iets als dierentuin niet. Hoe zouden we dierentuin? Hoe kunnen we de dierentuin aan onze woordenboek, onze trie? Ja. PUBLIEK: Maak is_word geldt voor de [onverstaanbaar]. HANNAH BLUMBERG: Goed. Dus we zouden zeggen dat Z-O-O, en dan zouden we wilt afvinken die doos ook. Grote. Laten we het vergelijken heel kort probeert versus hash tabellen. Probeert zijn echt geweldig omdat, zoals we al zeiden, ze zorgen voor een constante tijd opzoeken. Maar de enorme nadeel is ze gigantische. U kunt het gevoel krijgen, zelfs door te kijken naar het, dat het gaat te nemen een enorme hoeveelheid geheugen. Dus ze gaan veel te zijn groter dan hash tabellen, maar ze gaan geven ons veel sneller lookup tijden. Dus dat is een soort van uw afweging, wat je zorg over, of het nu snelheid of het geheugen. Heeft u vragen over een van die, alle C gegevensstructuren. Mooi. OK. We gaan om verder te gaan om een ​​beetje beetje web development met Maria. MARIA ZLATKOVA: Lovely. OK. HANNAH BLUMBERG: U kunt mijn laptop gebruiken. MARIA ZLATKOVA: Nice. OK, cool. Zoals we nu verhuizen naar web ontwikkeling, we praatten een beetje over het veranderen van permissies van bestanden en mappen zodat ze toegankelijker kan andere gebruikers, de wereld, en zodat we kunnen zien hoe in principe kunnen we ze overbrengen als we dingen zoals websites ontwikkelen dat we meestal gedaan. Zo zagen we de chmod commando, die verandering staat, in principe. Dat is een Linux-commando en het verandert toegangsrechten bestandssysteem objecten. En een bestandssysteem object gewoon een map, een bestand, iets dat je kunt veranderen de permissies van. Dus om de permissies te zien, we typt u de opdracht ls, lijst, l. En als we het type dat we meestal zie een aantal toestemmingen die kijken een beetje zoals deze in de voorkant van een directory naam. Dus d verwijst naar de directory. En dan hebben we drie drieklanken die in principe verwijzen naar de machtigingen van hetzij een gebruiker, een groep of de hele wereld. De aard van de machtigingen die we kunnen hebben voor deze drie groepen mensen ofwel r voor lezen, w schrijven en x te voeren. En we kunnen die voor hebben de groep en de wereld ook. Het lastige is dat soms wanneer we typ het chmod commando, we zouden sommige aantal typen dat bestond uit drie bits. Zodat we konden doen, zoals 777 en die in principe verwees naar de toegevoegde waarde elke van deze triaden omdat r zou verwijzen naar 4, w zou Zie 2 en x verwijst naar 1, dus bij elkaar opgeteld, elk van de nummers zou tot een cumulatieve aantal komen een cumulatieve waarde tussen 0 en 7. Dus we konden ook 0 voor geen enkele rechten op alle. En dat zou eigenlijk ons de rechten voor zowel de gebruiker, de groep, of de wereld. Heeft u vragen over dit tot nu toe? Publiek: Je zei gelezen was 4? MARIA ZLATKOVA: Ja. PUBLIEK: [onverstaanbaar]. HANNAH BLUMBERG: Yup. PUBLIEK: En dan door het toevoegen van al die anderen zou je nummer te geven. MARIA ZLATKOVA: Ja. Ja. Dit zijn grote vragen. Heerlijk. Vervolgens hebben we sprong in HTML en een iets meer over web development. Dus HTML betekent alleen HyperText Markup Language. En dat is de markup taal die standaard dat het wordt gebruikt om webpagina's te maken. Het is een opmaaktaal genaamd want het is eigenlijk niet gecompileerd. Het zegt niet hoe sommige code moet worden uitgevoerd of iets dergelijks. Het schetst rechtvaardige en beschrijft een baan pagina moet worden opgezet met elk van de elementen en hoe ze moeten kijken naar de gebruiker. Enkele HTML tags die we ging zijn de volgende. Al onze HTML-documenten begonnen met de DOCTYPE html. Dan hebben we altijd de html-tag. We hebben een kop en een lichaam. En het is belangrijk dat HTML heeft dit soort geneste structuur want het is heel duidelijk. En dan wordt het heel duidelijk als we moeten nauwe tags te openen en eigenlijk. En we moeten altijd aan te sluiten tags die we hebben geopend. En hier hebben we een aantal van de types van de dingen vooruit die we willen hebben. Dus we hebben, bijvoorbeeld, de titel van de CS50. En dan we eigenlijk kan een stylesheet koppelen die bepaalt hoe wij stylen onze website. Dat CSS. We gaan gaan over het in de volgende paar dia's ook. Binnen het lichaam, zetten we sommige klassen en ID's. En als een herinnering, opnieuw, ID's zijn uniek en klassen kan worden toegewezen aan meerdere items. En dat betekent dat kunnen we klassen en id's te gebruiken binnen andere structures-- dus, voor Bijvoorbeeld, in CSS-bestanden of stijl sheets-- te verwijzen naar specifieke elementen en eigenlijk zeggen dat we willen stylen of ontwerp een element in een bepaalde manier. En we verwijzen naar hen door hun ID's en klassen. En we kunnen ook verwijzen naar verschillende dingen door labels als goed, maar id's en klassen alleen wij sommige geven veelzijdigheid en welke specifiek we wilt verwijzen. Dus slechts een voorbeeld. We kunnen, opnieuw, binnen een CSS-bestand, waar we wil een aantal te definiëren style-- zo kleuren, lettertypen, en dat soort dingen dat-- we kunnen bepalen de stijl voor een lichaam. Zodat definiëren voor het hele lichaam tag. Maar dan kunnen we ook definiëren een stijl voor een #title. En nogmaals, de hashtag verwijst naar onze ID en de stip verwijst naar onze klasse. En vervolgens het .info, we kunt ook een aantal attributen. En nogmaals, als we terug te gaan, hadden we onze klasse met de naam info en onze ID titel. En we kunnen zien dat we verwijzen aan hen door #title en .info. Publiek: Zou je zeggen hashtag [? Adopteer me? ?] MARIA ZLATKOVA: Sorry? Publiek: Zou je zeggen hashtag [? Adopteer me? ?] MARIA ZLATKOVA: Hashtag betekent ID, dus #title verwijst naar welke elementen hebben deze ID genaamd titel. En dan de punt verwijst naar een klasse. Dus .info noemt dit element omdat het de klasse info. Ja. Publiek: Waarom heb je ze onderscheiden in de HTML? Waarom zeg je bepaalde dingen zijn ID's en bepaalde dingen zijn klasse? MARIA ZLATKOVA: Dat is gewoon tot u-- HANNAH BLUMBERG: Herhaal de vraag. MARIA ZLATKOVA: Oh, sorry. Waarom hebben we bepaalde elementen onderscheiden als id's en andere elementen als klassen? Dat is gewoon omdat het echt vaak een ontwerp keuze. Het geeft je een heleboel veelzijdigheid in zijn kunnen zeggen dat ik wil dit specifiek item deze ID hebben, omdat ze willen om een ​​heleboel dingen te doen met het, en ik alleen maar willen een stijl te definiëren, bepaalde stijl of kleur wat voor dat item. En de manier om dat te doen is gewoon waardoor het een ID. En dan als ik willen hebben een paar verschillende items hebben dat in plaats van gaan en het instellen their-- in plaats van doen door tag omdat de tag zou zet de cel voor de hele tag voor elke keer dat tag wordt gebruikt, U kunt een klasse ingesteld op meerdere items. En dan gewoon toegang tot die klasse en zeggen: Ik wil deze klasse stijl op die manier. En nogmaals, de klasse kan zijn meerdere verschillende items En de ID moet uniek zijn. Grote vragen. Een andere vragen? OK, geweldig. Nogmaals, dit is hoe deze selectors wordt verwezen in CSS, met hashtag, met stip, of zonder iets voor toewijzen van de stijl van sommige tag, zoals lichaam. En hier hebben we de algemene syntax van hoe dit gebeurt. Wat best herhalen practices voor HTML en CSS, moeten we, opnieuw, sluit alle de HTML-tags die we openen. En wat wij u aanbevolen doen voor uw laatste projecten, evenals voor CS50 Finance, is om zeker van zijn dat al uw HTML valideert. En dat is gedaan met de W3 Validator. En dan wat we deden en wat we raden het doen scheidt stijl, dus CSS van markup HTML. Dus alles wat aan hoe uw pagina gaat visueel zoeken en hoe het zal worden gewijzigd moet gaan in een CSS-document. En dan je markup zeggen hoe de dingen zijn ten opzichte van elkaar HTML, en dat moet binnen gaan van uw HTML-documenten. Nog vragen? Mhm. Publiek: Wat er precies gaat Op de pagina validatie als we het valideren van de HTML dat [onverstaanbaar] geschapen? MARIA ZLATKOVA: Dus what-- denkt. Dus wat er precies aan de hand op met pagina validatie en waarom moeten we dat doen? Kortom, we moeten dat doen omdat een heleboel keer, uw browser als je niet een tag te sluiten of zoiets, Uw browser is nog steeds te maken van een pagina en kan nog steeds werken, maar het is de beste praktijken om ervoor te zorgen dat u hebt, opnieuw, gesloten alle labels, dat alle elementen de manier waarop ze zouden moeten zijn, en in feite dat het door de conventies die vooraf zijn ingesteld. Het is, nogmaals, slechts een ding dat je moet te leren om te doen, in tegenstelling tot het hebben slordiger code en dat soort dingen. Ja. Oh, sorry. Ik dacht dat je het verhogen van uw hand. PUBLIEK: Nee, ik was gewoon [onverstaanbaar]. MARIA ZLATKOVA: OK. Publiek: Dank je wel. MARIA ZLATKOVA: Natuurlijk, dank je. Dus nogmaals, er aan de hand in hoe Informatie wordt overgedragen en communicatie modellen om informatie. TCP / IP. TCP betekent gewoon Transmission Control Protocol en IP- verwijst naar Internet Protocol. En dat alleen maar verwijst naar de manier waarop data wordt geleverd. Als we een aantal gegevens die moet geleverd aan zo u-- u een verzoek voor een bepaalde server. Bijvoorbeeld, als we probeert te openen cs50.net, we een verzoek om de CS50 server en we zien dat we willen krijgen dit soort informatie. En vervolgens op basis van dit protocol voor hoe deze informatie wordt geleverd, de server geeft informatie terug naar ons, de klant. En dan zijn we in staat om te bekijken de informatie voor de pagina en gebruik het dan. Dus dan Hypertext Transfer Protocol is gewoon een ander protocol of set van de conventies die bepaalt hoe de webbrowser en de webserver moeten communiceren. En het zetten van dit alles samen, HTTP, weer, alleen bepaalt hoe deze hypertext gedefinieerd door de HTML die we hebben gewerkt het, hoe het aan u moeten worden geleverd en hoe dat gegevens die aan u geleverd krijgt u. En dat is waarom, als jullie herinneren van een klasse, hadden we veel verzoeken en we hadden veel van de syntaxis voor deze verzoeken dat we ga dan nu. Dus nogmaals, als we sturen een verzoek naar een server, moeten we een paar dingen te definiëren. Dus moeten we de soort te vinden van het verzoek dat we instellen. En nogmaals, we hebben, bijvoorbeeld, GET is een type methode dat we in ons verzoek. En dan is HTTP / 1.1 alleen de protocol dat we gebruiken momenteel. De meeste van de tijd, dat gaat aan het protocol dat we gebruiken. Dus als je een vraag als dat op uw quiz. Dat is de conventies dat we tot nu toe. Backslash verwijst naar wat voor soort van dingen die we aanvragen. Dan onze gastheer, bijvoorbeeld, in dit geval, we proberen te gaan naar google.com. Dus dit is de waarde voor een host. Dit is een type aanvraag die kunnen worden verzonden. En dan een soort van antwoord dat kon verzonden, opnieuw op basis van dit protocol, weer, HTTP / 1.1. Dus dat is de HTTP-versie weer. 200 OK is slechts de status code. En dat OK is gewoon een uitdrukking op basis van die status code. En dan is de Content-Type verwijst naar het type dat wordt teruggegeven aan u, dat is voor die webpagina die u ontvangt en dat uw browser kan daarna maken. En dat is text / html. Publiek: Wat betekent 1,1 betekenen? MARIA ZLATKOVA: Dat is gewoon de versie van-- oh, wat betekent 1,1 betekenen? Dat is gewoon de versie, de HTTP- versie van een protocol dat we gebruiken. Grote vraag. Andere vragen? Publiek: Kunt u samenvatten Content-Type echt snel? MARIA ZLATKOVA: Zodat is wat de server. het type information-- wat content type was de vragen. Dat was het type informatie die je terug te krijgen van de server, het type gegevens die de browser kan dan maken die u gebruikt. PUBLIEK: Is dat wat dit protocol vertelt u te doen? MARIA ZLATKOVA: Sorry? PUBLIEK: Is dat wat het protocol zeggen? MARIA ZLATKOVA: De protocol-- Publiek: --wat de Content-Type is of what-- MARIA ZLATKOVA: Het protocol is gebaseerd on-- wat is het protocol dat u vertellen? Dat is gewoon de manier waarop dat deze informatie werd geleverd aan u op basis Op wat voor soort protocol werd deze informatie gekregen afgeleverd naar u terug. Is dat zinvol soort? HANNAH BLUMBERG: U kan bedenken protocol als a-- Ik denk Professor Malan beschreef in de klas als een soort van a-- het is het equivalent van het menselijk handenschudden. Zeg, als, hey, ik ben een verzoek en ik weten hoe HTTP van versie 1.1 afhandelen. En dan is de server zegt, oh, OK, ik-- en beide bestaan. Ik weet ook hoe om te gaan met HTTP / 1.1. En ik ga geven je bepaalde inhoud terug. In dit geval gaat het te zijn van het type text / html. Dus het is een soort van gewoon een manier van hen communicating-- MARIA ZLATKOVA: Het is gewoon bevestigen dat u bent zowel volgens dezelfde protocol en dat beide de opdrachtgever en de server-- zo uw browser en de server-- soort weet wat je bent het over en hebben de conventie voor het doorgeven van data. Publiek: Dus de Content-Type part-- de Content-Type text / html-- dat is een apart deel van het zelfde bericht? Of is het een deel van laten we zeggen, 200? Heeft 200 vertel ze dat of is-- MARIA ZLATKOVA: 200 zegt dat het ging allemaal OK. En dan type inhoud is een soort van afzonderlijk deel van hetzelfde bericht, en zeggen het ding dat ik Teruggekeerde heeft dit type text / html. Het is gewoon het geven van meer informatie. Hebben iets toe te voegen? OK. Andere vragen over dit? Geweldig. Dus sommige andere HTTP-statussen die we naast konden krijgen tot 200 OK, degenen die we misschien hebben gezien misschien veel zijn 403 en 404. Dus 404, als je probeert te toegang tot iets dat niet bestaat. Dus bijvoorbeeld, in CS50 Finance psets, als je had renderen quote.html en je hebt dat bestand hebben, maar je had quote.php, dat zou resulteren in een 404 Not Found omdat het bestand mogelijk niet bestaan. Voor een 403 verboden, dat verwijst naar de rechten. Dus als een bestand is niet leesbaar door de wereld, zou u een 403 krijgt terug. Sommige anderen die je misschien get-- 301, definitief verhuisd; 302, Gevonden; 304, gewijzigd; 400, Bad Request; en dan Internal Server Error voor 500 en 503, Service niet beschikbaar. Ja. Publiek: Zullen we verwacht onthouden al die statussen? MARIA ZLATKOVA: ik zou hebben ze op je cheat sheet. [GELACH] Publiek: Zijn we verwacht weet wat triggers elke? MARIA ZLATKOVA: Zijn ze? HANNAH BLUMBERG: Voor degenen die we hebben lopen into-- dus de vraag was-- MARIA ZLATKOVA: Zijn ze verwacht weten wat elk van deze toestand codes kunnen worden veroorzaakt door? Dus voor degenen die we hebben gebruikt en liep in, zou ik zeggen, ja. Dus we hebben zeker gezien 200 OK en doceerde in psets. We hebben gezien 403, 404. Voor anderen? HANNAH BLUMBERG: ik zou zeggen 500 lijkt eerlijk spel. MARIA ZLATKOVA: 500, ja. HANNAH BLUMBERG: Ja. Gewoon eens een algemeen gevoel wat hen veroorzaakt. En ook alleen door deze namen, kunt u soort zoals maken een educated guess als wat eigenlijk veroorzaakt hen. Verplaats bijvoorbeeld permanent, waarschijnlijk het bestand is definitief verhuisd. Publiek: Maar op een eerdere examen, er was een zo hoe ga je ons verwachten beantwoorden? HANNAH BLUMBERG: Dat nul punten waard. De vraag op 418 op de theepot is technisch gezien een HTTP-status, maar het was nul punten waard. Uiteraard, je bent niet verwacht dat ze weten. Publiek: Is het een echte? HANNAH BLUMBERG: Het is een echte één, maar het betekent niets. Het is maar een grapje. Internet mensen zijn grappig. MARIA ZLATKOVA: Great vragen, jongens. Een andere vragen? Publiek: Wat is Internal Server Error? MARIA ZLATKOVA: Intern server error gewoon betekent dat u bent geweest niet in staat om te communiceren met de server om wat voor reden. Dus het is niet per se iets dat te maken heeft met de klant of iets dergelijks. Ik weet niet van specifieke voorbeeld dat we gegaan dan om uit te leggen, maar ja. HANNAH BLUMBERG: Zeker. Dus bijvoorbeeld, zoals laten zeggen dat je werkt aan mashup en een server van Google ging voor sommige Daarom is een stroomstoring, laten we zeggen. Dat zou een interne server fout of een soort van-- zoals jij zou geen antwoord terug te krijgen. MARIA ZLATKOVA: Ja. Het is net als je niet in staat om te communiceren met de server om wat voor reden, omdat ervan naar beneden of een andere reden. Dus springen in PHP. PHP tegenstelling tot HTML, is een programmeertaal. En we begonnen te gebruiken, want het is zeer nuttig voor web ontwikkeling. We voor het eerst gebruikt in CS50 Finance. En het helpt eigenlijk brengen ons samen deze markup, het ontwerp, en hoe we eigenlijk informatie gebruiken om dingen weer te geven op een webpagina. Dus PHP zelf betekent PHP Hypertext Preprocessor, dus het is een recursieve backnorym zelf. En labels te openen voor PHP we links en rechts pijlen met de vraagtekens en php. Dus we hebben al een hoop gezien. Nu, we gaan gewoon over te gaan enkele van de fundamentele dingen over. Dus met PHP, de variabele namen beginnen met een dollarteken. We niet opgeven, nogmaals, een variabele typt meer. Net zoals we hebben gedaan met C, we niet nodig om dat te doen. Wij kunnen een heleboel verschillende doen dingen met variabelen. We kunnen ze samen te stellen door het aaneenschakelen van hen de puntnotatie die konden we niet opnieuw doen in C. Nogmaals, we hebben iets meer veelzijdigheid met PHP in termen van variabelen. Nogmaals, we hebben niet een van de belangrijkste functie. En PHP wordt geïnterpreteerd in tegenstelling tot gecompileerd Dus hoe hebben we te maken voor C-bestanden, we hebben niet om dat te doen voor PHP. Maar, zoals de taal wordt gerund door zelf, wordt het geïnterpreteerd. En dan losjes getypt betekent gewoon dat we hoeft niet aan een variabele specificeren type en de variabele types begrepen tijdens de uitvoering. Publiek: Maar wat heb je bedoel dot aaneenschakeling? MARIA ZLATKOVA: Zeker. Wanneer we willen dingen together-- zetten dus als we hadden enkele variabele die had de waarde van 3 en we hadden een variabele die de waarde van de string had, we konden de variabelen samen te stellen door er een punt ertussen en aaneenschakelen van hen. Of we kunnen een creëren variabele genaamd naam en zet het samen door aaneenschakelen twee snaren. Dus als we hadden een koord in dubbel quotes en we zetten een punt achter het, en dan hadden we nog een koord, dat zou een koord geheel te maken. Publiek: OK. MARIA Letland: Was dat duidelijk? Publiek: Ja. MARIA ZLATKOVA: OK. Ja. Publiek: Als je zegt plaats uitgelegd gecompileerd heb je het over je niet moet zo specifiek bij te het gaat om PHP versus C? MARIA ZLATKOVA: Als we zeggen uitgelegd in tegenstelling tot gecompileerd wat bedoelen we? Dus dat betekent dat we niet nodig hebben uitvoerbare bestanden naar PHP draaien. Het betekent dat het draait als het gaat. Slaat dat ergens op? Een beetje meer. HANNAH BLUMBERG: Dus u maar kunt bedenken van een tolk als een ander programma dat verantwoordelijk voor de lijn die door de lijn door PHP en eigenlijk uitvoeren hiervan, in tegenstelling om het opstellen van het allemaal neer op binaire. Het doet er niet echt iets betekenen over hoe specifieke we moeten zijn. We moeten nog steeds om precies te zijn, en niet Vergeet uw puntkomma, en zorg ervoor dat je hebt je dollarteken, en dat soort dingen. Goede vraag. MARIA ZLATKOVA: Ja. Dus regel voor regel, als tegen met C bestanden, we moeten de hele finale maken voordat we daadwerkelijk kunnen draaien. Dat is het belangrijkste verschil. Maar nogmaals, we kunnen niet echt minder specifiek. Dus arrays in PHP vertegenwoordigen eigenlijk een geordende kaart. Dus arrays associate waarden te toetsen. De twee manieren om een ​​te verklaren array, op basis van deze syntax, we kunnen meer expliciet zijn zeggen we hebben een scala en we hebben dit key1 die is toegewezen aan Dit waarde1, key2 dat value2 kaarten. Of we kunnen gewoon een array dat de waarden zelf bevat en vervolgens de toetsen opgevat op een manier. Heeft u vragen over dit? Publiek: Wat zou de sleutels in het tweede voorbeeld? 0, 1, 2, 3? MARIA ZLATKOVA: Bijvoorbeeld, het is gewoon sleutels in deze niet noodzakelijkerwijs een verschil maken. Ze bepalen hoe je kunt Gebruik de waarden erin. Dus als we een foreach lus in PHP, dat zou ons in staat stellen om te gaan door alle waarden, we kunnen gaan door alle waarden, zelfs als we hadden of hadden niet gedefinieerd een specifieke toets op de site previous syntax. Dus zelfs met dit soort array, konden we nog steeds hebben een foreach lus die gaat door elk van de waarden in de sleutel in de array. Zodat de syntaxis van een foreach lus, beginnen we met een matrix. Dit $ arr variabele is onze werkelijke scala wij gedefinieerd in de vorige dia als waarde die letterlijk gaat door elk van de waarden, ongeacht we hadden een sleutel of niet. En dan kunnen we iets doen met de waarde binnenkant van de foreach lus. Dus nogmaals, als we hadden een array als dit hier created-- dus we hebben de sleutel van foo en de waarde van bar, de sleutel van baz en de waarde van qux-- kunnen we een foreach lus die gaat door reeks als belangrijke waarde en dan iets doen de sleutel en / of waarde. Maar we doen niet altijd moet een foreach lussen die gaat door array key kaart om waarde. We kunnen gaan door de foreach lus array waarde. HANNAH BLUMBERG: En ik denk dat to-- was je vraag, wat is de impliciete index? Publiek: Kinda. MARIA ZLATKOVA: Oh. HANNAH BLUMBERG: Ja, ja. Dus eigenlijk, als je niet opgeeft een sleutel, het gaat om 01. MARIA ZLATKOVA: Ja. Net als bij C, het is nul geïndexeerd als je geen sleutel op te geven. Publiek: Sorry. Zou je kunnen proberen te spreken een beetje harder? Ik heb een beetje problemen met horen alles. MARIA ZLATKOVA: Het spijt me zo. Ja natuurlijk. Dus wil je me om weer te gaan over dit? Of is dit-- Publiek: Dus op de vorige slide-- als je kon gewoon terug voor een seconde. MARIA ZLATKOVA: Natuurlijk, sorry. Publiek: Dus de tweede matrix hier niet lijken een waarde in te toetsen, soort van [? causaliteit. ?] MARIA ZLATKOVA: Recht, recht. Publiek: Dus hoe werkt dat als je zegt het is alles of niets. Voor mij, dat lijkt een [? foo?] al. MARIA ZLATKOVA: Ja, ja. Dus nogmaals, dit is een bestelde de kaart in deze zin dat begrepen, bijvoorbeeld, de indexen Hier kan worden opgevat als 0, 1, 2, 3. Ook dit is met de indexen is ons gelijk van het hebben sleutels afgebeeld op waarden. Dus als onze sleutel was 0-- sorry. HANNAH BLUMBERG: Nee, er is hier krijt. Het is eigenlijk heel leuk. MARIA ZLATKOVA: Dat is geweldig. OK. Dus nogmaals, zou $ arr 0 zijn de toets voor de waarde 1. 0 zou de sleutel voor de waarde 1 zijn. Publiek: Het spijt me. Het is onzichtbaar. HANNAH BLUMBERG: Oké, nevermind. Krijt was een slecht idee. Ik neem het terug. U kunt denken aan de toetsen als 0 kaarten om de waarde 1. MARIA ZLATKOVA: Ja. Dus dit is 0, is 1, 2, 3. Dit kunnen uw sleutels. U kunt as-- van hen denken ja. Dus in plaats van expliciete sleutels, ze zijn soort opgevat als de indices beginnend bij 0. De krijt hielp niet. Ja. Publiek: voor de foreach lus als we wilden het zien als waarde, het zou gewoon automatisch index op 0? MARIA ZLATKOVA: Ja. Het zou door elk van de waarden. PUBLIEK: [onverstaanbaar] als 0 of zou dat gewoon doen 0? MARIA ZLATKOVA: U zou hebben te zeggen als dollarteken en vervolgens enkele naam van de variabele, waarde. PUBLIEK: [onverstaanbaar]. MARIA ZLATKOVA: Sorry? PUBLIEK: Sorry, ik ben gewoon proberen te herinneren. Hoe zou je dat als je het kan doen automatische indexering is slechts 0 van? MARIA ZLATKOVA: Dus hoe zou je dat doen als je niet specifieke sleutel namen? Publiek: Ja. MARIA ZLATKOVA: Je zou gewoon define-- je gewoon zeggen als een naam. Dus in uw psets, jullie misschien herinner foreach $ row als $ rijen, hebben we onszelf dit $ rij zeggen we willen gaan door rij als $ rijen. Hoewel we niet hebben Deze expliciete $ rijen gedefinieerd, we konden gewoon gaan en zeggen dat dit kan onze sleutel, en gewoon gaan door elk van de waarden. Publiek: Dus is de waarde van een nieuwe variabele we creëren op te slaan [onverstaanbaar]? MARIA ZLATKOVA: Dus het is niet inherent een nieuwe variabele. Het is een variabele die verwijst naar de binnenzijde van de array om elk van hen. HANNAH BLUMBERG: Het is een nieuwe variabele naam. MARIA ZLATKOVA: Ja, het is een nieuwe variabele naam, maar het is niet inherently-- ja. Het is gewoon een nieuwe variabele dat je dat kunt doen. Dus hoe doen we deden $ rij als $ rijen, rijen een nieuwe variabele die we kon scheppen in onze foreach lus. Het hoeft niet te preexist daarvoor. Publiek: Kan je door de logica voor elke, het voorbeeld daar? MARIA ZLATKOVA: Mhm. Oh, sorry. Hier is het voorbeeld. Tuurlijk. Dus voor elke array-- zo dat betekent naar deze array als de belangrijkste value-- dat gaat om te gaan door deze array en de eerste gaan en foo, de key foo en de waarde bar. En vervolgens op de tweede iteratie van de lus, het gaat om door te gaan en de sleutel baz en de waarde qux. En dan kun je iets doen met een van hen of beide. Publiek: Dus het idee achter met een belangrijk punt om de waarde, wat doe je uiteindelijk toegang? MARIA ZLATKOVA: Wat is het idee van het hebben van een sleutel die wijst naar de waarde? Het is gewoon een conventie, een ander weg van het gaan door de array en in staat zijn om toegang te krijgen ofwel de sleutel of de waarde of beide en gebruik ze. Publiek: Wat is de rol van de gelasten dat de foreach loopt in? Dus als we waren om toe te voegen elementen aan de array later zouden die de eersten zijn genoemd in de foreach array, of zou het later? MARIA ZLATKOVA: Dus wat is de volgorde waarin de foreach lus gaat door middel van een array in? Het gaat door het eerste element het laatste element, het laatst toegevoegde element. Als u later op de elementen toe te voegen, zouden ze worden accessed-- de eerste elementen zou worden benaderd als de eerste elementen van de array, en dan zou je gaan door elk van de elementen als een soort van een ordered-- geen besteld, maar de manier waarop zij zijn in de matrix gebracht. Publiek: Dus nieuwe elementen worden later toegevoegd? Dus ze added-- zullen ze de laatste die in de [? iteratie. ?] MARIA ZLATKOVA: Nieuwe elementen can-- in principe, wanneer er nieuwe elementen zijn toegevoegd, worden deze toegevoegd aan het einde van de array? Publiek: Ja. MARIA ZLATKOVA: Ik geloof het wel. Ja. En vervolgens met uw foreach loop, nadat je nieuwe elementen heeft toegevoegd en je gaat via hen, de nieuwe elementen zou zijn accessed-- het nieuwe element, als het laatste toegevoegd, zou het laatste toegankelijk. Publiek: Kun je een voorbeeld geven van iets dat zou [onverstaanbaar] met iets met een waarde zoals [onverstaanbaar] of de waarde, Net als hoe je zou opmaken dat? MARIA ZLATKOVA: Zeker. Kan ik een voorbeeld geven van wat we zouden doen met de waarde? Dus wat jullie misschien vertrouwd zijn met is dat we gegaan door een reeks en eigenlijk bedrukt elk van de elementen, bijvoorbeeld als onderdeel van een geordende lijst of iets dat. Heeft dat zin te maken of willen we to-- Publiek: Kunnen we het afdrukken van deze waarden? MARIA ZLATKOVA: Ja, we kunnen printen en dan $ principe waarde omdat op dat specifieke waarde, zouden we afdrukken van de waarde erin. Dus als we waren op onze eerste iteratie van het en we gedrukt $ value, we zouden worden afgedrukt bar. PUBLIEK: Zijn er ook voor loops in PHP of gewoon foreach loops? MARIA ZLATKOVA: Er is ook voor de loops in PHP. En hun logica is meestal de hetzelfde als wat je hebt gebruikt. Publiek: Dus de waarde is nul. MARIA ZLATKOVA: Het is net hetzelfde. Ja. Publiek: Ik ben gewoon gaan om te vragen. Dus als je verklaart een array, heb je niet nodig om te vertellen wat de grootte het gaat zijn, wat betekent dat je gewoon toe te voegen en weg te nemen elementen [onverstaanbaar]. MARIA ZLATKOVA: Yup. Ja. Precies. Toen we verklaren een array, we hoeft niet te zeggen hoe groot het is, dus we kunnen alleen maar elementen toe te voegen op het later ook. Meer vragen? Dus PHP en HTML samen te brengen, wat we hebben goed seen--, bijvoorbeeld, in dit voorbeeld hebben we een HTML-formulier dat een invoerveld heeft. En het invoerveld is gewoon naam en dan heeft het een Submit knop. En als u op de Submit knop, in onze hello.php bestand, omdat de werkwijze voor de vorm krijgen, kunnen we toegang krijgen tot wat er op naam door dit te krijgen globale variabele dat is-- de syntaxis voor het $ _GET. En dan kunnen we toegang, ongeacht de input van de gebruiker binnen in die vorm voor de naam onder vermelding van de naam van dat veld. Een andere vragen of vragen over dit specifieke voorbeeld? Publiek: Waar is de PHP? MARIA ZLATKOVA: Hier. Dus dit is onze opening tag voor de PHP. PUBLIEK: Oh, rechts. MARIA ZLATKOVA: Ja. HANNAH BLUMBERG: De = is steno want dit is PHP en gewoon echo. Publiek: Oh. MARIA ZLATKOVA: Ja, sorry. Ik moet dat duidelijk gemaakt. HANNAH BLUMBERG: Print. MARIA ZLATKOVA: Het is gewoon de functie die ons in staat stelt om iets af te drukken. Grote vraag. Dus going-- ja. PUBLIEK: Komt er vrij zijn een beetje van de hand coderen van PHP en HTML quiz op 1? MARIA ZLATKOVA: Er kan een eerlijk bedrag van interpretatie van PHP en HTML, niet per se als een enorme hoeveelheid codering, hoewel je zou kunnen hebben om een ​​schrijven foreach loop, hoewel, een lus. Elk van de lussen die we bedekken hier is eerlijk spel. En dat is meestal het. HANNAH BLUMBERG: Ik zou bereid. Op dezelfde manier dat je vroegen we om schrijf een bos van C functies op quiz 0, Ik zou bereid zijn om het te doen hetzelfde in PHP en Javascript. MARIA ZLATKOVA: Ja. HANNAH BLUMBERG: Ik zou zeggen een little-- alsof we niet gaat om je te schrijven een enorme HTML pagina, alleen maar omdat dat is een beetje vervelend, maar je zou onderdelen hebben. Dat is volkomen eerlijk spel. Zoals kleine HTML-pagina, helemaal eerlijk. Publiek: OK. Hoe zit het in JavaScript ook? HANNAH BLUMBERG: Ja. Javascript is eerlijk spel. MARIA ZLATKOVA: Ja. Dat is volkomen eerlijk spel. HANNAH BLUMBERG: We krijgen die op gelijke 10 minuten. MARIA ZLATKOVA: SQL, nogmaals, Structured Query Language. Het stelt ons in principe om data te beheren in een relationeel databasebeheersysteem systeem. Dat betekent gewoon in principe dat we ergens om enkele gegevens die wij zouden willen opslaan gebruiken in een website of een andere vorm. En dan hebben we vragen te krijgen informatie uit onze database, of gegevens daarin te. Een groot deel van de gemeenschappelijke ones-- UPDATE, INSERT, SELECT, en DELETE. Dus voor UPDATE, dit is de syntax voor het bijwerken van gegevens in een database. Deze tabel genoemd updaten tafel door te zeggen SET, kunnen we een aantal waarden in alle ingesteld rijen op gelijke iets anders. Dus we kunnen ook aangeven een aantal specifieke inzendingen die we willen wijzigen en dat kan worden met behulp van WAAR. En we kunnen aangeven dat we alleen maar willen enkele rijen te wijzigen waar het huis voor, als we hadden een tafel van studenten en alle studenten moesten huis, dus we zouden alleen maar sommige waarden te wijzigen waarbij een huis gelijk Currier, bijvoorbeeld. Voor INSERT, kunnen we voegen bepaalde waarden in een tabel. Dus INSERT INTO tabel, en dan de waarden, en daarna tussen haakjes, we opgeven welke waarden u wilt invoegen. Dus INSERT INTO tabel col1 en col2, de waarde is val1 en val2. Dus dit voegt eigenlijk een nieuwe rij in een tabel met de waarden 1 en 2 onder de kolommen 1 en 2. En dan gaan we voorbij gaan een snelle voorbeeld van hoe dit eruit ziet zoals in onze database een beetje. Maar deze laatste vraag die ik denk dat we over te gaan, SELECT, het gewoon ons toelaat om gegevens uit een tabel selecteren om eventueel gebruik achteraf. En de manier waarop we dit doen is dat we gewoon opslaan in een aantal variabele. En dan kunnen we misschien weer gebruiken. Dus SELECT ster betekent alles selecteren. Dat is gewoon een verkorte alle selecteren. FROM tafel waar, zijn wij op zoek voor een aantal specifieke voorwaarden, dus waar de kolom gelijk iets, bijvoorbeeld. Als we wilden gewoon Alles selecteren van tafel, dit gewoon selecteert alle kolommen en alle rijen uit een tabel. En dan DELETE FROM tabel WAAR col is gelijk aan iets, Dit verwijdert slechts enkele rij van onze tafel waar we hebben een aantal specifieke voorwaarden. In dit geval zijn de voorwaarden zijn kolom is gelijk aan iets. Dus gewoon een snelle voorbeeld van. Als we deze tabel hier en we invoegen in een tabel, deze waarden, dat er een nieuwe rij zou voegen. En als we de auto-increment, zou dit slechts increment onze ID 0-1 om 2. Als we allemaal geselecteerd uit studenten, is het gewoon geeft alle velden en alle rijen. Wanneer jaar groter dan of gelijk aan 2016, dat zou gewoon terug Hannah en ikzelf. En dan als we gewoon geselecteerd id jaar en het jaar FROM studenten waar het huis is Cabot House, dat zou weer terug Hannah en ikzelf. Dan, als we van studenten verwijderd waar de naam is gelijk aan Rob, dat zou de hele rij te verwijderen. En dan, als we de naam, UPDATE studenten SET naam gelijk aan Daven WAAR huis is gelijk Cabot House, dat gaat naar die rijen en werk vervolgens de naam. En dan een paar soorten SQL-gegevens CHAR, VARCHAR, INT, en zweven. Dit zijn eerlijk spel. Ik zou opnieuw gaan en zorg ervoor dat je weet en hebben ze op je cheat sheet, wat elk van deze karakters werden gebruikt, wat je ze gebruikt op uw psets, en zorg ervoor dat u bekend bent en comfortabel met het hebben om uit te kiezen van verschillende soorten gegevens in uw PSET. Ja. Publiek: Wat is die tafel opgeslagen? Ja, waar is deze tabel opgeslagen? MARIA ZLATKOVA: Nou, nu, is het niet opgeslagen. Hoe dan ook, waar is deze tabel opgeslagen? Maar het kan worden opgeslagen in een SQL-database. Publiek: En waar is de SQL-database? In de computer, online ergens, de server? MARIA ZLATKOVA: Het kan een aantal verschillende dingen. HANNAH BLUMBERG: We hebben gekoppeld aan SQL-tabellen meestal met phpMyAdmin. Dus konden we een server vragen op te slaan voor ons. We konden ze op te slaan op onze eigen computer. MARIA ZLATKOVA: Het is maar net hoe je wilt het zelf te doen. Maar we zijn het opslaan hen Hannah gezegd, op phpMyAdmin, dat is online. En dan de manier waarop we gebruiken PHP en SQL, slaan we in een aantal variabele wat we hebben opgevraagd. Dus als we alle selecteren uit de geschiedenis waarbij user_id gelijk is aan de sessie-ID, dat zou alle rijen te selecteren voor de specifieke persoon die wordt aangemeld uit de geschiedenis tafel en sorteer ze in rijen. Een koele ding om te weten is dat CS50's vraag functie beschermt tegen SQL-injectie-tags. Dat betekent gewoon dat het zorgt ervoor dat de ingang die is ingevoerd juist is en dat de persoon die is het invoeren van de input probeert niet om input sommige kwaadaardige code om ofwel laten vallen onze tafels of verwijderen alles binnenkant van onze database. Een snel overzicht van de Model View Controller model, het is gewoon een manier van organiseren en na te denken over de code. Het is opnieuw een ontwerp paradigma. Wat dat betekent is dat we can-- en het is goede praktijken naar verschillende delen te scheiden van onze code en wat ze controle in deze drie paradigma. Zodat onze mening is meestal onze templates, onze layout, zoals dat we in te stellen hoe de code eruit ziet. Dat is vooral onze CSS-bestanden en de manier waarop dat we het ontwerp van onze code gedefinieerd, principe. Onze controller is meestal wat we hebben gedaan met PHP-bestanden. Dus nogmaals, het werken met de informatie die we en bepalen hoe dat informatie wordt gebruikt, en dan passeren die informatie hetzij op het uitzicht of het model. En het model, de manier waarop we hebben gebruikt wil is onze database geweest, dus waar onze informatie opgeslagen, dus het heeft ergens om in te wonen, en een van de code die betrekking heeft op de manier dat we die informatie of de manier waarop we werken die informatie. Dus in de MVC-model, HTTP aanvragen worden verzonden naar een webserver. Vervolgens wordt de controller interpreteert het verzoek van de gebruiker en valideert vervolgens het gebruikersinvoer. Het is optioneel dat we de controller te communiceren met een model, dus iets zoals onze databank of een andere functionaliteiten dat relais informatie. En tenslotte, de controller passeert informatie op het uitzicht zodat het kan worden gesmolten en dat het kan zichtbaar voor een persoon te worden de toegang tot de webpagina. Nog vragen? Geweldig. Dus nogmaals, het model, zijn functie, weer, is permanente opslag van informatie, beheren en organiseren van data. En wat we tot nu gezien Wat is de MySQL database en gegevensbestanden die kunnen gebruiken. View, presentatie van informatie aan de gebruiker, de UI of gebruikersinterface. En het voorbeeld is HTML. En dan kunnen we een minimale PHP hebben. Dus een lus die herhaalt meer dan de gegevens die worden afgedrukt bevindt zich in de weergave, zoals tegen de controller. En dan veel van onze PHP-bestanden vallen in de categorie controller. Het behandelt alleen verzoeken van gebruikers en krijgt informatie uit het model. Springen in de Document Object Model, dit enkel verwijst naar de manier waarop HTML documenten worden georganiseerd. En ze zijn georganiseerd in een boom structuur die een hiërarchie. Dus als we toegang hebben tot [onverstaanbaar] weergave van het document, we kunnen werken met het document, zoals We manipuleren voorwerpen principe. En om dit een te maken beetje duidelijker, wanneer we hebben veel van onze verschillende labels reageren verschillende routes in onze structuur. En dan voor dit voorbeeld, we hebben de beginnende document node. We hebben dus onze HTML knooppunt dat splitst in hoofd en lichaam. Head heeft titel en vervolgens titel bevat hello, wereld. En ons lichaam bevat slechts hello, wereld ook. Zodat eventuele vragen over een van de dingen die we tot nu toe gedekt? En zo niet, Hannah zal over te nemen met JavaScript. Geweldig. HANNAH BLUMBERG: OK, cool. Als er iets komt met PHP of HTML, of een van de dingen die Maria bedekt, kunnen we altijd pauzeren. We doen het beter op op keer, zo geweldig. En gewoon om terug te gaan heel snel hierop als je kijkt naar elke examen afgelopen jaar, dit komt either-- hier wat HTML, maken dit diagram. Of hier is dit schema, maak wat HTML, dus zeker de praktijk dat. En dan is dat een gegarandeerd vraag die je gelijk kunt krijgen. Koel. Dus laten we praten over JavaScript en hoe het is een beetje verschillend van talen zoals PHP en C, de twee talen die we van tevoren zagen. Dus nummer één, het is losjes getypt. Dat is zoals PHP, maar in tegenstelling tot C. Het is een geïnterpreteerde taal. Nogmaals, dat is net als PHP, anders dan C. En zal ons in staat stellen om het use-- werkt echt mooi met webpagina's. Het gaat om ons te manipuleren de inhoud en hoe het eruit ziet en wat het doet. We gaan een beetje van Ajax te zien. Het stelt ons in staat om te communiceren asynchroon met verschillende servers en informatie krijgen. En dit is het ding dat echt scheidt JavaScript van PHP en C is dat het client-side. Zowel PHP en C zijn typisch server-side. Voor het grootste deel en bijna geheel wat we hebben gezien, althans in deze klasse, JavaScript inwerkt op client-side, wat betekent dat dat de browser is eigenlijk voor de exploitatie van het. En dat betekent dat we niet moeten communiceren met de server. Dus het betekent dat het kan een stuk sneller zijn want het is eigenlijk alleen maar het is Chrome, het is Safari, het is Firefox, wat je Gebruik eigenlijk het runnen van uw JavaScript. Publiek: Wat betekent asynchrone betekenen? HANNAH BLUMBERG: Ah, wat betekent asynchroon betekenen? Grote vraag. Asynchroon means-- goed, de inhoud van die we gebruiken is, OK, we zijn het creëren van een webpagina en we moeten wat informatie te krijgen. Dus met het voorbeeld van de mashup, wat informatie die we zouden willen is artikel titels. Nu hebben we een optie could-- is het synchroon te doen en dat betekent laten we stop, haal het artikel, krijgt het artikel terug, en dan maken, maar dat erg traag zou worden. Dat zou een slechte gebruikerservaring te zijn want je zou gewoon zitten er wachten op iets te reageren. Betekent dat we zullen asynchroon blijven gaan over ons bedrijf, waardoor de pagina en we zullen sturen uit een verzoek Dat is een soort van naar gebeuren in de achtergrond. Ik denk dat we het voorbeeld in lezing van Rob bellen en te zeggen, hey, kunt u dit opzoeken voor mij en weer terug naar mij, in tegenstelling tot enkel me wachten aan de telefoon. Dus asynchroon middelen gebeurt op de achtergrond van ons parallel. Grote vraag. Nog iets? Grote. We zullen nog veel meer in te springen asynchrone verzoeken met Ajax. PUBLIEK: Doet JavaScript-- waar komt vallen met de model-view-controller? HANNAH BLUMBERG: Grote vraag. Waar komt JavaScript val met model-view-controller? Hm. Ik denk dat het kan fall-- dus doen we meestal niet willen squish in die paradigma, maar ik denk dat ik zou zeggen, OK, dus JavaScript in feite gaat om ons om gegevens te verzamelen, interpreteren van data, eigenlijk doen zinvolle dingen met de gegevens. Op die manier is het erg controle-achtig. Maar het is ook van plan om ons in staat te stellen dingen en af ​​te drukken dingen weer te geven. Op die manier is het zeer view-achtige. Ja. Dus het is net zoiets als PHP in waar deze soort kan zowel. Goede vraag. Nog iets? Oké, geweldig. Bewegende rechts langs. Dus laten we zien een voorbeeld hoe we kunnen gebruiken JavaScript in een van onze web-programma's. Dus ik zal dit te overwegen index.html met een bos van HTML. En het ding ik wil dat je concentreren op dit script tag. En dit zegt, OK, ik wil wat lopen JavaScript en hier is waar het leeft. Het leeft in hello.js. En heel erg als CSS, konden we zet JavaScript in de HTML. Waarom zouden we willen scheiden? Ja. PUBLIEK: Makkelijker te herschrijven? HANNAH BLUMBERG: Ja. Het is makkelijker om over te gebruiken verschillende webpagina's. Het houdt dingen schoner. Het is gewoon goede praktijken. Geweldig. Goed antwoord. Zo goed, dus dit gaat onze index.html zijn. En dan hier beneden is onze klein JavaScript-bestand. En alles wat het zegt, is alert Hallo, wereld. Dus wat er gebeurt is wanneer Deze pagina renders-- dus als je naar welke website dit is-- alles wat er gaat gebeuren wordt het gaat zeggen, OK, ik ben ga deze JavaScript-code uit te voeren. En deze JavaScript-code gewoon zegt alert Hallo, wereld. Dus ik ga om dit te krijgen vriendelijke kleine pop-up. Koel? Dat is net zoiets als onze allereerste JavaScript-programma, onze Hallo, wereld. Laten we eens kijken een beetje meer over wat de syntaxis van JavaScript eruit ziet. En in het bijzonder, laten we het vergelijken met C en PHP, die we eerder hebben gezien. In JavaScript, we gaan te hebben var, de naam van de variabele, en de werkelijke waarde. En we hebben niet een soort opgeven, net zoals in PHP, maar heel anders dan in C. Dus bijvoorbeeld, als we wilden de waarde 50 op te slaan, in C, zouden we moeten zeggen, hey, C, wil ik een integer, Ik ga noemen i, en bedraagt ​​50. In PHP, het is een beetje makkelijker. Wij zeggen, hey, ik wil een variabele riep ik en de waarde is 50. Zeer evenzo in JavaScript, we zeggen hey, ik wil een variabele i genoemd, de waarde is 50. Elke volgende keer dat ik gebruik ik, ik hoef niet te var te schrijven. Het is gewoon ik vanaf dat moment. Op dezelfde wijze, in C, waarbij zodra we int ik zeggen, dat we gewoon gebruik maken van i. Koel? Prima. Verhuizen naar loops, Gelukkig zijn deze bijna kijk exactly-- Ik denk dat ze precies hetzelfde als wat lussen gaan uitzien in iets als C waar uw lus zal drie hebben parts-- een initialisatie, een voorwaarde, en een update. Een tijdje loop, het ziet er exact hetzelfde. We geven het gewoon een voorwaarde. En een do while lus, weer precies hetzelfde. We geven het een voorwaarde. Laten we zeggen dat ik wilde over-- herhalen Ik wilde iets doen vijf keer. In C, kunnen we schrijven voor init i gelijk is aan 0. i kleiner is dan 5, i ++. Enige verschil, in JavaScript, in plaats van te zeggen int i gelijk is aan 0, we zeggen var i gelijk is aan 0. Mooi. Dat is het enige verschil. Heeft u vragen over een van die? Ja. Publiek: Dus in PHP, het is hetzelfde ding, behalve maar als een variabele? Of was dat een var voorbeeld? HANNAH BLUMBERG: Ja. Dus in PHP, het gaat een dollarteken zijn. Dus het gaat om $ i gelijken 0, $ i kleiner is dan 5, $ i ++. Grote vraag. Laten we nu praten over functie declaraties. In C, als we verklaard functie, gaven we het een naam en we gaven het een aantal parameters. En aan het begin, schreven we het type. In JavaScript, alles wat we hoeft te doen is schrijven het trefwoord functie die zegt, hey, JavaScript, Ik sta op het punt om een ​​functie te definiëren. In casu heeft de naam sum. En twee argumenten, x en y. Merk op dat we niet de zorg de soorten x en y. En net als C, hebben we dit zoekwoord terugkeer, dus we kunnen iets doen zoals return x en y. En nu als we eenmaal heb geschreven deze eerste functie, kunnen we som overal gebruiken. En dat is helemaal prima. Een echt cool ding over JavaScript dat is heel anders C is dat functies worden behandeld als waarden. Dus we kunnen iets doen hier waar ik denk dat ik de dekking van deze up-- Ik bedekte de var sum part-- en we zeiden functie xy gelijk rendement x plus y. Dat zou noemen een anonieme functie. Het is een functie zonder naam. Overwegende dat deze zegt functie som, blah, blah, blah, Dit zou alleen maar de functie te zeggen. Maar nu ook al heb ik Deze anonieme functie, die functie is eigenlijk gewoon een waarde. We kunnen het behandelen als een waarde. Dus we kunnen het op te slaan in een variabele hetzelfde manier waarop we konden opslaan 50 in een variabele. Dus we kunnen zeggen, OK, ik wil een variabele, het heet som, en het is deze functie. Dus deze twee dingen zijn eigenlijk zal precies hetzelfde doen, maar de syntax is een beetje verschillend en soort van een leuke noot. Ja. Publiek: Dus je zou kunnen noemen een functie die anoniem was door te zeggen: som beugels 2, 5? HANNAH BLUMBERG: Ja. Je kunt dit anoniem bellen werken op dezelfde wijze. Je zou som doen (2, 5) ;. Dat zou heel fijn zijn. Als ik niet doen var som gelijk functie, als ik gewoon verwijderd dit-- Ik weet dat het op mijn hand, maar doen alsof ik verwijderde dit-- dan die functie is een soort van gewoon weg. Je kunt nooit opnieuw gebruiken, omdat je hoeft niet een naam voor. Het is moeilijk om te verwijzen naar iets je weet niet wat te noemen. Goede vraag. Ja. PUBLIEK: Kunt u sum verwijzen in andere plaatsen met de waarde van x plus y? HANNAH BLUMBERG: Kunt u referentie bedrag op andere plaatsen met de waarde x plus y? Ik ben niet helemaal zeker wat je bedoelt. Publiek: Dus je verleden semi-anonieme functie som gelijk aan deze anonieme functie, dus som nu een variabele die je can-- HANNAH BLUMBERG: Recht. Dus som variabele, maar het is actually-- dus som is een variabele waarvan waarde van de functie. Dus het is een functie, die is een soort van een raar ding om je hoofd wikkelen rond want we hebben het spelen met C en je kunt dat niet doen in C. Maar nu kunnen we noemen het samenvatten dezelfde manier konden we som hier noemen. Publiek: OK. HANNAH BLUMBERG: Ja. Goede vraag. Ja. Publiek: Dus we geen gebruik maken van de prototypes in PHP of JavaScript? HANNAH BLUMBERG: Nee, we hoeft prototypes gebruiken, vooral in JavaScript. Dus een slechte praktijken ding dat ik ben gaan om te zeggen dat je niet moet doen is dat je niet hoeft te var i = 50 schrijven. Je kon gewoon beginnen met het doen i = 50. En zou ik gewoon een globale variabele. Het is zeer slechte gewoonte om zeg nooit expliciet var i, maar het is iets wat je kunt doen. De tolk is niet gaan schreeuwen naar je. JavaScript is mooi als, je mag doen wat je wilt. Oh, sorry. Er zijn twee. In het oranje broek. Doe Maar. PUBLIEK: Nee, eerst ga je. Publiek: Nee, ik was gewoon te zeggen Ik heb niet mijn hand. OK. Dus als je om te bellen die eerste keer, nu Kortom, We noemen het de zelfde manier, x, y, net als elke keer? HANNAH BLUMBERG: Ja. Dus deze twee in hoofdzaak hetzelfde doen. Publiek: En wat is het voordeel het gebruik van een of andere? HANNAH BLUMBERG: Geen voordeel het gebruik van een of de ander. Ik wilde alleen maar om te laten zien twee verschillende stukken van de syntaxis. Een heleboel keer, waar anonieme functies hebben een doel is als het argument naar een andere functie moet worden verricht. En we zullen zien dat er in gewoon een tweede bij Ajax. Dus als dat heeft geen zin, opslaan in de achterkant van je hoofd. Dat is waar een anonieme functie nuttig zou kunnen zijn want het is niet echt de moeite waard het geven van een naam omdat we gewoon gaat gebruiken een keer. Ja. Doelgroep: Als x en y verandering later , zal vatten eveneens veranderen? HANNAH BLUMBERG: Als x en y wijzigen later zullen samenvatten veranderen ook? Dus dit is eigenlijk I denk dat er iets is dat, nogmaals, het voelt gewoon heel anders van C. Dit is niet een waarde. Het is geen 5. Het is gewoon de functie zelf. Dus zodra je geef het parameters, dan zul je eigenlijk berekenen een waarde. MARIA ZLATKOVA: En dan kunt u de functie bellen en gebruik deze om een ​​bepaalde waarde te krijgen. HANNAH BLUMBERG: Recht. Precies. Ja. Publiek: Dus als je gewoon opslaan in de variabele, zoals var x gelijk is aan som van twee values-- HANNAH BLUMBERG: Ja. Dus je kon gewoon doen var sum is gelijk aan som van twee waarden. Ja. Een andere vragen? Ja. Publiek: Maar zou dat verwarren som en de som? Net als u uw variabel bedrag noemen, zou u de functie som noemen? HANNAH BLUMBERG: Mm. Mm. Als je iets deed zoals, een bedrag gelijk aan som 2, 5? Publiek: Ja. HANNAH BLUMBERG: Ik geloof dat zou de waarde van het bedrag overschrijven. Dus andere interessante ding over JavaScript is dat een enkele variabele kan aannemen op een heleboel verschillende soorten. Slechte praktijken. Je moet niet iets doen als wat je net zei. Maar in C, als ik is ingesteld gelijk is aan een geheel getal, we weten dat het nooit gaan naar een string te worden. Dit is niet het geval in JavaScript. Ja, goede vraag. Nog iets? Prima. Doet al precies op tijd. Houden gaan. Prima. Als we kijken naar een array in JavaScript, hier is snel een voorbeeld van een array van strings. En arrays kunnen dynamisch groeien. Ze hebben geen hebben vaste grootte op dezelfde manier dat ze in C. We kunnen toegang krijgen tot de elementen met alleen de vierkante haken. Dat lijkt veel op PHP en een heleboel zoals C, waarbij we kunnen zeggen, in casu als ik wilde het woord JavaScript, zou ik do arr vierkante haken met een 0, 1, 2. En dan als je nog in C als we wilde de lengte van een array te krijgen, het was echt vervelend. Maar in JavaScript, super eenvoudig. Alles wat we doen, .length. Geeft het de lengtes. Dat is het. PUBLIEK: Dat is simpel. HANNAH BLUMBERG: Ja, maakt uw leven een stuk eenvoudiger. OK, object-- er niet. Objecten in JavaScript gevoel een partij als structs in C en associatieve arrays in PHP. Dus wat we hebben gezien een Veel is JSON, die staat voor JavaScript Object Notation. En het is eigenlijk een manier structureren van onze data. Dus laten we zien een voorbeeld, waarschijnlijk de eenvoudigste. Dus hier is een voorbeeld van een object dat slaat de klasse, CS50. En als ik de klas zeggen, ik bedoel natuurlijk, niet like-- ja, de cursus, CS50. En je zult zien dat alles in het object zal worden opgenomen accolades. En we beginnen met veldnamen associëren toetsen met verschillende waarden. Dus je kunt beginnen om te zien hoe dit soort voelt als een associatieve array in PHP. Dus we gaan naar het veld te associëren of de sleutel naam, uiteraard, met de string, CS50. We gaan een instructeur te hebben. We gaan TFs hebben. We gaan het aantal psets hebben en we gaan te hebben opgenomen. En een cool ding om op te merken is al deze dingen hebben verschillende soorten, en dat is helemaal prima. Het is goed voor een object, in feite, het is waarschijnlijk verwacht voor een object een combinatie van snaren en cijfers en Booleans en arrays en alles wat je zou kunnen wilt in uw object te hebben. En er rekening mee dat deze zullen worden de namen of de toetsen, en dan gaan we gewoon zet het gelijk met een beetje dikke darm. Publiek: Wat betekent JSON betekenen? HANNAH BLUMBERG: Wat precies doet JSON betekenen? JSON staat voor JavaScript Object Notation. Het is gewoon een manier van opmaak. Ja. Het is een manier van het formatteren van onze data. In C, het is structuren. In PHP is het associatieve arrays. In JavaScript, hebben we objecten. Publiek: Dus CS50 is een object? HANNAH BLUMBERG: CS50 is het doel in dit geval. Nu, hoe doen we eigenlijk toegang die gebieden of wijzigen deze gebieden. Stel bijvoorbeeld dat we besloten je wilde een minder PSET dit semester. In plaats van negen, we zijn gewoon te hebben acht. Hoe zouden we dat veranderen? Oh, verkeerde manier. Er zijn twee manieren waarop we dat kunnen doen. Nummer één is met de stip notatie en nummer twee is met het kwadraat haakjesnotering. Dus, bijvoorbeeld, als ik wilde veranderen of de toegang het veld psets in onze CS50 object, wat ik zou doen is CS50.psets, zodat de naam van het object dot de naam van het veld of de sleutel. Zeer evenzo, het is precies gelijkwaardig te doen CS50, en dan in rechte haken, psets. Koel? Ja. Publiek: Dus is JSON technisch JavaScript nog steeds, ook al in de psets we scheiden het uit [onverstaanbaar]? HANNAH BLUMBERG: Zeker. Dus de vraag is, zijn JavaScript en JSON gelijk? Dus JSON notatie is, in principe de manier waarop we uit te schrijven een object uit JavaScript. Zodat ze niet precies hetzelfde. Ik zou zeggen JavaScript, er zijn objecten in JavaScript. JSON neemt die objecten en drukt ze en geeft ze of slaat ze op een leuke manier. Dus JSON is geen programmering taal de manier waarop JavaScript is. Het is gewoon de notatie voor onze objecten in JavaScript. Ja. Publiek: Dus wat precies [Onverstaanbaar] af te ronden? HANNAH BLUMBERG: Zeker. Dus dit doet eigenlijk niets. Dit is gewoon een manier om toegang te krijgen. Dus laten we zeggen dat we wilden veranderen het aantal problematische sets 9-8. Wat wij doen is iets doen zoals CS50.psets = 8 ;. Ja, grote vraag. Dit is gewoon om je te laten zien syntax. Niet echt iets nuttigs te doen. Nog vragen? Bewegende rechts langs. Dus laten we eens kijken naar een snelle voorbeeld van hoe JavaScript werkt omdat ik zei toch dat het doet al deze coole dingen en stelt ons in staat om webpagina's aan te passen. Laten we eens echt zien in actie. Dus neem, bijvoorbeeld, dit HTML-bestand. En het ding ik wil dat je te concentreren op is dit specifieke tag, dat is een knop, met id search_button. Het is gewoon op de pagina. Dus laten we nu zien wat kunnen we eigenlijk doen. Nou, stel dat bij u klikt op die knop, we willen een alert-- maken u hebt geklikt op de knop. Laten we eens kijken hoe we dat kunnen doen. Dus window.onload-- dit is niet iets dat je hebt gezien in de klas, dus hoeft niet te weten voor de quiz. Maar dit zegt eigenlijk, OK, oproep deze functie wanneer het venster geladen. Dus dat is gewoon een soort van setup code. Niet zo veel over dat zorgen. Wat ik wil dat je te concentreren op is hier. We zeggen var searchButton gelijk document.getElementById search_button. Dus zoals je wel kan raden, Wat dit doet is het zegt, OK, ga vinden het element met ID search_button. En nu hebben we dat feitelijke element en ik ben gaan om het op te slaan in een variabele searchButton. En nu kunnen we daadwerkelijk gebruik maken van dat element en verander het, of toegang tot haar waarden, dat soort dingen. We kunnen eigenlijk beginnen bezighouden met de webpagina. Dus hier zeg ik, OK, nu dat ik heb die knop, als erop wordt geklikt, Dit noemen anonieme functie. Dus dit is waar anoniem functies geworden nuttig. En wat doet de functie doen? Nou, het roept alleen deze alert-functie en het zegt, u hebt geklikt op de knop Zoeken. Dus wat gebeurt er als ik naar waar deze HTML leeft en ik klik op de knop, Ik zal een mooie kleine waarschuwing krijgen die zegt dat je klikte op de knop. Dus de dingen te concentreren op hier-- document.getElementById krijgt een bepaalde HTML element met de gegeven ID. En nu kunnen we stellen wat er moet gebeuren wanneer dat bijzondere element wordt geklikt. PUBLIEK: We moeten dat allemaal in te zetten? HANNAH BLUMBERG: Sorry? Publiek: Moeten we fysiek al die code? HANNAH BLUMBERG: Moeten we fysiek al die code? Ja. Is dit niet een beetje vervelend? Dit is een veel code. Publiek: Je kan iets te importeren. HANNAH BLUMBERG: Recht. We kunnen iets te gebruiken. En in particular-- oh, het is me te vertellen Ik moet sectie onderwijzen. In het bijzonder, laten we gebruik maken van de bibliotheek jQuery, want dat was echt lang en echt vervelend en ik wil in staat zijn om het te vereenvoudigen en maakt het korter en eenvoudiger te schrijven. Dus jQuery is een JavaScript-bibliotheek. Javascript is zo programmeren taal; jQuery is een bibliotheek. En het maakt een heleboel dingen makkelijker. Het maakt het veranderen en over te gaan een HTML-document veel gemakkelijker. Het maakt handling gebeurtenissen gemakkelijker. Het maakt animatie makkelijker en het maakt Ajax eenvoudiger. Dus laten we springen in twee van die dingen nu. Excuseer mij. Voordat we dat doen, een aantal fundamentele syntax. Dit is wat de meeste oproepen naar de jQuery bibliotheek eruit. Wij gebruiken dit dollar sign-- geen verbinding teken om PHP, gewoon inconvenient-- de naam van een selector, punt, en vervolgens een actie. Dus laten we zien een aantal concrete voorbeelden van. Dus dit is eigenlijk hetzelfde code van het evenement dia. Dus dit lang, lelijk ding wordt dit veel mooier, kleinere zaak. Dus laten we proberen om dit af te breken. Dit zegt, OK, jQuery-- dit dollar sign-- jQuery, vind ik het raam. Dus dat is de selector. Wanneer het laadt, noemen deze functie. Dus dat is alles binnen. OK. Tot dusver, zo goed? Prima. Nu, jQuery, vind ik het ding met ID search_button. En wat het wordt geklikt, noemen deze functie. En dan is deze functie's precies dezelfde. Gewoon een beetje alert, u hebt geklikt op de knop Zoeken. Dus het is echt leuk. Condenseert echt en vereenvoudigt onze code. Hoe wist ik dat het is ID search_button en niet zoals de klas search_button? PUBLIEK: Hashtag? HANNAH BLUMBERG: Ja. Dit hekje, het is net als CSS. Dus onthoud, met CSS, wanneer we wilde iets van ID te selecteren, gebruikten we het hekje. En toen we wilden selecteren iets per klasse, gebruiken we de stip. Grote. Zin? Dus jQuery wordt verondersteld gewoon maken ons leven makkelijker. Ja. Publiek: Dus ik ben een beetje in de war als hoe de anonieme functie werkt. Heeft u noemt dit anonymouse functie, functioneren? Hoe heet het? HANNAH BLUMBERG: Zeker. Dus functie is slechts een sleutelwoord dat zegt, ik sta op het punt om een ​​functie te definiëren. PUBLIEK: Oh, OK. HANNAH BLUMBERG: OK? En dan passeren we het als een argument to-- laten we deze innerlijke een-- aan de klik-functie. Dus ja, zodat die functie, Deze anonieme functie, wordt een echte argument. Dus onthoud in JavaScript, we kunt functies behandelen als waarden. PUBLIEK: Oh, OK. HANNAH BLUMBERG: Ja. Ik vind dat "oh." Nice. Andere vragen? Tijd? MARIA ZLATKOVA: Goed. Goed. HANNAH BLUMBERG: Awesome. Een aantal snelle nuttige jQuery. Ik ben niet van plan om te gaan door al deze. Deze dia's zullen zijn up online een beetje later, zodat u kunt controleren het uit een beetje later. Maar in principe, de algemene patroon houdt waar we zeggen, OK, hey, jQuery, hier is mijn selector en dan is hier een actie. En je kunt dingen doen, zoals toegang tot de waarde van een formulier, toegang tot een aantal HTML, controle wat er gebeurt als de gebruiker dient een formulier, dat soort dingen. Ja. Publiek: Dus in het examen, gaan we nodig hebben heel veel weten van de jQuery documentatie. Dus gezien het feit dat we te kopiëren / plakken van de jQuery documentatie om onze cheat sheet, Waar is de lijn? Zoals hoeveel hebben we nodig om te weten? HANNAH BLUMBERG: Grote vraag. De vraag is wezen gezien het feit dat je geen toegang tot de jQuery documentatie tijdens de test, hoeveel moet je weten? We zouden niet verwachten dat je om te komen met een aantal willekeurige functie dat wij u zou verwachten van Google. Dingen die eerlijk spel zijn zijn zou ik Zeg gewoon een soort van de algemene syntax, het kunnen selecteren op ID en door class-- dus net als CSS. En dan de eigenlijke functies zichzelf, we zullen je waarschijnlijk vertellen. Ja. Publiek: Dus als je kiest per klasse punt zou betekenen. HANNAH BLUMBERG: Ja, precies. Goed. Wanneer u door de klas te selecteren, gaat het te stippelen in plaats van het hekje. Ja. Publiek: Wilt u gaan over het verschil tussen het selecteren van ID en per klasse? HANNAH BLUMBERG: Zeker. Het verschil tussen het selecteren ID en selecteren per klasse. Dus als Maria zei een beetje eerder, er kan slechts een HTML-element met een bepaalde ID, terwijl klasse, Het laat ons toe om de groep een bos verschillende elementen samen, dus dingen die te maken hebben, maar niet precies hetzelfde. Is dat een antwoord op de vraag? Geweldig. Ja. Publiek: Wat als je meerdere hebt dingen die in dezelfde klasse? HANNAH BLUMBERG: Wat gebeurt er als je meerdere dingen die zijn dezelfde klasse? Dus, bijvoorbeeld, als we alleen met behulp van pure JavaScript, zouden we iets doen, zoals document.getElementsByClass. En wat dat eigenlijk doet is terug een array van elementen. En je moet ofwel itereren over hen of vinden welke je wilt. Het is niet van plan op te geven u een enkel element. Het gaat om u Een reeks elementen. Grote vraag. Nog iets? Geweldig. Dus ik denk dat als je bekend bent met elke jQuery je zag in de PSET, je moet goed om te gaan. Vraag? O nee. Ik moet echt leren. Ontspannen. Het komt wel goed. Ik zal er komen. Laten we praten over Ajax. Dus Ajax gaat a-- goed, laten we beginnen met waar het voor staat. Het is een acroniem. Het staat voor Asynchronous JavaScript en XML. En XML is in principe gaat worden [Onverstaanbaar] met een soort van onze data. Maar we hebben niet echt gebruikt XML. In plaats daarvan hebben we gewoon gebruik maken van JSON. Dus eigenlijk is het aantal data-- asynchrone, JavaScript, en data, in dit geval, JSON. En ons doel, zoals we al een beetje eerder, is in staat zijn om een ​​te maken verzoek hebben dat verzoek te doen zijn ding in de achtergrond, maar blijven doen wat we van plan waren te doen. En toen die informatie klaar is, dan zullen we het op te nemen. Dus laten we zien wat dit daadwerkelijk uitziet. En dit, moet je een beetje bekend uit pset8, degene die je net draaide in. Dus hier is een geldig jQuery functie die we misschien willen weten about-- dit dollarteken. Dus het jQuery functie .getJSON zegt. En wat deze functie doet is het neemt een URL en wat parameters-- dus ik denk dat in het geval van pset8, het was, de URL was articles.php en de parameters was go = enkele postcode. En het zegt, OK, een verzoek om Deze URL met de gegeven parameters. En dat gebeurt gewoon. Als het klaar is, het is ofwel ga met succes te voltooien of het zal mislukken. Dus dit is het equivalent van de oproep Rob en vraag hem om iets te doen. En toen hij terugbelt, hij is ofwel gaan zeggen dat ik klaar ben, of ik gefaald. Dus in het geval dat je bent gedaan, zeg je, OK, ik ben klaar. En dan deze functie bel je. In dit geval gaat het om een ​​te zijn functie dat bepaalde informatie neemt. De ene we meestal de zorg over zijn gegevens, de gegevens die we eigenlijk waren teruggekeerd als resultaat van het opvragen .getJSON. En je kunt er iets mee doen. Dus in het geval van pset8, we getoond als een lijst. Fail gaat om een ​​functie te zijn die wordt genoemd als de aanvraag mislukt voor welke reden dan ook. En in het geval van pset8, we console.log het gewoon. Heeft u vragen over dat? Ja. Publiek: Kunnen we gewoon gebruik maken van de functie theta in plaats van de functie, textStatus, jqHXR. HANNAH BLUMBERG: Zeker. Dus ja, ik denk dat in de PSET, we net zagen functie data. Dus het is the-- gewoon ja, OK. Dat is wat we zagen in de PSET. Dat is helemaal prima. Dit zijn slechts als je wilde te trekken uit meer informatie dit zijn de dingen die je zou kunnen krijgen van .getJSON. Goede vraag. Nog iets? Ja. Publiek: Dus .getJSON is Ajax? HANNAH BLUMBERG: OK. Dus dit is het soort lastige deel. Het is een jQuery functie die het mogelijk maakt u asynchrone oproepen te doen. En die asynchrone gesprekken, dat is wat we hebben te verwijzen naar als Ajax. Ja. Dat kostte me een heel lange tijd uit elkaar te trekken toen ik een student. Publiek: Kun je zeggen dat weer? HANNAH BLUMBERG: Ja. Kan ik dat nog eens zeggen? Deze .getJSON functie, Het is een jQuery functie. En het gaat om een asynchrone oproep. En deze asynchrone oproepen, we hebben werd verwezen naar die zoals Ajax. Een andere vragen? We hebben maar een paar minuten over. En Maria gaat naar wrap up met beveiliging en dan gaan we zowat worden gedaan. MARIA ZLATKOVA: Awesome, OK. Dus dit is-- gewoon een paar seconden om te kijken over dit. En dit is niet iets wat echt geweldig. En kan iemand mij vertellen waarom? Wat er gaande is in foo en moge kon mogelijk resulteren in iets slecht, en wat dat heet? Ja. Publiek: Als het argument dat doorgegeven meer dan 12 tekens, het kan overstromen. MARIA ZLATKOVA: Recht. Perfect. Hoe heet het? U noemde het gewoon. Publiek: Buffer overflow. MARIA ZLATKOVA: Yup, buffer overflow. Dus dit is iets dat we verwijzen als buffer overflow. En we zien dat de binnenkant van foo, we hebben onze buffer, c gedefinieerd, met een grootte van 12. Echter, in de belangrijkste, we doen niet Controleer op welke manier bij allen of de argv1-- zodat was het tweede argument. Wij controleren niet of de grootte ervan geschikt. Dus als we hadden een vooral kwaadwillende gebruiker die in sommige argument dat was gezet langer dan 12, en eventueel buiten de grenzen van die argument, had een aantal uitvoerbare code dat hij probeerde om iets te doen slecht ermee; dan is dit, wat er zou gebeuren, zou de terugkeer overschrijven adres van de foo-functie, waardoor de functie bij terug te keren naar die code uit te voeren. En dan slechte dingen kunnen gebeuren. Betekent dit zinvol voor iedereen? En hoe kunnen we tegen dit? Suggesties? Kortom, binnenin potentieel foo, hoe kunnen we controleren om ervoor te zorgen dat dat niet kan gebeuren? Publiek: Als de grootte 12 wordt overschreden, zou je extra geheugen toe te wijzen? MARIA ZLATKOVA: Suggestie is, wijzen extra geheugen van de grootte overschreden. Eigenlijk, kunnen we iets doen een veel eenvoudiger dan dat ook. We kunnen gewoon de lengte van de string van het argument dat wordt ingevoerd, controleren of die minder hoogste 12-- dat is wat we willen te zijn, omdat we niet willen aan de grenzen van onze buffer overschrijden. En als dat niet het geval, we kan werken met het argument. En als dat zo is, we eigenlijk willen potentieel Yello op gebruikersniveau. Maar dit is hoe we dat zouden doen. Ja. Publiek: Kunt u uitleggen memcpy echt snel? MARIA ZLATKOVA: Oh, sorry. Ja. Memcpy neemt wat is-- sorry, OK. Memcpy neemt wat is in de bar, wat ook wordt doorgegeven foo op de command line argument. Dus het gaat om argv1 nemen. Argv1 bar wordt hier genoemd. Dus het gaat om de bar te nemen en het gaat om het te kopiëren naar c. Publiek: OK. MARIA ZLATKOVA: En het gaat om copy-- het derde argument verwijst net om hoeveel het gaat om kopiëren naar c. Publiek: Ah. Dus deze is het kopiëren al het dan. MARIA ZLATKOVA: Ja, dat het kopiëren alles. Yep. Ten eerste, zorgen we ervoor dat de bar is niet null is omdat het een pointer. Dan krijgen we de string lengte van de bar. Wij zorgen ervoor dat het minder dan of gelijk aan 12. En dan, omdat we hebben zorgde ervoor dat, kunnen we eigenlijk memcpy en zorg ervoor dat dat OK. Nog vragen? Grote. Ik heb twee waar of onwaar vragen. Kan iemand mij vertellen meteen als deze waar of onwaar? Ja, het is vals. Precies. Beiden zijn vals. Dus met een enkel wachtwoord is nooit echt een goed idee want als iemand weet je wachtwoord, kunnen ze gewoon toegang tot al uw andere accounts. En dan iconen niets doen om de veiligheid te garanderen. We moeten kijken meestal naar HTTPS in plaats van HTTP en de URL. En een aantal andere soorten aanvallen die we hebben gezegd, dat David in heeft genoemd lezing, SQL injectie aanvallen. We hebben al gezien dat als we de don't-- CS50-query-functie zorgt ervoor dat SQL injectie aanvallen kunnen optreden. Maar als we niet met behulp van CS50, citaat, unquote "in vraag," we zouden moeten ervoor zorgen dat de input van de gebruiker is niet eigenlijk een aantal SQL query die alle zullen leiden onze tafels te laten vallen of iets ergs aan gebeuren met onze database. Session hijacking is een ander type aanval dat gebeurt bij sommige slecht persoon gebruikt sessie enkele slachtoffer ID voor toegang tot de aanmeldingsgegevens. Dus een heel triviaal voorbeeld daarvan is alsof we een openbare computer, dan is het slecht persoon logt in en dan ze hebben cookies die worden opgeslagen. En koekjes veranderen niet voor de sessie. Dan hebben we het slachtoffer gaan en dan inloggen op de website. De cookies niet veranderen voor een bepaalde sessie. En dan het slachtoffer logt in de website en dan laat. En dan is de persoon die teruggaat kan dan nog steeds gebruik maken van hun sessie-ID om hun informatie. Dus dat is een voorbeeld van hoe dat kon gebeuren. En dan zou ik niet te veel zorgen over specifieke code of iets zo dat dit kan veroorzaken maar met een soort van idee wat variabelen betrokken bij dit zijn. En dan het manipuleren header data is een ander type aanval dat heeft David heeft gesproken over. En het enkel verwezen naar wat er kan gebeuren wanneer de reactie, de HTTP reactie binnen van onze header is niet goed opgeschoond. En een van de fields-- bijvoorbeeld als iemand overschrijft een van de header waarden iets meer dan bevat wat ze moeten contain-- en eigenlijk bevatten, bijvoorbeeld een 200 OK-status code, dan zijn ze kan mogelijk schadelijke doen dingen als ze niet verondersteld. Maar ik zou niet te maken veel over de specifieke code dat dit kan veroorzaken gewoon soort van begrip hoog niveau dat soort dingen. Ik denk dat dit alles dat we moeten dekken. Geweldig. Iedereen die vragen heeft over elke van de dingen die we gedekt? Ja. Publiek: Dus een soort van meer logistieke vraag. Wordt de inhoud vooral gericht over dingen na quiz 1? MARIA ZLATKOVA: So vraag is, is de inhoud vooral gericht op de dingen na quiz 1? Zodat de focus op na quiz 1, uitgezonderd die we nodig hebben om zich te concentreren op de dingen in pset5 en een groot deel van de datastructuren we bedekt. En we kunnen niet zeggen dat we kan alles negeren voordat omdat het bouwt daarop ook. Dus richten op dat, plus pset5 materiaal net zoals gelinkte lijsten, stapels, wachtrijen, en alles dat Hannah ging. HANNAH BLUMBERG: Recht. Ja, gingen we over alle C spullen bij het begin zeer snel. Maar zorg ervoor dat dat aan. Ga terug en kijk naar de quiz 0 beoordeling. Een paar logistieke notities, net terwijl we uw aandacht. We gaan kantooruren zowel op maandag en dinsdagavond. Ze gaan in MD 119. Dit is allemaal op de website, zodat als je het niet horen, geen zorgen. MARIA ZLATKOVA: 8:30 tot 11:00 uur. HANNAH BLUMBERG: Ja, 8:30-11:00. We zullen er zijn. We zullen er zijn om vragen te beantwoorden. Het is vrij chill en leuk. Jullie kunnen vragen stellen dat u op quiz 1. En quiz 1 is op Woensdag, zo goed geluk. Als u vragen heeft, misschien komen praten ons hier één-op-één. Koel. Dank je wel. MARIA ZLATKOVA: Bedankt, jongens. Publiek: Yay. [APPLAUS]