JASON Hirschhorn: Velkommen, alle, til uke 10. Dette er en spennende uke fordi i morgen er Quiz 1, som vi vil få til i et sekund. I dag i avsnitt, skal vi gå enn noen ressurser for quiz, og Da vil jeg svare på alle spørsmål dere har. Og vi vil til slutt ende med noen praksis problemer. Vi kan tilbringe hele avsnittet besvare spørsmål. Vi kan tilbringe hele avsnittet gå over praksis problemer. Vi vil bare utvide til å fylle plass og tid vi har. Så jeg satte denne listen opp hver uke, men det er spesielt viktig denne uken. For å studere, hvis du ikke har startet allerede, oh boy. Men forhåpentligvis du har begynt allerede. Og du går gjennom materialet og ressurser oppført her. Jeg vil sterkt anbefale En del av disse. Spesielt forelesningsnotater er utrolig viktig og nyttig. Den study.cs50.net gir en stor primer på en rekke emnene vi dekket. Den har også noen store øve problemer. Og så, er Google stor, også. Jeg vet ikke hva du vil bruke det til. Men bruker Google, så vel. Nå ut til meg hvis du har noen spørsmål, kommentarer eller bekymringer. Se over gjennomgangen sesjon lysbilder fra i går kveld. Eller, hvis du har litt tid, se videoen. De gir mye nyttig materiale og informasjon. Og forsøke å dekke om ikke alle, er mange av de temaene vi har dekket, og at du kan se på quiz. Snakker av quiz, som vil være i morgen. Det er 75 minutter lang. Mange av dere tar det på en o'clock, og noen av dere er tar det på 5:30. For tiden tar du det og plassering du tar den, sørg du sjekke ut dokumentet på CS50.net hjemmeside. Husk at du kan få en 8 1/2 med 11 ark til å ta med deg. Ofte folk ikke bruker denne ark i det hele tatt i løpet av quiz. Men egentlig er det en utrolig nyttig studie verktøy. Så sette sammen at arket er hva Jeg tilbrakte sannsynligvis tre eller fire timer gjør når jeg studerte for CS50, og som var lett mest nyttig måten jeg kunne studere for quiz. Så selv om du har noen andre menneskers studie guider for å se på og bruke som referanser, jeg anbefaler å lage din egen studieguide, putting at ting sammen. Som virkelig hjelper deg å lære alle av materialet. Sist men ikke minst i denne delen, etter quizen i morgen er det en mer foredrag - neste mandag. Det er enda en del, ikke neste Tirsdag før Thanksgiving, men Tirsdag etter det. Vi kommer til å møte sammen for et endelig farvel fest og også gjøre noen kule ting å få dere begeistret for videre studier i informatikk. Det er enda en prosjekt, ett mer rettferdig, ett mer hackathon. Vi nærmer oss slutten av CS50, som er spennende - men også, hvis du er som meg, litt trist. Før jeg går videre, er det noen som har noen spørsmål om hva vi har dekket så langt? OK, vel la oss gå over noen spørsmål at du har for quiz og emner vi kan dekke. Så dette er en liste som jeg satt sammen. Det er på ingen måte uttømmende, men forhåpentligvis vil jogge hukommelsen hvis du har noen spørsmål om noen av disse emner, eller hvis du har spørsmål om praksis problemer fra spørrekonkurranser i år tidligere. Jeg hadde et par spørsmål som var sendt til meg, men jeg ønsker å holde ut på de i ett sekund. Er det noen som har noen spørsmål, problemer de ikke forstår, Svarene de ikke forstår å få oss i gang? Avi. PUBLIKUM: Kan du bare gå over DOM og Ajax virkelig rask? Som, hva vi trenger å vite eller burde forstå om dem? JASON Hirschhorn: Jeg kommer til å svare generelt dette spørsmålet, hva gjør jeg trenger å vite om gitt tema x? Fordi jeg har en følelse mange av dere kommer til å spørre meg det, eller er nysgjerrig på det. Så i den grad at emnet var dekket i forelesning, eller avsnitt, eller på study.cs50.net, et problem satt, du bør være kjent med det. Slik at du ikke trenger å vite alle typer av kode som er tilgjengelig i HTML eller hver type attributt eller eiendom du kan gi noe i CSS. Men hvis du så den i et foredrag eksempel, hvis du så det i et problem sett, bør du nok være kjent med det, spesielt ting du så i forelesning. Så vi diskuterte dokumentet objektmodell litt i seksjon, mer så i forelesningen. Du bør være kjent med at mye av det. Og du bør være kjent med Ajax i samme grad. Vi har aldri sett utrolig avansert eller kompliserte eksempler på Ajax, så du kommer ikke til å bli bedt om å gjøre noe utrolig komplisert. Men du kan bli bedt om, hvordan gjør jeg foreta en Ajax anrop ved hjelp av jQuery? Som er noe du har sett en rekke ganger før, både i gjennom økten og i foredrag, og det er bare to-ish linjer med kode. Så det er noe du bør være kjent med. Men igjen, for alle disse temaene, hvis du har sett det før, er det fritt vilt. Og vi kan spørre deg - selvsagt, vi er kommer til å spørre deg ting du har ikke sett før. Coding noe du ikke har sett før. Som ikke er å si at du har ikke sett verktøy for å løse det problemet før. Du har sett disse verktøyene. For eksempel, i test 1, hvis du trenger å kode strlen. Vi har ikke kodet strlen før. Men du vet hvordan du bruker en for loop, du vet hvordan du skal bruke hvis forholdene. Du vet hvordan du skal skrive variabler i C. Det kommer til å være det samme her. Du kommer ikke til å bli bedt om å gjøre noe du ikke har sett før, men du kan bli bedt om å liksom sette noe sammen på en ny måte, eller løse en annen type problem. Beklager, det var ikke spesielt for din spørsmål, men jeg kan ikke svare på om hvert enkelt emne hva du gjør eller ikke trenger å vite. Men også, sorry, siste på det. Vi har brukt betydelig mer tid på link lister enn vi har på Ajax. Du brukte ikke Ajax i et problem sett. Et av de sentrale trekk at oppgavesettet som var link lister. Og vi brukte mye tid på forelesning og § bruke det. Så oddsen er koblingen listen vil komme opp mer ofte på quiz enn Ajax vilje. Eller de spørsmålene som har å gjøre med link Listen vil være verdt flere poeng. Så du kan sikkert fokusering og smal inn på ting som er mer sannsynlighet for å komme opp fordi vi har brukte mer tid på dem. OK noen andre spørsmål? Yeah. PUBLIKUM: Kan vi gå over bruken av anonyme funksjoner i Javascript? Jeg er en er litt forvirret om det. JASON Hirschhorn: Så i Javascript - Jeg prøver å tenke hvordan jeg kunne skrive dette på - så la oss faktisk åpne opp denne koden. Så dette er kode som vi gjorde i forrige uke. Og du har sett denne før hvis du var her i seksjon forrige uke. Eller du har sett noe ligner på dette før. Men du kan se på denne første linjen. Dette er hvordan du starter - alle har sett dette før. Hvis du ønsker å sette noen Javascript-kode, du setter den inne i denne, forutsatt du bruker jQuery. Dette sier, ikke gjør noe til dokumentets lastet. Og så, Curt, ser du her vi gjør noe sånt som dette - funksjons åpne paren, lukket paren. Så vi er ikke å gi dette fungere et navn. Vi kommer ikke til å definere denne funksjonen er ment for å kjøre og deretter kaller det en haug med ganger. Vi bare sier dette dokumentet allerede foregår en funksjon. Et par ting å gjøre. Og vi ønsker ikke å bruke tid gi den et navn eller lagre det for evigvarende. Vi ønsker bare å kjøre noen ting. Så en anonym funksjon sorter av tjener dette formålet. Når du ikke kommer til å bruke noe om og om igjen, slik at du ikke trenger å gi den et navn - du bare ønsker å bruke det en gang - du ville bare si funksjon, for eksempel, i dette tilfellet, og du er bare definere noe som du kan gi et navn. Like, vi kunne trekke denne funksjonen ut og gi den et navn, og deretter kalle det fungere her. Men vi trenger ikke å fordi vi ikke ønsker å kaste bort tid på å gi den et navn eller sløse noe i vår navnerommet. Og du vil se at mye. For eksempel ser vi at mye i denne kode, men du har sett denne før da du klikker noe - kjøre denne type kode. Vi kunne definere koden som vi ønsker å kjøre når vi klikker, i dette tilfellet, denne ID, som en egen funksjon og deretter kjøre denne funksjonen. Men i dette tilfellet, vi bare hoppe det skrittet og flytte det inn her og bare for å definere alt at vi ønsker skal skje og ikke gi den et navn. Som likevel ikke kan ha svarte på spørsmålet ditt. PUBLIKUM: Nei, det gjør det. Jeg mener, jeg tror jeg bare ikke egentlig komme på hvorfor det ville være en fungere i det hele tatt, skjønt. Fordi det er egentlig ikke bli kalt. Det gjør egentlig ikke har et navn. JASON Hirschhorn: Det er en funksjon i forstand at det er en rekke tiltak, som du ville sette i en funksjon. Og så det er derfor vi kaller det anonym funksjon. Vi kommer ikke til å gi den et navn. Vi kommer ikke til å kaste bort prøver for å nevne det, men vi kunne. Anonyme funksjoner, du kan alltid gi et navn. Så for eksempel, denne koden rett her, vi kunne sette inn denne koden inne i en funksjon og deretter ringe denne funksjonen her. I stedet sier vi, vi skal ikke å bry seg med det. Vi kommer bare til å skrive det all right her. Det er som noen ganger når du skriver en fire sløyfe i C - dere har sett dette før - kanskje du er itera gjennom en forloop inn i lik 0. I er mindre enn strlen. Eller du går gjennom noen array, kan du spare matrise indeksen i i noen variable. Og du bruker den variabelen. Så du trenger ikke å omskrive matrise brakett jeg om og om igjen og om igjen. Og det er liksom som en dummy variabel. Det er ikke å tjene mye annet formål enn å lage din kode litt renere og lettere å lese. Tilsvarende funksjon her. Bare gjør det litt enklere, men funksjonelt er det ingen forskjell. Besvarer det spørsmålet ditt? PUBLIKUM: Ja. JASON Hirschhorn: OK .. Mario? PUBLIKUM: I går de ofte setter funksjon parenteser hendelsen. Betyr det noe? Eller er det for ting som at de ville gjøre document.ready funksjon hendelsen. JASON Hirschhorn: Vi har sett dette, og igjen, disse er mindre ting som sannsynligvis jeg ikke vil bruke for mye tid på. Fordi noen ganger jeg ikke vil at folk få hetta ut at de ikke har hørt om disse tingene så mye. Men vi snakket litt om hendelsesbehandlinger. Så noe skjer, og deretter denne funksjonen er utført. Og så ønsker vi også å vite noen detaljer om hva skjedde i denne hendelsen. Så tenker tilbake til oppgavesettet fire. Det er trolig den enkleste måten å forstår at i bryte ut. Det var noen kode - som en hendelse som ville skje, men hendelse kan bety mange ting. Hvis kunne bety musen klikkes, det kan bety at du treffer en piltast, et cetera, et cetera. Men det er alt lagret i denne generiske tingen kalt hendelser. Og så kan vi si, er denne hendelsen denne tingen? Eller er denne begivenheten denne tingen? Eller, hva slags skjedde med den hendelsen? Så det er derfor du oppretter den variabelen der for å spare de ekstra informasjon om hva som egentlig skjedde den du kommer til å ønske å utnytter i funksjon. Men igjen, det er nok en av de mindre viktige ting å være super kjent med. OK, hva andre spørsmål har folk hadde, eller snublesteiner de har oppstått mens du gjennomgår? Vi vil tilbake til den listen. Hva om under praktiske tester, hvis folk har tatt de som allerede er? Hva var noen problemer som utløst dere opp? Jeg vet for et faktum at fjorårets quiz var virkelig vanskelig. PUBLIKUM: Kan du forklare hva en SQL-injeksjon angrep er? JASON Hirschhorn: OK, flott. Så vi snakket om dette litt. Det er et foredrag om sikkerhet. Og igjen, som jeg nevnte tidligere, Dette er en side. Men du vil bli frustrert på quiz når du leser noen små to punkt spørsmål, og du er som, når gjorde jeg noen gang lære det? Alle disse tingene i disse foredragene som du ikke trodde du trengte å vet, eller du kan glatte over fordi de ikke har å gjøre med Problemet sett, de vil sannsynligvis komme opp igjen på quiz. Så, kule, morsomme ting som du bare trodde David fortalte for deg å nyte, ble han sier det for deg å nyte og å gjøre deg bare være super begeistret lære alt Det er å lære om informatikk. Disse tingene kommer også opp på spørrekonkurranser. Så, selv disse små ting som ikke direkte relatert til ditt problem satt, som dere er kjent med fra Quiz 0, vil trolig komme opp. Og dette er et godt eksempel av noe. Så en SQL-injeksjon angrep er når du få litt informasjon fra brukeren og du ønsker å sette det inn i en tabell ved hjelp en SQL insert-setning, men du ikke rense innspill på forhånd. Så, åpenbart vi har sett SQL-setninger. Jeg vil bare åpne opp - la oss gå - vi vil gå til gjennomgangen - Jeg tror, ​​som dekket det? Jeg tror Samala gjorde. Så vi kan få - PUBLIKUM: Hvor fant du denne? JASON Hirschhorn: Så hvis du går til CS50.net, spørrekonkurranser, og deretter kan du bla over og få lysbilder fra gjennomgangen økten. Men du kan se dette er et godt eksempel av en SQL-injeksjon angrep. Vi tar litt informasjon fra brukeren og de gir oss en streng, og da vi vil sette inn strengen inn i en database. Vanligvis skal vi rense det inngang, noe som betyr at det ikke er noen tegn som er farlig. For eksempel, i SQL-strenger, disse sitatene - apostrof eller doble anførselstegn - bety noe. De mener avslutte denne strengen her. Og så hvis brukeren gir deg et enkelt eller et dobbelt anførselstegn, kan de være prøver å reise opp din SQL-spørring og sette noen dårlige ting i det. Og hvis de gjør det, kan de få kontroll av databasen, eller gjøre noen ting som du ikke vil at de skal gjøre. Så det er grunnen til at når vi tar SQL spørringer, desinfisere vi innspill før å sette den inn i databasen, noe betyr at vi unnslippe disse tegnene. Vi skal snakke om det i et sekund. Men lang historie kort, en SQL-injeksjon angrep er hvis du ikke gjør det - hvis du ikke tar vare på inngangs de ga deg før du setter din databasen, kan de, som du ser ned her, kjøre en spørring som, faktisk - de satt i koden sin her nede, og dette velger linje ned her vil velge alt fra tabellen uavhengig av hva passordet er gitt. Fordi du har den eller en lik en. Så det er i utgangspunktet, lang historie kort, en måte å ta over databasen. Spørsmålet er da, for dere, er hvor i p sett 7 gjorde du rense alle inngangene til SQL-spørringene? Hvor ble det skrittet skje? Hvor ser du forhindre SQL-injeksjon angrepene skjer i p satt 7? Yeah. PUBLIKUM: Crypt? JASON Hirschhorn: Så det ikke var krypten. Vi gjorde ikke gjøre deg gjøre dette for denne spesielt problem angitt, men det skjer i spørringsfunksjonen. Vi har faktisk skrev det for deg, og vi tok vare på desinfiserende innganger for deg. Men i år tidligere, har elevene hatt å skrive inngangene på egenhånd. I p sett 7, mange av dere - la meg åpne opp en annen fil. Så du vil merke opp her mye av mennesker, i oppgavesettet 7, ikke ringer denne funksjonen på strenger. Denne funksjonen, htmlspecialchars, igjen - denne strengen kan ha noen ting at i HTML bety noe annet. Som en spenne, en firkant eller en vinkel brakett bety noe i HTML. Og så hvis du skriver det ut til skjermen, eller hvis du bare ta det og skrive det ut til HTML, at makt gjøre noe du ikke forventer. Så htmlspecialchars går over alle dem tegn som har spesiell møte og rømming dem. Så det blir skrevet ut som tekst du ønsker å se, heller enn skru opp din HTML. Vi kalte den funksjonen i overskriften. Og mange mennesker har glemt å ring som funksjon i koden du skrev. Så, for eksempel hvis en lagernavn hadde en vinkel braketten i det, og du glemte å kalle denne funksjonen, den vinkelen brakett kunne ha kastet av hva HTML så ut. Men å kalle denne funksjonen vil flykte at slik at det faktisk skrives ut som en vinkel brakett og kaster ikke av HTML-koden. Den samme grunnen til at vi har sett, noen ganger, flenger før doble anførselstegn i en printf linje fordi vi ikke vil at anførselstegn nedover strengen. Vi ønsker å skrive dem ut til skjermen. Så alt av dette er den samme idé. Besvarer det spørsmålet ditt? PUBLIKUM: Kind of. JASON Hirschhorn: Har du ha en oppfølging? PUBLIKUM: Jeg antar at SQL-injeksjon angrep har å gjøre med det? Jeg forstår ikke hvordan de to er beslektet. Hvorfor ville du gjøre de specialchars? JASON Hirschhorn: OK, så SQL injeksjon angrep er når du injiserer noen ondsinnede trenger til noens program, og de bare ta det og kjøre SQL-spørring med en streng du ga dem. Som du kan se her nede, at kunne være problematisk. Så på den måten du forebygge mot at er du tar deres streng at de gir du - så denne strengen akkurat her - og du rense den. Du unnslippe alle de tingene som er potensielt problematisk. Så du trenger ikke tolke dem som noe som betyr noe. Og et eksempel på at med HTML er denne funksjonen. Så det er den samme ideen her. Og jeg ble bare viser deg andre eksempler på når du har sett denne ideen før. Unnslippe brukerundersøkelser før utskrift den ut til en skjerm eller sette den inne i en SQL-setning. PUBLIKUM: Så i dette tilfellet brukeren er rote med programmerer. JASON Hirschhorn: Ja. Med alle disse sikkerhetsangrep, det er alltid generelt brukeren, eller noen, prøver å rote med deg, programmerer. Og disse er måter du kan forebygge mot dem. PUBLIKUM: Så jeg har et spørsmål om hash funksjoner. I Quiz 1 fra 2011, er det to spørsmål om ensidige hashes. Og jeg bare lurte hva det betydde. JASON Hirschhorn: OK, som quiz? 2011? PUBLIKUM: Yeah. PUBLIKUM: Quiz 1? PUBLIKUM: [uhørbart]. Det er som hashing et passord. Det er ikke å sette ting - JASON Hirschhorn: Hva siden ble det? PUBLIKUM: Jeg tror det var 9 eller 10, eller begge deler. JASON Hirschhorn: Greit, gå videre, Curt. Du kan svare samtidig som vi ser. PUBLIKUM: Jeg tror det er snakk om hashing et passord. Som, når noen går inn i et passord, du slå den inn i en kryptert ting. Det er passord hash, som er forskjellig fra en hash-funksjon som setter noe inn i en hash table. JASON Hirschhorn: La oss se. La meg trekke opp det de gi så svaret. Og så skal vi gå gjennom det. Så Curt ga et godt eksempel av en enveis hash. Når vi har sett dette før, vi ta passord og slå - huske, i p sett 7, noen kan ha et passord som er bare passord, men da det blir kryptert inn noen virkelig lange ting. Den enveis hash betyr at det er veldig enkelt å gå fra den ene vei til den annen, men det er veldig vanskelig å gå fra den andre vei tilbake. Og så du vet, når du ble sjekket folks passord i problemet satt 7, vil du ta deres - så, for eksempel, sier de ønsket å endre passordet sitt, spør du dem for sitt gamle passord. Du tok sitt gamle passord. Du kryptert det. Og så sammenlignet de to krypte snarere enn unencrypting den opprinnelige en, fordi det er virkelig vanskelig å gå den veien. Yeah. PUBLIKUM: Hvordan i dybden gjør vår forståelse av Telnet må være? JASON Hirschhorn: Hvis det ble nevnt kort i foredrag, bare en kort forståelse. Igjen tilbake til svaret til Avi er spørsmålet - jo flere ting kommer opp, jo mer sannsynlig det er du nødt til å være super kjent med dem. Hvis de har bare kommet opp i foredrag, det er bare ett sted. Men hvis de kommer opp i foredrag, seksjon, og en oppgavesettet, så du sannsynligvis nødt til å være super kjent med dem. Så jeg hadde et spørsmål fra tidligere om - er var høsten 2010 - Quiz 1, la oss trekke opp - dette spørsmålet på stabler og køer, som vi tilbringe en god del tid snakker om i foredraget, selv men vi gjorde egentlig ikke noen gang treffer det i avsnittet. Så dette spørsmålet er å gi deg en serie av kommandoer og spør deg hva blir trykket i dette tilfellet. Så dette er en helt rimelig spørsmål som kan bli spurt av deg gutta, og da dere bør være i stand til å svare på det. Så hvorfor ikke du ser på det for 30 sekunder, og deretter hvis noen ønsker å foreslå svar på meg, og så får vi gå gjennom det. Greit, som har et svar til spørsmål 27? Yeah. Publikum: Er det 1, 2, 3, 3? JASON Hirschhorn: Det er riktig. 27 er 1, 2, 3, 3. Så la oss se på hvordan vi fikk det. Først er vi sier, hvis s er en kø, hva som blir skrevet ut? Så en q er først inn, først ut. Vi har sett det før. Vi så bildet av folket venter på Apple Butikk for å kjøpe noen produkter. De første menneskene i er de første mennesker ut. De første tingene i en kø er de første tingene ut. Så hvis vi presse noe inn i en kø, du skyver en, så vi pop en. Pop betyr bare ta ut. I dette tilfellet, bare ta noe ut. Vi tar ut det første ting, det er en en. Så får vi sette ting vi skrive ned over her. Dette er ikke lenger i vårt køen. Da vi skyve på en to og en tre, og vi pop av det første. Igjen, fordi det er en kø. Så får vi en to, så vi satt på en annen 3 og kaller pop igjen. Våre tre er først. Og da vi hadde en hel haug med andre ting og samtale pop. Men igjen, siden dette er en kø, først inn, først ut. Vi tar ut det første som noen gang ble satt i. Det er vår tre. Og i dette tilfellet, vi trenger ikke bekymre deg om alle de andre tingene. Så det er om dette er en kø. Eventuelle spørsmål om en kø? En stabel er annerledes. Hva er forkortelsen vi har for å forstå en stack? PUBLIKUM: sist inn, først ut. JASON Hirschhorn: LIFO, tror jeg. Sist inn, først ut. Så vi så et eksempel på en stabel av skuffene i en spisesal. Uansett skuffen er på toppen blir plukket opp. Og så dersom nye skuffer kommer inn, blir de satt på toppen. Og så det som er på Toppen blir plukket opp. Så de skuffer på bunnen makt bli der en stund. I så fall, igjen, vil vi trekke dette ut. Vi trykker på en, så en er først i køen. Og vi pop noe av. Og det er bare én ting i det, så vi flytter en her nede. Deretter satte vi på to og tre og vi pop noe av. Men igjen, siden dette er en kø - eller det er en stabel, i stedet for - vi ta det som var i sist. Uansett er i siste kommer ut først. Og 3 er i siste. Så satte vi tre der nede, da Vi satt på et annet tre, og vi pop noe nytt. Til slutt satte vi på 4, 5, 6, og 7, og her vi pop. Og fordi det er en stabel, tar vi det som ble satt i fjor, og skrive det ned her. Så vi ender opp med en, tre, tre, syv. Er det noen som har spørsmål om stabler eller køer, eller dette eksempelet? OK. La oss gå tilbake til listen over emner. Ikke på den måten, på denne måten. Hvilke andre spørsmål folk har? PUBLIKUM: Jeg vet ikke hvor viktig dette er, men jeg ble forvirret av Forskjellen mellom forskjellige typer språk som markup, utarbeidet, tolkes. JASON Hirschhorn: Det er et godt spørsmål. Jeg tror det er noe viktig, så la oss gå over det raskt. De store språkene vi har sett så langt er C, PHP og Javascript, i form av programmeringsspråk. HTML, som du nevnte, er ikke et programmeringsspråk. Det er et kodespråk. Og så har vi CSS, som også er ikke et programmeringsspråk. Vi har også sett SQL, som ikke er et programmeringsspråk heller. Så SQL kan du skrive spørringer for en database. HTML er et kodespråk. Den definerer hvordan ting er strukturert. Og CSS kan du style ting. Det er trolig den grad for hva du trenger å vite om de tre. Men det er mer interessant å figur ut forskjellene mellom C, PHP, og Javascript. Så en av de største forskjeller som du nevnte, er hvordan de er kompilert, eller hva tilsvarende er. Så C er kompilert. Vi ville alltid kjøre en kompilator. Og så hvor er feil når du kjører C-kompilator? Hvor kommer den vise deg den feil i koden din? Hvordan vet du at det er en feil i koden i C? PUBLIKUM: Den viser deg i terminalen. JASON Hirschhorn: Den viser deg i terminal som du kompilering. Og hvis det er feil, det vil faktisk ikke kompilere den. Så du vet at det er feil riktige bort, på forhånd, før du selv kjøre koden din. Selvfølgelig kan du kjøre koden din og får en segmenteringsfeil, men som var sannsynligvis fordi du gjorde noen dum logikk ting. Men koden med teknisk alt riktig og kunne kjøre. Så C-kode blir kompilert på forhånd. Hva med PHP-kode? Hvor var feil i din PHP-kode? Hvordan visste du at du hadde feil i din PHP-kode? PUBLIKUM: Kjør tid? JASON Hirschhorn: Ja, når du ville kjøre den, ville du kjøre PHP-kode i ryggen. Og så ville du vise et skjermbilde. Du kan se noen ting på toppen, men så ville du se, som noen orange, stygge bordet. Og det vil gi deg et linjenummer og si, blah, blah, blah, slike ting fungerte ikke. Så PHP tolkes linje for linje og utføres på serveren. Og så resultatet er sendes over til deg. Flott. Utført i serveren linje for linje og deretter sendt over til deg. Og hvis det er en feil, vil det sende du feilen, men du kan ha fått noen ting på forhånd. Så noe av det kunne ha fungert, men senere, kanskje noen ting ikke har ikke fungerte. Hva med Javascript? Hvor fikk du se Javascript-feil? I p satt åtte, når du fikk en feil, hvordan visste du det? Hvor vil det vise seg? PUBLIKUM: I konsollen, på bunnen. JASON Hirschhorn: I konsollen, på bunnen. Det vil også gi deg linjenummer, og det ville vise seg på bunnen. Og Java ble ikke henrettet på serveren. Java ble sendt til datamaskinen din, og deretter når det var tid til å kjøre Java, var Java drives linje for linje på klienten, på din side. Ikke serveren, klientsiden. Og på samme måte, var det kjøre linje for linje. Og så når du ville få en feilmelding, det ville dukke opp nederst. I likhet med PHP, noe av det kan utføre, og deretter kan du få en feil senere. Dessuten er en liten motsetning PHP, hvis du fikk en Javascript-feil - si at du ikke gjør det riktig kode for en varselboks - du kan fortsette å kjøre programmet. Varslingsboksen ikke ville fungere, men programmet ville være fint. Bare kanskje at funksjonen ville mislykkes. Så det er noen av de største forskjell i forhold til hvordan disse språk, eller hvordan programkoden du skriver er faktisk evaluert. Det er også andre forskjeller gjelder - den største forskjellen vi har sett i form av variabler på de forskjellige språkene. Så kan noen gi meg en forskjell mellom variabler i de tre språkene? Ja. PUBLIKUM: I C, er de strengt skrevet. I de to andre, de er løst skrevet. JASON Hirschhorn: Og hva betyr det? PUBLIKUM: Det i C, må du deklarere typen av den variable når du deklarerer variabelen, som interbool eller røye. JASON Hirschhorn: Excellent. I C, vi hadde alltid å sette en form for en variabel. Og vi kunne ikke egentlig blande typer. Du kan ikke gjøre et heltall pluss en streng. Men som vi har sett i disse andre språk, du faktisk kan blande typer, og du aldri egentlig har å gi noe en type, noensinne. Så hvordan vet vi ting er variabler i PHP og Javascript? PUBLIKUM: I PHP, begynner de med et dollartegn. I Javascript, når du deklarerer dem, må du ha en bar. JASON Hirschhorn: Høyre. Så i PHP, begynner de med et dollartegn. I Javascript, må de ha bar, men noen ganger gjør de faktisk ikke må ha bar. Men det er riktig. Så det er en stor forskjell mellom variabler. Jeg tror de er trolig, utenfor toppen av hodet mitt, de to største forskjeller mellom disse tre språk. Men, ja. PUBLIKUM: Og omfanget av C variabler er begrenset til de klammeparentes, hvor de andre, det er bare liker, det dør hvis det er i en funksjon bare, men ellers, it '- JASON Hirschhorn: Høyre. Så omfanget er litt annerledes i C. Som du husker, klammeparentes definere omfanget av variabler. Så hvis det ble definert inn i et if tilstand, som er inne i en for løkke, variabelen bare finnes der. I Javascript, er hvis en variabel definert inne i en hvis tilstand - inne i en for loop - det vil eksistere for at funksjon, men det vil ikke eksistere utenfor denne funksjonen. Så omfanget er litt mer fleksibel i Javascript og PHP. Det svare på spørsmålet? OK, noen andre spørsmål? Vi kan gjøre fire flere minutter av spørsmålene, så vi vil hoppe i koding. PUBLIKUM: Kan vi gå inn i Ajax og snakke om hva det er? JASON Hirschhorn: Snakk med Avi etter. Han ba om at spørsmålet tidligere. PUBLIKUM: My bad. JASON Hirschhorn: Ingen grunn til bekymring. PUBLIKUM: Hva er egentlig JSON? JASON Hirschhorn: Hva er JSON? Hva er ditt spørsmål? PUBLIKUM: Bare veldig raskt, forskjellen print og ekko i PHP. JASON Hirschhorn: Hvorfor ikke google forskjellen mellom print og ekko? Liten forskjell. Ikke så stor av en avtale. Men du bør definitivt google det, og som vil gi deg et godt svar. JSON, trolig større av en avtale. Står for Javascript Object Notation. Og da har vi sett JSON blir brukt? Når har du sett - hvorfor du selv vet ordet JSON? Når har du sett det? PUBLIKUM: Når vi får aksjekurser for finans. JASON Hirschhorn: Så du så det når du var å få aksjekurser for finans. Og hvorfor gjorde du det? PUBLIKUM: Da vi var å hente all informasjonen kom i dette formatet. JASON Hirschhorn: Så du ville få - ja. Gå fremover. PUBLIKUM: [uhørbart] informasjon ut av et objekt? JASON Hirschhorn: Begge de satt sammen er svaret vi leter etter. Du ønsker informasjon fra denne annen webside. Og du håper at når du er få denne informasjonen, ville det være presentert for deg i noen form av standardisert format. Alle er sikkert kjent med kommaseparerte verdier. Du kan eksportere et Excel-regneark eller noen form for regneark som en liste over kommadelte verdier. Og komma dele alt de ulike feltene. Javascript Object Notation - JSON - er en annen type av standardiserte layout av ting. Og det er ofte hvordan vi tar frem informasjon fra våre Ajax spørringer. Så i dette tilfellet, vi fikk det fra Yahoo nettstedet. De returnere ting til oss i en JSON objekt. Og da vet vi, fordi det er en standard, hvordan det er kommer til å se ut. Så vi kan reagere gjennom matrisen som er returnert til oss, rekken av objektene som blir returnert til oss. Vi trenger sannsynligvis trenger å vite nøklene, men de som regel gi deg dokumentasjon på nettsiden når du henter noen JSON notasjon for dem. På samme måte kan du JSON kode et objekt. Så det er en funksjon JSON underst kode. Og slik at du kan ta et objekt som du har opprettet, JSON kode den, og gi det videre til noe annet, hvis du vil. Og JSON dekode finnes også for et lignende formål, eller for den motsatte hensikt. PUBLIKUM: Trenger vi å vite koding for hash tabeller og prøver? Eller trenger vi bare å forstå hvordan de brukes, konseptuelt? JASON Hirschhorn: Så, rekk opp hånden hvis du gjorde en hash tabell for p satt fire med en link liste. Eller p satt fem. Så det var et stort flertall av folket. P satt fem, seks, hvem vet. For lenge siden. Så de aller fleste av dere gjorde hash tabeller med link lister. Og fordi det er sannsynligvis mer felles tilnærming, og fordi vi har brukt mye tid på å gjøre link lister og hasj tabeller, bør du sannsynligvis være ganske kjent med hvordan å kode en hash tabell og en link liste. Og hvis du tenker tilbake på det problemet satt, det var ikke egentlig så hardt som du forventet. Og det var mye mindre kode enn du forventet. Jeg vil si at du bør vite hvordan du skal kode en hash tabell eller en link liste. Ikke at du vil bli bedt om det, nødvendigvis, men du bør sikkert vet det. Også, hvis du ser gjennom tidligere tester, Det har vært mye spørsmål om å skrive funksjoner på link lister eller dobbelt-lenkede lister. Det ser ut til å komme opp hvert eneste år. Høyre setter inn på en link liste, ikke sant slette fra en link liste, akkurat sett for en dobbelt-lenket liste, et cetera. Så det, føler jeg ganske komfortabel sier du burde vite det. For prøve, ville jeg si at du bør sikkert vet hvordan det fungerer, og kanskje gi noen pseudo for hvordan å kode det og sette det opp. Men det ville ikke være den verste i verden hvis du ikke vet hvordan du skal kode det i C. Det ville være flott hvis du visste hvordan å kode det i C, men jeg tror sannsynligvis pseudo for en prøve ville være det meste du trenger å vite for en prøve. PUBLIKUM: Ekstra kreditt? JASON Hirschhorn: Og samme med, hvis vi gå inn i binære søketrær, kanskje du trenger - og du har sett i det siste, Vi har gjort mye av - du vet hvordan binært søketre fungerer. Du bør trolig være i stand til å sette en opp i pseudo-kode. Men fordi det store flertallet av mennesker gjorde ikke det på problemet sett, vil jeg si det er trolig mindre viktig at du vet hvordan å kode og sette opp et tre sånn. Eventuelle andre spørsmål? Dessuten kan vi spørre dem gjennom som vi går gjennom noen problemer. OK, vi kommer til å gå videre. Hopp dette lysbildet for nå. Snakker av trær, er at den første spørsmålet jeg har til dere. Fordi dette er et problem. Jeg vil si det er svært sannsynlig at du vil få et problem som dette på din quiz spør deg å kode noen form for innsatsen, slette, søke, for en type av datastruktur vi har sett. Som kommer opp hvert år, og vi har brukt en mye tid i andre halvdel av dette semester går over disse datatypene. Så akkurat nå, jeg har definert en node i et binært søk treet. Og hva jeg vil at du skal gjøre er gitt et binært søketre som starter på denne noden stjerners rot, fullføre gjennomføring av funksjonen nedenfor, som skjer for å være et funn funksjon. Og gjøre det med og uten rekursjoner. Så jeg vil at du skal skrive to funksjoner. En gjør dette med rekursjon, en gjøre dette uten rekursjon. Og ikke anta at root vil være ikke-null. Så vi leter etter heltallet jeg i treet som starter på rot, og vi trenger å skrive dette rekursivt og iterativt. Yeah. PUBLIKUM: Så du vil at vi skal returnere true hvis vi finner det, og usann hvis vi ikke synes det. JASON Hirschhorn: Hvordan visste du det? Hvordan visste du det? PUBLIKUM: Jeg spurte først, men jeg var forutsatt, fordi det står bool på begynnelsen av funksjon. JASON Hirschhorn: Høyre. Det sier bool, så jeg trenger ikke engang å fortelle deg hva jeg forventer du å gå tilbake fordi det står rett der. Men det er riktig. Tilbake, sant eller usant. Så før du begynner, vil jeg anbefale, hvis du er ukjent med binære søketrær, raskt tegning et bilde av det å få forståelse, ikke sant. Det vil også hjelpe deg når du skriver koden din og sjekke det. Igjen, du har heller ikke så mye tid på quizen for å gjøre alle de tingene at vi ber deg om å gjøre. Så skrive pseudo-kode er svært nyttig. Og vi vanligvis gi om - hvis pseudo er perfekt riktig, er at vanligvis 50% på et spørsmål. Så det er ikke en fast regel, men hvis du bare skrive pseudo og det er riktig, er det vanligvis 50%. Så jeg vil alltid anbefale - hvis du er presset for tid, eller selv om du bare prøver å finne ut av det - starter med pseudo. Og til slutt, hvis du kunne skrive dette alt i C, vil det være fantastisk. Så la oss ta tre minutter å jobbe med dette programmet. Og så skal vi skrive pseudo for det bare én gang, og deretter vi kommer til å kode det rekursivt og deretter gjentatte ganger. Hvis du har spørsmål, føler gratis heve hånden. Glad for å gå rundt og svare på dem før vi starter som en gruppe. La oss fortsette, og vi kommer til å Pseudo den rekursive versjonen av dette, og da vil vi kode det. Så en rekursiv funksjon trenger to ting. Dette kan være et spørsmål som du kan bli bedt om. Trenger to ting. Hvem kan heve sin hånd og fortell meg hva de to tingene en rekursiv Funksjonen trenger? Per definisjon har to ting. Hva er de to tingene? Nye hender. Ja, Alden. PUBLIKUM: Så jeg er ikke helt sikker på om dette er terminologien, men - JASON Hirschhorn: Jeg er glad du heve hånden din. PUBLIKUM: Det er behov for en base case, og det er behov for en rekursiv trinn. JASON Hirschhorn: Perfect. Den trenger en base case og en rekursiv trinn. Så hva er vår base case her? PUBLIKUM: F rot lik lik null. Beklager, bare i pseudokode, hvis det er null. Hvis roten er null. JASON Hirschhorn: Hvis roten er null. Det er utmerket. Det er vår base case. Det er det vi skal å sjekke hver gang. Og base case er første du gjør. Hvis du treffer base case, er du ferdig. Nå trenger vi vår rekursive kall, og jeg vil være villig til å satse vi trenger et par rekursiv kaller her. Fordi det er et tre, og vi kunne gå flere måter. Så hvis rot er null, er vi godt. Hva foreslår du? Og nå skal jeg begynne å ringe ut på dere, fordi jeg vet dere alle vet dette. Men Annie, hva skal neste linje være? Hva om vi fant det? Hva gjør vi? PUBLIKUM: Hvis vi fant det? JASON Hirschhorn: Eller hva bør være det - gi meg den pseudo for linje der vi fant det. PUBLIKUM: Hvis jeg er lik roten jeg? JASON Hirschhorn: Og så hva skal vi gjøre? PUBLIKUM: Return sant. JASON Hirschhorn: Great. Så hvis jeg er i - Åh, de er begge kalt jeg. Det blir forvirrende. Men hvis jeg er jeg returnere true. Det er trolig den neste ting vi bør gjøre. Er fornuftig. OK, nå har vi ikke gjort vår rekursive ringe ennå, skjønt, fordi en rekursiv samtale vil kalle denne funksjonen igjen. Så hva bør neste linje av pseudo være? Anna. PUBLIKUM: Venstresiden. JASON Hirschhorn: Vær konkret, though. Dette er et binært søketre, så hva ikke sjekker venstre side innebære? PUBLIKUM: Så node - Jeg beklager, rot. Og så arrow venstre. Node, node, beklager. Jeg leser ikke det riktig. Det kalles node, ikke sant? JASON Hirschhorn: Det vil bli kalt root i den funksjonen, men uansett. Den venstre siden - ja? PUBLIKUM: Hvis det ikke er lik jeg, så vi kommer til å ringe funksjonen igjen? JASON Hirschhorn: Det er riktig. Hvis det ikke er lik i, vi skal å kalle funksjonen igjen. Men hvilken side av treet skal vi å kalle funksjonen igjen? PUBLIKUM: På venstre side. JASON Hirschhorn: Vi er ikke alltid kommer til å kalle det venstre, hvis det ikke lik det. PUBLIKUM: Oh, sorry. Ring til høyre. JASON Hirschhorn: Vi vil vite spesielt, men - husk, i en binært søketre, alt til venstre side er mindre. Alt til høyre side er større. Så det er bare ikke - ja, gå videre. PUBLIKUM: Hvis det er mindre enn jeg, da - hvis det er til venstre - JASON Hirschhorn: Så hvis ri er mindre enn - så hvis våre tall er mindre enn jeg, hvilken side ønsker vi å gå til? PUBLIKUM: Vi ønsker å gå på den høyre siden. JASON Hirschhorn: Vi ønsker å gå - la meg trekke en rask tre. Hvis dette er 5, vil dette være tre. Så hvis ri er mindre enn fem, hva side ønsker vi å gå til? PUBLIKUM: Sorry, hva? JASON Hirschhorn: Nummeret vårt er mindre enn antallet vi er ser på akkurat nå. PUBLIKUM: Oh, så vi ønsker å gå til venstre side. Yeah. Unnskyld. JASON Hirschhorn: Nettopp. Ingen grunn til bekymring. I det binære søketreet, alt lavere er til venstre, større er til høyre. Så hvis våre tall er mindre enn det jeg vi sjekke - fordi du ser på node, har det en i - da ønsker du å gå til venstre. Og dette er en enkel en. Hva er det den andre linjen av pseudo vi trenger å skrive? Carlos? PUBLIKUM: Samme greia, du bare slå den til en større enn skilt og gå til høyre. JASON Hirschhorn: Kan du si det en gang til? PUBLIKUM: Hvis våre tall er større enn jeg, gå til høyre. JASON Hirschhorn: Excellent jobb på pseudo. La oss gjøre dette i det virkelige kode. Og igjen, vil dette pseudo sannsynligvis få deg, fordi det er riktig, 50% på dette spørsmålet. Men dette pseudooversetter også en til en, i det vesentlige, i koden. Så la oss gjøre dette i C. Hvem kan gi meg den første linjen med kode? Egentlig først, før jeg gjør det, la meg trekke over - PUBLIKUM: Jeg har et spørsmål. Hvorfor gjorde du rykke inn linje jeg ga deg? JASON Hirschhorn: Fordi Jeg kunne ikke skrive. Jeg vet ikke. Du har rett. At linjen skal være der borte. OK, her er vår funksjon. Og la meg trekke over, også, vår definisjon av en node. Hva skjer hvis vi ikke skrive typedef? Er det noen som vet? PUBLIKUM: Det ville ikke kompilere. JASON Hirschhorn: Det ville kompilere, ja. PUBLIKUM: Ville det bare erklære en eksempel i stedet for å gjøre det til en ny type du kunne erklære flere forekomster av? JASON Hirschhorn: Så det ville ikke vet - det ville ikke bare erklære én type. Du kan fortsatt gjøre mye av noder. PUBLIKUM: Men ville ikke vi må skrive struct node hver gang? JASON Hirschhorn: Det er riktig. Du må skrive struct node hver gang, i stedet for bare node. Men med typedef, kan du bare skrive node hver eneste gang. OK, hvem har ikke gitt - ja, Avica. PUBLIKUM: Hvis root tilsvarer likemenn null, returnerer false. JASON Hirschhorn: Great, og det er vår base case. Neste linje med kode. Noen som ikke har gitt meg en linje med kode ennå? Yeah. PUBLIKUM: Root pilen i er lik lik i. Deretter returnere true. JASON Hirschhorn: Great. Neste linje? Yeah. Noen andre? Og så kan du gå videre. PUBLIKUM: Else hvis root pilen jeg er mindre enn jeg tilbake funksjon som heter find root - JASON Hirschhorn: Beklager. PUBLIKUM: Return find root peker til venstre komma jeg. JASON Hirschhorn: Så hvis ri er større enn ting i treet, vi ønsker å gå til venstre? PUBLIKUM: Nei, jeg hadde det byttet. JASON Hirschhorn: Hvem av dem? PUBLIKUM: Nei, ja. Jeg har en mindre enn signere der. JASON Hirschhorn: Høyre, hvis ri er mindre enn hva som er i roten - vår nåværende rot - så vi ønsker å gå til venstre. Og hva er den siste linjen, du? PUBLIKUM: I utgangspunktet det samme, bortsett slå større enn eller lik mindre enn, og fra venstre mot høyre. JASON Hirschhorn: Excellent. Er det noen som har noen spørsmål om dette? Så noen andre ting som ville har vært riktig, er at kunne være-ltiff. Gjett, teknisk sett, ingen av disse virkelig trenger også å være-ltiff. Også, er det sannsynligvis bare ett tilfelle her nede. Så det er trolig det siste tilfellet. Du trenger ikke engang at-ltiff. Men sannsynligvis godt å skrive det, for å være klar. Yeah. PUBLIKUM: Så du tror ikke det quiz - Hvis vi gjøre feil, for eksempel, i syntaks - lite syntaksfeil - hvordan det blir tatt i quiz? JASON Hirschhorn: Vanligvis på quiz, liten syntaksfeil eller liten stil feil ikke mister du poeng. Så hvis du har glemt et semikolon her, ville det være OK. Hvis du glemte å lukke dette parentes, det ville være OK. Enorme syntaksfeil som endrer funksjonelle betydningen av koden din dramatisk, kan du få tatt av poeng for. Eller generelt, bare gradering deg på hvorvidt din kode funksjoner, selv - ikke sitt design så mye, og ikke sin stil. La oss nå kode en iterativ versjon av funn. Så det kommer til å være ganske lik, men det er sikkert kommer til å være noen viktige forskjeller. Men vår pseudo kan trolig gå - Vi kan fortsatt ta en linje i pseudo og finne ut hva linjen er i dette tilfellet. Så i en iterativ versjon, hva tror du, Julia, bør være den første linjen? PUBLIKUM: Igjen, i iterativ boolean, du trenger for å sette opp en for loop, ikke sant? JASON Hirschhorn: OK. PUBLIKUM: Så for like, k, for x er lik 0, x er mindre enn i. Eller nei, er x mindre enn størrelsen av treet. JASON Hirschhorn: Treet. Så vi ikke helt vet størrelsen på treet, og vi vet egentlig ikke for hvor mange ganger vi kan gå, så hva er en annen type løkke som kan være bedre i dette tilfellet? PUBLIKUM: Dersom annet? JASON Hirschhorn: Dersom annet kan ikke være en løkke. Så hva er en type løkke vi kan bare gå før noen tilfelle er oppfylt? Hva er den eneste andre type løkke i C foruten en for loop? PUBLIKUM: Selv. JASON Hirschhorn: Mens, akkurat. I en stund loop, gjør ikke trenger å vite hvordan - en stund loop og for loop kan gjøre akkurat det samme, men det fine om en while-loop er at vi ikke trenger å vite hvor stor vår treet er. Så vi kommer til å gå helt til hva? PUBLIKUM: Inntil det tilsvarer størrelsen - JASON Hirschhorn: Vel, det er veldig lik vår rekursive tilfelle. Så - PUBLIKUM: Mens root Jeg er ikke lik jeg. JASON Hirschhorn: Det er veldig nær. Mens rot i - la oss prøve det. Jeg tror ikke [uhørbart] hvor root jeg ikke lik jeg. Vi må kanskje endre den i en litt litt, men det høres ut som det er ganske bra, for nå. Så vi vil gjøre det. Husk også, vi kan ikke anta per spørsmålet. Du trenger ikke anta at root vil være ikke-null. Så hva tror du det aller første vi bør gjøre er? PUBLIKUM: Bare gjør det samme ting som før. Hvis roten tilsvarer likemenn null, returnerer false. JASON Hirschhorn: Great. Så det kan være null. Så vi ønsker å bli kvitt av det med en gang. Og så skal vi sjekke om root jeg ikke lik jeg. Så sier vi søker i dette treet for 3, rot i ikke lik i, nå vi er i vår mens loop. Hva ønsker vi å gjøre? Og igjen, det kommer til å være ganske lik vår rekursive versjonen. Yeah. PUBLIKUM: Så du ønsker å veksle, eller holde det gående ned treet så lenge roten er ikke lik null. JASON Hirschhorn: Så lenge root er ikke lik null? PUBLIKUM: Roten dash jeg er ikke lik null. Bare rot, ja. Som en lenge roten er ikke lik null. JASON Hirschhorn: Så du vil å endre dette til roten ikke lik null? PUBLIKUM: Yeah. PUBLIKUM: Vi kunne kombinere disse, ikke sant? Vi trenger ikke hvis, i første omgang. JASON Hirschhorn: OK, så hvis vi gjør ikke - hvis vi kombinerer dem, så vi kommer til å gjøre mens roten er ikke lik null, og hvis roten skjer for å være null ved begynner, hva gjør vi her nede? PUBLIKUM: return false. JASON Hirschhorn: Great. Så begge veier trolig ville ha fungert. Dette er en annen måte, og dette kombinerer det. Men igjen, hvis du gjorde uansett, er vi ikke kommer til å ta av utforming peker på quiz. Men dette ser bra ut. Så mens roten er ikke lik null, hva som er den første ting vi ønsker å sjekke? Noen andre? Null, hva er det første? PUBLIKUM: Hvis ri er mindre enn - oh, tror jeg, hvis vi allerede fant det i roten. Så hvis rot pilen i er lik i - JASON Hirschhorn: Sorry? PUBLIKUM: Hvis root pilen jeg er lik lik i - JASON Hirschhorn: Hva gjør vi? PUBLIKUM: Return sant. JASON Hirschhorn: Great. Og hva blir det neste? Jeff, hva er neste linje med kode? PUBLIKUM: Hvis jeg er mindre enn roten pilen jeg, så rot tilsvarer root pil venstre. JASON Hirschhorn: Root likemenn root pil venstre. Så det er trolig den største Forskjellen her i denne iterativ versjon i motsetning til den rekursiv versjon. Den rekursive versjonen, vi kaller funksjonen igjen. Vi kommer til å oppdatere root når vi kaller den nye funksjonen. Her har vi ikke kaller en ny funksjon. Vi er rett og slett bare å oppdatere rot i denne funksjonen. Det er utmerket. Og hva er den siste linje av koden? Ja, Mario? PUBLIKUM: Else rot likemenn root pil høyre. JASON Hirschhorn: Sorry? PUBLIKUM: Root likemenn root pil høyre. JASON Hirschhorn: Kan du også skrive noe sånt som dette? PUBLIKUM: Jeg har ingen anelse. JASON Hirschhorn: Du kan ikke. Du kan ikke gjøre pluss likemenn. OK, så dette ser bra ut. Hvorfor kan ikke vi bare gjøre det å rydde opp. Dette ser bra ut, og dette ville fungere. Og vi ville bryte ut. Hvis root venstre var null eller rot høyre var null, ville vi komme opp her. Root ville være lik null. Vi ville bryte ut av vår sløyfe, og vi vil returnere false. Så når vi bryter ut av loop, returnerer vi false. Og igjen, en stund løkke var perfekt her fordi vi ikke vet hvordan big vår treet er. Vi prøvde å skrive for loop, men vi skjønte du er nødt til å finne ut hvordan stort det er forut for sin tid. Yeah. PUBLIKUM: Hvis dette ikke var en binær søketre, ville det være ekte matematikk-y å skrive det iterativt, ikke sant? Som, hvis det var et tre, men ikke nødvendigvis - så det var ikke alle mindre på venstre, og alle større på høyre side. Det ville være veldig vanskelig å iterere over det, ikke sant? Vi måtte redde det som var tidligere on i treet, og gå tilbake, og sånt. JASON Hirschhorn: Hvis det var ikke en binær søketre, hvis det var bare en treet og ting var ikke sortert som dette - og vi innså tidligere når Anna hjalp oss at det å gjøre det sorterte hjelper oss mye - vi trenger å, ja, alltid spare der vi var tidligere. Men det kan være mye av hvor vi var previouslys. Det kan være mye av overordnede noder. Sannsynligvis den beste måten å gjøre det ville være å holde skyve ting inn på noen type stack eller kø. Du vil aldri trenge å kode dette fordi det er et vanskelig problem. Men du presse noen ting på en stabel eller kø og deretter pop dem av, og deretter vurdere dem. Og så har noen andre ting der du er faktisk å sette nodene, og deretter lage det, og deretter søke gjennom det. Det kan være den beste måten å gjøre det. OK, noen spørsmål om dette problemet? Målgruppe: Dette er på et beslektet notat. Vil vi må sammenligne kjøretider for hash tabeller, binær søketrær, et cetera? JASON Hirschhorn: Sannsynligvis. Så la oss gjøre det veldig raskt. Kjør tid for hash table - hva er de andre? Binære treet? PUBLIKUM: Link lister. JASON Hirschhorn: OK, la oss gjøre innsatsen. Hva er den store O av innsatsen på en hash table? Hva er forutsetningene du gjør? PUBLIKUM: Du setter på begynnelsen av linklisten. JASON Hirschhorn: Sannsynligvis den første forutsetningen er at det er ingen kollisjoner. Hvis det ikke er noen kollisjoner, deretter innsetting tid er ett. Hvis det er kollisjoner, og du er gjør separat kjeding og innsetting ved begynnelsen av koblingen listen deretter innsetting er også konstant. Hvis du gjør en hash-tabell, men du har en annen metode for å håndtere med kollisjoner, hva er en annen metode? Hva er er en annen metode for å håndtere kollisjon i en hash table? PUBLIKUM: Lineær programmering. JASON Hirschhorn: Lineær programmering. Så vi kommer til å holde utkikk for den neste åpne sted. Det er ikke konstant innsetting tid. Du kan ha til å gå gjennom hele bordet, slik at kunne være stor O n. Yeah. PUBLIKUM: Ellers bare kjeding? JASON Hirschhorn: Vi gjorde separat kjeding. Det var den første. Det er det linklisten. Den fancy navn er separat kjeding. Det kan være hvilken som helst type liste struktur vi tilfeldigvis gjøre i linklisten. Så igjen, innsetting på en hash table kan være konstant tid. Hva om innsetting på en stable kø? PUBLIKUM: Er ikke det konstant? JASON Hirschhorn: Det er konstant tid. Du bare presser den på. OK. Innsetting, hva var de andre? På en prøve? Hva er big O for innsetting på en prøve? PUBLIKUM: Lengde er konstant. Lengde på den lengste - lengden av ordet du setter inn. JASON Hirschhorn: Sorry? Vent, så hva gjorde jeg hører? Du sa - hva sa du? Hva var svaret, Marcus? Publikum: Lengden av ordet du setter inn i tegn, forutsatt at det er et tegn prøve. JASON Hirschhorn: OK, så lengden av ordet. Vi vil gjøre en antagelse om at det er en rekke tegn. Du sa noe annet, skjønt. Du sa lengden på lengste ord. PUBLIKUM: Det er bare konstant, ikke sant? JASON Hirschhorn: Hvorfor skulle det være konstant? PUBLIKUM: Som, hvis du bruker store O notasjon, så er det ikke varierer baserte på rekke ting som er allerede i prøve. JASON Hirschhorn: Så vi ville si det er konstant tid. Den er konstant innsetting, og det er fordi denne ideen - si at vi har et ord som er 45, eller et ord som er 60, at har et konstant tall. Og det ville bare bli satt inn i konstant tid. I praksis skjønt, ville det ikke være, åpenbart, skje i ett millisekund, for eksempel. Men vi vil si stor O er konstant for en prøve. Og det er en av dens største fordelene. Hva om innsetting i en kobling liste? Bare en generisk, sortert kobling listen? Yeah. PUBLIKUM: Jeg hadde et spørsmål. På testen, ville de noen gang spørre oss innsetting tid som er fire trinn, eller noe? Eller er det bare - når du sier innsetting tid er ett, det betyr bare konstant tid? JASON Hirschhorn: Ja, ville de alltid spørre, er det stor O for n? Big O av log n? N squared konstant. De er egentlig den eneste de du trenger å vite. Hva om innsetting på sortert kobling listen? PUBLIKUM: Jeg hadde et spørsmål - et spørsmål - JASON Hirschhorn: Hva er svaret på det spørsmålet, skjønt? PUBLIKUM: Vent, hva gjorde du spør? JASON Hirschhorn: Hva er big O av innsetting i en sortert kobling liste? PUBLIKUM: One? Nei vent, Nei vent, n. JASON Hirschhorn: N. Dess linklisten. Og hva var spørsmålet ditt? PUBLIKUM: Så ville du skrive o av k eller o av en for - JASON Hirschhorn: Oh. Jeg ville skrive o av en, sannsynligvis. Det var en annen datastruktur som ville ha vært bra. Treet, binært søketre. Hva er innsetting på en binært søketre? PUBLIKUM: Logg inn. JASON Hirschhorn: Så, hva er det verste tilfelle i et binært søketre? Så hvis vi tilfeldigvis å starte på 5, og hver tallet er større enn 5, og deretter vi har fått 5, 7, 9, 11, et cetera. I dette tilfellet, er det i utgangspunktet bare en link liste, og vi må sette inn alle helt til slutt. Så det er stor O n. Det kan bli vår verste fall på et binært søketre. Selvfølgelig ville du aldri konstruere et binært søketre med fem i midten, vel vitende om fem ville være det laveste tallet. Men det kunne være, hvis du er starter fra scratch. Eventuelle spørsmål om dette før jeg gå videre til et annet spørsmål? Det var et godt spørsmål. Jeg ville vite big O av - PUBLIKUM: Hva om søking for de fire? JASON Hirschhorn: Definitivt vi gjorde søking og sortering. Vi gjorde alle disse algoritmene, ikke sant. Vent, var at for Quiz 1? Ble som dekket - visste du allerede har denne Spørsmålet på Quiz en? Den store O runtime av binære søk, innsetting sortere, boble slag? PUBLIKUM: Yeah. JASON Hirschhorn: Hvis du hadde som Spørsmålet om Quiz 0, oddsen er du ikke vil få de samme spørsmålet på Quiz en. Fortsatt kunne være godt å vite disse. Du bør forhåpentligvis vite gh allerede. Men andre logaritmiske kjøretids er trolig godt å vite. Ting som ikke var dekket på Quiz 0. Som alle disse aktørene på disse abstrakte datatyper. OK, la oss gå videre. Dette bør man være ganske rask. Og dette er et nytt språk vi ikke har faktisk kodet i før. Dette er et spørsmål som spør å kode i PHP. Så vurdere PHP array nedenfor. Skriv PHP og / eller HTML-koder slik at det en tabell med to kolonner med TFs utganger navn og hus. Du har aldri gjort dette før, dette spesifikke problemet. Men dette bør være veldig kjent for hva du gjorde i oppgavesettet 7. Så jeg ville være villig til å vedde på at du vil være bedt om å kode noe i PHP som er svært likt det du gjorde i oppgavesettet 7. For det første, er array ikke så spesifikke. Hva slags matrise er dette? PUBLIKUM: Assosiativ. JASON Hirschhorn: Det er en assosiativ array. Og hva er forskjellen mellom en assosiativ array og et objekt? PUBLIKUM: Et objekt matrise har en indeks av heltall, og en assosiativ array er en indeks av en streng, eller noe sånt. JASON Hirschhorn: Så en rekke objektene ville ha indekser av heltall, men et objekt har felt. Det har disse feltnavn som navn, house, student. Har du en idé? PUBLIKUM: Vel, assosiativ matrise er i PHP, ikke sant? Og objektet er i Javascript? JASON Hirschhorn: Ærlig talt, det er ingen reell forskjell mellom de to. Begge har strenger som nøklene, og kan har i utgangspunktet noe som verdien. Ulike språk kaller en ting assosiativ array, en ting til et objekt. Så ærlig, er det ingen reell forskjell, men det er sikkert noen syntaktiske forskjeller mellom de to. Yeah. PUBLIKUM: Så er objektet også kodes i henhold til hetten som en hash table, da? JASON Hirschhorn: Hva gjør du mener, kodet under panseret? PUBLIKUM: Vi ble fortalt at assosiativ matrise var teknisk sett en hash table. Så er objektet også teknisk en hash table? JASON Hirschhorn: Jeg kommer ikke til å svare på det spørsmålet. Jeg vil komme tilbake til deg på det. Men jeg ville ikke tenke på enten av dem sånn. Men, på noen måte, assosiativ array og objekt, generelt, folk bruker de begrepene om hverandre. I dette tilfellet er den kjølige del er at du kan bruke tastene. Strenger som nøkler, snarere enn bare enkle tall. Så jeg har snakket om dette for en stund. Forhåpentligvis, noen mennesker har fått startet på dette. Vi kommer til å skrive litt PHP og HTML kode, slik at vi får en to-kolonne tabell med TFS navn og hus. OK, jeg også ønsker en header rad på denne tabellen. Så jeg kommer til å få rett inn i dette. Vi kommer til å sende inn, nye, og vi kommer til å - OK. Hvordan starter jeg et bord? Hva er koden, Michael, å starte et bord? PUBLIKUM: Table. JASON Hirschhorn: Table. Og hvis jeg åpner en tag, hva mer trenger jeg? PUBLIKUM: Et hode? Eller, jeg gjette, klasse. JASON Hirschhorn: Så, beklager. Anta at vi allerede har skrevet doctab, HTML, alt det der. Men hvis jeg åpner denne tabellen tag, hva ellers må jeg skrive? for validere HTML? PUBLIKUM: Lukk det. JASON Hirschhorn: Lukk tag. Hvordan skriver jeg en nær-table tag? PUBLIKUM: Dot slash tabellen. JASON Hirschhorn: Slash bord, stor. Sannsynligvis er fornuftig å skrive både av dem sammen fordi du er nødt til å gjøre det. OK, hvis jeg vil ha en header rad, hvordan Jeg skriver en header rad med titler? PUBLIKUM: Er det mindre enn 10 hr nær - TR, ja. JASON Hirschhorn: TR? PUBLIKUM: Da samme, skråstreken, ja. JASON Hirschhorn: OK, og gi meg to kolonner. PUBLIKUM: T D? JASON Hirschhorn: OK. Jeg vil ha to kolonner. Betyr dette gi meg to kolonner? Hvor mange kolonner er dette? One. Så la oss kopiere og lime inn denne. Så egentlig, på quiz, all denne koden at vi har skrevet så langt var faktisk gitt til deg. Men du bør nok fortsatt vet hvordan du skal skrive det. Yeah. PUBLIKUM: Huset ditt er mellom de to. JASON Hirschhorn: Boom. Det bør gå rett der, ikke sant? God samtale. Så igjen, er alt denne koden faktisk gitt til deg på selve quiz. Men det er gøy å skrive det, og du bør vite hvordan du skal skrive det. Så det er her du trenger å starte din kode. Hva trenger vi å skrive akkurat her? Sorry, jeg trenger å endre navnet på denne filen. Så vi lagret det i en. HTML-fil, ikke i en. PHP-fil. Disse tingene ville bety noe i en. PHP-fil. Så vi er i en. HTML-fil. Hva er det første Jeg trenger å skrive? Jeg ønsker å sette noen PHP kode i en HTML. PUBLIKUM: PHP, som en annen gulrot og spørsmålstegn PHP, ikke sant? JASON Hirschhorn: Great. Og hvordan kan jeg få slutt på denne? PUBLIKUM: Med et spørsmålstegn. JASON Hirschhorn: Det er flott. Det er det første jeg må hvis jeg vil å sette noen PHP-kode i her. PUBLIKUM:. Jeg trodde en PHP filen, kan gjøre HTML. JASON Hirschhorn: Yeah. A. PHP-filen kan ta litt HTML og vises. Det var min feil. Jeg prøvde bare å etterligne hva det var på quiz. OK, beklager å forvirre deg. Ja, practice.HTML. Nå skal vi sette noen PHP-kode i. Hva er den første linjen i PHP-kode jeg skal skrive? Jeg kommer til å gå gjennom denne matrisen og gjøre den om til et bord. Yeah. PUBLIKUM: Du kan enten bruke en for H løkke eller en for-løkke. JASON Hirschhorn: OK, hva ønsker du å bruke? PUBLIKUM: Jeg ville bruke en for-løkke. For, og så gjør du dollartegn jeg er lik 0 semikolon dollar signere jeg mindre enn to. Og så semikolon i dollar signere i pluss pluss. JASON Hirschhorn: Hvordan du vet å bruke en 2? PUBLIKUM: Fordi det var to assosiative arrays innenfor større assosiativ array. JASON Hirschhorn: Så det store ting er ikke advokatfullmektig array. Den store tingen er bare en vanlig array. Men du har rett, det er to assosiative arrays inne våre større utvalg. Det er derfor du bruker to. Jeg føler meg ukomfortabel forutsatt at de er to, så hva er en måte å skrive dette uten forutsatt at de er to? PUBLIKUM: [uhørbart]? JASON Hirschhorn: OK, hvordan skriver du det? PUBLIKUM: foreach dollartegn TFS eller lignende dollartegn tf. JASON Hirschhorn: OK, så for hver tfs som tfs, jeg vil, nå igjen, har mitt bord. Så hvem kan gi meg neste linje med kode? PUBLIKUM: Skriv ut, og deretter i sitater, brakett tr slutten brakett, sitat slutt. End parentes, semikolon. JASON Hirschhorn: OK, og hva som kommer til å gjøre? PUBLIKUM: Det kommer til å si, ny rad. Det kommer til å sette tagge for en ny rad. JASON Hirschhorn: Høyre, dette PHP, som vi snakket om tidligere - dette PHP kommer til å bli evaluert, og deretter det kommer til å skrive ut til denne filen en Tabellen slep, og deretter at HTML vil bli evaluert. Vi er bare å kopiere dette HTML vi hadde her oppe. Yeah. PUBLIKUM: [uhørbart]? JASON Hirschhorn: Sorry? Det er rett her. Fall 2012. Ikke se på svarene, la oss løse det sammen. Så vi skriver ut tabell rad. Så du er sannsynligvis i swing ting. Hva er neste linje kode må vi skrive? Assam, gi meg neste linje med kode. PUBLIKUM: Du trenger tf navn. Tf åpen parentes anførselstegn nevne lukkede parentes. JASON Hirschhorn: Gi meg deres navn. PUBLIKUM: Du må skrive ut som. [interposing VOICES] JASON Hirschhorn: OK, hvordan kan jeg skrive det? [interposing VOICES] JASON Hirschhorn: jeg mangler noe nå. Hva er det jeg mangler? PUBLIKUM: Du trenger et dollartegn. JASON Hirschhorn: Hva ellers er det jeg mangler? Alt vi har skrevet så langt er den st. PUBLIKUM: Lukk st etter det. JASON Hirschhorn: Så vi trenger å lukke tr etter. Hvem ser hva vi mangler på linje 16? Ja, Anna. PUBLIKUM: Du må åpne en td og klammeparentes. JASON Hirschhorn: Og der skal vi sette klammeparentes? PUBLIKUM: Rundt tf navn. JASON Hirschhorn: Liker du dette? PUBLIKUM: Yeah. Og så lukker du td. JASON Hirschhorn: Sånn? PUBLIKUM: Har du behov for dobbeltanførsels tegn ved siden av klammeparenteser? JASON Hirschhorn: Akkurat her? Nei, det gjør du ikke. Så det er helt riktig. Yeah. PUBLIKUM: Så forskjellen mellom det og encatenating med prikker er, hvis du bruker prikker, vil du være nødt til å ha den doble anførselstegn, deretter en prikk, da dot - JASON Hirschhorn: Riktig. Så du sier det er en endelig måte å skrive dette sånn. Hva sammensetning operatør i Javascript? PUBLIKUM: Et plusstegn. Du glemte å sette krøllete spenne tilbake. JASON Hirschhorn: Great. Og det er enda en tråd kode mangler. Hvem kan gi meg den siste linjen med kode vi mangler? PUBLIKUM: Bare akkurat det samme, bare med huset i stedet for navnet. Flott JASON Hirschhorn: Great. Og syntaksen er helt riktig for å få ting i et tilknyttet array. Så i selve quizen, er du faktisk gitt opp til her. Så denne koden ble gitt til deg. Alt du måtte skrive var disse fire linjer og husk å lukk tabellen taggen. Dere faktisk gjorde alt dette og mer. Yeah. PUBLIKUM: Så det ville være funksjonelt det samme hvis du bare hadde som alle i ett stort trykk samtale, ikke sant? Og så bare sammenkjedet det på, et cetera? JASON Hirschhorn: Sånn? PUBLIKUM: Yeah. Det ville ikke bare se bra ut hvis du var se på det når du inspiserer elementet på nettstedet ditt, ikke sant? JASON Hirschhorn: Jeg er enig. Hvis jeg lastet denne websiden, ville jeg være stand til å se denne PHP-koden, noensinne? PUBLIKUM: Nei. JASON Hirschhorn: Nei. Og faktisk, det ville jeg ikke. Målgruppe: Dette er ikke HTML, ikke sant? Så du kan være i stand til - JASON Hirschhorn: Så dette PHP ville evalueres server side. PHP er alltid evaluert serversiden, så du er aldri i stand til å se PHP-kode. PUBLIKUM: Men du ville være i stand til se resultatet av utskrifter. JASON Hirschhorn: Høyre. Og det ærlig kanskje ikke sette det hele på linjen. Det kan formatere det fint for deg, eller det kan sette den på en linje. Uklart. Men ja, godt poeng. PUBLIKUM: Hvordan kommer det er ingen tekstutheving for noen av PHP kommandoer? Fordi jeg husker det. JASON Hirschhorn: Fordi det er en . Html-fil her oppe på toppen. Der du går. PUBLIKUM: Hvis vi gjorde den første metoden med for looper, ikke sant, hvis vi ønsket å få tilgang til en TFS, ville vi gjøre TFS brakett 0 brakett, deretter [Uhørbart]? JASON Hirschhorn: Du ville - så du sier for for loop, du ville gjøre i dollartegn TFS brakett 1 eller jeg, ikke sant. Eller dollartegn jeg lukker brakett og deretter hakeparentes doble anførselstegn, ja. OK, utmerket. Vi har enda en rask en. Syv minutter, så jeg vil å gå over dette. Dette er et annet eksempel. Vi er nå et helt annet språk. Vi har noen HTML-kode. Det er litt små på skjermen, men Jeg vil du skal se gjennom det virkelig raskt, og kan noen fortelle meg, hvis jeg skulle laste denne web-siden, hva jeg ville se? Beskriv alt om TRYKK HER. Noah? Hva ville jeg se? PUBLIKUM: Kode på den fremre enden av Google med en følelse for tekst og en send-knappen. JASON Hirschhorn: Og hva ville knappen si? PUBLIKUM: Send. Oh, søk. Jeg beklager. JASON Hirschhorn: Det vil si søk. Husk navn. Hva bruker vi navn for? Dette navnet attributt, hva er som brukes til? [interposing VOICES] PUBLIKUM: Det er navnet sitt for når den er klikket? JASON Hirschhorn: Det kunne være. Men hva gjør vi vanligvis ser - hvorfor gir vi dette navnet køen? Hvorfor ser vi det? Yeah. PUBLIKUM: Betyr ikke det blir indeksen av super global variabel? JASON Hirschhorn: Ja, som regel når denne formen ville sende, og deretter hvor ville dette sender til? Hvilken side? Noah, hvilken side ville dette sender til? PUBLIKUM: Jeg er ikke sikker. JASON Hirschhorn: Hvor kunne vi kan finne det? Hvor finner du hva siden det sender til? Hva linje med kode? PUBLIKUM: Form handling. JASON Hirschhorn: Nettopp. Handling. Så det sender til søkesiden. Backslash søk. Så det er helt riktig. Hvilken metode? PUBLIKUM: Get. JASON Hirschhorn: Get. Nettopp. Så vi leser dette. Dette kommer til å være en form. Du er helt riktig. To ting på skjemaet, tittelen på siden og toppen ville være Google. Så her er to spørsmål du bør være i stand til å svare på om denne siden. Hvis denne HTML bor på dette nettstedet og brukeren innganger bug i denne teksten feltet til høyre her, hva vil URL brukeren finner seg selv på sender inn skjemaet? Så vi har denne retten her. Jeg kommer til å gå tilbake til denne siden, skjønt. Jeg skal skrive opp denne første delen. Alle kan se over her? OK, Mario, du tror du vet? Hvilken side? PUBLIKUM: Omvendt skråstrek søk. JASON Hirschhorn: Jeg kommer å flytte ned hit. OK, backslash søk spørsmål mark q lik bug. Noen som har et annet forslag? Yeah. Så hvordan får vi dette? Vel, vi har sett dette før. Og du kom opp med dette tidligere. Du hadde rett, Noah, at handlingen er å fortelle oss hva siden vi skal. Vi vet også hvilken metode. Vi gjør get. Og forskjellen mellom GET og POST er det få skjermer i URL og innlegget ikke. Så hvis jeg skrev innlegget der i metode, hva som ville være annerledes? PUBLIKUM: Det ville bare være slash søk. JASON Hirschhorn: Det ville bare bli slash søk. Ingenting over her ville skje. Men fordi det er en får, URL blir vist som følger. Først ser vi et spørsmålstegn og vi se navnet og verdien. Si det var en annen tekstfelt og Jeg ga det et navn på r og jeg skriver inn en verdi, caterpillar. Hva ville dette nå ser ut? Jeg har en mer tekstfeltet, gir jeg en navn på r og en verdi på caterpillar. PUBLIKUM: Etter bar du ville ha tegnet caterpillar. JASON Hirschhorn: Det er ikke-tegn. PUBLIKUM: Eller bare hva den og symbol. JASON Hirschhorn: Ja, nei. Du hadde rett, jeg tok feil. Det er som en g. PUBLIKUM: Caterpillar. r lik caterpillar, beklager. JASON Hirschhorn: Er det ingen r der inne? PUBLIKUM: Nei, det er det. JASON Hirschhorn: Vi skal snakke om at etter klassen. Det er helt riktig. Så og er korrekt. Og så kan du ha mange av disse, og de ville alle slås sammen sammen med det og. Så det er helt riktig. Det er et spørsmål til. Skisser denne HTML DOM, starter med dokumentet. Vi kunne gjøre det i to minutter. Vi vil gjøre det over her. Jeg skal gå tilbake til denne websiden. OK, starter vi med dokumentet. Hva blir det neste? Så når du leser gjennom - PUBLIKUM: HTML. JASON Hirschhorn: HTML er neste. Vi kommer til å gå tag av tag. Hva er etter HTML? PUBLIKUM: Head. JASON Hirschhorn: Head. Hva er etter hodet? PUBLIKUM: Tittel. JASON Hirschhorn: Tittel. Og tittelen har en verdi på Google, men jeg har ikke tenkt å skriver at i for nå. OK, hvor kommer kroppen gå? PUBLIKUM: Også kommer ut av HTML. JASON Hirschhorn: Nettopp. Kroppen kommer ut av her. Betyr se alle hvorfor det er tilfelle? Du bør trolig være i stand til å finne dette ut, også, selv om jeg ikke har denne fine innrykk. Innrykket slags gir det bort, men du kan se at hodet tag har vært stengt, noe som betyr at vi trolig kan ikke gå ned her. Vi trenger å gå tilbake til hva var rett før hodet tag, eller under det. Vi er selv med hodet tag. Og under kroppen går skjema. Under formen er det to innganger. OK. Det er alt jeg fikk. Quiz 1 er i morgen. Jeg er så begeistret for dere. Det kommer til å være en eksplosjon. Hvis du har - PUBLIKUM: [APPLAUSE] JASON Hirschhorn: Oh stopp, stopp. Men nei, jeg tuller. Hvis du har noen spørsmål, ikke sant etter avsnitt, vil jeg være ute. Hvis du har spørsmål i kveld, gjerne ringe, e-post, Gchat, brevdue meg. Lykke til i morgen. Ha en fantastisk Thanksgiving break, hvis jeg ikke ser deg før da. Og jeg vil se deg etter Thanksgiving på tirsdag for vår endelige § partiet noensinne. PUBLIKUM: [uhørbart]. JASON Hirschhorn: Great. OK, jeg får se dere neste uke, eller i to uker. Og lykke til i morgen.