HANNAH Blumberg: Hi everyone. Ne jemi duke shkuar për të marrë filluar vetëm disa minuta në fillim pasi ne kemi një të tërë shumë e materialit të depërtonte. Unë jam Hannah. Unë jam një TF. Maria do të jetë bashkuar na në vetëm disa minuta. Ajo mëson seksionin e drejtë përpara. Unë mësoj drejtë seksion pas, kështu që ne jemi duke shkuar për ta mbajtur atë në orë e gjysmë. Pra, si ju do të shihni këtu, ne kemi mjaft të disa tema ne kemi nevojë për të marrë me, kështu që ne do të shkojnë pak shpejt. Por në qoftë se në çdo pikë të themi diçka shumë shpejt apo ju nuk e kuptoni, të ndjehen të lirë për të ndërprerë me pyetje. Ne duam që të jenë në gjendje për të bërë këtë një shqyrtojë seancë si të dobishme për të gjithë ju të jetë e mundur. Mbresëlënës. Pra, le të kërcej të drejtë në me disa tema që ne në fakt shumë, i mbuluar shkurtimisht për Quiz 0 në seancën e quiz 0. Pra, duke filluar me listat e lidhura. Pra, vetëm sigurohuni që ju keni disa njohuri themelore në lidhje me listat e lidhura dhe janë të rehatshme duke bërë disa operacioneve bazike. Pra, vetëm për të rishikuar, i lidhur Listat janë më mirë se vargjeve sepse ata mund të rritet në mënyrë dinamike. Pra, ne kemi këtë avantazh të madh. Ne kemi parë ato të përdorura në tabelat hash kur ne nuk e di saktësisht se sa gjëra që jeni do të duan për të futur në strukturën e të dhënave tona. Për fat të keq, ne kemi copa të lista e lidhur të gjithë kujtesën, kështu që ne nuk do të jetë domosdoshmërisht në gjendje të bëjë qasje në kohë të vazhdueshme për çdo element në listën e lidhur. Në mënyrë që të gjeni një element të veçantë, ne duhet të iterate gjitha rruga nga fillimi. Pra, mbani në mend se shumica e Operacionet themelore janë omega e 1. Pra, insert është vetëm do të marrë 1. Fshij do të marrë n që nga ne duhet të shkoj të gjetur atë nga lista. Dhe kërko mund të marrë, në më të keq, n. Ne nuk mund të bëjmë diçka si kërko binar në një listë të lidhur pasi ne nuk mund vetëm rastësisht të hidhen në mes. Ftohtë. Mbresëlënës. A pak e oxhaqet. Kjo, përsëri, doli në quiz 0, kështu që ju duhet të jenë super të rehatshme me të. Por për oxhaqet, ne ju kërkojmë për të kujtuar një pirg të tabaka. Dhe ajo do të jetë i pari në, të fundit jashtë. Pra, ne rafte gjërat në pirg, dhe pastaj në qoftë se ne jemi duke u përpjekur për të marrë diçka off-- që ne e quajmë popping jashtë stack-- kemi ardhur pjesa e sipërme. Dhe në qoftë se ne duam të vënë diçka në rafte, ne e quajmë atë shtyjnë. Pra, ajo është gjithmonë do të jetë në rritje deri nga thellësia si një pirg e tabaka. Mbresëlënës. Ne kemi zbatuar oxhaqet parë me të dy listat e lidhura dhe vargjeve. Nëse jeni të zbatimit me vargjeve, ju doni për t'u siguruar që të mbajnë gjurmët e të dyja përmasat dhe kapaciteti. Pra, madhësia do të jetë aktuale numër i gjërave në rafte tuaj, ndërsa kapaciteti është numri i përgjithshëm të gjërave që ju mund të ruajë në rafte tuaj. Ftohtë. Shumë të ngjashme, ne kemi rradhë. Në këtë rast, në vend të të menduarit në lidhje një pirg e tabaka, mendojnë për një linjë. Kjo do të jetë i pari në, së pari jashtë. Pra, nëse ju jeni rreshtuar për diçka në dyqan, ne shpresojmë se personi i parë në Linja do të jenë të ndihmuar së pari. Në vend të thënë shtytje dhe pop si të bëjmë për rafte, ne vetëm themi enqueue dhe dequeue. Dhe përsëri, në qoftë se ju jeni zbatimin e kjo me një grup, ne kemi nevojë për të mbajtur nën kontroll e jo vetëm madhësinë dhe kapaciteti, por edhe koka, që do të jetë e përparme e radhë sonë. Ftohtë. Çdo pyetje në ndonjë nga se? Mbresëlënës. Moving drejtë së bashku. OK, tavolina hash. Ja ku ai fillon të të marrë me të vërtetë interesante. Pra, një tabelë hash është një zbatim e një grup asociative. Pra, në thelb ajo që ka ndodhur po ne kemi gjithë këtë kontribut, dhe ne ju japim atë në një hash funksion i cili thotë: OK, kjo është ajo ku në tabelë hash ajo i përket. Kështu funksion të thjeshtë hash që ne kemi parë është vetëm duke thënë: OK, mendoj që ne duam të vënë vargjet në tryezën tonë hash. Dhe një ide të vërtetë të thjeshtë mund të jetë për të thënë, OK, le të vetëm të lloj nga Letra e parë e fjalës. Kështu që ju mund të shihni këtu, kemi marrë banane, ne kemi vënë atë nëpërmjet një funksion hash, dhe ai thotë, hej, se duhet të shkojnë në indeksin 1. Pra, ne mund të thelb të mendoj për një hash tavolinë si një bandë e kova të ndryshme. Dhe secili prej këtyre kova po shkon për të mbajtur kokën e një listë të lidhura. Dhe në këtë listë të lidhura është ku ne mund të në fakt të vënë pjesë të ndryshme të të dhënave. Pra, zhytje pak më shumë në një funksion hash, këtu është shembulli I vetëm përshkroi ku ne vetëm të thonë: OK, të marrë shkronjën e parë i fjalës dhe ne jemi duke shkuar për të zgjidhur atë në kova. Pra me sa duket, nuk do të jetë 26 kova, një për çdo letër e alfabetit. Pse nuk është ky një funksion i madh hash? Çfarë e bën këtë jo-ideal? Po. Audienca: Ju do të jeni të ketë goditjet. HANNAH Blumberg: Po, pikërisht. Ju jeni do të ketë goditjet. Pra, kjo është një gjë. Dhe ne do të flasim rreth asaj se si ne mund të fix goditjet në vetëm një të dytë. Një tjetër problem me këtë Funksioni i veçantë hash është se ndryshe ynë kova do të jetë madhësive të mjaft në mënyrë drastike të ndryshme. Ne e dimë se ka një tërësi shumë më shumë fjalë që fillojnë me A se X, kështu që ne do të kemi shumë kova pabalancuar në tryezën tonë hash. Ftohtë. Pra, vërtet, le të kthehemi në pika e përplasjeve. Çfarë të bëjmë nëse ka një përplasje? Ne kemi një çift opsione të ndryshme. Pra, një, kështu që mendoj që ne jemi duke u përpjekur për të vënë kokrra të kuqe në tryezën tonë hash. Dhe ne shohim, oh, ne duam për ta vënë atë në listën 1, por banane tashmë jeton atje. Çfarë do të shkojmë për të bërë? Ne kemi dy opsione kryesore. Numër një është që ne mund të themi, OK, nuk ka vend në indeksin 1, por le të vetëm të vazhdoni të kërkoni përmes deri sa ne mund të gjeni një tjetër vend të hapur. Pra, ne do të themi, OK, le të vënë atë në vend të 3. Kjo është një opsion. Kjo është quajtur linear probing. Dhe një opsion i dytë është duke thënë, OK, mirë, le të vetëm të bëjë secili prej këtyre kova të jenë krerët e listave të lidhura. Dhe kjo është në rregull në qoftë se ka më shumë se një gjë në një kovë. Ne jemi vetëm duke shkuar për append atë mbi pjesën e përparme. Kështu që këtu ju mund të shihni, OK, kur futet Berry, ne vetëm mori banane, lloj i e shtyu atë mbi pak dhe hodhi një kokrra të kuqe në atje. Dhe kjo është gjithashtu krejtësisht në rregull. Kjo quhet chaining veçantë. Ju mund të mendoj për këtë si lloj i si një grup i krerëve të listave të lidhura. Çdo pyetje mbi hash tavolina, funksionet hash? Mbresëlënës. Pemë dhe mundohet. Pra, një pemë është çdo lloj e strukturës së të dhënave në të cilën ka disa lloj e hierarkisë ose disa lloj të rangut të objekteve tuaja të ndryshme. Dhe kjo do të bëhet super qartë kur ne shohim një shembull. Dhe ne pamë tentativa bashku me tavolina hash, në pset5-- e cila, përsëri, lojë krejtësisht të ndershme për këtë quiz-- si një tjetër dhënave struktura që ne mund dyqan gjëra të ndryshme. Ne rastin e fjalor, ne ruhet një bandë e fjalëve. Pra, le të marrin një vështrim në disa pemë. Pra, ky është një shembull i një pemë. Ajo ka një lloj strukture, kjo strukturë hierarkike, ku ju mund të shihni se kjo 1 nyje në krye ka një lloj të rangut të lart 2 dhe 3, të cilat janë më sipër 4, 5, 6 dhe 7, të cilat janë mbi 8 dhe 9. Pra, kjo është e gjitha ne do të thotë nga një pemë, kështu që ju mund vetëm lloj e kjo foto në kokën tuaj. Tani, ne kemi një çift të Pemët më të specializuara. Pra, një shembull është një pemë binare. Dhe një pemë binare është, përsëri, vetëm do të jetë një strukturë e të dhënave me një lloj të hierarki, por secili prej nyjeve mund të ketë më së shumti dy fëmijë. Kjo është ku fjala binar vjen nga. Pra, ky është një shembull i një pemë binare. Pra, kjo është një kategori e vogël e pemëve. Tani le të merrni edhe më specifike dhe flasim për kërkimin binar binar trees-- pemëve, në vend. Kështu që këtu ideja është jo vetëm që e bën çdo nyje kanë në shumicën e dy fëmijëve, por të gjithë fëmijët në e majtë do të jetë më i vogël dhe të gjithë fëmijët në e drejta do të jetë më e madhe. Pra njoftim vetëm tonë pemë binare, ka nuk ka marrëdhënie ndërmjet numrave. Por, në kërkimin tonë binar dru, ne shohim, OK, këtu është 44. Dhe çdo numër në të majtë të 44 është çdo gjë më të vogla dhe në të djathtë është më e madhe. Dhe që mban në çdo Niveli i pemës. Kështu që këtu, ky është më i vogël se 22 dhe kjo është më e madhe se 22. Dhe kjo është pema e kërkimit binare. Pse ne mendojmë se është quajtur një pemë binare e kërkimit? Çfarë algorithm e bën atë të ju kujtoj të? Audienca: kërko Binary. HANNAH Blumberg: kërko Binary. Sepse në qoftë se ju jeni në kërkim për një Numri i veçantë në këtë pemë, në çdo pikë, ju vetëm mund të trokas gjysma off nga pema, e cila është e madhe. Dhe kështu që do të na japë diçka që duket shumë si kërkim binar. Ndonje pyetje? Të gjithë të drejtë, të ftohtë. Të gjithë të drejtë, përpiqet. Gjithkush e preferuar. Pra, ky është shembulli që ne kemi parë një bandë në klasë. Dhe përsëri, kjo është vetëm një tjetër mënyrë që ne mund të ruajë të dhënat. Në rastin e fjalor, përsëri, kjo është vetëm do të jetë vargjet. Pra, le të shohim se çfarë kjo në fakt duket si në një nivel pak më të ulët. Pra, le të marrin një vështrim në një nyje në një Trie. Dhe ne shohim, OK, nuk po ndodh të jetë një Boolean dhe një nyje, një tregues për një nyje. Dhe ne shohim se Boolean quhet is_word. Pra, në thelb, kjo është do të korrespondojnë këtyre trekëndëshat të vogla të cilat thotë se, në qoftë se ju keni marrë këtu, ju keni gjetur një fjalë të plotë. Ne e dimë se "Turing" mbi këtu është një fjalë e plotë, ndërsa vetëm T-U-R nuk është një fjalë sepse ne nuk shohim se Delta pak. Dhe kjo delta pak, përsëri, korrespondon me këtë is_word, kjo is_word Boolean. Dhe pastaj ne kemi një grup të fëmijëve. Pra, në çdo nivel, ju kanë një nyje të veçantë, dhe që pikat nyje në një grup i tërë alfabetit. Kështu që ju mund të shihni, përsëri, në këtë picture-- Jam do të mbajë hedhur prapa dhe forth-- se kjo grup në krye ka një bandë e ndryshme nyjet vijnë off of it. Ajo ka 26, ose 27 nëse doni për të përfshirë një karakter ekstra. Dhe kjo na jep një mënyrë për të ruajtur të dhënat tona në një mënyrë që mund të shikohen në që ju mund të kërkoni super të shpejtë. Çfarë është lookup koha për një Trie? Audienca: [padëgjueshme]. HANNAH Blumberg: Po. Në teori, kjo është koha konstante. Kjo vetëm do të jetë madhësia e fjala që ju doni të kërkoni. Edhe në qoftë se ne shtoni një miliona më shumë fjalë për Trie tonë, kjo nuk do të na më gjatë për të përcaktuar në qoftë se një fjalë e dhënë është në Trie. Pra, kjo është vërtetë e bukur. Audienca: A ju vetëm nisja se array? Keni humbur një pikë ose dy. Vetëm mund të flasim për se për një të dytë? HANNAH Blumberg: Sigurisht, absolutisht. Pyetje e mirë. Pyetja ishte, ne kanë një rrjet që është do të ketë yll nyje si në krahasim me vetëm nyje, e drejtë? Ftohtë. Kështu që këtu ajo që ne jemi duke thënë është array tonë është vetëm do të jetë pointers në vargjeve të tjera. Pra, kjo është essentially-- atë lloj ndjehet si një listë e lidhur në këtë mënyrë ku secili prej këtyre fëmijëve vetëm pikë në nyjen e ardhshëm. Dhe mënyra që ne në fakt të përcaktojë, hej, OK, ne kemi përsëritur përmes një të tërë Fjala, është kjo fjalë në fjalor, ne vetëm kontrolluar këtë is_word. Pyetje e madhe. Po. Audienca: OK. Pra, çfarë ishte runtime për Trie? HANNAH Blumberg: Sigurisht. Pra, në kohën e duhur për një Trie për lookup do të jetë kohë konstante. Pra, kjo është vetëm do të jetë Numri i shkronjave në fjalë. Kjo nuk është e varur mbi Madhësia e fjalor ose madhësia e strukturës së të dhënave. Kështu që këtu është një shembull i thjeshtë pak. Në këtë rast, ju mund të shihni se fjala bat është në fjalor dhe ju keni zoom, por ju nuk kanë diçka si kopshtin zoologjik. Si do ta bëjmë kopsht zoologjik? Si nuk kemi të shtoni kopsht zoologjik në tonë fjalor, të Trie tonë? Po. Audienca: Bëni is_word e vërtetë për [e padëgjueshme]. HANNAH Blumberg: Mirë. Pra, ne do të themi Z-O-O, dhe pastaj ne do të dëshironi të kontrolloni jashtë atë kuti si. I madh. Le të krahasojmë shumë pak kohë përpiqet kundrejt tavolina hash. Mundohet janë me të vërtetë e madhe sepse, siç kemi thënë, ato ofrojnë në kohë konstante lookup. Por disavantazhi i madh është se ata janë humongous. Ju mund të merrni kuptim, edhe duke shikuar në të, se ajo do të marrë një sasi të madhe të kujtesës. Pra, ata do të jetë shumë më e madhe se tavolina hash, por ata do të japin na kohët shumë më të shpejtë lookup. Pra, kjo është lloj i juaj tradeoff, çfarë ju intereson, nëse kjo është shpejtësi apo kujtesës. Çdo pyetje në ndonjë nga se, të gjitha strukturave të C dhënave. Bukur. NE RREGULL. Ne jemi duke shkuar për të lëvizur për pak bit e zhvillimin e web me Maria. MARIA ZLATKOVA: bukuroshe. NE RREGULL. HANNAH Blumberg: Ju mund të përdorni laptop tim. MARIA ZLATKOVA: Bukur. OK, i ftohtë. Si ne shkojmë tani në web zhvillimit, ne biseduam pak në lidhje me ndryshimin e lejeve e dosjeve dhe directories në mënyrë që ato mund të jenë të arritshme përdoruesve të tjerë, në botë, dhe kështu që ne mund të shohim se si në thelb ne mund të përcjellë ato kur ne zhvillojmë gjëra të tilla si faqet e internetit se ne kemi qenë kryesisht duke bërë. Pra, ne pamë komandën chmod, cila është mënyra ndryshim, në thelb. Kjo është një komandë Linux dhe ajo ndryshon drejtat e hyrjes e objekteve skedar të sistemit. Dhe një objekt skedar sistemi është vetëm një directory, një fotografi, çdo gjë që ju mund të të ndryshojë lejet e. Pra, për të parë lejet fotografi, ne shkruani komandën ls, listë, -L. Dhe kur shkruani se, ne zakonisht shoh disa leje që duken lloj i si kjo para një emër directory. Pra, d referohet directory. Dhe pastaj ne kemi tre triads që në thelb referohen lejet e as një përdorues, një grup, apo bota. Llojet e lejeve që ne mund kanë për këto tri grupe të njerëzve janë ose r për të lexuar, w për shkruaj, dhe x për të ekzekutuar. Dhe ne mund të kemi ato për grupi dhe bota si. Gjë e ndërlikuar është se ndonjëherë kur shtypni komandën chmod, ne do të shkruani disa numrin që përbëhej nga tre bit. Pra, ne mund të bëjmë si 777 dhe që në thelb referuar vlerën e shtuar e secilit prej këtyre triads për shkak r do referohen 4, w do referohen 2, dhe x do referohen 1, kështu që kur shtuar lart, secila nga numrat do të zbresë në një numër kumulative në një vlerë kumulative midis 0 dhe 7. Pra, ne mund të kemi 0 për asnjë leje fare. Dhe që në thelb do të na japë lejet për të dyja përdoruesit, grupi, apo bota. Çdo pyetje mbi këtë deri më tani? Audienca: Ju thatë lexuar ishte 4? MARIA ZLATKOVA: Po. Audienca: [padëgjueshme]. HANNAH Blumberg: Yup. Audienca: Dhe pastaj duke shtuar të gjithë atyre të tjerët do të tregojnë numrin tuaj. MARIA ZLATKOVA: Po. Po. Këto janë pyetje të mëdha. Bukuroshe. Tjetra, ne u hodh në HTML dhe një pak më shumë në lidhje me zhvillimin e web. Pra HTML thjesht do të thotë HyperText Markup Language. Dhe kjo është markup gjuhë që është një standard se ajo është përdorur për të krijuar faqe web. Është quajtur një gjuhë markup për shkak se ajo nuk është përpiluar në fakt. Ajo nuk thotë se si disa kod duhet të ekzekutohet ose diçka të tillë. Ajo vetëm përcakton dhe përshkruan se si një web faqe duhet të jetë ngritur me secilën prej elementeve të tij dhe se si ata duhet të shikoni për përdoruesit. Disa nga HTML tags që ne shkoi janë në vijim. Të gjitha dokumentet tona HTML filloi me html DOCTYPE. Atëherë ne gjithmonë kemi tag html. Ne kemi një kokë dhe një trup. Dhe është e rëndësishme që HTML ka kjo lloj strukture mbivendosur sepse kjo është shumë e qartë. Dhe atëherë bëhet shumë e qartë, kur ne nevojë për të hapur dhe në fakt tags ngushta. Dhe ne gjithmonë nevojë për të mbyllur tags që ne i kemi hapur. Dhe këtu kemi disa nga llojet i gjërave përpara se ne duam të kemi. Pra, ne kemi, për shembull, titulli i CS50. Dhe pastaj ne fakt mund të lidhë një fletë stil që përcakton se si ne stil faqen tonë të internetit. Kjo është CSS. Ne jemi duke shkuar për të shkuar mbi atë në Çifti i ardhshëm i slides si. Brenda trupit, ne kemi vendosur disa klasa dhe ID. Dhe si një kujtim, përsëri, ID janë unike dhe klasa mund të caktohet në objekte të shumta. Dhe kjo vetëm do të thotë se ne mund të përdorim klasa dhe kartat e identitetit brenda structures-- të tjera në mënyrë, për shembull, brenda dosjeve CSS apo stil sheets-- për t'iu referuar elementeve të veçanta dhe në thelb thonë se ne duam të stilit ose hartuar disa elemente në një farë mënyre të veçantë. Dhe ne i referohemi atyre nga ID dhe klasat e tyre. Dhe ne gjithashtu mund t'i referohet gjëra të ndryshme nga tags, si dhe, por ID dhe klasa vetëm na japin disa shkathtësi dhe çfarë konkretisht ne duan për t'iu referuar. Pra, vetëm një shembull. Ne mund të, përsëri, brenda një skedar CSS ku ne duan të përcaktojë disa style-- kështu ngjyra, fonts, dhe stuff like that-- mundemi përcaktojnë stilin për një trup. Kështu që do të përcaktojë atë për të gjithë tag trupit. Por pastaj ne gjithashtu mund të përcaktojë një stil për një #title. Dhe përsëri, hashtag referohet tonë ID dhe dot referohet klasën tonë. Dhe pastaj për .info, ne mund të rregulloni disa atribute. Dhe përsëri, kur ne të kthehemi, ne kishim tonë klasë të quajtur info dhe titulli ynë ID. Dhe ne mund të shohim se ne i referohemi atyre nga #title dhe .info. Audienca: A do të thoshit hashtag [? miratojnë mua? ?] MARIA ZLATKOVA: Na vjen keq? Audienca: A do të thoshit hashtag [? miratojnë mua? ?] MARIA ZLATKOVA: hashtag do të thotë ID, kështu #title i referohet çfarëdo elementeve kanë këtë ID quajtur titullin. Dhe pastaj dot referohet një klasë. Pra, .info referohet këtij elementi sepse ajo ka info të klasës. Yup. Audienca: Pse ju dallojë ato në HTML? Pse thua gjëra të caktuara janë ID dhe disa gjëra janë të klasës? MARIA ZLATKOVA: Kjo është vetëm deri në ju, duke filluar HANNAH Blumberg: Përsëriteni pyetje. MARIA ZLATKOVA: Oh, sorry. Pse ne dallojmë elemente të caktuara si kartat e identitetit dhe elemente të tjera si klasa? Kjo është vetëm për shkak se është me të vërtetë shpesh një zgjedhje të projektimit. Kjo ju jep një shumë të Shkathtësi në të qenit në gjendje të thonë se unë dua këtë artikull të veçantë të ketë këtë ID sepse ata duan për të bërë shumë gjëra me atë, dhe unë vetëm duan për të përcaktuar një stil, stil të caktuar ose ngjyrë çfarëdo për këtë artikull. Dhe mënyra për ta bërë këtë është vetëm duke i dhënë asaj një ID. Dhe pastaj në qoftë se unë dua që të ketë një çift i artikujve të ndryshme duke pasur që, në vend të shkuar dhe vendosjen their-- në vend të bërë atë me tag sepse tag do vendosur në qelizë për të gjithë tag për çdo kohë që tag është përdorur, ju mund të vendosni një klasë për objekte të shumta. Dhe pastaj vetëm hyni në atë klasë dhe të thonë Unë dua të stilit kjo klasë në këtë mënyrë. Dhe përsëri, klasa mund të të jenë artikuj të shumta të ndryshme dhe ID duhet të jetë unike. Pyetjet e Madhe. Ndonjë pyetje të tjera? OK, i tmerrshëm. Përsëri, kjo është se si këto përzgjedhësit janë të cekura në CSS, me hashtag, me dot, ose pa ndonjë gjë për caktimin e stilin e disa tag, si trup. Dhe këtu kemi të përgjithshme Sintaksa se si kjo është bërë. Për të përsëritur disa më të mirë praktikat për HTML dhe CSS, ne kemi nevojë për të, përsëri, në afërsi të gjithë tags HTML që ne të hapur. Dhe ajo që ne ju rekomanduar të bëjë për projektet tuaja finale, si dhe për CS50 Financave, është për të bërë Sigurohuni që të gjitha të HTML tuaj të vlefshëm. Dhe kjo është bërë me W3 Validator. Dhe pastaj çfarë kemi bërë dhe ajo që ne rekomandojmë bërë ndan stil, kështu që CSS nga Markup HTML. Pra, çdo gjë që ka të bëjë me mënyrën se si faqe juaj do të shikojmë me sy dhe se si ajo do të modifikohen duhet të shkoni në një dokument CSS. Dhe pastaj markup tuaj duke thënë se si gjërat janë në lidhje me njëri-tjetrin është HTML, dhe se duhet të shkoni në brendësi e dokumenteve tuaja HTML. Ndonje pyetje? MHM. Audienca: çfarë saktësisht po ndodh në me faqe vlefshmërinë kur ne jemi Vleresimin HTML që [e padëgjueshme] krijuar? MARIA ZLATKOVA: Pra what-- mendoj se ju. Pra, çfarë saktësisht po ndodh më me faqe vlefshmërinë dhe pse nuk kemi nevojë për të bërë këtë? Në thelb, ne duhet të bëjmë që sepse shumë herë, browser-i juaj, nëse ju nuk mbyllni një tag ose diçka të tillë, shfletuesi juaj është ende do të bëjnë një faqe dhe mund të vazhdojnë të punojnë, por është praktikë e mirë për të siguruar që ju keni, përsëri, i mbyllur të gjitha tags tuaj, se të gjitha elementet tuaja janë mënyra se si ata duhet të jenë, dhe në thelb se kjo është nga konventat që janë caktuar. Kjo është, përsëri, vetëm një gjë që ju duhet të mësuarit për të bërë, në krahasim me të paturit Kodi sloppier dhe stuff like that. Po. Oh me falni. Mendova se ishin ngritur dorën tuaj. Audienca: Jo, unë kam qenë vetëm [e padëgjueshme]. MARIA ZLATKOVA: OK. Audienca: Ju faleminderit. MARIA ZLATKOVA: Sigurisht, ju falenderoj. Pra, përsëri, duke shkuar në në si informacioni është transferuar dhe modelet e komunikimit për të transferuar informacion. TCP / IP. TCP thjesht do të thotë Transmisionit Protokolli i kontrollit dhe IP i referohet Internet Protocol. Dhe kjo vetëm i referohet të dhënat mënyrë është dorëzuar. Në qoftë se ne kemi disa të dhëna që duhet të dorëzohet për ju, duke filluar kështu keni bërë një kërkesë për një server të caktuar. Për shembull, kur ne të përpiqet për të hyrë në cs50.net, kemi bërë një kërkesë për server CS50 dhe ne shihni se ne duam që të merrni ky lloj informacioni. Dhe pastaj janë të bazuara në këtë protokoll për mënyrën se si është dorëzuar ky informacion, server jep informacion kthehet tek ne, klienti. Dhe pastaj ne jemi në gjendje për të parë informacioni për faqe dhe pastaj e përdorin atë. Pra, atëherë Hypertext Transfer Protocol është vetëm një tjetër protokoll ose vendosur i konventave që përcakton se si shfletuesin web dhe web server duhet të komunikojë. Dhe duke i vënë këtë të gjithë së bashku, HTTP, përsëri, vetëm përcakton se si ky HyperText përcaktuar nga HTML që ne kemi qenë duke punuar atë, se si duhet të dorëzohet për ju dhe si se të dhënat që është dorëzuar për ju merr për ju. Dhe kjo është arsyeja pse, në qoftë se ju djema mbani mend nga një klasë, kemi pasur një shumë të kërkesave dhe kemi pasur një shumë të sintaksës për këto kërkesa se ne jemi do të shkoj për tani. Pra, përsëri, kur ne kemi dërguar një kërkesë në një server, ne kemi për të përcaktuar disa gjëra. Pra, ne kemi nevojë për të gjetur llojin e kërkesës që ne jemi vendosjen. Dhe përsëri, ne kemi, për shembull, GET është një lloj metode që ne kemi në kërkesën tonë. Dhe pastaj HTTP / 1.1 është vetëm protokoll që ne jemi duke përdorur aktualisht. Shumica e kohës, kjo do të protokollit që ne jemi duke përdorur. Pra, nëse ju keni një pyetje si kjo në quiz tuaj. Kjo është konventat që ne kemi deri më tani. Backslash referohet çfarë lloj e gjërave që ne jemi duke kërkuar. Pastaj, host tonë është, për shembull, në këtë rast, ne jemi duke u përpjekur për të shkuar në google.com. Pra, kjo është vlera për një host. Ky është një lloj i kërkesës që mund të dërgohen. Dhe pastaj një lloj i reagimit që mund të të dërgohen, përsëri, në bazë të këtij protokolli, është përsëri, HTTP / 1.1. Pra, kjo është HTTP versioni përsëri. 200 OK është vetëm kodi statusit. Dhe kjo OK është vetëm një frazë bazuar në këtë kod statusit. Dhe pastaj Content-Type referohet llojit që është kthyer për ju që është për këtë web faqe që ju merrni dhe se shfletuesin tënd mund të bëjnë më pas. Dhe kjo është teksti / html. Audienca: Çfarë do të thotë 1.1? MARIA ZLATKOVA: Kjo është vetëm version of-- oh, çfarë do të thotë 1.1? Kjo është vetëm versioni, HTTP version i një protokolli që jeni duke përdorur. Pyetje e madhe. Pyetje të tjera? Audienca: A mund të përmbledhur Content-Type shpejtë e vërtetë? MARIA ZLATKOVA: Kështu që është ajo server. lloji i information-- atë që është e tipi i përmbajtjes ishte pyetjet. Kështu që ishte lloji i Informacioni që ju të merrni përsëri nga serveri, llojin e të dhënat që shfletuesi mund pastaj bëjnë që ju jeni duke përdorur. Audienca: Është se ajo që kjo protokoll është e thënë që ju të bëni? MARIA ZLATKOVA: Na vjen keq? Audienca: Është se ajo që thonë protokolli? MARIA ZLATKOVA: The protocol-- Audienca: --what Content-Type është ose what-- MARIA ZLATKOVA: Protokolli është i bazuar on-- çfarë është protokolli thënë ju? Kjo është vetëm mënyrë se ky informacion ishte dorëzuar për ju bazuar se çfarë lloj të protokollit u mori këtë informacion dorëzuar përsëri tek ju. A atë kuptim lloj? HANNAH Blumberg: Ju mund të mendoj e protokollit si a-- unë mendoj Profesor Malan përshkroi atë në klasë, si lloj i si a-- është si ekuivalentin e shtrëngimet e duarve të njeriut. Thuaj, si, hej, unë jam një kërkesë dhe unë e di se si të trajtojë HTTP e versionit 1.1. Dhe pastaj server thotë: oh, OK, I-- dhe të dyja ekzistojnë. Unë gjithashtu e di se si të merren me HTTP / 1.1. Dhe unë jam duke shkuar për të dhënë ju mbështetur disa përmbajtje. Në këtë rast, ajo do të jetë i tipit text / html. Pra, kjo është lloj i vetëm një mënyrë prej tyre për communicating-- MARIA ZLATKOVA: Është vetëm duke konfirmuar se ju jeni të dy pas të njëjtën gjë protokoll dhe që të dy klienti dhe server-- kështu shfletuesi juaj dhe server-- lloj i di atë që ju jeni duke folur rreth dhe kanë konventa për kalimin në të dhënat. Audienca: Pra Content-Type part-- teksti Content-Type / html-- kjo është një pjesë e veçantë e të njëjtin mesazh? Apo është pjesë e le të themi, 200? A 200 Tregoni atyre se ose is-- MARIA ZLATKOVA: 200 thotë se të gjithë shkuan në rregull. Dhe pastaj lloj përmbajtje është lloj i një pjesë e veçantë e të njëjtin mesazh, dhe duke thënë gjë që unë riatdhesuar ka këtë lloj tekst / html. Është vetëm duke i dhënë më shumë informacion. Kanë ndonjë gjë për të shtuar? NE RREGULL. Çdo pyetje të tjera në këtë? Mbresëlënës. Kështu që disa HTTP statuset e tjera që ne mund të marrë përveç 200 OK, ato që ne kemi parë ndoshta ndoshta shumë janë 403 dhe 404. Pra 404, në qoftë se ju ishin duke u përpjekur për të Qasje diçka që nuk ekziston. Kështu për shembull, në tuaj Psets CS50 Financave, në qoftë se ju kishte qenë i bërë quote.html dhe ju nuk keni se fotografi, por në vend të kësaj ju kishte quote.php, që do të rezultojë në një 404 Not Found sepse skedari mund të mos ekzistojë. Për një 403 të ndaluara, që i referohet lejeve. Pra, në qoftë se disa skedari nuk është i lexueshëm nga bota, ju mund të merrni një 403 kthye. Disa të tjerë që ju mund të get-- 301, u vendos përgjithmonë; 302, Gjetur; 304, modifikuar; 400, Kërkesë Bad; dhe Gabim Server pastaj i brendshëm për 500 dhe 503, Shërbimi i padisponueshëm. Po. Audienca: A do të pritet të mësuar përmendësh të gjitha ato statuse? MARIA ZLATKOVA: Unë do të ketë ato në fletë mashtrojnë tuaj. [Qeshura] Audienca: A jemi pritet të e di se çfarë shkakton secilin? MARIA ZLATKOVA: A janë ata? HANNAH Blumberg: për ato që ne i kemi drejtuar into-- Pra, pyetja was-- MARIA ZLATKOVA: A janë ata pritet të e di se çfarë secili prej këtyre statusit Kodet mund të jetë shkaktuar nga? Pra, për ato që kemi përdorur dhe vrapoi në, unë do të thoja, po. Pra, ne kemi parë patjetër 200 OK dhe leksione atë në psets. Ne kemi parë 403, 404. Për ato të tjera? HANNAH Blumberg: Unë do të thonë se 500 duket lojë të ndershme. MARIA ZLATKOVA: 500, po. HANNAH Blumberg: Po. Vetëm kanë një ndjenjë të përgjithshme e çfarë shkakton ato. Dhe gjithashtu vetëm nga këto emra, ju mund të lloj si të bëjë një hamendësim si për çfarë në fakt ka shkaktuar ato. Për shembull, të shkojë përgjithmonë, ndoshta file u zhvendos përgjithmonë. Audienca: Por në një të mëparshme provimit, ka pasur një mënyrë si mund të na presin për të përgjigjen se? HANNAH Blumberg: Kjo ishte me vlerë zero pikë. Pyetja mbi 418 në ibrik çaji është teknikisht një status HTTP, por ajo ishte me vlerë zero pikë. Natyrisht, ju nuk jeni pritet të dinë ata. Audienca: A është kjo një e vërtetë? HANNAH Blumberg: Kjo është një e vërtetë një, por kjo nuk do të thotë asgjë. Është vetëm një shaka. Njerëzit internetit janë qesharake. MARIA ZLATKOVA: pyetje e Madhe, djema. Ndonjë pyetje të tjera? Audienca: Çfarë është gabim i brendshëm server? MARIA ZLATKOVA: Brendshme gabim server vetëm do të thotë se ju keni qenë paaftë për të komunikuar me serverin për disa arsye. Pra, kjo nuk është domosdoshmërisht diçka që ka të bëjë me klientin ose diçka të tillë. Unë nuk di ndonjë shembull të veçantë se ne kemi shkuar mbi të shpjeguar, por vërtet. HANNAH Blumberg: Sigurisht. Kështu për shembull, si le thonë se ju jeni duke punuar në mashup dhe një server Google zbriti për disa arsye, një ndërprerje të energjisë, le të themi. Kjo do të jetë një server të brendshëm gabim ose disa lloj of-- doja t'ju nuk do të merrni një përgjigje mbrapa. MARIA ZLATKOVA: Po. Kjo është vetëm kur ju jeni paaftë për të komunikuar me serverin për disa arsye sepse e ajo shkon poshtë apo ndonjë arsye tjetër. Pra, duke kërcyer në PHP. PHP, HTML ndryshe, është një gjuhë programimi. Dhe kemi filluar duke e përdorur atë, sepse kjo është shumë e dobishme për zhvillimin e web. Ne së pari e përdorur atë në CS50 Financave. Dhe kjo në thelb na ndihmon të sjellë së bashku këtë Markup, dizajni, dhe se si ne fakt përdorin informacionin për të shfaqur gjërat në një web faqe. Pra, PHP vetvete do të thotë PHP Hypertext Preprocessor, kështu që kjo është një backnorym rekursive në vetvete. Dhe hapjen tags për PHP ne e majta dhe shigjeta e drejtë me pikëpyetje dhe php. Pra, ne kemi parë tashmë një bandë e saj. Tani, ne jemi vetëm duke shkuar për të shkuar mbi disa nga gjërat themelore në lidhje me të. Pra, me PHP, variablit Emrat fillojnë me shenjën e dollarit. Ne nuk e specifikon, përsëri, një variabël të tipit më. Ashtu si ne e bëmë me C, ne nuk kemi nevojë për të bërë këtë. Ne mund të bëjmë një bandë e ndryshme gjëra me variablat. Ne mund të vënë ato së bashku nga concatenating ato me dot simbol, i cili ne nuk mund të bëjmë në C përsëri. Përsëri, ne kemi një shkathtësi pak më shumë me PHP në drejtim të variablave. Përsëri, ne nuk kemi një funksion kryesor. Dhe PHP interpretohet në krahasim me hartuar, Pra, vetëm se si ne e bëjnë për C fotografi, ne nuk kemi për të bërë këtë për PHP. Por më tepër, mënyra se gjuha është drejtuar në vetvete, ajo është interpretuar. Dhe pastaj shtypur lirshëm thjesht do të thotë se ne nuk duhet të specifikoni një ndryshore llojin dhe llojet e ndryshueshme janë kuptuar në kohën e duhur. Audienca: Por çfarë keni them me dot varg? MARIA ZLATKOVA: Sigurisht. Kur ne duam të vënë gjërat together-- kështu që në qoftë se kemi pasur disa ndryshore që kishte vlerën e 3 dhe ne kishim një tjetër variabël që kishte vlerën e vargut, ne mund të vënë variablat së bashku duke vënë një njollë në mes tyre dhe concatenating tyre. Ose ne mund të krijojë një e quajti ndryshueshme dhe e vënë atë së bashku me concatenating dy vargjet. Pra, nëse do të kishim një varg në të dyfishtë kuotat dhe ne kemi vënë një pikë pas saj, dhe pastaj kemi pasur një varg, që do të krijojë një varg krejt. Audienca: OK. MARIA LATVIA: A ishte kjo qartë? Audienca: Po. MARIA ZLATKOVA: OK. Po. Audienca: Kur ju thoni interpretohet sesa hartuar, jeni duke folur për ju nuk e bëni duhet të jetë sa më specifik kur është fjala për PHP kundrejt C? MARIA ZLATKOVA: Kur themi interpretohet në krahasim me hartuar, çfarë ne do të thotë? Kështu që do të thotë se ne nuk kemi nevojë fotografi ekzekutueshme për të kandiduar PHP. Kjo do të thotë se ajo shkon si ajo shkon. A ka kjo kuptim? Pak me shume. HANNAH Blumberg: Pra ju mund të mendoj për një përkthyesi si një tjetër program që është përgjegjës për të shkuar rresht pas rreshti nëpërmjet PHP dhe në fakt e përdorur, në krahasim për hartimin e të gjitha poshtë në binar. Ajo në fakt nuk do të thotë asgjë për mënyrën se si specifike ne duhet të jetë. Ne ende duhet të jetë i saktë, dhe nuk harroni pikëpresje tuaj, dhe sigurohuni ju keni shenjën tuaj dollar, dhe gjëra të tilla si kjo. Pyetje e mirë. MARIA ZLATKOVA: Po. Pra, rresht pas rreshti, si krahasim me me C fotografi, ne duhet të bëjmë të gjithë finale para se ne fakt mund të kandidojë atë. Ky është dallimi kryesor. Por përsëri, ne nuk mund të me të vërtetë të jetë më pak specifik. Pra vargjeve në PHP përfaqësojnë në fakt një hartë urdhëruar. Pra vlerat e vargjeve shok me çelësat. Dy mënyra për të deklaruar një grup, bazuar në këtë sintaksë, ne mund të jetë më i qartë në duke thënë se ne kemi një rrjet dhe ne e kemi këtë key1 që hartave të kjo value1, key2 se harta value2. Ose ne vetëm mund të krijojë një rrjet që përmban vlerat e vetë dhe pastaj çelësat janë kuptohet në një mënyrë. Çdo pyetje mbi këtë? Audienca: Çfarë do të çelësat të jetë në shembullin e dytë? 0, 1, 2, 3? MARIA ZLATKOVA: Për shembull, kjo është vetëm çelësat në këtë nuk shprehin domosdoshmërisht të bëjë një ndryshim. Ata vetëm të përcaktojë se si ju mund të përdorin vlerat në brendësi të saj. Pra, nëse kemi pasur një foreach lak në PHP që do të të na lejojë të kalojnë nëpër të gjitha vlerat, ne mund të kalojnë nëpër të gjitha vlerat, edhe sikur të kishim apo nuk e kishte përcaktuar një çelës të veçantë brenda e faqes Sintaksa mëparshme. Pra, edhe me këtë lloj e grup, ne ende mund të kanë një lak foreach që shkon nëpër çdo e vlerave në kyç në rrjet. Pra, sintaksë e një foreach loop, ne fillojmë me një grup. Kjo variabël $ arr është array ynë aktual që përcaktohet në rrëshqitje mëparshëm si vlerë që fjalë për fjalë shkon me secilin nga vlerat, pa marrë parasysh nëse kemi pasur një çelës apo jo. Dhe pastaj ne mund të bëjmë diçka me vlera brenda lak foreach. Pra, përsëri, nëse do të kishim një grup si kjo këtu created-- kështu që ne kemi çelësin e foo dhe vlerës së bar, çelësi i Bazit dhe vlera e qux-- ne mund të kemi një lak foreach që kalon nëpër rrjet, si vlera kyçe dhe pastaj të bëjë diçka me çelësin dhe / ose vlerë. Por ne nuk domosdoshmërisht gjithmonë duhet të ketë një foreach sythe që kalon nëpër rrjet si hartë kyç në vlerë. Ne mund të shkojnë nëpër array foreach loop si vlerë. HANNAH Blumberg: Dhe unë mendoj to-- ishte pyetja juaj, çfarë është indeksi i nënkuptuar? Audienca: Kinda. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Po, po. Pra, në thelb, në qoftë se ju nuk e specifikoni një kyç, ajo do të jetë 01. MARIA ZLATKOVA: Po. Ashtu si me C, është zero indeksuar në qoftë se ju nuk e specifikoni një çelës. Audienca: Më vjen keq. A mund të provoni duke folur pak louder? Unë jam ka një grimë të vogël e probleme dëgjimi gjithçka. MARIA ZLATKOVA: Unë jam aq i keq. Po, natyrisht. Pra, ju doni për mua për të shkuar mbi këtë përsëri? Apo është this-- Audienca: Pra, në slide-- mëparshme nëse ju mund të shkoni vetëm mbrapa për një sekondë. MARIA ZLATKOVA: Sigurisht, më vjen keq. Audienca: Pra dytë array këtu nuk ka duket se kanë një vlerë të kyç, dicka e tille [? causation. ?] MARIA ZLATKOVA: E drejta, e drejtë. Audienca: Pra, si e bën atë punë kur ju thonë se kjo është e gjitha ose asnjë. Për mua, që duket si një [? foo?] tashmë. MARIA ZLATKOVA: Po, po. Pra, përsëri, kjo është një Harta urdhëroi në këtë kuptim se nuk janë kuptuar, për shembull, indekset ketu mund të kuptohet si 0, 1, 2, 3. Përsëri, kjo është të paturit e ata Indekset është ekuivalente ynë e të pasurit çelësat planifikuara mbi vlerat. Pra, nëse çelësi jonë ishte 0-- keq. HANNAH Blumberg: Jo, Ka shkruaj këtu. Është vërtetë me të vërtetë e bukur. MARIA ZLATKOVA: Kjo është e madhe. NE RREGULL. Pra, përsëri, $ arr 0 do të jetë çelësi për vlerën 1. 0 do të jetë kyç për vlerën 1. Audienca: Më vjen keq. Është e padukshme. HANNAH Blumberg: Në rregull, Nevermind. Shkumës ishte një ide e keqe. Unë të marrë atë përsëri. Ju mund të mendoj për çelësat si 0 hartave me vlerën 1. MARIA ZLATKOVA: Po. Kështu që kjo eshte 0, kjo eshte 1, 2, 3. Këto mund të jenë çelësat tuaj. Ju mund të mendoj për ato as-- vërtet. Pra, në vend që çelësat qarta, ata janë lloj i kuptuar si indekset duke filluar nga 0. Shkumësi nuk e ka ndihmuar. Po. Audienca: Për lak foreach, në qoftë se ne të kërkuar për të parë si vlerë, ajo vetëm do indeks automatikisht me 0? MARIA ZLATKOVA: Po. Ajo do të kalojnë nëpër secilën prej vlerave. Audienca: [padëgjueshme] si 0 apo do që vetëm të bëjë 0? MARIA ZLATKOVA: Ju do të keni për të thënë si shenjë e dollarit dhe pastaj disa Emri ndryshueshme, vlera. Audienca: [padëgjueshme]. MARIA ZLATKOVA: Na vjen keq? Audienca: Na vjen keq, unë jam vetëm duke u përpjekur për të kujtuar. Si do ta bëni këtë në qoftë se ju mund ta bëjë këtë automatikisht indeksimit është vetëm 0 e? MARIA ZLATKOVA: Pra, si do ta bëni këtë në qoftë se ju nuk keni emra të veçanta të rëndësishme? Audienca: Po. MARIA ZLATKOVA: Ju vetëm do të define-- them vetëm veten si një emër. Pra, në psets tuaj, ju djema fuqi mos harroni rresht foreach $ sa $ rreshtave, kemi krijuar ourself këtë rreshtin $ thënë ne duam të shkojnë nëpër rresht si $ rreshta. Edhe pse ne nuk kemi kjo $ qartë rreshtave të përcaktuara, ne mund të shkoni vetëm dhe thonë se kjo mund të jetë çelësi jonë, dhe vetëm të shkojnë me secilin nga vlerat. Audienca: Pra, është vlera e një variabël i ri ne jemi duke krijuar për të ruajtur [e padëgjueshme]? MARIA ZLATKOVA: Pra, nuk është në thelb një variabël i ri. Kjo është një variabël që i referohet brenda e vektorit te secilit prej tyre. HANNAH Blumberg: Është e një emër i ri variabël. MARIA ZLATKOVA: Po, kjo është një emër i ri ndryshueshme, por kjo nuk është inherently-- vërtet. Është vetëm një variabël i ri që ju mund të bëni atë. Pra, vetëm sa bëjmë ne e bëmë $ rresht si $ rreshta, rreshtat ishte një emër të ri ndryshueshme që ne mund të krijojë në lak foreach tonë. Ajo nuk duhet të preexist para kësaj. Audienca: A mund të shkoni nëpër logjikë për secilin, duke përdorur shembullin atje? MARIA ZLATKOVA: MHM. Oh me falni. Ja shembulli. I sigurt. Pra, për çdo array-- kështu kjo do të thotë të shkojnë në këtë grup si çelës value-- që po ndodh të kalojnë nëpër këtë rrjet dhe i pari shkoni dhe të merrni foo, The foo kyç dhe bar vlera. Dhe pastaj në të dytë përsëritje e për lak, ajo do të shkojë nëpër dhe për të marrë Baz kyç dhe qux vlera. Dhe pastaj ju mund të bëni diçka me secilës prej tyre ose të dy prej tyre. Audienca: Pra, ideja prapa të paturit e një pikë kyçe për vlerën, çfarë ju të përfundojë qasjen? MARIA ZLATKOVA: Cila është ideja të paturit e një duke treguar çelësi i vlerësojnë? Kjo është vetëm një konventë, një tjetër mënyrë për të shkuar nëpër rrjet dhe duke qenë në gjendje për të hyrë as kyç ose vlera ose të dy dhe përdorimin e tyre. Audienca: Cili është roli për të urdhërojë që foreach shkon në? Pra, nëse ne ishim të shtuar Elementet në grup më vonë, do ata të jenë të parët quajtur në grup foreach, apo do të ishte më vonë? MARIA ZLATKOVA: Pra, çfarë është urdhri që foreach lak kalon nëpër një grup në? Ajo shkon përmes e parë element me elementin e fundit, në elementin e fundit të shtuar. Në qoftë se ju shtoni elemente më vonë, ata do të të accessed-- elementët e parë do të të arrihen si i pari elementet e vektorit, dhe pastaj ju do të shkoni nëpër secilën nga elementet si lloj i një ordered-- jo një urdhër, por mënyra se si ata janë vënë në rrjet. Audienca: Elementet Pra reja janë shtuar më vonë? Pra, ata janë added-- ata do të jenë të fundit në [? përsëritje. ?] MARIA ZLATKOVA: Elementet e reja can-- në thelb, kur elemente të reja janë shtuar, ata janë shtuar në fundin e vektorit? Audienca: Po. MARIA ZLATKOVA: Unë besoj se kaq. Po. Dhe pastaj me lak tuaj foreach, pasi ju keni shtuar elemente të reja dhe ju shkoni nëpërmjet tyre, elementet e reja do të të jetë accessed-- elementin e ri, nëse është e shtoi fundit, kjo do të arrihen e kaluar. Audienca: vetëm mund të jepni një shembull për diçka që do të [e padëgjueshme] me diçka me vlerë si [padëgjueshme] ose vlerë, pëlqen se si ju do të format atë? MARIA ZLATKOVA: Sigurisht. A mund të jap një shembull të asaj që ne do të bëjmë me vlerë? Pra, çfarë ju djema mund të jetë njohur me është se ne kemi kaluar nëpër një rrjet dhe të shtypura në thelb secili prej elementeve, për shembull, si nje pjese e nje Lista e urdhëroi apo diçka që. A do të kishte kuptim apo duam to-- Audienca: A mund të shtypura këto vlera jashtë? MARIA ZLATKOVA: Po, ne mund të shtypura dhe pastaj në thelb $ vlerë sepse në se vlera specifike, ne do të jetë shtypjen e vlerës brendësi të saj. Pra, në qoftë se ne ishim në përsëritje tonë të parë e saj dhe ne të shtypura vlerë $, ne do të jetë shtypje bar. Audienca: A ka edhe për sythe në PHP ose vetëm sythe foreach? MARIA ZLATKOVA: Nuk ka edhe për sythe në PHP. Dhe logjika e tyre është kryesisht njëjtë si ajo që ju keni qenë duke përdorur për të. Audienca: Pra, vlera e saj është i pavlefshëm. MARIA ZLATKOVA: Është si të njëjta. Po. Audienca: Unë jam vetëm duke shkuar për të pyetur. Pra, kur ju të deklarojë një grup, ju nuk keni nevojë për të treguar se çfarë madhësia ajo do të të jetë, që do të thotë që ju mund të vetëm shtoni dhe marr me vete elemente [padëgjueshme]. MARIA ZLATKOVA: Yup. Yup. Pikërisht. Kur ne të deklarojë një grup, ne nuk kanë nevojë të them se çfarë madhësia është, kështu që ne mund të shtoni vetëm elemente mbi atë më vonë si. Më shumë pyetje? Pra, duke sjellë PHP dhe HTML së bashku, atë që kemi seen-- mirë, për shembull, në këtë shembull, ne kemi një formë HTML që ka një fushë të dhëna. Dhe fushën e futjes është vetëm emri dhe pastaj ajo ka një buton Submit. Dhe kur ju shtypni Submit button, në dosjen tonë hello.php, sepse metodë për formën është merrni, ne mund të hyni çdo gjë që është në emrin e nga ky merrni ndryshore globale që is-- sintaksë sepse është $ _GET. Dhe pastaj ne mund të hyni çfarëdo input përdorues brenda atë formë për emrin duke specifikuar emrin e asaj fushe. Çdo pyetje të tjera ose ndonjë Pyetjet në këtë shembull të veçantë? Audienca: Ku është PHP? MARIA ZLATKOVA: Këtu. Pra, kjo është tag jonë hapje për PHP. Audienca: Oh, e drejtë. MARIA ZLATKOVA: Po. HANNAH Blumberg:? = Është stenografi për këtë është PHP dhe vetëm jehonë. Audienca: Oh. MARIA ZLATKOVA: Po, sorry. Unë duhet të ketë bërë të qartë. HANNAH Blumberg: Print. MARIA ZLATKOVA: Është vetëm funksioni që na lejon të shkruar diçka. Pyetje e madhe. Pra going-- po. Audienca: A do të jetë mjaft pak e kodim dorës së PHP dhe HTML në quiz 1? MARIA ZLATKOVA: Nuk mund të jetë një sasi mjaftë e interpretimit e PHP dhe HTML, jo domosdoshmërisht si një sasi të madhe të kodim, edhe pse ju mund të keni për të shkruar një foreach loop, edhe pse, një për lak. Çdo të sythe që kemi mbuluar këtu është lojë të ndershme. Dhe kjo është kryesisht ajo. HANNAH Blumberg: Unë do të jenë të përgatitur. Në të njëjtën mënyrë që ne të kërkuar që ju të shkruaj një bandë e C funksioneve në quiz 0, Unë do të jenë të përgatitur për të bërë të njëjtë në PHP dhe JavaScript. MARIA ZLATKOVA: Po. HANNAH Blumberg: Unë do të thoja një little-- si ne nuk jemi do të bëjë që ju të shkruani një HTML madhe faqe vetëm për shkak se është pak i lodhshëm, por ju mund të keni pjesë. Kjo është lojë krejtësisht të ndershme. Ashtu si faqe të vogël HTML, plotësisht i drejtë. Audienca: OK. Si në lidhje me në JavaScript, si dhe? HANNAH Blumberg: Po. Lojë të ndershme javascript-së. MARIA ZLATKOVA: Po. Kjo është lojë krejtësisht të ndershme. HANNAH Blumberg: Ne do të merrni me atë në si 10 minuta. MARIA ZLATKOVA: SQL, përsëri, Strukturuar Query Language. Ajo në thelb na lejon të menaxhuar të dhënat e në menaxhimin e bazës së të dhënave relacionale një sistem. Kjo thjesht do të thotë në thelb se ne kemi diku për të ruajtur disa të dhëna që ne mund të dëshironi të përdorur në një faqe interneti apo në ndonjë formë tjetër. Dhe pastaj ne kemi pyetje për të marrë informacion nga database tonë, ose për të futur informacion në to. Një shumë e zakonshme ones-- UPDATE, INSERT, SELECT, dhe DELETE. Pra për UPDATE, kjo është sintaksa për përditësimin e të dhënave në një bazë të dhënash. Përditësimi këtë tabelë të quajtur tabelë duke thënë SET ne mund të vënë disa vlera në të gjitha rreshta për diçka tjetër të barabartë. Pra, ne mund të specifikojë gjithashtu disa të veçanta shënimet që ne duam për të modifikuar dhe që mund të jetë duke përdorur KU. Dhe ne mund të specifikojë se ne duam vetëm për të modifikojë disa rreshtave ku shtëpia për, në qoftë se kemi pasur një tabelë të nxënësve dhe të gjithë studentët kishin shtëpi, kështu që ne do të modifikojë vetëm disa vlera ku një shtëpi barabartë Currier, për shembull. Për INSERT, ne mund të futni Vlerat e caktuara në një tryezë. Pra, INSERT INTO tryezë, dhe pastaj vlerat, dhe pastaj në kllapa, ne të specifikojë cilat vlera ju doni të futur. Pra, INSERT INTO tavolinë, col1 dhe col2, vlera është val1 dhe val2. Pra, kjo fut në thelb një rresht të ri në një tabelë që përmban vlerat 1 dhe 2 nën kolonat 1 dhe 2. Dhe pastaj ne jemi duke shkuar për të shkuar mbi një shembull të shpejtë se si kjo duket si në database tonë pak. Por, kjo pyetje e fundit që unë mendoj se ne jemi duke shkuar për të shkuar mbi, SELECT, ajo vetëm na lejon për të zgjedhur e të dhënave nga një tavolinë për të ndoshta të përdorin atë më pas. Dhe mënyrën se si ne të bërë këtë është që ne vetëm të ruajtur atë në disa ndryshore. Dhe pastaj ne ndoshta mund të përdorni atë përsëri. Pra, do të thotë yll SELECT zgjidhni të gjitha. Kjo është vetëm një stenografi për zgjedhjen e të gjithë. NGA tabelë ku, ne jemi në kërkim për disa kushte të veçanta, Pra, ku kolona e barabartë diçka, për shembull. Nëse ne vetëm të kërkuar për të zgjidhni të gjitha nga tabela, kjo vetëm përzgjedh gjitha rubrikat dhe të gjithë rreshtat nga një tryezë. Dhe pastaj fshini nga tryezë KU col barabartë diçka, kjo vetëm fshin disa rresht nga tryezën tonë ku ne kemi disa kushte specifike. Në këtë rast, kushtet janë kolonë është e barabartë me diçka. Pra, vetëm një shembull të shpejtë të kësaj. Në qoftë se ne kemi këtë tabelë të drejtë këtu dhe ne futur atë në një tavolinë, këto vlera, që do të futur një rresht të ri. Dhe në qoftë se ne kishim auto-rritje të, kjo do të vetëm ardhura ID nga 0 deri në 1 deri në 2. Nëse ne të gjithë të zgjedhur nga studentët, atë vetëm kthen të gjitha fushat dhe të gjitha rreshtave. Ku vit është më i madh se ose e barabartë me vitin 2016, që vetëm do të kthehen Hannah dhe veten. Dhe pastaj, nëse ne vetëm të përzgjedhur id vit dhe vit nga studentët ku shtëpia është Cabot House, që do të, përsëri, kthehen Ana dhe veten. Pastaj në qoftë se ne fshirë nga studentët ku emri është e barabartë me Rob, që do të fshini të gjithë rresht. Dhe pastaj në qoftë se ne të vendosur emri, studentët UPDATE Emri SET barabartë me Daven KU shtëpi është e barabartë Cabot House, që do të shkojë në këto rreshta dhe pastaj update emrin. Dhe pastaj disa lloje të SQL të dhënat janë CHAR, VARCHAR, INT, dhe noton. Këto janë lojë të ndershme. Unë do të shkoj përsëri dhe sigurohuni që ju e dini dhe kanë ata në mashtrojnë fletë tuaj, çfarë secili prej këtyre karaktereve janë përdorur për të, çfarë keni përdorur ato në psets tuaja, dhe sigurohuni që ju jeni të njohur dhe të rehatshme me të paturit e për të zgjedhur nga llojet e ndryshme të të dhënave në pset tuaj. Po. Audienca: Çka është ruajtur që tavolinë? Po, ku është ruajtur kjo tryezë? MARIA ZLATKOVA: E pra, tani, ajo nuk është ruajtur. Gjithsesi, ku ruhet kjo tryezë? Por ajo mund të ruhet në një bazë të dhënash SQL. Audienca: Dhe ku është baza e të dhënave SQL? Në kompjuter, internet diku, server? MARIA ZLATKOVA: Kjo mund të jetë një numër i gjërave të ndryshme. HANNAH Blumberg: Kemi interfaced me Tabelat SQL kryesisht me phpMyAdmin. Pra, ne mund të pyesim një server për të ruajtur ato për ne. Ne mund të ruajtur ato në kompjuterin tonë. MARIA ZLATKOVA: Kjo varet vetëm nga si ju doni të bëni atë për veten tuaj. Por, ne kemi qenë ruajtjen ato, siç u përmend Hannah, në phpMyAdmin, e cila është në internet. Dhe pastaj mënyra që ne përdorim PHP dhe SQL, ne dyqan atë në disa ndryshore ajo që ne kemi kërkohet për. Pra, nëse kemi zgjedhur të gjithë nga historia ku user_id barabartë seancën e id, që do të zgjidhni të gjitha rreshtave për person të veçantë i cili është regjistruar në nga historia tavolinë dhe zgjidhur ato në rreshta. Një gjë e ftohtë të dini është që funksion CS50 e query mbron kundër tags SQL injeksion. Kjo thjesht do të thotë se kjo e bën të sigurt input që është futur është e saktë dhe se personi që po hyn input nuk është duke u përpjekur për të dhëna disa me qëllim të keq Kodi për ose të bjerë tavolinat tona ose fshini çdo gjë brenda database tonë. Një pasqyrë të shpejtë të Model Model Shiko Kontrolluesi, kjo është vetëm një mënyrë e organizimit dhe të menduarit në lidhje me kodin. Kjo është përsëri një paradigmë të projektimit. Çfarë kjo do të thotë është se ne can-- dhe kjo është praktikë e mirë për të ndarë pjesë të ndryshme i kodit tonë dhe atë që ata kontrolluar në këto tre paradigmat. Pra mendimi ynë është më shpesh tonë templates, faqosje ynë, rruga që ne kemi vendosur se si kodi ynë duket. Kjo është kryesisht dosjet tona CSS dhe mënyra që ne të përcaktuar hartimin e kodit tonë, në thelb. Kontrollues ynë është kryesisht se çfarë ne kemi qenë duke bërë me PHP fotografi. Pra, përsëri, duke punuar me informacioni që ne kemi dhe përcaktimin se si informacion është përdorur, dhe pastaj duke kaluar këtë informacion ose në pamje ose modelit. Dhe modeli i, mënyra që ne kemi qenë duke e përdorur është e ka qenë baza e të dhënave tona, kështu që ku informacioni ynë është ruajtur kështu që ajo ka diku për të jetuar në, dhe ndonjë nga kodin që lidhet me rrugën që ne të merrni këtë informacion ose mënyrë që ne update këtë informacion. Pra, në modelin MVC, HTTP kërkesa janë dërguar në një web server. Pastaj, interpreton kontrollues kërkesa nga përdoruesit dhe pastaj validates dhëna përdoruesi. Është fakultative se ne kemi kontrollues të komunikuar me një model, kështu që diçka si database tonë ose disa funksionalitete të tjera se relays informacion. Dhe pastaj në fund, kontrollues kalon informacion mbi pikëpamjen në mënyrë që mund të jetë dhënë dhe se ajo mund të bëhen të dukshme për çdo person qasjes në web faqe. Ndonje pyetje? Mbresëlënës. Pra, përsëri, modeli, funksioni i saj, përsëri, është ruajtje e vazhdueshme e informacionit, menaxhimin dhe organizimin e të dhënave. Dhe ajo që kemi parë deri tani është baza e të dhënave MySQL dhe çdo fotografi të dhënave që mund të përdorin. Shiko, paraqitja e informacionit për përdoruesi, UI, ose user interface. Dhe shembulli i kësaj është HTML. Dhe pastaj ne mund të kemi PHP minimale. Pra, një për lak që iterates mbi të dhënat që janë të shtypura nga është pjesë e mendimit, si krahasim me kontrollues. Dhe pastaj një shumë e dosjeve tona PHP bien në kategorinë kontrollues. Ajo vetëm trajton kërkesat e përdoruesit dhe merr informacion nga modeli. Hedhur në Dokumentin Modeli objekt, kjo vetëm i referohet mënyrës HTML Dokumentet janë të organizuar. Dhe ata janë të organizuar në një pemë strukturë që ka një hierarki. Pra, nëse ne kemi qasje në [e padëgjueshme] përfaqësimi i dokumentit, ne mund të punojnë me dokumentin, si ne manipuluar objekte në thelb. Dhe për të bërë këtë një pak më të qarta, kur ne kemi një shumë të tonë tags ndryshme të përgjigjet të rrugëve të ndryshme në pemë tonë. Dhe pastaj për këtë shembull, ne kanë filluar nyjen dokument. Ne kemi, pra, nyje ynë HTML që ndan në kokë dhe në trup. Kokë ka titullin dhe pastaj titulli përmban hello, botën. Dhe trupi ynë përmban vetëm hello, bota po ashtu. Pra, çdo pyetje në ndonjë nga gjëra që ne të mbuluara deri tani? Dhe nëse jo, Hannah do të marrë përsipër me JavaScript. Mbresëlënës. HANNAH Blumberg: OK, cool. Nëse diçka vjen deri me PHP ose HTML, ose ndonjë gjëra Maria mbuluar, ne gjithmonë mund të bëj një pauzë. Ne jemi duke bërë më të mirë në prapë kohë, kështu awesome. Dhe vetëm për të shkuar mbrapa me të vërtetë shpejt me këtë, në qoftë se ju shikoni në çdo Provimi i vitit të kaluar, kjo vjen deri either-- këtu është disa HTML, e bëjnë këtë diagram. Apo këtu është ky diagram, të bëjë disa HTML, kështu që patjetër praktikë që. Dhe pastaj kjo është një garantuar pyetje që ju mund të merrni të drejtë. Ftohtë. Pra, le të flasim për JavaScript dhe se si ajo është pak ndryshe nga gjuhë si PHP dhe C, të dy gjuhët kemi parë më parë. Pra numër një, ajo është shtypur lirshëm. Kjo është si PHP, por ndryshe nga C. Është një gjuhë interpretuar. Përsëri, kjo është si PHP, ndryshe nga C. Dhe kjo do të na lejojë të use-- atë punon me të vërtetë bukur me faqet e internetit. Ajo do të na lejojë për të manipuluar përmbajtja dhe se si ajo duket dhe atë që bën. Ne jemi duke shkuar për të parë pak e Ajax. Kjo na lejon të komunikojnë asynchronously me servera të ndryshëm dhe për të marrë informacion. Dhe kjo është ajo që me të vërtetë ndan JavaScript nga PHP dhe C është se ajo është klient-side. Të dy PHP dhe C janë zakonisht server-side. Për pjesën më të madhe dhe pothuajse tërësisht çfarë ne kemi parë, të paktën në kjo klasë, JavaScript vepron në klient-side, që do të thotë se shfletuesi është në fakt përgjegjës për drejtimin e tij. Dhe kjo do të thotë se ne nuk bëjmë nevojë për të bashkëvepruar me server. Pra, kjo do të thotë se mund të jetë shumë më të shpejtë sepse kjo është në fakt vetëm se është Chrome, kjo është Safari, Firefox-i është, çdo gjë që përdorni të vërtetë drejtimin tuaj JavaScript. Audienca: Çfarë do të thotë asinkron? HANNAH Blumberg: Ah, çfarë do asynchronously do të thotë? Pyetje e madhe. Asynchronously means-- mirë, përmbajtja në të cilën ne përdorim është, në rregull, ne janë duke krijuar një web faqe dhe ne kemi nevojë për të marrë disa informata. Pra, me shembullin e mashup, disa informata që ne të mund të dëshironi është tituj neni. Tani, ne could-- një mundësi është për të bërë atë sinkrone dhe kjo do të thotë Le të ndaluar, shkoni merrni artikullin, merrni artikull mbrapa, dhe pastaj bëjnë, por që do të jetë me të vërtetë i ngadalshëm. Kjo do të jetë një përdorues përvojë e keqe sepse ju vetëm do të jetë i ulur atje duke pritur për diçka për t'u përgjigjur. Asynchronously do të thotë që ne do të vazhdojë duke shkuar në lidhje me biznesin tonë, pasqyrim faqe, dhe ne do të dërgoj një kërkesë që është lloj i do të ndodhin në sfond. Unë mendoj se ne përdorim shembullin në Leksioni i quajtur Rob dhe duke thënë: hej, ju mund të shikoni këtë ide për mua dhe të kthehet në mua, në krahasim me vetëm mua duke pritur në telefon. Pra asynchronously do të thotë kjo ndodh në sfond larg nesh paralelisht. Pyetje e madhe. Ndonje gje tjeter? I madh. Ne do të kërcejnë më shumë në Kërkesat asinkron me Ajax. Audienca: A JavaScript-- ku bën ajo bie me Model-View-Controller? HANNAH Blumberg: pyetje e madhe. Ku bie JavaScript me Model-View-Controller? Hm. Unë mendoj se mund të fall-- kështu që ne nuk bëjmë zakonisht si për të pllaquris atë në se paradigmë, por unë mendoj unë do them, OK, kështu JavaScript në fakt do të lejojë ne për të mbledhur të dhëna, interpretojnë të dhënat, në të vërtetë të bëjë gjëra kuptimplota me të dhënat. Në këtë mënyrë, ajo është shumë e kontrollit-si. Por ajo gjithashtu do të na lejojë të shfaqin gjëra dhe të shtypura gjëra. Në këtë mënyrë, kjo është shumë pikëpamje të ngjashme. Po. Pra, kjo është lloj i si PHP në ku ajo mund të lloj të jenë të dyja. Pyetje e mirë. Ndonje gje tjeter? Të gjithë të drejtë, i tmerrshëm. Moving drejtë së bashku. Pra, le të shohim një shembull se si ne mund të përdorim JavaScript në një nga programet tona të internetit. Kështu që unë do të konsideroj këtë index.html me një bandë e HTML. Dhe gjë që unë dua që ju të përqëndrohet në është ky tag script. Dhe kjo thotë: OK, unë dua të drejtuar disa JavaScript dhe këtu është vendi ku ai jeton. Ajo jeton në hello.js. Dhe shumë e shumë si CSS, ne mund të vënë JavaScript në HTML. Pse mund të duam për të ndarë atë? Po. Audienca: lehtë për të rishkruar? HANNAH Blumberg: Po. Është më e lehtë për t'u përdorur të gjithë faqet e ndryshme të internetit. Ajo mban gjëra të pastër. Është vetëm praktikë e mirë. Mbresëlënës. Përgjigje e mirë. Aq të mirë, kështu që kjo po ndodh të jetë index.html ynë. Dhe pastaj poshtë këtu është tonë vogël skedë pak JavaScript. Dhe e gjithë kjo thotë se është vigjilent Përshëndetje, bota. Pra, ajo që ndodh është kur Kjo faqe renders-- kështu që në qoftë se ju shkoni në çfarëdo faqen kjo is-- gjithçka që do të ndodhë po ajo do të thotë, OK, unë jam duke shkuar për të drejtuar këtë kod JavaScript. Dhe ky kod JavaScript vetëm thotë vigjilent Përshëndetje, bota. Kështu që unë jam duke shkuar për të marrë këtë miqësore pak pop-up. Ftohtë? Kjo është lloj i si tonë të parë JavaScript program, Përshëndetje tonë, bota. Le të shikojmë pak më shumë në lidhje me atë Sintaksa e JavaScript duket si. Dhe konkretisht, le të krahasojmë atë me C dhe PHP, të cilat ne kemi parë më parë. Në JavaScript, ne do të kemi var, emri i variablit, dhe pastaj vlera e saj aktuale. Dhe ne nuk specifikon një lloj, vetëm si në PHP, por shumë ndryshe në C. Kështu për shembull, në qoftë se ne të kërkuar për të ruajtur vlerën e 50, në C, ne do të duhet të them, hej, C, unë dua një numër të plotë, Unë jam duke shkuar për të thirrur atë Unë, dhe vlera e saj është 50. Në PHP, kjo është pak më e lehtë. Ne themi, hej, unë dua një ndryshore i kërkova dhe vlera e saj është 50. Shumë të ngjashme, në JavaScript, ne them hej, unë dua një variabël i kërkova, vlera e saj është 50. Çdo herë pasuese që unë e përdor unë, unë nuk kam nevojë për të shkruar var. Është vetëm unë nga ky moment. Në të njëjtën mënyrë, në C, ku pasi ne themi int i, ne vetëm përdorim i. Ftohtë? Në rregull. Duke shkuar për në sythe, për fat të mirë, këto pothuajse shikoni exactly-- Unë mendoj se ata janë të njëjtë si atë unazore do të duket si në diçka si C ku tuaj për lak do të ketë tre parts-- një initialization, një kusht, dhe një update. Një lak, ndërsa, ajo duket e njëjtë e saktë. Ne vetëm t'i jepte një kusht. Dhe një për ta bërë, ndërsa lak, përsëri, saktësisht e njëjtë. Ne u japim atë një kusht. Le të thonë se unë të kërkuar për të iterate over-- Unë doja të bëja diçka pesë herë. Në C, ne mund të shkruani për init i barabartë me 0. i është më pak se 5, i ++. Dallimi i vetëm, në JavaScript, në vend të thënë int i barabartë me 0, ne themi var i barabartë me 0. Bukur. Ky është i vetmi ndryshim. Çdo pyetje në ndonjë nga se? Po. Audienca: Pra, në PHP, është e njëjta gjë, me përjashtim por si një variabël? Apo ishte kjo një shembull var? HANNAH Blumberg: Po. Pra në PHP, ajo do të jetë një shenjë dollar. Kështu ajo do të $ i të barabartëve 0, $ i është më pak se 5, $ i ++. Pyetje e madhe. Tani le të flasim për Deklaratat funksion. Në C, kur kemi deklaruar një funksion, ne i dha një emër dhe ne ia dha disa parametra. Dhe në fillim, kemi shkruar llojin. Në JavaScript, të gjithë ne duhet të bëni është të shkruani funksioni fjalen që thotë, hej, JavaScript, Unë jam gati për të përcaktuar një funksion. Në këtë rast, ajo ka shumë emrin. Dhe ai merr dy argumente, x dhe y. Vini re se ne nuk e kujdesit për llojet e x dhe y. Dhe ashtu si C, ne kemi kjo fjalen kthim, kështu që ne mund të bëjmë diçka si kthimit x dhe y. Dhe tani pasi kemi shkruar këtë për herë të parë funksion, ne mund të përdorim shumë kudo. Dhe kjo është krejtësisht në rregull. Një gjë me të vërtetë ftohtë në lidhje JavaScript që është shumë ndryshe nga C është se funksionon mund të trajtohen si vlera. Pra, ne mund të bëjmë diçka si këtu ku unë mendoj unë të mbuluar këtë up-- I mbuluar shumën var part-- dhe ne vetëm tha Funksioni xy barabartë kthimit x plus y. Kjo është ajo që do të quhet një funksion anonim. Kjo është një funksion pa një emër. Ndërsa ky thotë funksion shuma, blah, blah, blah, kjo do të thoshte vetëm funksionin. Por tani, edhe pse unë kam ky funksion anonim, se funksioni është me të vërtetë vetëm një vlerë. Ne mund të trajtojnë atë si një vlerë. Pra, ne mund ta ruani atë në një variabël të njëjtën gjë mënyrë ne mund të ruani 50 në një variabël. Pra, ne mund të themi, OK, unë dua një ndryshueshme, ajo që quhet shuma, dhe kjo është ky funksion. Pra, këto dy gjëra janë në të vërtetë do të bëjë të njëjtën gjë e saktë, por sintaksa është pak të ndryshme dhe lloji i një shënim fun. Po. Audienca: Pra, ju mund të telefononi një funksion që ishte anonim duke thënë: kllapa sum 2, 5? HANNAH Blumberg: Po. Ju mund të telefononi këtë anonim funksion në të njëjtën mënyrë. Ju do të bëni shumë (2, 5) ;. Kjo do të ishte krejtësisht në rregull. Në qoftë se unë nuk e kam bërë shuma var barabartë funksion, në qoftë se unë vetëm të fshihet this-- Unë e di se është në dorën time, por të pretendojë Unë fshihet this-- pastaj se funksioni është lloj i vetëm shkuar. Ju kurrë nuk mund të përdorni atë përsëri për shkak ju nuk keni një emër për të. Është e vështirë për t'iu referuar diçkaje ju nuk e dini se çfarë për të thirrur. Pyetje e mirë. Po. Audienca: A mund të referencës shumë në vende të tjera me vlerë të x plus y? HANNAH Blumberg: A mund të shuma referencë në vende të tjera me x vlerës plus y? Unë nuk jam plotësisht i sigurt se çfarë ju thotë. Audienca: Pra, e kaluara juaj gjysmë-anonim funksion është shuma është e barabartë me kjo funksion anonim, kështu që shuma është tani një variabël që ju can-- HANNAH Blumberg: E drejta. Pra, shuma është e ndryshueshme, por kjo është actually-- kështu që shuma është një ndryshore të cilit Vlera është funksioni. Pra, kjo është një funksion, që është lloj i një gjë e pazakontë për të përfundojë kokën tuaj rreth që ne kemi qenë duke luajtur me C dhe ju nuk mund ta bëni atë në C. Por tani ne mund të telefononi mbledhë njëjtën mënyrë ne mund ta quajmë shumë këtu. Audienca: OK. HANNAH Blumberg: Po. Pyetje e mirë. Po. Audienca: Pra, ne nuk e përdorim prototipa në PHP ose JavaScript? HANNAH Blumberg: Jo, ne nuk kanë nevojë të përdorin prototipa, sidomos në JavaScript. Pra, një praktikë e keqe gjë që unë jam i do të thotë se ju nuk duhet të bëni është që ju nuk keni për të shkruar var I = 50. Ju vetëm mund të fillojnë të bëjnë I = 50. Dhe vetëm do të bëjë unë një ndryshore globale. Është praktikë shumë e keqe për kurrë nuk thonë explicity var unë, por kjo është diçka që ju mund të bëni. Përkthyesi nuk është do të çirrem në ju. JavaScript është shumë i ngjashëm, ju mund të bëni çfarë të doni. Oh me falni. Ka dy. Në pantallona portokalli. Shkoni përpara. Audienca: Jo, ju shkoni në fillim. Audienca: Jo, unë isha vetëm duke thënë Unë nuk e kam dorën time deri. NE RREGULL. Pra, nëse ju keni qenë të thirrur që për herë të parë, tani të përmbledhur, ne e quajmë atë në të njëjtën mënyrë, x, y, si çdo herë të vetme? HANNAH Blumberg: Po. Pra, këto dy thelb bëjë të njëjtën gjë. Audienca: Dhe çfarë është përparësi e përdorimit të një ose tjetër? HANNAH Blumberg: Nuk ka avantazh e përdorur një ose tjetrit. Unë vetëm të kërkuar për të treguar ju dy pjesë të ndryshme të sintaksës. Shumë herë ku anonim Funksionet e kanë një qëllim është nëse argumenti në një tjetër Funksioni duhet të jetë një funksion. Dhe ne do të shohim se në vetëm një të dytë me Ajax. Pra, nëse kjo nuk ka bërë asnjë kuptim, ruajtur atë në pjesën e prapme të kokës. Kjo është ku një anonim funksion mund të jetë e dobishme sepse kjo nuk është e vërtetë vlerë duke i dhënë asaj një emër që ne jemi vetëm do të përdorin atë një herë. Po. Audienca: Në qoftë se x dhe y të ndryshojë më vonë në, do të përmbledhur të ndryshojë si? HANNAH Blumberg: Nëse x dhe y ndryshim më vonë, do të përmbledhur të ndryshojë si? Pra, kjo është në fakt unë mendoj diçka që është, përsëri, ajo vetëm ndjehet shumë e ndryshme nga C. Kjo nuk është një vlerë. Kjo nuk është 5. Është vetëm funksion vetë. Pra, sa më shpejt që ju jep atë parametrave, atëherë ju do të vërtetë të llogaritur një vlerë. MARIA ZLATKOVA: Dhe pastaj ju mund të telefononi funksionin dhe e përdorin atë për të marrë disa vlera. HANNAH Blumberg: E drejta. Pikërisht. Po. Audienca: Pra, nëse ju vetëm ruajtur atë në variablin, si var x është e barabartë me shumën e dy values-- HANNAH Blumberg: Po. Kështu që ju mund të bëni vetëm shumë var është e barabartë me shumën e dy vlerave. Po. Ndonjë pyetje të tjera? Po. Audienca: Por dua që ngatërruar shumë dhe shumë? Ashtu si në qoftë se ju e quani shumë tuaj ndryshueshme, do ta thërrasë shumën funksion? HANNAH Blumberg: Mm. Mm. Nëse ju bëri diçka të si, shuma e barabartë me shumën e 2, 5? Audienca: Po. HANNAH Blumberg: Unë besoj se do ta prishësh vlerën e shumës. Pra, një tjetër interesante gjë rreth JavaScript është se një variabël i vetëm mund të marrë në një bandë e llojeve të ndryshme. Praktikë e keqe. Ju nuk duhet të bëjë diçka si ajo që sapo thatë. Por në C, në qoftë se i është vendosur barabartë me një numër të plotë, ne e dimë se kjo nuk është do të bëhet një varg. Ky nuk është rasti në JavaScript. Po, pyetje e mirë. Ndonje gje tjeter? Në rregull. Të bësh të gjithë të drejtë në kohë. Mbajtja e shkuar. Në rregull. Nëse ne shikojmë në një grup në JavaScript, këtu është një shembull të shpejtë të një grup të strings. Dhe vargjeve mund të rritet në mënyrë dinamike. Ata nuk kanë një Madhësia fikse në të njëjtën mënyrë se ata e bëjnë në C. Ne mund të hyni në Elementet me vetëm kllapa katrore. Që duket shumë si PHP dhe shumë si C, ku ne mund të themi, në këtë rast, nëse kam kërkuar fjalën JavaScript, unë do të mos arr kllapa katrore me 0, 1, 2. Dhe pastaj, nëse ju kujtohet në C kur ne kërkuar për të marrë gjatësinë e një grup, ajo ishte me të vërtetë i bezdisshëm. Por në JavaScript, super të lehtë. Të gjithë ne bëjmë, .length. Jep gjatesite. Kjo eshte. Audienca: Kjo është e thjeshtë. HANNAH Blumberg: Po, e bën jetën tuaj një shumë më e lehtë. OK, nuk object-- atje. Objektet në JavaScript të ndjehen shumë si structs në C dhe vargjeve associative në PHP. Pra, ajo që ne kemi parë një Shumë është JSON, e cila qëndron për JavaScript Object simbol. Dhe kjo është në thelb një mënyrë e strukturimin e të dhënave tona. Pra, le të shohim një shembull, ndoshta më e lehtë. Kështu që këtu është një shembull i një objekti që ruan klasën, CS50. Dhe kur them klasë, dua të them natyrisht, nuk like-- vërtet, kursin, CS50. Dhe ju do të shihni se çdo gjë në objekt do të jenë të përmbajtura në formatimin e teksteve kaçurrel. Dhe ne të fillojnë të shoqërojnë emrat fushë ose çelësat me vlera të ndryshme. Kështu që ju mund të filloni për të parë se si ky lloj i ndjehet si një grup associative në PHP. Pra, ne jemi duke shkuar për të lidhen në fushë apo emri kryesor, natyrisht, me vargun, CS50. Ne do të kemi një instruktor. Ne do të kemi TFS. Ne do të kemi numrin e psets dhe ne do të ketë regjistruar. Dhe një gjë e ftohtë të vihet në dukje është e gjitha e këto gjëra kanë lloje të ndryshme, dhe kjo është krejtësisht në rregull. Kjo është në rregull për një objekt, në fakt, ajo ndoshta pritet për një objekt të ketë një kombinim të strings dhe numra dhe Booleans dhe vargjeve dhe çdo gjë tjetër që ju mund duan të kenë brenda objektit tuaj. Dhe vini re se këto do të jenë të emrat ose çelësat, dhe pastaj ne vetëm vendosi atë të barabartë me një zorrë e trashë të vogël. Audienca: Çfarë saktësisht do të thotë JSON? HANNAH Blumberg: Çfarë saktësisht do të thotë JSON? JSON vetëm qëndron për JavaScript simbol Object. Kjo është vetëm një mënyrë e formatimit. Po. Kjo është një mënyrë e formatimit të dhënat tona. Në C, kjo është structs. Në PHP, është e vargjeve associative. Në JavaScript, ne kemi objekte. Audienca: Pra CS50 është një objekt? HANNAH Blumberg: CS50 është objekti në këtë rast. Tani, si nuk kemi të vërtetë qasje ato fusha apo ndryshuar ato fusha. Për shembull, mendoj se ne kemi vendosur keni kërkuar një pak pset këtë semestër. Në vend të nëntë, ne jemi vetëm do të ketë tetë. Si do të ndryshojë kjo? Oh, mënyrë e gabuar. Ka dy mënyra që ne mund të bëjmë atë. Numër një është me dot simbol dhe numri dy është me katror simbol kllapa. Kështu, për shembull, në qoftë se unë donte të ndryshonte apo qasje fusha psets në objektin tonë CS50, çfarë do të bëj është CS50.psets, kështu emri i objektit dot emri i fushës ose kyç. Shumë të ngjashme, është pikërisht ekuivalent për të bërë CS50, dhe pastaj në formatimin e teksteve katrore, psets. Ftohtë? Po. Audienca: Pra, është JSON teknikisht JavaScript ende, edhe pse në psets ne ndarë it out [e padëgjueshme]? HANNAH Blumberg: Sigurisht. Pra, pyetja është, janë JavaScript dhe JSON ekuivalente? Pra JSON është simbol, në thelb rruga që kemi shkruar jashtë një objekt prej JavaScript. Pra, ata nuk janë të njëjtë. Unë do të thoja JavaScript, atje janë objekte në JavaScript. JSON merr ato objekte dhe printon ato dhe tregon ato ose dyqanet e tyre në një mënyrë të bukur. Pra JSON nuk është një programimit gjuha mënyra se JavaScript është. Kjo është vetëm simbol për objektet tona në JavaScript. Po. Audienca: Pra, çfarë saktësisht [Padëgjueshme] përfunduar? HANNAH Blumberg: Sigurisht. Pra, kjo në fakt nuk bën asgjë. Kjo është vetëm një mënyrë për të hyrë. Pra, le të thonë se ne të kërkuar për të ndryshuar numri i përcakton problemit nga nëntë deri në tetë. Çfarë bëjmë ne është të bëjë diçka si CS50.psets = 8 ;. Po, pyetje e madhe. Kjo është vetëm për të treguar ju sintaksë. A nuk të vërtetë të bëjë asgjë të dobishme. Ndonje pyetje? Moving drejtë së bashku. Pra, le të shohim në një shembull të shpejtë të si JavaScript punon sepse ju thashë se bën të gjitha këto gjëra të ftohtë dhe na lejon për të modifikuar web pages. Le të vërtetë të shohin atë në veprim. Pra, të marrë, për shembull, këtë fotografi HTML. Dhe gjëja unë dua që ju të përqëndrohet në është ky tag të veçantë, e cila është një buton, me id search_button. Është vetëm në faqen e. Pra, tani le të shohim se çfarë ne fakt mund të bëjmë. E pra, mendoj kur ju klikoni butonin, ne duam të bërë një alert-- keni klikuar butonin. Le të shohim se si ne mund të bëjmë atë. Pra window.onload-- kjo nuk është diçka që ju keni parë në klasë, prandaj nuk do të duhet të dini se për quiz. Por kjo në thelb thotë, OK, thirrje këtë funksion kur ngarkesat dritare. Pra, kjo është vetëm lloj i kodit setup. Mos u shqetësoni aq shumë për këtë. Ajo që unë dua që ju të përqëndrohet në është në këtu. Ne themi var searchButton barabartë document.getElementByID search_button. Pra, si ju mund të me mend, Çfarë kjo nuk është ai thotë: OK, shkoni gjeni elementin me ID search_button. Dhe tani ne kemi se element aktual dhe unë jam duke shkuar për të ruajtur atë në një searchButton ndryshueshme. Dhe tani ne fakt mund të përdorni këtë element dhe për të ndryshuar atë, apo qasje vlerat e saj, gjëra të tilla si se. Ne fakt mund të fillojë të angazhohen me web faqe. Kështu që këtu unë them, OK, tani që unë kam që buton, kur ajo është klikuar, quajmë këtë funksion anonim. Pra, kjo është ajo ku anonim funksione të bëhen të dobishme. Dhe çfarë do funksioni bëj? E pra, ajo vetëm e quan këtë Funksioni vigjilent dhe ai thotë: keni klikuar butonin Kërko. Pra, çfarë do të ndodhë në qoftë se unë shkoj kudo kjo HTML jeton dhe unë klikoni butonin, Unë do të merrni një alarm dashuroj pak që thotë se keni klikuar butonin. Pra, gjërat të përqëndrohet në here-- document.getElementByID merr një HTML veçantë element me ID e dhënë. Dhe tani ne mund të vendosni çfarë duhet të ndodhë kur se elementi i veçantë është klikuar. Audienca: Ne duhet të vënë të gjitha që në? HANNAH Blumberg: Na vjen keq? Audienca: A kemi të fizikisht kod të gjithë këtë? HANNAH Blumberg: A kemi të fizikisht kod të gjithë këtë? Po. A nuk është ky lloj i bezdisshëm? Kjo është një shumë të kodit. Audienca: Ju mund të importojë diçka. HANNAH Blumberg: E drejta. Ne mund të përdorim diçka. Dhe në particular-- oh, kjo është thënë mua unë kam për të mësuar seksion. Në veçanti, le të përdorin bibliotekën jQuery, sepse kjo ishte me të vërtetë gjatë dhe të vërtetë i bezdisshëm dhe unë dua të jem në gjendje për të lehtësuar atë dhe e bëjnë atë më të shkurtër dhe më e lehtë për të shkruar. Pra, jQuery është një bibliotekë JavaScript. Pra JavaScript është programimi gjuhë; jQuery është një bibliotekë. Dhe kjo e bën një bandë e gjëra të lehtë. Kjo e bën duke ndryshuar dhe duke shkuar nëpër një dokument HTML shumë më të lehtë. Kjo e bën më të lehtë trajtimin e ngjarjeve. Kjo e bën më të lehtë animacion dhe kjo e bën më të lehtë Ajax. Pra, le të hidhen në dy ato gjëra tani. Më falni. Para se të bëjmë, disa sintaksë themelore. Kjo është ajo që më quan të biblioteka jQuery duken si. Ne përdorim këtë dollar sign-- asnjë shenjë lidhje në PHP, vetëm inconvenient-- emrin e një përzgjedhës, dot, dhe pastaj një veprim. Pra, le të shohim disa shembuj konkretë për këtë. Pra, kjo në fakt është e njëjta Kodi nga rrëshqitje ngjarje. Pra, kjo e gjatë, gjë e shëmtuar bëhet kjo shumë nicer, gjë më të vogla. Pra, le të përpiqemi për të thyer këtë poshtë. Kjo thotë, OK, jQuery-- kjo dollar sign-- jQuery, gjeni më dritaren. Pra, kjo është përzgjedhës. Kur ajo ngarkesa, e quajmë këtë funksion. Pra, kjo është gjithçka brenda. NE RREGULL. Deri më tani, në mënyrë të mirë? Në rregull. Tani, jQuery, të më gjesh mua të gjë me ID search_button. Dhe çfarë është klikuar, quajmë këtë funksion. Dhe pastaj ky funksion të saktësisht të njëjtë. Vetëm të bëjë një grimë të vogël e gatishmërie, keni klikuar butonin Kërko. Pra, kjo është me të vërtetë e bukur. Me të vërtetë kondensohen dhe thjeshton kodin tonë. Si e di se është ID search_button dhe jo si klasit search_button? Audienca: hashtag? HANNAH Blumberg: Po. Ky simbol hash, kjo është vetëm si CSS. Pra mbani mend, me CSS, kur ne donte të zgjidhni diçka me ID, kemi përdorur shenjën paund. Dhe kur ne të kërkuar për të zgjedhur diçka nga klasa, ne përdorim dot. I madh. Ka kuptim? Pra, jQuery është menduar të vetëm të bëjë jetën tonë më të lehtë. Po. Audienca: Pra, unë jam pak i hutuar si për të se si punon funksion anonim. A keni emrin këtë anonymouse funksion, funksionon? Si është quajtur? HANNAH Blumberg: Sigurisht. Pra funksion është vetëm një fjalen që thotë, unë jam gati për të përcaktuar një funksion. Audienca: Oh, OK. HANNAH Blumberg: OK? Dhe pastaj ne të kalojë atë si një Argumenti to-- le të marrin kjo one-- brendshme të klikoni funksionit. Pra, vërtet, kështu që këtë funksion, ky funksion anonim, të bëhet një argument aktual. Pra mbani mend në JavaScript, ne mund të trajtojnë funksionet si vlera. Audienca: Oh, OK. HANNAH Blumberg: Po. Më pëlqen se "oh". Bukur. Pyetje të tjera? Kohë? MARIA ZLATKOVA: Mirë. Të mirë. HANNAH Blumberg: mbresëlënës. Disa jQuery shpejtë dobishme. Unë nuk jam duke shkuar për të shkuar nëpërmjet të gjitha këto. Këto slides do të jetë Up Online pak më vonë, kështu që ju mund të kontrolloni ajo se pak më vonë. Por në thelb, gjenerali model mban ku ne themi: OK, hej, jQuery, këtu është e mia përzgjedhës dhe atëherë këtu është një veprim. Dhe ju mund të bëni gjëra të tilla si qasje të Vlera e një forme, hyni në disa HTML, Kontrolli i çfarë ndodh kur përdoruesi paraqet një formë, gjëra të tilla si kjo. Po. Audienca: Pra, në provim, ne do të duhet të di mjaft shumë nga dokumentacioni jQuery. Pra, duke pasur parasysh që ne të kopjoni / paste jQuery dokumentacioni të mashtrojnë fletë tonë, Ku është tërhequr vija? Ashtu si sa nuk kemi nevojë të dimë? HANNAH Blumberg: pyetje e madhe. Pyetja është në thelb duke pasur parasysh se ju nuk mund të hyni në dokumentacionin jQuery gjatë testit, sa duhet të di? Ne nuk do të presin që ju të vijnë me disa funksion të rastit që ne do të ju presin për Google. Gjërat që janë lojë të ndershme janë të unë do të thonë lloj vetëm e sintaksës së përgjithshme, qenë në gjendje për të zgjedhur nga ID dhe nga class-- kështu që ashtu si CSS. Dhe pastaj funksionet aktuale themself, ne do të ngjarë të ju them. Po. Audienca: Pra, kur ju zgjidhni nga klasa do të thotë dot. HANNAH Blumberg: Po, pikërisht. Të mirë. Kur ju zgjidhni nga klasa, ajo do për t'u dot në vend të shenjës paund. Po. Audienca: A do ju shkoni mbi diferencën midis përzgjedhjen nga ID dhe nga klasa? HANNAH Blumberg: Sigurisht. Dallimi në mes përzgjedhjen ID dhe përzgjedhjes nga klasa. Pra, siç tha Maria një pak më parë, ka mund të jetë vetëm një element HTML me një ID të caktuar, kurse klasë, ajo na lejon të grupit një bandë elementet e ndryshme së bashku, kështu që gjërat që janë të lidhura, por jo të njëjtë. A do të përgjigjet në pyetjen? Mbresëlënës. Po. Audienca: Çfarë ndodh nëse keni të shumëfishta gjërat që janë në të njëjtën klasë? HANNAH Blumberg: Çfarë ndodh në qoftë se ju keni gjëra të shumta që janë të njëjta klasë? Kështu, për shembull, në qoftë se ne jemi vetëm duke përdorur JavaScript të pastër, ne do të bëjmë diçka si document.getElementsByClass. Dhe pastaj çfarë që në fakt bën është kthimet një grup i elementeve. Dhe ju duhet ose të iterate mbi ata ose të gjejnë të cilat një që ju dëshironi. Kjo nuk do të japë një element i vetëm. Ajo do të ju jap një grup i elementeve. Pyetje e madhe. Ndonje gje tjeter? Mbresëlënës. Kështu që unë mendoj se në qoftë se ju jeni të njohur me çdo jQuery ju pashë në pset, ju duhet të jetë mirë për të shkuar. Pyetje? Oh, jo. Unë me të vërtetë kam për të mësuar. Qetësohuni. Ajo do të jetë mirë. Unë do të merrni atje. Le të flasim për Ajax. Pra, Ajax do të jetë a-- mirë, le të fillojë me atë që qëndron për. Kjo është një akronim. Ajo qëndron për Asynchronous JavaScript dhe XML. Dhe XML është në thelb do të jetë [Padëgjueshme] me një lloj të dhënave tona. Por ne nuk e kemi përdorur në të vërtetë XML. Në vend të kësaj, ne vetëm përdorni JSON. Pra, në thelb, është disa data-- asinkron, JavaScript, dhe të dhënat, në këtë rast, JSON. Dhe qëllimi ynë, siç kemi përmendur pak më herët, është që të jetë në gjendje për të bërë një kërkesë, kanë bërë që kërkesa gjë e saj në sfond, por vazhdojnë bëjë çdo gjë që ne kemi qenë duke synuar për të bërë. Dhe pastaj, kur ky informacion është gati, atëherë ne do të inkorporojë atë. Pra, le të shohim se çfarë kjo në fakt duket si. Dhe kjo, ju duhet të jetë pak e njohur nga pset8, një që ju sapo u kthye në. Kështu që këtu është një jQuery vlefshme Funksioni që të mund të dua të di? Për këtë shenjë dollarit. Pra, ajo thotë funksion jQuery, .getJson. Dhe çfarë ky funksion nuk është ajo merr një URL dhe disa parameters-- kështu që unë mendoj se në rastin e pset8, ajo ishte si, URL ishte articles.php dhe Parametrat ishte shkojnë = një kod postar. Dhe ai thotë, në rregull, të bëjë një kërkesë kjo URL me parametrat e dhëna. Dhe kjo ndodh vetëm. Kur ajo përfundon, është ose do të përfundojë me sukses ose ajo do të dështojë. Pra, kjo është ekuivalente e thirrjes Rob dhe kërkoni atë për të bërë diçka. Dhe atëherë kur ai e thërret përsëri, ai është ose duke shkuar për të thonë se unë jam bërë ose kam dështuar. Pra, në rastin kur ju jeni bërë, ju thoni, OK, unë jam bërë. Dhe pastaj ju e quani këtë funksion. Në këtë rast, ajo do të jetë një funksion që merr disa informata. Një ne zakonisht e intereson është të dhënave, të dhënat që ne ishim kthyer në fakt si rezultat i quajtur .getJSON. Dhe ju mund të bëni diçka me të. Pra, në rastin e pset8, ne e shfaqur atë si një listë. Fail do të jetë një funksion që quhet nëse kërkesa dështon për çfarëdo arsye. Dhe në rastin e pset8, ne vetëm console.log atë. Ndonjë pyetje për këtë? Po. Audienca: A mund të përdorni vetëm funksion theta në vend të funksionit, textStatus, jqHXR. HANNAH Blumberg: Sigurisht. Pra, vërtet, unë mendoj në pset, ne vetëm e pa të dhëna të funksionit. Pra, kjo është vetëm the-- po, OK. Kjo është ajo që pamë në pset. Kjo është krejtësisht në rregull. Këto janë vetëm nëse do të donit për të tërhequr më shumë informacion, këto janë gjëra që ju mund të merrni nga .getJSON. Pyetje e mirë. Ndonje gje tjeter? Po. Audienca: Pra .getJSON është Ajax? HANNAH Blumberg: OK. Pra, kjo është lloj i një pjese ndërlikuar. Kjo është një funksion jQuery që lejon që ju të bëni thirrje asinkron. Dhe ata që e quan asinkron, kjo është ajo që ne kemi qenë duke iu referuar si Ajax. Po. Kjo mori mua një kohë vërtet të gjatë për zbërthej kur isha student. Audienca: Mund të them se përsëri? HANNAH Blumberg: Po. Mund të them se përsëri? Ky funksion .getJSON, ajo është një funksion jQuery. Dhe kjo do të bëjë një telefonatë asinkron. Dhe këto thirrje asinkron, ne kemi janë duke iu referuar atyre si Ajax. Ndonjë pyetje të tjera? Ne kemi vetëm disa minuta të mbetura. Dhe Maria-së do të përfundojnë me sigurinë dhe pastaj ne jemi duke shkuar të jetë vetëm për bërë. MARIA ZLATKOVA: mbresëlënës, OK. Pra, kjo is-- vetëm të marrë një çift i sekondave të parë mbi këtë. Dhe kjo nuk është diçka me të vërtetë e madhe. Dhe mund dikush të më thoni pse? Çfarë po ndodh në foo dhe mund mund të potencialisht të rezultojë në diçka të keqe, dhe atë që është quajtur? Po. Audienca: Nëse argumenti se kjo është kaloi në është më shumë se 12 karaktere, ajo mund të del nga shtrati. MARIA ZLATKOVA: E drejta. Përsosur. Si quhet? Ju përmendët atë. Audienca: Buffer overflow. MARIA ZLATKOVA: Yup, tampon del nga shtrati. Pra, kjo është diçka që ne e referohen si tampon del nga shtrati. Dhe ne shohim se brenda e foo, ne kemi përcaktuar tampon tonë, c, me një madhësi prej 12. Megjithatë, në kryesore, ne nuk e bëjmë kontrolloni në asnjë mënyrë në të gjitha nëse argv1-- në mënyrë që ishte Argumenti i dytë. Ne nuk e kontrolloni nëse Madhësia e saj është e përshtatshme. Pra, nëse do të kishim një përdorues veçanërisht me qëllim të keq që vënë në disa argumentin që ishte më shumë se 12, dhe pastaj potencialisht përtej kufijve të që Argumenti, kishte disa kod ekzekutues se ai ishte duke u përpjekur për të bërë diçka të keqe me të; atëherë kjo, çfarë do të ndodhte, do ta pranoj kthimin adresa e funksionit foo, shkaktuar funksionin kur kthyer për të ekzekutuar atë kod. Dhe pastaj gjëra të këqija mund të ndodhë. A ka kjo kuptim për të gjithë? Dhe si mund të mbrojë kundër kësaj? Ndonjë sugjerim? Në thelb, brenda potencialisht foo, si mund të kontrolloni për t'u siguruar ne që kjo nuk mund të ndodhë? Audienca: Nëse madhësia 12 është tejkaluar, ju do të siguroj kujtesë shtesë? MARIA ZLATKOVA: Suggestion është, ndajë kujtim shtesë të madhësisë tejkaluar. Në fakt, ne mund të bëjmë diçka shumë të thjeshtë se kaq, si edhe. Ne mund të merrni vetëm gjatësinë string e argumentit që është futur, kontrolloni nëse kjo është më pak se ose e barabartë me 12-- e cila është ajo që ne duam atë të jetë për shkak se ne nuk duam ajo të tejkalojë kufijtë e tampon tonë. Dhe pastaj në qoftë se ajo nuk ka, ne mund të punojnë me argumentin. Dhe pastaj nëse bën atë, ne fakt duan të Yello potencialisht në përdoruesit. Por, kjo është se si ne do ta bëjmë atë. Po. Audienca: Mund të shpjegojë Quick vërtetë memcpy? MARIA ZLATKOVA: Oh, sorry. Po. Memcpy merr çfarëdo is-- vjen keq, OK. Memcpy merr çdo gjë që është në bar, çdo gjë që është miratuar mbi foo si argumenti command line. Pra, kjo do të marrë argv1. Argv1 quhet bar këtu. Pra, kjo do të marrë bar dhe ajo do të kopje atë në c. Audienca: OK. MARIA ZLATKOVA: Dhe kjo do të copy-- Argumenti i tretë i referohet vetëm për të se sa ajo do të kopje në c. Audienca: Ah. Pra, kopjimi këtij dikujt të gjithë atë, atëherë. MARIA ZLATKOVA: Po, kjo është kopjimit të gjithë atë. Yep. Së pari, ne sigurohemi bar nuk është i barabartë me null sepse kjo është një akrep. Pastaj ne të merrni gjatësinë e string bar. Ne jemi të sigurt se kjo është me pak se ose te barabarte me 12. Dhe pastaj, sepse ne kemi e bëri të sigurt, ne mund të vërtetë memcpy dhe të jetë i sigurt se kjo është në rregull. Ndonje pyetje? I madh. Kam dy pyetje vërtetë apo e rreme. A mund dikush të më thoni menjëherë nëse këto janë të vërteta apo të rreme? Po, kjo është e rreme. Pikërisht. Dy prej tyre janë të rreme. Pra, duke përdorur një fjalëkalim të vetme është ide e kurrë me të vërtetë mirë sepse në qoftë se dikush e di fjalëkalimin tuaj, ata mund vetëm hyni në të gjitha llogaritë tuaja të tjera. Dhe pastaj ikona të bëjë asgjë për të garantuar sigurinë. Ne zakonisht duhet të shikoni për HTTPS në vend të HTTP dhe URL. Dhe disa lloje të tjera të Sulmet që ne i kemi përmendur, që Davidi të ka përmendur në leksion, sulmet SQL injeksion. Ne tashmë e pamë se në qoftë se ne nuk-- Funksioni CS50 query bën të sigurt që SQL Sulmet injeksion nuk mund të ndodhë. Por nëse ne nuk ishin duke përdorur CS50, të japin kuotën, mbyll thonjëzat "në pyetje", ne do të duhet të bëni të sigurtë që të dhëna përdoruesi nuk është në fakt një SQL pyetje që do të shkaktojë gjithë tavolina tona për të rënë apo diçka të keqe për të ndodhë me database tonë. Rrëmbimi Sesioni është një lloj sulmi që ndodh kur disa të këqija Personi përdor sesionin e disa viktimave ID për të hyrë në informacionin e login. Pra, një shembull shumë të parëndësishme e që është si në qoftë se ne kemi një kompjuter publik, atëherë personi i keq shkrimet në dhe pastaj ata kanë cookie-t që janë të ruajtur. Dhe cookies nuk do të ndryshojë për seancë. Pastaj ne kemi viktima të shkojnë në dhe pastaj hyni në faqen e internetit. Cookies nuk do të ndryshojë për një seancë të caktuar. Dhe pastaj viktima shkrimet në në faqen e internetit dhe pastaj të largohet. Dhe atëherë personi i cili shkon prapa atëherë mund të ende përdorin ID e tyre sesion për të hyrë në informacionin e tyre. Pra, kjo është një shembull i si që mund të ndodhë. Dhe atëherë unë nuk do të shqetësohen shumë në lidhje me kodi të veçantë ose ndonjë gjë si ajo që mund të shkaktojnë këtë, por duke pasur një lloj ideje se çfarë variablat e përfshira në këtë janë. Dhe pastaj manipuluar header të dhënave është një tjetër lloj sulmi që ka David ka biseduar rreth. Dhe vetëm ajo i referohet çfarë mund të ndodhë kur përgjigja, HTTP përgjigje brenda kokë tonë nuk është pastruar si duhet. Dhe ndonjë nga fields-- për shembull, në qoftë se dikush overwrites një kokë Vlerat për të përmbajë asgjë më shumë se çfarë duhet contain-- dhe në fakt përmbajnë, për shembull, një 200 Kodi status OK, atëherë ata potencialisht mund të bëjë me qëllim të keq gjëra kur ata nuk jemi duke menduar për. Por unë nuk do të shqetësohen shumë shumë për kodin specifik që mund të shkaktojë kjo, vetëm lloj i të kuptuarit të nivelit të lartë gjëra të tilla si se. Unë mendoj se kjo është e gjitha që ne kemi për të mbuluar. Amazing. Çdokush keni ndonjë pyetje në ndonjë nga gjërat që kemi mbuluar? Po. Audienca: Pra, një lloj më shumë pyetje logjistike. Është përmbajtja e fokusuar kryesisht gjërat sipas quiz 1? MARIA ZLATKOVA: Pra, Pyetja është, është përmbajtja përqendruar kryesisht në gjërat pas quiz 1? Pra, fokusi është në pas quiz 1, me përjashtim që ne duhet të përqëndrohet në gjëra në pset5 dhe shumë nga strukturat e të dhënave që ne të mbuluar. Dhe ne nuk mund të themi se mund të injorojë asgjë para se për shkak se ajo është ndërtuar mbi atë si të mirë. Pra, të përqëndrohet në atë, plus material pset5 si të lidhura, duke përfshirë listat, oxhaqet, rradhë, dhe çdo gjë Ana kaloi. HANNAH Blumberg: E drejta. Po, kemi shkuar mbi të gjitha gjëra C Në fillim shumë shpejt. Por sigurohuni që të shqyrtojë atë. Kthehu mbrapa dhe të shikojnë quiz 0. Një çift shënime më logjistike, vetëm ndërsa ne kemi vëmendjen tuaj. Ne do të kemi orarin e punës si në hënën dhe të martën natën. Ata do të jenë në MD 119. Kjo është e gjitha në faqen e internetit, kështu që në qoftë se ju nuk e dëgjoni atë, nuk shqetësohet. MARIA ZLATKOVA: 08:30 deri ora 11:00. HANNAH Blumberg: Po, 08:30 deri ora 11:00. Ne do të jetë atje. Ne do të jetë atje për t'iu përgjigjur pyetjeve. Është dridhura bukur dhe argëtim. Ju djema mund të kërkoni ndonjë pyetje që ju keni në quiz 1. Dhe quiz 1 është në E mërkurë, fat aq të mirë. Nëse keni ndonjë pyetje, ndoshta vijnë bisedoni me ne këtu një-në-një. Ftohtë. Faleminderit shumë. MARIA ZLATKOVA: Thanks so much, djema. Audienca: Yay. [Duartrokitje]