[Recenzija: Kviz 1] [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Sveučilište Harvard] [To je CS50.] [CS50.TV] [Lucas Freitas] Dobro došli svi. Ovo je pregled za kviz 1. Baš kao disclaimer, ovo je - mislim, da ćemo pokušati pokriti što je više moguće, ali to ne znači da je ćemo pokriti sve stvari koje mogu biti u kvizu 1. Dakle, budite sigurni da je također uzeti pogledati predavanje, sekcija, sve što možete. Kviz 1 koja će se u srijedu, iduće srijede. Dakle, budite sigurni da se studij. To će biti, vrlo vjerojatno, kao i prvi kviz glede njegova formata, ali vjerojatno će biti mnogo teže. Barem, prošle godine kada sam uzeo 50, mislio sam da je to mnogo teže. Dakle proučiti puno. Idem pokriti strukture podataka i diferencijalno kodiranje. To je nešto što mnogi ljudi misle da je složen, ali ja ću pokušati učiniti ga kao jednostavan kao moguć. Prije svega, ono što želimo ti dečki znati za kviz 1 je konceptualne opise svake od podatkovnih struktura koje ću predstaviti. To znači da ne morate da se zapravo implementirati hash tablicu u kvizu 1. Mi ne želimo da provesti cijeli hash tablicu, možda ćemo pokušati da li provesti neke funkcije, najčešći operacije, ali mi ne ide kako bi ste provesti sve. Dakle, važno je da razumijete koncept iza svake strukture podataka i da ste u mogućnosti da kod u C, samo najčešći poslovi koje imaju za svaku strukturu podataka. I također moći pregledati naputke i tvorevina, jer se čini puno u tim strukturama podataka. Prvo, povezani liste. Povezane liste su zapravo vrlo slična polja, ali razlika između povezan popisu i niz, Prije svega, to je popis povezana je vrlo fleksibilan veličinu dok je u poljima morate birati bilo vrlo velikih dimenzija za niz, tako da znate da ćete biti u mogućnosti pohraniti sve svoje podatke na tom polju, ili morate koristiti malloc imati fleksibilno duljinu niza. U povezanim listama to je vrlo lako samo dobiti više elemenata, stavite više elemenata u popisu povezanom ili ukloniti elemente. A zapravo, ako ne želite popis povezana biti riješeno, možete potražiti i ukloniti elemente u stalnom vrijeme, pa O (1) vrijeme, tako da je to vrlo povoljno. Vi samo morati biti oprezni da se uvijek sjetiti da malloc i bez čvorova, Upravo zato, ako to ne učinite, imat ćete curenje memorije. Dakle povezane liste - definicija čvor je baš kao i ono što imamo ovdje. Stavio sam int n, ali možete pohraniti sve podatke koje želite. Dakle, ako želite pohraniti string, to je u redu. Ako želite pohraniti indetifikaciju, to je u redu, dvostruka, što god želite. Ja samo stavi int n za primjere ovdje. I imate pokazivač na sljedeći čvor. Dakle, u osnovi, popis povezani ima neke podatke, a onda to ukazuje na sljedeći čvor. Ako je posljednji element u popisu povezana, to će ukazati na NULL. Dakle, ovo je primjer popisa povezana. Ok, pa sad da vidimo što možemo učiniti ako želite umetnuti element u popisu povezane. Prvo, funkcija umetak će biti tipa void jer ne želim da se vrate ništa. I ja ću uzeti int kao argument, jer želim znati što želim umetnuti. Dakle, što je prva stvar koju sam trebao napraviti? Pa, ja bi trebao malloc na newnode, , tako da je prva linija. Ja sam samo stvara novi čvor staviti na popis povezana. Dakle, što mogu učiniti? Pa, mi znamo da u našoj implementacijama povezanim listama u razredu, uvijek smo stavili na glavu kao globalna varijabla. Dakle, ono što možemo učiniti je promijeniti glavu. Mogu vam to novi čvor biti novi šef, i to će ukazati na prethodnu glavu. Kako možemo učiniti? Prva stvar koju moram učiniti je promijeniti 'n' u novi čvor na vrijednosti, koji je donesen na tu funkciju. Zatim newnode je sljedeće će biti glava. Glava će biti newnode. Dakle, to je prilično jednostavan. Za brisanje čvora, možemo to učiniti kao što je - Jedan način na koji smo mogli napraviti to jest, ok, ako sam htio izbrisati, primjerice, 3, ono što sam mogao učiniti je samo točka na prethodni čvor na sljedeći čvor 3. Dakle, ja bih samo učiniti nešto takvo. No, ono što je problem s tim? Imam otjecanje memorije, tako da nemam pristup broja 3 više. Problem s tim je da ja neću biti u mogućnosti da se oslobodi tog čvora. Ja ću imati otjecanje memorije i (nerazumljivo) će me mrziti. Dakle, umjesto da radi, vjerojatno bi trebao imati privremeni pokazivač. Zato sam stavio temp. To će ukazati na čvoru da želim izbrisati. A onda sam se kretati prethodne čvorove točke na sljedeći čvor čvora da želim izbrisati. I na kraju, ne mogu osloboditi pokazivač. Moram li osloboditi pokazivač da sam stvoren upravo tamo? Ja ne moram, samo zato - Razlika je u tome da je ovaj čvor je stvoren pomoću malloc, tako da je u gomili, dok je ovaj samo je proglašen kao NULL prekidač u dimnjaku. Pa ja ne moram ga osloboditi. Redu. Tako sada pričajmo o hrpama. Stacks su prilično jednostavne. Napravili smo hrpe i redove u razredu samo pomoću polja, ali bi trebali biti upoznati - samo biti svjesni da i vi možete učiniti hrpe u redovima koriste povezane liste, kao dobro. Dakle, ako imate niz, što će biti stog? Stack, prvo, morat će imati veličinu. Morate spremiti što je veličina dimnjaka koji imate upravo sada. A isto tako da će imati niz, u ovom slučaju brojeva, ali ako želite, to može biti niz od žice, niz rekonstruirati sve što želite pohraniti. O dimnjaku: razlika između dimnjaka i popisu povezanom je da su u snopu imate samo pristup posljednjeg elementa koji je stavljen u snopu. To se zove posljednji u, prvi van. Baš kao da imate hrpu pladnjeva, ako stavite ladicu na vrhu dimnjaka, morate ukloniti tu ladicu prvi koji će imati pristup drugim ladicama. To je ista stvar s hrpe. Dakle, ako želim, primjerice, dodati element na stog, što da radim? To se zove push, i to je prilično jednostavan. Prva stvar koju morate učiniti je provjeriti je li veličina dimnjaka nije veći ili jednak kapacitet snopa. Zato, ako ste već na puni kapacitet, ne možete dodati bilo što drugo. A onda, ako ne, samo trebate dodati element na stog. I na kraju, povećajte veličinu. Dakle, to je prilično jednostavan. Zato sam samo dodati broj 2. A ako želim pop, što znači da želim ukloniti posljednji element koji je dodan i vratiti vrijednost elementa, Prva stvar koju moram provjeriti da li je stog nije prazan. Jer ako je prazna, ja ne mogu vratiti ništa. U tom slučaju, ja sam se vraćaju -1. Inače, idem na opadanje veličine spec., i vratiti brojeve (s.size). Zašto sam opadanje veličinu, a zatim se vratiti s.size? To je zato što, u ovom slučaju, spec. ima veličinu 4, i želim se vratiti Četvrti element, zar ne? No, ono što je indeks četvrtog elementa? Tri. Budući da ja to veličina - što će biti 3, ja samo mogu vratiti s.numbers (s.size) zato što je 3. Dakle, to je samo index. Sada redova. Redovi su skoro ista stvar. Jedina razlika je u tome što umjesto da posljednja u, prvi van, imate prvi, out. Vjerojatno, ako čekate da ići na koncert, ne bi bio sretan ako bi imali hrpu umjesto red. Budući da je posljednja osoba koja dođe će biti prva osoba koja će ući u koncertu. Vi vjerojatno ne bi bili sretni. U redu, prva osoba koja se je i prva osoba koja je izaći. Dakle, u definiciji redu, osim što ima veličinu u nizu, također moraju imati glavu, što je indeks na glavu stog. Dakle, prvi element upravo sada. Postavi u red je ista stvar kao i guranje za dimnjake. Ako ste bili vrlo naivni, ti bi samo reći, dobro, ja samo mogu učiniti istu stvar kao i ja za guranje. Ja samo mogu provjeriti, ako to nije izvan kapaciteta. Ako je to, sam povratak false, inače ja samo mogu izvesti novu vrijednost a zatim povećajte veličinu. Ali zašto je to u redu? Pogledajmo ovaj primjer. Pokušavam enqueue hrpa stvari, a onda ću dequeue i enqueue. Postoji puno naredbi, ali to je vrlo jednostavan. Idem u red pet, pa dodati 5, a onda 7, 1, 4, 6, a onda želim dequeue nešto, što znači da ću se maknuti prvi element. Tako ću maknuti broj 3, zar ne? Prvi element. Ok. Sada, ako sam pokušati enqueue nešto drugo, što će se dogoditi? Prema mom provedbu, Htjela sam staviti sljedeći broj u indeksnom q.size. U tom slučaju, veličina je 8, tako indeks 8 će biti ovdje u zadnjem položaju. Ako sam pokušati enqueue jedan upravo ovdje, ja bih se prepisati zadnju poziciju na broju 1, što je potpuno pogrešno. Ono što želim učiniti je omotati oko sebe i otići na prvu poziciju. Možda bi samo reći, dobro, samo moram provjeriti ako ja zapravo mogu staviti nešto postoji. Ako ne, ja samo kažem, oh, novi puni kapacitet je zapravo kapacitet - 1, a ne možete staviti element postoji. No, ono što je problem? Problem je u tome što ako sam samo dequeue sve ovdje i onda sam pokušati dodati nešto drugo, to bi samo reći, Pa, da ste bili u punom kapacitetu, što je 0. Dakle, vaš red je otišao. Morate zaokrenuti i način omatanje oko da ti dečki naučili u vizionara i drugim psets koristio mod. Možete probati kod kuće da razumijem zašto bi to q.size + q.head mod kapacitet, ali ako provjeriti upravo ovdje, možemo vidjeti da to radi. Tako je u posljednjem primjeru, q.size je 8 a glava je bila 1, jer je takav stav ovdje od polja. Tako će biti 8 + 1, 9. Mod kapacitet 9 će biti 0. To će ići na indeksu 0. Mi ćemo biti na pravom mjestu. I onda probati red kod kuće. Neke važne stvari: pokušati shvatiti razliku između stog i red. Kod kuće, pokušati dobiti dobro upoznati s provedbom u red, dequeue, push i pop. A isto tako razumijem kad bi koristiti svaki od njih. Tako ćemo se opustiti u trajanju od 10 sekundi s hrpom Pokemon. A sad idemo natrag u strukture podataka. Tablice. Puno ljudi su se uplašili od hash tablica. Problem je u set 6, Provjeru pravopisa. Tablice i napad, puno ljudi se prepala od njih. Oni misle da su tako teško razumjeti. Da? [Rob Bowden] Problem postaviti pet. Problem postaviti 5, da. Hvala Rob. Da. Šest je Huff n 'Puff, da. Problem postaviti pet je Provjeru pravopisa, a vi morali koristiti ili hash tablicu ili probati. Puno ljudi misli da su super teško razumjeti, ali oni su zapravo prilično jednostavna. Što je hash tablicu, u osnovi? Hash tablica je niz povezanih listama. Jedina razlika između niza i hash tablicu je da u hash tablicu imate nešto što se zove hash funkcija. Što je hash funkcija? Ja ne znam je li vi ovo možete pročitati ovdje. Ovo je primjer hash tablice. Dakle, možete vidjeti da imate niz sa 31 elemenata. I što nam je činiti u hash tablici imaju hash funkciju koji će prevesti ključ, svaka int na indeks. Ako, na primjer, ako želite odabrati za B. Harrison, Ja bih stavio B. Harrison je u mojim hash funkcija, i hash funkcija će vratiti 24. Pa znam da želim pohraniti B. Harrison je u 24.. Dakle, to je razlika između samo imaju niz i ima hash tablicu. U hash tablicu ćete imati funkciju koja će vam reći gdje će se spremati podatke koje želite pohraniti. Za hash funkcije, želite izgledati za hash funkcije da je deterministički i dobro raspoređena. Kao što možete vidjeti ovdje, vidjet ćete da je mnogo podataka koji sam htjela dućan je zapravo 19 umjesto da koristi 31 i 30 i 29, koji su svi bili slobodni. Dakle hash funkcija koja sam nije bio jako dobro raspoređena. Kad kažemo dobro raspoređena, to znači da želimo imati, otprilike najmanje 1 ili 2 za svaki od - slično, razlika od 1 ili 2 za svaku od indeksa u polja. Želite imati, otprilike, isti broj elemenata u svakoj popisu povezane u nizu. I to je lako provjeriti je li to vrijedi u hash tablicu, pogled kao hash tablice. Onda stabala. To je stablo. Stabla u računalnoj znanosti su naglavačke iz nekog razloga. Dakle ovdje imate korijen stabla, a zatim lišće. Vi samo treba znati nomenklaturu za roditelja i dijete. Svaki čvor ima svoje djece, koja su čvorovi koji su ispod roditelja. Tako, na primjer, 2 će biti roditelj za 3, a za drugo dijete ima pravo, dok je 3 će biti roditelj za 1. i ostala djeca koja su tamo. A 1 koja će se 3. dijete, i tako dalje. Imamo nešto mnogo zanimljivije, pod nazivom pretraživanje po binarnom stablu, u kojem svi su vrijednosti na desno od čvora će biti na desnoj strani, upravo ovdje - na desnoj strani, će biti veći od elementa u korijenu. Dakle, ako imam broj 5 upravo ovdje, svi elementi na desnoj strani će biti veći od 5, a na lijevoj strani svi elementi će biti manji od pet. Zašto je to korisno? Pa, ako želite provjeriti je li broj 7 je ovdje, na primjer, Ja samo ići na 5 prvi, a ja ću vidjeti, je 7 veći ili manji od 5? To je veći, tako da znam da će to biti na desno od stabla. Dakle, imam puno manje stvari za gledati. U provedbi binarno pretraživanje stabla, na čvoru, Samo ću morati imati podatke, tako int n, što bi također moglo imati niz ili bilo što ste htjeli. Vi samo morate biti oprezni na definiranje onoga što je veća, što je manje. Dakle, ako ste imali žice, primjerice, mogli definirati da su sve te stvari na pravom ćemo imati veću duljinu, lijevi će imati niže duljine, pa to je stvarno na vama. Kako mogu implementirati pronaći za BST? Prva stvar koju ćete morati učiniti je provjeriti da li je korijen NULL. Ako je NULL, to znači da je ne postoji jer nemate ni jedno stablo, zar ne? Tako sam se vratiti false. Inače, idem provjeriti je li broj veći od vrijednosti u korijenu. Ja ću pokušati pronaći element na desnoj strani od stabla. Vidite da sam koristeći rekurziju ovdje. A onda, ako je manje, idem pogledati lijevo. I na kraju, u protivnom, ako je ne manje ili ne i veći, to znači da je i sama vrijednost. Pa sam se vratiti točno. Možete vidjeti da sam, ako, ako, ako. I zapamtite, u kvizu 0, imali smo problem koji je imao, ako, ako, ako, a ti si trebao naći neučinkovitost, i neučinkovitost je da koristi, ako. Trebali bi imati koristi ako se, još ako je, drugo, ako i drugi. Dakle, trebao sam koristiti drugi, ako i drugi, ako i drugi ovdje? Zna li itko - Je li? [Student gledano, nečujno] To je savršeno. Dakle, ona govori da to ne smeta, Upravo zbog neučinkovitosti koje smo imali prije bio je to zato, možda ako neki uvjet bio zadovoljen, tako da su napravili neku akciju, ali onda ste bili će provjeriti sve ostale uvjete. No, u ovom slučaju, to se vratio odmah, tako da to nije važno. Dakle, ne morate koristiti if. I na kraju, pričajmo o pokušaja, koja je svačija omiljena. Pokušat je stablo polja. To je vrlo brz za traženje vrijednosti, ali to koristi puno memorije. I to je obično za filtriranje riječi, pa kada želite provesti, primjerice, ne znam, poput telefonskog imenika u telefonu a želite biti u mogućnosti to tip B i samo su imena ljudi koji imaju B. To je vrlo lako implementirati da koristite probati, na primjer. Kako definirate čvor u pokušaju? Vi samo morate imati Bool koja će se is_word. To predstavlja da koristite sve znakove prije tog čvora, ste bili u mogućnosti da se formira riječ, i onda ćete imati niz pokazivača na čvorove. Vidite li da imamo niz roditeljskih čvorova, pa čvora * niz? Da? Pa da vidimo kako se to neće raditi. Za provjeru pravopisa, imamo niz od 27 elemenata, jer imamo sva slova plus apostrof. Prije nego ovdje Samo ću koristiti dva, jer želim biti u stanju napisati na brodu. Ok. Dakle, ovo je primjer pokušaja. Ako sam samo definirati prvi čvor, ja ću imati niz od 2 elementa da su 2 upućuje na nulu, tako da sam samo stavio 'A' i 'B'. I ja ću imati Bool koji kaže is_word. To će biti false za prvo, Upravo zato, prije nego da nemate nikakve znakove. Dakle prazna riječ nije riječ. Tako da je lažna. Ako želim dodati 'A' na ovom rječniku, što bih to učiniti? Ja bih samo da malloc novi čvor za 'a', , a zatim dodati svoje riječi istina. Pa to samo izjavljuje da nakon '' će biti istina. Smisla? Zatim, ako želim dodati 'ba', morat ću malloc 1 za 'b', a onda ću postaviti Boolean false, jer 'b' samo po sebi nije riječ. Onda ću malloc jedan za 'A', pa 'ba', a onda ću postaviti je riječ istina. Zbog 'ba' je riječ. A onda, ako želim vidjeti ako 'b' je u tom rječniku, Ja samo mogu ići na prvoj, 'b'. Idem i ja pogledati je riječ, a on kaže netočno. Dakle, nije riječ. Ako želim provjeriti 'ba', Idem u prvoj, 'b', a zatim otići na 'A', a ja vidim istina, pa je riječ. Smisla? Puno ljudi se zbunjeni pokušaja. Ne? Konačno, diferencijalno kodiranje. Huffman kodiranje je vrlo korisno za spremanje memorije i stisnuti tekstualne datoteke, samo zato puno vremena koje koristite 'A' i 'e', ​​primjerice, u dokumentima, ali ja ne znam da li ste vi koristite "Q" ili "z" koliko. Nakon što je samo 1 bajt za svakog lika, svaki - na 256 znakova koje imamo u ASCII tablice nije baš optimalna, Upravo zato što postoje neki znakovi koji koriste mnogo više, tako da vjerojatno bi trebao koristiti manje memorije za one. Kako mogu koristiti diferencijalno kodiranje? Moramo napraviti Huffman stablo.  Huffman stablo ima čvorove da imaju simbol koji će biti poput, '', 'b', 'c', pisma, bez obzira na pismo imate, frekvencija koja je frekvencija koja riječ pojavljuje u tekstu, da li su stvaranju Huffman stablo za, a zatim čvor koji će ukazati na lijevoj Huffman stabla i još jedan čvor koji će ukazati na desnoj strani. Dakle, baš kao i drvo. Kako ste izgraditi Huffman stablo? Ideš odabrati 2 čvorova koji imaju najniže frekvencije. Ako imate kravatu ćete odabrati dva čvorišta da imaju najniže ASCII vrijednosti kao dobro. Onda ćeš stvoriti novi stablo iz tih 2 čvorova koje će imati u kombinaciji frekvencije u roditeljski čvor. I onda ćeš ukloniti 2 djece iz šume i zamijeniti ih s roditeljem. I ti ćeš to ponoviti dok imate samo jednog stabla u šumi. Pa da vidimo kako će učiniti Huffman stablo za ZAMYLA. Možete vidjeti da sva slova imaju frekvenciju 1, osim za "A", koja ima frekvenciju 2. Tako sam stvorio čvorovi za sva slova sam stavio u red ASCII vrijednosti i učestalosti. Dakle, ako želim stvoriti prvi stablo, što će biti s 'L' i 'M'. Dakle, to je ovdje. Frekvencija para će biti 2 jer je 1 + 1, onda sljedeći 2 s najnižim frekvencijama su 'Y' i 'Z'. I onda sam ih sve što - imaju frekvenciju od 2. Dakle, one koje su one koje imaju najnižu ASCII vrijednost za sljedeći? 'A' i 'L'. Tako sam stvoriti novi čvor, i na kraju, to je 4 i 2, pa 2 će biti na lijevoj strani. A to je Huffman stablo. Zatim, ako želim napisati neki tekst, kao što je u binarnom pretvoriti u tekst, koristeći Huffman stablo je vrlo jednostavno. Na primjer, ako kažem da se kreće s lijeve strane je 0 i kreće na desnoj strani je 1, Što je u tome što će predstavljati? Dakle kao što 1, 1, pa desno, desno, te 0, tako da bi se ostavila L, a zatim 1, 0, 0. Dakle, 1, 0, pa samo 1, 0, ''. A onda 0, 1, pa 'Z'. I onda 1, 0, 0 - nema. 0, 0 će biti 'Y', tako lijeni. Dakle, to je sve za mene, Rob ide preuzeti. [Rob Bowden] Dakle, tjedan 7 stvari. Imamo puno ići preko jako brzo. Bitno operateri, buffer overflow, CS50 knjižnica, a zatim HTML, HTTP, CSS. Sve u kao 15 do 20 minuta. Bitno operateri. Postoje 6 od njih da trebate znati. Bitno i, bitovni ili, XOR, napustio pomak, zar pomak, i ne. Pravo pomak, a ne da se jedva vidio u predavanju na sve. Mi ćemo ići preko njega brzo ovdje, ali dobro je znati da su 6. da postoje. Zapamtite da Bitwise operateri kao kad ti 3 + 4. Vi ne bave binarnog 3 i 4. S Bitno operaterima zapravo bave pojedinačne bitove brojevima 3 i 4. Dakle, prva koja mi ćemo reći je bitovni ne, a sve je to ipak okrenuti sve bitove. Pa evo, ako ste ovo pišem u C, ne bi ga pisati kao ~ 11.011 ili bilo što, što bi napisao da mi se ~ 4, i onda bi okretanje binarni prikaz 4. Pa evo, ~ nekog binarnog broja 1101101 će upravo okretanje sve 1 je na 0 a i sve je 0 do 1-a. Kao što sam rekao, česta upotreba toga, , a mi ćemo ga vidjeti u malo, je kao želimo da se s nekim brojem gdje su svi bitovi su 1, osim jednog od njih. Dakle, to je obično lakše izraziti broj gdje je upravo to jedan bit postavljen, a onda se na ~ od njega, tako da je svaki drugi bit je postavljen, osim za tu jednu. Dakle, to je ono što ćemo koristiti više u malo. Bitno ili. Ovdje su 2 binarni brojevi i ove 2 broja su prilično predstavnik, jer oni predstavljaju sve moguće Kombinacija bitova vam može trebati operirati. Evo, kad sam or'd svako malo, mi idemo samo usporediti ravno prema dolje. Tako se na lijevoj strani imamo jedan i jedan. Kad sam bitovima | onima, što ću dobiti? Jedan. Zatim bitwise | 0 i 1 će mi dati? Jedan. Bitno 1 i 0 će biti ista stvar, jedan. Bitno 0 | 0 će mi dati 0. Dakle, jedini slučaj u kojem sam se 0 je u 0 | 0 slučaj. A možete misliti da je baš kao i logičke ORS. Dakle, ako mislite od 1 kao istinske i 0 kao lažna, ista stvar vrijedi i ovdje. Dakle, istina ili istina je istina, istina ili laž je istina. Lažno ili istina je istina, lažna ili lažno je jedina stvar koja je zapravo lažna. Evo primjer koji bi trebali znati kao prilično dobar primjer kada se koriste Bitno operateri. Evo, ako mi ili grad '' s Ox20, a mi ćemo gledati na to u sekundi, dobili smo nešto. A ako smo ili malo '' s Ox20, dobili smo nešto. Tako ćemo podići ASCII tablice. Ok. Ovdje vidimo da je 'A' je - ovdje imamo '' je decimala 65. No, ja ću ići s heksadecimalnom, što je Ox41. Prilično siguran da ga je vidio u klasi. Mislim da smo ga vidjeli u razredu da je prilično lako pretvoriti heksadecimalni u binarne. Pa evo, ako želim staviti 4 u binarnom, da baš će biti 0100. To je jedna je mjesto, 2. mjesto, 4. mjesto, tako da je ovo 4. Onda sam se Split 1 u binarnom obliku, koja će se 0001. I tako to će biti predstavljanje 'A' u binarnom obliku. Uzimajući malim slovima '", sada će biti Ox61, gdje se, dijeleći ovih gore u svom binarnom, pa 6 - Neka je zapravo to učiniti - je nema gumicu? Gumica. Ox61. Dakle, dijeleći 6 u binarnom će biti 0 + 4 + 2 + 0. I cijepanje 1 koja će se 0001. Gledajući razlika između ova dva, vidimo da je jedina razlika između malih i kapitala 'A' je ovo jedan malo. Dakle, vraća se ovdje - u redu. Vraćajući se ovdje, ako ćemo gledati na ono malo Ox20 je, tako jak Ox20 u svom binarnom, je 0010, 0000. Ox20, samo malo da je postavljena je to malo da se bave, s prebacivanje između kapitala i mala slova "A". Ako sam ili '", što je ovaj jedan,' ', ako ja ili '' s Ox20, što ću dobiti? [Student, nečujno] malim slovom '", jer će se okrenuti ovu malo na jednoj. A ako sam ili '' s Ox20, što ću dobiti? Malim slovima, jer upravo ORing '' s Ox20, Samo ću se ORing ovu jednu malo na jednoj, to je već 1, tako da to nije važno. Tako smo dobili 'A' i 'A'. Bitno a. Opet, možemo misliti na to kao naš logičan i kolega. Na lijevoj strani imamo istinito i točno. To se događa da bi bilo istinito, a za sve slučajeve, lažna i istinita ili istinito i lažno, ili lažno i netočno, nitko od tih stvari su istinite. Dakle, ono što smo završiti dobivanje 1000. Tako sada, ovdje, ovdje gdje sam koristio vjerodostojna bitovima ne, gdje smo imali Ox20. Dakle, ovo je Ox20. Sada ono što želim učiniti, bitovima ~ od Ox20. To će se okrenuti sve bitove. Pa ja imam 1101, 1111. I tako '' anded sa ~ Ox20 će mi dati ono? Samo malo mi stvarno trebamo razmišljati o tome je ovo jedan, jer, ako su sve ove bita postavljena na 1, onda ćemo dobiti upravo ono '"bio, osim, eventualno, što je ovo malo je. Jer, ako je bilo 1, sada će biti postavljena na 0, , jer bez obzira na to, anded s tim što će biti 0. Dakle, ono što je '' & ~ Ox20 će mi dati? [Studenti odgovoriti, nečujno] I ono što je '' i - to je '". I ono što je '' & ~ Ox20 će mi dati? 'A.' Budući da je ovo trenutno 1. ANDing s ovim 0 ide kako bi to 0, a sad ćemo dobiti 'A'. Obje su ',' i na kraju, ali ne manje važno od ovog tipa, imamo XOR. To je vrlo slično kao i, osim što znači isključivo ili. To je kao ono što obično smatramo ili u stvarnom svijetu. Znači li to bilo 'x' ili 'y', ali ne i oboje. Evo 1 ^ 1 će biti 0. Jer istina, to je - to ne radi, kao i sa logično pravi i lažni kao bitovima & i ili učiniti, ali istinito ^ istina je laž. Budući da smo se samo žele vratiti true ako samo jedan od njih je i istina. Dakle 1 ^ 1 0. Što je s 0 ^ 1? Je 1. 1 ^ 0 je 1, 0 ^ 0 je 0. Dakle, u svim okolnostima, 0 bitovima nešto 0 će biti 0. 1 bitovima nešto 0 ili 0 bitovima 1, ako je | ili ^, to će biti 1, a ako je i to će biti 0. I jedini slučaj gdje 1 bitovima 1 nije 1 je s ekskluzivnim ili. To je 0110. Dakle, ovdje je sada, koristeći XOR - pa smo se vratili na 20.. '' ^ Ox20 je ove 2 bita smo uspoređuju. Dakle 1 ^ 0 će mi dati što? Jedan. '' ^ Ox20 će mi dati? Malim slovima. '' ^ Ox20 će mi dati? Kapital A. Jer bez obzira na to radi, to XORing s Ox20 je učinkovito flipping god to malo je. Ako je 0, to je sada će postati jedan. Budući da je to 1, 1 ^ 1 0. Tako je naša '' postao '', a naš '' postala '". Dakle XOR je stvarno zgodan način samo flipping slučaj. Vi samo želim ponoviti tijekom niz slova i izmjenjivati ​​slučaj svakog pojedinog lika, ste upravo XOR sve s Ox20. Sada nam je preostalo pomak. Lijevi shift samo ide na, u osnovi, gurati sve brojeve u, ili u lijevo, i umetnite 0 je iza njih. Dakle, ovdje imamo 00.001.101. Idemo gurnuti 3 0 je s desne strane, a mi smo dobili 01.101.000. U nebinarni uvjetima, vidimo da je to stvarno bave 13 Lijevi pomaknut s 3, što nam daje 104. Dakle lijevo klizećeg vidimo ovdje, x << y je u osnovi x * 2 ^ y. 13 * 2 ^ 3, 2 ^ 3 je 8, tako da 13 * 8 104. Ako samo razmišljamo o binarnom općenito, kako svake znamenke, ako ćemo početi s desne strane, to je jedna je mjesto, a zatim u dva je mjesto, a zatim je četiri je mjesto. Dakle, gurajući u 0-ih s desne strane, mi smo samo gura stvari koje su bile u četiri je mjesto na 8. mjesto, i stvari koje su bile u osam je mjesta na 16. je mjestu. Svaki pomak samo množi sa 2. Da? [Student] Što će se dogoditi ako se pomaknuo za 5? [Bowden] Ako pomaknuo za 5 ti bi samo izgubiti znamenke. Neizbježno, to je ista stvar. Kao, cijeli brojevi su samo 32 bita, Dakle, ako ste dodali 2 stvarno velika prirodna broja, to jednostavno ne uklapa u cijeli broj. Dakle, to je ista stvar ovdje. Ako pomaknuo za 5, mi bi samo izgubiti taj jedan. I to je vrsta ono što mislim "ugrubo" gdje ako pomak predaleko, gubite bitova. Pravo pomak će biti suprotno, gdje ćemo gurati 0 isključio kraju, i za naše potrebe, ispuniti 0-ih s lijeve. Dakle, to, mi smo u osnovi unazad što smo već učinili. A vidimo da su tri 0-a o pravu samo su otpali, i mi smo gurnuo 1101 skroz udesno. Ovaj je događaj 104 3., koji je, učinkovito, x / 2 ^ y. Pa sad, evo, to je slična ideja. Zašto je to samo okvirno x / 2 ^ y, a ne zapravo x / 2 ^ y? Jer ako sam bio pomaknut za 4, ja bi izgubio jedan. Uglavnom, što mislite o, samo mislim cjelobrojno dijeljenje u cjelini. Dakle, kao što je 5/2 je 2. To nije 2.5. To je ista ideja ovdje. Kad podijelimo s 2, možemo izgubiti ak bitova na putu. Dakle, sada - da je za Bitno. To je sve što trebaš znati. Sjetite se slučaja korištenja smo vidjeli u razredu, kao što je malo maska ​​je korisno za bitovni operatori, ili ih koristiti za bitne maske. Velika slova i mala slova, pretvorbi je prilično prototipski primjer. Ok, pa buffer overflow napada. Svatko se sjetiti što je u redu s tom funkcijom? Obavijest proglasimo niz od 12 bajtova, 12 znakova, i onda mi kopirati u naš tampon od 12 znakova cijeli niz bar. Dakle, ono što je ovdje problem? Magični broj 12 treba skoro odmah iskočiti kao - zašto 12? Što ako se dogodi da se bar više od 12 znakova? Što ako bar je milijune likova? Ovdje je pitanje memcpy. Ako bar je dovoljno dugo, to će samo potpuno - 'c', 'c' ne brine da je samo 12 znakova; 'C' ne zanima me da se ne može uklopiti da mnogo bajtova. To će samo potpuno prebrisati char, 12 bajtova smo dodijeljeno za njega, i sve mimo njega u memoriji koji zapravo ne spadaju u tu tampon s bilo niz bar je. Dakle, to je slika koju je vidio u razredu gdje mi imamo hrpu odrastanja. Trebali bi se koristiti za ove slike i upoznajte se s njima opet. Mi imamo hrpu odrastanja, memorijske adrese početi na 0 na vrhu i narasti do sviđa 4000000000 na dnu. Mi imamo polja 'c' negdje u memoriji, onda mi imamo pokazivač crtičnog točno ispod njega, i onda imamo spremljene frame pokazivač u našoj adresi povratka i naše matične rutinu u hrpu. Sjetite se što je povratna adresa je? To je kada je glavni poziva funkciju Foo, poziva bar funkciju, neizbježno, bar vraća. Dakle, kada se vraća bar, oni moraju znati da to ide natrag u foo da ga zove. Dakle, povratak adresa je adresa funkcije koje mora vratiti do kada je funkcija vraća. Razlog je to važno za buffer overflow napada, jer je, jednostavno, hakeri željeli promijeniti tu povratnu adresu. Umjesto da ide natrag u foo, ja ću se vratiti tamo gdje hacker želi da se vrati na. A, povoljno, u kojem haker često želi vratiti u je početak tampon da smo izvorno imali. Dakle primijetiti, opet, Little Indian. Aparat je primjer Little indijskom sustavu, pa cijeli broj ili pointer je pohranjen bajtova obrnuti. Dakle, ovdje vidimo - to? Da. Vidimo Ox80, OxC0, Ox35, OxO8. Zapamtite heksadecimalni znamenki? Mi ne preokrenu heksadecimalni znamenki u Little Indian, jer 2 heksadecimalni znamenki čine jedan bajt, a mi smo preokrenuti bajtova. Zato mi ne pohranu, kao što su, 80530CO8. Mi pohranu, umjesto toga, svaki par 2 znamenke, počevši od desne. To adresa odnosi na adresu početka našeg tampon da mi zapravo htjeli kopirati u na prvom mjestu. Razlog je to korisno je zato, što ako je napadač dogodilo, umjesto da je niz koji je sve to samo bezopasna niz poput, njihovo ime ili nešto, Što ako, umjesto toga, da string su samo neke proizvoljnog koda da je sve što su htjeli to učiniti? Tako su mogli - ne mogu se sjetiti bilo hladno koda. To bi moglo biti bilo što, ipak. Bilo pogubno code. Ako su htjeli, oni su samo mogli učiniti nešto na segmentima grešaka, ali to bi bilo besmisleno. Oni obično to učiniti za hack vaš sustav. Redu. CS50 knjižnica. To je, u osnovi, getInt, getString, sve te funkcije smo dali za tebe. Dakle, imamo char * string, a to je apstrakcija da smo raznio u nekom trenutku tijekom semestra. Ne zaboravite da je string je samo niz znakova. Dakle, ovdje vidimo sažeta verzija getString. Trebali bi se osvrnuti na to da se sjećam kako je to zapravo provodi. Ključne su detalji, primijetit ćemo dobiti u jednom liku u isto vrijeme od standard u, koji je baš kao i nama tipkati na tipkovnici. Dakle, jedan znak na vrijeme, a ako smo dobili previše znakova, tako da, ako je n + 1 je veći od kapaciteta, onda moramo povećati kapacitet naše tampon. Dakle ovdje smo udvostručenje veličine našeg tampon. I to stalno događa, a mi znak umetnuli u našu tampon dok ne primimo novu liniju ili kraj datoteke ili što god, u tom slučaju, mi smo gotovi s string, a zatim u stvarnom getString smanjuje memoriju, kao i ako smo dodijeljeni previše memorije to će se vratiti i smanjiti malo. Dakle, mi ne pokazuju da, ali glavna ideja je to mora pročitati u jednom liku u isto vrijeme. To se ne može samo čitati u cijelu stvar odjednom, jer pufera samo određene veličine. Dakle, ako je niz koji se pokušava umetnuti u tampon je prevelika, onda bi se preliti. Dakle, ovdje smo se spriječilo da se samo čita u jednom liku u isto vrijeme i raste svaki put kad trebamo. Dakle getInt i ostali CS50 knjižnica funkcije imaju tendenciju da koriste getString u njihove primjene. Tako sam istaknuo važne stvari ovdje. Ona poziva getString dobiti niz. Ako getString uspjeli vratiti pamćenje, sjetite se da getString mallocs nešto, pa kad god nazvati getString da ne bi trebali (nerazumljivo) osloboditi taj niz koji ste dobili. Pa evo, ako to nije malloc nešto, vraćamo INT_MAX samo kao zastavu koja, hej, nismo bili u mogućnosti da se zapravo cijeli broj. Vi bi trebali ignorirati ono što sam se vratiti k vama, ili ne treba tretirati kao valjani ulaz. Konačno, uz pretpostavku da je uspjela, koristimo sscanf s tom posebnom zastavom, što znači, prvo kolo cijeli broj, onda dalo nikakve znakove nakon toga cijeli broj. Dakle primijetiti želimo jednaka 1.. Dakle sscanf vraća koliko mečeva ako uspješno napravili? To će vratiti 1 ako se uspješno uskladiti cijeli broj, ona će se vratiti 0 ako to ne odgovara cijeli broj, i ona će se vratiti dva ako se podudaraju cijeli slijedi neki lik. Dakle, primijetit ćemo ponovno pokušati ako mi odgovaraju sve samo jednom. Dakle, ako se ušli 1, 2, 3, C, ili 1, 2, 3, X, onda 1, 2, 3 će se pohranjuju na cijeli broj, X bi se pohranjuju na karakter, sscanf će se vratiti dva, a mi bi ponovo pokušati, jer mi samo želimo cijeli broj. Brzo puše kroz HTML, HTTP, CSS. HyperText Markup Language je struktura i semantika webu. Ovdje je primjer iz predavanja gdje smo HTML tagova. Imamo oznake glavi, tijelu oznake, imamo primjere praznih oznakama gdje smo zapravo nemaju početak i zatvoriti tag, imamo samo link i sliku. Nema zatvaranja slike tag, postoji samo jedna oznaka koja ostvaruje sve oznake treba učiniti. Link je primjer, vidjet ćemo kako se povezati s CSS, Scenarij je primjer kako se povezati s vanjskim JavaScript. To je prilično jednostavan, i zapamtite, HTML nije programski jezik. Evo, sjetite se kako bi definirali oblik ili barem ono što će to učiniti? Takav oblik ima neku akciju i metodu. Metode koje će samo ikada vidjeti su GET i POST. Dakle, dobili je verzija u kojoj je stvar dobiva staviti u URL. POST je mjesto gdje se ne stavi u URL-u. Umjesto toga, sve podatke iz obrasca je umetnuto više skriveno u HTTP zahtjev. Pa evo, akcija definira gdje HTTP zahtjev ide. Gdje će se google.com / search. Metoda. Zapamti razlike između GET i POST, i, samo reći kao primjer, ako želite nešto oznaka. Vi nikada neće biti u stanju oznaku URL POST jer podaci nisu uključena u URL. HTTP, sad, je HyperText Transfer Protocol. HyperText Transfer Protocol, što se i očekuje da se prijenos HyperText Markup Language, i to ne radi. No, to također prenosi sve slike možete naći na webu, bilo preuzimanja što bi početi kao HTTP zahtjev. Dakle HTTP je samo jezik World Wide Webu. I ovdje je potrebno prepoznati ovu vrstu HTTP zahtjev. Ovdje HTTP/1.1 na strani samo kaže da je verzija protokola koristim. To je prilično uvijek će biti HTTP/1.1, kao što ćete vidjeti. Tada smo vidjeli da je to GET, POST alternativa se, da bi mogli vidjeti. I URL koji sam pokušavao posjetiti bio www.google.com/search?q = bla, bla, bla. Dakle, ne zaboravite da je ovo, upitnik q = bla bla bla, je vrsta stvari koje se podnosi obrazac. Odgovor se možda vratiti u meni će izgledati nešto poput ovoga. Opet, počevši s protokolom, što će biti da, slijedi kodom stanja. Ovdje je 200 u redu. I na kraju, web stranica koja zapravo sam tražio će uslijediti. Moguće status kod možete vidjeti, a vi bi trebali znati više od njih. 200 OK vjerojatno ste vidjeli prije. 403 Forbidden, 404 Not Found, 500 Internal Server Error obično ako odete na web stranicu i da nešto ne valja ili njihovi PHP kod ruši, dok je u aparatu imamo tako veliki narančasti okvir koji dolazi i kaže, kao što je, nešto nije u redu, ovaj broj ne radi ili ova funkcija je loše. Obično web stranice ne želite li znati što funkcije su zapravo loše, Dakle, umjesto da samo ću vam dati 500 Internal Server pogreške. TCP / IP je jedan sloj ispod HTTP. Ne zaboravite da je internet izvan World Wide Webu. Kao, ako igrate online igru ​​koja ne ide putem HTTP, to ide kroz različita - to je još uvijek koriste internet, ali to ne koristi HTTP. HTTP je samo jedan primjer od protokola izgrađen na TCP / IP-a. IP doslovno znači Internet Protocol. Svako računalo ima IP adresu, oni su ti 4-znamenkasti stvari kao što je 192.168.2.1, ili što god, koji se, lokalna jedan. No, to je obrazac IP adresu. Dakle, DNS, Domain Name Service, to je ono što u prijevodu stvari poput google.com do stvarne IP adrese. Dakle, ako ste tip koji IP adresu u URL-u, da bi vas dovesti na Google, ali obično ne sjećam se tih stvari. Vi imaju tendenciju da se sjetite google.com umjesto. Posljednje što imamo je porta, gdje je to TCP dio IP. TCP radi više. Razmislite o tome, kao što je, imate svoj preglednik izvodi stranica. Možda imate neki e-mail aplikaciju da radi; možda imate neki drugi program koji koristi Internet trčanje. Svi oni trebaju pristup Internetu, ali vaše računalo ima samo jedan WiFi karticu ili bilo što drugo. Dakle priključci su način na koji smo mogli razdvojiti kako se ti programi su u mogućnosti koristiti internet. Svaka aplikacija dobiva jedan određeni port da se može slušati na, i po defaultu, HTTP koristi port 80. Neki e-mail usluge koriste 25. One s niskim brojem imaju tendenciju da se zadržana. Ti su obično u mogućnosti da biste dobili veći brojem onih za sebe. CSS, Cascading Style Sheets. Mi style web stranice s CSS, a ne s HTML. Postoje 3 mjesta možete staviti svoj CSS. To može biti u istoj razini, između stilskih oznaka, ili u potpunosti zasebnu datoteku, a zatim povezati u. I ovdje je samo primjer CSS. Trebali biste prepoznati ovaj uzorak, gdje je prvi primjer je da smo podudaranje tjelesnu oznaku, a ovdje smo centriranje tijela oznaku. Drugi primjer, mi odgovara stvar uz predočenje osobne podnožje, a mi smo primjeni neke stilove za to. Obavijest da je ID podnožje poravnava na lijevoj strani, dok je tijelo tekst poravnava centar. Podnožje je unutar tijela. To će se, umjesto toga, text-align napustio, iako tijelo kaže text-align centar. To je cijela kaskadno dio toga. Možete imati - možete odrediti stilove za tijelo, i tada su se stvari u tijelu možete navesti više specifične stilove, te stvari rade kao što ste očekivali. Konkretnije CSS specifiers imaju prednost. Mislim da je to. [Ali Nahm] Pozdrav svima. Kada bih samo mogao dobiti vašu pažnju. Ali sam i ja idem kroz PHP i SQL jako brzo. Dakle, možemo početi. PHP je kratica za PHP: Hypertext Preprocessoru. I kao što bi svi trebali znati, to je jezik skripti na strani poslužitelja, i mi ga koristiti za leđa kraj web stranice, i kako to radi puno računanja, na iza-scene dio. Sintaksa. To nije poput C, iznenađenje, iznenađenje. Ona uvijek mora početi s, ako možete vidjeti, - Ne mogu pomaknuti naprijed. Možete vidjeti što trebate nove vrste aparatića, a onda je potrebna i PHP?. To je uvijek koliko imate uokviriti vaše PHP tekst, PHP koda. Tako da ne mogu samo biti poput C, gdje ste vrsta staviti ga na prvo. Morate ga uvijek okružuju. I sada, glavna sintaksa je da su sve varijable trebaju početi s $ karaktera. Morate to učiniti kada ste ih definiraju, morate to učiniti kada govoriš im kasnije. Uvijek trebate to $. To je vaš novi najbolji prijatelj, prilično mnogo. Ne - za razliku od C, što ne treba staviti kakvu varijabla tipa je. Dakle, dok vi trebate dolara, ne morate staviti, kao što su, int x ili niz godina, i tako dalje, i tako dalje. Tako mala razlika. Kao rezultat toga, to znači da je slabo PHP tipa. PHP je slabo tipa jezik, a slabo je upisali varijabli. Drugim riječima, to znači da možete odabrati između različitih vrsta promjenjive vrste. Možete pohraniti svoj broj 1 kao int, možete ga spremiti kao niz, a možete ga spremiti kao float, i da će sve biti kako broj 1. Iako ste ga pohrane u različitim oblicima, to je još uvijek - varijabilni vrste još uvijek drži na kraju. Dakle, ako pogledate ovdje, ako se sjećate iz pset 7, mnogi od vas vjerojatno imali problema s tim. Dvije jednake znakove, 3 jednake znakove, 4 jednake znakovi. Ok, nema 4 jednake znakove, ali postoje 2 i 3. Možete koristiti 2 jednake znakove provjeriti vrijednosti. To možete provjeriti preko tipova. Dakle, ako se može vidjeti na prvi primjer, Imam num_int == num_string. Dakle, vaš int i vaš string su oboje, tehnički, 1, ali oni su različiti tipovi. No, za dvostruke jednakima, to će još proći. Međutim, za triple jednakima, provjerava vrijednost, kao i različite vrste. To znači da to neće proći u tom drugom slučaju ovdje, gdje ste koristeći tri jednake znakove umjesto. Dakle, to je velika razlika da bi trebali svi su pokazali sada. Gudački ulančavanje je još jedna moćna stvar koju možete koristiti u PHP-u. To je u osnovi samo to zgodan dot oznake, te da je, kako se može vezati konce zajedno. Dakle, ako imate mačku i imate psa, a vi želite staviti dvije žice zajedno, možete koristiti razdoblje, a to je vrsta kako se to radi. Također možete samo staviti ih jedni pored drugih, kao što možete vidjeti ovdje, u donjem primjeru, gdje sam odjek niz 1, prostor niz 2. PHP će znati da ih zamijeni kao takve. Polja. Sada, u PHP-u, postoje dvije različite vrste polja. Možete imati redovite polja, a također možete imati asocijativne nizove, i da ćemo proći kroz njih upravo sada. Redovni polja su samo ovo u C, pa imate indekse koji su numerirani. Sada mi samo ćemo stvoriti i staviti - pa to je kako smo stvorili prazan niz, onda ćemo staviti u indeksnom broja 0. Mi ćemo staviti broj 6, vrijednost 6. Možete ga vidjeti na dnu ovdje. Where's - na indeksnim brojem 1. ćemo staviti vrijednost broj 4, i tako možete vidjeti da postoji 6, ima 4, a onda kao da smo tiskanje stvari, kad smo pokušati ispisati u odnosu na vrijednost indeksa brojem 0, onda ćemo vidjeti vrijednost 6 se ispisati. Cool? Tako da je redoviti polja za vas. Drugi način možete dodati i stvari za redovite polja sada je možete samo ih dodati na kraju. To znači da ne morate da odredite određeni indeks. Možete vidjeti broj, a zatim u uglate zagrade nema index navedeno. I to će se znati - PHP će znati da samo ga dodati na kraju popisa, sljedeći slobodno mjesto. Tako možete vidjeti jedan upravo tamo na tom mjestu 0, 2. otišao tamo na prvom mjestu. 3 ide - dodaje kao i tamo. Dakle, ta vrsta ima smisla. Vi ste samo stalno ga dodate, a onda kad smo odjekuje indeks broj 1, to će ispisati vrijednost 2. Onda imamo polja koja su asocijativne nizove. Asocijativne matrice, umjesto brojčane pokazatelje, što učiniti je, da su indeksi koji su po žici. Možete vidjeti, a ne - Riješio sam se svih tih brojčanih pokazatelja, a sada je Key1, key2, key3, a oni su u navodnicima će značiti da su svi nizovi. Dakle, možemo imati primjer za to. Primjer za to je da imamo TF, a to je ime index. Idemo na put "Alija" kao ime, na indeksu, kalorija pojede, možemo staviti int ovaj put umjesto niza, i onda na index voli, možemo staviti cijeli niz unutar nje. Dakle, to je vrsta - to je sličan koncept kako smo imali indeksi s brojevima, ali sada možemo promijeniti indekse širom da ih ima kao žice umjesto. Također možete to učiniti, osim samo to radili pojedinačno, sve to možete napraviti u jednom komad. Dakle, možete vidjeti da je TF tog niza, i onda smo ih sve postaviti u jednom div kvadratnom bracket setu. Tako da se može ubrzati stvari. To je više stilska izbora nego ne. Također imamo petlje. U C imamo petlje da se ovako raditi. Imali smo niz, pa smo otišli s indeksom 0 do kraja popisa, a mi smo sve to ispisati, zar ne? Osim Problem je, za asocijativnih nizova, ne nužno znati one brojčane pokazatelje jer sada imamo indekse niza. Sada ćemo koristiti foreach petlje, koja je, opet, nadam se koriste u pset 7. Foreach petlje će samo znam svaki dio popisa. I to ne mora znati točno numerički indeks koji imate. Dakle, imate foreach sintaksu, pa je foreach, stavite niz. Tako je moj niz naziva pset, a onda kao, riječ kao, a onda staviti ovaj lokalni privremenu varijablu da idete na korištenje samo za određenu stvar koja će održati posebna - Jedan primjerak ili jedan dio niza. Pset broj će držati jedan, a zatim možda će održati broj 6, i onda će se održati broj 2. Ali, to je zasigurno proći kroz svaku vrijednost koja je u nizu. Korisne funkcije koje bi trebali znati u PHP su potrebna, tako da se čini sigurni da ste uključujući određene datoteke, jeka, izlaz, prazna. Ja visoko preporučiti pogledate pset 7 i pogledati tih funkcija. Možda ćete morati znati onima, pa bih svakako znati što je, zapravo, one su sve radili. A sad idemo proći kroz opsega jako brzo. U djelokrugu, PHP je vrsta funky stvar, za razliku od C, pa samo smo ići kroz njega brzo. Pa recimo da počnemo na toj strelici da smo tamo. I mi ćemo početi sa $ ja. Dakle varijabla 'ja' će biti 0, i mi idemo samo da bi ga tiskanje u toj velikoj bijeloj kutiji tamo. Mi ćemo početi s i0, a onda ćemo ga jeka. Dakle, tu je 0. A onda ćemo to povećavati strane za petlje, i onda će biti vrijednost 1. Jedan od njih je manje od 3, tako da će to proći kroz to za petlje, a onda ćemo vidjeti što ponovno ispisivati. Mi ćemo ga ponovno povećavati na 2, i 2 je manji od 3, tako da će proći za petlje, i to će ispisati dva. Tada ćete primijetiti da 3 nije manja od 3, tako da ćemo izaći iz for petlje. Dakle, sada smo izašli, a onda ćemo ići u aFunction. Ok. Dakle, morate imati na umu da je ova varijabla koje smo stvorili, 'ja' varijable, lokalno ne scoped. To znači da to nije lokalne do petlje, i da je varijabla još uvijek može pristupiti i promijeniti nakon toga, a to će i dalje biti na snazi. Dakle, ako idete u funkciju sada, vidjet ćete da smo također koriste 'ja' varijablu, i idemo povećajte 'i' + +. Vi mislite da bi, u početku, na temelju C, da je to kopija 'ja' varijablu. To je potpuno druga stvar, što je točno. Dakle, kada smo ga ispisali, idemo ispisati 'i' + +, koji će se ispisati da 4, a onda ćemo - žao. Onda idemo do kraja iz te funkcije, i da ćemo biti tamo gdje strelica koja je upravo sada. To znači da je tada, međutim, iako je funkcija promijenio vrijednost 'ja', to nije promijenio izvan funkcije, jer funkcija ima zasebnu opseg. To znači da kada smo jeka 'ja', da se nije promijenila u okviru funkcije, pa onda ćemo opet ispisati tri. Različite stvari o opsegu u PHP-u nego u C. Sada u PHP i HTML. PHP se koristi za izradu web-stranica dinamički. To je vrsta čini stvari drugačije. Imamo ga razlikuje od HTML. S HTML, mi smo uvijek samo imati isti statički stvar, kao što je pokazao kako je Rob, dok je PHP, možete promijeniti stvari na temelju koje je korisnik. Dakle, ako ja imam ovo, ja sam, "Vi ste prijavljeni kao -" a zatim ime, i ja mogu promijeniti ime. Dakle, u ovom trenutku je ime Joseph, i to je "o meni", ali onda sam se također može promijeniti ime imati Tommy. I to bi bilo nešto drugo. Pa onda možemo promijeniti različite stvari o njemu, i to će pokazati različite sadržaje na temelju imena. Dakle, PHP se nekako promijeniti ono što se događa u vašem web stranice. Sve ovdje. Ipak, imajte na umu da oni imaju različite sadržaje, iako su tehnički još uvijek pristupaju tom istu web stranicu na površini. Generiranje HTML. Postoje dva različita načina na koje možete to učiniti. Tako ćemo proći kroz to odmah. Prvi put je, imate - da, žao. Dakle, samo trebate svoje redovite za petlji u PHP-u, a onda odjek u PHP-u, a vi jeka iz HTML-a. Koristeći ono što vas Rob pokazali HTML pisma a zatim pomoću PHP ispis samo ga ispisati na web stranici. Drugi način je da to učinite što ako izdvojiti PHP i HTML. Na taj način možete imati liniju PHP koji počinje za petlju, onda možete imati liniju HTML-u zasebnu stvar, a onda na kraju petlje, opet, s PHP. Dakle, to je neka vrsta odvajajući ga van. S lijeve strane, možete da imate sve - to je samo jedan komad PHP. S desne strane možete vidjeti da imate liniju PHP, imate liniju HTML, i imate liniju PHP opet. Dakle, to odvajanje van u ono što oni rade. A vi ćete primijetiti da ni način, za bilo koji od njih, oni i dalje tiskati sliku, slika, slika, , tako da i dalje HTML je tiskan na isti način. A onda i dalje ćete vidjeti 3 slike prikazuju na Vašoj web stranici. Tako da je 2 različite načine rade istu stvar. Sada imamo obrasce i zahtjeve. Kao Rob vam pokazao, postoje oblici HTML, a mi ćemo samo povjetarac kroz to. Imate neku akciju i imate metodu, a vaša akcije Lijepo od vas gdje idete poslati ga pokazuje, a metoda je li to će biti GET ili POST. I GET zahtjeva, kao što je Rob je rekao, znači da ćeš ga staviti u obliku a vi ćete ga vidjeti kao URL-a, dok je zahtjev POST nećete vidjeti u URL-u. Tako mala razlika. Međutim, jedna stvar koja je slična stvar je da POST i GET jednako nesigurno. Dakle, možda ćete misliti da samo zato što ga ne vidim u URL-u, to znači POST je sigurniji, , ali još uvijek možete ga vidjeti u svojim kolačićima u informacije koje šaljete. Dakle, ne mislim da je o jednom ili drugom. Još jedna stvar na umu je da i vi imate varijable sekcija. Momci koristiti ovo u pset 7 da biste dobili svoj korisnički ID informacije. Ono što se dogodilo je da je možete koristiti ovaj asocijativni niz, $ _SESSION, a onda ste u mogućnosti pristupiti različite stvari i pohraniti različite stvari preko stranice. Zadnja stvar je da imamo SQL, strukturni upitni jezik, i to je programski jezik za upravljanje bazama podataka. Što je, zapravo, su baze podataka? Oni su zbirke stolova, te svaka tablica može imati slične vrste objekata. Tako smo imali tablicu korisnika u svom financijskom pset. I zašto su korisni? Zato jer je to način da se trajno pohranjivanje podataka. To je način za praćenje stvari i upravljanje stvari a zapravo ga vidjeti na različitim stranicama i praćenje. Dok ako samo ga pohraniti u tom jednom trenutku neposrednoj , a zatim ga koristiti kasnije, nećete biti u mogućnosti pristupiti sve što ste spremili. Imamo 4 glavne stvari koje koristimo za SQL naredbi. Imamo odaberite, umetanje, brisanje i ažuriranje. Oni su jako važni za vas dvoje znati za vaš kviz. Ćemo brzo ići preko odaberite upravo sada. U osnovi, ti si odabirom retke iz baze. Dakle, ako imate, upravo ovdje - imamo ove dvije različite stvari, a mi želimo da odaberete od stola klase gdje je strašan - gdje se u strašan stupcu vrijednost je 1. Tako možete vidjeti ovdje, imamo ove dvije stvari ime klase, CS50 i Stat110, a imamo klase brojeva i slogan. Dakle, želimo odabrati sve te informacije. Tada možete vidjeti ovdje da je to neka vrsta branje iz tog strašan stupcu, gdje su sve stvari koje su 1, i onda ima ID klase, ime klase i slogan koji se može izdvojiti. Kako točno ti to učiniti u kodu? Morate koristiti PHP. Dakle, to je vrsta kako PHP i SQL su međusobno povezane. Sada imamo kôd, a mi ćemo koristiti naš upit funkciju kao što smo to učinili u pset 7, a mi ćemo pokrenuti SQL upit. Tada ćemo imati - uvijek moramo provjeriti da li zaredom triple jednaka ako lažna. Pa opet, želite provjeriti vrstu i vrijednost, , a zatim, ako to ne uspije, onda vam želim ispričati, kao i obično, kao što smo to učinili u pset 7. Inače, želite petlje kroz sve s onima pri ruci foreach petlje da smo upravo otišao. Sada da smo petlje kroz a mi smo ga napravili u prošlosti, pretpostavimo da je naš upit prošlo, sada imamo foreach petlju. I prvi red ima, pa evo red, upravo ovdje, to je boksao. To će ispisati sve informacije da je stečen. Dakle, to će se ispisati na dnu "Želite li naučiti HTML?" Onda to će ići u sljedeći redak, jer je završio prvi za petlju, pa onda će se ispisati na drugu liniju za njega, koji će biti STAT110, pronaći sve trenutke. Jedna stvar je na SQL ranjivosti. Znam David se osvrnuo i na to malo u predavanju. Možete čitati tome kasnije. To je stvarno smiješno. SQL Injection je vrsta škakljivo. Recimo da ste samo držati one varijable izravno u vaš upit, kao što možete vidjeti u toj prvoj liniji. Tako se čini u redu, zar ne? Vi ste samo stavljanjem u ime korisnika i lozinku za vaše SQL upita, a želite ga brod off i dobiti sve što je u podatkovnoj tablici. To mi se čini prilično jednostavna. Tako recimo netko stavlja u, za lozinku, ovaj ili tekst ovdje - trebao zapravo biti u crvenoj kutiji. Pa recimo da su stavili tu lozinku u - to je ono što oni ulaze. Dakle, oni su stavljajući ILI "1" = 1. Poput glupog lozinkom imati. Sada ćemo samo ga zamijeniti u, a vi ćete primijetiti da se u tom SQL upita sada, ocjenjuje se da uvijek istina, jer ćete na umu da možete SQL upit odabrali sve ove informacije ili se samo može imati 1 = 1. Tako to uvijek ide na procjenu da se istina. To se ne događa da se stvarno radi, jer to znači da je haker može provaliti u vašem sustavu. Rješenje za to je da morate koristiti PDO sustava, što znači da ćete morati koristiti upitnike, što je ono što ti dečki koji se koriste u pset 7, kamo idete koristiti upitnik u mjestu gdje želite staviti nešto, i onda ćeš imati zarez, a onda ćete imati nakon toga, nakon niza, različitih varijabli koje želite zamijeniti u svoj upitnikom. Tako ćete na umu da se ovdje sada imam ove crvene upitnike. Onda sam stavio varijable nakon mog žice tako da znam da ih zamijeni na tom bi nakon toga. To će osigurati da, ako je netko to čini, i oni imaju ili 1 = 1 situaciju, koja će osigurati, na stražnjem kraju, pobrinite se da to neće zapravo razbiti SQL upita. Ok, tako da je uglavnom to, vihor PHP i SQL. Najbolji od sreće za sve vas, a sada se Ore [Oreoluwatomiwa Babarinsa] Ok svatko. Vrijeme je da se ide preko neke JavaScript i neke druge stvari vrlo brzo, tako da ti ne drže do večeras. JavaScript. Da. JavaScript je vrsta cool stvar, navodno. Ono što stvarno trebate znati o JavaScript, to je nešto kao na strani klijenta kraj ono što vaše web app će biti događaj. Ima nekih stvari koje jednostavno ne žele da se brine o svim vrijeme na strani poslužitelja. Svi mali interakcije, naglašavajući jednu stvar, što je nešto nestane. Stvarno ne želim razgovarati na poslužitelj cijelo vrijeme za to. I neke to nije ni moguće učiniti na strani poslužitelja. To je razlog zašto nam je potrebno nešto poput JavaScripta. Cool stvari o JavaScriptu: To je dinamički upisali. To znači da je vaš program ne treba znati ono, točno, su varijable kada ga napisati. To će samo kakve to shvatiti kao što je trčanje. Ostale stvari koje su cool o njemu: To je kovrčava brace jezik, što znači sintaksa je slična C i PHP. Vi ne morate učiniti mnogo prerađuje kad učite JavaScript. Ovdje imamo malo JavaScript. Zanimljiva stvar ovdje je da, ako na to gledate, imamo malo JavaScript tamo u glavu oznaku. Što je to u osnovi je samo uključiti JavaScript datoteku. To je jedan način na koji možete uključiti JavaScript u vašem programu. Onda drugi malo je zapravo neka inline JavaScript, Vrlo sličan umetnutom stilu s CSS, a vi ste samo pisanje neki kod vrlo brzo tamo. JavaScript je polja. Samo još jedan način da se zadrži podatke okolo, vrlo korisno. Vrlo lijepo i jednostavno sintakse. Možete koristiti uglate zagrade za pristup sve i držati sve zajedno. Ništa previše složen. Kul stvar o JavaScript i skriptiranje jezika u cjelini je da ne morate brinuti o veličinama polja. Vi samo možete koristiti array.length i pratiti njega, i niz može rasti ili se smanjiti kao što je potrebno da bi. Tako da uopće ne morate brinuti o bilo kojoj vrsti, Oh ne, moram izdvojiti više stvari, ili bilo što slično. Super stvar ovdje je da JavaScript ima nešto što se zove predmeti. To je objektno-orijentirani jezik, tako da ono što je je, u biti, način za vas da se skupina podataka zajedno, nešto slično kao i rekonstruirati , ali ga možete pristupiti kao struct ili u asocijativni niz sintakse. To je prilično jednostavan i što možete učiniti s tim je skupina podataka zajedno ako imate hrpu podataka koje je u vezi. Budući da je sve ono što je potrebno kako bi opisao automobil, ne morate ga imati u hrpa različitih mjesta. Vi samo možete ga staviti u 1 objekta u JavaScriptu. Kao što vjerojatno znate, Ponavljanje je jedan od onih zamornih zadataka. Vi samo to učiniti preko iznova. Morate razgovarati svakog objekta u automobilu, ili morate proći kroz svaku stavku na popisu ili nešto slično. Dakle JavaScript mora, slična PHP, a foreach sintakse. U ovom slučaju, to je za u petlji. Želite koristiti to samo na objekte. Postoje neki problemi koji se javljaju ako koristite ovaj na poljima. Općenito je jedan od onih stvari, ipak, da je vrlo korisno, zato što eliminirati puno pretek jer ne moram podići sve što je u vašoj objekt po sebi. Ne morate se sjetiti svih ključnih imena. Vi samo vrsta ih dobiti natrag u ovoj sintaksi. U to, uz Jer, samo želite da zapamtite da ste dobivanje natrag sve tipke, na vrlo sličan način hash tablicu. Ako se sjećate toga, kad bi stavili u nizu da bi mogao dobiti nešto da bi pridruženu vrijednost s njom. Ono što možete učiniti s ovim je što mogu reći, sve u redu, Stavio sam u autu, a nazvao sam ga Ferrari. Tako možete staviti u string Ferrari ponovno kasnije, a možete dobiti to. I to je moguće učiniti u petlji, uz Jer u petlji. Dakle, samo više o objektima. Ključna stvar od toga trebate imati na umu je da možete koristiti objekt indetifikaciju poput sintakse kad god želite s tim, osim ako je ono što vaše će koristiti kao niz nije valjana ime varijable. Dakle, ako pogledate da je tamo, imamo ključ s razmacima. Pa, ako ste bili staviti object.key, prostor, prostor, prostor, da jednostavno ne bi imalo smisla sintaktički. Tako da samo može učiniti da se s ovom vrstom nosača sintakse. Također, JavaScript vrlo opseg kap u PHP-u. Imate dva načina rješavanja opseg. Ne možete imati var ispred varijable, a to samo znači da je to globalno. Možete ga vidjeti s bilo kojeg mjesta. Čak i ako su ovo staviti u IF, bilo gdje drugdje u kodu nakon te točke mogli ste vidjeti da je varijabla. Još jedna stvar, iako je s var, to je ograničena na ono što je funkcija da ste u. Ako niste u funkciji, dobro, to je globalni. No, ako su u funkciji je samo vidljivi u roku tu funkciju. Nemam primjer, ali, da. To je jedna od onih stvari u kojima možete upravljati ono varijable želite biti globalna, ono varijable želite biti lokalni, ali vi trebate biti oprezni o tome, jer nemate vrstu finog zrna kontrole što učiniti u C, gdje ako se nešto proglašen u for petlji, to će ostati u da je za petlju. Što mi zapravo stalo pomoću JavaScript za manipulira web stranice, zar ne? Mislim, to je razlog zašto smo to. Da biste to postigli, koristimo nešto što se zove DOM. Document Object Model. Uglavnom, ono što se je to traje sve svoje HTML i modele ga u hrpu objekata koji su uklopljeni u drugome. Možete početi s nečim kao što je ovaj. Imate, na desnoj strani za mene, hrpa koda vani to je vrsta - Vi mislite da bi bilo vrlo teško manipulirati, zato što bi se raščlanjivanja kroz hrpa teksta i da se komad osim stvari. A što ako to nije pravilno formatiran? Loše stvari će se dogoditi. Dakle JavaScript brine to za vas, a vi dobiti lijep strukturu podataka, poput one na moje lijeve strane, gdje je samo dokument, i iznutra da imate nešto što se zove HTML, i iznutra da imate glavu i tijelo, i unutar tog naslova imate titulu, i tako dalje, i tako dalje, i tako dalje. To pojednostavljuje manipulira web stranicu, tako da je to samo, oh, ja samo želim razgovarati s ovim predmetom. Na neki način vrlo sličan način na koji će razgovarati s drugim objektom ste napravili sami. Kao što sam rekao, sve DOM je u objekt dokumenata. Ili je to samo jedno mjesto, a onda možete ići u njemu pronaći stvari, i možete to učiniti - to je stari stil to radi, tamo gore, gdje radite document.getElementById, a zatim ime, i kao što vjerojatno možete reći, to se jako nezgrapan nakon nekog vremena. Dakle, vjerojatno ne želite učiniti. Zato imamo Sljedeće čega ćemo govoriti o nakon toga. Ključna stvar je u tome da, sve u redu, imate sve te elemente, zar ne? Dakle, možda ja mogu promijeniti boju nešto kad se stranica učita. Pa što? Što ako moja korisnik klikne nešto? Želim to napraviti nešto zanimljivo kada kliknete nešto. Zato imamo događaje. Možete, zapravo, pronaći bilo koji element u vašem DOM, i onda reći, hej. Kada se to učitava ili netko klikne, ili kad su miš preko njega, učiniti nešto s njom. I ono što ste je, imate funkcije koje obrađuju to za vas. Ove funkcije su manipulatori događaj. Što tek kuća - to je samo fancy način govoreći, ova funkcija je izvršena tek kada se taj događaj dogodi. Tako da obrađuje događaj koji se događa. To je način na koji će nokautirati događaj rukovatelj. Imam neku tipku, a kad kliknete na njega, što eksplodira. Dakle, nemojte kliknuti na gumb. To je jedan od načina da se približava, zar ne? Imate gumb oznaku, a na klik imate niz koji kaže, Oh, usput, radim ovo eksplodira stvar za mene. Inače, to je samo kao redoviti gumb koji ste upravo napravili. Također možete to učiniti na drugi način, hvatajući DOM element, ali ćemo spasiti da nakon govorimo o jQuery. JQuery: To je knjižnica koja je cross-preglednik. Možete ga koristiti u prilično mnogo bilo što. I to samo vam daje puno alata za rad s. Zbog JavaScript, dok je moćna, nema sve potrebne alate iz kutije da se stvarno borila web aplikaciju možda želite učiniti. Dakle, to pojednostavljuje puno stvari, daje vam puno funkcija iz kutije da bi se normalno morati sami pisati, iznova i iznova i iznova. I samo čini stvari vrlo jednostavna. Također imate selektora, koji vam uzmu sve one elemente iz svog DOM mnogo više jednostavno, umjesto da se koriste ove vrlo duge funkcijske pozive. Više o tim selektora. Imate, tamo ste, recimo Želim da se element s ID "stijena". Pa, u jQuery, to je samo $, a zatim niz koji ima kilograma, a zatim "stijena". To je vrlo jednostavno i puno brže nego tradicionalne JavaScript načinu rješavanja ovog problema. I imate slične stvari za nastavu i tipovi elemenata. jQuery je - jedan od cool značajke se možete nekako stisnuti Spusti svoje upite na vašem DOM vrlo, vrlo brzo. Sada smo se vratili na rukovanje događaja, a to je način na koji će nositi jedan događaj u jQuery. Dakle, ono što ćemo ovdje govorimo, u redu. Imam oznaku skriptu, zar ne? Dakle, imam ovu inline JavaScript. Ono što ćemo učiniti je da ćemo reći, u redu. Kada je dokument spreman, što znači da je dokument je bio opterećen, ćemo ići na tu funkciju, a mi ćemo reći, sve u redu, ova funkcija zapravo radi nešto drugo. U osnovi je rekao, u redu, daj mi element s ID "myid." A onda bi to funkciju rukovatelj, koji izvodi kada ga kliknete. Uglavnom što to čini se, ona kaže, sve u redu. Stranica se učitava, tako da ću u, pronaći taj element, daj ga ovaj događaj rukovatelj, i to u osnovi postavlja svoju stranicu za vas. A to je, kako se želim razmišljati o rukovanju događaja. Vi samo želim razmišljati o tome, sve u redu, kada se nešto dogodi, što ne želim da se dogodi? Ne želim razmišljati o tome, ok, moram se uvjeriti da je to stvar razgovore na ovu stvar, ova stvar bla bla bla, jer se samo želite razgovarati stvar u smislu događaja. Kada se to dogodi, to će se dogoditi. Kada se to dogodi, to će se dogoditi. A ako se stvari pokreću i druge stvari, to je super. Ali vi ne želite probati i učiniti komplicirano kod gdje ste je izazvalo više stvari u isto vrijeme, jer ste samo će dati sebi glavobolju. Redu. Sada možemo dobiti naša stranica se nositi s događajima, ali recimo moja korisnik pritisne gumb. Što ako želim poslati taj zahtjev na poslužitelj, ali ja ne želim da se ponovno učitati stranicu, jer potrebe za ponovno učitavanje novu stranicu svaki put dobiva vrsta zamorno, i zašto mi treba ponovno srušiti zaglavlje, i opet footer, i svi elementi na stranici opet samo osvježiti pozdrav ili vremena? Dakle, to je razlog zašto smo nešto poput Ajaxa. Ono što možemo učiniti ovdje s Ajax je, možemo reći, sve u redu, Želim poslati neke podatke na server, i želim dobiti odgovor natrag, tako da mogu ažurirati svoju stranicu, ili možda samo napraviti neki algoritamski izračun koji ne mora pokazati ništa za korisnika. Što trebate učiniti? Pa, trebate URL trebate razgovarati. Vaš poslužitelj ne može samo magično sluša iz ničega. Morate imati određeno mjesto šaljete ove podatke. I također je potrebno neke podatke poslati, ili možda je to dataless upita. Vi samo želite ping natrag poslužitelju i reći, hej, ja sam živ, ili nešto slično. I onda želite funkciju koja u osnovi obrađuje s uspjehom. Recimo da se vratim neke podatke s poslužitelja, i želite promijeniti korisnikovu naslov na njihovoj stranici. Tako da bi dobili informacije natrag, i ti bi gurnuti da se na zaslonu. Ono što se događa je, kada je stranica je spremna, stvorite na klik funkciju za ovaj gumb zove pozdravljač. Što to onda čini se, kad se guraju da gumb, li razgovarati s greetings.php, napravite POST zahtjeva, i ti kažeš, hej, daj mi nešto iz svoje stranice. Mi stvarno ne treba opisati to, ali greetings.php, recimo samo, vraća "Pozdrav svijetu". Tako smo se vratiti ovu "Pozdrav svijetu", te o uspjehu toga, pretpostavljajući ništa ne ide po zlu, onda mi samo ići na ovu ciljanu mjestu koje smo naveli, a mi samo držati odgovor tamo. I to je vrlo jednostavan način za postavljanje Ajax upita. Vrlo brzo, Rob vrsta spomenuo to već, stvari mogu poći po zlu, loše stvari mogu dogoditi, pa želite da se upoznate s tim kodovima HTTP odgovor. Koje su to samo, kao što je, 200, sve je prošlo u redu. Nešto drugo, loše stvari se dogodilo. To je uglavnom stvar koju želite zapamtiti. No, to je lijepo znati sve to. I na kraju, nakon što smo prošli kroz sve to, moramo vrlo brzo govorimo o dizajnu, i onda možemo dopustiti da svi napuste. Dizajn. Stvari koje želite zapamtiti. Zapitajte se ova pitanja: Tko će biti koristeći ovaj? Ono što će im biti koristeći ga za? Što moji korisnici stalo? Ono što ne im je stalo? Vi jednostavno ne žele napraviti aplikaciju i neka ga samo rasti i postati ovaj gigant, sve trajati stvar koju ne mogu ni završiti. Želite imati diskretne ciljeve i planove i stvari koje želite baviti. Učinite to bez napora. Sve to, kaže, u osnovi, olakšavaju korisniku da ga koristiti, ne bi ga div blob teksta kao što je ovaj tobogan je, zapravo. Vi samo želim da to bude nešto gdje je vrlo lako za nekoga da ide u i učiniti ono što želite učiniti. Vi ne želite da ih moraju kretati 5 stranica doći do svoje primarne funkcije vaše stranice. Ako Google je imao 5 stranica prije nego što bi mogao tražiti nešto, nitko ne bi ga koristiti. I na kraju, papira prototip, fokus grupa. Imaju dobar dizajn i postupaka testiranja. Samo zato što mislim da radi za vas, ne znači da bilo tko drugi misli da to radi. Ali, da, to je to. [CS50.TV]