[Opis: Quiz 1] [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] [To je CS50.] [CS50.TV] [Lucas Freitas] Vabljeni vsi. To je pregled za kviz 1. Tako kot odpoved, to je - mislim, da bomo poskušali kritje toliko materiala, kot je mogoče, vendar to ne pomeni, da bomo zajemajo vse stvari, ki se lahko v kvizu 1. Torej, se prepričajte, da ste tudi, da pogled na predavanju, profili, vse, kar lahko. Quiz 1 se bo v sredo, naslednjo sredo. Torej, se prepričajte, da preuči. To se dogaja, da je, precej, tako kot prve kviz v zvezi s svojo obliko, vendar pa je verjetno, da bo veliko težje. Vsaj lani, ko sem 50, sem mislil, da je veliko težje. Torej študij veliko. Jaz grem za kritje podatkovne strukture in Huffman kodiranja. To je nekaj, kar veliko ljudi, ki mislijo, da je zapletena, ampak bom poskusil, da bi bilo tako enostavno, kot je mogoče. Najprej, kaj želimo vi vedeli za kviz 1 je razumevanje konceptualne opisi vsakega od podatkovnih struktur, da bom predstavil. To pomeni, da vam ni treba dejansko izvajati razpršene tabele v vašem kvizu 1. Ne želimo si, da izvajajo celoten razpršene tabele, morda bomo poskušali da se boste izvajati nekatere funkcije, najpogostejše operacije, vendar pa ne bomo, da se boste izvajati vse. Zato je pomembno, da razumete koncept za vsako strukturo podatkov in tudi, da ste sposobni kodo v C, le najbolj pogoste operacije, ki jih imajo za vsako strukturo podatkov. In prav tako lahko pregledali napotke in struktur struct, ker je videti veliko teh podatkovnih struktur. Prvič, povezani seznam. Povezani seznami so pravzaprav zelo podobna nizi vendar razlika med povezani seznam in niz, najprej, je, da ima povezani seznam zelo fleksibilen velikosti, V nizi, medtem ko boste morali bodisi izbrati zelo veliko za matrike, Toliko, da veš, da boš lahko shranite vse svoje podatke v tem polju, ali pa boste morali uporabiti malloc da imajo prilagodljivo dolžino niza. V povezanih seznamih to je zelo enostavno, da samo dobili več elementov, dal več elementov v povezanem seznamu ali odstranite elemente. In dejansko, če ne želite, povezani seznam je treba sortirati, lahko poiščete in odstranite elemente v enakem času, tako O (1) časa, tako da je zelo priročno. Moraš biti previden, da se vedno spomnim na malloc in brez vozlišča, samo zato, ker če ne, boš imel spomin razpoka. Tako povezani seznami - opredelitev vozlišče je tako kot tisto, kar imamo tukaj. Sem dal int n, vendar pa lahko shranite vse podatke, ki jih želite. Torej, če želite shraniti niz, v redu je. Če želite shraniti zgradimo, je že v redu, dvojni, kar hočeš. Pravkar sem dal int n za primere tukaj. In ti so kazalec na naslednje vozlišče. Torej, v bistvu, povezani seznam ima nekaj podatkov, nato pa kaže na naslednje vozlišče. Če je zadnji element v povezanem seznamu, se dogaja, da kaže na null. Torej je to primer povezani seznam. Ok, zdaj pa poglejmo, kaj moramo storiti, če želim, da vstavite element v povezanem seznamu. Prvič, funkcija vložek bo tipa praznine zato, ker ne želim, da se vrnete ničesar. In jaz bom vzeti int kot argument, zato, ker hočem, da veš, kaj hočem vstaviti. Torej, kaj je prva stvar, ki jo je treba storiti? No, naj malloc na newnode, tako, da je prva črta. Jaz sem samo ustvarja novo vozlišče, da v povezanem seznamu. Torej, kaj lahko storim? No, vemo, da v naših izvedb povezanih seznamov v razredu, smo vedno dal glavo kot globalno spremenljivko. Torej, kaj lahko storimo, je spremeniti glavo. Lahko bo to novo vozlišče bo novi vodja, in to se dogaja, da kaže na prejšnjo glavo. Kako lahko to storimo? Prva stvar, moram narediti je spremeniti "n" v novo vozlišče vrednosti, ki je bil sprejet na funkcijo. Potem newnode je zraven se bo glava. Glava se bo newnode. Torej, to je zelo preprosta. Pri brisanju vozlišča, lahko to storite tako - Eden od načinov, da bi lahko to je, torej ok, če sem hotel izbrisati, na primer, 3, kaj lahko storim, je le točka prejšnje vozlišče na naslednje vozlišče od 3. Torej, jaz bi samo nekaj takega. Toda kaj je problem s tem, da je? Imam pomnilnika, tako da nimam dostopa do številke 3. anymore. Problem pri tem je, da ne bom, da se lahko osvobodi, da vozlišče. Jaz bom moral pomnilnika in (nerazumljivo), se dogaja, da me sovraži. Torej, namesto da bi delal, da bi moral verjetno morali začasno kazalec. Zato sem dal temp. To se dogaja, da kaže na vozlišče, ki ga želim izbrisati. In potem sem lahko premaknete prejšnje vozlišča točke na naslednje vozlišče vozlišča, ki ga želim izbrisati. In končno sem lahko brezplačno kazalec. Ali moram sprostiti kazalec, da sem ustvaril prav tam? Jaz ne bi bilo treba, samo zato, ker - Razlika je, da je bila ta vozlišča ustvarjena s pomočjo malloc, tako da je v kup, medtem ko je bil ta le deklariran kot stikalo NULL na kupu. Tako da mi ni treba osvoboditi. Ok. Torej, zdaj kaj je govoril o kupih. Stacks so precej enostavna. Naredili smo skladi in vrste v razredu samo z nizi, vendar bi morali biti seznanjeni - samo zavedati, da lahko naredite tudi nizov v čakalnih vrst Uporaba povezanih seznamov, kot dobro. Torej, če imate niz, kaj bi bilo kup? Stack, prvi, bodo morali imeti velikosti. Imate za shranjevanje, kar je velikost dimnika, ki jo imate sedaj. In tudi vi bi imeli niz, v tem primeru številkah če pa želite, lahko je matrika nizov, niz struct, vse, kar želite shraniti. O dimnika: razlika med dimnik in povezani seznam je, da je v kupu imate dostop le do zadnjega elementa, ki je bila dana v dimnika. To se imenuje zadnji noter, prvi ven. Tako kot imate skladovnice pladnjev, Če čaka na pladenj na vrhu kupa, boste morali najprej odstraniti ta pladenj, da imajo dostop do drugih pladnjev. To je ista stvar s skladovnice. Torej, če želim, da, na primer, dodati element na kupu, kaj naj storim? Temu se reče pritisk, in to je precej enostavna. Prva stvar, kar morate storiti je, da preveri, če velikost dimnika ni večje ali enako zmogljivostjo dimnika. Ker če ste že na polno zmogljivostjo, ne morete kaj dodali. In potem, če ne, boste morali dodati element dimnika. In končno, prirastek velikosti. Tako da je precej enostavna. Torej sem dodati številko 2. In če želim, da pop, kar pomeni, da želim, da se odstranijo zadnji element, ki je bil dodan in vrne vrednostjo elementa, Prva stvar, ki sem moral preveriti, je, da je sveženj ni prazna. Ker če je prazna, ne morem vrniti ničesar. V tem primeru Vračam -1. V nasprotnem primeru bom pojemanje velikosti spec, in vrnitev številk (s.size). Zakaj sem pojemanje velikosti in se nato vrne s.size? To je zato, ker v tem primeru, spec ima velikost 4, in želim, da se vrnete četrti element, kajne? Toda kaj je indeks četrti element? Tri. Ker mi velikost - se bo 3, lahko sem vrnil s.numbers (s.size) ker je 3. Torej to je samo kazalo. Zdaj čakalnih vrst. Čakalne vrste so precej isto stvar. Edina razlika je, da namesto da zadnji noter, prvi ven, imate prvi noter, prvi ven. Verjetno, če čakaš, da greš na koncert, ti ne bi bil zadovoljen, če bi imeli kup namesto čakalne vrste. Ker je zadnja oseba, da pridejo bi bila prva oseba, ki za vstop na koncert. Vam verjetno ne bi bil zadovoljen. V čakalni vrsti, prva oseba, ki se v je tudi prva oseba, da gremo ven. Torej, v opredelitvi vrste, ki imajo poleg velikosti v matriki, Prav tako imeti glavo, ki je indeks z glavo dimnika. Torej, prvi element prav zdaj. Enqueue je ista stvar kot zagon za dimnike. Če ste bili zelo naiven, bi si rekel, no, lahko sem samo narediti točno isto stvar, kot sem storil pritiskom. Jaz lahko samo preveri, če je ne presegajo zmožnosti. Če je, se bom vrnil false, sicer bi le lahko izvozite novo vrednost in nato prirastek velikosti. Toda zakaj je to narobe? Poglejmo primer. Poskušam enqueue kup stvari, in potem bom dequeue in enqueue. Obstaja veliko ukazov, ampak to je zelo preprosta. Grem enqueue 5, tako da dodamo 5 in nato 7. 1, 4, 6, nato pa želim dequeue nekaj, kar pomeni, da bom odstraniti prvi element. Torej bom odstraniti številko 3, kajne? Prvi element. Ok. Zdaj, če sem poskusil enqueue nekaj drugega, kaj se bo zgodilo? Glede na moje izvajanje, Nameraval sem dal naslednjo številko indeksa q.size. V tem primeru znaša 8, tako da bo indeks 8 je tukaj v zadnjem položaju. Če skušam enqueue 1 tukaj, jaz bi se prepisali zadnji položaj na število 1, ki je popolnoma narobe. Kaj želim storiti, je ovijte okoli in šel na prvo mesto. Mogoče bi samo rekel, dobro, sem moral preveriti če sem lahko dejansko dal nekaj tam. Če ne, bom samo rekel, oh, novo polno zmogljivost je pravzaprav kapaciteta - 1, in ne morete postaviti element tam. Toda kaj je problem? Problem je, da če sem dequeue vse tukaj in potem sem poskusil dodati nekaj drugega, bi samo rekel, No, ste bili pri polni zmogljivosti, ki je 0. Torej je vaša čakalna vrsta izginila. Moraš ovijte okoli, in način ovije okoli da vi naučili v vizionarskih in drugih psets bil z uporabo mod. Lahko ga preizkusite doma razumeti, zakaj bi to naredila q.size + q.head mod zmogljivosti, če pa si oglejte tukaj, lahko vidimo, da deluje. Torej, v zadnjem primeru, q.size je bilo 8 in glava je bila 1, ker je bil ta položaj tukaj matrike. Tako bo 8 + 1, 9. Mod zmogljivost 9 bi bilo 0. To bi šel z indeksom 0.. Bomo v pravem položaju. In nato poskusite čakalne vrste doma. Nekatere pomembne stvari: poskusite razumeti razliko med kupu in čakalne vrste. Doma, poskusite dobiti zelo dobro seznanjeni z izvajanjem enqueue, dequeue, potiskanje in pop. In tudi razumeti, ko bi lahko uporabite vsako od njih. Torej, dajmo se sprostite za 10 sekund, s kupom Pokemons. In zdaj se vrnimo k podatkovnih struktur. Hash tabel. Veliko ljudi je bilo strah hash tabel. V problem nastavite 6, Spell Checker. Razpršene tabele in poskuša, veliko ljudi je strah od njih. Mislijo, da so tako težko razumeti. Ja? [Rob Bowden] Problem nastavite 5. Problem nastavite 5, ja. Hvala, Rob. Ja. Šest je Huff n "Puff, ja. Problem nastavite 5 je Spell Checker in si moral uporabiti bodisi razpršene tabele ali poskusiti. Veliko ljudi misli, da so bili zelo težko razumeti, ampak oni so pravzaprav zelo preprost. Kaj je razpršena tabela, v bistvu? Hash tabela je matrika povezanih seznamov. Edina razlika med matriko in razpršene tabele je, da imate v razpršene tabele nekaj, kar ti hash funkcijo. Kaj je funkcija hash? Ne vem, če lahko vi preberete tukaj. To je primer razpršene tabele. Torej, lahko vidite, da imate matriko z 31 elementi. In kaj počnemo v razpršene tabele je imel funkcijo razpršitve da se bo prevesti ključ, vsak int na podlagi indeksa. Če je, na primer, če želim, da izberejo za B. Harrison, Jaz bi dal B. Harrison v mojih hash funkcij, in funkcija hash bodo vrnili 24. Zato sem vedel, da želim shraniti B. Harrisona v 24. Tako da je razlika med samo ob matriko, ki ima razpršene tabele. V razpršene tabele boste imeli funkcijo, ki se dogaja, da vam povem, kjer je za shranjevanje podatkov, ki jih želite shraniti. Za funkcije razpršitve, ki jo želite pogledati za funkcijo razpršitve da je deterministična in dobro porazdeljena. Kot lahko vidite tukaj, boste videli, da je veliko podatkov, ki sem želel trgovini dejansko 19 namesto da se uporabi 31, 30 in 29, ki so bile vse zastonj. Torej hash funkcijo, da sem uporabil ni bilo zelo dobro porazdeljena. Ko rečemo, dobro porazdeljena, to pomeni, da želimo imeti, grobo vsaj 1 ali 2 za vsako - podobno, razlika 1 ali 2, za vsako od indeksi v nizi. Hočeš, da imajo približno enako število elementov v vsakem povezanem seznamu v array. In to je enostavno, da preveri, če je veljavna v razpršene tabele, vidijo kot hash tabel. Potem drevesa. To je drevo. Drevesa v računalništvu je z glavo navzdol zaradi nekega razloga. Torej, tukaj imate koren drevesa in nato liste. Moral bi vedeti, nomenklature za starše in otroke. Vsako vozlišče ima svoje otroke, ki so vozlišča, ki so nižje od staršev. Tako, na primer, 2 se bo matično za 3 in za druge otroka tam, 3 pa se bo od staršev za 1. in drugi otroci, ki so tam. In 1 se bo 3 je otrok, in tako naprej. Imamo nekaj veliko bolj zanimivo, ki se imenuje binarno iskalno drevo, pri kateri so vse vrednosti na pravico do vozlišča se bo na desni strani, prav tukaj - na desni strani, se bo večja od elementa v korenu. Torej, če imam številko 5 tukaj, vsi elementi na desni se bo večja od 5, in na levi vse elemente, ki bo manjši od 5. Zakaj je to koristno? No, če želim, da preveri, če je številka 7 sem, na primer, Pravkar sem šel do 5. prvi in ​​bom videl, je 7 več ali manj kot 5? To je več, tako da sem vedel, da bo moral biti na desni strani drevesa. Tako da imam veliko manj stvari gledati. Pri izvajanju binarnega iskalnega drevesa, vozlišča, bom samo, da imeti podatke, Tako int n, bi lahko imeli tudi niz ali kaj si hotel. Moraš biti previden pri opredelitvi, kaj je večje, kar je manj. Torej, če ste imeli strune, na primer, lahko določite da vse te stvari o pravici se dogaja, da imajo večjo dolžino, levo se dogaja, da imajo nižje dolžin, tako da je res odvisno od vas. Kako lahko izvajajo našli za BST? Prva stvar, ki jo boste morali storiti je, da preveri, če je korenina NULL. Če je NULL, to pomeni, da je predmet, ne obstaja ker nimate niti drevo, kajne? Zato sem se vrne false. Drugače pa grem preveriti, če je število večje od vrednosti v korenu. Jaz bom poskusil najti element na desni strani drevesa. Vidiš, da sem z rekurzijo tukaj. In potem, če je manj, grem iskati na levi strani. In končno, v nasprotnem primeru, če ni manjši ali večji, to pomeni, da je samo vrednost. Torej sem vrne true. Tukaj lahko vidite, da sem uporabil, če, če, če. In ne pozabite, v kvizu 0, smo imeli problem, ki je imel, če, če, če, in ti naj bi našli neučinkovitost, in neučinkovitost je bila, da ga uporablja, če. Moral bi uporabiti, če else if, else, in drugje. Torej, naj uporabim if in else if in ostalo tukaj? Ali kdo - ja? [Student nastopanje, neslišno] To je popolno. Torej, ona je rekel, da ni važno, samo zato, ker neučinkovitosti, ki smo jih imeli pred je bil, da zato, ker morda, če je izpolnjen pogoj, nekaj, da ste izvedli dejanje, potem pa grejo, da preverite vse druge pogoje. Toda v tem primeru se je vrnila takoj, tako da ni važno. Torej vam ni treba uporabiti, če drugega. In končno, kaj je govoril o poskusih ki je najljubši vsakogar. Poskus je drevo nizi. To je zelo hitro poiskati vrednosti, temveč ga uporablja veliko pomnilnika. In to je običajno za filtriranje besed, tako da, ko boste želijo izvajati, na primer, ne vem, kot telefonski imenik v vašem telefonu in želite, da bi lahko s tipom B in samo še imena ljudi, ki imajo B. To je zelo enostaven za izvedbo, da z uporabo poskusiti, npr. Kako opredeljujete vozlišče v poskusu? Moraš imeti bool, da se dogaja, da se is_word. To pomeni, da z uporabo vseh znakov pred tem vozlišču, ti so sposobni, da se tvori besedo, in potem boste imeli niz kazalcev do vozlišč. Lahko vidite, da imamo celo paleto matičnih vozlišč, tako da vozlišča * niz? Ja? Torej, da vidimo, kako bo to delovalo. Za preverjanje črkovanja, imamo niz 27 elementov, saj imamo vse črke plus opuščaj. Preden sem bom samo za uporabo 2, ker želim, da bi lahko napisali na tablo. Ok. Torej je to primer poskusu. Če sem definiranje prvega vozlišča, bom imel celo paleto 2 elementov da sta 2 kazalci na NULL, zato sem dal "A" in "B". In jaz bom imel bool, ki pravi is_word. To se dogaja, da so napačne za prvo, samo zato, ker pred tem nimate nobenih znakov. Tako prazna beseda ni beseda. Tako da je lažna. Če želim dodati "A" do tega slovarja, kaj bi morali storiti? Jaz bi samo še, da malloc novo vozlišče za "a", in nato dodajte svojo besedo, da res. Tako da samo predstavlja, da ko "" se bo res. Smisla? Potem, če želim dodati BA, bom moral malloc 1 za "b", in potem bom ustanovila logičnim na false, ker "b", sam po sebi ni beseda. Potem bom malloc še eno za "a", tako da BA, in potem bom ustanovila, da je beseda res. Ker "ba" je beseda. In potem, če želim, da vidim, če je "b" v tem slovarju, Lahko pridem na prvo, 'B'. Sem šel dol in gledam, je beseda, ki pravi, napačna. Torej, to ni beseda. Če bi želeli preveriti, BA, Grem na prvo, 'B', nato pa pojdite na "a", in vidim, res, zato je beseda. Smisla? Veliko ljudi se zmedeni poskusih. Ne? Nazadnje Huffman kodiranje. Huffman kodiranje je zelo koristen varčevati s pomnilnikom in stiskanje besedilne datoteke, samo zato, ker veliko krat ste uporabili "a" in "e", na primer, v dokumentih, vendar ne vem, če vi uporabljate "Q" ali "Z" toliko. Ima samo 1 bajt za vsako posamezno značaja, vsak - na 256 znakov, ki jih imamo v tabeli ASCII ni zelo optimalna, samo zato, ker obstaja nekaj znakov, ki jih uporabljate veliko več, tako da boste morali verjetno porabijo manj pomnilnika za tiste. Kako uporabljam Huffman kodiranje? Moramo narediti Huffman drevo.  Huffman drevo ima vozlišč ki je simbol, ki se bo, kot so, "a", "b", "c", pisma, karkoli črka imajo frekvenco, ki je frekvenca, ki se pojavlja v besedilu, da si ustvari Huffman drevo za, in nato vozlišče, ki se dogaja, da kaže na levi strani Huffman drevesa in drugo vozlišče, ki se dogaja, da kaže na desno. Torej, tako kot drevo. Kako si zgraditi Huffman drevo? Boste izbrali 2 vozlišč, ki imajo najnižje frekvence. Če imate kravato boste izbrali 2 vozlišča ki imajo najnižje vrednosti ASCII, kot dobro. Potem boste ustvarili novo drevo iz teh 2 vozlišč da se dogaja, da imajo kombinirano frekvenco v matični vozlišče. In potem boste odstranili 2 otroka iz gozda in jih nadomestiti s staršev. In ti boš ponovil, da dokler imate samo 1 drevo v gozdu. Pa poglejmo, kako bi vam Huffman drevo za ZAMYLA. Tukaj lahko vidite, da so vse črke frekvenco 1, razen za "A", ki ima frekvenco 2. Zato sem ustvaril vozle za vsa pisma ki sem jih po vrstnem redu vrednosti ASCII in pogostosti. Torej, če želim ustvariti prvo drevo, bo z "L" in "M". Torej je tu. Pogostost para bo 2. ker je 1 + 1, potem naslednji 2 z najnižje frekvence so "Y" in "Z". In potem imam vse od njih, da - imajo frekvenco 2. Torej, katere so tiste, ki imajo najnižjo vrednost ASCII za naslednjo? 'A' in 'L'. Zato sem ustvariti novo vozlišče, in končno, da je 4 in 2, tako da 2 se bo na levi strani. In to je Huffman drevo. Potem, če hočem napisati nekaj besedila, kot v binarno pretvoriti v besedilo z uporabo Huffman drevo je zelo enostavno. Na primer, če rečem, da se premika na levo 0 in se gibljejo na desni strani je 1, Kaj je, da gre za zastopanje? Tako kot 1, 1, zato desno, desno, in potem 0, tako levi je L, nato 1, 0, 0. Torej, 1, 0, tako da samo 1, 0, "". In potem 0, 1, tako da 'Z'. In potem 1, 0, 0 - št. 0, 0 bo "Y", tako len. Tako, da je vse za mano, Rob bo prevzel. [Rob Bowden] Torej, teden 7 stvari. Imava veliko, da gredo skozi zelo hitro. Bitni operaterji, buffer overflow, CS50 knjižnica, nato pa HTML, HTTP, CSS. Vse v kot 15 do 20 minut. Bitni operaterji. Obstaja 6 od njih, ki jih morate vedeti. Bitni in bitni ali XOR, premik v levo, desno premik, in ne. Pravica izmeno in ne boste komaj videl na predavanju sploh. Bomo šli nad njim hitro tukaj, ampak to je dobro vedeti, da so to 6, ki obstajajo. Ne pozabite, da so operaterji bitni kot takrat, ko si naredil 3 + 4. Niste se ukvarjajo z binarno 3. in 4.. Z operaterji bitni ste dejansko ukvarjajo s posameznimi bitov števil 3 in 4. Torej, prvi, ki bomo rekli, je bitni ni, in vse kar naredi je flip vse bitov. Torej tukaj, če ste to pisanje v C, ne bi ga napisali kot ~ 11.011 ali karkoli, bi napisali, da je všeč ~ 4, in potem bi flip binarno predstavitev 4. Torej, tukaj, ~ nekaterih binarno število 1101101 se dogaja, da ravno flip vse 1 na 0 in vse je 0 do 1 je. Kot sem rekel, tam, pogosta uporaba tega pa ga bomo videli v nekaj, je, kot smo želeli, da pridejo gor z nekaj več kjer so vsi bitov 1, razen za eno od njih. Torej, to je ponavadi lažje izraziti številko če se le da en sam bit nastavljen, in nato vzemite ~ od tega, da se vsak drugi bit nastavljeno, razen za tole. Tako da je tisto, kar bomo uporabili bolj malo. Negacija po bitih ali. Tukaj so 2 binarna števila in ti 2 številke so zelo reprezentativna, saj predstavljajo vse mogoče Kombinacija bitov bi morali delovati naprej. Tukaj, ko sem or'd vsak bit, smo le, da bo primerjati naravnost navzdol. Torej na levi strani imamo 1 in 1. Ko sem bitni | tistimi, kaj bom dobil? Ena. Potem bitni | 0 in 1 se dogaja, da me? Ena. Bitni 1 in 0 se bo ista stvar, en. Bitni 0 | 0 se dogaja, da me 0. Torej edini primer, kjer sem dobil 0, je v 0 | 0 primera. In lahko si misliš, da je tako kot vaše logično najbolj oddaljenih regij. Torej, če mislite, da 1 kot resničen in 0 kot lažno, Isto velja tukaj. Torej res, ali res drži, drži ali ne drži. Napačne ali res drži, lažna ali napačna, je edina stvar, ki je dejansko napačna. Tukaj je primer, ki bi morali vedeti kot zelo dober primer, ko se uporabljajo bitni operaterji. Tukaj, če bomo ali kapital "" z Ox20, in bomo pogled na to v sekundi, smo dobili nekaj. In če smo ali male črke 'a' z Ox20, smo dobili nekaj. Torej, kaj je dvigni ASCII tabelo. Ok. Tukaj vidimo, da je "A" - Tu imamo '"je desetiško 65. Ampak jaz bom šel z šestnajstiškem, ki je Ox41. Precej prepričan, da smo ga videli v razredu. Mislim, da smo ga videli v razredu da je precej enostavno pretvoriti iz šestnajstiško v binarno. Torej tukaj, če želim dati 4 v binarni, to je samo bo 0100. To je 1 na kraj, 2 je kraj, 4 je kraj, zato je to 4. Potem lahko po delih 1 v binarno, kar se dogaja, da je 0001. In tako to se bo zastopanost "A" v binarno. Ob male črke "a", to je zdaj dogaja, da se Ox61, kjer je razdelitev ti gor v svojo binarno, tako da 6 - Kaj je to dejansko storiti - ne obstaja radirka? Eraser. Ox61. Torej razdelite 6 v binarno se bo 0 + 4 + 2 + 0. In delitev 1 se bo 0001. Če pogledamo razlike med temi 2, vidimo, da je edina razlika med malimi in kapitala "A" to single bit. Torej se vrnemo na spletni strani - v redu. Prihajam nazaj tukaj, če pogledamo, kaj bit Ox20 je, Tako cepljenje Ox20 v svojo binarno, je 0010, 0000. Ox20, le malo, da se določi ta bit, da smo se ukvarjajo s, s preklapljanjem med kapitalom in male črke "a". Če sem ali "A", ki je ta, "", če sem ali "A" s Ox20, kaj bom dobil? [Študent, neslišno] male črke "a", saj se dogaja, da flip ta bit na 1. In če sem ali "" z Ox20, kaj bom dobil? Male črke, ker samo oring "" z Ox20, Jaz bom samo, da se oring to sam bit na 1, to je že 1, tako da ni važno. Tako smo dobili "A" in "a". Negacija po bitih in. Again, lahko razmišljamo o tem, kot je naš logično in kolegom. Na levi strani imamo res in resnične. To se dogaja, da bi bilo res, in za vse primere, false in true ali false true in ali false false &, nobena od teh stvari so resnične. Torej, kaj bomo na koncu dobili 1000. Torej, zdaj, tukaj, tukaj, kjer sem uporabil zaupljiv bitni ni, kjer smo imeli Ox20. Torej, to je Ox20. Zdaj, kaj želim storiti, bitni ~ od Ox20. To se dogaja, da flip vse bitov. Tako da imam 1101, 1111. In tako "" anded s ~ Ox20 se dogaja, da mi kaj? Samo malo smo se res morali razmišljati o je to ena, saj, če so vsi ti biti nastavljeni na 1, potem bomo dobili točno tisto, kar "" je, razen, če je mogoče, kaj je to bit. Ker če bi bil 1, zdaj pa se dogaja, da je treba nastaviti na 0, ker ne glede na to, anded s tem se bo 0. Torej, kaj je "'& ~ Ox20 dogaja, da me? [Študenti odgovoriti, neslišno] In kaj je "" in - to je 'A'. In kaj je "'& ~ Ox20 dogaja, da me? "A." Ker je to trenutno 1. Anding s tem 0 se dogaja, da je 0, in zdaj bomo dobili 'A'. Oba sta "," in ne nazadnje tudi te vrste, imamo XOR. To je zelo podobno, ali, razen to pomeni izključno ali. To je kot tisto, kar ponavadi mislili, ali v resničnem svetu. Torej, naredite kar koli "x" in "y", ne pa oboje. Tukaj 1 ^ 1 se bo 0. Ker je res, da je to - to ne deluje, kot tudi z logično true in false kot bitni & in ali to storili, ampak res ^ res je napačen. Ker smo le želeli vrniti true, če je le eden izmed njih res. Torej 1 ^ 1 0. Kaj pa 0 ^ 1? 1. 1 ^ 0 1, 0 ^ 0 0. Torej, v vseh okoliščinah, 0 bitni nekaj 0 se bo 0. 1 bitni Nekaj ​​0 ali 0 bitni 1, če je | ali ^, bo to 1, in če je to in to bo 0. In edini primer, kjer 1 bitni 1 ni 1, je z izključna ali. To je 0110. Torej, tukaj zdaj, z uporabo XOR - tako smo spet pri 20. "'^ Ox20 je ti 2 bitov bomo primerjali. Torej 1 ^ 0 se dogaja, da mi kaj? Ena. "'^ Ox20 se dogaja, da me? Male črke. "'^ Ox20 se dogaja, da me? Capital A. Ker karkoli že to počne, to XOR z Ox20 učinkovito lahkota karkoli že to bit. Če je to 0, to je zdaj dogaja, da postane 1. Ker gre za 1, 1 ^ 1 je 0. Torej naš '"je postala" A ", in naše" "je postala" ". Tako da XOR je res priročen način samo lahkota zadevo. Pravkar želite ponoviti čez niz črk in izmenično pri vsakem en znak, si XOR vse z Ox20. Zdaj smo premik v levo. Levo premik je le, da bo, v bistvu, potisnite vse številke v ali na levo, in vstavite 0 stoji za njimi. Torej, tukaj imamo 00.001.101. Mi bomo za potiskanje 3 0 je prodiral po desni, in smo dobili 01.101.000. V nonbinary smislu, vidimo, da je res, da se ukvarja 13-levo premakne s 3, kar nam daje 104. Torej levo prestavljanje, vidimo tukaj, x << y je v bistvu x * 2 ^ y. 13 * 2 ^ 3, 2 ^ 3 je 8, torej 13 * 8 je 104. Če le pomislite binarno na splošno, kako vsako številko, če začnemo z desne, to je 1 na mestu, nato pa na 2 je mesto, nato pa v 4 v mesto. Torej, s pritiskom na 0-ih z desne, smo samo potiska stvari, ki so bile v 4 kraju do 8 kraju, in stvari, ki so bile v 8 kraju na strani 16 v mestu. Vsak premik samo pomnoži z 2. Ja? [Študent] Kaj se zgodi, če se premakne za 5? [Bowden] Če se premakne za 5, s katero bi samo izgubili številk. Neizogibno je, da gre za isto stvar. Všeč mi je, cela le 32 bitov, tako da, če boste dodali 2 res velika cela števila, to šele ne spada v celo število. Torej, to je ista stvar tukaj. Če se premakne za 5, mi bi samo izgubili, da je eden. In to je nekako, kaj mislim s "grobo" kjer, če prestavite predaleč, boste izgubili bitov. Zamika v desno se bo nasprotno, kjer bomo zabil 0 odpade na koncu, in za naše namene, izpolnite 0-ih z leve. Tako da to počne, smo v bistvu vzvratno vožnjo, kar smo že storili. In vidimo, da so tri 0 je na desni strani tik odlepil, in smo potisnili 1101 vse do konca v desno. To počne 104 3, ki je učinkovito, x / 2 ^ y. Torej, zdaj, tukaj, je podobna ideja. Zakaj je samo grobo x / 2 ^ y, in ne dejansko x / 2 ^ y? Ker, če sem se premakne za 4, jaz bi izgubili 1. V bistvu, kaj si misliš, samo pomislite, deljenja celih števil na splošno. Torej, kot 5/2 je 2. To ni 2.5. To je isto idejo tukaj. Ko delimo z 2, smo lahko izgubili ak bitov na poti. Torej, zdaj - da je za bitni. To je vse, kar morate vedeti. Zapomni si primere uporabe, smo videli v razredu, kot bit maska ​​je koristna za izvajalce bitni, ali ste jih uporabili za bitne maske. Tiskane črke in male črke, pretvorb je precej Prototipični primer. Ok, tako da buffer overflow napade. Kdo spomni, kaj je narobe s to funkcijo? OBVESTILO smo razglašena niz 12 bajtov, 12 chars, in potem kopirati v naše varovalnega pasu 12 znakov celoten niz bar. Torej, kaj je problem tukaj? Magična številka 12 bi bilo precej takoj pop kot - zakaj 12? Kaj pa, če bar zgodi, da je več kot 12 znakov? Kaj pa, če Bar je na milijone znakov? Tukaj je vprašanje memcpy. Če bar je dovolj dolgo, To bo šele v celoti - "c", "c" ne skrbi, da je bilo le 12 znakov; "C" ne skrbi, da ga ni mogoče vgraditi, da je veliko bajte. To bo šele popolnoma prepiše char, je 12 bajtov smo dodeljeni za to, in vse, kar mimo nje v spomin, da dejansko ne spadajo v to buffer s kakršnimi koli niz bar. Torej je bila to sliko smo videli v razredu kjer imamo kup odraščanja. Si je treba uporabiti za te slike ali pa ponovno seznanjeni z njimi. Imamo kup odraščanje, naslovi pomnilnika začnejo z 0 na vrhu in rastejo navzdol všeč 4000000000 na dnu. Mi imamo niz "C" nekje v spominu, potem imamo kazalec v vrstico desno pod njim, in potem imamo to shranjeno okvirja kazalec v naši povratnim naslovom in našega matičnega podprograma kup. Spomnite se, kaj naslov donos? To je, ko glavna pokliče funkcijo foo poziva bar funkcijo, neizogibno, bar donose. Torej, ko bar vrne, morajo vedeti, da se bo vrnil v foo, ki ga je imenoval. Tako Povratni naslov je naslov funkciji, ki jo ima, da se vrnete, ko je funkcija vrne. Razlog, da je pomembno za buffer overflow napade je zato, ker, preprosto, hekerji želeli spremeniti, da povratni naslov. Namesto da bi šel nazaj na foo, bom šel nazaj tja, kjer heker želi, da grem nazaj. In, prikladno, kjer heker pogosto hoče iti nazaj je začetek pufra, ki smo ga je bilo prvotno. Tako obvestilo, še enkrat, Little Indian. Aparat je primer Little Indian sistema, Tako je celo, ali kazalec shranjeno z bajtov ukinjenih. Torej, tukaj vidimo - je to? Ja. Vidimo Ox80, OxC0, Ox35, OxO8. Spominjam se šestnajstiških številk? Ne bomo obrnili šestnajstiških številk v Little Indian, ker 2 šestnajstiških števk sestavljajo enotno bajt, in smo obrnili bajte. Zato ne hranimo, kot so, 80530CO8. Hranimo, namesto, vsak par 2 številk, začenši z desne. Ta naslov se nanaša na naslov začetka naše pufra, da smo dejansko želeli prekopirati v na prvem mestu. Razlog, da je koristno, ker, kaj če napadalec se je zgodilo, namesto da niz, ki je bil pravkar neškodljiv niz, kot svoje ime ali kaj podobnega, kaj če, namesto tega, da so niz le nekatere naključne kode da je storil vse, kar so hoteli to narediti? Tako da bi lahko - ne morem razmišljati o vseh kul kode. Lahko bi bilo karkoli, čeprav. Koli katastrofalna številka. Če bi hoteli, bi lahko nekaj naredi na segmentih napak, a to bi bilo nesmiselno. Ponavadi to kramp vaš sistem. Ok. CS50 knjižnica. To je, v bistvu, getInt, getString vse tiste funkcije, smo poskrbeli za vas. Torej imamo char * niz, in to je abstrakcija, ki smo odpihnilo na neki točki v času semestra. Ne pozabite, da je niz le nabor znakov. Torej, tukaj vidimo skrajšana različica getString. Moral bi se ozremo na to, da se spomnimo, kako je to dejansko izvaja. Ključni podatki so opazili, smo dobili v en znak naenkrat od standard, ki je prav tako kot nam tipkanje po tipkovnici. Torej sam znak naenkrat, in če bomo dobili preveč znakov, Torej, če je n + 1, večjo od zmogljivosti potem moramo povečati zmogljivosti našega medpomnilnika. Tako da tukaj smo podvojitvijo naše medpomnilnika. In da se ohranja bo, bomo vstaviti znak v našo buffer dokler ne prejmemo novo linijo ali konec datoteke ali karkoli, V tem primeru, bomo končali z vrvico in nato realno getString skrči spomin, kot če bomo dodeljenih preveč pomnilnika bom šel nazaj in skrči malo. Torej ne bomo prikazali, ampak glavna ideja je ima brati v en znak naenkrat. Ne more samo brati v vso stvar naenkrat, ker je njihov varovalni le določene velikosti. Torej, če je niz, ki ga je poskušal vstaviti buffer je prevelika, potem bi se razlivala. Tako da tukaj smo preprečili, da jih samo branje v enem značaja v času in vedno, kadar koli bi bilo potrebno. Torej getInt in druge funkcije knjižnice CS50 nagibajo k uporabi getString v njihovih izvedb. Zato sem poudaril pomembne stvari tukaj. Poziva getString, da bi dobili niz. Če getString ni vrnil spomin, ne pozabite, da getString mallocs nekaj, tako da vsakič, ko pokličete getString ne bi smeli (nerazumljivi) brezplačno, ki niz, ki ste jo dobili. Torej tukaj, če ne bi malloc nekaj vrnemo INT_MAX kot le zastave, da hej, nismo bili dejansko sposobni, da bi dobili celo število. Moral bi ignorirati vse, kar se vrnem k tebi, ali vam ne bi bilo treba to obravnavati kot veljavno vhod. Nazadnje, ob predpostavki, da je uspelo, bomo uporabili sscanf s tem posebne zastave, kar pomeni, prvo tekmo celo število, potem se ujemajo nobenih znakov po tem celo število. Torej, opazil si želimo, da enaki 1. Torej sscanf vrne koliko tekem, če uspešno postavil? To bo vrnil 1, če se uspešno ujema celo število, da se bodo vrnili 0, če se ne ujema z celo število, in se bo vrnil 2 če se ujema število sledi nek znak. Tako smo opazili ponoviti, če bomo vse kaj drugega kot 1 tekmo. Če torej vnesena 1, 2, 3, C, ali 1, 2, 3, X, nato 1, 2, 3, sta se shrani v celo število X se shranijo na značaj, sscanf bi vrnil 2, in želimo ponoviti, ker smo le želeli celo število. Hitro piha skozi HTML, HTTP, CSS. HyperText Markup Language je strukturo in semantiko na spletu. Tukaj je primer iz predavanja, kjer smo imeli oznake HTML. Imamo oznake glava, telo oznake, imamo primere praznih oznak, kjer smo dejansko nimajo začetka in tesno oznako, imamo samo povezavo in podobo. Ni zapiranje slike tag, tam je samo ena oznaka, ki dosega vse oznake mora storiti. Povezava je na primer, da bomo videli, kako se povezati z CSS, scenarij je primer, kako se povežete z zunanjim JavaScript. To je zelo enostavno, in ne pozabite, HTML ni programski jezik. Tu, se spomniš, kako bi definirali obliko ali vsaj kaj bi to naredili? Taka oblika je dejanje in metodo. Metode, ki vam bo vedno samo videti, so GET in POST. Torej, dobil je različica, kjer postane stvar dal v URL. POST je, če se ne dajo v URL. Namesto tega se vsi podatki iz obrazca se vstavi bolj skrito v zahtevi HTTP. Torej, tukaj, akcija opredeljuje kjer Zahteva HTTP gre. Kam gre, je google.com / search. Metoda. Ne pozabite razlike med GET in POST, in samo reči kot na primer, če želite, da nekaj zaznamkov. Nikoli ne boste mogli zaznamek POST URL ker se podatki, ki niso vključeni v URL. HTTP, zdaj je Hypertext Transfer Protocol. Hypertext Transfer Protocol, bi pričakovali, da bi prenos HyperText Markup Language, in to počne. Ampak to prenese tudi vse slike, ki jih najdete na spletu, vsi prenosi, ki jih naredite začeti čim zahtevo HTTP. Torej HTTP je samo jezik svetovnega spleta. In tukaj boste morali priznati takšno zahtevo HTTP. Tu HTTP/1.1 na strani samo pravi, da je različica protokola sem uporabo. To je precej vedno bo HTTP/1.1, kot boste videli. Potem vidimo, da je bil to GET, POST alternativa pa, da boste lahko videli. In URL, da sem poskušal obiskati bil www.google.com/search?q = bla, bla, bla. Torej, ne pozabite, da je to, q vprašaj = bla bla bla, je vrsta stvari, ki se vloži na obrazcu. Odgovor je morda vrnil k meni, bi izgledala nekako takole. Again, začenši s protokolom, ki se dogaja, da se da, sledi statusno kodo. Tukaj je 200 OK. In končno, bo spletna stran, ki sem dejansko zahteval jih je treba upoštevati. Mogoče koda stanja lahko vidite, in da bi morali vedeti več od njih. 200 OK, ste verjetno že videli. 403 Forbidden, 404 Not Found, 500 Internal Server Error Ponavadi, če greste na spletno stran, in kaj je zlomljena ali njihove PHP kodo zruši, ker je v aparatu imamo tako velik oranžna škatla da pride in reče, kot, da je nekaj narobe, ta koda ne deluje ali Ta funkcija je slabo. Ponavadi spletnih strani, ne želim, da vedo, katere funkcije so pravzaprav slaba, Torej, namesto da bi zdej dal 500 notranje napake strežnika. TCP / IP je 1 plast pod HTTP. Ne pozabite, da je internet izven svetovnega spleta. Všeč mi je, če igrajo spletne igre, ki ne gredo skozi HTTP, to se dogaja skozi drugačen - to je še vedno uporabljajo internet, vendar se ne uporabljajo HTTP. HTTP je samo en primer protokola, ki temelji na TCP / IP. IP dobesedno pomeni internetnega protokola. Vsak računalnik ima naslov IP, so ti 4-mestno stvari kot 192.168.2.1, ali karkoli, ki kaže, da je lokalna ena. Ampak to je vzorec IP naslov. Torej DNS, Domain Name Service, To je tisto, kar se kaže stvari, kot so google.com z dejanskim IP naslov. Torej, če ste tip, da je IP naslov v URL, da bi vas na Googlu, ampak ponavadi ne spomniš tistih stvari. Ste nagnjeni k namesto spomnim google.com. Zadnja stvar, ki jo imamo, je pristanišča, kjer je ta del TCP IP. TCP ne več. Razmislite o tem, recimo, da imate svoj spletni brskalnik teče. Morda imate nekaj email aplikacije, ki teče; Mogoče imate kakšen drug program, ki uporablja internet teče. Vsi potrebujejo dostop do interneta, vendar pa ima vaš računalnik samo 1 WiFi kartico ali karkoli. Torej, vrata so način, da smo sposobni razdeliti kako so ti zahtevki lahko uporabljajo internet. Vsaka vloga dobi 1 posebna vrata, ki jih lahko poslušate na, in privzeto HTTP uporablja vrata 80. Nekatere e-poštne storitve uporabljajo 25. Nizke oštevilčena tisti ponavadi pridržane. Ti so običajno sposobni priti višje oštevilčene tiste za sebe. CSS, Cascading Style Sheets. Mi slog spletnih strani s CSS, ne s HTML. Obstajajo 3 krajev, ki jih lahko dajo svoj CSS. To je lahko inline, med slog oznake, ali v popolnoma ločeno datoteko in nato povezana prijavite In tu je samo primer CSS. Vi bi morali priznati ta vzorec, kjer prvi primer se sva ujemanje telesno oznako, in tu smo centriranje telesa oznako. Drugi primer, smo ujemanje stvar z ID nogo, in mi uporabo nekaterih stilov za to. Opazimo, da osebne noge besedilne poravnan na levo, ker se telo text-poravna center. Noga je v notranjosti telesa. To bo, namesto, text-align levo, čeprav telo pravi text-align center. To je cela kaskadno del. Lahko imaš - lahko določite sloge za telo, in potem se stvari v telesu, lahko določite več posebnih stilov, in stvari delujejo, kot ste pričakovali. Bolj specifične CSS projektantje prednost. Mislim, da je. [Ali Nahm] Pozdravljeni vsi skupaj. Če bi le lahko dobili vašo pozornost. Ali sem in bom šel skozi PHP in SQL zelo hitro. Torej, lahko začnemo. PHP je kratica za PHP: Hypertext Preprocessor. In kot bi morali vsi veste, da je skriptni jezik na strani strežnika, in jih uporabljamo za zadnji konec spletne strani, in kako to počne veliko izračunov, v ozadju-scenes del. Sintaksa. To ni všeč C, presenečenje. Vedno se mora začeti z, če vidite, - ne morem premakniti naprej. Ogledate si lahko, kar potrebujete nove vrste naramnic in potem boste morali za? Php. To je vedno kaj imate za oblikovanje vaše PHP besedilo, vaš PHP kodo. Zato ne more biti zgolj kot C, kjer si nekako ga dal na prvo. Morate ga vedno obkrožajo. In zdaj, glavni skladnja je, da je treba vse spremenljivke začeti z znakom $. Jo morate storiti, če ste bili opredeljeni, morate to storiti ko ste se nanašajo na z njimi kasneje. Vedno morate, da je $. To je vaš novi najboljši prijatelj, precej. Saj ne - za razliko od C, vam ni treba dati kakšen spremenljive vrste je. Torej, ko boste potrebovali $, vam ni treba dati, kot so, int x ali niz y, in tako dalje, in tako dalje. Tako majhna razlika. Kot rezultat tega, to pomeni, da je PHP šibko tipa. PHP je šibko tip jezika, in to je slabo natipkano spremenljivk. Z drugimi besedami to pomeni, da lahko preklapljate med različnimi vrstami tipov spremenljivk. Lahko shranite številko 1 kot int, ga lahko shranite kot niz, in ga lahko shranite kot likvidna sredstva, in to bo vse, da številka 1. Čeprav ste jo shranite v različnih oblikah, je še vedno - je spremenljivka vrste še vedno drži na koncu. Torej, če pogledaš tukaj, če se spomnite iz pset 7, mnogi od vas verjetno imel težave s tem. Dve enaki znaki, 3 enake znake, 4 enakih znakov. Ok, ne obstajajo 4 enakih znakov, vendar obstajajo 2 in 3. Uporabljate 2 enakih znakov, da preveri vrednosti. To lahko preverite preko vrste. Torej, če si lahko ogledate v prvem primeru, Imam num_int == num_string. Torej vaša int in vaš niz sta oba, tehnično, 1, ampak oni so različne vrste. Ampak za dvojno enakimi, bo to še vedno mimo. Vendar pa se za trojno enakimi, preveri vrednosti kot tudi različne vrste. To pomeni, da je ne bo, da prenese v tem drugem primeru tukaj, , kjer boste uporabljali 3 enake znake namesto tega. Tako da je velika razlika, da bi morali vsi so pokazale zdaj. String združevanje je še ena močna stvar, ki jo lahko uporabite v PHP. To je v bistvu samo to priročno pika zapis, in to je, kako si lahko veže strune skupaj. Torej, če imate mačka in imate psa, in želite postaviti 2 strune skupaj, lahko uporabite obdobje, to pa je, kako to deluje. Lahko jih tudi samo mesto drug poleg drugega, kot lahko vidite tukaj, v spodnji primer, kjer sem echo niz 1, vesoljska niz 2. PHP bodo vedeli, da jih bodo zamenjali kot take. Nizi. Zdaj, v PHP, obstajajo 2 različni vrsti nizi. Lahko imaš redne nize, lahko pa tudi asociativne nize, in smo šli skozi njih prav zdaj. Redni nizi so le ta v C, in tako imate indekse, ki so oštevilčene. Zdaj smo šele tekoč, da ga ustvarite in dal - Tako je to, kako bomo ustvarili prazen niz, nato pa gremo na dana v indeksom 0.. Bomo dal številko 6 je vrednost 6. Si jo lahko ogledate na dnu tukaj. Where's - na indeksno številko 1, bomo dal vrednost število 4, in tako lahko vidite, da je 6, tam je 4, in nato kot sva tiskanje stvari, ko smo poskušali in natisniti vrednost, shranjeno na indeks število 0, potem bomo videli vrednost 6 se natisne. Kul? Tako da je redni nizi za vas. Drug način lahko dodate tudi stvari za redne nizi zdaj je, da jih lahko preprosto dodajte na koncu. To pomeni, da vam ne bi bilo treba določiti poseben indeks. Lahko vidite številko, in nato v oklepaju pa je indeks ni podan. In to vedo - PHP bodo vedeli, da jo dodajte na konec seznama, naslednjo prosto mesto. Torej si lahko ogledate na 1 ravno tukaj na tem mestu 0, 2. šel tam na prvem mestu. 3 gre - je tam dodana kot dobro. Tako da nekako smiselno. Ti si samo nenehno dodajanjem, in potem, ko sva odmeval indeks številko 1, bo izpisal vrednost 2. Potem imamo nize, ki so asociativne nize. Asociativne nize, namesto da numerične vrednosti, kaj storiti, je, da imajo indekse, ki so jih niza. Ogledate si lahko, namesto da bi - Znebil sem se vseh teh indeksov številka, in zdaj je key1, key2, key3, in oni so v narekovajih, da se označi, da oni vse strune. Torej imamo lahko zgled za to. Primer tega je, da imamo TF, in to je ime indeks. Bomo dal "Alija" kot ime na indeks, zaužitih kalorij, bomo lahko dal notr tokrat namesto niza, in nato na podlagi indeksnih všeč, lahko damo celotno paleto znotraj tega. Torej, to je nekako - to je podoben konceptu, kako smo se imeli indeksi s številkami, zdaj pa lahko spremenite indeksov okoli da jih imajo kot strune namesto tega. Prav tako lahko to storite, poleg samo delaš posamezno, lahko to storite vse v enem bloku. Torej, lahko vidite, da je TF na tem polju, in potem smo jih nastavite vse v enem velikan kvadratni oklepaj nizu. Tako da se lahko hitro stvari. To je bolj stilistične izbire kot ne. Imamo tudi zank. V C imamo zank, ki delujejo, kot je ta. Imeli smo niz, in smo šli od indeksa 0 do konca seznama, in vse to smo natisniti, kajne? Razen problem je, za asociativne nize, ne nujno vedeti tiste numerične vrednosti ker zdaj imamo indeksov nizov. Zdaj bomo uporabili foreach zanke, ki spet upajmo, uporabljene v pset 7. Foreach zanke bo samo vedeti, da vsak del seznama. In ni nujno, da veš točno številčno indeks, ki ga imate. Torej imate foreach sintakso, zato je foreach, si dal niz. Torej je moja matrika se imenuje pset, nato pa kot beseda kot, in potem dal to lokalno začasno spremenljivko, da boste za uporabo samo za določeno stvar, ki se dogaja, da imajo posebno - en primer ali en del matrike. Pset num bo imel 1, nato pa bo morda za število 6, in potem bo v njej številko 2. Vendar je bilo zagotovljeno, da gredo skozi vsako posamezno vrednost, ki je v matriki. Uporabne funkcije, ki jih morate vedeti v PHP, so potrebna, tako, da poskrbi, da ste tudi nekatere datoteke, echo, exit, prazen. Priporočam vam, pogled na pset 7 in pogled na teh funkcij. Morda boste morali vedeti, tiste, tako da bi zagotovo vedeli, kaj točno, ti so vsi počnejo. In zdaj smo šli skozi področje zelo hitro. V obsegu, PHP je nekako funky stvar, za razliko od C, in tako smo le, da bo šel skozi to hitro. Torej, recimo, da začnemo na tej puščice, da imamo tam. In bomo začeli s $ i. Torej je spremenljivka "i", se bo 0, in smo šele tekoč, da ga natisnete v tisti veliki beli škatli tam. Bomo začeli z I0, in potem bomo to odmeva. Tako da je 0. In potem bomo to prirastek, ki jih je za zanke, in potem se dogaja, da se vrednost 1. Eden od njih je manj kot 3, tako da se bo skozi, da je za zanke, in potem bomo videli, da ponovno natisnjen. Bomo spet prirastek do 2, in 2 je manj kot 3, tako da bo že minilo za zanke, in ga bomo natisnili 2. Potem boste, upoštevajte, da je 3 ne manj kot 3, tako da bomo iztrgajo iz zanke for. Torej, zdaj smo zapustili, nato pa smo šli v aFunction. Ok. Tako da boste morali upoštevati, da ta spremenljivka, ki smo jih ustvarili, "i" spremenljiva, ni lokalno zajeta. To pomeni, da to ni lokalen za zanke, in da spremenljivka še vedno lahko dostopate in spreminjate kasneje, in bo še vedno učinkovita. Torej, če greš v funkciji zdaj, boste videli, da imamo na voljo tudi na 'I' spremenljivka, in bomo prirastek "i" + +. Ti misliš, na prvi, ki temelji na C, da je to kopija "i" spremenljivko. To je povsem druga stvar, ki je pravilna. Torej, ko smo ga natisnete, gremo na tiskanje "i" + +, ki se bo izpisal, da je 4, in potem bomo - mi je žal. Potem bomo na koncu iz te funkcije, in bomo tam, kjer je zdaj, da puščica. To pomeni, da takrat, pa čeprav funkcija spremenila vrednost "i", ni spremenila izven funkcije, ker je funkcija ločeno področje. To pomeni, da, ko smo odmeva "i", ni pa v področje uporabe funkcije spremenila in tako potem gremo znova tiskati 3. Različne stvari o obsegu v PHP kot v C. Zdaj v PHP in HTML. PHP se uporablja za izdelavo spletne strani dinamično. Nekako naredi stvari drugačne. Imamo razlikuje od HTML. S HTML, imamo vedno samo isto stvar, kot je statično kako Rob je pokazala, ker so PHP, lahko spremenite stvari na podlagi kdo je uporabnik. Torej, če imam to, imam, "Vi ste prijavljeni kot -" in nato ime, in sem lahko spremenite ime. Torej, zdaj je ime Joseph, in je "o meni", potem pa sem lahko tudi spremenite ime, da ima Tommy. In da bi bila stvar drugačna. Torej, potem lahko spremenite tudi različne stvari o njem, in bo prikazoval različne vsebine glede na ime. Torej PHP lahko nekako spremeniti tisto, kar se dogaja v vaši spletni strani. Enako tukaj. Kljub temu, upoštevajte, da imajo drugačno vsebino, čeprav ste tehnično še vedno dostop do te iste spletne strani na površju. Generiranje HTML. Obstajata 2 različnih načinov, da lahko to storite. Torej bomo šli skozi te pravice zdaj. Prvi način je, da imate - ja, oprosti. Torej imate le svoj Regular za zanke v PHP, in potem odmeva v PHP, in vam odmeva iz HTML. Uporabo, kar vam Rob je pokazala, HTML, skript in nato s pomočjo PHP tisk, da ga samo natisnete s spletne strani. Druga možnost pa je, da to storite, če ste izločiti PHP in HTML. Tako da lahko imate linijo PHP, ki se začne v zanki, potem lahko imate linijo HTML v ločenem stvar, in potem si na koncu zanke, še enkrat, s PHP. Torej, to je nekako tako izloči. Na levi strani si lahko, da imaš vse - to je samo 1 kos PHP. Na desni lahko vidite, da imate linijo PHP, imate linijo HTML, in boste spet imeli linijo PHP. Torej ga izloči v to, kar počnejo. In boste, upoštevajte, da tako ali tako, za eno od njih, še vedno natisnete slike, slike, slike, tako da HTML vedno je natisnjena na enak način. In potem boste še vedno videli 3 slike prikažejo na vaši spletni strani. Torej, to je 2 različni načini počne isto stvar. Zdaj imamo oblik in zahtev. Kot vam Rob je pokazala, obstajajo oblike HTML, in bomo samo vetrič skozi to. Imate tožbo in imate metodo, in svoje dejanje lepo od tebe, kam greste, da ga pošljete kaže, in način, ali to se dogaja, da se GET ali POST. In zahtevek GET, kot je dejal Rob, pomeni, da boš dal v obliki in boste videli, da je URL, medtem ko je zahtevo POST ne boste videli v URL. Tako majhna razlika. Vendar pa je ena stvar, ki je podobna stvar je, da so POST in GET enako negotov. Torej si lahko mislite, da samo zato, ker si tega ne vidi v URL, to pomeni, POST je bolj varna, vendar še vedno lahko vidim v tvojih piškotkov v informacijah, ki jih pošiljate. Torej ne mislim, da je približno ena ali druga. Druga stvar je tudi omeniti, da imate tudi spremenljivke poglavje. Vidva to lahko uporabilo v pset 7, da bi dobili svoje uporabniško ime podatke. Zgodilo se je, da lahko uporabite to asociativno paleto, $ _SESSION, in potem ste mogli dostopati do različnih stvari in shranite različne stvari po vsej strani. Zadnja stvar je, da imamo SQL, strukturiran jezik poizvedb, in to je programski jezik za upravljanje podatkovnih baz. Kaj, točno, so baze podatkov? Oni so zbirke tabel, in vsaka tabela ima lahko podobne vrste objektov. Tako smo imeli mizo uporabnikov v vašem financ pset. In zakaj so koristne? Ker je to način za trajno shranjevanje podatkov. To je način za sledenje stvari in upravljanje stvari in dejansko videli na različnih straneh in sledenja. Ker se, če si jo shranite v tistem enem trenutku takojšnjo in ga nato uporabiti pozneje, ne boste mogli dostopati do ničesar, ki ste jih shranili. Imamo 4 glavne stvari, ki jih uporabljamo za SQL ukazi. Imamo izbiranje, vstavljanje, brisanje in posodabljanje. Tisti, ki so res pomembne za vas, da vedo za svoj kviz. Hitro bomo šli čez izberite zdaj. V bistvu, si izberete vrstice iz baze podatkov. Torej, če imate tukaj - imamo te 2 različne stvari, in želimo, da izberete iz tabele razredov kjer je super - če je vrednost v stolpcu 1 super. Tako lahko vidite, imamo teh 2 stvari ime razreda, CS50 in Stat110, in imamo ID razreda in slogan. Zato želimo, da izberete vse te informacije. Potem si lahko ogledate tukaj, da to je nekako pobiral te super stolpcu kjer so vse stvari 1, nato pa se je razred ID, ime razreda in slogan, da lahko izločiti. Kako pa to naredite v kodo? Boste morali uporabiti PHP. Tako da je nekako, kako so PHP in SQL povezane med seboj. Zdaj imamo kodo in bomo uporabite našo funkcijo poizvedbe kot smo to storili v pset 7, in bomo teči SQL poizvedbo. Potem bomo imeli - moramo vedno preveriti, če Row je trojni enaka, če false. Torej še enkrat, boste želeli preveriti vrsto in vrednost, in potem, če to ne deluje, potem pa bi se opravičil, kot običajno, kot smo to storili v pset 7. V nasprotnem primeru, da želite zanko skozi vse s tistimi, priročen foreach zanke, da smo pravkar šla mimo. Zdaj, ko smo zanka skozi in smo sami naredili v preteklosti, predpostavimo, da je minilo naše poizvedbe, zdaj imamo foreach zanke. In prva vrstica ima, tako da tukaj je vrstica, tukaj, to je v škatlah. To se dogaja, da natisnete vse podatke, da je lahko dobila. Tako se dogaja, da natisnete na dnu "Želite izvedeti HTML?" Potem se dogaja, da gredo v naslednjo vrstico, saj je bil izpolnjen prvi zanko, in tako potem se dogaja, da natisnete drugo linijo njej, ki se bo STAT110, Najdi vse trenutke. Še zadnja stvar, ki je na SQL ranljivosti. Vem, David dotaknili to malo na predavanju. To lahko preberete pozneje. To je res smešno. SQL Injection je nekako zapleteno stvar. Recimo, da ste pravkar držijo tiste spremenljivke, ki prav v vašo poizvedbo, kot vidite v prvi vrstici. Tako se zdi v redu, kajne? Ti si samo polaganje uporabniško ime in geslo za SQL poizvedbi, in ga želite poslati off in dobili vse, kar je v vaši podatkovni tabeli. To se mi zdi zelo preprosta. Torej recimo nekdo postavlja v, Za geslo te ali besedilo tukaj - biti dejansko v rdeče polje. Torej, recimo, da dajo to geslo v - to je tisto, kar so prišli. Torej, oni so uvedle ali "1" = 1. Nekako neumno geslom, da imajo. Sedaj pa samo zamenjajte, in boste, upoštevajte, da je v tej poizvedbi SQL zdaj, se ocenjuje, da drži vedno, saj boste, upoštevajte, da lahko SQL poizvedba izbere vse te informacije ali si lahko samo še 1 = 1. Tako da je vedno tekoč, da oceni, da res. To se ne dogaja, da res deluje, ker to pomeni, da lahko hekerji vdreti v vaš sistem. Rešitev za to je, da boste morali uporabiti sistem ZOP, kar pomeni, da boste morali uporabiti vprałaje, , ki je tisto, kar ste vi, ki se uporabljajo v pset 7, , kjer boste uporabili vprašaj v mestu, kjer želite postaviti nekaj, in potem boš imel vejico, in potem boste imeli kasneje, Po nizu, različne spremenljivke, ki jih želite zamenjati v vaš vprašajem. Tako boste, upoštevajte, da se tu zdaj imam te rdeče vprałaje. Potem sem dal spremenljivke po mojih nizov, tako da vem, da jih bodo zamenjali v tem vrstnem redu potem. Da bo poskrbel, da če ga nekdo ne kot je ta, in imajo ali 1 = 1 situacijo, ki bo poskrbel, na zadnjem koncu, se prepričajte, da v resnici ne bo prekinil SQL poizvedbo. Ok, tako da je v bistvu vse, tornado PHP in SQL. Veliko sreče vsem vam, in zdaj Ore [Oreoluwatomiwa Babarinsa] Prav vsi. Čas je, da gredo čez nekaj JavaScript in še nekatere druge stvari zelo hitro, tako da ne držiš nocoj. JavaScript. Da. JavaScript je nekako kul stvar, domnevno. Stvari, ki jih resnično morate vedeti o JavaScript, to je nekako kot client-side konec, kaj vaša spletna aplikacija je, da se delaš. Obstaja nekaj stvari, ki jih preprosto ne želijo skrbeti za ves čas na strani strežnika. Vsi mali interakcije, ki poudarja eno stvar, da nekaj izgine. Res ne želite imeti, da se pogovorite s svojim strežnikom ves čas za to. In nekateri, ki sploh ni mogoče storiti na strani strežnika. To je razlog, zakaj potrebujemo nekaj podobnega JavaScript. Kul stvari o JavaScriptu: Treba je dinamično natipkan. Kaj to pomeni, da vaš program ni treba vedeti kaj točno so spremenljivke, ko jo napišem. To bom nekako pogruntal, saj je tekmovanje v teku. Druge stvari, ki so kul o tem: To je kodrasti brace jezika, kar pomeni, sintaksa je podobna C in PHP. Vam ni treba storiti veliko predelati, ko ste učenje JavaScript. Tukaj imamo malo JavaScript. Zanimiva stvar tukaj je, da če gledate na to, imamo malo JavaScript tam v glavo tag. Kaj je pa v bistvu samo vključuje datoteko JavaScript. To je eden od načinov, ki jih lahko vključite JavaScript v vašem programu. Potem drugi malo je pravzaprav nekaj inline JavaScript, Zelo podobna slogu inline s CSS, in ti si samo pisanje nekaj kode zelo hitro tam. JavaScript mora nize. Samo še en način, da bi podatke okrog, zelo koristno. Zelo lepo in enostavno sintakso. Uporabite oklepajev za dostop do vsega in da je vse skupaj. Nič preveč zapletena. Kul stvar JavaScript in skriptnih jezikov na splošno je, da vam ni treba skrbeti velikosti nizov. Saj lahko uporabiš array.length in spremljate to, in lahko tudi niz raste ali skrči, kot ga potrebujete, da. Torej sploh ne treba skrbeti za katero koli vrsto, oh no, moram nameniti več stvari, ali kaj podobnega. Kul stvar tukaj je, da je JavaScript nekaj, kar ti predmeti. To je objektno usmerjen jezik, tako da tisto, kar je bilo, je v bistvu način za vas, da podatkov o skupini skupaj, kar je nekoliko podoben struct, vendar pa lahko dostopate kot struct ali v povezovalne matrike sintakso. To je zelo preprosta in kaj lahko narediš s tem je podatkovna skupina skupaj če imate kup podatkov, ki je povezano. Ker je to vse stvari, ki jih potrebujete za opis avtomobila, vam ni treba, da ga imajo v kup različnih krajih. Lahko samo držijo v 1 objekt v JavaScriptu. Kot verjetno veste, ponavljanjem je eden od teh dolgočasno nalog. Pravkar si to naredil preko znova. Moraš se pogovoriti z vsakim predmetom v avtu, ali boste morali iti skozi vsako postavko na seznamu ali kaj podobnega. Torej JavaScript je, podobno kot so PHP, ki foreach sintakso. V tem primeru je v zanko. To želite uporabljati samo na predmete. Obstajajo nekatere težave, ki se pojavijo, če boste uporabili to na nizi. Na splošno je ena od tistih stvari, čeprav, da je zelo koristno, ker boste odpravili veliko režijske ker nimate dvigni vse v vašem predmetu, ki ga sami. Vam ni treba zapomniti vse ključne imena. Pravkar ste nekako dobiti nazaj v to sintakso. V tem, z na, si samo želim, da se spomnimo da ste dobili nazaj vse ključe, na zelo podoben način, da se razpršene tabele. Če se spomnite tega, ko bi si dal na vrvico, da bi dobili nekaj iz , da bi z njim povezano vrednost z njo. Kaj lahko naredim s tem je, da lahko rečemo, vse v redu, Sem dal v avto, in sem ga poimenoval Ferrari. Tako da boste lahko spet dal v niz Ferrari kasneje, in lahko dobite to. In lahko to storite v zanki z v zanko. Torej, samo več o objektih. Ključna stvar pri tem morate zapomniti je, da lahko uporabite objektno zgradimo kot sintakso, kadarkoli želite z njimi, razen če je, kaj je tvoj uporabiti kot niz ni veljaven ime spremenljivke. Torej, če pogledaš na da imamo ključ s presledki. No, če bi dal object.key, prostor, s, prostor, prostori, da le ne bi imelo smisla skladenjsko. Torej si lahko le to, da s to vrsto nosilca sintakse. Tudi JavaScript je obseg zelo pametno za PHP. Imate 2 načina reševanja področje. Ne moreš imeti var pred spremenljivko, in to samo pomeni, da je to globalna. Si jo lahko ogledate od koderkoli. Tudi če bi dal to v if stavek, kjerkoli drugje v kodi po tej točki, da bi lahko videli, da spremenljivko. Druga stvar, čeprav je z var, je omejena na karkoli funkcijo, da si noter Če niste v funkciji, no, to je globalna. Ampak, če ste v funkciji je vidna samo znotraj te funkcije. Nimam primer, ampak, ja. To je ena od tistih stvari, kjer lahko upravljate kar spremenljivke hočeš biti globalni, kaj spremenljivke, ki jih želite, da se lokalne, vendar pa morate biti previdni, o tem, ker nimate vrsto drobnih zrn nadzora delate v C, kjer, če je kaj prijavljeni v zanko, gre za bivanje, da je za zanko. Stvar, ki smo dejansko skrbi za uporabo JavaScript je manipuliranje spletnih strani, kajne? Mislim, da je, zakaj to počnemo. Za to bomo uporabili nekaj, kar ti DOM. Object Model dokument. V bistvu, kaj počne, je potrebno vse vaše HTML in modelov ven v kup predmetov, ki so gnezdijo drug v drugega. Začnete z nekaj podobnega. Imate na desni strani za mano, kup kode tam, da je neke vrste - Ti misliš, da bi bilo zelo težko manipulirati, ker bi se pri razčlenjevanju skozi kup besedila in imajo za kos narazen stvari. In kaj, če ni bil pravilno formatiran? Slabe stvari se bo zgodilo. Torej JavaScript skrbi za to za vas, in boste dobili lepo strukturo podatkov, kot ena na moji levi, kjer boste morali dokument, in v notranjosti, da imate nekaj, kar ti HTML, in v notranjosti, da imate glavo in telo, in znotraj tega naslova imate naslov, tako dalje, in tako dalje, in tako dalje. To poenostavlja manipulacijo spletno stran, tako da je to samo, oh, samo želim govoriti s tem predmetom. Nekako zelo podoben način, ki bi govoril v drug predmet, ki ga sami naredili. Kot sem rekel, vse DOM je v predmetu dokumenta. Bodisi je to samo eno mesto in potem lahko greš v to, da bi našli stvari, in lahko to storite - to je stari slog za to početje, tam, kjer vam document.getElementById in nato ime, in kot si verjetno lahko povem, to postane zelo okoren čez nekaj časa. Torej si verjetno ne želite, da to storim. Zato imamo Naslednja stvar, bomo govorili o po tem. Ključna stvar tukaj je, da je vse v redu, imaš vse te elemente, kajne? Mogoče bom lahko spremenite barvo nekaj, ko stran se nalaga. Torej kaj? Kaj, če je moj uporabnik klikne kaj? Želim, da narediš nekaj zanimivega, ko kliknejo nekaj. Zato imamo dogodkov. Lahko, v bistvu, našli nobenega elementa v vašem DOM, in potem rekli, hej. Ko se to naloži ali nekdo klikne, ali ko se z miško nad njim, nekaj storiti z njim. In tisto, kar imate, je, da imate naloge, ki obravnavajo to za vas. Te funkcije so viličarji dogodkov. Kaj oni so - to je samo fancy način rekel, ta funkcija se izvrši le, če je ta dogodek zgodi. Tako da obravnava dogodek, ki se zgodi. To je, kako bi si začrtate za obravnavo dogodkov. Imam nekaj gumb, in ko jo kliknete, da eksplodira. Tako da ne kliknite na gumb. To je eden od načinov, da mu je, kajne? Imate gumb oznako, in na klik imate niz, ki pravi, oh, mimogrede, jaz to eksplozijo stvar zame. Sicer pa je tako kot redni gumb pravkar ustvarili. Prav tako lahko to storite na drug način, ki jih oprijemalne DOM element, vendar bomo prihranili, da potem, ko smo govorili o jQuery. JQuery: To je knjižnica, ki je navzkrižno brskalnik. Lahko ga uporabite v precej karkoli. In to samo vam daje veliko orodij za delo z. Ker JavaScript, medtem ko je močan, nima vsa orodja, ki jih potrebujete iz škatle, da bo res spopadli s spletno aplikacijo boste morda želeli storiti. Tako poenostavlja veliko stvari, ki vam daje veliko funkcij iz škatle, ki bi jih običajno morali sami napisati, znova in znova in znova. In samo naredi stvari zelo preproste. Imate tudi selektorje, ki vam omogočajo vzemite ven vse tiste elemente iz vašega DOM veliko bolj preprosto, namesto da bi uporabili te zelo dolge klici funkcij. Več o teh selektorjev. Imate, tam ste bili, recimo, Želim, da bi dobili element z id "rock." No, v jQuery, to je samo $, nato pa niz, ki ima pol kilograma, nato pa "skala". To je zelo preprosta in veliko hitreje kot tradicionalne JavaScript načinu soočanja s tem problemom. In imate podobne stvari za razrede in vrste elementov. jQuery je - eden izmed kul funkcij je, da lahko nekako stisne dol vaša vprašanja o vašem DOM zelo, zelo hitro. Zdaj smo nazaj na ravnanje dogodek, in to je, kako bi ročaj enega dogodka v jQuery. Torej, kaj bomo tukaj smo govoriš, v redu. Imam scenarij oznako, kajne? Torej imam to inline JavaScript. Kaj bomo storili je, da bomo rekli, v redu. Ko je dokument pripravljen, kar pomeni dokument bila nabita, smo šli v tej funkciji, in bomo rekli, v redu, Ta funkcija je dejansko počne nekaj drugega. To je v bistvu rekel, v redu, daj mi elementa z ID "myid." In potem bi to tudi funkcijo trener, ki izvrši, ko ga kliknete. V bistvu, kaj to pa je, pravi, vse v redu. Stran je naložen, tako da bom v, najti ta element, da ga ta obravnavo dogodkov, in je v bistvu vzpostavlja svojo stran za vas. In to je, kako si želeli, da razmišljajo o ravnanju dogodkov. Pravkar si želeli, da razmišljajo o tem, v redu, ko se pojavi nekaj, kar ne želim, da se zgodi? Vi ne želite, da razmišljajo o, ok, moram zagotoviti, da to stvar pogajanj s to stvarjo, ta stvar bla bla bla, ker si samo želim govoriti stvar v smislu dogodkov. Ko se to zgodi, se to zgodi. Ko se to zgodi, se zgodi. In če stvari sprožijo druge stvari, to je super. Vendar ne želite poskusiti in narediti zapleteno kodo kje ste sprožilo več stvari hkrati, saj ste šele tekoč, da si glavobol. V redu. Zdaj bomo lahko dobili našo stran za obravnavo dogodkov, ampak recimo moja uporabnik klikne gumb. Kaj pa, če želim poslati prošnjo nazaj na strežnik, vendar ne želim, da osvežite stran, saj bi morali naložiti novo stran vsak čas postane nekako dolgočasno, in zakaj ga potrebujem spet podirajo glavo, in še enkrat nogo in vsi elementi strani spet Samo za osvežitev pozdrav ali časa? Tako da je, zakaj imamo nekaj podobnega Ajax. Kaj lahko storimo tukaj z Ajax je, lahko rečemo, vse v redu, Rad bi poslali nekaj podatkov na strežniku, in želim, da bi dobili odgovor nazaj, da bom lahko posodobim svojo stran, ali morda samo še nekaj algoritmično izračun, ki ni nujno pokazati ničesar za uporabnika. Kaj morate to storiti? No, morate URL boste morali govoriti. Vaš strežnik samo ne more čudežno poslušajo od nikoder. Morate imeti posebno mesto ste pošilja te podatke. In boste potrebovali tudi nekaj podatkov za pošiljanje, ali morda je dataless poizvedbo. Pravkar želite ping nazaj na strežnik in reči, hej, jaz sem živ, ali nekaj takega. In potem hočeš funkcijo, ki v bistvu ročaji z uspehom. Recimo, da ste dobili nazaj nekaj podatkov iz vašega strežnika, in želite spremeniti naslov uporabnika na njihovi strani. Tako bi dobili podatke nazaj, in bi ga potisnite, da na zaslon. Kaj se zgodi, ko je stran pripravljena, ustvarite na funkcijo klik za ta gumb imenovano greeter. Kaj to potem pa je, ko je ta potisne gumb, Ste govorili z greetings.php, vam bo zahtevo POST, in si rekel, hej, daj mi nekaj iz vaše strani. Ne bomo res morali opisati, ampak greetings.php, reciva, daje nazaj "zdravo svet." Tako smo dobili nazaj to "Hello World", in na uspeh to, ob predpostavki, da gre nič narobe, potem pa gremo na to ciljno mesto da smo opredelili in smo pravkar držijo odgovor tam. In to je zelo preprost način za vzpostavitev Ajax poizvedbo. Zelo hitro, Rob nekako omenil že prej, stvari gre lahko narobe, lahko zgodijo slabe stvari, tako da boste želeli, da se seznanite s temi odzivnimi oznakami HTTP. Kaj je to so le, recimo, 200, je šlo vse v redu. Nekaj ​​drugega, zgodilo slabe stvari. To je na splošno stvar, ki jo želite zapomniti. Vendar je lepo vedeti, da vse te. In na koncu, ko smo šli skozi vse to, moramo zelo hitro govorimo o načrtovanju, in potem bomo lahko vam vse pustiti. Zasnova. Stvari, ki jih želite zapomniti. Vprašajte ta vprašanja: Kdo boste uporabljali to? Kaj bodo jo uporabi za? Kaj pa moji uporabniki briga? Kaj ne briga jih? Si ne želim, da bi aplikacijo in pustite, da samo raste in postane ta velikan, vse-dolgotrajen stvar, ki si ne more niti konča. Želite imeti diskretnih cilje in načrte, in stvari, ki jih želite obravnavati. Naj bo enostavno. Vse to se pravi, v bistvu, bi bilo enostavno za uporabnika, da ga uporabljate, ne da bi bilo velikan pikica besedila, kot je ta tobogan je, pravzaprav. Pravkar si želeli, da je nekaj, kjer je zelo enostavno za nekoga, da gredo v in delajo, kar hočejo storiti. Vi ne želite, da bi moral krmariti 5 strani da bi dobili na svojo primarno funkcijo vaše spletne strani. Če Google imela 5 strani, preden bi lahko celo poiskati nekaj, nihče ne bi uporabili. In nenazadnje, papir prototip, ciljna skupina. Imajo dobro načrtovanje in testiranje praks. Samo zato, ker misliš, da dela za vas, ne pomeni, da kdo drug misli, da deluje. Ampak ja, to je to. [CS50.TV]