HANNAH Blumberg: Hi almal. Ons gaan om te begin net 'n paar minute vroeg want ons het 'n hele klomp materiaal om deur te kom. Ek is Hannah. Ek is 'n TF. Maria gaan word by ons net 'n paar minute. Sy leer artikel reg voor. Ek leer artikel reg na, so ons gaan om dit aan die uur en 'n half te hou. So as jy hier sien het, ons het nogal 'n paar onderwerpe wat ons nodig het om deur te kom, so ons sal gaan 'n bietjie vinnig. Maar as by enige punt wat ons iets te sê te vinnig of jy nie verstaan ​​nie, voel vry om te onderbreek met vrae. Ons wil in staat wees om dit 'n maak hersien sessie as nuttig vir almal van julle as moontlik. Awesome. So laat spring reg in met sommige onderwerpe wat ons eintlik baie, baie kortliks gedek vir die quiz 0 in die quiz 0 review sessie. So begin met geskakelde lyste. So maak net seker jy het 'n paar basiese kennis oor geskakelde lyste en is gemaklik doen sommige van die basiese bewerkings. So net om te hersien, gekoppel lyste is beter as skikkings omdat hulle kan dinamiese groei. So ons het dit groot voordeel. Ons het gesien dat hulle gebruik in hash tabelle wanneer ons weet nie presies hoeveel dinge wat ons gaan om te wil om in te voeg in ons data struktuur. Ongelukkig het ons stukke die geskakelde lys regoor geheue, so ons sal nie noodwendig in staat wees om konstante toegang te doen om enige element in die geskakelde lys. Ten einde 'n te vind bepaalde element, ons moet Itereer al die manier van die begin af. So in gedagte hou dat die meeste van die basiese operasies is omega van 1. So insetsel is net gaan om te neem 1. Verwyder gaan neem N aangesien ons het om te gaan vind dit uit die lys. En soek kan neem, op die ergste, n. Ons kan nie iets te doen soos binêre soek op 'n geskakelde lys aangesien ons kan nie net lukraak spring na die middel. Koel. Awesome. 'N bietjie van stapels. Dit, weer, het op quiz 0, sodat jy moet wees super gemaklik met dit. Maar vir stapels, ons vra julle om 'n stapel van bak onthou. En dit gaan eerste in te wees, laaste uit. Sodat ons stapel dinge in die stapel, en dan As ons probeer om iets te neem off-- wat ons noem knal af die stack-- ons kom uit die top. En as ons iets wil sit in die stapel, noem ons dit stoot. So dit is altyd gaan wees grootword van die onderkant soos 'n stapel van bak. Awesome. Ons het gesien stapels geïmplementeer met beide gekoppel lyste en skikkings. As jy die uitvoering van met skikkings, jy wil om seker te maak om tred te hou van beide die grootte en die kapasiteit. So grootte gaan die huidige wees aantal van die dinge in jou stapel, terwyl kapasiteit is die totale aantal van die dinge wat jy kan stoor in jou stapel. Koel. Baie soortgelyke, ons het toue. In hierdie geval, in plaas van dink oor 'n stapel van bak, dink aan 'n lyn. Dit gaan wees eerste in, eerste uit. So as jy voering vir iets by die winkel, ons hoop dat die persoon in die eerste lyn gaan eerste gehelp word. In plaas van sê druk en pop soos ons doen vir stapel, ons het net enqueue en dequeue sê. En weer, as jy die implementering van hierdie met 'n skikking, ons nodig het om tred te hou nie net die grootte en kapasiteit, maar ook die hoof, wat gaan na die voorkant van ons ry wees. Koel. Enige vrae oor enige van daardie? Awesome. Beweeg reg langs. OK, hash tabelle. Hier is waar dit begin kry regtig interessant. So 'n gemors tafel is een implementering van 'n assosiatiewe skikking. So basies wat gebeur is ons al hierdie insette, en ons gee dit aan 'n gemors funksie wat sê OK, dit is waar in die hash tafel dit hoort. So die eenvoudigste hash funksie wat ons gesien het is net sê, OK, veronderstel ons wil om te sit snare in ons hash tafel. En 'n baie eenvoudige idee kan wees om te sê, OK, laat ons net sorteer deur die eerste letter van die woord. So jy hier kan sien, ons neem piesang, ons sit dit deur 'n hash funksie, en dit sê, hey, wat moet gaan by indeks 1. So kan ons in wese dink aan 'n hash tabel as 'n klomp van verskillende emmers. En elkeen van daardie emmers gaan aan die hoof van 'n geskakelde lys te hou. En in dié verband lys is waar ons kan eintlik sit verskillende stukke van die data. So duik 'n bietjie meer in 'n hash funksie, hier is die voorbeeld het ek net beskryf waar ons net sê, OK, neem die eerste letter van die woord en ons is gaan om dit te sorteer in die emmers. So vermoedelik, sal daar wees 26 emmers, een vir elke letter van die alfabet. Hoekom is dit nie 'n groot hash funksie? Wat maak hierdie nie-ideale? Ja. GEHOOR: Jy gaan om botsings te hê. HANNAH Blumberg: Ja, presies. Jy gaan om botsings te hê. So dit is een ding. En ons sal praat oor hoe ons kan los botsings in net 'n sekonde. Nog 'n probleem met hierdie veral hash funksie is dat ons verskillende emmers gaan wees van die mooi drasties verskillende groottes. Ons weet dat daar is 'n hele klomp meer woorde wat begin met 'n as X, so ons gaan baie het ongebalanseerde emmers in ons hash tafel. Koel. So ja, laat ons terug te kry om die punt van die botsings. Wat doen ons as daar 'n botsing? Ons het 'n paar verskillende opsies. So een, so dink ons ​​probeer Berry het in ons hash tafel. En ons sien, o, ons wil om dit in indeks 1 sit, maar piesang woon reeds daar. Wat gaan ons doen? Ons het twee hoof opsies. Nommer een is wat ons kan sê, OK, daar is geen ruimte in indeks 1, maar laat ons net aanhou kyk deur totdat ons kan nog oop kol vind. So ons sal sê, OK, laat dit in plek 3. Dit is een opsie. Dit is genoem lineêre indringende. En 'n tweede opsie sê, OK, goed, laat ons net elkeen van hierdie emmers wees hoofde van geskakelde lyste. En dit is OK as daar meer as een ding in 'n emmer. Ons is net gaan om te voeg dit op die voorkant. So hier kan jy sien, OK, wanneer ons plaas berry, ons net het piesang, soort stoot dit oor 'n bietjie en gooi 'n bessie daar. En dit is ook heeltemal fyn. Dit is die sogenaamde aparte aaneenskakeling. Jy kan dink van hierdie as soort van soos 'n verskeidenheid van koppe geskakelde lyste. Enige vrae oor hash tafels, hash funksies? Awesome. Bome en drieë gedruk. So 'n boom is 'n soort van die data struktuur waarin daar is 'n soort van hiërargie of 'n soort van die posisie om jou verskillende voorwerpe. En dit sal super geword duidelik wanneer ons sien 'n voorbeeld. En ons het drieë, saam met hash tabelle, in pset5-- wat, weer, heeltemal fair game vir hierdie quiz-- as 'n ander data strukture wat ons kan stoor verskillende dinge. In die geval van 'n woordeboek, Ons gestoor 'n klomp van woorde. So laat ons neem 'n blik op sommige bome. So, dit is 'n voorbeeld van 'n boom. Dit het 'n soort struktuur, dat hiërargiese struktuur, waar jy dit kan sien hierdie 1 node by die top het 'n soort van rang bokant 2 en 3, wat bo 4, 5 en 6 en 7 is, wat is bo 8 en 9. So dit is al wat ons bedoel met 'n boom, so jy kan net soort van die foto dit in jou kop. Nou, ons het 'n paar van meer gespesialiseerde bome. So 'n voorbeeld is 'n binêre boom. En 'n binêre boom is, weer, net gaan wees 'n data struktuur met 'n soort van hiërargie, maar elkeen van die nodes kan hoogstens twee kinders. Dit is waar die woord binêre vandaan kom. So, dit is 'n voorbeeld van 'n binêre boom. So dit is 'n kleiner kategorie van bome. Nou laat kry, selfs meer spesifiek en praat oor binêre trees-- binêre soek bome, eerder. So hier is die idee is nie net elke node het by die meeste twee kinders, maar al die kinders na die links gaan kleiner wees en al die kinders na die reg gaan groter wees. So in kennis net ons binêre boom, daar is geen verhouding tussen die getalle. Maar in ons binêre soek boom sien ons, OK, hier is 44. En elke getal aan die linkerkant van 44 is kleiner en alles aan die reg is groter. En dat hou by elke vlak van die boom. So hier is dit kleiner as 22 en dit is groter as 22. En dit is binêre soek boom. Hoekom dink ons ​​dit genoem 'n binêre soekboom? Wat algoritme beteken dit herinner u van? GEHOOR: Binary search. HANNAH Blumberg: Binary search. Want as jy soek vir 'n bepaalde aantal in hierdie boom, op elke punt, kan jy net klop af die helfte van die boom, wat is groot. En so wat gaan ons iets om te gee wat lyk 'n baie soos binêre soek. Enige vrae? Alle reg, cool. Alle reg, probeer. Gunsteling almal se. So dit is die voorbeeld wat ons het 'n klomp in die klas gesien. En weer, dit is net nog 'n manier wat ons data kan stoor. In die geval van 'n woordeboek, weer, dit is net gaan om te snare wees. So laat ons sien wat dit werklik lyk op 'n effens laer vlak. So laat ons 'n blik by een node in 'n Trie. En ons sien, OK, daar gaan 'n Boolese en 'n knoop wees, 'n verwysing na 'n knoop. En ons sien dat die Boole genoem is_word. So in wese, dit is gaan ooreenstem om hierdie klein driehoeke wat sê, as jy hier gekry het, jy 'n volledige woord gevind het. Ons weet dat "siene" oor hier is 'n volledige woord terwyl net T-U-R is nie 'n woord omdat ons nie sien dat min delta. En dat daar min delta, weer, ooreenstem met die is_word, hierdie Boole is_word. En dan het ons 'n verskeidenheid van kinders. So op elke vlak, kan jy het 'n besondere knoop, en dat node punte om 'n verskeidenheid van die hele alfabet. Sodat jy kan sien, weer, in hierdie picture-- Ek is gaan hou spring terug en forth-- dat opgestel by die top het 'n klomp van die verskillende nodes kom af van dit. Dit het 26 of 27 as jy wil om 'n ekstra karakter te sluit. En dit gee ons 'n manier om ons data te stoor op 'n manier wat jy kan kyk op dat jy kan kyk op super vinnig. Wat is die tyd vir 'n lookup Trie? GEHOOR: [onhoorbaar]. HANNAH Blumberg: Ja. In teorie, dit is konstante tyd. Dit gaan slegs om die grootte van wees die woord wat jy wil om op te kyk. Selfs as ons voeg 'n zillion meer woorde om ons Trie, dit gaan nie om ons te neem langer te bepaal As 'n gegewe woord in die Trie. So dit is baie mooi. GEHOOR: Het jy net inisialiseer dat array? Jy gemis het 'n punt of twee. Kan jy net praat oor wat vir 'n tweede? HANNAH Blumberg: Sure, absoluut. Goeie vraag. Die vraag was, het ons het 'n verskeidenheid wat gaan node ster het as in teenstelling met net node, reg? Koel. So hier wat ons sê is ons verskeidenheid is net gaan verwysings na ander skikkings wees. So dit is essentially-- dit soort van voel soos 'n geskakelde lys op hierdie manier waar elkeen van hierdie kinders net wys na die volgende knoop. En die manier waarop ons eintlik bepaal, hey, OK, ons het herhaal deur 'n hele woord is die woord in die woordeboek, Ons kyk net hierdie is_word. N groot vraag. Ja. GEHOOR: OK. So wat was die runtime vir die Trie? HANNAH Blumberg: Natuurlik. So die runtime vir 'n Trie vir lookup gaan konstante tyd. So dit is net gaan die wees aantal letters in die woord. Dit is nie afhanklik van die grootte van die woordeboek of die grootte van die data-struktuur. So hier is 'n effens makliker voorbeeld. In hierdie geval, kan jy dit sien die woord kolf is in die woordeboek en jy het zoom, maar jy nie iets soos dieretuin nie. Hoe sou ons dieretuin? Hoe weet ons dieretuin toe te voeg tot ons woordeboek, ons Trie? Ja. GEHOOR: Maak is_word waar vir die [onhoorbaar]. HANNAH Blumberg: Goed. So ons wil sê Z-O-O, en dan wil ons wil om te kyk af dat box as well. Groot. Kom ons vergelyk baie kortliks probeer versus hash tabelle. Drieë is werklik 'n groot want, soos ons sê, hulle verskaf konstante-time lookup. Maar die groot nadeel is hulle is humongous. Jy kan die sin te kry, selfs deur te kyk na dit, dat dit gaan neem 'n groot hoeveelheid van die geheue. So hulle gaan veel om te wees groter as hash tabelle, maar hulle gaan om te gee ons baie vinniger lookup tye. So dit is soort van jou nadeel, wat jy omgee, of dit nou spoed of geheue. Enige vrae oor enige van daardie, al die C data strukture. Mooi. OK. Ons gaan aan te beweeg na 'n bietjie bietjie van web ontwikkeling met Maria. MARIA ZLATKOVA: Lovely. OK. HANNAH Blumberg: Jy kan my laptop gebruik. MARIA ZLATKOVA: Nice. OK, cool. Soos ons nou beweeg na web ontwikkeling, het ons gepraat 'n bietjie oor die verandering van regte van lêers en gidse sodat hulle toeganklik wees aan ander gebruikers, na die wêreld, en sodat ons kan sien hoe basies kan ons hulle oor te dra wanneer ons dinge soos webwerwe te ontwikkel wat ons het meestal te doen. So het ons die chmod opdrag, wat is verandering af, basies. Dit is 'n Linux command en dit verander regte toegang lêer stelsel voorwerpe. En 'n lêer stelsel voorwerp is net 'n gids, 'n lêer, enigiets wat jy kan verander die regte van. So na die permissies sien, ons tik die opdrag ls, lys, -l. En toe ons tik dat ons gewoonlik sien 'n paar regte wat lyk soort van soos hierdie in die voorkant van 'n gids naam. So d verwys na gids. En dan het ons drie drieklanke wat basies verwys na die regte van óf 'n gebruiker, 'n groep, of die wêreld. Die tipes regte wat ons kan het vir die drie groepe mense is óf r vir lees, w vir skryf, en x te voer. En ons kan dié vir het die groep en die wêreld as well. Die moeilike ding is dat soms wanneer ons tik die chmod opdrag, Ons sou 'n paar nommer intik wat bestaan ​​uit drie stukkies. So kan ons doen soos 777 en wat basies verwys na die toegevoegde waarde van elk van hierdie drieklanke omdat r sou verwys na 4, w sou verwys na 2 en x sal verwys na 1, sodat wanneer opgetel, elkeen van die getalle sou tot 'n kumulatiewe aantal kom om 'n kumulatiewe waarde tussen 0 en 7. Sodat ons kan ook '0 want geen regte nie. En dit sou basies gee ons die regte vir óf die gebruiker, die groep, of die wêreld. Enige vrae oor hierdie so ver? GEHOOR: Jy het gesê gelees was 4? MARIA ZLATKOVA: Ja. GEHOOR: [onhoorbaar]. HANNAH Blumberg: Yup. GEHOOR: En dan deur die toevoeging van al die ander sou jou nommer aan te dui. MARIA ZLATKOVA: Ja. Ja. Dit is 'n groot vrae. Mooi. Volgende, ons gespring in HTML en 'n bietjie meer oor web-ontwikkeling. So HTML beteken net HyperText Markup Language. En dit is die opmaak taal wat 'n standaard dat dit gebruik word om webblaaie te skep. Dit is 'n opmaak taal genoem want dit is nie eintlik saamgestel. Dit sê nie hoe sommige kode moet uitgevoer word of iets soos dit. Dit afbakening regverdige en beskryf hoe 'n web bladsy moet opgestel met elkeen van die elemente en hoe hulle moet kyk na die gebruiker. Sommige van die HTML tags dat ons gegaan oor die volgende. Al ons HTML dokumente begin met die DOCTYPE HTML. Dan het ons altyd die html tag. Ons het 'n kop en 'n liggaam. En dit is belangrik dat HTML het hierdie soort van geneste strukture want dit is baie duidelik. En dan word dit baie duidelik wanneer ons nodig om naby tags oop te maak en eintlik. En ons moet altyd te sluit tags dat ons oopgemaak het. En hier het ons 'n paar van die tipes van die dinge wat voorlê wat ons wil hê. So het ons byvoorbeeld die titel van CS50. En dan eintlik ons kan 'n stylblad skakel wat bepaal hoe ons die styl van ons webwerf. Dit is CSS. Ons gaan om te gaan oor dit in die volgende paar skyfies as well. In die liggaam, het ons sommige klasse en ID's. En as 'n herinnering, weer, ID's is uniek en klasse kan toegeskryf word aan verskeie items. En wat net beteken dat kan ons klasse en ID's gebruik binne ander structures-- so, want Byvoorbeeld, binne CSS lêers of styl sheets-- om te verwys na spesifieke elemente en basies sê dat ons wil styl of ontwerp 'n element in sommige besondere manier. En ons verwys na hulle deur hulle ID's en klasse. En ons kan ook verwys na verskillende dinge deur tags so goed, maar ID's en klasse net 'n paar te gee ons veelsydigheid en wat spesifiek ons wil om te verwys na. Dus net 'n voorbeeld. Ons kan, weer, binne 'n CSS-lêer waar ons wil 'n paar te definieer style-- so kleure, fonts, en dinge soos that-- ons kan definieer die styl vir 'n liggaam. Sodat dit sou definieer vir die hele liggaam tag. Maar dan kan ons ook te definieer 'n styl vir 'n #title. En weer, die hashtag verwys na ons ID en die dot verwys na ons klas. En dan vir die info, ons kan ook 'n paar eienskappe. En wanneer ons terug te gaan, het ons ons klas genoem inligting en ons ID titel. En ons kan sien dat ons verwys aan hulle deur #title en info. GEHOOR: Sou jy sê hashtag [? my neem? ?] MARIA ZLATKOVA: Jammer? GEHOOR: Sou jy sê hashtag [? my neem? ?] MARIA ZLATKOVA: hashtag beteken ID, so #title verwys na wat ookal elemente hierdie ID genoem titel. En dan is die dot verwys na 'n klas. So info verwys na hierdie element want dit het die klas inligting. Yup. GEHOOR: Hoekom dink jy onderskei hulle in die HTML? Waarom sê jy sekere dinge ID's en sekere dinge klas? MARIA ZLATKOVA: Dit is net tot you-- HANNAH Blumberg: Herhaal die vraag. MARIA ZLATKOVA: Ag, jammer. Hoekom het ons sekere elemente onderskei as ID's en ander elemente as klasse? Dit is net omdat dit regtig dikwels 'n ontwerp keuse. Dit gee jou 'n baie veelsydigheid in om staat om te sê ek wil hê dat hierdie spesifieke item om hierdie ID te hê, want hulle wil om 'n baie van die dinge te doen met dit, en ek het net wil 'n styl te definieer, sekere styl of kleur wat ookal vir daardie item. En die manier om dit te doen is net gee dit 'n ID. En dan as ek wil hê 'n paar van die verskillende items gesien dat, in plaas van gaan en die opstel van their-- in plaas van om dit te doen deur tag omdat die tag sou stel die sel vir die hele tag vir elke keer dat tag gebruik word, jy kan 'n klas stel om verskeie items. En dan net toegang daardie klas en sê Ek wil hierdie klas styl wat manier. En weer, die klas kan wees verskeie verskillende items en die ID het om uniek te wees. Groot vrae. Enige ander vrae? OK, awesome. Weereens, dit is hoe hierdie keurders is waarna verwys word in CSS, met hashtag, met dot, of sonder om iets vir toeken die styl van 'n paar tag, soos die liggaam. En hier het ons die algemene sintaksis van hoe dit gedoen word. Om 'n paar beste herhaal praktyke vir HTML en CSS, ons moet, weer, sluit alle die HTML tags dat ons oop. En wat ons aanbeveel te doen vir jou finale projekte, sowel as vir die CS50 Finansies, is om te maak seker dat al jou HTML bekragtig. En dit is gedoen met die W3 Validator. En dan wat ons gedoen het en wat ons beveel doen skei styl, so CSS van opmaak HTML. So enigiets wat verband hou met hoe jou bladsy gaan kyk visueel en hoe dit gaan verander moet gaan in 'n CSS-dokument. En dan jou opmaak sê hoe dinge in verhouding tot mekaar is HTML, en dat moet binne te gaan jou HTML dokumente. Enige vrae? Mhm. GEHOOR: Wat presies gaan met die page validation wanneer ons validering van die HTML wat [onhoorbaar] geskep? MARIA ZLATKOVA: So what-- dink jy. So wat presies gaan met page validation en waarom moet ons dit doen? Basies, moet ons dit doen want baie van die tye, die leser, As jy nie 'n tag sluit of iets soos dit, die leser gaan nog lewer 'n bladsy en dalk nog werk, maar dit is die beste praktyk om seker te maak dat die jy, weer, gesluit al jou tags, dat al jou elemente die manier waarop dit behoort te wees, en basies dat dit deur die konvensies wat vooraf. Dit is, weer, net 'n ding wat jy moet leer om te doen, in teenstelling met wat sloppier kode en dinge soos dat. Ja. Jammer. Ek het gedink jy is die verhoging van jou hand. GEHOOR: Nee, ek was net [onhoorbaar]. MARIA ZLATKOVA: OK. GEHOOR: Dankie. MARIA ZLATKOVA: Natuurlik, baie dankie. So weer, gaan op in hoe inligting oorgedra en kommunikasie-modelle om inligting oor te dra. TCP / IP. TCP beteken net Transmissie Control Protocol en IP verwys na Internet Protocol. En dat net verwys na die manier waarop data afgelewer word. As ons 'n paar data wat moet afgelewer word by so you-- jy 'n versoek vir 'n sekere bediener te maak. Byvoorbeeld, wanneer ons probeer om toegang tot cs50.net, ons het 'n versoek aan die CS50 bediener en ons sien dat ons wil te kry hierdie soort van inligting. En dan is gebaseer op die protokol hoe hierdie inligting word gelewer, die bediener gee inligting terug na ons, die kliënt. En dan is ons in staat om te sien die inligting vir die bladsy en dan is dit gebruik. So dan Hypertext Transfer Protocol is net nog 'n protokol of stel konvensies wat bepaal hoe die webblaaier en die web bediener moet kommunikeer. En om dit alles saam, HTTP, weer, net bepaal hoe hierdie hiperteks gedefinieer deur die HTML dat ons het gewerk nie, hoe dit aan jou gelewer moet word en hoe die data wat gelewer word aan jou kry vir jou. En dit is hoekom, as jy ouens onthou uit 'n klas, het ons 'n baie versoeke en ons het 'n baie sintaksis vir hierdie versoeke dat ons gaan om te gaan oor nou. So weer, wanneer ons stuur 'n versoek om 'n bediener, ons het 'n paar van die dinge wat definieer. Dus moet ons die tipe vind versoek dat ons die opstel van. En weer, ons het, byvoorbeeld, GET is een tipe metode dat ons in ons versoek. En dan is HTTP / 1.1 net die protokol wat ons gebruik tans. Die meeste van die tyd, wat gaan die protokol wat ons gebruik. So as jy 'n vraag soos dit op jou quiz. Dit is die konvensies dat ons so ver. Agteroorskuinsstreep verwys na watter soort van die dinge wat ons vra. Dan, ons gasheer is, byvoorbeeld, in hierdie geval, ons probeer om te gaan na google.com. So, dit is die waarde vir 'n leër. Dit is 'n tipe versoek wat kan gestuur word. En dan 'n tipe reaksie wat kan gestuur word, weer, op grond van hierdie protokol, weer, HTTP / 1.1. So wat is die HTTP weergawe weer. 200 OK is net die status kode. En dat OK is net 'n frase gebaseer op die status kode. En dan is die Content-Type verwys na die tipe wat aan u teruggestuur wat vir daardie webblad wat jy ontvang en dat jou browser kan daarna te lewer. En dit is die teks / html. GEHOOR: Wat beteken 1,1 beteken? MARIA ZLATKOVA: Dit is net die weergawe of-- oh, wat beteken 1,1 beteken? Dit is net die weergawe, die HTTP weergawe van 'n protokol wat ons gebruik. N groot vraag. Ander vrae? GEHOOR: Kan jy som Content-Type ware vinnig? MARIA ZLATKOVA: Sodat is wat die bediener. die tipe information-- wat inhoud type was die vrae. So dit was die tipe inligting wat jy terug te kry van die bediener, tipe data wat die leser kan dan lewer wat jy gebruik. GEHOOR: Is dit wat hierdie protokol is wat jy vertel om te doen? MARIA ZLATKOVA: Jammer? GEHOOR: Is dit wat die protokol sê? MARIA ZLATKOVA: Die protocol-- GEHOOR: --what die Content-Type is of what-- MARIA ZLATKOVA: Die protokol is gebaseer on-- wat is die protokol wat jy vertel? Dit is net die manier dat hierdie inligting is aan u gelewer gebaseer oor watter soort protokol is hierdie inligting het afgelewer terug na jou. Maak dit sin soort? HANNAH Blumberg: Jy kan dink protokol as a-- Ek dink Professor Malan het dit beskryf in die klas as soort van soos a-- dit is soos die ekwivalent van menslike handshaking. Sê, soos, hey, ek is 'n versoek en ek weet hoe om HTTP van weergawe 1.1 hanteer. En dan is die bediener sê, oh, OK, I-- en albei bestaan ​​nie. Ek weet ook hoe om met HTTP / 1.1. En ek gaan om te gee jy 'n paar inhoud back. In hierdie geval, dit gaan te wees van die tipe teks / html. So dit is soort van net 'n manier van hulle vir communicating-- MARIA ZLATKOVA: Dis net bevestig dat jy beide deur dieselfde protokol en dat beide die kliënt en die server-- so die leser en die server-- soort van weet wat jy praat en het die konvensie vir die verbygaan in die data. GEHOOR: So het die Content-Type part-- die Content-Type teks / html-- dis 'n aparte deel van die dieselfde boodskap? Of is dit deel van kom ons sê, 200? Maak 200 vertel hulle dat of is-- MARIA ZLATKOVA: 200 sê dit alles het OK. En dan die inhoud tipe is soort van 'n aparte deel van die dieselfde boodskap, en sê die ding wat ek Returned het hierdie tipe van teks / html. Dit is net om meer inligting. Iets om by te voeg? OK. Enige ander vrae oor hierdie? Awesome. So 'n paar ander HTTP status wat ons benewens kon kry om 200 OK, dié wat ons dalk gesien het moontlik 'n baie is 403 en 404. So 404, as jy probeer om toegang iets wat nie bestaan ​​nie. So byvoorbeeld, in jou CS50 Finansies psets, as jy het die lewering van quote.html en julle het die lêer nie, maar in plaas daarvan het jy quote.php dat sou lei tot 'n 404 nie gevind omdat die lêer kan nie bestaan ​​nie. Vir 'n 403 verbode, wat verwys na die regte. So as sommige lêer is nie leesbaar deur die wêreld, kan jy 'n 403 kry teruggekeer. N paar ander wat jy dalk get-- 301, permanent verskuif; 302, gevind; 304, Gewysig; 400, Bad Versoek; en dan Interne server fout vir 500 en 503, Diens nie beskikbaar nie. Ja. GEHOOR: Sal ons verwag om memoriseer al die status? MARIA ZLATKOVA: ek wil hê hulle op jou cheat sheet. [Gelag] GEHOOR: Is ons verwag om weet wat snellers elkeen? MARIA ZLATKOVA: Is hulle? HANNAH Blumberg: Vir dié wat ons het hardloop into-- so die vraag was-- MARIA ZLATKOVA: Is hulle verwag om weet wat elkeen van hierdie status kodes kan veroorsaak word deur? So vir die mense wat ons gebruik het en hy hardloop na, sou ek sê, ja. Dus het ons beslis gesien 200 OK en lesings in psets. Ons het gesien 403, 404. Vir ander kinders? HANNAH Blumberg: Ek sou sê 500 lyk fair game. MARIA ZLATKOVA: 500, ja. HANNAH Blumberg: Ja. Net 'n algemene gevoel van wat hulle veroorsaak. En ook net deur hierdie name, jy kan soort van soos maak 'n opgevoede raaiskoot as na wat eintlik veroorsaak het. Byvoorbeeld, beweeg permanent, waarskynlik die lêer is permanent verskuif. GEHOOR: Maar op 'n vorige eksamen, daar was 'n so hoe kan jy van ons verwag om te antwoord nie? HANNAH Blumberg: Dit was nul punte werd. Die vraag op 418 op die teepot is tegnies 'n HTTP status, maar dit was nul punte werd. Natuurlik, jy is nie verwag om hulle te leer ken. GEHOOR: Is dit 'n regte een? HANNAH Blumberg: Dit is 'n ware een, maar dit beteken niks. Dit is net 'n grap. Internet mense is snaaks. MARIA ZLATKOVA: Groot vrae, ouens. Enige ander vrae? GEHOOR: Wat is fout interne bediener? MARIA ZLATKOVA: Interne bediener fout net beteken dat jy gewees nie in staat om te kommunikeer met die bediener vir een of ander rede. So dit is nie noodwendig iets wat te doen het met die kliënt of iets soos dit. Ek weet nie van enige spesifieke voorbeeld wat ons het gegaan oor om te verduidelik, maar ja. HANNAH Blumberg: Natuurlik. So byvoorbeeld, soos laat sê jy is besig om op mashup en 'n Google-bediener afgegaan vir 'n paar Daarom, 'n kragonderbreking, kom ons sê. Dit sou 'n interne bediener fout of 'n soort of-- soos jy sou nie 'n antwoord terug te kry. MARIA ZLATKOVA: Ja. Dis net wanneer jy nie in staat om te kommunikeer met die bediener vir een of ander rede, omdat dit gaan af of 'n ander rede. So spring in PHP. PHP, in teenstelling met HTML, is 'n programmeertaal. En ons begin om dit te gebruik, want dit is baie nuttig vir die web-ontwikkeling. Ons eerste gebruik dit in CS50 Finansies. En dit help basies bring ons saam hierdie opmaak, die ontwerp, en hoe ons eintlik inligting gebruik om dinge te vertoon op 'n webblad. So PHP self beteken PHP Hypertext Preprocessor, so dit is 'n rekursiewe backnorym deur self. En etikette opening vir PHP ons links en regs-pyltjies met die vraagtekens en PHP. So ons het reeds 'n klomp van dit gesien het. Nou, ons is maar net gaan om te gaan oor sommige van die basiese dinge oor dit. So met PHP, die veranderlike name begin met dollar-teken. Ons het nie spesifiseer, weer, 'n veranderlike tik nie. Net soos ons gedoen het met C, Ons het nie nodig om dit te doen. Ons kan nie 'n klomp van die verskillende doen dinge met veranderlikes. Ons kan hulle saam deur concatenating hulle met die dot-notasie, wat ons kon nie weer doen in C. Weereens, ons het 'n bietjie meer veelsydigheid met PHP in terme van veranderlikes. Weereens, ons het nie 'n hooffunksie. En PHP geïnterpreteer in teenstelling met saamgestel, Dus net hoe ons het vir C lêers, ons het nie om dit te doen vir PHP. Maar eerder die manier waarop die taal word gelei deur die self, is dit geïnterpreteer. En dan losweg getik net beteken dat ons nie aan 'n veranderlike spesifiseer tipe en die veranderlike tipes verstaan ​​tydens looptyd. GEHOOR: Maar wat het jy bedoel met dot aaneenskakellling? MARIA ZLATKOVA: Natuurlik. Wanneer ons wil dinge saam op te sit so as ons het 'n paar veranderlike wat het die waarde van 3 en 'n ander het ons veranderlike wat die waarde van string gehad het, ons kon die veranderlikes saam deur 'n dot in tussen hulle en concatenating hulle. Of ons kan 'n te skep veranderlike genoem naam en sit dit saam met concatenating twee stringe. So as ons het 'n string in dubbel aanhalings en ons het 'n dot nadat dit, en dan het ons nog 'n string, wat sou 'n string heeltemal te skep. GEHOOR: OK. MARIA Letland: Was dit duidelik? GEHOOR: Ja. MARIA ZLATKOVA: OK. Ja. GEHOOR: Wanneer jy sê eerder as geïnterpreteer saamgestel, praat jy jy nie moet so spesifiek wanneer om te wees dit kom PHP versus C? MARIA ZLATKOVA: Wanneer ons sê geïnterpreteer teenoor saamgestel, wat bedoel ons? So dit beteken dat ons nie nodig uitvoerbare lêers PHP hardloop. Dit beteken dat dit loop soos dit gaan. Maak dit sin? 'N bietjie meer. HANNAH Blumberg: So jy kan dink van 'n tolk as 'n ander program wat verantwoordelik is vir lyn gaan deur lyn deur PHP en eintlik die uitvoering van dit, in teenstelling die samestelling van dit alles neer te binêre. Dit maak nie eintlik iets beteken oor hoe spesifieke ons nodig het om te wees. Ons moet nog steeds om presies te wees, en dit nie doen nie vergeet om jou kommapunt, en maak seker jy jou dollar teken en dinge soos dat. Goeie vraag. MARIA ZLATKOVA: Ja. So reël vir reël, soos teenstelling met met C lêers, ons moet die hele finale maak voordat ons werklik kan hardloop nie. Dit is die grootste verskil. Maar weereens, kan ons nie regtig minder spesifiek. So skikkings in PHP verteenwoordig eintlik 'n geordende kaart. So skikkings assosieer waardes sleutels. Die twee maniere om 'n verklaar skikking, gebaseer op die sintaksis, ons kan meer eksplisiete wees in sê ons het 'n verskeidenheid en ons het hierdie key1 dat kaarte te hierdie waarde1, key2 dat value2 kaarte. Of ons kan net 'n skikking dat die waardes self bevat en dan die sleutels is verstaan ​​op 'n manier. Enige vrae oor hierdie? GEHOOR: Wat sou die sleutels in die tweede voorbeeld? 0, 1, 2, 3? MARIA ZLATKOVA: Byvoorbeeld, dit is net die sleutels in hierdie nie noodwendig maak 'n verskil. Hulle definieer hoe jy kan Gebruik die waardes binnekant van dit. So as ons het 'n foreach lus in PHP wat sou ons toelaat om te gaan deur al die waardes, ons kan gaan deur al die waardes, selfs as ons gehad het of het nie gedefinieer 'n spesifieke sleutel in die werf se vorige sintaksis. So selfs met hierdie soort van skikking, kon ons nog 'n foreach lus wat gaan deur elke van die waardes in die sleutel in die skikking. So het die sintaksis van 'n foreach lus, begin ons met 'n skikking. Dit $ arr veranderlike is ons werklike verskeidenheid dat ons omskryf in die vorige skyfie as waarde wat letterlik gaan deur elk van die waardes, ongeag of ons het 'n sleutel of nie. En dan kan ons iets doen met die waarde binnekant van die foreach lus. So weer, as ons het 'n skikking soos hierdie hier created-- so ons het die sleutel van cat en waarde van bar, die sleutel van roof en waarde van qux-- kan ons 'n foreach lus het dat gaan deur skikking as sleutel waarde en dan iets te doen met die sleutel en / of waarde. Maar ons hoef nie noodwendig moet 'n foreach sirkelroetes gaan deur skikking as die sleutel kaart om waarde. Ons kan gaan deur middel van die foreach lus skikking as waarde. HANNAH Blumberg: En ek dink aan- was jou vraag, wat is die implisiete indeks? GEHOOR: Kinda. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Ja, ja. So basies, as jy nie spesifiseer 'n sleutel, is dit gaan wees 01. MARIA ZLATKOVA: Ja. Net soos met C, dit is zero geïndekseer as jy nie 'n sleutel spesifiseer. GEHOOR: Jammer. Kan jy probeer praat 'n bietjie harder? Ek het 'n bietjie van moeilikheid hoor alles. MARIA ZLATKOVA: Ek is so jammer. Ja natuurlik. So wil jy my om weer te gaan oor dit? Of is this-- GEHOOR: So op die vorige slide-- as jy kan net terug te gaan vir 'n sekonde. MARIA ZLATKOVA: Natuurlik, jammer. GEHOOR: So die tweede array hier nie lyk na 'n waarde te sleutel, soortvan [? kousaliteit. ?] MARIA ZLATKOVA: Right, regs. GEHOOR: So hoe werk dit wanneer jy sê dit is alles of niks. Vir my, wat lyk soos 'n [? cat?] reeds. MARIA ZLATKOVA: Ja, ja. So weer, dit is 'n bestel kaart in hierdie sin dat daar verstaan ​​word, byvoorbeeld, die indekse kan hier verstaan ​​word as 0, 1, 2, 3. Weereens, dit is met dié indekse is ons ekwivalent van 'sleutels gekarteer op waardes. So as ons belangrikste was 0-- jammer. HANNAH Blumberg: Nee, daar hier kalk. Dit is eintlik baie mooi. MARIA ZLATKOVA: Dit is 'n groot. OK. So weer, sou $ arr 0 wees die sleutel vir die waarde 1. 0 sal die sleutel vir die waarde 1 wees. GEHOOR: Ek is jammer. Dit is onsigbaar. HANNAH Blumberg: Alle reg, Nevermind. Kryt was 'n slegte idee nie. Ek neem dit terug. Jy kan dink van die sleutels as 0 kaarte om die waarde 1. MARIA ZLATKOVA: Ja. So dit is 0, dit is 1, 2, 3. Dit kan jou sleutels. Jy kan as-- van hulle dink ja. So in plaas van om eksplisiete sleutels, hulle is soort van verstaan ​​as die indekse begin by 0. Die kryt het nie gehelp nie. Ja. GEHOOR: Vir die foreach lus, as ons wou sien as die waarde, Dit sou net outomaties indeks 0? MARIA ZLATKOVA: Ja. Dit sou gaan deur elk van die waardes. GEHOOR: [onhoorbaar] as 0 of sou dit net nie 0? MARIA ZLATKOVA: Jy wil hê om te sê as dollar teken en dan sommige veranderlike naam, waarde. GEHOOR: [onhoorbaar]. MARIA ZLATKOVA: Jammer? GEHOOR: Jammer, ek is net probeer om te onthou. Hoe sou jy doen as jy dit kan doen outomaties kruip is net 0 van? MARIA ZLATKOVA: So hoe sou jy dit doen as jy het nie spesifieke sleutel name? GEHOOR: Ja. MARIA ZLATKOVA: Jy wil net define-- jouself net sê as 'n paar naam. So in jou psets, julle mag onthou foreach $ ry as $ rye, ons geskep onsself hierdie $ ry sê ons wil om te gaan deur ry as $ rye. Selfs al het ons nie hierdie eksplisiete $ rye gedefinieer, ons kon net gaan sê dit kan ons sleutel wees, en net gaan deur elk van die waardes. GEHOOR: So is waarde 'n nuwe veranderlike ons skep om te slaan [onhoorbaar]? MARIA ZLATKOVA: So dit is nie inherent 'n nuwe veranderlike. Dit is 'n veranderlike wat verwys na die binnekant van die skikking aan elkeen van hulle. HANNAH Blumberg: Dis 'n nuwe veranderlike naam. MARIA ZLATKOVA: Ja, dit is 'n nuwe veranderlike naam, maar dit is nie inherently-- ja. Dit is net 'n nuwe veranderlike dat jy dit kan doen. So hoe doen ons gedoen het $ ry as $ rye, rye was 'n nuwe veranderlike naam wat ons kon skep in ons foreach lus. Dit hoef nie te preexist voor dit. GEHOOR: Kan jy gaan deur die logika vir elk, met behulp van die voorbeeld is daar? MARIA ZLATKOVA: mhm. Jammer. Hier is die voorbeeld. Seker nie. So vir elke array-- so dit beteken dat gaan na hierdie reeks as sleutel value-- wat gaan om te gaan deur middel van hierdie verskeidenheid en die eerste gaan en kry cat, die sleutel cat en die waarde bar. En dan op die tweede iterasie van die lus, dit gaan om deur te gaan en te neem die sleutel roof en die waarde qux. En dan kan jy iets doen met een van hulle of beide van hulle. GEHOOR: So het die idee agter 'n belangrike punt om die waarde, wat doen jy uiteindelik toegang tot? MARIA ZLATKOVA: Wat is die idee van 'n sleutel wat verwys na die waarde van? Dit is net nog 'n konvensie, 'n ander manier om deur die skikking en in staat is om toegang tot óf die sleutel of die waarde of beide en gebruik hulle. GEHOOR: Wat is die rol van die gelas dat die foreach loop in? So as ons by te voeg elemente in die skikking later, sou diegene wees die eerste mense genoem word in die foreach skikking, of sou dit wees later? MARIA ZLATKOVA: So, wat is die bevel dat die foreach lus gaan deur 'n verskeidenheid in? Dit gaan deur die eerste element tot die laaste element, om die laaste bygevoeg element. As jy later elemente by te voeg, sou hulle word accessed-- die eerste elemente sou verkry as die eerste elemente van die skikking, en dan is jy gaan deur elk van die elemente as soort van 'n ordered-- nie 'n geordende, maar die manier waarop hulle is in die skikking te plaas. GEHOOR: So nuwe elemente is later op toegevoegde? So hulle is added-- hulle sal wees om die laaste wat in die [? iterasie. ?] MARIA ZLATKOVA: Nuwe elemente can-- basies, wanneer nuwe elemente bygevoeg word, hulle by die einde van die skikking? GEHOOR: Ja. MARIA ZLATKOVA: Ek glo so. Ja. En dan met jou foreach lus, nadat jy nuwe elemente het bygevoeg en jy gaan deur hulle die nuwe elemente sou wees accessed-- die nuwe element, as dit laaste bygevoeg word, sou dit die laaste verkry. GEHOOR: Kan jy net 'n voorbeeld te gee van iets wat sou [onhoorbaar] met iets met waarde soos [onhoorbaar] of waarde, soos hoe jy wil formaat wat? MARIA ZLATKOVA: Natuurlik. Kan ek 'n voorbeeld gee van wat ons sou doen met die waarde? So wat jy ouens kan vertroud wees met is dat ons het gegaan deur 'n verskeidenheid en basies gedruk elk van die elemente, byvoorbeeld, as deel van 'n geordende lys of iets wat. Beteken dit sin maak of wil ons aan- GEHOOR: Kan ons druk hierdie waardes uit? MARIA ZLATKOVA: Ja, ons kan druk en toe $ basies waarde, want by daardie spesifieke waarde het, sou ons wees druk die waarde binnekant van dit. So as ons by ons eerste iterasie dit en ons gedruk $ waarde ons sou druk bar. GEHOOR: Is daar ook vir loops in PHP of net foreach loops? MARIA ZLATKOVA: Daar is ook vir lusse in PHP. En hulle logika is meestal die dieselfde as wat jy is wat gebruik word om. GEHOOR: So sy waarde is null. MARIA ZLATKOVA: Dit is soos die dieselfde. Ja. GEHOOR: Ek gaan net om te vra. So wanneer jy 'n verklaar skikking, het jy nie nodig om te vertel wat die grootte dit gaan wees, wat beteken dat jy kan net voeg en weg te neem elemente [onhoorbaar]. MARIA ZLATKOVA: Yup. Yup. Presies. Wanneer ons verklaar 'n skikking, ons hoef nie te sê wat die grootte is dit, sodat ons kan net elemente voeg op dit later as well. Meer vrae? So PHP en HTML saam te bring, wat ons het goed seen--, Byvoorbeeld, in hierdie voorbeeld, het ons 'n HTML-vorm dat 'n invoer veld het. En die invoer veld is net die naam en dan is dit 'n stuur knoppie. En wanneer jy druk op die Submit knoppie, in ons hello.php lêer, omdat die metode vir die vorm is te kry, kan ons toegang ookal is op naam hierdie kry globale veranderlike wat is-- die sintaksis, want dit is $ _GET. En dan kan ons toegang ongeag die toevoer van die gebruiker binnekant van daardie vorm vir naam deur die spesifiseer die naam van die gebied. Enige ander vrae of enige vrae oor hierdie spesifieke voorbeeld? GEHOOR: Waar is die PHP? MARIA ZLATKOVA: Hier. So dit is ons opening tag vir die PHP. GEHOOR: Ag, reg. MARIA ZLATKOVA: Ja. HANNAH Blumberg: Die = is snelskrif want dit is PHP en net eggo. GEHOOR: Oh. MARIA ZLATKOVA: Ja, jammer. Ek moet dit duidelik gemaak het. HANNAH Blumberg: Druk. MARIA ZLATKOVA: Dis net die funksie wat ons toelaat om iets te druk. N groot vraag. So going-- ja. GEHOOR: Is daar gaan baie wees 'n bietjie van die hand kodering van PHP en HTML op quiz 1? MARIA ZLATKOVA: Daar kan 'n billike bedrag van interpretasie van PHP en HTML, nie noodwendig soos 'n groot hoeveelheid van die kodering, al is jy dalk 'n skryf foreach lus, al is, 'n lus. Enige van die lusse dat ons dek hier is fair game. En dit is meestal nie. HANNAH Blumberg: Ek sou bereid wees. In dieselfde manier wat jy gevra het ons skryf 'n klomp van die C funksies op quiz 0, Ek sou bereid is om die te doen dieselfde in PHP en JavaScript. MARIA ZLATKOVA: Ja. HANNAH Blumberg: Ek sou sê 'n little-- soos ons is nie gaan maak jy skryf 'n groot HTML bladsy, net omdat dit is 'n bietjie vervelige, maar jy kan dele hê. Dit is heeltemal fair game. Soos klein HTML bladsy, heeltemal regverdig. GEHOOR: OK. Hoe gaan in JavaScript sowel? HANNAH Blumberg: Ja. JavaScript se fair game. MARIA ZLATKOVA: Ja. Dit is heeltemal fair game. HANNAH Blumberg: Ons kry aan dié in soos 10 minute. MARIA ZLATKOVA: SQL, weer, Structured Query Language. Dit laat basies ons data te bestuur in 'n relasionele databasis management stelsel. Dit beteken basies net dat ons iewers sommige data wat ons dalk wil om te stoor gebruik in 'n webwerf of in 'n ander vorm. En dan het ons navrae te kry inligting van ons databasis, of om inligting in te voeg in hulle nie. Daar is baie van die gemeenskaplike ones-- UPDATE, INSERT, kies, en verwyder. So vir UPDATE, dit is die sintaksis vir die opdatering van data in 'n databasis. Hierdie tabel genoem opdatering tabel deur te sê SET, kan ons 'n paar waardes in alle stel rye gelyk iets anders. So kan ons ook spesifiseer 'n spesifieke inskrywings wat ons wil verander en dit kan gebruik word om WAAR. En ons kan spesifiseer dat ons net wil sommige rye verander waar die huis, as ons het 'n tafel van studente en al die studente moes huis, sodat ons sou slegs 'n paar waardes verander waar 'n huis gelyk Currier, byvoorbeeld. Vir INSERT, kan ons voeg sekere waardes in 'n tabel. So voeg in tafel, en dan sal die waardes, en dan in hakies, ons spesifiseer watter waardes jy wil voeg. So voeg in tafel, col1 en col2, die waarde VAL1 en VAL2. So hierdie plaas basies 'n nuwe ry in 'n tafel met die waardes 1 en 2 onder die kolomme 1 en 2. En dan gaan ons oor te gaan 'n vinnige voorbeeld van hoe dit lyk soos in ons databasis 'n bietjie. Maar hierdie laaste navraag wat ek dink ons ​​gaan om te gaan oor, SELECT, is dit net ons toelaat om data in 'n tabel kies om moontlik gebruik dit daarna. En die manier waarop ons dit doen is ons net stoor dit in sommige veranderlike. En dan kan ons moontlik weer gebruik nie. So SELECT ster beteken kies nie. Dit is net 'n snelskrif vir alle kies. Uit Tabel WAAR, is ons op soek vir 'n paar spesifieke omstandighede, So waar kolom gelyk iets, byvoorbeeld. As ons wou net kies al van die tafel, dit net kies al die kolomme en al die rye van 'n tafel. En dan verwyder uit tabel WAAR Kol gelyk iets Dit skrap net 'n paar ry van ons tafel waar ons het 'n paar spesifieke voorwaardes. In hierdie geval, die voorwaardes is gelyk aan kolom iets. So net 'n vinnige voorbeeld hiervan. As ons hierdie tabel hier en ons plaas dit in 'n tafel, hierdie waardes, dat 'n nuwe ry sou plaas. En as ons motor-inkrement, sou dit net inkrementeer ons ID 0-1 het 2. As ons almal uit studente, is dit net terug al die velde en al die rye. Waar jaar is groter as of gelyk aan 2.016, dit sou net terug Hannah en myself. En dan as ons net gekies jaar id en jaar uit die studente waar die huis is Cabot House, wat sou weer, terug Hannah en myself. Dan as ons van studente verwyder waar die naam is gelyk aan Rob, dit sal die hele ry verwyder. En dan as ons het die naam, UPDATE studente SET naam gelyk aan Daven Waar die huis is gelyk Cabot House, wat gaan om te gaan na diegene rye en dan werk die naam. En dan 'n paar tipes SQL data is CHAR, VARCHAR, INT, en dryf. Dit is fair game. Ek sou weer gaan en maak seker dat jy weet en het hulle op jou cheat sheet, wat elkeen van die karakters is gebruik vir wat jy hulle gebruik op jou psets, en maak seker dat jy vertroud is en gemaklik met wat om te kies uit verskillende tipes data in jou pset. Ja. GEHOOR: Wat is die tafel gestoor? Ja, waar is hierdie tabel gestoor? MARIA ZLATKOVA: Wel, nou, is dit nie gestoor word. In elk geval, waar is hierdie tabel gestoor? Maar dit kan gestoor word in 'n SQL databasis. GEHOOR: En waar is die SQL databasis? In die rekenaar, online iewers, die bediener? MARIA ZLATKOVA: Dit kan 'n aantal verskillende dinge. HANNAH Blumberg: Ons het koppel met SQL tafels meestal met phpMyAdmin. So kan ons 'n bediener te vra om hulle te stoor vir ons. Ons kon dit stoor op ons eie rekenaar. MARIA ZLATKOVA: Dit hang net hoe jy wil om dit te doen vir jouself. Maar ons is die stoor hulle, soos Hannah genoem, op phpMyAdmin, wat is aanlyn. En dan is die manier wat ons gebruik PHP en SQL, slaan ons in 'n paar veranderlike wat ons bevraagteken word. So as ons kies al uit die geskiedenis waar USER_ID gelyk aan die sessie-ID, dit sou al die rye kies vir die spesifieke persoon wat is aangeteken in die geskiedenis van tafel en sorteer hulle in rye. 'N koel ding om te weet, is dat CS50 se navraag funksie beskerm teen SQL-inspuiting tags. Dit beteken net dat dit maak seker die insette wat ingeskryf is korrek en dat die persoon wat betree die insette probeer nie om insette sommige kwaadwillige kode om óf daal ons tafels of verwyder alles binnekant van ons databasis. 'N vinnige oorsig van die Model View Controller model, dit is net 'n manier van organisering en dink oor die kode. Dit is weer 'n ontwerp paradigma. Wat dit beteken, is dat ons can-- en dit is goeie praktyk om verskillende dele skei van ons kode en wat hulle beheer in hierdie drie paradigmas. So ons mening is die meeste van ons templates, ons uitleg, die manier dat ons stel hoe ons kode lyk. Dit is meestal ons CSS lêers en die manier dat ons die ontwerp van ons kode gedefinieer, basies. Ons kontroles is meestal wat ons het al te doen met PHP lêers. So weer, in samewerking met die inligting wat ons het en die grens van hoe dit inligting gebruik word, en dan verby daardie inligting óf op die oog of die model. En die model, die manier waarop ons het gebruik IS het ons databasis is, so waar ons inligting is gestoor word sodat dit iewers om in te woon, en enige van die kode wat verband hou met die manier dat ons daardie inligting of die manier wat ons werk daardie inligting. So in die MVC model, HTTP versoeke gestuur om 'n web bediener. Dan, die beheerder interpreteer die versoek van die gebruiker en bekragtig sal die toevoer van die gebruiker. Dit is opsioneel dat ons die kontroles kommunikeer met 'n model, so iets soos ons databasis of 'n ander funksie dat relais inligting. En dan uiteindelik, die beheerder verby inligting op die oog sodat dit kan wees gelewer is en dat dit kan sigbaar vir enige persoon geword toegang tot die webblad. Enige vrae? Awesome. So weer, die model, sy funksie, weer, is 'n aanhoudende stoor van inligting, bestuur en organisering van data. En wat ons het so gesien ver is die MySQL databasis en enige data lêers kan gebruik. Kyk, aanbieding van inligting aan die gebruiker, die UI, of gebruikerskoppelvlak. En die voorbeeld van hierdie is HTML. En dan het ons dalk 'n minimale PHP het. So 'n lus wat iterate oor data wat gedruk is deel van die oog, soos teenstelling met die beheerder. En dan 'n klomp van ons PHP lêers val in die kategorie kontroleerder. Dit hanteer net versoeke gebruiker en kry inligting van die model. Spring in die Document Object Model, dit net verwys na die manier HTML dokumente georganiseer is. En hulle is georganiseer in 'n boom struktuur wat 'n hiërargie het. So as ons toegang tot [onhoorbaar] voorstelling van die dokument, ons kan werk met die dokument, soos Ons manipuleer voorwerpe basies. En om dit 'n maak bietjie duideliker wanneer ons het 'n groot deel van ons verskillende tags reageer verskillende roetes in ons boom. En dan vir hierdie voorbeeld, die begin dokument knoop. Ons het, dan is ons HTML node wat split in die kop en liggaam. Kop het titel en dan titel bevat hello, wêreld. En ons liggaam bevat net hello, wêreld so goed. So enige vrae oor enige van die dinge wat ons tot dusver gedek? En indien nie, sal Hannah oor te neem met JavaScript. Awesome. HANNAH Blumberg: OK, cool. As daar iets kom met PHP of HTML, of enige van die dinge Maria gedek, ons kan altyd breek. Ons doen 'n beter op keer, so awesome. En net om terug te gaan regtig vinnig om hierdie, as jy kyk na elke eksamen verlede jaar se dit kom either-- hier is sommige HTML, maak hierdie diagram. Of hier is hierdie diagram maak 'n paar HTML, so beslis oefen nie. En dan is dit een gewaarborgde vraag wat jy kan regkry. Koel. So laat ons praat oor JavaScript en hoe dit 'n bietjie anders tale soos PHP en C, die twee tale wat ons vooraf gesien het. So nommer een, dit is losweg getik. Dit is soos PHP, maar in teenstelling met C. Dit is 'n geïnterpreteer taal. Weereens, dit is soos PHP, in teenstelling met C. En dit gaan ons toelaat om dit use-- werk regtig mooi met webblaaie. Dit gaan ons toelaat om te manipuleer die inhoud en hoe dit lyk en wat dit doen. Ons gaan 'n bietjie van Ajax sien. Dit stel ons in staat om te kommunikeer asynchroon met verskillende bedieners en kry inligting. En dit is die ding wat werklik skei JavaScript uit PHP en C is dat dit kliënt-kant. Beide PHP en C is tipies bediener-kant. Vir die grootste deel en byna geheel wat ons gesien het, ten minste in hierdie klas, JavaScript tree op kliënt-kant, wat beteken dat die leser eintlik verantwoordelik vir die bestuur van dit. En dit beteken dat ons nie nodig om met die bediener. So dit beteken dat dit kan 'n baie vinniger want dit is eintlik net dit is Chrome, dit is Safari, dit is Firefox, alles wat jy gebruik eintlik die bestuur van jou JavaScript. GEHOOR: Wat beteken asynchrone beteken? HANNAH Blumberg: Ag, wat nie asynchroon beteken? N groot vraag. Asynchroon means-- Wel, die inhoud wat in ons gebruik dit, OK, ons skep 'n webblad en ons moet 'n paar inligting te kry. So met die voorbeeld van mashup, enige inligting wat ons dalk wil is artikel titels. Nou, ons een opsie could-- is om dit te doen sinkronies en dit beteken dat laat se stop, gaan kry die artikel, kry die artikel terug, en dan lewer nie, maar dat regtig stadig sou wees. Dit sou 'n slegte gebruikers ervaring wees omdat jy wil net sit daar wag vir iets om te reageer. Beteken dat ons sal asynchroon voortgaan gaan oor ons besigheid, die lewering van die bladsy, en ons sal af stuur 'n versoek Dit is soos 'gaan gebeur in die agtergrond. Ek dink ons ​​gebruik die voorbeeld in lesing van die roeping van Rob en gesê: hey, kan jy dit op te soek vir my en kom terug na my eerder as om net my wag op die telefoon. So asynchroon beteken dit gebeur in die agtergrond van ons af weg in parallel. N groot vraag. Enigiets anders? Groot. Ons sal 'n baie meer in te spring asynchrone versoeke Ajax. GEHOOR: Is JavaScript-- waar kom dit val saam met model-view-kontroleerder? HANNAH Blumberg: Groot vraag. Waar kom JavaScript val met model-view-kontroleerder? Hm. Ek dink dit kan fall-- sodat ons nie gewoonlik dit graag suig in daardie paradigma, maar ek dink ek sou sê, OK, so JavaScript eintlik gaan toelaat ons data in te samel, interpreteer data, eintlik betekenisvolle dinge met die data. Op dié manier, dit is baie beheer-like. Maar dit is ook van plan om ons toe te laat om dinge en druk dinge te vertoon. Op dié manier, dit is baie oog-like. Ja. So dit is soort van soos PHP in waar dit soort van kan wees beide. Goeie vraag. Enigiets anders? Alle reg, awesome. Beweeg reg langs. So laat ons sien 'n voorbeeld hoe ons kan gebruik JavaScript in een van ons web-programme. So ek sal oorweeg om index.html met 'n klomp van die HTML. En die ding wat ek wil hê jy fokus op is dit script tag. En dit sê, OK, ek wil 'n paar loop JavaScript en hier is waar hy woon. Hulle leef in hello.js. En baie soos CSS, kan ons sit JavaScript binne die HTML. Hoekom kan ons wil om dit uit te skei? Ja. GEHOOR: Makliker om te herskryf? HANNAH Blumberg: Ja. Dit is makliker om te gebruik oor verskillende webblaaie. Dit hou dinge skoner. Dis net goeie praktyk. Awesome. Goeie antwoord. So goed, so dit gaan ons index.html wees. En dan hier af is ons klein bietjie JavaScript-lêer. En al wat dit sê is waarskuwing Hallo, wêreld. So wat gebeur, is wanneer hierdie bladsy renders-- so as jy gaan na watter webwerf hierdie is-- alles wat gaan gebeur is dit gaan om te sê, OK, ek is gaan hierdie JavaScript-kode uit te voer. En dit JavaScript-kode sê net waarskuwing Hallo, wêreld. So ek gaan om dit te kry vriendelike bietjie pop-up. Koel? Dit is soort van soos ons heel eerste JavaScript program, ons Hallo, wêreld. Kom ons kyk 'n bietjie meer oor wat Die sintaksis van JavaScript lyk. En spesifiek, laat ons dit vergelyk met C en PHP, wat ons voorheen gesien het. In JavaScript, ons gaan hê var, die naam van die veranderlike, en dan die werklike waarde. En ons het nie 'n tipe spesifiseer, net soos in PHP, maar baie anders as in C. So byvoorbeeld, as ons wou om die waarde 50 te slaan, in C, sou ons om te sê, hey, C, ek wil 'n heelgetal, Ek gaan om dit te noem i, en die waarde daarvan is 50. In PHP, dit is 'n bietjie makliker te maak. Ons sê, hey, ek wil 'n veranderlike genoem i en die waarde daarvan is 50. Baie soortgelyk, in JavaScript, ons sê hey, ek wil 'n veranderlike i genoem, die waarde is 50. Elke daaropvolgende tyd wat ek gebruik i, weet ek nie nodig het om te skryf var. Dis net ek van daardie punt af. In dieselfde manier, in C, waar sodra ons int ek sê, ons gebruik net i. Koel? Alles reg. Beweeg op loops, Gelukkig is hierdie byna kyk exactly-- Ek dink hulle is presies dieselfde as wat loops gaan kyk soos in iets soos C waar jou lus gaan drie het parts-- n inisialisering, 'n toestand, en 'n update. A while lus, dit lyk presies dieselfde. Ons gee dit net 'n toestand. En 'n doen terwyl loop, weer presies dieselfde. Ons gee dit 'n toestand. Kom ons sê ek wou over-- Itereer Ek wou iets te doen vyf keer. In C, kan ons skryf vir init i gelyk 0. i is minder as 5, I ++. Enigste verskil in JavaScript, in plaas van sê int i gelyk 0, ons sê var i gelyk 0. Mooi. Dit is die enigste verskil. Enige vrae oor enige van daardie? Ja. GEHOOR: So in PHP, dit is dieselfde ding, behalwe maar soos 'n veranderlike? Of was dit 'n var voorbeeld? HANNAH Blumberg: Ja. So in PHP, gaan dit om 'n dollar teken. So dit gaan tot $ i gelykes 0, $ i is minder as 5, $ i ++. N groot vraag. Kom ons praat nou oor funksie verklarings. In C, wanneer ons verklaar funksie, ons het hom 'n naam en ons het dit 'n paar parameters. En aan die begin, het ons die soort. In JavaScript, al wat ons hoef te doen is skryf die navraag funksie wat sê, hey, JavaScript, Ek is op die punt om 'n funksie te definieer. In hierdie geval, dit het die naam som. En dit neem twee argumente, x en y. Let daarop dat ons nie omgee oor die tipes van x en y. En net soos C, ons het hierdie navraag terugkeer, sodat ons kan iets doen soos terugkeer x en y. En nou wanneer ons geskryf het hierdie eerste funksie, kan ons som op enige plek gebruik. En dit is heeltemal fyn. Een regtig cool ding oor JavaScript is wat baie anders as C is dat funksies kan behandel word soos waardes. So kan ons iets soos hier doen waar ek dink ek dek hierdie up-- Ek bedek die var som part-- en ons het net gesê funksie xy gelyk terugkeer x plus y. Dit is wat genoem sou word 'n anonieme funksie. Dit is 'n funksie sonder 'n naam. AANGESIEN dit sê funksie som, blah, blah, blah, dit sou net funksie te sê. Maar nou selfs al het ek hierdie anonieme funksie, daardie funksie is regtig net 'n waarde. Ons kan dit behandel soos 'n waarde. So kan ons dit red in 'n veranderlike dieselfde manier waarop ons kan stoor 50 in 'n veranderlike. So kan ons sê, OK, ek wil 'n veranderlike, is dit genoem som, en dit is hierdie funksie. So het hierdie twee dinge is eintlik gaan om die presiese dieselfde ding doen, maar die sintaksis is 'n bietjie verskillende en soort van 'n prettige noot. Ja. GEHOOR: So jy kan noem 'n funksie wat anoniem was deur te sê, som hakies 2, 5? HANNAH Blumberg: Ja. Jy kan hierdie anonieme oproep funksie in die dieselfde manier. Jy sal som doen (2, 5) ;. Dit sou heeltemal fyn wees. As ek nie gedoen het nie var som gelyk aan funksie, as ek net geskrap this-- Ek weet dit is op my hand, maar voorgee ek verwyder this-- dan daardie funksie is 'n soort van net weg. Jy kan nooit gebruik dit weer as gevolg jy hoef nie 'n naam vir dit. Dit is moeilik om te verwys na iets jy weet nie wat om te bel. Goeie vraag. Ja. GEHOOR: Kan jy som verwysing in ander plekke met die waarde van x plus y? HANNAH Blumberg: Kan jy verwysing som op ander plekke met die waarde x plus y? Ek is nie heeltemal seker wat jy bedoel. GEHOOR: So jou verlede semi-anonieme funksie is som is gelyk aan dié anonieme funksie, so som nou 'n veranderlike wat jy can-- HANNAH Blumberg: Right. So som is die veranderlike, maar dit is actually-- so som is 'n veranderlike wie waarde is die funksie. Dit is so 'n funksie, wat is 'n soort van 'n vreemde ding om jou kop draai om sedert ons het al speel met C en jy kan dit nie doen nie in C. Maar nou kan ons noem die som op dieselfde manier wat ons kon som hier noem. GEHOOR: OK. HANNAH Blumberg: Ja. Goeie vraag. Ja. GEHOOR: So ons gebruik nie die prototipes in PHP of JavaScript? HANNAH Blumberg: Nee, ons hoef nie te prototipes te gebruik, veral in JavaScript. So 'n slegte praktyk ding wat ek is gaan om te sê dat jy nie moet doen is jy hoef nie te var i = 50 skryf. Jy kon net begin doen i = 50. En wil net maak ek 'n globale veranderlike. Dit is 'n baie slegte praktyk nooit sê uitdruklik var i, maar dit is iets wat jy kan doen. Die tolk is nie gaan gil op jou. JavaScript is redelik soos, wat jy kan doen wat jy wil. Jammer. Daar is twee. In die oranje broek. Gaan voort. GEHOOR: Nee, eers gaan ons. GEHOOR: Nee, ek was net te sê Ek het nie my hand. OK. So as jy was om te bel dat die eerste keer nou opsom, Ons noem dit die dieselfde manier, x, y, soos elke keer? HANNAH Blumberg: Ja. So hierdie twee wese doen dieselfde ding. GEHOOR: En wat is die voordeel van die gebruik van die een of ander? HANNAH Blumberg: Geen voordeel van die gebruik van een of die ander. Ek wou net om jou te wys twee verskillende stukke van die sintaksis. Daar is baie keer waar anonieme funksies te doen het met 'n doel is as die argument na die ander funksie moet 'n funksie wees. En ons sal sien wat in net 'n tweede plek met Ajax. So as dit het nie sin maak nie, stoor dit in die agterkant van jou kop. Dit is waar 'n anonieme funksie kan nuttig wees want dit is nie regtig die moeite werd gee dit 'n naam sedert ons is net gaan om dit te gebruik 'n keer. Ja. GEHOOR: As x en y verandering later af sal verander som sowel? HANNAH Blumberg: As x en y verandering later, sal opsom verander as goed? So dit is eintlik ek dink iets wat, weer, dit voel net baie anders van C. Dit is nie 'n waarde. Dit is nie 5. Dis net die funksie self. So sodra jy gee dit parameters, dan sal jy eintlik bereken 'n waarde. MARIA ZLATKOVA: En dan kan jy die funksie noem en gebruik dit om 'n bietjie waarde te kry. HANNAH Blumberg: Right. Presies. Ja. GEHOOR: So as jy net stoor dit in die veranderlike, soos var x gelyk som van twee values-- HANNAH Blumberg: Ja. So jy kan net nie var som gelyk som van twee waardes. Ja. Enige ander vrae? Ja. GEHOOR: Maar sou dit verwar som en som? Soos as jy veranderlike som noem, sou jy die funksie som noem? HANNAH Blumberg: Mm. Mm. As jy iets gedoen het soos, som gelyk som 2, 5? GEHOOR: Ja. HANNAH Blumberg: Ek glo dat sou die waarde van som oorskryf. So nog 'n interessante ding oor JavaScript is dat 'n enkele veranderlike kan neem op 'n klomp van die verskillende tipes. Slegte praktyk. Jy moet nie iets te doen soos wat jy nou net gesê. Maar in C, as ek is ingestel gelyk aan 'n heelgetal is, ons weet dat dit nooit gaan 'n string word. Dit is nie die geval in JavaScript. Ja, goeie vraag. Enigiets anders? Alles reg. Doen alles reg op tyd. Hou gaan. Alles reg. As ons kyk na 'n verskeidenheid in JavaScript, hier is 'n vinnige voorbeeld van 'n verskeidenheid van snare. En skikkings kan dinamiese groei. Hulle het nie 'n het vaste grootte dieselfde manier wat hulle doen in C. Ons kan toegang tot die elemente met net die vierkante hakies. Dit lyk baie soos PHP en 'n baie soos C, waar ons kan sê, in hierdie geval, as ek wou die woord JavaScript, sou ek nie skik vierkantige hakies met 'n 0, 1, 2. En dan as jy onthou in C wanneer ons wou die lengte van 'n skikking te kry, dit was regtig irriterende. Maar in JavaScript, super maklik. Al wat ons doen, .length. Gee dit die lengtes. Dis dit. GEHOOR: Dit is eenvoudig. HANNAH Blumberg: Ja, maak jou lewe 'n baie makliker. OK, object-- nie daar nie. Voorwerpe in JavaScript gevoel 'n baie soos structs in C en assosiatiewe skikkings in PHP. So wat ons gesien het 'n baie is into, wat staan ​​vir JavaScript Object notasie. En dit is basies 'n manier strukturering ons data. So laat ons sien 'n voorbeeld, waarskynlik die maklikste. So hier is 'n voorbeeld van 'n voorwerp wat slaan die klas, CS50. En toe ek die klas sê, ek bedoel natuurlik nie like-- ja, die kursus, CS50. En jy sal sien dat alles in die voorwerp gaan word vervat in krullerige draadjies. En ons begin om veldname assosieer of sleutels met die verskillende waardes. Sodat jy kan begin om te sien hoe hierdie soort voel soos 'n assosiatiewe skikking in PHP. So ons gaan die veld assosieer of die sleutel naam, natuurlik, met die string, CS50. Ons gaan 'n instrukteur het. Ons gaan TFS het. Ons gaan aantal psets het en ons gaan aangeteken. En een cool ding om daarop te let is al hierdie dinge het verskillende tipes, en dit is heeltemal fyn. Dit is goed vir 'n voorwerp, in werklikheid, dit is waarskynlik verwag vir 'n voorwerp om 'n kombinasie van snare het en nommers en Booleans en skikkings en alles anders wat jy dalk wil in jou voorwerp. En let dat hierdie gaan wees die name of die sleutels, en dan het ons net stel dit gelyk met 'n bietjie kolon. GEHOOR: Wat presies beteken into beteken? HANNAH Blumberg: Wat presies beteken into beteken? Into staan ​​net vir die JavaScript Object notasie. Dit is net 'n manier van uitleg. Ja. Dit is 'n manier om die formatering ons data. In C, dit is structs. In PHP, dit is assosiatiewe skikkings. In JavaScript, ons het voorwerpe. GEHOOR: So CS50 is 'n voorwerp? HANNAH Blumberg: CS50 is die voorwerp in hierdie geval. Nou, hoe weet ons eintlik toegang diegene velde of verander die velde. Byvoorbeeld, veronderstel ons dat besluit jy wou een minder pset hierdie semester. In plaas van nege, ons is net gaan om agt. Hoe sou ons dat verander? O, verkeerde manier. Daar is twee maniere waarop ons dit kan doen. Nommer een is met die dot notasie en nommer twee is met die vierkante hakienotasie. So, byvoorbeeld, as ek wou verander of toegang die veld psets in ons CS50 voorwerp, wat ek sou doen is CS50.psets, sodat die naam van die voorwerp dot die naam van die land of die sleutel. Baie soortgelyk, dit is presies ekwivalent te doen CS50, en dan vierkantige draadjies, psets. Koel? Ja. GEHOOR: So is into tegnies JavaScript steeds, selfs al in die psets ons skei dit uit [onhoorbaar]? HANNAH Blumberg: Natuurlik. So die vraag is, is JavaScript en into ekwivalent? So into is notasie, basies die manier waarop ons uit te skryf 'n voorwerp van JavaScript. So hulle is nie presies dieselfde. Ek sou sê JavaScript, is daar is voorwerpe in JavaScript. Into neem die voorwerpe en druk hulle en gee dit of stoor dit in 'n mooi manier. So into is nie 'n programmeertaal taal die manier waarop JavaScript is. Dis net die notasie vir ons voorwerpe in JavaScript. Ja. GEHOOR: So wat presies [Onhoorbaar] te voltooi? HANNAH Blumberg: Natuurlik. So dit is eintlik niks. Dit is net 'n manier om toegang te verkry. So kom ons sê ons wil verander die aantal van die probleem stelle 9-8. Wat ons doen is om iets te doen soos CS50.psets = 8 ;. Ja, n groot vraag. Dit is net om jou sintaksis te toon. Maak nie eintlik enigiets nuttigs doen. Enige vrae? Beweeg reg langs. So laat ons kyk na 'n vinnige voorbeeld van hoe JavaScript werk omdat ek jou vertel dit doen al hierdie dinge en koel ons toelaat om webblaaie te verander. Kom ons eintlik sien dit in aksie. So neem, byvoorbeeld, hierdie HTML lêer. En die ding wat ek wil om te fokus op is hierdie spesifieke tag, wat is 'n knoppie, met id search_button. Dis net op die bladsy. So nou, laat ons sien wat kan ons werklik doen. Wel, dink wanneer jy kliek die knoppie, ons wil 'n alert-- maak jy gekliek op die knoppie. Kom ons kyk hoe ons dit kan doen. So window.onload-- dit is nie iets wat jy gesien het in die klas, dus sal nie nodig om dit te weet vir die quiz. Maar dit sê basies, OK, call hierdie funksie wanneer die venster vragte. So dit is net soort van die opstel van die kode. Moenie so baie oor wat bekommerd wees nie. Wat ek wil hê jy om te fokus op is hier. Ons sê var Search gelyk document.getElementByID search_button. So as jy kan raai, wat dit doen, is dit sê, OK, gaan soek die element met ID search_button. En nou het ons dat werklike element en ek is gaan om dit te slaan in 'n veranderlike Search. En nou kan ons eintlik gebruik daardie element en verander dit, of toegang tot sy waardes, dinge soos dat. Ons kan eintlik begin betrokke te raak met die webblad. So hier is ek sê, OK, nou dat ek dat die knoppie, wanneer dit gekliek word, noem hierdie anonieme funksie. So dit is waar anonieme funksies word nuttig. En wat beteken die funksie te doen? Wel, dit noem net hierdie waarskuwing funksie en dit sê, jy gekliek op die knoppie Soek. So, wat sal gebeur as ek gaan na waar hierdie HTML leef en ek kliek op die knoppie, Ek sal 'n fancy bietjie wakker te kry wat sê jy gekliek op die knoppie. So die dinge om te fokus op here-- document.getElementByID kry 'n bepaalde HTML element met die gegewe ID. En nou kan ons ' wat moet gebeur wanneer daardie spesifieke element word gebruik. GEHOOR: Ons moet alles in te sit? HANNAH Blumberg: Jammer? GEHOOR: Moet ons fisies al daardie kode? HANNAH Blumberg: Moet ons fisies al daardie kode? Ja. Is dit nie hierdie soort van irriterende? Dit is 'n baie van die kode. GEHOOR: Jy kan iets invoer. HANNAH Blumberg: Right. Ons kan iets te gebruik. En in particular-- oh, dit is vertel my ek moet artikel te leer. In die besonder, laat gebruik van die biblioteek jQuery, want dit was regtig lang en baie irriterende en ek wil in staat wees om dit te vereenvoudig en maak dit korter en makliker om te skryf. So jQuery is 'n JavaScript-biblioteek. JavaScript is so programmering taal; jQuery is 'n biblioteek. En dit maak 'n klomp van die dinge makliker. Dit maak dit verander en oor gaan 'n HTML-dokument baie makliker. Dit maak hantering gebeure makliker. Dit maak animasie makliker en dit maak Ajax makliker. So laat spring in twee van daardie dinge nou. Verskoon my. Voordat ons dit doen, 'n paar basiese sintaks. Dit is wat die meeste oproepe na die jQuery biblioteek lyk. Ons gebruik hierdie dollar sign-- geen verband teken PHP, net inconvenient-- die naam van 'n selector, dot, en dan 'n aksie. So laat ons sien n paar konkrete voorbeelde van daardie. So dit is eintlik dieselfde kode van die geval skuif. So hierdie lang, lelike ding word hierdie baie lekkerder, kleiner ding. So kom ons probeer om hierdie af te breek. Dit sê, OK, jQuery-- hierdie dollar sign-- jQuery, vind my die venster. So wat is die selector. Wanneer dit vragte, skakel hierdie funksie. So dit is alles binne. OK. So ver so goed? Alles reg. Nou, jQuery, vind my ding met ID search_button. En wat dit word gebruik, noem hierdie funksie. En dan hierdie funksie se presies dieselfde. Net nie 'n bietjie van waarskuwing, jy gekliek op die knoppie Soek. So dit is regtig lekker. Dit kondenseer regtig en vereenvoudig ons kode. Hoe het ek geweet dat dit is ID search_button en nie soos die klas search_button? GEHOOR: hashtag? HANNAH Blumberg: Ja. Dit hash simbool, dit is net soos CSS. So onthou, met CSS, wanneer ons wou iets deur ID kies, ons gebruik die pond teken. En toe ons wou kies iets wat deur die klas, gebruik ons ​​die dot. Groot. Maak sin? So jQuery is veronderstel om maak net ons lewe makliker te maak. Ja. GEHOOR: So ek is 'n bietjie verward hoe die anonieme funksie werk. Het jy noem hierdie anonymouse funksie, funksioneer? Hoe word dit genoem? HANNAH Blumberg: Natuurlik. So funksie is net 'n term wat sê, ek is op die punt om 'n funksie te definieer. GEHOOR: O, OK. HANNAH Blumberg: OK? En dan slaag ons dit as 'n argument aan- Kom ons neem hierdie innerlike one-- om die klik-funksie. So ja, so daardie funksie, hierdie anonieme funksie, word 'n werklike argument. So onthou in JavaScript, ons kan funksies te hanteer as waardes. GEHOOR: O, OK. HANNAH Blumberg: Ja. Ek hou van wat "O". Lekker. Ander vrae? Tyd? MARIA ZLATKOVA: Goed. Goed. HANNAH Blumberg: Awesome. 'N paar vinnige nuttige jQuery. Ek gaan nie om te gaan deur al hierdie. Hierdie skyfies sal wees up aanlyn 'n bietjie later, so kan jy check dit uit 'n bietjie later. Maar basies, die algemene patroon hou waar ons sê: OK, hey, jQuery, hier is my selector en dan hier is 'n aksie. En jy kan dinge doen soos die toegang waarde van 'n vorm, toegang tot sekere HTML, beheer wat gebeur wanneer die gebruiker lê 'n vorm, dinge soos dat. Ja. GEHOOR: So in die eksamen, gaan ons nodig nogal 'n baie weet van die jQuery dokumentasie. So gegee dat ons kopieer / plak die jQuery dokumentasie aan ons oneerlik vel, Waar is die lyn getrek? Soos hoeveel het ons nodig om te weet? HANNAH Blumberg: Groot vraag. Die vraag is wese gegee dat jy kan nie toegang tot die jQuery dokumentasie tydens die toets, hoeveel moet jy ken? Ons sal nie van jou verwag om te kom met 'n paar random funksie dat ons wat jy sou verwag om Google. Dinge wat fair game is, is ek wil sê net soort van die algemene sintaksis, in staat is om te kies deur ID en deur class-- so net soos CSS. En dan is die werklike funksies vrywilligers, ons sal jou waarskynlik vertel. Ja. GEHOOR: So wanneer jy kies deur die klas dot sou beteken. HANNAH Blumberg: Ja, presies. Goed. Wanneer jy by die klas te kies, gaan dit word dot in plaas van die pond teken. Ja. GEHOOR: Sou jy gaan oor die verskil tussen die kies deur ID en klas? HANNAH Blumberg: Natuurlik. Die verskil tussen die kies ID en kies deur die klas. So as Maria het gesê 'n bietjie vroeër, is daar kan slegs een HTML element wees met 'n gegewe ID, terwyl die klas, dit ons toelaat om die groep 'n klomp van verskillende elemente saam, so dinge wat verband hou, maar nie presies dieselfde. Is dit die vraag beantwoord? Awesome. Ja. GEHOOR: Wat gebeur as jy verskeie het dinge wat in dieselfde klas? HANNAH Blumberg: Wat gebeur as jy het verskeie dinge wat is dieselfde klas? So, byvoorbeeld, as ons net die gebruik van suiwer JavaScript, sou ons iets te doen soos document.getElementsByClass. En dan wat dit eintlik nie is opbrengste 'n verskeidenheid van elemente. En jy het om óf Itereer oor hulle of vind watter een jy wil. Dit gaan nie om te gee jy 'n enkele element. Dit gaan om jou te gee 'n verskeidenheid van elemente. N groot vraag. Enigiets anders? Awesome. So ek dink as wat jy ken enige jQuery jy gesien het in die pset, jy moet goed om te gaan. Vraag? Ag nee. Ek het regtig te leer. Ontspan. Dit sal goed wees. Ek sal daar te kom. Kom ons praat oor Ajax. So Ajax gaan a-- goed, laat ons begin met dit waarvoor dit staan. Dit is 'n akroniem. Dit staan ​​vir Asynchronous JavaScript en XML. En XML is basies gaan wees [Onhoorbaar] met 'n tipe van ons data. Maar ons het nie eintlik gebruik XML. In plaas daarvan, het ons net gebruik into. So basies, dit is 'n paar data-- asynchrone, JavaScript, en data, in hierdie geval, into. En ons doel, soos ons genoem 'n bietjie vroeër, is om in staat wees om 'n maak versoek het daardie versoek doen sy ding in die agtergrond, maar voortgaan doen wat ons van voorneme is om te doen. En dan wanneer daardie inligting gereed is, dan sal ons dit inkorporeer. So laat ons sien wat hierdie eintlik lyk. En dit, moet jy wees 'n bietjie bekend van pset8, die een wat jy net omgedraai in. So hier is 'n geldige jQuery funksie wat ons mag wil weet about-- hierdie dollar teken. So dit jQuery funksie .getJson sê. En wat dit doen, is dit funksie neem 'n URL en 'n paar parameters-- so ek dink in die geval van pset8, dit was soos, die URL was articles.php en die parameters was go = sommige poskode. En dit sê, OK, maak 'n versoek aan hierdie URL met die gegewe parameters. En wat net gebeur. Wanneer dit voltooi is, is dit óf gaan om suksesvol te voltooi of dit gaan om te misluk. So, dit is die ekwivalent van die oproep Rob en hom vra om iets te doen. En dan wanneer hy noem terug, hy is óf gaan om te sê ek gedoen of ek misluk. So in die geval waar jy gedoen het, sê jy, OK, ek is gedaan. En dan hierdie funksie noem jou. In hierdie geval, dit gaan om 'n wees funksie wat 'n paar inligting neem. Die een wat ons gewoonlik omgee is data, die data wat ons eintlik is teruggestuur as 'n gevolg van die roeping .getJSON. En jy kan iets doen met dit. So in die geval van pset8, Ons vertoon dit as 'n lys. Fail gaan 'n funksie wees wat genoem word indien die versoek versuim vir watter rede ookal. En in die geval van pset8, ons console.log dit net. Enige vrae oor dit? Ja. GEHOOR: Kan ons gebruik net funksie theta in plaas van funksie, textStatus, jqHXR. HANNAH Blumberg: Natuurlik. So ja, ek dink in die pset, sien ons net funksie data. So dit is net the-- ja, OK. Dit is wat ons gesien het in die pset. Dit is heeltemal fyn. Dit is net as jy wil om te trek uit meer inligting, dit is die dinge wat jy kan kry van .getJSON. Goeie vraag. Enigiets anders? Ja. GEHOOR: So .getJSON is Ajax? HANNAH Blumberg: OK. So, dit is die aard van die moeilike deel. Dit is 'n jQuery funksie wat toelaat jy asynchrone oproepe te doen. En diegene asynchrone oproepe, dit is wat ons het verwys na as Ajax. Ja. Dit het my 'n baie lang tyd om te uitmekaar trek toe ek 'n student. GEHOOR: Kan jy weer sê? HANNAH Blumberg: Ja. Kan ek dit weer sê? Dit .getJSON funksie, dit is 'n jQuery funksie. En dit gaan om 'n asinchrone oproep. En dit asynchrone oproepe, het ons is verwys na diegene soos Ajax. Enige ander vrae? Ons het net 'n paar minute oor. En Maria se gaan draai met sekuriteit en dan gaan ons om net oor gedoen word. MARIA ZLATKOVA: Awesome, OK. So hierdie is-- neem net 'n paar sekondes te kyk oor hierdie. En dit is nie iets wat regtig baie goed. En kan iemand my vertel hoekom? Wat gaan aan in cat en mag kon potensieel lei tot iets wat sleg is, en wat dit genoem? Ja. GEHOOR: As die argument wat geslaag is meer as 12 karakters, dit kan oorloop. MARIA ZLATKOVA: Right. Volmaak. Wat word dit genoem? Jy genoem is dit net. GEHOOR: Buffer oorloop. MARIA ZLATKOVA: Yup, buffer oorloop. So, dit is iets wat ons verwys na as buffer oorloop. En ons sien dat die binnekant van cat, ons het ons buffer, c gedefinieer, met 'n grootte van 12. Maar in die belangrikste, ons doen nie kyk op enige manier op alle of die argv1-- sodat was die tweede argument. Ons kyk nie of die grootte van dit is gepas. So as ons het 'n veral kwaadwillige gebruiker wat in sommige argument wat sit langer as 12, en dan potensieel buite die grense van daardie argument, het 'n paar uitvoerbare kode dat hy probeer om iets te doen slegte met dit; dan is dit, wat sou gebeur, sou die terugkeer ignoreer adres van die cat funksie, veroorsaak dat die funksie om toe terug te keer na daardie kode uit te voer. En dan slegte dinge kan gebeur. Maak dit sin om almal? En hoe kan ons beskerm teen dit? Enige voorstelle? Basies, binnekant van potensieel cat, hoe kan ons kyk om seker te maak dat dit nie kan gebeur? GEHOOR: As die grootte 12 oorskry, sou jy ekstra geheue toeken? MARIA ZLATKOVA: Voorstelle is, toe te ken addisionele geheue van die grootte oorskry. Eintlik kan ons iets wat 'n doen baie eenvoudiger as wat as goed. Ons kan net die string lengte van die argument wat aangegaan, kyk of wat minder as of gelyk aan 12-- en dit is wat ons wil hê dit te wees, want ons wil nie dit aan die grense van ons buffer oorskry. En dan as dit nie gebeur nie, ons kan werk met die argument. En dan as dit nie, ons eintlik wil potensieel Yello by die gebruiker. Maar dit is hoe ons dit sou doen. Ja. GEHOOR: Kan jy verduidelik memcpy ware vinnig? MARIA ZLATKOVA: Ag, jammer. Ja. Memcpy neem alles is-- jammer, OK. Memcpy neem alles wat in bar, wat ook al verby op cat as die command line argument. So dit gaan argv1 neem. Argv1 is bar hier genoem. So dit gaan bar te neem en dit gaan om dit te kopieer na c. GEHOOR: OK. MARIA ZLATKOVA: En dit gaan copy-- die derde argument verwys net hoeveel dit gaan kopieer na c. GEHOOR: Ag. So hierdie een kopiëring al dan. MARIA ZLATKOVA: Ja, dit is die kopiëring alles. Yep. Eerste, maak ons ​​seker dat die bar is nie gelyk aan NULL, want dit is 'n wyser. Dan kry ons die string lengte van bar. Ons maak seker dat dit minder as of gelyk aan 12. En dan, want ons het seker gemaak, kan ons eintlik memcpy en seker wees dat dit is OK. Enige vrae? Groot. Ek het twee waar of vals vrae. Kan iemand my vertel dadelik As dit is waar of vals? Ja, dit is onwaar. Presies. Beide van hulle is vals. Sodat die gebruik van 'n enkele wagwoord is nooit regtig 'n goeie idee want as iemand weet jou wagwoord, kan hulle net toegang tot al jou ander rekeninge. En dan ikone niks doen nie om veiligheid te verseker. Ons moet gewoonlik kyk vir HTTPS in plaas van HTTP en die URL. En 'n paar ander vorme van aanvalle wat ons genoem het, Dawid in genoem lesings, SQL-inspuiting aanvalle. Ons het reeds gesien dat as ons die don't-- CS50 navraag funksie maak seker dat SQL inspuiting aanvalle kan nie plaasvind nie. Maar as ons nie die gebruik van CS50, quote, unquote "in die soektog," ons sou hê om seker te maak dat die toevoer van die gebruiker is nie eintlik 'n paar SQL navraag wat al sal veroorsaak ons tafels te laat val of iets sleg gebeur met ons databasis. Sessie kaping is 'n ander tipe van aanval wat gebeur wanneer 'n paar slegte persoon gebruik sessie paar slagoffer se ID om toegang tot die login inligting. So 'n baie triviale voorbeeld van wat asof ons 'n openbare rekenaar, dan is die slegte mens inteken en dan hulle het die koekies wat gered. En koekies nie verander nie vir sessie. Toe het ons die slagoffer gaan en dan teken in die webwerf. Die koekies nie verander nie vir 'n sekere tydperk. En dan die slagoffer logs in die webwerf en dan laat. En dan is die persoon wat terug gaan kan dan nog steeds gebruik om hul sessie ID toegang tot hul inligting. So dit is een voorbeeld van hoe dit kan gebeur. En dan sou ek nie te veel bekommerd wees oor spesifieke kode of iets soos dat dit kan veroorsaak, maar met 'n soort van idee wat die veranderlikes wat betrokke is in hierdie is. En dan manipuleer kop data is 'n ander tipe van aanval wat Dawid het gepraat oor. En dit net verwys na wat kan gebeur wanneer die reaksie, die HTTP reaksie binnekant van ons kop is nie behoorlik ontsmet. En enige van die fields-- byvoorbeeld as iemand oor skryf een van die kop waardes om enigiets meer as bevat wat hulle moet contain-- en eintlik bevat, byvoorbeeld, 'n 200 OK status kode, dan is hulle kon potensieel skadelike doen dinge wanneer hulle is nie veronderstel om. Maar ek sou nie te bekommerd wees veel oor die spesifieke kode dat dit kan veroorsaak, net soort van begrip hoë-vlak dinge soos dat. Ek dink dit is al dat ons moet dek. Amazing. Iemand enige vrae oor enige van die dinge wat ons gedek? Ja. GEHOOR: So 'n soort meer logistieke vraag. Word die inhoud hoofsaaklik gefokus op die dinge na quiz 1? MARIA ZLATKOVA: So vraag is, is die inhoud hoofsaaklik gefokus op die dinge na quiz 1? So is die fokus op na quiz 1, met die uitsondering wat ons nodig het om te fokus op die dinge wat in pset5 en 'n baie van die data strukture dat ons gedek. En ons kan nie sê dat ons kan enigiets ignoreer voor dat omdat dit voortbou op dit so goed. So fokus op dit, plus pset5 materiaal soos insluitend geskakelde lyste, stapels, toue, en alles dat Hannah het deurgegaan. HANNAH Blumberg: Right. Ja, ons het oor al die dinge C Aan die begin baie vinnig. Maar maak seker om te hersien nie. Gaan terug en kyk hoe die quiz 0 review. 'N paar logistieke notas, net terwyl ons jou aandag. Ons gaan kantoorure het beide op Maandag en Dinsdag nag. Hulle gaan in MD 119. Dit is alles op die webwerf, so as jy nie luister nie, geen bekommernisse. MARIA ZLATKOVA: 8:30-11:00. HANNAH Blumberg: Ja, 8:30-11:00. Ons sal daar wees. Ons sal daar wees om vrae te beantwoord. Dit is redelik koue en pret. Julle kan enige vrae te vra wat jy op quiz 1. En quiz 1 is op Woensdag, so baie geluk. As jy enige vrae het, miskien kom praat hier een-tot-een. Koel. Baie dankie. MARIA ZLATKOVA: Baie dankie, ouens. GEHOOR: Yay. [Applous]