[Review: Quiz 1] [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] [See on CS50.] [CS50.TV] [Lucas Freitas] Tere kõigile. See on ülevaade viktoriin 1. Just nagu disclaimer, see on - ma mõtlen, me püüame katta nii palju materjali kui võimalik, kuid see ei tähenda, et me katma kõik asjad, mis võivad olla viktoriin 1. Nii et kindlasti on teil ka heita pilk loeng, lõigud, kõik, mis sa suudad. Quiz 1 läheb kolmapäeval, järgmisel kolmapäeval. Nii et kindlasti õppida. See saab olema päris palju, nagu esimesele viktoriin seoses selle formaat, aga see on ilmselt saab olema palju raskem. Vähemalt eelmisel aastal, kui ma võtsin 50, ma arvasin, et see oli palju raskem. Nii õpivad palju. Ma lähen katta andmestruktuurid ja Huffman kodeerimine. See on midagi, mida paljud inimesed arvavad, on keeruline, kuid ma üritan teha nii lihtsaks kui võimalik. Esiteks, mida me tahame, et te teada viktoriin 1 on mõista kontseptuaalne kirjeldused iga andmestruktuurid, et ma lähen esitada. See tähendab, et sa ei pea tegelikult rakendada hash tabelis oma viktoriin 1. Me ei taha, et sa ellu terve hash tabel võibolla me proovime sind rakendada mõned funktsioonid, levinumaid toiminguid, kuid me ei hakka sind rakendada kõike. Seega on oluline, et sa mõistad mõiste taga on andmestruktuur ja samuti, et te olete võimeline koodi C, lihtsalt levinumaid operatsioone nad on iga andmete struktuuri. Ja ka võimalik vaadata vihjeid ja structs, sest nad tunduvad palju need andmestruktuurid. Esiteks ahelloendid. Seotud nimekirjad on tegelikult väga sarnane massiivid kuid vahe on seotud nimekirja ja array, Kõigepealt on see seotud nimekirja on väga paindlik suurus samas massiivid teil on valida väga suured massiivi, et sa tead, et sa lähed, et oleks võimalik salvestada kõik oma andmed, et massiivi või sa pead kasutama malloc olema paindlik pikkus massiivi. In ahelloendid see on väga lihtne lihtsalt saada rohkem elemente, panna rohkem elemente seotud nimekirja või eemaldada elemente. Ja tegelikult, kui te ei taha seotud nimekirja sorteerida, saate otsida ja eemaldada elemente pidevalt aega, nii O (1) aeg, nii et see on väga mugav. Sa pead olema ettevaatlik, et alati meeles, et malloc ja vaba sõlmede lihtsalt sellepärast, et kui sa seda ei tee, siis on teil mälu lekkeid. Nii ahelloendid - mõiste sõlm on just nagu meil siin. Panin int n, kuid võite salvestada kõik andmed, mida soovite. Nii et kui soovite salvestada jada, kõik on korras. Kui soovite salvestada struktuure, pole hullu, topelt, mida iganes sa tahad. Ma lihtsalt panna int n näited siin. Ja sul on kursor järgmisele sõlme. Seega, põhimõtteliselt ahelloendi on mõned andmed, ja siis see viitab Järgmine sõlme. Kui see on viimane osa, mis on seotud nimekirja, et see saab osutada null. Nii on see näiteks ahelloendi. Olgu, nüüd vaatame, mida me peaksime tegema, kui ma tahan, et lisada element seotud nimekirja. Esiteks funktsioon lisada on tüüpi void sest ma ei taha, et naasta midagi. Ja ma lähen int argumendina, sest ma tahan teada, mida ma tahan lisada. Mis on esimene asi, mida ma peaks tegema? Noh, ma malloc on newnode, nii et see on esimene rida. Ma lihtsalt luua uus sõlm panna seotud nimekirja. Niisiis, mida ma teha saan? Noh, me teame, et meie rakenduste ahelloendid klassis, oleme alati panna pea nagu globaalne muutuja. Niisiis, mida me saame teha, on muuta peas. Võin teha see uus sõlm uue juhi, ja see läheb juhtida eelmise peas. Kuidas me saame seda teha? Esimene asi, mida ma pean tegema on muuta 'n' uue tipu väärtus, mis edastatakse funktsioonile. Siis newnode järgmiseks saab olema head. Pea läheb newnode. Nii et see on üsna lihtne. Kustutamise sõlme, me ei saa seda teha, nagu - Üks viis, kuidas me saame teha, et see tähendab, okei, kui ma tahtsin, et kustutada näiteks 3, mida ma võiks teha, on lihtsalt juhtida eelmise sõlme Järgmise sõlme 3. Nii et ma lihtsalt teha midagi sellist. Aga milline on probleem teeb? Mul on mälu leke, nii et ma ei ole juurdepääsu number 3 enam. Probleem see, et ma ei kavatse olla võimeline vabastama et sõlme. Ma lähen on mälu leke ja (arusaamatu) läheb vihkavad mind. Selle asemel, et seda tehes, ma peaks ilmselt ajutine pointer. Nii panin temp. See saab viidata sõlme, et ma tahan, et kustutada. Ja siis ma saan liikuda eelmise sõlmede punkt järgmisesse sõlme sõlme, et ma tahan, et kustutada. Ja lõpuks, ma ei saa vabalt kursorit. Kas mul on vaba pointer et lõin seal? Ma ei pea, lihtsalt sellepärast, et - Erinevus on, et see keskus on loodud, kasutades malloc, nii et see on hunnik, kuid see oli lihtsalt deklareeritud NULL lüliti korstnat. Nii et ma ei ole vaba ta. Ok. Nüüd räägime korstnad. Hoidla on üsna lihtne. Tegime korstnad ja järjekorrad klassis lihtsalt kasutades massiivid aga sa peaksid olema kursis - lihtsalt olema teadlik et võite teha korstnad järjekorrad kasutades ahelloendid samuti. Nii et kui teil on massiiv, mis oleks virnas? Stack kõigepealt pead olema suurus. Teil salvestada, mis on suuruse virna, et sul on õigus nüüd. Ja ka siis oleks massiivi, sel juhul numbrid, aga kui sa tahad, see võib olla massiivi stringid, array struct, midagi, mida soovite salvestada. Umbes stack: vahe korstna ja seotud nimekirja on see, et stack sa oleks juurdepääs ainult viimase osa, mis pandi virna. Seda nimetatakse viimane esimene välja. Just nagu oleks sul virna, kui paned plaadi peal virnas, teil on kõrvaldada, et salve esimene omada juurdepääsu teiste plaate. See on sama asi, korstnad. Nii et kui ma tahan näiteks lisada element pinu, mida ma peaksin tegema? Seda kutsutakse push, ja see on üsna lihtne. Esimene asi, mida pead tegema, on vaadata, kas suurus korstnat ei ole suurem või võrdne võimsus pinu. Sest kui sa juba on täisvõimsusel, siis ei saa midagi lisada. Ja siis, kui ei ole, siis tuleb lihtsalt lisada element pinu. Ja lõpuks, juurdekasvu suurust. Nii et see on üsna lihtne. Nii et ma lihtsalt lisada number 2. Ja kui ma tahan pop, mis tähendab, et ma tahan, et eemaldada viimane element, mis lisati ja tagastab väärtuse element Esimene asi, mida ma pean kontrollima, et korstnat ei ole tühi. Sest kui see on tühi, ma ei saa tagasi midagi. Sellisel juhul, ma teen sulle tagasi -1. Muidu ma lähen kahandab suurus spec, ja naasta numbrid (s.size). Miks ma kahandab suurus ja siis tagasi s.size? See on sellepärast, käesoleval juhul spec on suurusega 4, ja ma tahan tagasi neljas element, eks? Aga mis on indeksi neljas element? Kolm. Kuna ma suurus - saab olema 3, ma ei saa lihtsalt tagasi s.numbers (s.size) sest see on 3. Nii et see on lihtsalt indeks. Nüüd järjekorrad. Järjekorrad on päris palju sama asja. Ainus erinevus on see, et selle asemel, et viimane, esimene välja, pead kõigepealt sisse, esimesena välja. Tõenäoliselt kui sa ootad minna kontserdile, te ei oleks rahul, kui teil oleks virna asemel järjekorda. Olles viimane inimene tulema oleks esimene inimene, sisestage kontsert. Sa ilmselt ei oleks rahul. Järjekorras esimene inimene saada on ka esimene inimene välja tulla. Nii mõiste järjekorras on lisaks suurusele massiivi, teil ka on head, mis on indeks pea pinu. Nii et esimene element kohe. Lisa järjekorda on sama asi nagu push korstnad. Kui sa olid väga naiivne, siis oleks lihtsalt öelda, Noh, ma ei saa lihtsalt teha täpselt sama asja nagu ma tegin push. Võin lihtsalt vaadata, kas see ei ole rohkem, kui suudavad. Kui nii, siis ma tagasi vale, muidu ma ei saa lihtsalt eksportida uus väärtus ja siis juurdekasvu suurust. Aga miks on see vale? Vaatame näiteks. Püüan Lisa järjekorda hunnik asju, ja siis ma lähen dequeue ja Lisa järjekorda. Seal on palju käske, kuid see on väga lihtne. Ma lähen Lisa järjekorda 5, nii et lisada 5, ja siis 7, 1, 4, 6, ja siis ma tahan dequeue midagi, mis tähendab, et ma lähen eemaldage esimene element. Ma lähen, et eemaldada number 3, eks? Esimene element. Okei. Nüüd, kui ma püüan Lisa järjekorda midagi muud, mis juhtub? Vastavalt minu rakendamist, Ma tahtsin panna järgmise number indeksis q.size. Sel juhul suurus on 8, nii index 8 on siin viimasel positsioonil. Kui ma püüan Lisa järjekorda 1 siin, oleksin kirjutades viimane positsioon number 1, mis on täiesti vale. Mida ma tahan teha, on ümbritsev ja minna esimesel kohal. Äkki oleks lihtsalt öelda, ma lihtsalt pean kontrollima kui ma ei saa tegelikult panna midagi seal. Kui ei, siis ma lihtsalt öelda, oh, uus täisvõimsusel tegelikult võimsus - 1, ja sa ei saa panna element seal. Aga mis on probleem? Probleem on selles, et kui ma lihtsalt dequeue kõik siin ja siis ma üritan veel midagi lisada, siis oleks lihtsalt öelda, Noh, sa olid täisvõimsusel, mis on 0. Nii oma järjekord on läinud. Sa pead murdma, ning viis, kuidas murda ümber mis te õppinud visionäär ja muu psets kasutas mod. Võid proovida seda kodus mõista, miks sa teeks q.size + q.head mod võimsus, kuid kui vaadata siin, me näeme, et see toimib. Nii et viimane näiteks q.size oli 8 ja pea oli 1, sest see oli see seisukoht siin massiivi. Seega on 8 + 1, 9. Mod mahutavus 9 oleks 0. See läheks indeks 0. Tuleme õiges asendis. Ja proovige siis järjekorda kodus. Mõned olulised asjad: püüame mõista vahe korstna ja järjekorda. Kodus, üritavad väga tuttav rakendamise Lisa järjekorda, dequeue, push ja pop. Ja ka aru, kui sa oleks kasutada igaüks. Teeme lõdvestuge 10 sekundit kamp Pokemons. Ja nüüd lähme tagasi andmestruktuurid. Räsitabeli. Paljud inimesed olid hirmul hash tabeleid. Probleemse seatud 6, õigekirjakontrolli. Hash tabelid ja proovib, palju inimesed kardavad neid. Nad arvavad, et nad on nii raske aru saada. Jah? [Rob Bowden] Ülesanded 5. Ülesanded 5, jah. Tänu Rob. Jah. Kuus oli Huff n "Puff, jah. Ülesanded 5 oli õigekirjakontrolli ning pidid kasutama kas hash tabel või proovida. Paljud inimesed arvasid, et nad olid super raske mõista, aga nad on tegelikult üsna lihtne. Mis on hash tabel, põhiliselt? Hash tabel on massiiv seotud nimekirju. Ainus erinevus massiivi ja hash tabel on see, et hash tabel sul on midagi, mida nimetatakse hash funktsiooni. Mis on hash funktsiooni? Ma ei tea, kas te saate lugeda siit. See on näide hash tabelis. Nii et näete, et teil on massiiv 31 elementi. Ja mida me teeme hash tabel on räsifunktsiooni et läheb tõlkida võti iga int indeksile. Kui näiteks, kui ma tahan valida B. Harrison, Ma paneks B. Harrison minu hash funktsioonid, ja räsifunktsiooni Jõutakse 24. Nii et ma tean, et ma tahan salvestada B. Harrison 24. Nii et vahe on lihtsalt võttes massiivi ja võttes hash tabel. In hash tabel teil on funktsioon, mida sulle öelda kus andmete salvestamiseks, mida soovite salvestada. Räsifunktsiooni tarvis, mida soovite otsida räsifunktsiooni mis on determineeritud ja hästi laiali. Nagu näete siin, siis näeme, et palju andmeid, et ma tahtsin poodi oli tegelikult 19 asemel 31 ja 30 ja 29, mis olid kõik vabad. Nii räsifunktsiooni, et ma kasutasin ei olnud väga hästi hajutatud. Kui me ütleme, hästi hajutatud, see tähendab, et me tahame, jämedalt vähemalt 1 või 2 iga - jms, vahe on 1 või 2 iga indeksid massiive. Sa tahad olla umbkaudu sama elementide arvu iga seotud nimekirja massiiv. Ja see on lihtne kontrollida, kas see on kehtiv hash tabelit vaadata kui hash tabeleid. Siis puud. See on puu. Puud arvutiteadus on tagurpidi mingil põhjusel. Nii et just siin on just puu ja siis lehed. Sa peaksid lihtsalt tean nomenklatuuri vanemad ja laps. Iga sõlm on oma lapsed, kes on sõlmed, mis on madalam kui lapsevanem. Nii näiteks 2 saab olema vanem 3 ja teisele lapsele seal, samas 3 saab olema vanem 1 ja teised lapsed, et on olemas. Ja 1 saab olema 3 lapse, ja nii edasi. Meil on midagi palju huvitavam ehk Kahendotsingupuu, milles kõik väärtused on õigus sõlme saab olema paremal, siin - paremale, ei kavatse olla suurem kui element root. Nii et kui mul on number 5 siinsamas, kõik elemendid paremal ei kavatse olla suurem kui 5, ja vasakul kõik elemendid hakkavad olema vähemalt 5. Miks on see kasulik? Noh, kui ma tahan, et kontrollida, kas number 7 on siin näiteks Ma lihtsalt minema 5 esimene ja ma lähen, et näha, on 7 suurem või väiksem kui 5? See on suurem, nii et ma tean, et see saab olema paremal pool puud. Nii et mul on palju vähem asju vaadata. Rakendamiseks Kahendotsingupuu, sõlm, ma lihtsalt läheb on saada andmeid, nii int n; võid ka string või midagi, mida tahtsid. Sa pead olema ettevaatlik, millega määratletakse, mis on suurem, mis on vähem. Nii et kui sa olid stringid, näiteks, siis võiks määratleda et kõik need asjad on parem ei kavatse on suurem pikkus, vasakul ei kavatse on madalam pikkusega, nii et see on tõesti sinust. Kuidas rakendada leida BST? Esimene asi, mida me peame tegema, on vaadata, kas juured on NULL. Kui see on NULL, siis tähendab see, et asi ei ole seal sest sa ei pea isegi puu, eks? Nii et ma tagasi false. Muidu, ma lähen, et kontrollida, kas number on suurem kui väärtus root. Ma lähen, et proovida leida element paremal puu. Sa näed, et ma kasutan rekursioon siin. Ja siis, kui see on väiksem, ma lähen vaatama vasakule. Ja lõpuks, kui aga see ei ole väiksem või suurem, see tähendab, et see on väärtus omaette. Nii et ma lihtsalt tagasi tõsi. Näete siin, et ma kasutasin kui siis, kui. Ja pidage meeles, viktoriin 0, meil oli probleem, mis oli siis, kui, kui, ja sa pidid leidma ebaefektiivsus, ja ebatõhusust, et sa kasutasid kui. Sa oleks pidanud kasutama, kui teine, kui teine, kas ja mujal. Niisiis, ma peaksin kasutama muud kui ja teine ​​siis ja veel siin? Kas keegi - jah? [Student keelt, kuuldamatu] See on suurepärane. Nii ta ütleb, et see ei ole oluline, lihtsalt sellepärast, et ebaefektiivsus, et meil oli enne oli see, et kuna, äkki kui mõned tingimus oli täidetud, Nii et teil on läbi tegevuse, kuid siis te ei kavatse vaadata kõik muud tingimused. Aga sel juhul, see tagastatakse kohe, et see ei ole oluline. Nii et sa ei pea kasutama muud kui. Ja lõpuks räägime katseid mis on igaühe lemmik. Proovida on puu massiive. See on väga kiire otsida väärtusi, kuid ta kasutab palju mälu. Ja see on tavaliselt filtreerida sõnad, nii et kui sa soovivad rakendada, näiteks, ma ei tea, nagu telefoniraamat telefonis ja sa tahad, et oleks võimalik B-tüüpi ja lihtsalt inimeste nimed, kes on B. See on väga lihtne rakendada, et kasutades proovida, näiteks. Kuidas sa defineerid sõlme proovida? Sa pead lihtsalt olema bool et läheb is_word. See tähendab seda, et kasutades kõik märgid enne seda sõlme, sa suutsid sõna moodustamiseks, ja siis pead massiivi osuti sõlmedele. Kas te näete, et meil on hulgaliselt vanem sõlmede nii sõlme * array? Jah? Vaatame, kuidas see töötab. Sest õigekirja kontroll, meil massiivi 27 elementi, sest meil on kõik tähed pluss ülakoma. Enne siin ma olen lihtsalt kavatse kasutada 2, sest ma tahan, et oleks võimalik kirjutada laual. Okei. Nii et see on näide proovida. Kui ma lihtsalt määratleda esimese sõlme Võtan massiivi 2 elementi mis on 2 vihjeid NULL, nii et ma lihtsalt panna "a" ja "b". Ja ma lähen on tõeväärtus, mis ütleb is_word. See saab olla vale, et esimene, lihtsalt sellepärast, et enne, et teil ei ole mingit märki. Nii tühi sõna ei ole sõna. Nii et see on vale. Kui ma tahan lisada "" sellele sõnastik, mida ma pean tegema? Ma lihtsalt pean malloc uus sõlm "" ja seejärel lisage oma sõna tõsi. Nii see lihtsalt on, et olles "" läheb, et olla tõsi. Mõtet? Siis kui ma tahan lisada "ba" Ma pean malloc 1 "b", ja siis ma lähen luua boolean false, sest "b" iseenesest ei ole sõna. Siis ma lähen malloc veel üks "a", seega "ba" ja siis ma lähen loodud see on sõna tõsi. Sest "ba" on sõna. Ja siis, kui ma tahan näha, kui "b" on see sõnastik Ma võin lihtsalt minema esimene, "b". Ma lähen alla ja vaatan on sõna, ja see ütleb vale. Nii et see ei ole sõna. Kui ma tahan vaadata "ba" Lähen esimene, "b", ja seejärel minna "", ja ma näen tõsi, et see on sõna. Mõtet? Paljud inimesed segadusse üritab. Ei? Lõpuks Huffman kodeerimine. Huffman kodeerimine on väga kasulik et säästa mälu ja suruma tekstifaile lihtsalt sellepärast, et palju kordi te kasutate "a" ja "e", näiteks oma dokumente, kuid ma ei tea, kas te kasutate "Q" või "Z" nii palju. Võttes ainult 1 baidi jaoks iga märk, iga - 256 tähemärki, mis meil on ASCII tabel ei ole väga optimaalne, lihtsalt sellepärast, et seal on mõned märgid, et te kasutate palju rohkem, nii peaksid sa kasutama vähem mälu neile. Kuidas kasutada Huffman kodeerimine? Peame tegema Huffman puu.  Huffman puul on sõlmed mis on sümbol, mis saab olema nagu, "a", "b", "c" täht, olenemata kirja teil on sagedus, mis on sagedus, et sõna on tekstis, et sa olid luua Huffman puu, ja siis sõlm, mis läheb juhtida vasakule Huffman puu ja teine ​​lümfisõlm, mis läheb juhtida paremale. Nii lihtsalt nagu puu. Kuidas ehitada Huffman puu? Sa lähed, et valida 2 sõlmed, mis on madalaim sagedustel. Kui teil tie sa lähed valima 2 sõlmede millel madalaim ASCII väärtused samuti. Siis sa lähed, et luua uus puu välja need 2 sõlmede et läheb on ühendatud sagedus vanem sõlme. Ja siis sa lähed eemaldada 2 last metsas ja asendada need vanem. Ja sa lähed korrata, et kuni sul on ainult 1 puu metsas. Vaatame, kuidas sa teeks Huffman puu ZAMYLA. Näete siin, et kõik tähed on sagedus 1, välja arvatud "", mis on sagedus 2. Nii et ma loodud sõlmpunktid kõik tähed panin järjekorras ASCII väärtus ja sagedus. Nii et kui ma tahan, et luua esimene puu, siis on see koos "L" ja "M". Nii et see on siin. Sagedus paari saab 2 sest see on 1 + 1, siis järgmisel 2 koos madalaima sagedused on "Y" ja "Z". Ja siis on mul kõik need on - on sagedusega 2. Niisiis, millised on need, mis on madalaim ASCII raha kõrval üks? "A" ja "L". Nii et ma luua uus sõlm, ja lõpuks, see on 4 ja 2, nii et 2 saab olema vasakul. Ja see on Huffman puu. Siis kui ma tahan kirjutada mingi tekst, nagu binaarsed teisendada tekst, kasutades Huffman puu on väga lihtne. Näiteks, kui ma ütlen, et liigub vasakule on 0 ja liigub paremale on 1, Mis on see, et läheb esindama? Nii nagu 1, 1, nii paremale, paremale, ja siis 0, nii vasak oleks L ja seejärel 1, 0, 0. Nii 1, 0, lihtsalt 1, 0, "". Ja siis 0, 1, nii et "Z". Ja siis 1, 0, 0 - ei. 0, 0 on "Jah", nii laisk. Nii et see kõik on minu jaoks, Rob kavatse üle võtta. [Rob Bowden] Nii, nädal 7 kraam. Meil on palju minna üle tõeliselt kiire. Bitwise ettevõtjad, buffer overflow, CS50 raamatukogu, siis HTML, HTTP, CSS. Kokkuvõttes, nagu 15-20 minutit. Bitwise ettevõtjad. Seal on 6 neist, et sa pead teadma. BitWise ja BitWise või XOR, vasakule nihe, paremale nihe, ja ei. Paremalenihe ja sa ei vaevu nägin loeng üldse. Me läheme üle kiiresti siin, aga see on hea teada, et need on 6, mis on olemas. Pea meeles, et bitwise ettevõtjad on nagu siis, kui sa seda 3 + 4. Sa ei tegele binaarne 3 ja 4. Mis bitwise ettevõtjatele te tegelikult tegelevad üksikute bittide arvuga 3 ja 4. Nii esimene, mis me ütleme on bitwise mitte, ja kõik see on flip kõik bitid. Nii siin, kui sa oled kirjutamise C, siis ei kirjuta seda kui ~ 11011 või mis iganes, siis oleks kirjutada see meeldib ~ 4, ja siis oleks klapp binaarkujul 4. Nii et siin, ~ mõned binaarne number 1101101 läheb täpselt flip kõik 1 on 0, maailm ja kõik 0-1 oma. Nagu ma ütlesin seal, et sageli kasutavad seda, ja me näeme seda veidi, on nagu me tahame tulla mõned number kus kõik bitid on 1, välja arvatud üks neist. Nii et see on tavaliselt lihtsam väljendada number kui lihtsalt ühe natuke on seatud, ja siis võta ~ see, et iga teine ​​bitt on arvatud, et üks. Nii see on, mida me ei kavatse kasutada rohkem natuke. BitWise või. Siin on 2 kahendsüsteemile ja need 2 numbrit on üsna tüüpiline, sest nad esindavad kõikvõimalikke kombinatsioon bitti, mida võiks vaja tegutseda. Siin, kui ma or'd iga bit, me lihtsalt võrrelda otse alla. Nii vasakul meil 1 ja 1. Kui ma bitwise | need, mida ma nüüd saan? One. Siis bitwise | 0 ja 1 läheb mulle anda? One. BitWise 1 ja 0 saab olema sama, mis on üks. BitWise 0 | 0 läheb mulle 0. Nii ainult juhul, kui ma saan 0 on 0 | 0 korral. Ja te võite mõelda, et just nagu teie loogiline ors. Nii et kui sa arvad, et 1 tõsi ja 0, kui vale, sama asi kehtib ka siin. Nii tõsi või õige õige, õige või vale on tõsi. Vale või õige on õige, vale või vale on ainus asi, mis on tegelikult vale. Siin on näide sellest, et sa peaksid teadma nagu päris hea näide, kui bitwise ettevõtjad kasutavad. Siin, kui me või kapitali "koos Ox20, ja me vaatame neid teise, saame midagi. Ja kui me või väiketähti "" koos Ox20 me midagi. Teeme tõmba ASCII tabelis. Okei. Siin näeme, et A on - siin me oleme "" on pärast 65. Aga ma tulen kuueteistkümnendsüsteemis, mis on Ox41. Päris kindel, et me nägime seda klassis. Ma arvan, et me nägime seda klassi et see on üsna lihtne teisendada kuueteistkümnendsüsteemis kahekomponentsete. Nii siin, kui ma tahan panna 4 binaarne, see on lihtsalt saab olema 0100. See on 1 koht, 2 koht, 4 koht, nii et see on 4. Siis ma saan osa 1 binaarne, mis saab olema 0001. Ja nii see saab olema esindatus "" kahendsüsteemis. Võttes väiketähti "" see on nüüd läheb Ox61, kus, jagades need üles oma binaarne, nii 6 - Olgem tegelikult seda teha - ei puudu kustutuskumm? Eraser. Ox61. Nii jagada 6 binaarne saab olema 0 + 4 + 2 + 0. Ja jagamine 1 saab olema 0001. Vaadates Erinevus nende 2, me näeme, et ainus erinevus väiketähed ja kapitali "on selle ühe natuke. Nii tulevad tagasi siia - okay. Tulles tagasi siin, kui me vaatame, mida natuke Ox20 on nii lõikamise Ox20 sisse oma binaarne, on 0010, 0000. Ox20, ainult natuke, et on määratud see natuke, et oleme mures, koos vaheldumisi suuri kui ka väikesi "". Kui ma või "A", mis on see, "", kui ma või "A"-ga Ox20, mida ma nüüd saan? [Student, kuuldamatu] Väiketähed "a", kuna see läheb klapp see natuke 1. Ja kui ma või "a"-ga Ox20, mida ma nüüd saan? Väiketähed, sest lihtsalt Öring "" koos Ox20, Ma lihtsalt tuleb Öring selle ühe natuke 1, see on juba 1, nii et see ei loe. Nii saame "" ja "". BitWise ja. Jällegi, me ei mõtle seda kui meie loogiline ja vastutasu. Vasakul pool on meil tõeline ja õige. See saab olla tõsi, ja kõigil juhtudel, vale ja õige või tõene ja vale või väär ja vale, mitte ükski neist asjadest on tõsi. Niisiis, mida me lõpuks saada 1000. Nüüd, siin, siin, kus ma olen kasutanud ustav bitwise mitte, kus meil oli Ox20. Nii et see on Ox20. Nüüd, mida ma tahan teha, bitwise ~ of Ox20. See läheb klapp kõik bitid. Nii et mul on 1101, 1111. Ja nii "" anded on ~ Ox20 läheb mulle mida? Ainult natuke meil on tõesti vaja mõelda on see, sest kui kõik need bitid 1, siis me ei kavatse saada täpselt mida "" oli, välja arvatud, võib-olla, mis see natuke on. Sest kui ta oli 1, nüüd läheb seada 0, sest mis iganes see on, anded selle saab olema 0. Mis on A & ~ Ox20 annan mina? [Õpilased vastata, kuuldamatu] Ja mis on "a" ja - see on "". Ja mis on "a" ja ~ Ox20 annan mina? "A." Kuna see on praegu 1. Anding käesoleva 0 kavatseb teha see 0, ja nüüd me ei kavatse saada ". Mõlemad on ", ja last but not least seda tüüpi, meil XOR. See on väga sarnane või välja arvatud see tähendab ainult või. See on nagu see, mida sa tavaliselt mõtlema nagu või reaalses maailmas. Nii et sa ei kas "x" või "Y", aga mitte mõlemad. Siin 1 ^ 1 saab olema 0. Sest tõsi, see on - see ei toimi nii hästi loogiline õige ja vale kui bitwise & ja või teed, kuid tõsi ^ tõsi on vale. Kuna me ainult tahame naasta tõsi, kui ainult üks neist on õige. Nii 1 ^ 1 on 0. Aga 0 ^ 1? Kas 1. 1 ^ 0 on 1, 0 ^ 0 on 0.. Nii igasugustes tingimustes, 0 bitwise midagi 0 saab olema 0. 1 bitwise midagi 0 või 0 bitwise 1, kas see on | või ^, see saab olema 1, ja kui see on ja see saab olema 0. Ja ainult juhul, kui 1 bitwise 1 ei ole 1 on ainu-või. See on 0110. Nii et siin nüüd, kasutades XOR - nii oleme tagasi 20. "" ^ Ox20 on need 2 bitti me võrrelda. Nii 1 ^ 0 läheb mulle mida? Üks. "" ^ Ox20 läheb mulle anda? Väiketähed. "" ^ Ox20 läheb mulle anda? Capital A. Sest mis iganes see teeb, see XORing koos Ox20 tegelikult flipping iganes see natuke on. Kui see on 0, see on nüüd hakkab muutuma 1. Kuna see on 1, 1 ^ 1 on 0. Nii et meie "" muutunud "" ja meie "" muutunud ". Nii XOR on tõesti mugav viis lihtsalt flipping puhul. Sa tahad Käi tähtede ja asendusliikmete puhul iga märk, sa lihtsalt XOR kõike Ox20. Nüüd oleme vasakule nihe. Vasakulenihe lihtsalt läheb, põhimõtteliselt push kõik numbrid või vasakule, ja sisestada 0 on nende taga. Nii et siin me oleme 00001101. Me push 3 0 on paremalt, ja saame 01101000. In kahendkujul mõttes me näeme, et see on tõesti tegemist 13 vasakule nihutatud 3, mis annab meile 104. Nii vasakule minnes näeme siin, x << y on põhimõtteliselt x * 2 ^ y. 13 * 2 ^ 3, 2 ^ 3 on 8, nii et 13 * 8 on 104. Kui sa arvad binaarne üldiselt kui iga number, kui hakkame õige, see on 1 koht, siis 2 koha, siis 4 koht. Niisiis, surudes 0-st paremale, me lihtsalt surudes asju, mis olid 4 koht kuni 8 koht, ja asjad, mis olid 8. koht kuni 16 koht. Iga vahetuse lihtsalt korrutab 2. Jah? [Student] Mis juhtub, kui sa nihutatakse 5? [Bowden] Kui nihutatakse 5 siis oleks lihtsalt kaotad numbrit. Paratamatult on see sama asi. Like, täisarvud on ainult 32 bitti, Nii et kui teil lisada 2 tõesti suur täisarvud, see lihtsalt ei mahu täisarv. Nii et see on sama asi siin. Kui te nihutatakse 5, me lihtsalt kaotame selle. Ja see on selline, mida ma mõtlen "jämedalt" kus, kui sa minema liiga kaugele, sa kaotad bitti. Paremalenihe saab olema vastupidine, kuhu me läheme pista 0 keeras end, ja meie eesmärkidel, täitke 0-vasakult. Nii teeme seda, me põhiliselt tagurdamine, mida me juba teinud. Ja me näeme, et kolm 0-paremale on lihtsalt ära kukkunud, ja oleme surunud 1101 kogu tee paremale. See teeb 104 3, mis on tõhus, x / 2 ^ y. Nüüd, siin, see on sarnane idee. Miks on see lihtsalt umbes x / 2 ^ y, ja tegelikult ei x / 2 ^ y? Sest kui mul oli nihutatakse 4, oleksin kaotanud 1. Põhimõtteliselt, mida sa arvad, lihtsalt arvan, et täisarv jaotus üldiselt. Niisiis, nagu 5/2 on 2. See ei ole 2.5. See on sama mõte siin. Kui me jagame 2, saame kaotada veider bitti mööda teed. Nüüd - Ongi bitwise. See on kõik, mida vaja teada. Mäleta kasutamise juhtudel nägime klassis, nagu natuke mask on kasulik bitwise ettevõtjad, või kasutate neid natuke maskid. Trükitähtedega ja väiketähti, ümberehitused on päris prototüüpsed näiteks. Ok, buffer overflow rünnakuid. Keegi mäletab, mis viga oli see funktsioon? Teadaanne kuulutasime massiivi 12 baiti, 12 tähemärki, ja siis me koopia meie puhver 12 tähemärki kogu string bar. Mis on probleem? Maagiline number 12 peaks päris palju kohe pop välja nagu - miks 12? Mida teha, kui bar juhtub olema rohkem kui 12 tähemärki? Mis siis, kui riba on miljoneid tegelased? Siin on küsimus selles, memcpy. Kui riba on piisavalt pikk, see lihtsalt täiesti - "c", "c" ei ​​huvita, et see oli ainult 12 tähemärki; "C" ei hooli, et see ei sobi, et paljud baiti. See lihtsalt täiesti kirjutatakse char, 12 bytes oleme eraldatud see, ja kõik varem seda mälu, mis tegelikult ei kuulu, et puhver kõikvõimaliku string riba. Nii et see oli pilt nägime klassis kus oleme meie stack kasvab. Sul tuleks kasutada neid pilte või tutvuda nendega uuesti. Oleme meie stack kasvab, mälu aadressid algavad 0 tipus ja kasvab kuni meeldi 4000000000 allosas. Meil on massiiv "c" kuskil mälus siis oleme meie kursor riba paremal all see, ja siis meil on see salvestatud kaader pointer meie saatja aadress ning meie vanem rutiin pinu. Pea meeles, mida saatja aadress on? See on kui peamine nõuab funktsiooni foo kutsub funktsioon bar, paratamatult, baar tulu. Nii et kui bar tulu, mida nad peavad teadma, et see läheb tagasi suva, mis nõudis ta. Nii saatja aadress on aadress funktsiooni, et ta peab tagasi, kui tagastab funktsioon. Põhjusel, et on oluline, et buffer overflow rünnakute tõttu, mugavalt, Häkkerid soovite muuta, et saatja aadress. Selle asemel, et läheb tagasi suva, ma lähen tagasi sinna, kus häkker tahab tagasi minna. Ja mugavalt kus häkker sageli tahab minna tagasi on algusest puhvris et me algselt oli. Nii teate, jälle, Little India. Seade on näide Little India süsteem, nii täisarv või osuti on salvestatud bytes vastupidine. Nii et siin me näeme - see on? Jah. Näeme Ox80, OxC0, Ox35, OxO8. Mäleta kuueteistkümnendarvudega? Me ei muuda kuueteistkümnendarve Little India, sest 2 kuueteistkümnendarvudega moodustavad ühe baidi ja me vastupidine baiti. Sellepärast me ei salvesta, nagu 80530CO8. Me säilitada hoopis iga paari 2 numbrit, alustades paremalt. See aadress viitab aadress algust meie puhver, et me tegelikult tahtsime kopeeritav esimese koha. Põhjusel, et see kasulik on, sest mis siis, kui ründaja juhtus, selle asemel string, mis oli lihtsalt kahjutu string nagu oma nime või midagi, Mis siis, kui selle asemel, et string oli lihtsalt mingi suvaline kood et tegin mida iganes nad tahtsid seda teha? Nii võivad nad - ma ei mõtle iga cool kood. See võiks olla midagi, kuigi. Kõik katastroofiline kood. Kui nad tahavad, võivad nad lihtsalt midagi at seg vead, kuid see oleks mõttetu. Tavaliselt seda häkkida oma süsteemi. Ok. CS50 raamatukogu. See on põhiliselt getInt, getString, kõik need funktsioonid andsime teile. Nii et meil on char * string, ja see on abstraktsioon, mis me puhus ära mingil hetkel poolaastal. Pea meeles, et string on lihtsalt massiivi tähemärki. Nii et siin me näeme lühendatud versioon getString. Sa peaksid tagasi vaadata seda meeles, kuidas see tegelikult ellu viia. Võtme andmed on märgata, saame ühe märgi korraga alates standard, mis on just nagu meie kirjutades klaviatuuri. Nii ühe märgi korraga, ja kui me liiga palju märke, nii et kui n + 1 on suurem kui võimsuse siis meil on vaja suurendada suutlikkust meie puhver. Nii et siin me kahekordistades meie puhver. Ja see peab minema, me lisada iseloomu meie puhver kuni me saame uue rea või faili lõppu või mis iganes, sel juhul, et me oleme valmis koos string ja siis reaalne getString kahaneb mälu, nagu siis, kui me eraldatakse liiga palju mälu siis lähen tagasi ja kahaneb veidi. Nii et me ei näita, kuid peamine idee on see on lugeda ühe märgi korraga. Ta ei saa lihtsalt lugeda kogu asi korraga, sest nende puhver vaid teatud suurusega. Nii et kui string et ta püüab lisada puhver on liiga suur, siis oleks voolata. Nii et siin me vältida, et ainult lugedes ühe märgi korraga ja kasvab iga kord, kui meil on vaja. Nii getInt ja muu CS50 raamatukogu funktsioonid kalduvad kasutama getString nende rakendamist. Nii et ma esile olulisemad asjad siin. Ta kutsub getString saada string. Kui getString suutnud tagasi mälu mäletan, et getString mallocs midagi, nii et kui te helistate getString sa ei tohiks (arusaamatu) tasuta, et string mis sul on. Nii siin, kui ta ei malloc midagi, me tagasi INT_MAX lihtsalt lipu, et hei, me ei olnud tegelikult võimalik saada täisarv. Sa peaksid ignoreerida mida ma su juurde tagasi, või sa ei tohiks käsitleda seda kehtiv sisend. Lõpuks eeldatakse, et õnnestuks, me kasutame sscanf selle eriline lipp, mis tähendab, esimene matš täisarv, siis suvalise märgi pärast, et täisarv. Nii teate soovime, et see on võrdne 1. Nii sscanf naaseb kuidas palju vasteid kui edukalt tehtud? Ta tagastab 1, kui see sobis täisarv, ta naaseb 0, kui ta ei vasta täisarv, ja ta naaseb 2 kui see sobitada täisarv järgnevad mõned iseloomu. Nii märkate me uuesti, kui me sobib kõik, kuid 1. Niisiis, kui me kanda 1, 2, 3, C või 1, 2, 3, X seejärel 1, 2, 3 oleks saada talletatud täisarv X saaksid säilitatakse iseloomu, sscanf Jõutakse 2 ja me uuesti, sest me tahame ainult täisarv. Kiiresti puhub läbi HTML, HTTP, CSS. Hypertext Markup Language on struktuur ja semantika veebis. Siin on näiteks loeng, kus meil on HTML teeke. Meil on head märksõnad, keha silte meil on näiteid tühi sildid, kus me tegelikult ei ole algust ja tihedas tag, me lihtsalt link ja pilt. Sulgemishind ei ole pilt tag, seal on ainult üks silt, et saavutatakse kõik tag peaks tegema. Link on näide, me näeme, kui sa lingi CSS, script on näide sellest, kuidas sa link välise JavaScript. See on päris lihtne, ja pidage meeles, HTML ei ole programmeerimise keel. Siin, mäletan, kuidas sa määratleda vorm või vähemalt see, mida see teeb? Sellisel kujul on tegevus ja meetod. Meetodeid, mida saab ainult kunagi näha on GET ja POST. Nii et on variant, kus asi saab panna URL. Postitus on, kui seda ei pane URL. Selle asemel, et kõiki andmeid vormi sisestatud rohkem varjatud HTTP taotluse. Nii et siin, toiming määratleb kui HTTP taotlus läheb. Kui see läheb on google.com / search. Meetod. Mäleta erinevused GET ja POST, ja öelda näiteks, kui soovite järjehoidja midagi. Sa ei suuda kunagi järjehoidja POST URL sest andmed ei sisaldu URL. HTTP, nüüd on Hypertext Transfer Protocol. Hypertext Transfer Protocol, siis ootaks ta kanda Hypertext Markup Language, ja mida ta teeb. Aga see üle ka pilte leiate veebis allalaadimist teete alustada HTTP taotluse. Nii HTTP on lihtsalt keeles World Wide Web. Ja siin sa pead tunnistama, see omamoodi HTTP taotluse. Siin HTTP/1.1 küljel lihtsalt ütleb, et see versioon protokolli ma kasutan. See on päris palju alati saab olema HTTP/1.1, kui te näete seda. Siis me näeme, et see oli GET, alternatiiv on POST, et võite näha. Ja URL, mis ma üritasin külastasid www.google.com/search?q = blah, blah, blah. Seega pidage meeles, et see küsimärk q = blah blah blah, on selline värk, mis on esitatud kujul. Vastuseks võib naasta mind näeks välja midagi sellist. Jällegi, alates protokolli, mis saab olema, et järgneb seisundi kood. Siin on 200 OK. Ja lõpuks, veebileht, et ma tegelikult palus järgneb. Võimalik staatus kood võite näha, ja sa peaksid teadma mitu neist. 200 OK olete ilmselt näinud. 403 Forbidden, 404 ei leitud, 500 Internal Server Error Tavaliselt, kui te lähete veebilehel ja midagi on katki või oma PHP kood jookseb, arvestades, et aparaat on meil nii suur oranž kast mis kerkib ja ütleb, nagu midagi on valesti, on see kood ei tööta või see funktsioon on halb. Tavaliselt veebilehed ei taha teada, mis funktsioonid on tegelikult halb, Nii et selle asemel nad lihtsalt teile 500 Internal Server vead. TCP / IP on 1 kiht all HTTP. Pea meeles, et seal on Internet väljaspool World Wide Web. Nagu siis, kui sa mängid online mäng see ei lähe läbi HTTP, see läheb läbi erinevad - see on endiselt kasutades Internet, kuid ta ei kasuta HTTP. HTTP on vaid üks näide sellest, protokoll ehitatud TCP / IP. IP-sõnalt tähendab Internet Protocol. Igal arvutil on IP aadressi, sest nad on need 4-kohaline asjad nagu 192.168.2.1, või mis iganes, see kipub olema kohaliku üks. Aga see muster IP aadress. Nii DNS, Domain Name Service, see on, mida tähendab asju nagu google.com, et tegelik IP aadress. Nii et kui sa kirjutad, et IP-aadressi URL, mis viib teid Google, kuid sa ei kipu mäletan neid asju. Sa kipuvad mäleta google.com asemel. Viimane asi, mis meil on, sadamad, kus see on TCP osa IP. TCP ei rohkem. Mõtle, nagu teil on veebibrauser töötab. Võib-olla teil on e-posti rakendus; on sul äkki mõni muu programm, mis kasutab Internet töötab. Nad kõik vajavad juurdepääsu internetile, aga arvuti on ainult 1 WiFi kaardi või mis iganes. Nii sadamad on nii, et meil on võimalik jagada kuidas neist rakendustest on võimalik kasutada internetti. Iga taotlus saab 1 konkreetsesse sadamasse, et seda saab kuulata, ja vaikimisi HTTP kasutab port 80. Mõned e-posti teenuseid kasutama 25. Madala nummerdatud need kipuvad olema kaitstud. Sul on tavaliselt võimalik saada kõrgema numbriga need ise. CSS, kaskaadlaadistik. Me stiilis veebilehti CSS, mitte HTML. Seal on 3 kohtades võite panna CSS. See võib olla inline vahel style tags, või täiesti eraldi faili ja siis seotud sisse Ja siin on lihtsalt näide CSS. Sa peaksid mõistma seda mudelit, kus esimene näide on meil sobitamine body, ja siin me keskele body. Teine näide on meil sobitamine asi ID jalus, ja me rakendades mõningaid stiile seda. Pange tähele, et ID jaluse teksti-joondamine vasakule, samas keha teksti joondamine keskele. Footer on keha sees. See, selle asemel, text-align vasakule, kuigi keha ütleb text-align center. See on kogu kuhjuvate osa. Sul võib olla - saate määrata stiile keha ja siis asjad organismis saab määrata täpsema stiile, ja asjad töötavad nagu te ootate. Konkreetsemad CSS projekteerijad ülimuslikud. Ma arvan, et see on. [Ali Nahm] Tere kõigile. Kui ma vaid saaksin teie tähelepanu. Olen Ali ja ma lähen läbi PHP ja SQL tõesti kiire. Nii saame alustada. PHP on lühike PHP: Hypertext Preprocessor. Ja nagu te kõik peaksid teadma, et see on server-side scripting keeles ja me kasutame seda tagasi lõpuks veebilehed ja kuidas ta teeb palju arvutusi, behind-scenes osa. Süntaks. See ei ole nagu C, üllatus, üllatus. See on alati alustada, kui näete, - Ma ei saa liikuda. Näete te vajate uut tüüpi traksid ja siis pead ka? Php. See on alati, kuidas sa pead kaadrisse PHP teksti, teie PHP koodi. Nii et see ei saa olla nagu C, kus sa sellist panna see esimene. Sa pead alati selle ümber. Ja nüüd peamine süntaks on see, et kõik muutujad peavad algama $ märk. Sa pead tegema seda, kui sa oled alati määratletud, sa pead tegema seda kui te viitate, et neid hiljem. Sa alati vaja, et $. See on sinu uus parim sõber, päris palju. Te ei - erinevalt C, siis ei ole vaja panna, millist muutuja tüüp on. Niisiis, kui sa ei pea $, sa ei pea tegema, nagu, int x või string y, ja nii edasi, ja nii edasi. Nii väike erinevus. Nagu tulemusena, siis tähendab see, et PHP on nõrgalt tüüp. PHP on nõrgalt tüüp keel, ja see on nõrgalt kirjutatud muutujad. Teisisõnu tähendab see, et sa saad vahetada erinevaid muutuja tüüpi. Te saate salvestada oma number 1 kui int, saate salvestada see string, ja saate hoida seda float, ja see on kõik, et number 1. Isegi kui sa oled ladustamiseks see erinevaid vorme, see on ikka - muutuja tüüpe ikka ettevõttest lõpuks. Nii et kui sa vaatad siia, kui sa mäletad pset 7, Paljud teist ilmselt olnud probleeme sellega. Kaks võrdusmärki, 3 võrdusmärki, 4 võrdusmärki. Okei, ei ole 4 võrdusmärki, kuid seal on 2 ja 3. Sa kasutad 2 võrdusmärki kontrollida väärtused. Seda saab kontrollida mitut tüüpi. Nii et kui näete esimesel näiteks Mul on num_int == num_string. Nii et teie int ja teie string on nii tehniliselt, 1, aga nad on erinevad. Aga topelt võrdne, see ikka edasi. Kuid kolmekordsed võrdsete kontrollib see väärtus kui ka erinevat tüüpi. See tähendab, et ta ei kavatse edasi selles teises asjas, kus te kasutate 3 võrdusmärki asemel. Nii et on suur vahe, et sa peaksid kõik on näidanud nüüd. String ahel on samuti võimas asi, mida saab kasutada PHP. See on põhimõtteliselt lihtsalt see mugav dot märke, ja see on, kuidas saab siduda strings koos. Nii et kui teil on kass ja teil on koer, ja sa tahad panna 2 strings koos saate jooksul ja see on selline, kuidas see toimib. Võite ka lihtsalt panna need üksteise kõrval, nagu näete siin põhjas näiteks kus ma olen kaja string 1 stringi 2. PHP teavad nende asemele kui sellist. Massiivid. Nüüd PHP on 2 erinevat liiki massiive. Sul võib olla regulaarne massiivid ja saab ka assotsiatiivne massiivid ja me lähme praegu nendega. Regulaarne massiivid on vaid seda C, ja et teil on indeksid, mis on nummerdatud. Praegu me lihtsalt luua üks ja panna - nii see on, kuidas me loome tühja massiivi, siis me läheme pannakse indeks number 0. Me panna number 6, väärtus 6. Sina näed seda allosas siin. Where's - indeksiga number 1, et me paneme väärtus number 4, ja nii näed seal on 6, seal on 4, ja siis kui me trükkimine asju, kui me püüame ja printida salvestatud väärtuse juures index number 0, siis me näeme väärtus 6 prinditakse välja. Cool? Nii et regulaarne massiivid teile. Teine viis, kuidas saate lisada ka asju regulaarselt massiivid nüüd on saate lihtsalt lisab neile lõpus. See tähendab, et sa ei pea täpsustama konkreetsed indeks. Näete number ja seejärel nurksulgudes pole indeksile. Ja teate - PHP teavad lihtsalt lisada see nimekirja lõppu, järgmine vaba kohapeal. Nii et näete, 1 seal tol 0 spot, 2 läks seal esimese koha. 3 läheb - on lisatud ka seal. Nii et sellist mõtet. Sa lihtsalt pidevalt täiendatakse seda, ja siis kui me kajastas indeksi number 1, siis välja printida väärtus 2. Siis on meil massiivid, mis on assotsiatiivne massiivid. Assotsiatiivne massiivid asemel arvulised näitajad, Mida nad teevad, on neil indeksid, mis on nööri. Näete, selle asemel - ma lahti kõik need number indeksid, ja nüüd on see key1, key2, key3 ja nad jutumärkidega tähendama, et nad on kõik stringid. Nii et meil on üks näide sellest. Näide selle kohta on, et meil on TF ja see indeks nimi. Me panna "Ali", nagu nimi, on indeks, kaloreid söömiseks, saame panna int seekord asemel string, ja siis indeks meeldib, me ei pane kogu massiivi sees on. Nii et see on omamoodi - see on sarnane kontseptsioon, kuidas meil oli indeksite numbritega, kuid nüüd saame muuta indeksid ümber on need stringid asemel. Võite seda teha, peale lihtsalt tee seda eraldi, sa saad teha seda kõike ühe tüki. Nii et näete, et tf selle massiivi ja siis me need kõik üks suur kandiline sulg komplekt. Nii et saab asja kiirendada. See on rohkem stilistilist valikut kui mitte. Meil on ka silmad. In C meil silmad, et niimoodi töötada. Meil oli massiiv, ja me läksime indeks 0 kuni nimekirja lõppu, ja me printida kõik, eks? Välja on probleem selles, assotsiatiivne massiivid me ei pruugi teada, need arvulised näitajad sest nüüd on meil string indeksid. Nüüd me kasutame foreach ahelat, mis jällegi sa loodetavasti kasutatakse pset 7. Foreach silmad lihtsalt teadma iga osa nimekirja. Ja see ei ole täpselt teada, numbriline indeks, mis sul on. Nii et teil on foreach süntaks, nii et see on foreach, paned massiivi. Nii et minu massiivi nimetatakse pset ja siis kui sõna kui, ja siis paned selle kohaliku ajutise muutuja, et sa ei kavatse kasutada ainult konkreetne asi, mis toimub hoida konkreetset - ühel juhul või ühe osa massiivist. Erksa num korraldab 1 ja siis võib-olla siis hoidke number 6, ja siis hoidke number 2. Aga see on garanteeritud, et läbida iga väärtus, mis on massiiv. Kasulikke funktsioone, et sa peaksid teadma, PHP on vaja, nii et on tagatud, et sa oled ka teatud faile, kaja, väljumise, tühi. Ma väga soovitame vaadata pset 7 ja vaadata neid funktsioone. Te võib-olla teavad need, nii et ma oleks kindlasti teadma, mida täpselt, need on kõik teed. Ja nüüd me läheme läbi ulatus tõesti kiiresti. Ulatusega, PHP on selline funky asi, erinevalt C, ja nii me lihtsalt läbida see kiiresti. Ütleme hakkame seda noolt, et meil on olemas. Ja me ei kavatse alustada $ i. Nii muutuja "i" saab olema 0, ja me lihtsalt hoida trükkimine seda, et suur valge kast seal. Me alustame I0, ja siis me korrata seda. Nii et seal on 0. Ja siis me lähme juurdekasvu seda silmus, ja siis see saab olema väärtus 1. Üks on alla 3, nii et see läheb läbi, et loop, ja siis me näeme seda trükitakse uuesti. Me läheme juurdekasvu seda uuesti 2, ja 2 on väiksem kui 3, seega annan jaoks loop, ja see saab printida 2. Siis sa tähele, et 3 ei ole väiksem kui 3, siis me välja murda silmus. Nüüd oleme väljunud, ja siis me lähme minema aFunction. Okei. Nii et teil on meeles, et see muutuja, mida me oleme loonud, "i" muutuv, ei ole kohapeal scoped. See tähendab, et see ei ole kohalik silmuse, ja et muutuv saame veel kasutada ja muuta hiljem, ja see ikkagi tõhus. Nii et kui te lähete funktsioon nüüd, näete, et meil kasutada ka "i" muutuja, ja me juurdekasvu "i" + +. Sa arvad, esimesel, mis põhineb C, et see on koopia "i" muutuja. See on täiesti teine ​​asi, mis on õige. Nii et kui me printida, me trükkida "i" + +, mis läheb välja trükkida, et 4, ja siis me läheme - sorry. Siis me end läbi selle funktsiooni, ja me ei kavatse olla seal, kus see nool on just nüüd. See tähendab, et siis, aga isegi funktsiooni muudetud väärtus "i", see ei muuda väljaspool funktsiooni sest funktsioon on eraldi ulatus. See tähendab, et kui me kaja "i", see ei ole muutunud ulatust funktsiooni ja nii siis me printida 3 uuesti. Erinevaid asju ulatus PHP kui C. Nüüd PHP ja HTML. PHP saab teha veebilehti dünaamilisemaks. See ajab asju teistmoodi. Meil on see erinev HTML. HTML, me alati ainult sama staatiline asi, nagu kuidas Rob näitas, arvestades, PHP, saate muuta asju, mis põhineb kes on kasutaja. Nii et kui mul on see, mul on, "Sa oled sisse loginud nimega -" ja siis nimi, ja ma ei saa nime muuta. Nii et just nüüd on nimi Joosep ja see on "minust", aga siis ma saan muuta ka nimi on Tommy. Ja see oleks teine ​​asi. Siis saame ka muuta erinevaid asju temast, ja see näitab erinevat sisu põhineb nimi. Nii PHP saab selline muutus, mis toimub teie veebilehel. Sama siin. Still, pange tähele, et neil on erinev sisu, kuigi te tehniliselt ikka tutvumise sama veebilehe pinnal. Genereerimine HTML. Seal on 2 erinevat võimalust, et võite seda teha. Nii et me läheme läbi, et kohe. Esimene võimalus on, siis on - jah, vabandust. Nii et sa lihtsalt oma tavalise silmus PHP, ja siis kajavad PHP ja sa kaja läbi HTML. Kasutades mida Rob näitasin HTML script ja siis kasutades PHP print lihtsalt välja trükkida veebilehele. Teine võimalus on seda teha, kui sa eraldada PHP ja HTML. Nii saab olema rida PHP, mis algab silmus, siis võib olla rida HTML eraldi asi, ja siis lõpuks loop, jälle koos PHP. Nii et see on omamoodi eraldab seda. Vasakul pool saate, et teil on kõik - see on lihtsalt 1 tüki PHP. Paremal näete, et teil on rida PHP, sul on rida HTML ja sul on rida PHP uuesti. Seega eraldavad seda arvesse, mida nad teevad. Ja sa tähele, et kas nii, sest kumbki neist nad ikka välja printida, kuid kujutise, pildi, et HTML on endiselt trükitud samamoodi. Ja siis näete ikka 3 pilti näidata üles oma veebilehel. Nii et see on 2 eri viise sama asi. Nüüd on vormid ja taotlusi. Kuna Rob näitasin, on vormid HTML ja me lihtsalt ehmatada see. Sul on tegevus ja sul on meetod, ja oma tegevust objekti näitab, kus sa lähed, et saada see, ja meetod on kas see saab olema GET või POST. Ja GET taotluse, kui Rob ütles, tähendab, et sa lähed pane see vorm ja te näete, et see on link, et POST taotluse te ei näe URL. Nii väike erinevus. Kuid üks asi, mis on sarnane asi on see, et POST ja GET on võrdselt ebakindlad. Nii et te võite arvata, et lihtsalt sellepärast, et sa ei näe seda URL, see tähendab, et post on turvaline, kuid võite veel näha seda oma küpsiseid teave, mida te saadate. Seega ei usu, et umbes üks või teine. Teine asi on tähele panna, et teil on ka lõik muutujaid. Te kasutada seda pset 7, et saada oma kasutajatunnus teavet. Mis juhtus oli see, et saate kasutada seda assotsiatiivne massiiv, $ _SESSION, ja siis sa oled võimeline juurdepääsu erinevaid asju ja salvestada erinevaid asju kogu lehekülge. Viimane asi on see, et meil on SQL, Structured Query Language, ja see on programmeerimiskeel hallata andmebaase. Mida täpselt, on andmebaasides? Nad kogusid lauad, ja iga tabeli võib olla sarnane tüüpi objekt. Seega oli meil laua kasutajaid oma rahastada pset. Ja miks nad on kasulikud? Sest see on nii püsivalt teabe säilitamiseks. See on viis jälgida asju ja hallata asjad ja tegelikult näeme seda erinevatel lehekülgedel ja jälgimine. Arvestades, et kui sa lihtsalt hoida seda, et üks vahetus hetk ja siis kasuta seda hiljem, siis ei pääse midagi, mis te olete salvestanud. Meil on 4 suurt asja, et me kasutame SQL käske. Meil on valida, sisestada, kustutada ja uuendada. Need on tõesti oluline, et te teada oma viktoriini. Me kiiresti üle minema valige kohe. Põhimõtteliselt te valite rida andmebaasist. Nii et kui teil on siin - meil on need 2 erinevat asja, ja me tahame, et valida tunnid tabel kus awesome - kui awesome veerg väärtus on 1. Nii et näete, siin on meil need 2 asja on klassi nimi, CS50 ja Stat110 ja meil on klass ID ja loosung. Nii et me tahame, et valida kõik, et teavet. Siis näete siin, et see on selline korjamine läbi selle awesome veeru kus kõik asjad on 1, ja siis see on klass ID, klassi nimi ja slogan, et see võib noppida. Kuidas täpselt sa seda koodi? Teil on kasutada PHP. Nii et omamoodi kuidas PHP ja SQL on omavahel seotud. Nüüd on meie koodi, ja me ei kavatse kasutada meie päringu funktsiooni nagu me tegime pset 7, ja me ei kavatse joosta SQL päring. Siis lähed on - meil on alati vaadata, kas rida kolmekordse võrdne kui vale. Nii et taas, mida soovite kontrollida tüüp ja väärtus, ja siis, kui see ei tööta, siis tahan vabandada, nagu tavaliselt, kui me tegime pset 7. Muidu sa tahad silmus läbi kõik nende käepärane foreach ring, et me lihtsalt läks üle. Nüüd, kui me silmusega läbi ja oleme teinud seda varem, Oletame, et meie päringule möödas, nüüd oleme meie foreach silmus. Ja esimene rida see on, et siin on rida, siin, see pakendada. See saab printida välja kõik andmed, mida ta on saanud. Nii see läheb välja trükkida allosas "Soovivad õppida HTML?" Siis ta läheb minna järgmisele reale, sest see on läbinud esimese silmus, ja nii siis see läheb välja trükkida teisel real see, mis saab olema STAT110, Leia kõik hetked. Üks viimane asi on SQL kohti. Ma tean, et David puudutas see natuke loeng. Te saate lugeda hiljem. See on tõesti naljakas. SQL Injection on omamoodi keeruline asi. Oletame, et sa lihtsalt kinni need muutujad õigus oma päring, nagu näete, et esimene rida. Seega tundub hea, eks? Sa lihtsalt panna oma kasutajanimi ja parool oma päringuid ja soovite saata see ära ja saada kõik, mis on oma andmed tabelisse. See tundub üsna lihtne. Nii saab öelda, et keegi paneb, parool, see või teksti siin - peaks tegelikult olema punane kast. Ütleme, et nad panna, et parool - see on, mida nad sisenevad. Nii et nad panevad või "1" = 1. Objekti rumal parool on. Nüüd lihtsalt asendada see, ja sa pead meeles, et selle SQL päringu nüüd, hindab ta alati tõsi, sest sa oled tähele, et võite SQL päringu valida kõik andmed või saate lihtsalt on 1 = 1. Nii et alati saab hinnata tõeseks. See ei kavatse tõesti töö, sest see tähendab, et häkker saab tungida oma süsteem. Lahendus on see, et sa pead kasutama KPN süsteem, mis tähendab, et sa pead kasutama küsimärke, mis on see, mida te kasutada pset 7, kus sa lähed kasutada küsimärk asemel, kus sa tahad panna midagi, ja siis sa lähed on koma, ja siis pead hiljem pärast oma string, erinevaid muutujaid, mida soovite asendada oma küsimärk. Nii et sa tähele siin, et nüüd on mul need punased küsimärgid. Siis panin muutujad pärast mu stringid, et ma tean, et asendada neid selles järjekorras pärast. See tagab, et kui keegi teeb seda nii, ja neil või 1 = 1 olukord, et veenduge, taga lõpus, veenduge, et see ei ole tegelikult murda SQL päring. Okei, nii et see on päris palju seda, keeristorm PHP ja SQL. Palju õnne teile kõigile, ja nüüd Ore [Oreoluwatomiwa Babarinsa] Olgu kõigile. On aeg minna üle mõned JavaScript ja mõned muud asjad väga kiiresti, et me ei hoia sind täna. JavaScript. Jah. JavaScript on selline lahe asi, väidetavalt. Asjad, mida sa tõesti vaja teada JavaScript, see on omamoodi nagu kliendipoolse lõpuks, mida teie web app läheb tegema. Seal on mõned asjad, mida sa ei taha, et hoolitseda kogu aeg serveripoolne. Kõik vähe koostoimeid, rõhutades üks asi, mis teeb midagi kaduma. Sa tõesti ei taha olla rääkida oma server kõik aega. Ja mõned, et ei ole isegi võimalik teha serveripoolne. See on põhjus, miks meil on vaja midagi JavaScript. Cool asju JavaScript: On dünaamiliselt trükitud. See tähendab, et teie programm ei ole vaja teada, Mis täpselt, muutujad, kui sa kirjutad seda. See lihtsalt omamoodi aru kui see töötab. Muud asjad, mis on lahe rääkida: see on lokkis traksidega keeles mis tähendab süntaks on sarnane C ja PHP. Sa ei pea tegema palju ümber tegema, kui sa õpid JavaScript. Siin on natuke JavaScript. Huvitav asi siin on see, et kui te vaatate seda, meil on natuke JavaScript seal pea tag. Mis on see on põhimõtteliselt lihtsalt sisaldama JavaScript fail. See on üks viis, kuidas saate hulka JavaScript oma programmi. Siis teine ​​natuke on tegelikult mõned inline JavaScript, väga sarnane inline stiili CSS, ja sa oled lihtsalt kirjalikult mõned kood väga kiiresti seal. JavaScript on massiivid. Lihtsalt üks viis hoida andmeid ümber, väga kasulik. Väga kena ja lihtne süntaks. Sa kasutad nurksulgudes juurdepääsu kõike ja hoida kõike koos. Midagi liiga keeruline. Lahe asi JavaScript ja skriptikeeled üldiselt on see, et sa ei pea muretsema, array suurused. Sa võid kasutada array.length ja jälgida seda, ja ka massiivi võib kasvada või väheneda, kui te vajate seda. Nii et sa ei pea isegi muretsema mingit, oh ei, mul on vaja eraldada rohkem asju, või midagi sellist. Lahe asi on selles, et JavaScript on midagi, mida nimetatakse objektide kohta. See on objektorienteeritud keel, nii et mida ta on sisuliselt teed sa grupp andmed kokku, mõnevõrra sarnane struktuure, kuid võite seda kasutada nagu struct või assotsiatiivne massiiv süntaks. See on päris lihtne ja mida saate teha, on see, grupp andmed kokku kui sul on hunnik andmeid, mis on omavahel seotud. Sest see on kõik, mida sa vajad, et kirjeldada auto, sa ei pea olema see hunnik erinevates kohtades. Võite lihtsalt kinni see 1 objekti JavaScript. Nagu te ilmselt teate, iterating on üks neist tüütu ülesandeid. Sa lihtsalt tee seda enam uuesti. Sa pead rääkima iga objekti autosse või sa pead minema läbi iga kirje loetelus või midagi sellist. Nii JavaScript on sarnane PHP, foreach süntaks. Sel juhul on see eest mitu korda. Mida soovite kasutada seda ainult objektid. Seal on mõningaid probleeme, mis tekivad, kui te kasutate seda massiivid. Üldiselt on see on üks nendest asjadest, kuigi see on väga kasulik, sest sa kaotada palju õhuliini sest sa ei pea tõmba kõik oma objekti ise. Sul ei ole vaja meeles pidada kõiki olulisemaid nimesid. Sa justkui nad tagasi selle süntaks. Selle jaoks, kus tahad lihtsalt meeles et te saate tagasi kõik võtmed, väga sarnaselt hash tabelit. Kui te mäletate, et kui sa paneks string võid saada midagi välja mis oleks seotud raha sellega. Mida saab teha, on see, te ei saa öelda, eks, Panin auto, ja ma kutsusin ta Ferrari. Nii saab luua string Ferrari hiljem uuesti ja saad selle välja. Ja te võite seda teha silmus, mille jaoks silmus. Nii lihtsalt rohkem objekte. Peamine asi, mida selle tuleb meeles pidada, on, et saate kasutada objekti struktuure nagu süntaks, kui soovite neid, välja arvatud juhul, kui see, mida teie kavatsete kasutada string ei ole kehtiv muutuja nimi. Nii et kui te vaatate, et meil on võti koos tühikutega. Noh, kui sa olid panna object.key, ruumi, kus, ruumi, ruumi, et lihtsalt ei ole mõtet süntaktiliselt. Nii et sa ainult ei saa teha, et selline bracket süntaks. Ka JavaScript on väga ulatus-mõistlik PHP. Sul on 2 võimalust tegeleda ulatus. Sul ei saa olla var ees muutuja, ja see tähendab lihtsalt seda on globaalne. Sina näed seda kõikjal. Isegi kui sa olid panna see, kui avaldus kusagil mujal oma koodi peale, et hetkel sa ei näe, et muutuja. Teine asi on aga, koos var, see on piiratud iganes funktsiooni sa sisse Kui sa ei ole funktsioon, noh, see on ülemaailmne. Aga kui sul on ülesanne see on ainult nähtav, et funktsioon. Mul ei ole näiteks, kuid jah. See on üks nendest asjadest, kus saate hallata millised muutujad tahad olla globaalne, mida muutujad tahad olla kohalik, aga sa pead olema ettevaatlik, sellest, sest sa ei pea tüüp peenfraktsioonide kontrolli te teete C, kui siis, kui midagi on välja kuulutatud jaoks loop, see läheb jääda, et loop. Asi, mida me tegelikult hooli kasutades JavaScript manipuleerib veebilehti, eks? Ma mõtlen, et miks me seda teeme. Selleks, et me kasutame midagi, mida nimetatakse DOM. Document Object Model. Põhimõtteliselt, mida ta teeb, on see võtab kõik oma HTML ja mudelites viidud hunnik esemeid, mis on pesastatud üksteist. Hakkate läbi midagi sellist. Sul on, on minu jaoks õige, hunnik koodi seal, et on omamoodi - Sa arvad, et oleksin väga raske manipuleerida, sest siis oleksin parsing läbi hunnik teksti ja millel on tükk peale asju. Ja mis siis, kui see ei olnud nõuetekohaselt vormistatud? Halbu asju juhtub. Nii JavaScript hoolitseb selle eest, ja sa saad kena andmestruktuur, nagu üks mu vasakule, kus sa lihtsalt dokument, ja sees, et teil on midagi, mida nimetatakse HTML, ja sees, et teil on head ja keha ja sees, et pea te olema pealkiri, ja nii edasi, ja nii edasi, ja nii edasi. See lihtsustab manipuleerides veebilehe nii, et see on lihtsalt, oh, ma tahan rääkida seda objekti. Omamoodi väga sarnaselt sa räägiks teise objekti, mida teha ise. Nagu ma ütlesin, kõik DOM on dokumendi eesmärk. Kas see on lihtsalt üks koht ja siis võid minna sees leida asju, ja te ei saa seda teha - see on vana stiili teeb seda, seal, kus sa document.getElementById ja siis nime, ja kui saab ilmselt öelda, see muutub väga kohmakas mõne aja pärast. Nii et sa ilmselt ei taha seda teha. Sellepärast on meil Järgmine asi, mida me ei kavatse rääkida pärast seda. Oluline on siin see, et kõik on korras, siis on kõik need elemendid, eks? Nii et äkki ma saan muuta värvi midagi, kui leht laeb. Mis siis? Mis siis, kui mu kasutaja klõpsab midagi? Ma tahan seda teha midagi huvitavat, kui nad klõpsavad midagi. Sellepärast on meil üritustel. Võite põhimõtteliselt leida mingit osa oma DOM, ja siis öelda, hei. Kui see laeb või keegi klikib ta, või kui need hiirega üle see, midagi teha. Ja mis sul on, siis on funktsioonid, mis sellega hakkama teile. Need funktsioonid on sündmuseohjurite. Mida Nad - see on lihtsalt fancy viis öelda, seda funktsiooni täidetakse ainult siis, kui see sündmus juhtub. Nii tegeleb see sündmus, mis toimub. See, kuidas te paneks välja sündmus. Mul on nupp, ja kui sellel klõpsata, siis see plahvatab. Nii et ärge klõpsake nuppu. See on üks viis, kuidas sellele läheneda, eks? Sul on nupp tag, ja kliki teil on string, mis ütleb: oh, muide, ma seda plahvatav asi minu jaoks. Muidu on see lihtsalt nagu tavaline nupp just tehtud. Võite teha ka muul viisil, haarates DOM element, kuid me salvestada et pärast räägime jQuery. JQuery: See on raamatukogu, mis on piiriülese brauser. Võite kasutada seda päris palju midagi. Ja see annab sulle palju vahendeid, et töötada. Kuna JavaScript, kui võimas, ei ole kõik vajalikud tööriistad karbist tõesti tegeleda web app võiksite teha. Seega lihtsustab palju asju, annab teile palju funktsioone karbist välja, et sa tavaliselt on kirjutada ise, ikka ja jälle ja jälle. Ja lihtsalt teeb asju väga lihtne. Sul on ka valijad, mis võimaldab teil võtta kõik need elemendid, oma DOM palju lihtsalt, selle asemel et kasutada neid väga pikk funktsioon nõuab. Rohkem nende valijad. Sul on, seal olete, ütleme Ma tahan saada elemendi ID "kivi". Noh, jQuery, see on lihtsalt $ ja siis string, mis on nael, ja siis "kivi". See on väga lihtne ja palju kiiremini kui traditsiooniliste JavaScript viis probleemi lahendamiseks. Ja sul on sarnaseid asju klasside ja element tüübid. jQuery on - üks suurepäraseid omadusi on saate omamoodi suruma maha oma päringuid oma DOM väga kiire. Nüüd oleme tagasi juhul käitlemiseks, ja see on, kuidas sa hakkama üks sündmus jQuery. Niisiis, mida me siin me ütleme, okei. Mul on script tag, eks? Nii et ma pean seda inline JavaScript. Mida me teeme, on me öelda, eks. Kui dokument on valmis, mis tähendab, et dokument on laaditud, me läheme sisse, et funktsioon ja me öelda, eks, See funktsioon on tegelikult midagi muud. See on põhimõtteliselt öelda, olgu, mind elemendi ID "myid." Ja siis annab see funktsioon handler et hukatakse, kui klõpsate seda. Põhimõtteliselt, mida see teeb, on, ta ütleb, on kõik korras. Leht on laetud, nii et ma lähen sisse, leida see element, anna see sündmus ja seda põhiliselt loob oma lehe jaoks. Ja see on, kuidas sa tahad mõelda sündmus käitlemise kohta. Sa tahad mõelda, eks, kui midagi juhtub, mida ma tahan, et juhtub? Sa ei taha mõelda, okei, mul on vaja teha kindel, et see asi räägib see asi, see asi blah blah blah, sest tahad lihtsalt rääkida asi nii üritusi. Kui see juhtub, see juhtub. Kui see juhtub, mis juhtub. Ja kui asjad käivitab muid asju, mis on hea. Aga sa ei taha, et proovida ja teha keeruline kood kuhu vallandada mitu asja korraga, sest sa oled lihtsalt annan endale peavalu. Olgu. Nüüd saame meie leht sündmuste käsitlemiseks, aga oletame, et mu kasutaja klõpsab nuppu. Mis siis, kui ma tahan saata selle taotluse tagasi serverisse aga ma ei taha asendusostu lehekülge, sest võttes uuesti laadida uue lehekülje iga kord, kui muutub omamoodi tüütu, ja miks ma pean lammutama uuesti päist ja jalust jälle ja kõik elemendid lehel uuesti lihtsalt värskendada tervitus või aeg? Nii et miks me peame midagi Ajax. Mida me saame teha koos Ajax on võime öelda, eks, Ma tahan saata mõned andmed serverisse, ja ma tahan saada vastus tagasi, et ma ei uuenda oma lehele või äkki lihtsalt teha mõned algoritmilise arvutamise, mis ei pruugi näidata midagi kasutaja. Mida sa pead seda tegema? Noh, sa pead URL sa pead rääkima. Teie server ei saa lihtsalt võluväel kuulata eikusagilt. Sa pead olema konkreetse koha saadate andmed. Ja siis tuleb ka mõned andmed saata, või võibolla see dataless päring. Sa tahad lihtsalt ping serverile tagasi ja öelda, hei, ma olen elus, või midagi sellist. Ja siis sa tahad funktsioon, mis põhiliselt tegeleb edukalt. Oletame, et sa saad tagasi mõned andmed oma server, ja sa soovid muuta kasutaja pealkiri oma lehele. Nii et teil oleks saada infot juurde, ja sa suruksid et ekraanile. Mis juhtub on see, kui leht on valmis, loote click funktsiooni see nupp nimega greeter. Mis see siis teeb, kui see nupp on alla vajutatud, räägi greetings.php, teete ametikohale taotluse ja te ütlete, hei, anna mulle midagi oma lehel. Meil ei ole tegelikult vaja, et kirjeldada seda, kuid greetings.php, ütleme lihtsalt, annab tagasi "tere". Nii saame tagasi selle "tere" ja edu, eeldades midagi läheb valesti, siis minge selle eesmärgi koht et me määratud ja me lihtsalt kinni vastus olemas. Ja see on väga lihtne viis luua Ajax päringut. Väga kiiresti, Rob omamoodi mainis seda juba, asju saab valesti minna, halbu asju võib juhtuda, nii et sa tahad end kurssi viia need HTTP vastus koodid. Mis need on lihtsalt, nagu, 200, kõik läks hästi. Midagi muud, halbu asju juhtunud. See on üldiselt asi, mida tahate mäletada. Aga see on tore teada kõiki neid. Ja lõpuks, kui oleme läbi käinud kõik, et me peame rääkima väga kiiresti umbes disain, ja siis me ei saa teile kõigile lahkuda. Design. Asjad, mida tahate mäletada. Küsige endalt need küsimused: Kes sa kasutad seda? Mida nad seda kasutada? Mida mu kasutajad hoolivad? Mida nad ei hooli? Sa lihtsalt ei taha teha app ja lase tal lihtsalt kasvada ja saada see hiiglane, kõik tarbivad asi, mida sa ei suuda isegi lõpuni. Sa tahad olla diskreetne eesmärgid ja plaanid ja asjad, mida soovite lahendada. Tee pingutusteta. Kõik see ütleb, põhimõtteliselt oleks lihtne kasutaja seda kasutada; ei tee see hiiglane kämp teksti nagu see slaid on tegelikult. Sa tahad, et see oleks midagi, kui see on väga lihtne, et keegi minna ja teha seda, mida nad tahavad teha. Sa ei taha, et neil navigeerida 5 lehekülge saada oma esmane funktsioon saidile. Kui Google oli 5 lehekülge enne võid isegi otsida midagi, keegi ei kasuta seda. Ja lõpuks, paber prototüüp, fookusgrupi. Kas hea disaini ja testimise tavasid. Lihtsalt, sest sa arvad, et see toimib teie jaoks, ei tähenda, et keegi teine ​​arvab, et see toimib. Aga jah, nii see on. [CS50.TV]