[Sehemu ya 9] [vizuri zaidi] [Rob Bowden] [Chuo Kikuu cha Harvard] [Hii ni CS50.] [CS50.TV] Sawa. Kimsingi leo ni juu yako guys kuuliza baadhi ya maswali. Nipate kuwa na uwezo wa tanga kwa baadhi ya mada kwa kidogo kama hakuna mtu ana maswali yoyote kuuliza. Hopefully wewe. Je, mtu yeyote una maswali yoyote? Labda kutoka zamani Quizzes, mambo wewe si vizuri na kwa sasa. Ndiyo. [Mwanafunzi] Je, unaweza kwenda juu ya buffer mashambulizi kufurika? [Rob] Uhakika. mfano kuu kweli yanaweza kuwa sahihi hapa. mpango kuu nyuma ya buffer mashambulizi kufurika ni tuna baadhi ya buffer, hapa. Char c - ambayo ni tu wa kawaida 12 - lakini basi, sisi ni kuingiza kitu katika kuwa buffer lakini si kuangalia hasa ni kiasi gani sisi ni kuingiza. Hapa sisi ni kuingiza strlen (bar) ndani ya C, lakini ambaye anajua jinsi ya muda mrefu bar ni. Kama ni zaidi ya wahusika 12 basi hii ni ya kwenda kufurika buffer hii. Kuangalia picha hii - kama wewe kuchukua 61 utapata zaidi ya ukoo na aina hii ya layout na kushughulika na kuokolewa frame pointer na kurudi anwani na mzazi mara kwa mara stack na mambo yote haya halisi. Lakini hapa tu haja ya kujua kwamba tuna nafasi hii kidogo kwa ajili ya buffer yetu. Hapa tuna c (0) na kisha tuna c, 1, 2, 3, 4, 5 na kadhalika. Katika hali ya kawaida tunataka kujaza buffer hii kama kwa kawaida. Kama sisi kuingizwa 'hello' tunatarajia kuwa h-e-l-l-o / 0, na kisha tu rundo la nafasi tupu. Kwa hacker - oh, mimi nadhani hili ni mfano. Kwa hacker sisi kupata kitu kama hii ambapo nini re hasa kujaribu kufanya ni kawaida kupuuza kurudi anwani. Wakati wowote kuwaita kazi na stack sura yako anapata kusukuma kwenye stack kwamba sura ya stack anahitaji kujua jinsi - vizuri, kazi ambayo imekuwa kuitwa anahitaji kujua jinsi kurudi kazi hiyo aitwaye yake. Hivyo, kama wito kuu foo, foo mahitaji ya kurudi kwa kuu, na hivyo kwamba ni nini anwani hii kurudi gani. Lakini nini hacker kwenda kufanya ni override ni pamoja na kurudi anwani maalum ambapo tena - Little Hindi - si moja kwa moja lakini kila byte ni nyuma. Anwani hii kurudi mbali kama kompyuta ni wasiwasi kurudi kwa anwani hii ni sawa na kurudi foo au kuu au chochote kazi kuitwa yake. Hivyo ni kwenda na kurudi kwa anwani hii ambayo tu hivyo hutokea kuwa anwani hii ambayo aidha wakati mwingine nini kufanya hapa ni kutumia kurudi anwani ya kazi maalum kuwa wanajua kuna tayari. Siwezi kukumbuka nini kazi kuitwa. Mimi itabidi kuangalia it up baadaye. Hapa nini re kufanya ni kupita kurudi anwani kwa stack yenyewe, na hii ni kwa kiasi fulani ya ajabu ambapo kuna mifano ya kumbukumbu ambapo - kumbukumbu unaweza kuwa mgawanyiko juu katika kusoma tu, kusoma kuandika, na kumbukumbu kutekelezwa ambapo tumeona kumbukumbu ya kusoma tu kabla ya ambapo - kama mimi kusema char * s = hujambo siwezi kurekebisha hello. Hiyo kumbukumbu ya kusoma tu. Kuna pia wazo hili la kumbukumbu kutekelezwa ambapo kumbukumbu kutekelezwa itakuwa Nakala sehemu ya maadili ya yako. Kuangalia anwani yako ya kawaida nafasi layout - Naamini kuwa kinaendelea kuwa picha nzuri - hii kazi - ambapo tuna stack yetu hapa. Tuna data kumbukumbu. Kupuuza hii kimsingi. Hii ni chungu yetu. Na kisha tuna chini hapa kuu mpango kanuni zetu. Hii ni sawa na mahali ambapo sisi kuweka masharti yetu kama char * = hujambo na kwamba kusoma tu. Lakini pia unaweza alama mpango huu code kuu kama kutekelezwa. Na kama wewe ni kufanya hivyo au mfumo wa uendeshaji yako haina kwamba usahihi basi hii inapaswa kuwa mahali pa tu katika kumbukumbu kwamba kanuni unaweza kweli kutekeleza ambayo ina maana kwamba aina hii ya buffer kufurika mashambulizi tuna zaidi ya hapa itakuwa haifai kwa sababu hii ni kujaribu kutekeleza kumbukumbu hadi hapa katika stack yetu. Taarifa picha ni ya kwanza. Tuna stack wetu kukua up. Hapa stack ni kuongezeka chini. Kwa madhumuni CS50 stack kukua. Inawezekana kukwepa aina fulani ya buffer kufurika kwa kuwa maeneo haya kutekelezwa ya kumbukumbu katika mikoa mashirika yasiyo ya kutekelezwa. Lakini tu hivyo hutokea kwamba mara chache ni kumbukumbu kutekelezwa alama kama kutekelezwa. Ni tu huelekea kuwa kusoma tu na re-kuandika ni mambo tu kwamba ni kutumika, hivyo hii ni bado sana ufanisi. Na hapa tunaweza kuweka chochote tunataka. Haikuwa kweli amefanya kama pset katika 61 mwaka huu, lakini kama ukiangalia katika sadaka ya mwaka jana ya au mwaka yoyote ya awali moja pset ni wewe hasa wanatakiwa kuingiza katika hapa kificho kwamba zinatakiwa baadhi ya magazeti thamani maalum au kurudi thamani ambayo ni tofauti na thamani kwamba zinatakiwa kuchapishwa. Au hata zaidi kwa uwazi, anataka wewe piga simu au kuandika - hivyo hii itakuwa kurudi hadi hapa na kisha utasikia kutekeleza baadhi coding hapa, na cleverest ya kufurika kisha wakayarudia yale yale anwani hii kurudi kutumika kuwa. Hivyo hata kama sisi zinahitajika kupuuza hii kuja hapa, sisi bado kukumbuka kwamba kurudi anwani mahali fulani ili tuweze kurudi kuu au chochote, na ni kama sisi kamwe hata niliona kuwa mambo potoka. Lakini mambo alifanya hivyo hiyo kesi ambapo labda ndani ya hapa sisi gelbroke iPhone yetu. Mambo kwenda kama kawaida - kama sisi kuendesha programu baadhi na mambo kuishia kurudi chochote ni wanatakiwa kurudi, lakini wakati huo huo wewe imeweza kuharibu mfumo mzima wa uendeshaji. Huna haja ya kujua code kuhusu kufurika buffer au kweli kuchukua faida yake. Huna haja ya kujua mawazo ya msingi ya hii ni buffer hiyo iligharikishwa, na hii ni sababu kwamba inaweza ukifurika kwa sababu sisi siyo kuangalia kama sisi ni kweli ndani ya mipaka yake. [Mwanafunzi] ufumbuzi kwa ajili ya kuzuia ni kuangalia tu mipaka? [Rob] Ndiyo. Katika kesi hiyo ufumbuzi itakuwa unaweza ama kusema kama strlen ya bar, ni mkubwa kuliko 12-1 - kwa sababu unahitaji / 0 mwisho - au unaweza manually kufanya kwa kitanzi kwamba nakala kwanza wahusika 11 tu, au tu chochote ambapo wewe ni kweli kuangalia kuhakikisha huna kufurika kwamba buffer. Maswali mengine? Ndiyo? [Mwanafunzi] Je, unaweza kuzungumza juu ya inajaribu na labda kitu kuhusu programu (inaudible). [Rob] Uhakika. halisi mpango - sisi kamwe kufanya kufanya utekelezaji wa trie juu ya mtihani kwa sababu itakuwa ni haki ya wale ambao meza hash. Na vile vile sisi kamwe kufanya kutekeleza meza hash juu ya mtihani kwa sababu itakuwa ni haki ya wale ambao inajaribu. Unapaswa lakini kujua struct ya trie au struct ya meza hash au chochote. Hiyo ni kweli kweli ya aina yoyote ya muundo data tumeona. Wanaohusishwa orodha, skews sifa, miti binary - unapaswa kuwa na uwezo wa kufafanua structs wale kwa moyo. trie - hiyo ina maana kitu tu unahitaji kufanya ni labda tutaweza kutoa baadhi neno au kitu na tutaweza kusema kujenga trie kwamba - tutaweza kutoa labda seti ya maneno na sisi ni kama kujenga trie kwamba inawakilisha kamusi hii. Hebu kufanya kamusi yetu paka na mbwa. wazo la trie ni sisi kuanza nje na safu hii - 26 inafaa - na katika kila yanayopangwa halisi index ya yanayopangwa sambamba na barua sisi ni wasiwasi kwa. Hivyo hapa, kama sisi ni kujaribu kuingiza paka ndani ya trie wetu tabia ya kwanza ni 'c' ambayo ni kwenda kuwa 'kama ni 0 kisha b ni 1, c ni 2. Sisi ni kwenda katika index pili, na sisi ni kwenda kujenga trie mbali ya kwamba. Tunakwenda na 26 inafaa. Na kisha sisi ni kwenda index tabia ya pili ya paka. Hiyo ni 'a' ambayo ni kwenda kuwa 0 doa. Na kwamba kwenda na 26 matangazo. Kisha sisi kwenda 't' na sisi pia kuwa kwamba kuja chini ambayo ni kweli ni aina ya muhimu kwa sababu - hebu kuwa ni kuja hapa. Hapa ni trie yetu kwa ajili ya 't'. Hebu sema hii ni index 't' ni 19. Jambo muhimu kukumbuka kuhusu inajaribu ni huwezi kuweka wimbo wa kuyatumia haya. Unaweza pia kuwa na kuweka wimbo wa kama hii ni kweli mwisho wa neno. Kwa hiyo, ndani ya hapa sisi wanahitaji aina fulani ya bendera kwamba anasema sawa, hii ni kweli mwisho wa neno. Sababu ya kuwa kama sisi baadaye kujaribu kuingiza janga katika kamusi yetu ambayo ina sawa kuanzia herufi 3 lakini unaendelea zaidi tunahitaji kutambua kwamba hii ni mwisho wa neno. Au kwa matumizi mengine kama sisi kujaribu kuangalia up 'ca' ambayo labda ni si neno lakini sisi kupata chini ya hapa kisha sisi - au itakuwa ni c na kisha sisi kuangalia - tunahitaji kutambua kwamba hata ingawa kuna pointer kuja nje ya node hii haina kuwakilisha mwisho wa neno. Hiyo, ni nini maana kwamba - nini wewe kwenda kusema? Hii ina maana gani struct yetu inaonekana kama? [Mwanafunzi] Ni safu ya kuyatumia kwamba ni 26 kwa muda mrefu na kisha bool walikuwa au si walikuwa. [Rob] Yeah. Hivyo, tutaweza kuwa na struct trie * kuyatumia - hapa tutaweza kusema [26] juu ya na kisha semicolon zaidi ya hapa. Lakini juu ya pset, sisi pia haja ya akaunti kwa ajili ya apostrophes, ambayo ilimaanisha unahitajika ngumu-kificho kwamba apostrophe na index 27 au kitu. Lakini hapa sisi tu huduma ya juu 26. Na hivyo tunahitaji labda char au bool - hebu simu yake ni neno la Mungu. Hiyo ni 2 ya mambo 3 Nafikiri ungependa milele unahitaji kujua kuhusu inajaribu - kujenga yao, struct wao, na jambo la mwisho ni kukimbia muda wao. Nini ni Runtime ya trie - au chaguo-msingi katika trie? Hii ni pale sisi kusema ni o (k) ambapo k ni urefu wa neno sisi kutokea kwa kuwa na kuangalia up; lakini wakati huo huo tunasema - angalau kwa ajili pset 5 Speller ya - tunasema neno mrefu katika kamusi ni wahusika 45, hivyo hii ni kimsingi O ya 45 ambayo ni ya muda mara kwa mara. Kwa hiyo, kama kuna amefungwa juu juu ya neno lako mrefu basi - au hata kama English dictionary - kuna amefungwa juu juu ya neno lako mrefu. Au kamusi yoyote - kuna mrefu amefungwa juu ya neno juu yako. Hakuna jambo gani wewe kufanya ni wakati mara kwa mara, lakini O ya k ni nzuri kwa sababu kuna kweli ni tofauti kati ya mbio kusema 45-tabia ya neno dhidi ya alfabeti ambayo ina maneno tu hadi herufi 3. Jambo jingine kuhusu ni kwamba - oh, kwa sababu tu kusema kwamba 45 hutokea kwa kuwa neno wetu mrefu ni aina ya silly kwa sababu wakati huo huo hebu sema algorithm ni O ya N. Vizuri sawa, kwa sababu kumbukumbu tu inasaidia hadi 2 ^ 32 ka, kisha N ni saa zaidi bilioni 4 na kwamba wakati mara kwa mara, ambayo ni kwa nini wakati fulani ni silly kusema jambo la aina hii ambapo kuna amefungwa juu kwamba tunaweza tu kupunguza kwa wakati mara kwa mara kwa sababu kila kitu ni wakati mara kwa mara wakati unafikiri katika njia hiyo. Lakini sisi pengine kukubali wawili hawa. Katika hali yoyote kueleza ama kwamba O (1) ina maana kuwa urefu juu-imepakana ya neno; O (k) ina maana urefu yako ya neno - vizuri, k maana urefu wa neno. Yeah. [Mwanafunzi] Je bool - kwa sababu wakati alifanya trie yako ilionekana kama ni - ungependa kwenda paka na kisha kwenda pointer ijayo na kisha kumweleza kama kwamba ni sawa na kweli - ungeweza kuweka kwamba kweli katika kama na t? [Rob] Hebu fikiria hii ni kesi ambapo mengi ya mifano unaweza tu kujaribu na kuja na mifano rahisi na / au uliokithiri na nini ni lazima, hivyo hebu fikiria ya neno '. Katika trie yetu ya awali - itakuwa tunataka kuweka 1 hapa, au tunatarajia wanataka kuweka 1 hapa chini. Napenda kusema kwamba katika mwisho ingekuwa pengine kuwa ama / au. Siwezi kufikiria sababu - au kweli wewe wouldn't - sababu napenda kuiweka chini huko ni kwa sababu huna hata haja ya kwenda mbali. Sisi kamwe haja ya kutenga trie hii. Sisi tu ya kuweka 1 hadi huko. Hii ni bado akizungumzia null. Kama sisi ni kwenda tu na wahusika moja hakuna sababu ya kupanua chini ya trie nyingine tu na alama kwamba barua kama kutumika. Vile vile, kama sisi alikuwa na kuweka 'chini kuna kisha lazima yote haya ingekuwa tu kuwa 0 wakati wote. [Mwanafunzi] Lakini si tunahitaji kuanzia trie kwamba uhakika na hii 'a'? [Rob] Tuna baadhi ya kimataifa au kitu struct trie * t ambayo anasema hapa, lakini hiyo ni pointer. Siyo full-barugumu trie hiyo akizungumzia yake. [Mwanafunzi] Sawa. Jinsi gani sisi hawawajui barua 'i'- na neno I? [Rob] swali lake ili kujibu hiyo. Kushikilia. Hiyo ni suala ambapo trie katika na yenyewe - Sijui njia pset ingekuwa imeandikwa yake. struct uliopita ilikuwa mbaya. Lakini tunaweza pia kufanya struct node ni bool - na pointer - kuna kweli njia nyingi unaweza kuandika. Vinginevyo trie haina haja ya kuwa na struct. Inaweza hata kuwa trie - typedef node * - node [26] ni trie, na hii ni tena struct. Sasa kuna kwenda kuwa - Nina kujaribu kufikiria njia ambayo pset ingekuwa inatarajiwa wewe. [Mwanafunzi] Mimi vunjwa up kuwa tathmini ya kikao na nadhani wao tu kwenda - kama kama una kisha kwenda ijayo - [Rob] Hiyo ni jinsi ya kufanya hivyo? [Mwanafunzi] Na kisha kama kuna kweli kuna haifanyi kazi - [Rob] Yeah. Kwamba anafanya kazi. Ni taka nafasi ya - ninyi lazima kuwa na kiwango cha wote wengine wa trie kuwa wewe si haja katika nafasi ya kwanza. Hapa ni kuwa mbaya na kila - kimsingi nini mimi kujaribu kufanya hapa ni mshirika - badala ya kuwa 26 kuyatumia kwa inajaribu yako, ni 26 bool pointer, bool pointer, bool pointer, na kadhalika. [Mwanafunzi] Huwezi kufanya 2 arrays? safu ya bools na safu ya kuyatumia? [Rob] Unaweza lakini basi d haja ya - 2 arrays ya booleans na kuyatumia. Ungependa haja ya kisha kujenga safu yako ya booleans - safu yako ya booleans haja ya kuwa na kama kubwa kama trie kwa sababu huwezi na 26 booleans. Ina kukua kwa kila iwezekanavyo - kama trie yako ina zaidi ya 26 maneno ya kweli au uongo iwezekanavyo. Katika hatua ili wapate kama vizuri tu kuwa struct moja ambayo trie yenu inakua chini na. Hii haionekani haki kwa sababu - nini nataka hapa? Hivyo, trie * t - unaweza kufanya typedef (node ​​*) [26] trie; ambayo inaweza kuwa syntax mimi nina kuangalia kwa. Na hii lazima tu kuwa trie mara kwa mara. Mimi nina uhakika. Lakini hiyo ni njia ya sisi alifanya hivyo katika mapitio, ili kazi kikamilifu faini, pia. Katika kesi ambayo kama ni bool tu ni neno na kisha safu ya 26 basi huna kwenda ngazi ya pili. Mimi itabidi kufikiri juu ya njia napenda kufanya hivyo. Maswali mengine? [Mwanafunzi] Je, mimi kuuliza maswali kuhusu kitu kingine? [Rob] Ndiyo. [Mwanafunzi] Je, unaweza kwenda juu ya nini tofauti ni na wakati d kutumia jQuery dhidi ya Ajax? [Rob] Wao ni katika na wenyewe tofauti kabisa. JQuery gani kuwawezesha Ajax. Ni gani kutupatia baadhi ya matumizi ya rahisi ya Ajax. Lakini Ajax huja kusafirishwa kwa JavaScript. JavaScript ina uwezo Ajax. Wote Ajax maana ni liken mimi niko tayari juu ya ukurasa na wakati mimi nataka - wakati mimi bonyeza kitu mimi hawana haja ya upya ukurasa download habari kwamba mwezi. I just ombi kwamba habari mpya. Unaweza kuangalia katika Facebook au kitu. Kukagua mtandao. Kuogopa hii. Chini hapa tunaona kwamba sisi ni kupata maombi hayo yote. Sasa wakati mimi bonyeza - vizuri, ni kufanya Ajax kabla ya mimi hata bonyeza kitu chochote. Lakini kama mimi bonyeza hii, basi ni kwenda kufanya rundo la maombi chini hapa ambayo tu kufanya maombi hayo - oh, sasa ni zaidi ya hapa. Hebu mahitaji. Je, hii tena. Tunaona kwamba sisi kupata maombi hayo yote, lakini hii inaweza bado kuwa katika mchakato wa ukurasa upakiaji. Taarifa Facebook ni kufanya maombi hayo mara kwa mara hata baada ya ukurasa ina kubeba. Na kama mimi bonyeza hapa, kutakuwa na kufanya maombi ya baadhi ya zaidi kwa baadhi data kwamba ni katika kukabiliana na kitu mimi tu kwavyo. Hiyo ni nini Ajax ni. Ni inakuwezesha kuvuta kwa data kwamba hakuwa kupakuliwa na ukurasa awali. JQuery ni tofauti. JQuery ni maktaba JavaScript kwamba inafanya mengi ya mambo rahisi. Pamoja na jQuery ni mengi ya faida ni hii tu - ishara ya dola - ishara ya dola ni variable halali katika JavaScript. Hivyo, jQuery - wote ni kufanya ni kusema kama var $ = rundo zima la stuff - kama baadhi ya kazi kubwa na hii mambo yote katika it - na kisha unaweza kutumia ishara ya dola katika njia kama ("# Footer") $. Style ("text-align", "katikati"). JQuery inatupa aina hii ya syntax ambapo faida kubwa - ina sifa nyingine lakini nini tunataka wewe kuzingatia zaidi ni kuwa tu na uwezo wa kuchagua mambo kama hii. Katika mara kwa mara, wazi wa miaka JavaScript unaweza kufanya mambo kama hati-dot-kupata hiki na ID footer-dot - sijui ni nini katika hatua hiyo - kitu kuhusu CSS au style au kitu - lakini kisha mengine, hebu sema tulitaka kuchagua kwa darasa. Sasa sisi ni styling kila kitu kwa darasa footer na mtindo huu. Hata kama tulitaka style aya yoyote. Hivyo, selector hii - kuwa na uwezo wa kuchagua mambo katika dom kama hii ni incredibly rahisi tangu katika wazi umri wa JavaScript ingekuwa kufanya hati-dot-kupata mambo kwa jina darasa au chochote ni, au kama nilitaka tag Ningependa haja ya kusema kupata vipengele kwa jina tag. Kwa hiyo, mimi haja ya kujua njia maalum kwamba mimi kupata yote ya mambo haya. kazi ni kwenda kuwa tofauti kutegemea kama mimi nina kutumia darasa au ID au tag au nini, ambapo jQuery tu gani kwamba kwa ajili yangu. [Mwanafunzi] Je jQuery kwenda kutumika wakati unafanya styling ya awali ya ukurasa? Au ili kubadili styling baada ya ni tayari - [Rob] Kwa mabadiliko hayo. [Mwanafunzi] Baada ya ni tayari kubeba. [Rob] Yeah. Styling yoyote ya awali - vizuri, hata - kwa ujumla bila kutumia aina hii ya mabadiliko. Wewe bila mabadiliko - hii ingekuwa kazi kikamilifu faini. Lakini kwa kawaida bila kubadili style kama hii. Badala yake, utaweza kuwapa darasa mpya au kitu ambapo CSS umeelezwa kwa darasa kwamba kwa njia fulani. Kwa kutoa vitu hivi mimi nina kuchagua darasa mpya Mimi nina kutumia mitindo ambayo tayari kupakuliwa. [Mwanafunzi] Basi kuchagua michache ya checkboxes na mambo ambayo umechagua mabadiliko ya mtindo mpya na kuanza kuangalia tofauti. [Rob] Yeah. mambo mengine kukumbuka juu - vizuri, kuna kazi kadhaa unapaswa kukumbuka kuhusu jQuery. Hebu kusema kwamba sisi ni kuchagua kitu kwa ID P. [Mwanafunzi] Je, daima kuwa na matumizi ya pound? [Rob] Hii ina maana ID. Ni sawa na CSS, hivyo CSS selectors - ni aliongoza kwa hiyo. Ambapo katika CSS kama nilitaka style footer - au kitu na ID footer - itakuwa kama text-align: kituo hicho; utakuwa haja ya kuandika CSS juu ya mtihani, lakini unahitaji kujua selectors. Unahitaji kujua nini - unahitaji kujua jinsi ya kusoma. Lakini sisi kamwe - huna haja ya kukariri yote ya mbalimbali iwezekanavyo styling mambo. Au yeyote kati yao. Mambo JQuery unapaswa kukumbuka - unapaswa kukumbuka dot-HTML, na mfano wa kawaida katika jQuery - wacha kuandika upya hii. mfano ni ya kawaida tuna $ ("# f"). html Kama mimi kuweka mabano wazi tu kwamba maana ya kupata HTML; ambapo kama mimi kusema HTML na kuweka chochote mimi nataka katika hapa - baadhi kiungo kwa kitu - kuweka kitu ndani ya mabano sasa seti HTML. Hiyo ni pretty kawaida miongoni mwa kundi la kazi. Kuna mpango huo kwa maandishi ni. tofauti kati ya HTML na maandishi ni kwamba Nakala ni kwenda kuingiza hii kama halisi ya chini-kuliko, zaidi-kuliko badala ya kama nanga tag. Na maandishi ni kwenda kuwa sawa kama mimi tu kufanya hivyo. Ni kwenda retrieve Nakala ya hati - si HTML ya hati lakini maandishi tu ndani ya kipengele hiki. Mtu mwingine ni kama 'f' hutokea kwa kuwa ID kwa ajili ya pembejeo, kisha hash-f-dot-val - kama nataka kuweka mchango kwa kitu kama - hebu sema mimi kugonga checkbox na mimi nataka kuweka thamani default - dot-val - I hawajui hata - 3 - ili moja kwa moja kuingiza ndani ya sanduku Nakala 3, lakini kama mimi kusema 3-dot-val, ambayo retrieve chochote kwa sasa ni katika sanduku Nakala kwa ajili yangu. Hii ni muhimu kwa aina uthibitisho ambapo kama nataka tu kuhakikisha kwamba kwa kweli kujazwa mambo yote. Njia moja ya kufanya hivyo ni kama baada ya mimi kugonga kuwasilisha ni inevitably alimtuma ukurasa baadhi ya server - kama kwa sisi itakuwa PHP - na ambayo kujaribu mchakato data na kusema hawakuwa kujaza kitu nje, ili sasa maelekezo yao kwenye ukurasa mwingine kwamba anasema hakuwa kujaza kila kitu nje. Badala ya kuwa na kufanya hivyo, katika JavaScript / jQuery unaweza tu kuona kama val ni tupu. Au ni val - quotes tupu. Hiyo inaenda tu - sasa tunaweza macho yao kwamba hawakuwa na kujaza uwanja huu. Bila ya shaka huna haja ya kufanya PHP server-upande kuangalia kwa sababu unaweza tu afya JavaScript katika browsers wote. Lakini JavaScript inafanya rahisi kwa ajili ya wale ambao hawana kuwa ni ulioamilishwa, na karibu wale tisini na tisa-uhakika na kitu asilimia browsers kuwa ni juu ya siku hizi. Watu wachache sana kugeuka JavaScript mbali. Ni user urahisi. Unahitaji kufanya PHP uthibitisho. Unapaswa kufanya JavaScript uthibitisho. [Mwanafunzi] gani # f rejea hapa? [Rob] gani # f rejea? Kuna baadhi ya hiki katika hati yangu na ID 'f'. Tutaangalia - pengine Facebook ina mengi ya mifano ambapo kama nikija mambo kuangalia hapa chini ya mambo tag naona div fulani hiyo kuwa yalionyesha up hapa - au ni ya ukurasa mzima - yeah, ni juu huko. Hii ina ID pagelet_bluebar. Katika console mimi kudhani wao ni kutumia jQuery. Kwa hiyo, mimi inaweza kuchagua pagelet_bluebar ili teua, na mimi alifanya kitu kibaya. Hebu jaribu - au labda wao si kutumia jQuery na kwamba tabia ya mapped kwa kitu kingine. mfano bora katika kitu ambacho mimi kujua ni kwa kutumia jQuery - bado kuangalia mambo yetu hapa - tuna hapa darasa sawa na Upau wa Uabiri. Hili ni jambo kwa darasa Upau wa Uabiri, hivyo ndani ya console yetu tunaweza kuangalia juu ya jambo kwa darasa Upau wa Uabiri. Hapa tunaweza kitabu juu ya hili na kuona kwamba ni nini hii ni. Kama nilitaka kufanya maandishi. Hii ni Nakala ya kwamba, hivyo mimi kuona mazingira kwa ajili ya ripoti juu ya logi nje ambao wote ni chini ya hapa, lakini bado Nakala ndani ya kuwa tag HTML. Mimi naweza kuweka HTML kwa baadhi tu ya kiungo, hivyo mimi itabidi kujikwamua bar yangu. Sasa kwa kuwa got kuondoa header kabisa hivyo tu ni wanaohusishwa na YouTube. Na ni, kuna mfano fomu? Hapa ni aina. Naweza haki-click na kukagua hiki kuja haki hapa. Mimi naona kwamba ID yake ni Nakala search, hivyo chini hapa kama mimi kufanya ID Nakala search. Mimi itabidi kuleta juu yake na mimi kuona kwamba ni jambo sahihi nilikuwa ajili ya kutafuta. Kama nataka kufanya. Val itakuwa nipe nini nilikuwa typed huko. Kama nilitaka kufanya hujambo kutakuwa na mabadiliko hayo hapa hujambo - jQuery. Bila shaka mimi naweza kufanya ujinga kama document.get hiki na ID - Nakala search - Mimi wala hata kujua ni nini katika hatua hii - dot thamani - hapana, mimi alisahau kuwa guy. Kwa hiyo, hiyo ni hello. Sijui jinsi Ningependa kuweka sawa kitu. Yeah, ili iliyopita kwamba. Lakini huna haja ya kutumia haya na wengi sana Nje wakati huu jQuery matumizi uhakika. Hata kama juu ya mradi wa mwisho - kama wewe ni kufanya mtandao mradi - Jambo la kwanza Mimi kupendekeza ni pamoja na tu jQuery hivyo unaweza kupata urahisi wa kazi hizi zote. [Mwanafunzi] Nadhani aliona njia mbalimbali kupata hiki kwa kutumia dom. Je, una kutumia dot na kisha kuendelea chini? [Rob] Unaweza kufanya hivyo. Sijui kama ingekuwa kazi vizuri sana. Ni vigumu navigate kwa njia hiyo. Mfano mmoja ni - I hawajui hata kama tuna aina yoyote - lakini document.forms ni kwenda na kurudi orodha ya aina hiyo juu ya ukurasa huu, kisha naweza kufanya document.forms 0 ni kwenda kuwa aina ya kwanza. Dot - sijui nini tumekuwa aitwaye kwamba - hivyo haina hata jina, hivyo labda pembejeo kazi. Hapana Mimi wala hata kujua jinsi ya kupata wakati huu - kupata hiki-I-tag jina pembejeo. Yeah, kwamba alinipa pembejeo, na sasa nataka 0 pembejeo na mimi unataka kuchagua thamani yake, ili kwenda kuwa maandishi. Mimi nilikuwa na kuishia kufanya kupata mambo kwa jina tag anyway. Huenda kuna baadhi ya njia ya kuchagua ni moja kwa moja kupitia fomu 0, lakini Kitu kizuri kuhusu hii bado ni kama mimi tu alikuwa kupata vitambulisho aitwaye pembejeo waliokuwa mtoto wa aina hii, vinginevyo kama mimi tu kufanya hivyo moja kwa moja hadi mbele hii itakuwa kuchagua mambo yote juu ya ukurasa mzima, katika hati nzima badala ya fomu kuwa na pengine hata kuwa moja nataka. Mimi wala hata kujua ambayo moja ni. Mimi sijui. Nadhani kwanza pembejeo hiki juu ya ukurasa wetu ni hii checkbox kidogo. [Mwanafunzi] Hii ni pretty unrelated na uwezekano wa aina ya silly, lakini juu ya jibu muhimu inasema kwamba PHP - Sijui kama ni jibu muhimu au maelezo lakini anasema PHP ni server-upande na JavaScript ni mteja upande. Ni tofauti kati ya 2 nini? [Rob] tofauti kati ya JavaScript mteja upande na PHP server-upande. Kama una habari za kufyeka / JS node kutumika kabla ya kudhani kuwa JavaScript si tu mteja upande lakini kwa ajili ya CS50 ni - au angalau kwa ajili ya jaribio huu ni. PHP kuwa server-upande. No JavaScript. Wakati kuandika tovuti yako utakuwa kuandika PHP kwenye kompyuta. Wewe kamwe kuwa kuandika JavaScript kwenye kompyuta. JavaScript mwisho juu kupata alimtuma browser ambapo JavaScript code executes. Na JavaScript code mahitaji ya kuishi katika browser kwa sababu vinginevyo wakati mimi nataka tu kufanya aina yoyote ya JavaScript-y kitu kama kubonyeza juu ya hili, Mimi si kupakia upya ukurasa. Hii ni JavaScript re-formatting mambo kwa ajili yangu. Kama JavaScript aliishi server, kisha napenda haja ya inevitably kuomba kitu Server kujua nini cha kufanya. PHP - hakuna kitu kama PHP katika browser. Wakati mimi kuomba ukurasa - basi sema hapa mimi ombi ukurasa fulani. Hiyo ina maana kwamba hii ni kwenda kuomba - mahitaji - ni kwenda kwa mahitaji ukurasa huu - hivyo ombi hili huenda nje server yetu. Anaona kwamba mahitaji ya kurudi thread hii hasa kwa ID hii hasa, hivyo sasa hiyo kwenda kuwa baadhi ya PHP kwamba PHP mkalimani ni kwenda kutafsiri ukurasa kwamba na kuigeuza katika tu HTML, CSS, labda JavaScript, chochote. Ni PHP kwamba michakato ya ombi hili na inapata wa maandishi na mambo kwamba mimi nina kweli kutafuta kutoka database. Lakini nini majani server ni HTML / JS / CSS. Hakuna PHP ambayo majani server kwa sababu kama ni kweli alifanya kisha kisakuzi ingekuwa hakuna wazo la kufanya na ni kwa sababu hajui nini PHP ni. Lakini katika nia hiyo kwa sababu JavaScript ni mteja upande, unaweza kamwe kupata MySQL kutoka humo. Kwa sababu PHP ni server-upande huna kupata MySQL kutoka humo. [Mwanafunzi] Je, unaweza kwenda juu ya baadhi ya masuala ya usalama na cookies katika HTTP? [Rob] Wale ni mambo tunakwenda haja ya kujua. Baadhi ya masuala ya usalama na cookies katika HTTP. swali kubwa hapa ni tunaona hapa kwamba kuki yangu ni PHP / ID. Hiyo ni kama PHP wote kikao. Kikao yako ni kitu ambacho ndani ya PHP kamwe haja ya kuwa na Ilisahihishwa kwa sababu ni server ambayo ina mamlaka kamili juu ya kikao. Huwezi kugusa wakati wote. Lakini ni kuki hili - moja - na mimi nadhani unaweza kuingia katika kama yangu hivi sasa kama alitaka kutumia - lakini ni kwamba kuki kwamba - inevitably kufanya ombi moja kwa server. server anarudi ukurasa. ombi ni kosa. Ni tena ana wazo lolote wewe ni nani. Kwa hiyo, ombi ijayo kufanya ni kwenda kwa pamoja na kwamba cookie ili anajua hii ni mtu ambaye alifanya ombi hili kabla ya. Hii ni data kikao kwamba ni kuhusishwa na mtumiaji huyu. Hiyo ni kwa nini huna kuingia kwa ajili ya kila mmoja na kila ukurasa kutumia. suala la usalama hapa ni kwamba cookie ni alimtuma nje juu ya mtandao. Sisi ni kutumia HTTPS hapa, hivyo katika kesi hii hiyo ina maana kwamba sisi ni encrypting mambo haya. Mtu hawezi kuja na tu kuiba cookie yangu na sasa server kufikiri wao ni mimi. Lakini kwa moja HTTP wanaweza. Tu kama mambo haya WireShark / FireSheep kwamba unaweza tu kusikiliza yote ya wi-FIS katika hewa na kukatiza chochote unataka, hivyo yeah. [Mwanafunzi] aina ya sawa hatari ya usalama ni hifadhi ya user ID katika post kwa sababu ambayo inaweza kuwa na uhuru mwisho kwa kutumia consoles na mambo. [Rob] Ndiyo. Kuna mengi ya masuala ambapo kama tu chochote ambacho huja kutoka kwa mtumiaji unahitaji kuhalalisha. Kuna mengi ya matukio ambapo itakuwa na manufaa kwa kama mimi nina kuhusu kufanya post. Blah, blah, blah, blah, blah. Kisha mimi kugonga reply. Itakuwa muhimu sana kama ombi baada ya ni pamoja na ID yangu kwa sababu  Nataka kujiunga baada ya hii na mimi. Lakini siwezi kufanya hivyo kwa sababu mimi niko huru kufanya ombi baada - tu kama manually kuja na post yangu ombi mwenyewe - kwamba anatumia user ID yako na sasa itakuwa baada ya kama wewe. Hiyo ni kwa nini server-upande mimi hawezi kutegemea maombi baada ya zenye sahihi ID user. Hiyo ni kwa nini ina ni katika kikao yangu. Basi, mimi kuangalia juu user ID yako katika kikao yangu safu na mimi kuingiza kwamba katika orodha ya yangu kama mtumiaji ambaye kweli alifanya baada ya hii. [Mwanafunzi] Na kwamba ni ya msingi juu ya cookie yako? [Rob] Yeah. Ni matumizi ya cookie kwa mechi ya juu kama mtumiaji ambaye alifanya ombi hilo. Ni pulls nje user ID kutoka kikao na kwamba kisha kuwekeza katika orodha ya kutumia kwamba user ID. Hii kifungo kama - kile ambacho ni kweli kufanya ni - Mimi si kwenda kupata hiyo hapa. Ni kwenda kuwa kazi Ajax Ajax kazi ni nini? Hebu kujua nini wangu JavaScript ni. Ilikuwa ni mradi CS50 wakati iliyopita. Siwezi kukumbuka ni nini. Ajax kazi - kazi wote Ajax ni kufanya kufanya ombi Ajax kwa ukurasa kwa ID hii - na ID 22,453. Siyo hata ombi post. Ni ombi kupata ambayo inafanya hata rahisi. Kama nilijua nini URL ni - ni kitu kama kama hii / ID = 22,453 - au ID = 22,453? - hivyo kutembelea URL hii kama hiyo. Ambayo si kama mengi ya tatizo lakini ni incredibly rahisi kuandika kitanzi ambayo ni kwenda tu kutembelea URL hii tena na tena, ambayo ni kwa nini unaweza kuona Isawyouharvard baada ya na maelfu ya mambo. Na wao huwa na kuwa CS50 makao Isawyouharvard posts. Je, mimi kupata zaidi walipenda? Wao huwa na kupata ilifutwa pretty haraka, pia. Hii si zaidi walipenda. Kuna sisi kwenda. Cheaters juu ya ukurasa wengi walipenda - hiyo ni pretty muhimu kwa hii hivi sasa. Oh wow. Tayari wameweza ilifutwa yoyote ya wale wa kutoka mwaka huu ambayo yamekuwa cheated juu. Wale wote wamekuwa deleted. Kuna kamwe kuwa baada ya kuwa anapata high hii. Hii ni moja ya alikuwa ni wazi cheated juu ya kupata kwenye ukurasa wengi walipenda. Maswali zaidi? [Mwanafunzi] Tufanye kujua kuhusu XHTML? [Rob] Karibu chochote. Tu ni nini. tofauti kati yake na HTML ni kuwa XML ni sawa sana katika muonekano kwa HTML ila katika HTML sisi tu kuwa predefined seti ya vitambulisho. Lakini kwa XML - XML ​​ni kama format ujumla ambapo unaweza kufanya XML hati kwa chochote madhumuni unataka. Hivyo, kwa mfano, kama alitaka nitaitengeneza XML kwa kozi - na mimi kwa kweli nadhani kwamba CS50 ina API kwa hili. XML yangu ya hati inaweza kuangalia kitu kama - kozi na bila shaka mimi haja ya baadhi ya kozi mwisho. Mimi naweza kuwa na shaka na inaweza kuwa na jina sawa na CS50. Na kisha mwisho wangu bila shaka na mimi naweza kuweka ndani ya hapa wanafunzi, na kisha ndani ya wanafunzi mimi kuwa na orodha ya mwanafunzi mmoja ambaye jina lake ni chochote. Mimi mwisho kwamba mwanafunzi na kadhalika. I just kutokea kwa kuwa ujenzi holela baadhi XML hati, lakini ni halali XML. XML - yote ni ni aina hii ya muundo na kitu kizuri - sababu kwamba sisi hata simu yake ya XML ni kwamba aina hii ya kitu ni rahisi sana kwa Hazrat. Ni rahisi sana kwa kuchukua hati hii na kufanya safu nje ya hiyo. Na hivyo XHTML ni jaribio la kupata HTML kuwa halali XML. Tayari hii inaonekana pretty sawa na HTML. Baadhi ya tofauti za ni HTML wewe ni uwezo wa kufanya mambo kama mchango labda ni sawa na aina Nakala ambayo ni default hivyo mimi hawana haja ya kusema kwamba. Walemavu. Kuna mambo 2 katika hapa kwamba kufanya XHTML hii batili. Jambo la kwanza ni kwamba vitambulisho wote XML haja ya kufunga tag. Hivyo katika kesi ya pembejeo mimi haja ya kufanya - ambayo mwelekeo wa slash ni nini? Mwelekeo huu? Hiyo inaonekana makosa. Nyingine mwelekeo. Binafsi kufunga tag. Jambo la pili ni kwamba pamoja na XML unahitaji aina hii ya kama thamani jozi muhimu. Inahitaji thamani yanayohusiana na hayo. Hivyo, ingawa walemavu katika na yenyewe huonyesha nini nataka - pembejeo hii lazima walemavu - kwamba XHTML batili. What I kweli wanahitaji kuandika ni walemavu ni sawa na walemavu. Sasa ni halali XHTML. Na haya ni hizi tofauti kidogo kwamba kubadilisha HTML kwa XML makao aina ya kitu. [Mwanafunzi] XML ni kuhusu kama njia ya kuvuta mwenyewe X yako kabisa kama ni kwa nini (inaudible) [Rob] jambo la kama CSV - CSV una tu maadili kutengwa na - kufikiri tu ya spreadsheet. CSV kimsingi ni spreadsheet. Una labda nguzo na kuwa na rundo la safu kwamba data kujiunga na nguzo hayo lakini hiyo ni yake. XML ni zaidi hodari katika kwamba unaweza - wewe na uongozi holela wa data. Mimi naweza kuwa na kozi nyingi kuwa na wanafunzi nyingi ndani yake ambapo itakuwa vigumu kufikiria spreadsheet kwamba - tu kwamba spreadsheet moja - CSV hasa ni kama tu spreadsheet moja - ili spreadsheet moja kuwa na kila CS50, 51, na 61 na ndani ya wale wote ya wanafunzi kuhusiana na nyakati hizo, mara labda mkutano na yote ya aina ya kitu. Jambo jingine ni kwamba tag majina kutoa jina nzuri ya wote wa mambo hivyo kusoma file CSV inaweza kuwa vigumu kujaribu na Hazrat nini ni kweli kuona. XML ni mengi kwa binadamu-someka zaidi hivyo ndiyo sababu kama - kuja na baadhi ya mtu ambaye hana kweli kujua nini file CSV ni au kama ni si programu au kitu - unaweza kuwapa kama template XML file na wanaweza kufuata mistari na - oh, natakiwa kuingiza jina langu hapa. Ni format zaidi inatumika. CSV ina mengi ya matumizi lakini XML ina matumizi mbalimbali. Maswali zaidi? Maswali mengine? [Mwanafunzi] Kutoka jaribio uliopita - wima kuongeza dhidi ya usawa kuongeza. [Rob] Wewe bila haja ya kujua kwamba. Sidhani sisi hata kujadiliwa hiyo. Mimi guessing ni mmoja tu-off maoni. Oh. Horizontal dhidi ya wima kuongeza si kitu itabidi kujua. Nadhani tofauti ni kama - oh vizuri, jibu muhimu watasema tofauti. Vertical kuongeza ni kama tu oh, kompyuta yangu ya kufanya vibaya. Mimi itabidi kupata moja bora. Wakati usawa kuongeza ni oh, kompyuta yangu inafanya vibaya - basi mimi kupata 20 ya kazi yao yote juu ya kazi hiyo. [Mwanafunzi] Je, sisi kwenda juu wanaohusishwa orodha njia ya kufanya foleni. [Rob] Uhakika. Hiyo ni rahisi zaidi kuliko safu njia. wanaohusishwa orodha njia ya kufanya foleni. Kwanza, nini struct yetu kwa ajili ya orodha wanaohusishwa kuangalia kama? [Mwanafunzi] Je, sisi kufanya hivyo kwa - [Rob] Hebu kufanya yake - yeah. Int val; * kisha struct node ya pili; hivyo kwamba ni nini tutaweza kutumia kwa mfano hapa. Hebu kweli aina ya juu mambo haya. Hebu kufanya linked_list. Struct yetu - Sawa. Sasa kuangalia foleni yetu tuna - hebu tu kufanya foleni kimataifa. Utakuwa nodi * foleni; na sisi na dequeue kazi. Nadhani mambo haya inaweza pia kugeuza kweli au uongo - hebu kufanya hivyo. Bool dequeue - na sisi ni dequeueing - oh. Hmm. Int dequeue - nini cha kufanya na huu kabla? Int dequeue na sisi na bool enqueue na tunahitaji enqueue baadhi ya njia ya kweli. Hebu kufanya enqueue kwanza. Tuna foleni yetu. Tunataka kuingiza kitu katika foleni. Ni njia bora ya kufanya hivyo ni nini? Zaidi ya hapa foleni wetu sasa inaonekana kama tuna baadhi ya pointer kimataifa kuanza. Kuna foleni yetu. Kutokana kwamba sisi dequeue kwa kuchukua hiki kwanza, ambapo sisi ni kwenda kutaka kuingiza node wetu ili foleni kazi kama wao lazima? [Mwanafunzi] Mwishoni mwa sana. [Rob] Yeah. Foleni wanatakiwa kuwa wa kwanza, kwanza nje. Ambayo ina maana kwamba hiki mpya zinapaswa kuingizwa zaidi ya hapa. Sawa. Tukirudi nyuma kwa kificho, hiyo ina maana kwamba sisi unataka kitanzi juu ya foleni yetu. Hebu kufanya nodi * sasa = foleni, wakati sasa haina NULL sawa. Napenda kufanya - haki ya wote, hebu kufanya hivyo tofauti. Kwanza, sasa = foleni. Tufanye nini kama sasa kuanza mbali kama NULL? Tutaweza kufanya hivyo njia 2. Kwanza kwa njia hii. Tufanye nini kama sasa ni NULL? Je, hii ni sawa na kama foleni ni NULL? [Mwanafunzi] Ni kwenda na kurudi uongo. [Rob] Je, sisi kurudi uongo? Nini mbaya na kuingiza kitu katika orodha tupu? [Mwanafunzi] Hakuna ni kibaya na kwamba. Sorry. [Rob] Yeah. Hivyo hapa tofauti tu ni foleni yangu ya kimataifa ni kupelekwa node yangu mpya. Na kisha mimi kufanya hundi yangu ya kama foleni ni null. Kurudi uongo. Na kisha foleni val sawa na i; foleni ijayo ni sawa na NULL; kurudi kweli. Sawa. Mimi nina kwenda kuruka bunduki hapa. Kumbuka kile sisi alifanya kwamba mara ya mwisho ambapo sisi alisema ni rahisi kufanya kazi na node ** na aina hii ya kitu. Hivyo sasa ni kwenda kuwa na foleni, na kushuka juu ya hapa - wakati sasa - wakati * sasa anafanya NULL si sawa - hivyo basi mimi tu kufanya sasa - we'll majadiliano kuhusu hili katika pili. Sasa ijayo. Sawa. Kuangalia ni kwa njia hii, hii ni iterating juu ya yote ya kuyatumia yangu mpaka mimi kufikia null pointer. null pointer ni kwenda kuwa pointer nataka nafasi kwa node yangu mpya. Kuangalia iPad version - kama pointer yangu ya awali na orodha wanaohusishwa ni tupu basi sasa inaenda hapa. Hii ni kwenda kwa uhakika na null, hivyo hii ni pointer mimi kuishia kuhamia uhakika kwa baadhi ya wengine node mpya. Ambapo kama mfano ni kesi hii hapa basi sasa ni kwenda tindanga kutoka hapa - I messed up kidogo. Ambapo sasa zinatakiwa kuwa anwani ya sasa ijayo. Ni kwamba kile nataka? Sasa ili * sasa anitiaye nodi. Ijayo traverses kwa moja ijayo. Mimi sasa akizungumzia hapa. Hebu kufanya nyekundu - hivyo mimi nina sasa akizungumzia hapa. Kisha * sasa ni kwenda kumbukumbu node hii. Na * sasa marejeo wa nodi hii, lakini si kwamba nini nataka. Nataka pointer hili kwa nodi. Hivyo, kwamba pointer kwa node hii ni Ampersand (* sasa) ijayo. Katika hatua hii katika wakati nimekuwa kufikiwa rasmi node kwamba mimi nataka kuchukua nafasi. Hebu nafasi yote ya foleni hizi sasa - na sasa sisi ni kosa. Kunaweza kuwa na typos, lakini wazo ni kwamba pamoja na kuingiza katika aina hii ya njia ni rahisi kufanya kazi na kuyatumia kwamba tunataka mabadiliko badala ya wanaohitaji kuweka wimbo wa - sawa, ni mwanzo wangu NULL? Oh ni? Kisha mimi haja ya kuunda kuanza node kuwa kitu fulani mwingine mimi utasikia wanataka iterate mpaka jambo la pili mimi uhakika na ni NULL, na basi mimi itabidi nafasi ya kuwa - nini Jambo la pili ni - kwa malloc yangu nodi. Badala ya wanaohitaji kutenganisha kesi hizo, hapa mimi tu kuhusika na kesi ya nini ni pointer kwamba ni NULL kwamba mimi tena wanataka kuwa NULL, na kwamba inafanya maisha rahisi ila hizi lazima wote * sasa sasa kwa sababu - [Mwanafunzi] Je, wao bado ukubwa wa nodi? [Rob] Ndiyo. Mimi bado mallocing nodi. [Mwanafunzi] Je, ni kwenda kuwa ukubwa wa * node? [Rob] Tukirudi nyuma katika hapa, fikiria kesi kama hii ni orodha yetu wanaohusishwa. Guy hii inaeleza mbali na null. Baada ya kwamba kwa nini kitanzi, pointi ya sasa ya hapa kwa sababu hii ni pointer kwamba ni null. Sasa nataka kubadili pointer hii kwa uhakika na node mpya. Kwanza mimi malloc kwamba mwezi node - hivyo malloc ukubwa wa nodi. Na kwamba anarudi * node na sasa kubadilisha pointer hii ni ujenzi wa * sasa usawa node hii mpya kwamba mimi zimetengwa. Hivyo, kama sasa ni node **, kisha * sasa ni kwenda kuwa nodi *, na kama mimi nina mallocing kitu ukubwa wa nodi basi hii ni kurudi pointer kwa node hivyo hii ni nodi * - hivyo pande zote mbili kwa usahihi na aina moja. Na hivyo kama kile tu zilizotengwa mara NULL, kurudi uongo; mwingine kumaliza kuweka yao na kile Mimi nataka wao kuwa - ila hawa wanahitaji mabano kwa sababu si kwamba jinsi utaratibu wa mambo ya kazi. Bila mabano kwamba alikuwa inatafsiriwa kama sasa-arrow-val dereference hiyo. Badala yake nataka dereference ya sasa ambayo huleta mimi nodi. Kisha nataka kupata thamani kuhusishwa na kwamba nodi. [Mwanafunzi] Nilidhani mishale kuruhusiwa wewe bypass na kwenda moja kwa moja kwa thamani. [Rob] Wao kufanya. Hiyo ni kama mimi na - hebu sema foleni ni mfano. Mimi nina kuruhusiwa kufanya foleni-arrow-val sawa na i kwa sababu foleni ni node *. Kama kulikuwa na baadhi ya syntax nzuri ya kama ya sasa tena arrow-val au kitu ambao walikuwa na 2 dereferences, basi hii itakuwa kazi vizuri. [Mwanafunzi] Basi arrow ni tu kwa ajili ya 1 dereference. [Rob] Yeah. Vinginevyo mimi naweza kuandika hii kama (** current.val). Tu kama mimi naweza pia kuandika foleni kama (* foleni). Val. Basi hebu kuingiza. Naam, hiyo ni katika foleni mimi nadhani. Dequeue ni kwenda kuwa kwa kiasi kikubwa mfupi. Hebu kuweka utupu katika hapa kwa ajili ya usafi. Hivyo, dequeue. Nini hiki mimi dequeueing? [Mwanafunzi] moja ya kwanza? [Rob] Yeah. Kama moja yangu ya kwanza ni NULL - kurudi - I hawajui nini tunataka kurudi - INT_MAX; na basi unapaswa kufanya kuangalia ili kuona kama INT_MAX alirejea. Hiyo ni aina ya kitu ili kupata inc haina mwingine tunataka - tunaweza tu kurudi foleni val? Ni kwamba nini tunataka nini? Dequeue pia inamuunga kuondosha bidhaa kutoka foleni, hivyo hebu kwanza kusema - hebu kupata TMP kwa uhakika na node ya kwanza ya foleni yetu. Sasa tunataka kuendeleza foleni yetu kwa uhakika jambo la pili katika foleni. Sasa tuna TMP wa kushoto. TMP val ni kitu tunataka kurudi. Hivyo, val = TMP-> val; lakini kabla ya sisi kurudi tunapaswa bure TMP na kurudi val. utaratibu wa shughuli hapa ni muhimu katika kuwa tunahitaji kunyakua TMP kabla ya kuendelea foleni ya hiki ijayo. Tunahitaji kupata thamani kabla ya sisi bure TMP, na kisha tunaweza kurudi val. [Mwanafunzi] Je, sisi kuweka foleni ya foleni ijayo? [Rob] Ndiyo. Hiyo ilikuwa kujenga kitanzi mbaya / itakuwa si kazi baada ya kumkomboa anyway. Foleni = foleni-> ijayo. Tunataka kuendeleza foleni ndani ya hiki ijayo si kuendeleza hiki ijayo kwa nini hiki sasa ni. Mwingi itakuwa kwa kiasi kikubwa - kama hata rahisi kwa kuwa dequeue ni sawa kwa sababu sisi ni kuunganisha mbali mbele ya stack. Mwisho foleni itakuwa ni sawa sana ambapo sisi tu wanataka kutenga node na kuingiza ndani ya mbele ya stack, hivyo hatuna hata haja ya kitanzi juu ya kitu chochote. Sisi tu kuingiza moja kwa moja mbele. Je, kila mtu mzuri juu ya hilo? Sawa. Maswali zaidi? [Mwanafunzi] Mambo gani kuu lazima mimi kukumbuka kutoka hotuba ya hivi karibuni? [Rob] hotuba hivi karibuni zaidi. Huna haja ya kujua code yoyote. Unapaswa kujua mawazo makuu. Nusu Nate hakuwa na code yoyote na hivyo slides wale ni online. Wao ni kama kuangalia yao na wao kuwa na mawazo makubwa. Zaidi ya nusu yangu - kujua wazo jumla ya kwanza huwezi kuamini kitu chochote. ukweli kwamba kama labda mchakato wa compiler inaweza kuwa mbaya, lakini haina hata jambo kwamba chanzo kanuni inaonekana faini. Kwa sababu compiler inaweza kuwa hasa ilibadilika kwa kubadilisha kanuni chanzo  katika mchakato wa kuandaa. Wakati huo huo tu kama - nadhani wale ni kama mawazo kuu yake. [Mwanafunzi] Je, kutaja kwamba hatuna haja ya kujua kitu chochote kuhusiana na Firesheep - au tunahitaji kujua kwamba? [Rob] Kwa nusu Nate wa mambo, kitu chochote ambacho Nate kuguswa juu ya - kama FireSheep, WireShark - I hawana hata kufikiri yeye alifanya Firesheep kwa undani. Unaweza pia alifanya kitu na kwamba - ilikuwa ni Firesheep - wiki iliyopita? Je, kugusa juu ya hilo? [Mwanafunzi] Yeah, nadhani tuwe na - [Rob] Yeah. Sisi siyo kwenda kukupa pato Firesheep na kusema kutafsiri hii. Ni tu kwenda kuwa - itakuwa swali kama yale ni Firesheep? Ni nini kutumika kwa? [Mwanafunzi] Nadhani ni kazi tu juu ya toleo la 4 ya Firefox au kitu. [Rob] Ni ivunjwe kwa sasa. Mimi sijui. Hawaonekani kuwa na walemavu ni manually, lakini labda haifanyi kazi kwa Firefox hivi karibuni zaidi. [Mwanafunzi] mimi kwa kweli walijaribu kufunga ni kwa sababu imesema kuwa sambamba. [Rob] Basi, mimi nadhani haina kazi na Firefox hivi karibuni zaidi. Lakini wazo bado anasimama ya kile ilikuwa na maana ya kuonyesha. Ilikuwa ni ajabu kiasi gani cha dunia hakuwa anaishi katika HTTPS wakati huo. Hata katika miaka ya mwisho 2 au chochote, bado - kuna makubwa kuboresha katika idadi ya Nje ambayo matumizi HTTPS. [Mwanafunzi] Je, tunahitaji kwenda zaidi ya HTTP? [Rob] itifaki ya hilo? [Mwanafunzi] Baadhi ya mambo ambayo tunapaswa kujua. [Rob] Haki zote. Mambo ya msingi ni kila kitu unaweza kuona katika mtandao tab yako. Wakati mimi kuomba ukurasa - kuja nyuma hadi juu kwa ajili ya mambo kuu. Unaweza kuona hapa ombi kwamba mimi kufanya. Chrome hutokea na muundo yote vizuri kwa ajili ya sisi ambapo ombi URL mara hii, njia ombi mara GET, na hali ya code mara 200 OK. Kama mimi hit maoni chanzo, mimi kuona moja kwa moja zaidi kwamba - na hii ni - sisi inaweza kuonyesha kati ya hizi, lakini si vigumu sana kutafsiri kati yao. Hapa ni ombi moja kwa moja mimi alifanya, hivyo hii ina maana kwamba nilikwenda apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1. Na itifaki kutumika mara HTTP/1.1 ambayo ni karibu - ni daima kwenda kuwa. Zaidi ya hapa tulikuwa GET, hivyo hii inaweza pia kuwa POST. Na kisha kuja chini - njia yote chini ya kukabiliana headers - kama sisi kuona kwamba chanzo, ni ambapo tunaona 200 OK. Kujua iwezekanavyo codes hali mbalimbali ya haya. Nadhani katika mapitio hatuna kusema michache ya haya, hivyo 403, 404 - wale aina ya wale wa kawaida. Hilo ni wazo kuu yake. tofauti kati ya tu HTTP na HTTPS ni encryption hii. [Mwanafunzi] Je, kosa gani? [Rob] nadhani hivyo. Naam, yep. [Mwanafunzi] Je kuzungumza kwa ujumla sana kuhusu jinsi ya encryption kazi? Kwa sababu sisi kuongea kwa mfano wakati compressing Huffman files, unajua jinsi ya decompress yao kwa sababu kwa kweli alimtuma hashtable ndani ya faili hivyo ni jinsi gani kazi encryption? Jinsi gani unaweza kujua jinsi ya fumbo habari kama wewe si kweli alimtuma mteja muhimu - na unaweza kweli kunyakua kwamba muhimu kutoka -? Jinsi gani mchakato ujumla kazi? [Rob] mchakato mkuu wa encryption - kwamba ni swali incredibly kina nami kujibu. Kuna short - vizuri, Tommy na mimi alifanya mfupi. Kwa bahati mbaya ni kama dakika 26, hivyo si mfupi. Ni muda mrefu. Lakini short yetu ilikuwa juu RSA ambayo ni mfano mmoja tu kati ya haya, na hii RSA ni sehemu ya HTTPS itifaki kwa ujumla. wazo - RSA ni mfano wa public key cryptography, ambayo ina maana kuwa na funguo 2 tofauti. Unaweza kutumia 1 muhimu kwa kweli fumbo mambo, na kutumia nyingine muhimu decrypt mambo. Hii muhimu kwamba matumizi ya fumbo mambo ni moja ambayo ya umma. tovuti wanaweza kutuma wewe hii muhimu encryption. Wao kufanya kutuma kwamba muhimu encryption, na wakati unataka kutuma kitu nyuma yao unaweza kutumia muhimu encryption encrypt yote ya data yako na kutuma kwao. Kwa hiyo, wao ni wale tu na ufunguo binafsi. Kama muhimu ambayo binafsi kujulikana kisha mtu yeyote bila kuwa na uwezo wa decrypt data yako. Lakini muhimu kwamba binafsi - ambayo ni hesabu kuhusiana na muhimu ya umma lakini huwezi kufikiri moja kutoka nyingine - ili ufunguo binafsi inaweza kutumika decrypt data. Tangu wao ni wale tu na ufunguo binafsi, wao ni wale tu ambao wanaweza kusoma data. Hivyo hata kama muhimu ya umma ni ya umma, Mimi kutumia huo - wakati mimi kwenda Google.com au chochote, wapate kuwa nyingi, sijui - lakini kama mimi kwenda Google.com, yeye huenda kwa Google.com, anakwenda Google.com-- sisi wote wanaweza kutumia ufunguo huo wa umma fumbo habari zetu wenyewe hata hivyo tunataka. Lakini hakuna hata mmoja wetu ni kwenda kuwa na uwezo wa kufikiri - ni kwenda kuwa na uwezo wa decrypt habari zao kwa sababu muhimu ya umma haina uwezo wa decrypt. Inaweza tu fumbo. Na ni furaha / kina math ya - kama kundi la moduli operators na exponentials na stuff, kwamba tu kazi nje kwamba ufunguo binafsi ni jambo tu kwamba unaweza decrypt encryption mambo muhimu ya umma. Yeah. Angalia RSA short kwa maelezo zaidi. [Mwanafunzi] Je, kwamba kwenye tovuti? [Rob] Yeah, nadhani ni katika hatua hii. Au angalau kiungo YouTube kwa ilikuwa posted. Hebu angalia. Kaptula. Nadhani ingekuwa wiki 2-kuhusiana. Yeah. RSA. Na ni - we're si kwenda kucheza mchezo huu - dakika 24. Ni moja kwa muda mrefu. Maswali zaidi? [Mwanafunzi] Je, unaweza kuzungumza kwa ufupi juu ya bitmasks? [Rob] Uhakika. Kwa ufupi, wazo ni tu kwamba kama - [Mwanafunzi] Nini ni, Rob? [Rob] Bitmasks. Wazo ni - hebu sema tu tuna baadhi - we're kutumia baadhi ya integer - int x - hivyo, sisi kuanza mbali saa 0. Sasa, integer hii ni 32 bits, hivyo yoyote ile moja ya 1 ya bits hayo yanaweza kutumika kuwakilisha FLAC maalum. Hii ni pale ambapo kama ukiangalia codes mfumo wa uendeshaji, wao kutumia kila mahali ambapo labda juu juu mahali fulani wao hash-kufafanua - Hebu angalia baadhi ya mifano. Man-2-wazi - wazi mfumo wa wito tunaweza kuona hapa kwamba moja ya hoja yake ni bendera int - nini anatarajia kama hoja kuwa ni baadhi ya bendera hizi. Tunaona O_append, O_ASYNC, O_CLOEXEC, O_CREAT, na kadhalika. O_DIRECT. Hizi aina ya bendera ni hash-inavyoelezwa mahali fulani. Na wote ni hasa 1 kidogo. Hivyo, O_CREAT inaweza kuwa hash-hufafanuliwa kama 1, kushoto kuhama, 4 (1 << 4). Hiyo inaenda kuwa - wakati mimi kutumia O_CREAT kwamba tu kwenda kuwa - katika binary 1, 0, 0, 0, na 30-ish zeros mbele yake. Ni moja tu kidogo kuweka, na kwamba kidogo inawakilisha bendera hiyo. Na hivyo hakuna bendera nyingine ni kwenda kushoto-kubadilishwa kwa 4. Mimi nina uwezo wa kuwakilisha hadi 32 bendera katika integer moja kwa kufanya - x = O_CREAT kidogo wenye busara au O_DIRECT. Wewe ni kuokota yoyote tu 2 ya bendera hizo. Sasa x ni kwenda na 2 bits kuweka ambayo yanahusiana na 2 bits ya O_CREAT na O_DIRECT. njia ambayo basi - hivyo basi sisi kupita x katika kazi wazi, na mahitaji ya wazi na kuona nini bendera kweli walikuwa kuweka. Kwa hiyo, hiyo ni ambapo ni kwenda kufanya mambo kama kama (x & O_CREAT) kufanya kitu fulani, au kama (x & O_DIRECT) kufanya kitu kingine, na kisha kuna inaweza kuwa baadhi bendera kwamba hatukuwa tumeweka - kama (x & O_ - I hawajui nini bendera wengine walikuwa - (X & O_RDONLY) - hali ambayo hasa si kwenda wauawe. Au kuzuia ya maadili ya si kwenda kuuawa, lakini hizi 2 ni kwa sababu wale bendera 2 walikuwa kuweka. Na taarifa kwamba katika C, thamani yoyote ambayo si 0 ni kweli. Hivyo, (x & O_CREAT) itakuwa aidha 0 au O_CREAT kwa sababu O_CREAT tu ina single kuweka kidogo. Kama kwamba kidogo ni kuweka ijayo, basi hii ni kwenda na kurudi O_CREAT - binary ambapo tu kwamba kidogo ni kuweka. Kama kwamba kidogo ijayo si kuweka, basi ni kwenda na kurudi 0, katika kesi ambayo tunajua bendera hakuwa kuweka. Hiyo ni jinsi ya kutumia bitmasks. Nadhani juu ya mtihani uliopita au labda katika darasa au kitu - unaweza pia kutumia bitmasks magazeti nje binary ya kutofautiana. Hivyo naweza kutumia - wanaoendesha juu ya - 1, kushoto kuhama, 0 - na kisha magazeti kama x & kwamba - kama x & 1, kushoto kuhama, 0 - kisha magazeti 0 au 1. Au magazeti 1 mwingine magazeti 0. Na kisha mimi kwenda zaidi ya mara moja zaidi - kama x & 1, kushoto kuhama, 2 - kisha hiyo ina maana kwamba kidogo ya pili ya kutofautiana ni kuweka, hivyo mimi magazeti 1 mwingine mimi magazeti 0. Na nadhani tungeweza wanataka kufanya hivyo ili reverse kwa sababu kawaida unataka upande wa kushoto kuwa bits juu-ili na upande wa kulia na kuwa na bits chini ya utaratibu, hivyo pengine kitanzi 4 int i = 31 hadi mimi kugonga 0, basi kwamba hali halisi - kama x & 1, kushoto kuhama, i; magazeti 1 mwingine 0. [Mwanafunzi] Asante. [Rob] Nadhani tuko nje ya muda. Yoyote maswali zaidi katika michache ya mwisho ya sekunde nje ya wakati? Sawa. Bahati nzuri kesho. Hii ilikuwa ni sehemu ya mwisho ambapo wiki ijayo kwenda kuwa hiari. Mimi nitakupa nyuma Quizzes na tunaweza kwenda juu yao na labda kwenda juu mambo mengine ambayo walikuwa na shauku katika, au mwisho mambo mradi, au baadaye CS madarasa mambo au - I hawajui. Lakini hii ni ya mwisho vifaa kujazwa sehemu. Bye! (Applause) [CS50.TV]