[Review: Quiz 1] [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Chuo Kikuu cha Harvard] [Hii ni CS50.] [CS50.TV] [Lucas Freitas] Karibu kila mtu. Hii ni mapitio kwa jaribio 1. Tu kama Kanusho, hii ni - I mean, tunakwenda kujaribu kufunika vifaa kama iwezekanavyo, lakini hiyo haina maana kwamba tunakwenda cover yote ya mambo ambayo yanaweza kuwa katika jaribio 1. Hivyo kuwa na uhakika pia kuangalia katika hotuba, sehemu, kila kitu kuwa unaweza. Quiz 1 ni kwenda kuwa juu ya Jumatano, Jumatano ijayo. Hivyo kuwa na uhakika kujifunza. Ni kwenda kuwa, pretty much, kama jaribio la kwanza kuhusu muundo wake, lakini pengine ni kwenda kuwa ngumu sana. Kwa uchache, mwaka jana wakati mimi alichukua 50, nilifikiri ilikuwa vigumu sana. Hivyo utafiti mengi. Mimi nina kwenda kufidia miundo data na Huffman coding. Hili ni jambo ambalo mengi ya watu wanadhani ni tata, lakini mimi nina kwenda kujaribu kufanya hivyo kama rahisi kama iwezekanavyo. Awali ya yote, nini tunataka nyie kujua kwa jaribio 1 ni kwa kuelewa maelezo dhana ya kila data miundo kwamba mimi nina kwenda sasa. Hiyo ina maana kwamba huna kwa kweli kutekeleza meza hash katika jaribio yako 1. Hatutaki wewe kutekeleza yote hash meza, labda tutaweza kujaribu kufanya kutekeleza baadhi ya majukumu, shughuli ya kawaida, lakini sisi siyo kwenda kufanya kutekeleza kila kitu. Hivyo ni muhimu kwamba kuelewa dhana nyuma ya kila muundo data na pia kwamba una uwezo na kanuni katika C, tu shughuli ya kawaida wao na kwa kila muundo data. Na pia kuwa na uwezo wa kupitia kuyatumia na structs, kwa sababu wao kuonekana mengi katika miundo haya data. Kwanza, wanaohusishwa orodha. Orodha wanaohusishwa ni kweli ni sawa na arrays, lakini tofauti kati ya orodha wanaohusishwa na safu, kwanza ya yote, ni kwamba orodha wanaohusishwa ina rahisi sana ukubwa, wakati katika arrays una ama kuchagua ukubwa kubwa sana kwa safu, ili kujua kwamba wewe ni kwenda kuwa na uwezo wa kuhifadhi data yako yote katika safu, au una kutumia malloc kuwa na urefu rahisi wa safu. Katika orodha wanaohusishwa ni rahisi sana kupata tu mambo zaidi, kuweka mambo zaidi katika orodha wanaohusishwa au kuondoa vipengele. Na kwa kweli, kama wewe hawataki orodha wanaohusishwa na kutatuliwa, unaweza kutafuta na kuondoa vipengele katika wakati mara kwa mara, hivyo O (1) wakati, hivyo ni rahisi sana. Wewe tu kuwa makini daima kumbuka malloc na bure nodes, kwa sababu tu kama huna, itabidi uvujaji kumbukumbu. Orodha hiyo wanaohusishwa - ufafanuzi wa node ni kama yale tuna haki ya huko. Mimi kuweka int n, lakini unaweza kuhifadhi data yoyote unataka. Hivyo kama wewe unataka kuhifadhi kamba, ni nzuri. Kama unataka kuhifadhi struct, ni nzuri, mara mbili, chochote unataka. Mimi tu ya kuweka int n kwa mifano hapa. Na una pointer kwa node ijayo. Kwa hiyo, kimsingi, orodha wanaohusishwa ina baadhi ya data, na kisha inaelekeza katika node ijayo. Kama ni hiki mwisho katika orodha wanaohusishwa, ni kwenda kwa uhakika na null. Hivyo hii ni mfano wa orodha wanaohusishwa. Sawa, hivyo sasa hebu angalia nini tunapaswa kufanya kama nataka kuingiza kipengele katika orodha wanaohusishwa. Kwanza, kuingiza kazi itakuwa ya aina utupu kwa sababu sitaki kurudi kitu chochote. Na mimi nina kwenda kuchukua int kama hoja, kwa sababu Mimi nataka kujua nini nataka kuingiza. Basi nini Jambo la kwanza mimi wanapaswa kufanya nini? Naam, mimi lazima malloc juu ya newnode, hivyo kwamba ni mstari wa kwanza. Mimi nina kujenga tu nodi mpya kuweka katika orodha wanaohusishwa. Hivyo naweza kufanya nini? Vizuri, tunajua kwamba katika utekelezaji wa orodha wanaohusishwa wetu darasani, sisi daima kuweka kichwa kama variable kimataifa. Hivyo nini tunaweza kufanya ni kubadilisha kichwa. Mimi siwezi kufanya node hii mpya kuwa mkuu mpya, na ni kwenda kwa uhakika na kichwa uliopita. Jinsi gani tunaweza kufanya hivyo? Jambo la kwanza mimi kufanya ni mabadiliko 'n' katika node mpya ya thamani, ambayo ilipitishwa kufanya kazi. Kisha ni newnode ya pili ni kwenda kuwa kichwa. kichwa ni kwenda kuwa newnode. Hivyo ni pretty rahisi. Kwa ajili ya kufuta node, tunaweza kufanya hivyo kama - Njia moja tunaweza kufanya hivyo ni kusema, sawa, kama nilitaka kufuta, kwa mfano, 3, nini mimi naweza kufanya ni uhakika tu node uliopita kwa node ya pili ya 3. Hivyo napenda tu kufanya kitu kama hicho. Lakini ni tatizo na kufanya hivyo ni nini? Nina kumbukumbu leak, hivyo mimi si kupata namba 3 tena. tatizo na hilo ni kwamba mimi si kwenda kuwa na uwezo wa bure kwamba nodi. Mimi naenda kuwa na kumbukumbu leak na (yasiyo na) ni kwenda chuki yangu. Hivyo badala ya kufanya hivyo, mimi lazima pengine na pointer muda. Basi, mimi kuweka temp. Ni kwenda kwa uhakika na nodi kwamba mimi unataka kufuta. Na kisha naweza kusogeza nodes uliopita kwa uhakika node ijayo ya nodi kwamba mimi unataka kufuta. Na hatimaye, siwezi bure pointer. Je nina bure pointer kwamba mimi umba hapo? Sina, kwa sababu tu - Tofauti ni kwamba node hii iliundwa kwa kutumia malloc, hivyo ni katika chungu, wakati huu moja mara tu alitangaza kama NULL kubadili katika stack. Hivyo sina bure yake. Sawa. Hivyo sasa hebu majadiliano juu ya mwingi. Mwingi ni pretty moja kwa moja. Sisi tulikuwa mwingi na foleni katika darasa kwa kutumia arrays tu, lakini unapaswa kuwa familiar - tu kuwa na ufahamu kwamba unaweza pia kufanya mwingi katika foleni kutumia orodha wanaohusishwa pia. Hivyo kama una safu, nini itakuwa stack? stack, kwanza, itakuwa na kuwa na ukubwa. Una kuhifadhi nini ni ukubwa wa stack kwamba una haki sasa. Na pia ingekuwa safu, katika kesi hii ya idadi, lakini kama unataka, inaweza kuwa safu ya masharti, safu ya struct, kitu chochote ambacho unataka kuhifadhi. Kuhusu stack: Tofauti kati ya stack na orodha wanaohusishwa ni kwamba katika stack wewe tu na upatikanaji wa hiki mwisho kwamba ilikuwa kuweka katika stack. Ni wito mwisho, kwanza nje. Tu kama wewe na stack ya trays, kama wewe kuweka tray juu ya stack, una kuondoa kwamba tray kwanza kuwa na upatikanaji wa trays nyingine. Ni kitu kimoja na mwingi ni. Hivyo kama nataka, kwa mfano, kuongeza kipengele kwa stack, nifanye nini? Ni wito kushinikiza, na ni pretty moja kwa moja. Jambo la kwanza kufanya ni kuangalia kama kawaida ya stack si mkuu au sawa na uwezo wa stack. Kwa sababu kama wewe tayari ni juu ya uwezo kamili, huwezi kuongeza kitu kingine chochote. Na kisha kama si hivyo, wewe tu na kuongeza kipengele kwa stack. Na hatimaye, nyongeza kawaida. Hivyo ni pretty moja kwa moja. Hivyo mimi tu kuongeza idadi ya 2. Na kama nataka pop, ambayo ina maana kwamba mimi unataka kuondoa hiki mwisho kwamba alikuwa aliongeza na kurudi thamani ya hiki, Jambo la kwanza mimi na kuangalia ni kwamba stack ni si tupu. Kwa sababu kama ni tupu, siwezi kurudi kitu chochote. Katika kesi hiyo, mimi nina kurudi -1. Vinginevyo, mimi nina kwenda kuongezwa ukubwa wa spec, na kurudi namba (s.size). Kwa nini mimi kuongezwa ukubwa na kisha kurudi s.size? Ni kwa sababu, katika kesi hii, spec ina ukubwa 4, na nataka kurudi hiki nne, sawa? Lakini ni ripoti ya hiki nne nini? Tatu. Tangu mimi ukubwa - ni kwenda kuwa 3, naweza tu kurudi s.numbers (s.size) kwa sababu ni 3. Hivyo tu index. Sasa foleni. Foleni ni pretty much kitu kimoja. Tofauti tu ni kwamba badala ya kuwa na mwisho, kwanza nje, una kwanza, kwanza nje. Pengine kama wewe ni kusubiri kwenda tamasha, bila kuwa na furaha kama alikuwa na stack badala ya foleni. Kuwa mtu wa mwisho kuja itakuwa mtu wa kwanza kuingia kwenye tamasha hilo. Pengine bila kuwa na furaha. Katika foleni, mtu wa kwanza kupata katika ni pia mtu wa kwanza kupata nje. Hivyo katika ufafanuzi wa foleni, badala ya kuwa na ukubwa katika safu, wewe pia kuwa na kichwa, ambayo ni index na mkuu wa stack. Hivyo hiki kwanza hivi sasa. Enqueue ni kitu kimoja kama kushinikiza kwa mwingi. Kama ungekuwa naive sana, ungekuwa tu kusema, vizuri, siwezi tu kufanya hasa kitu kimoja kama mimi kwa ajili ya kushinikiza. Siwezi kuangalia tu kama si zaidi ya uwezo. Kama ni, mimi kurudi uongo, vinginevyo naweza tu nje thamani mpya na kisha nyongeza kawaida. Lakini kwa nini hii ni sahihi? Hebu angalia mfano huu. Mimi nina kujaribu enqueue rundo la mambo, na kisha mimi nina kwenda dequeue na enqueue. Kuna mengi ya amri, lakini ni rahisi sana. Mimi nina kwenda enqueue 5, hivyo kuongeza 5, na kisha 7, 1, 4, 6, na kisha Mimi nataka dequeue kitu, ambayo ina maana kwamba mimi nina kwenda kuondoa hiki kwanza. Hivyo nina kwenda kuondoa namba 3, sawa? hiki kwanza. Sawa. Sasa kama mimi kujaribu enqueue kitu kingine, ni nini kinaenda kutokea? Kwa mujibu wa utekelezaji yangu, Mimi alikuwa anaenda kuweka namba inayofuata katika index q.size. Katika kesi hiyo, ukubwa ni 8, hivyo index 8 itakuwa haki hapa katika nafasi ya mwisho. Kama mimi kujaribu enqueue 1 haki hapa, mimi itakuwa overwriting nafasi ya mwisho kwa namba 1, ambayo ni makosa kabisa. Nini nataka kufanya ni wrap kuzunguka na kwenda nafasi ya kwanza. Labda ungependa kusema tu, vizuri, mimi tu na kuangalia kama naweza kweli kuweka kitu pale. Kama siyo, mimi tu kusema, oh, mpya uwezo kamili ni kweli uwezo wa - 1, na huwezi kuweka hiki huko. Lakini ni nini tatizo? Tatizo ni kwamba kama mimi tu dequeue kila kitu sawa hapa na kisha mimi kujaribu kuongeza kitu kingine, ingekuwa tu kusema, vizuri, walikuwa katika uwezo kamili, ambayo ni 0. Hivyo foleni yako ni gone. Una kufungia, na njia ya wrapping karibu kwamba guys kujifunza katika maono na wengine psets alikuwa akitumia mod. Unaweza kujaribu nyumbani kuelewa ni kwa nini ungependa kufanya q.size + q.head uwezo mod, lakini kama wewe kuangalia hapa, tunaweza kuona kwamba ni kazi. Hivyo katika mfano wa mwisho, q.size mara 8 na kichwa mara 1, kwa sababu ilikuwa nafasi hii hapa wa safu. Hivyo itakuwa 8 + 1, 9. Mod uwezo 9 itakuwa 0. Itakuwa kwenda index 0. Tutaweza kuwa katika nafasi ya haki. Na kisha kujaribu foleni nyumbani. Baadhi ya mambo muhimu: kujaribu kuelewa tofauti kati ya stack na foleni. Nyumbani, kujaribu kupata familiar sana na utekelezaji wa enqueue, dequeue, kushinikiza na pop. Na pia kuelewa wakati ungependa kutumia kila mmoja wao. Basi hebu kupumzika kwa sekunde 10 pamoja na kundi la pokemons. Na sasa hebu kwenda nyuma na mifumo ya data. Hash meza. mengi ya watu walikuwa na hofu ya meza hash. katika kuweka tatizo 6, Spell kusahihisha. Meza Hash na inajaribu, mengi ya watu kupata hofu yao. Wanafikiri ni vigumu kuelewa. Yeah? [Rob Bowden] Tatizo kuweka 5. Tatizo kuweka 5, yeah. Shukrani Rob. Yeah. Sita Huff n 'Puff, yeah. Tatizo kuweka 5 ilikuwa Spell kusahihisha, na alikuwa na kutumia aidha hash meza au kujaribu. mengi ya watu walidhani kwamba walikuwa super vigumu kuelewa, lakini wao ni kweli pretty rahisi. Ni nini meza hash, kimsingi? meza hash ni safu ya orodha wanaohusishwa. Tofauti pekee kati ya safu na meza hash ni kwamba katika meza hash una kitu kinachoitwa hash kazi. Ni heshi nini? Sijui kama wewe guys unaweza kusoma hapa. Huu ni mfano wa meza hash. Hivyo unaweza kuona kwamba una safu na 31 vipengele. Na nini cha kufanya katika meza hash ni kuwa na heshi kwamba ni kwenda kutafsiri kwa muhimu, kila int kwa index. Kama, kwa mfano, kama nataka kuchagua kwa B. Harrison, Napenda kuweka B. Harrison katika kazi yangu hash, na heshi atarudi 24. Hivyo najua kwamba unataka kuhifadhi B. Harrison katika 24. Hivyo hiyo ni tofauti kati ya kuwa na tu safu na kuwa na meza hash. Katika meza hash itabidi kazi ambayo ni kwenda kuwaambia ambapo kuhifadhi data kwamba unataka kuhifadhi. Kwa hash kazi, unataka kuangalia kwa heshi kwamba ni deterministic na vizuri kusambazwa. Kama unaweza kuona hapa, unaweza kuona kwamba mengi ya data kuwa nilitaka kuhifadhi ilikuwa kweli 19 badala ya kutumia 31 na 30 na 29, ambao wote walikuwa huru. Hivyo heshi kwamba mimi kutumika hakuwa vizuri sana kusambazwa. Tunaposema vizuri kusambazwa, maana yake ni kwamba tunataka kuwa na, takribani, angalau 1 au 2 kwa kila moja ya - kama, tofauti ya 1 au 2 kwa kila moja ya fahirisi katika arrays. Unataka kuwa, takribani, idadi sawa ya mambo katika orodha ya kila wanaohusishwa katika safu. Na ni rahisi kuangalia kama ni halali katika meza hash, kuona kama meza hash. Kisha miti. Hii ni mti. Miti katika sayansi ya kompyuta ni kichwa chini kwa sababu fulani. Hivyo haki hapa una mizizi ya mti na kisha majani. Unapaswa tu kujua majina kwa ajili ya wazazi na watoto. Kila node ana watoto wake, ambayo ni nodes kwamba ni chini ya mzazi. Hivyo, kwa mfano, 2 ni kwenda kuwa mzazi kwa 3 na kwa mtoto mwingine hapo, wakati 3 ni kwenda kuwa mzazi kwa 1 na watoto wengine kwamba ni huko. Na 1 ni kwenda kuwa 3 mtoto, na kadhalika. Tuna kitu zaidi ya kuvutia, iitwayo binary search mti, ambayo maadili yote juu ya haki ya node ni kwenda kuwa juu ya haki, haki hapa - juu ya haki, ni kwenda kuwa zaidi ya hiki katika mizizi. Basi, ikiwa mimi na namba 5 hapa, mambo yote juu ya haki ni kwenda kuwa zaidi ya 5, na upande wa kushoto mambo yote ni kwenda kuwa chini ya 5. Kwa nini hii ni muhimu? Naam, kama nataka kuangalia kama namba 7 ni hapa, kwa mfano, I just kwenda 5 kwanza na mimi nina kwenda kuona, ni 7 zaidi au chini ya 5? Ni zaidi, hivyo najua itakuja kuwa juu ya haki ya mti. Hivyo nina mambo mengi chini kuangalia. Katika utekelezaji wa binary search mti, node, mimi nina kwenda tu kuwa na data, hivyo int n, ungeweza pia na kamba au kitu chochote alitaka. Wewe tu kuwa makini juu ya kufafanua nini ni zaidi, ni nini chini. Hivyo kama wewe alikuwa masharti, kwa mfano, unaweza kufafanua kwamba mambo hayo yote juu ya haki ni kwenda na urefu kubwa, kushoto ni kwenda na urefu chini, hivyo ni kweli up na wewe. Jinsi naweza kutekeleza kupata kwa BST? Jambo la kwanza sisi itabidi kufanya ni kuangalia mizizi ya mti ikiwa ni null. Kama ni NULL, ina maana kwamba kitu si kuna kwa sababu huna hata na mti, sawa? Basi, mimi kurudi uongo. Vinginevyo, mimi nina kwenda kuangalia kama idadi ni kubwa kuliko thamani katika mizizi. Mimi nina kwenda kujaribu kupata hiki juu ya haki ya mti. Unaweza kuona kwamba mimi nina kutumia kujirudia hapa. Na kisha kama ni kidogo, mimi nina kwenda kuangalia upande wa kushoto. Na hatimaye, vinginevyo, kama si chini au si zaidi, maana yake ni kwamba ni thamani yenyewe. Hivyo mimi tu kurudi kweli. Unaweza kuona hapa kwamba mimi kutumika kama, kama, kama. Na kumbuka, katika jaribio 0, tulikuwa na tatizo kwamba alikuwa kama, kama, kama, na walipaswa kupata uzembe, na uzembe ni kwamba unaweza kutumika kama. Unapaswa kuwa kutumika kama, mwingine kama, mwingine kama, na mwingine. Kwa hiyo, mimi kutumia mwingine kama na mwingine kama na mwingine hapa? Je, mtu yeyote - yeah? [Mwanafunzi akizungumza, inaudible] Hiyo ni kamilifu. Hivyo yeye kusema kwamba haijalishi, kwa sababu tu ya uzembe kwamba tulikuwa kabla ya ni kwamba kwa sababu, labda kama baadhi ya hali ilikuwa kuridhika, hivyo kuwa utekelezaji wake, lakini basi walikuwa wanakwenda kuangalia yote ya hali nyingine. Lakini katika kesi hii, ni kurudi mara moja, hivyo hana jambo. Hivyo huna kutumia mwingine kama. Na hatimaye, hebu majadiliano juu ya anajaribu, ambayo ni favorite ya kila mtu. kujaribu ni mti wa arrays. Ni kwa haraka sana kwa kuangalia juu maadili, lakini inatumia mengi ya kumbukumbu. Na ni kawaida kuchuja maneno, hivyo wakati unataka kutekeleza, kwa mfano, mimi sijui, kama kitabu cha simu katika simu yako na unataka kuwa na uwezo wa aina B na tu na majina ya watu ambao wana B. Ni rahisi sana kutekeleza kwamba kwa kutumia kujaribu, kwa mfano. Jinsi gani unaweza kufafanua node katika kujaribu? Wewe tu kuwa na bool kwamba ni kwenda kuwa is_word. Kwamba inawakilisha kwamba kwa kutumia wahusika wote kabla ya node, walikuwa na uwezo wa kuunda neno, na kisha itabidi safu ya kuyatumia kwa nodes. Unaweza kuona kwamba tuna safu ya nodes mzazi, hivyo nodi * safu? Yeah? Basi hebu angalia jinsi kazi. Kwa kuangalia Spell, tuna safu ya 27 vipengele, kwa sababu tuna kila barua pamoja na apostrophe. Kabla ya hapa Mimi tu kwenda kutumia 2 kwa sababu nataka kuwa na uwezo wa kuandika kwenye ubao. Sawa. Hivyo hii ni mfano wa kujaribu. Kama mimi tu kufafanua node kwanza, mimi itabidi safu ya 2 mambo kwamba ni 2 kuyatumia kwa NULL, hivyo mimi tu ya kuweka 'a' na 'b'. Na mimi nina kwenda na bool kwamba anasema is_word. Ni kwenda kuwa uongo kwa moja kwanza, tu kwa sababu, kabla ya kuwa huna wahusika yoyote. Hivyo neno tupu ni neno. Hivyo ni ya uongo. Kama mimi nataka kuongeza 'a' kwa kamusi hii, gani mimi na kwa nini? Napenda tu na malloc node mpya kwa ajili ya 'a', na kisha kuongeza maneno yake kwa kweli. Hivyo tu inawakilisha kuwa baada ya 'ni kwenda kuwa kweli. Mantiki? Basi, nataka kuongeza 'ba', mimi itabidi malloc 1 kwa 'b', na basi mimi nina kwenda kuanzisha boolean kwa uongo, kwa sababu 'b' na yenyewe ni neno. Kisha mimi nina kwenda malloc mtu mwingine kwa 'a', hivyo 'ba', na basi mimi nina kwenda kuanzisha ni neno kwa kweli. Kwa sababu 'ba' ni neno la Mungu. Na kisha kama nataka kuona kama 'b' ni katika kamusi hii, Mimi unaweza tu kwenda kwa moja ya kwanza, 'b'. Mimi kwenda chini, na mimi kuangalia ni neno, na anasema uongo. Hivyo si neno. Kama mimi nataka kuangalia 'ba', Mimi kwenda moja ya kwanza, 'b', na kisha kwenda 'a', na mimi kuona kweli, hivyo ni neno. Mantiki? mengi ya watu kupata kuchanganyikiwa na inajaribu. No? Hatimaye, Huffman coding. Huffman coding ni muhimu sana kuokoa kumbukumbu na kubana Nakala files, kwa sababu tu mara nyingi matumizi ya 'a' na 'e', ​​kwa mfano, katika hati yako, lakini sijui kama wewe guys kutumia 'q' au 'z' kama sana. Kuwa tu 1 Byte kwa kila tabia moja, kila moja - wahusika 256 kwamba tuna katika meza ASCII si mojawapo sana, kwa sababu tu kuna baadhi ya wahusika kwamba matumizi ya zaidi, hivyo unapaswa pengine kutumia chini ya kumbukumbu kwa hizo. Je, mimi kutumia Huffman coding? Sisi kufanya mti Huffman.  Mti Huffman ina nodes kuwa na ishara kwamba ni kwenda kuwa kama, 'a', 'b', 'c', barua, chochote barua una, frequency kwamba ni ya mzunguko neno hilo limetumika katika maandiko, kwamba walikuwa kujenga mti Huffman kwa, na kisha nodi kwamba inaenda upande wa kushoto wa mti Huffman na node nyingine ambayo inaenda kwa haki. Hivyo tu kama mti. Jinsi gani unaweza kujenga mti Huffman? Wewe ni kwenda kuchukua 2 nodes kuwa na mikondo ya chini. Kama una tie wewe ni kwenda kuchukua 2 nodes kuwa na maadili ya chini ASCII pia. Basi wewe ni kwenda kujenga mti mpya nje ya wale 2 nodes kwamba ni kwenda na frequency pamoja katika mzazi nodi. Na kisha utaenda kuondoa 2 watoto kutoka msitu na kuchukua nafasi yao na mzazi. Na wewe kwenda kurudia kwamba mpaka wewe tu 1 mti katika msitu. Basi hebu angalia jinsi gani kufanya mti Huffman kwa ZAMYLA. Unaweza kuona hapa kwamba barua zote na frequency 1 ila kwa 'A'; ambayo ina mzunguko 2. Basi, mimi kuundwa nodes kwa barua zote mimi kuweka katika utaratibu wa thamani ASCII na mzunguko. Basi, ikiwa mimi unataka kujenga mti kwanza, itakuwa na 'L' na 'M'. Hivyo ni hapa. mzunguko wa jozi itakuwa 2 kwa sababu ni 1 + 1, kisha 2 pili na mikondo ya chini ni 'Y' na 'Z'. Na kisha mimi na wote kuwa - na mzunguko wa 2. Hivyo ambayo ndio ni wale ambao chini thamani ASCII kwa moja ijayo? 'A' na 'L'. Basi, mimi kujenga node mpya, na hatimaye, ni 4 na 2, hivyo 2 ni kwenda kuwa upande wa kushoto. Na hii ni mti Huffman. Basi, nataka kuandika baadhi ya maandishi, kama katika binary kubadili kwa maandishi, kwa kutumia mti Huffman ni rahisi sana. Kwa mfano, kama mimi kusema kwamba kuhamia upande wa kushoto ni 0 na kuhamia haki ni 1, Ni yale ambayo kwenda kuwakilisha? Hivyo kama 1, 1, hivyo haki, haki, na kisha 0, hivyo kushoto itakuwa L, na kisha 1, 0, 0. Hivyo 1, 0, hivyo 1 tu, 0, 'A'. Na kisha 0, 1, hivyo 'Z'. Na kisha 1, 0, 0 - no. 0, 0 itakuwa 'Y', hivyo Lazy. Ili wote kwa ajili yangu, Rob ya kwenda kuchukua juu. [Rob Bowden] Hivyo, wiki 7 mambo ya ajabu. Sisi tumepewa mengi kwenda juu kweli haraka. Bitwise operators, buffer kufurika, CS50 maktaba, kisha HTML, HTTP, CSS. Wote katika kama dakika 15 hadi 20. Bitwise operators. Kuna 6 yao kwamba unahitaji kujua. Bitwise na bitwise au, XOR, kushoto kuhama, mabadiliko ya haki, na si. Haki kuhama na si wewe vigumu kuona katika hotuba wakati wote. Tutaweza kwenda juu haraka hapa, lakini ni vizuri kujua kwamba hizi ni 6 kwamba zipo. Kumbuka kwamba bitwise operators ni kama wakati wa kufanya 3 + 4. Wewe ni si kushughulika na binary ya 3 na 4. Pamoja na bitwise operators wewe ni kweli kushughulika na bits ya mtu binafsi ya idadi 3 na 4. Hivyo moja ya kwanza tutaweza kusema ni bitwise si, na yote ni gani ni flip bits wote. Hivyo hapa, kama wewe ni kuandika hii katika C, bila kuandika kama ~ 11,011 au chochote, ungekuwa kuandika kama ~ 4, na kisha itakuwa flip uwakilishi binary ya 4. Hivyo hapa, ~ ya baadhi ya idadi binary 1101101 ni kwenda hasa flip 1 wote wa 0 na 0 wote wa 1 ya. Kama mimi kusema, ni matumizi ya mara kwa mara hii, na sisi utaona katika kidogo, ni kama tunataka kuja na baadhi ya idadi ambapo wote wa bits ni 1, ila kwa mmoja wao. Hivyo ni kawaida rahisi kueleza idadi ambapo tu kwamba kidogo moja ni kuweka, na kisha kuchukua ~ yake, hivyo kila kidogo nyingine ni kuweka ila kwa kuwa moja. Hivyo kwamba ni nini sisi ni kwenda kutumia zaidi katika kidogo. Bitwise au. Hapa ni 2 idadi binary, na hizi namba 2 ni pretty mwakilishi, kwa vile wao kuwakilisha kila iwezekanavyo mchanganyiko wa bits unaweza haja ya kufanya kazi juu. Hapa, wakati mimi or'd kila kidogo, sisi ni kwenda tu kulinganisha moja kwa moja chini. Hivyo upande wa kushoto tuna 1 na 1. Wakati mimi bitwise | hizo, je, Mimi naenda kupata? Moja. Kisha bitwise | 0 na 1 ni kwenda nipe? Moja. Bitwise 1 na 0 kinaenda kuwa kitu kimoja, moja. Bitwise 0 | 0 ni anaenda kunipa 0. Hivyo kesi tu ambapo mimi kupata 0 ni katika 0 | 0 kesi. Na unaweza kufikiria kwamba kama ORS yako mantiki. Hivyo kama wewe kufikiria 1 kama kweli na 0 kama uongo, kitu hiyo inatumika hapa. Hivyo kweli au kweli ni kweli; kweli au uongo ni kweli. Uongo au kweli ni kweli; uongo au uongo ni kitu tu kwamba ni kweli uongo. Hapa ni mfano kwamba unapaswa kujua kama mfano nzuri ya na watoa huduma bitwise ni kutumika. Hapa kama sisi au mtaji 'A' na Ox20, na tutaangalia hizi katika pili, sisi kupata kitu fulani. Na kama sisi au lowercase 'kwa Ox20, sisi kupata kitu fulani. Basi hebu vuta juu ya meza ASCII. Sawa. Hapa tunaona kuwa 'A' ni - hapa tuna 'A' ni decimal 65. Lakini nitakwenda kwa hexadesimoli, ambayo ni Ox41. Pretty uhakika tuliona katika darasa. Nadhani tuliona katika darasa kwamba ni pretty rahisi kubadili kutoka hexadesimoli kwa binary. Hivyo hapa, kama nataka kuweka 4 katika binary, kwamba tu kwenda kuwa 0100. Hii ni 1 ya mahali, 2 kuchukua nafasi ya 4 ya mahali, hivyo hii ni 4. Basi naweza mgawanyiko 1 katika binary, ambayo ni kwenda kuwa 0001. Na hivyo hii ni kwenda kuwa uwakilishi wa 'A' katika binary. Kuchukua lowercase ', ni sasa kwenda kuwa Ox61, ambapo, kugawanyika haya juu katika binary yake, hivyo 6 - Hebu kweli kufanya hivyo - ni hakuna kifutio? Raba. Ox61. Hivyo kugawanyika 6 katika binary ni kwenda kuwa 0 + 4 + 2 + 0. Na splitting 1 ni kwenda kuwa 0001. Kuangalia tofauti kati ya hizi 2, tunaona kwamba tofauti tu kati ya lowercase na mji mkuu wa 'A' ni hii moja kidogo. Hivyo kuja nyuma hapa - sawa. Kuja nyuma hapa, kama sisi kuangalia nini kidogo Ox20 ni, hivyo kugawanyika Ox20 katika binary yake, ni 0010, 0000. Ox20, kidogo tu kwamba ni kuweka ni kidogo hii kwamba sisi ni wasiwasi na, kwa byte kati ya mji mkuu na ndogo '. Kama mimi au 'A', ambayo ni hii moja, 'A', iwapo mimi au 'A' na Ox20, je, Mimi naenda kupata? [Mwanafunzi, inaudible] Herufi za chini 'a', kwa sababu ni kwenda flip kidogo hii 1. Na iwapo mimi au 'kwa Ox20, je, Mimi naenda kupata? Herufi za chini, kwa sababu tu oring 'kwa Ox20, Mimi tu kwenda oring hii kidogo moja kwa 1; ni tayari 1, hivyo haijalishi. Ili tuweze kupata 'a' na 'a'. Bitwise na. Tena, tunaweza kufikiria hii kama yetu mwenzake mantiki na. Upande wa kushoto tuna kweli & kweli. Ni kwenda kuwa ni kweli, na kwa wote wa kesi, uongo & kweli au ya kweli na uongo, au uongo & uongo, hakuna mambo hayo ni kweli. Hivyo kile sisi kuishia kupata ni 1000. Basi sasa, hapa, hapa ambapo nimekuwa kutumika bitwise muaminifu si, ambapo tulikuwa na Ox20. Hivyo hii ni Ox20. Sasa nini nataka kufanya, bitwise ~ ya Ox20. Hiyo ni kwenda flip bits wote. Hivyo nina 1101, 1111. Na hivyo 'anded na ~ Ox20 ni kwenda nipe nini? tu kidogo sisi kwa kweli wanahitaji kufikiria ni hii moja, tangu, kama wote wa bits hizi ni kuweka 1, kisha tunakwenda kupata nini hasa 'A' ilikuwa, ila kwa, pengine, nini kidogo hii ni. Kwa sababu kama ilikuwa ni 1, sasa ni kwenda kuweka 0, kwa sababu chochote hii ni anded na hii ni kwenda 0. Kwa hiyo kile ni 'A' & ~ Ox20 kwenda nipe? [Wanafunzi kujibu, inaudible] Na nini ni 'a' na - ni 'A'. Na kile ambacho ni '& ~ Ox20 kwenda nipe? 'A.' Kwa sababu hii kwa sasa ni 1. Anding na hii 0 ni kwenda kufanya ni 0, na sasa sisi ni kwenda kupata 'A'. Wote ni 'A,' na mwisho lakini si uchache wa aina hii, tuna XOR. Ni sana kama au, ila ina maana peke au. Hii ni kama nini kawaida kufikiria kama au katika ulimwengu wa kweli. Hivyo kufanya ama 'x' au 'y', lakini si wote. Hapa 1 ^ 1 ni kwenda 0. Kwa sababu kweli, hii ni - haifanyi kazi kama pamoja na mantiki kweli na wa uongo kama bitwise & na au kufanya, lakini ni kweli ^ kweli ni ya uongo. Kwa sababu sisi tu wanataka kurudi kweli kama tu mmoja wao ni kweli. Hivyo 1 ^ 1 ni 0. Nini kuhusu 0 ^ 1? Ni 1. 1 ^ 0 ni 1, 0 ^ 0 ni 0. Hivyo chini ya hali zote, 0 bitwise kitu 0 ni kwenda 0. 1 bitwise kitu 0 au 0 bitwise 1, kama ni | ama ^, utakuwa ni 1, na kama ni & utakuwa 0. Na kesi tu ambapo 1 bitwise 1 ni si 1 ni pamoja na ya kipekee au. Hiyo ni 0110. Hivyo hapa sasa, kwa kutumia XOR - hivyo tuko nyuma katika 20. '^ Ox20 ni hizi 2 bits sisi ni kulinganisha. Hivyo 1 ^ 0 ni kwenda nipe nini? moja. '^ Ox20 ni kwenda nipe? Herufi za chini. '^ Ox20 ni kwenda nipe? Capital A. Kwa sababu chochote hii ni kufanya, XORing huu kwa Ox20 ni ufanisi flipping chochote kidogo hii ni. Kama hii ni 0, ni sasa kwenda kuwa 1. Tangu hii ni 1, 1 ^ 1 ni 0. Hivyo yetu 'imekuwa' A ', na' A 'yetu imekuwa'. Hivyo XOR ni njia ya kweli rahisi ya tu flipping kesi. Unataka tu iterate juu ya kamba ya barua na mbadala kesi ya kila tabia moja, wewe tu XOR kila kitu kwa Ox20. Sasa tuna kushoto kuhama. Kushoto mabadiliko ni kwenda tu, kimsingi, kushinikiza wote wa idadi ya ndani, au wa kushoto, na kuingiza 0 ya nyuma yao. Kwa hiyo hapa tuna 00,001,101. Tunakwenda kushinikiza 3 0 katika kutoka kulia, na sisi kupata 01,101,000. Katika suala nonbinary, tunaona kwamba kwamba ni kweli kushughulika 13 wa kushoto-kubadilishwa na 3, ambayo inatupa 104. Hivyo kushoto shifting, tunaona hapa, x << y kimsingi ni x * 2 ^ y. 13 * 2 ^ 3, 2 ^ 3 ni 8, hivyo 13 * 8 ni 104. Kama wewe tu kufikiri juu ya binary kwa ujumla, jinsi kila tarakimu, kama sisi kuanza kutoka kulia, ni 1 ya mahali, kisha 2 ya mahali, kisha 4 ya mahali. Hivyo kwa kusukuma katika 0 kutoka haki, tuko tu kusukuma mambo ambayo yalikuwa katika 4 kuchukua nafasi ya 8 ya mahali, na mambo ambayo yalikuwa katika 8 ya mahali 16 kuchukua nafasi ya. Kuhama kila tu kuzidisha kwa 2. Yeah? [Mwanafunzi] Nini kinachotokea kama wewe kubadilishwa kwa 5? [Bowden] Kama kubadilishwa kwa 5 ungependa tu kupoteza tarakimu. Bila ya shaka, ni kitu kimoja. Kama, integers ni bits 32 tu, hivyo kama wewe kuongeza 2 kwa kweli kubwa integers, ni tu haiendani na katika integer. Hivyo kitu kimoja hapa ni. Kama kubadilishwa kwa 5, sisi ingekuwa tu kupoteza moja. Na kwamba ni aina ya kile maana ya "takribani," ambapo kama wewe kuhama mbali pia, wewe kupoteza bits. Haki mabadiliko ni kwenda kuwa kinyume, ambapo tunakwenda mkupuo 0 ya mbali mwisho, na kwa madhumuni yetu, kujaza 0 kutoka upande wa kushoto. Hivyo kufanya hivyo, sisi ni kimsingi kupunguza nini tulikuwa tayari amefanya. Na sisi kuona kwamba tatu 0 juu ya haki tu kuanguka mbali, na tuna kusukuma 1101 njia yote ya haki. Hii ni kufanya 104 3, ambayo ni, kwa ufanisi, x / 2 ^ y. Basi sasa, hapa, ni wazo sawa. Kwa nini ni tu takribani x / 2 ^ y, na si kweli x / 2 ^ y? Kwa sababu kama alikuwa kubadilishwa kwa 4, napenda wamepoteza 1. Kimsingi, nini unafikiri, tu kufikiria integer mgawanyiko kwa ujumla. Hivyo, kama 5/2 ni 2. Siyo 2.5. Ni wazo sawa hapa. Wakati sisi kugawanya na 2, tunaweza kupoteza bits isiyo ya kawaida njiani. Hivyo sasa - hiyo ni kwa bitwise. Hayo ni yote unahitaji kujua. Kumbuka kesi ya matumizi tuliona katika darasa, kama mask kidogo ni muhimu kwa ajili ya bitwise operators, au matumizi yao kwa kidogo masks. Barua herufi kubwa na ndogo, kubadili ni mfano pretty prototypical. Sawa, hivyo buffer mashambulizi kufurika. Mtu yeyote kukumbuka nini ilikuwa na makosa na kazi hii? Taarifa sisi alitangaza safu ya ka 12, chars 12, na kisha sisi nakala katika buffer yetu ya 12 chars string nzima bar. Hivyo tatizo ni nini hapa? idadi uchawi 12 lazima pretty much mara moja pop nje kama - kwa nini 12? Nini kama bar hutokea kwa kuwa wahusika zaidi ya 12? Nini kama bar ni mamilioni ya wahusika? Hapa suala ni memcpy. Kama bar ni muda wa kutosha, itakuwa tu kabisa - 'c', 'c' haina huduma kuwa ni wahusika 12 tu; 'C' haina huduma ya kwamba haiwezi fit ka kwamba watu wengi. Itakuwa tu kabisa overwrite char, ka 12 tumekuwa zilizotengwa kwa ajili yake, na kila kitu siku za nyuma katika kumbukumbu kwamba si kweli ni mali ya kwamba buffer na chochote kamba bar ni. Hiyo ilikuwa picha tuliona katika darasa ambapo tuna stack wetu kukua up. Unapaswa kutumika picha hizi au kupata familiar pamoja nao tena. Sisi stack wetu kupanda juu, anwani kumbukumbu kuanza saa 0 juu na kukua chini ya kama bilioni 4 chini. Tuna safu yetu 'c' mahali fulani katika kumbukumbu, basi tuna pointer yetu bar haki chini yake, na kisha tuna hii kuokolewa frame pointer katika kurudi anwani yetu na stack mzazi wetu mara kwa mara ya. Kumbuka yale kurudi anwani ni? Ni wakati kuu wito kazi foo, wito bar kazi, inevitably, bar anarudi. Hivyo wakati bar anarudi, wanahitaji kujua kwamba ni kurejea foo kwamba wito yake. Hivyo kurudi anwani ni ya barua pepe ya kazi ambayo ina kurudi wakati kazi anarudi. sababu hiyo muhimu kwa buffer mashambulizi kufurika ni kwa sababu, conveniently, walaghai kama mabadiliko hayo kurudi anwani. Badala ya kurejea foo, mimi nina kwenda nyuma popote hacker anataka niende nyuma. Na, conveniently, ambapo hacker mara nyingi anataka kwenda nyuma ni mwanzo wa buffer kwamba sisi awali alikuwa. Hivyo taarifa, tena, Little ya Hindi. appliance ni mfano wa Little Hindi mfumo, hivyo integer au pointer ni kuhifadhiwa na ka kuachwa. Kwa hiyo hapa tunaona - ni hii? Yeah. Tunaona Ox80, OxC0, Ox35, OxO8. Kumbuka tarakimu hexadesimoli? Hatuna kubadili tarakimu hexadesimoli katika kidogo ya Hindi, kwa sababu 2 hexadesimoli tarakimu kufanya juu ya byte moja, na sisi kubadili ka. Hiyo ni kwa nini sisi si kuhifadhi, kama, 80530CO8. Sisi kuhifadhi, badala yake, kila jozi ya tarakimu 2, kuanzia kulia. Anwani kwamba inahusu ya barua pepe ya kuanza ya buffer yetu kwamba sisi kweli alitaka nakala katika katika nafasi ya kwanza. sababu hiyo muhimu ni kwa sababu, nini kama mshambulizi kilichotokea kwa, badala ya kuwa string kwamba mara tu kamba wapole ya kama, majina yao au kitu, nini kama, badala yake, kamba waliokuwa baadhi tu ya code holela kwamba alifanya chochote walitaka kufanya? Ili waweze - Siwezi kufikiria ya maadili ya yoyote ya baridi. Inaweza kuwa kitu chochote, ingawa. Yoyote code mno. Kama walitaka, wangeweza tu kufanya kitu katika makosa seg, lakini hiyo haina maana. Kwa kawaida kufanya hivyo hack mfumo wako. Sawa. CS50 maktaba. Hii ni, kimsingi, GetInt, GetString, kazi wale wote sisi zinazotolewa kwa ajili yenu. Hivyo tuna * kamba char, na kwamba uchukuaji kwamba sisi akapiga mbali wakati fulani katika muhula. Kumbuka kwamba string ni safu ya wahusika. Kwa hiyo hapa tunaona toleo abridged ya GetString. Unapaswa kuangalia nyuma katika ni kukumbuka jinsi ni kweli kutekelezwa. Maelezo muhimu ni, taarifa sisi kupata katika tabia ya moja kwa wakati kutoka kiwango katika, ambayo ni tu kama sisi kuandika katika keyboard. Hivyo tabia moja kwa wakati mmoja, na kama sisi kupata wahusika wengi mno, hivyo kama n + 1 ni kubwa kuliko uwezo, basi tunahitaji kuongeza uwezo wa buffer yetu. Hivyo hapa sisi ni mara mbili ya ukubwa wa buffer yetu. Na kwamba anaendelea kwenda; sisi kuingiza tabia ndani ya buffer wetu mpaka tupewe line mpya au mwisho wa faili au chochote, katika kesi hiyo, sisi ni kosa kwa kamba na kisha GetString halisi akirudi kumbukumbu, kama kama sisi zilizotengwa kwa ajili ya kumbukumbu sana kutakuwa na kwenda nyuma na kuogopa kidogo. Hivyo hatuna kuonyesha kwamba, lakini wazo kuu ni ina kusoma katika tabia moja kwa wakati mmoja. Haiwezi kuwa tu kusoma katika jambo zima kwa mara moja, kwa sababu buffer yao ni tu ya ukubwa fulani. Hivyo kama kamba kwamba anajaribu kuingiza ndani ya buffer ni kubwa mno, basi itakuwa kufurika. Hivyo hapa sisi kuzuia kwamba kwa kusoma tu katika tabia moja wakati na kuongezeka kwa wakati wowote tunahitaji. Hivyo GetInt na wengine CS50 kazi maktaba huwa na kutumia GetString katika utekelezaji wao. Hivyo nilieleza mambo muhimu hapa. Ni wito GetString kupata kamba. Kama GetString alishindwa kurudi kumbukumbu, kukumbuka kwamba GetString mallocs kitu, hivyo wakati wewe piga GetString unapaswa (yasiyo na) bure kwamba kamba kwamba got. Hivyo hapa, kama alishindwa malloc kitu, sisi kurudi INT_MAX kama tu bendera kwamba, hey, sisi si walikuwa kweli na uwezo wa kupata integer. Unapaswa kupuuza chochote mimi kurudi kwenu, au unapaswa kutibu hii kama pembejeo halali. Hatimaye, kuchukua kwamba hakuwa kufanikiwa, sisi kutumia sscanf na kwamba bendera maalum, maana yake, kwanza mechi integer, kisha mechi wahusika yoyote baada ya hapo integer. Hivyo taarifa tunataka kwa sawa 1. Anarudi hivyo sscanf jinsi mechi nyingi kama mafanikio alifanya? Itakuwa kurudi 1 kama ni mafanikio kuendana integer, itakuwa kurudi 0 kama hakuwa na mechi integer, na atarudi 2 kama kuendana integer na kufuatiwa na baadhi ya tabia. Hivyo taarifa sisi kujaribu tena kama sisi mechi kitu chochote lakini 1. Hivyo kama sisi aliingia 1, 2, 3, C, au 1, 2, 3, X, kisha 1, 2, 3 bila kupata kuhifadhiwa katika integer, X bila kupata kuhifadhiwa katika tabia, sscanf atarudi 2, na sisi ingekuwa kujaribu tena, kwa sababu sisi tu wanataka integer. Haraka kupiga kupitia HTML, HTTP, CSS. HyperText Markup Language ni muundo na semantiki ya mtandao. Hapa ni mfano kutoka hotuba ambapo tuna HTML. Tuna vitambulisho kichwa, vitambulisho mwili, tuna mifano ya vitambulisho tupu ambapo sisi kwa kweli hawana kuanza na tag karibu, sisi tu kiungo na picha. Hakuna kufunga picha tag; kuna tu tag moja ambayo kutimiza kila kitu tag anatakiwa kufanya. kiungo ni mfano, tutaweza kuona ni jinsi gani zilizounganishwa na CSS, script ni mfano wa jinsi zilizounganishwa na nje JavaScript. Ni pretty moja kwa moja, na kumbuka, HTML ni si lugha ya programu. Hapa, kumbuka jinsi gani kufafanua fomu au angalau kile huu bila kufanya? Fomu kama ina hatua na mbinu. mbinu wewe milele tu kuona ni GET na POST. Hivyo kupata ni toleo la ambapo kitu anapata kuweka katika URL. POST ni mahali ambapo si kuweka katika URL. Badala yake, data yoyote kutoka fomu ni kuingizwa siri zaidi katika ombi HTTP. Hivyo hapa, hatua amefafanua ambapo ombi HTTP unaendelea. Ambapo itakuja ni google.com / search. Method. Kumbuka tofauti kati ya GET na POST, na, kusema tu kama mfano, kama unataka alama kitu. Wewe kamwe kuwa na uwezo wa alama POST URL kwa sababu data si ni pamoja na katika URL. HTTP, sasa, ni HyperText Transfer Itifaki. HyperText Transfer Itifaki, bila kutarajia ni kuhamisha HyperText Markup Language, na ni gani. Lakini pia uhamisho picha yoyote kupata kwenye mtandao, downloads yoyote ya kufanya kuanza kama ombi HTTP. Hivyo HTTP ni lugha ya mtandao wa dunia nzima. Na hapa unahitaji kutambua aina hii ya ombi HTTP. Hapa HTTP/1.1 upande tu anasema kwamba toleo ya itifaki mimi nina kutumia. Ni pretty much daima itakuwa HTTP/1.1, kama utaona. Kisha sisi kuona kwamba hii ilikuwa GET, mbadala kuwa POST, kwamba unaweza kuona. Na URL kwamba mimi alikuwa anajaribu kutembelea mara www.google.com/search?q = blah, blah, blah. Basi kumbuka kwamba hii, alama swali q = blah blah blah, ni aina ya mambo ambayo ni kuwasilishwa kwa aina. majibu inaweza kurudi kwangu bila kuangalia kitu kama hiki. Tena, kwa kuanzia na itifaki, ambayo ni kwenda kuwa, ikifuatiwa na hali ya code. Hapa ni 200 sawa. Na hatimaye, ukurasa wa mtandao kwamba mimi kwa kweli aliuliza kwa zitafuatwa. iwezekanavyo hali ya code unaweza kuona, na unapaswa kujua kadhaa. 200 OK wewe kuwa pengine kuona mbele. 403 Haramu, 404 haionekani, Error 500 Ndani Server ni kawaida kama wewe kwenda kwenye tovuti na kitu ni kuvunjwa au shambulio yao PHP code, ambapo katika appliance tuna kuwa kubwa sanduku rangi ya machungwa kuja juu na kusema, kama, kuna kitu kibaya, kanuni hii haina kazi au kazi hii mbaya. Kawaida tovuti sitaki wewe kujua nini kazi ni kweli mbaya, hivyo badala wao itabidi tu kukupa 500 Ndani Makosa Server. TCP / IP ni 1 safu chini ya HTTP. Kumbuka kuwa kuna mtandao nje ya mtandao wa dunia nzima. Kama kama wewe kucheza mchezo online kwamba hana kupitia HTTP, ni kwenda kwa tofauti - ni bado kutumia mtandao, lakini haina matumizi HTTP. HTTP ni mfano mmoja tu wa itifaki umejengwa juu ya TCP / IP. IP maana yake halisi ni Itifaki ya mtandao. Kila kompyuta ina anwani ya IP; wao ni wale 4-tarakimu mambo kama 192.168.2.1, au chochote; kwamba huelekea kuwa moja ya ndani. Lakini hiyo ni mfano wa anwani ya IP. Hivyo DNS, Domain Jina Service, kwamba ni nini tafsiri ya mambo kama google.com kwa anwani halisi IP. Hivyo kama wewe aina hiyo IP katika URL, kwamba itakuwa kuleta kwa Google, lakini wewe huwa si kukumbuka mambo hayo. Wewe huwa na kumbuka google.com badala yake. Jambo la mwisho sisi ni bandari, ambapo hii ni TCP sehemu ya IP. TCP gani zaidi. Kufikiri juu, kama, unaweza kuwa na mtandao browser yako mbio. Labda una baadhi mbio email maombi; labda una baadhi ya mpango mwingine ambao hutumia mtandao mbio. Wote wanahitaji kupata mtandao, lakini kompyuta yako tu ina 1 WiFi kadi au chochote. Hivyo bandari ni njia ambayo sisi ni uwezo wa kupasuliwa up jinsi maombi hayo ni uwezo wa kutumia mtandao. Kila maombi anapata 1 maalum bandari kwamba unaweza kusikiliza juu, na kwa default, HTTP anatumia bandari 80. Baadhi ya huduma ya barua pepe kutumia 25. wale wa chini-kuhesabiwa huwa na kuwa zimehifadhiwa. Wewe ni kawaida na uwezo wa kupata wale juu-kuhesabiwa kwa mwenyewe. CSS, kuachia Style Sheets. Kurasa za mtandao sisi style na CSS, si kwa HTML. Kuna 3 maeneo unaweza kuweka CSS yako. Inaweza kuwa inline, kati ya vitambulisho style, au katika faili tofauti kabisa na kisha wanaohusishwa in Na hapa ni mfano tu wa CSS. Unapaswa kutambua muundo huu, ambapo mfano wa kwanza ni sisi ni vinavyolingana tag mwili, na hapa sisi ni centering tag mwili. mfano wa pili, sisi ni vinavyolingana kitu na ID footer, na sisi ni kuomba baadhi ya mitindo hiyo. Taarifa kwamba ID footer Nakala aligns-wa kushoto, ambapo mwili text-aligns kituo hicho. Footer ni ndani ya mwili. Itakuwa, badala yake, text-align kushoto, ingawa mwili anasema kituo hicho text-align. Hii ni zima kuachia sehemu yake. Unaweza kuwa na - unaweza bayana mitindo kwa mwili, na kisha mambo katika mwili unaweza bayana mitindo mahsusi zaidi, na mambo ya kazi kama wewe kutarajia. Specifiers zaidi maalum CSS fuatilia. Nadhani hiyo ni yake. [Ali Nahm] Hi kila mtu. Kama mimi naweza tu kupata mawazo yako. Mimi nina Ali na mimi nina kwenda kupitia PHP na SQL kweli haraka. Ili tuweze kuanza. PHP ni short kwa PHP: HyperText Preprocessor. Na kama wewe wote wanapaswa kujua, ni server-upande lugha scripting, na sisi kutumia kwa ajili ya mwisho ya nyuma ya Nje, na jinsi gani mengi ya computations, nyuma ya pazia sehemu. Syntax. Siyo kama C, mshangao, mshangao. Daima ina kuanza na, kama unaweza kuona, - Siwezi kusonga mbele. Unaweza kuona unahitaji aina mpya ya braces na kisha unahitaji pia? Php. Hiyo ni daima jinsi una sura PHP wako wa maandishi, PHP code yako. Hivyo haiwezi tu kuwa kama C, ambapo aina ya kuiweka juu ya kwanza. Unahitaji daima Surround yake. Na sasa, syntax kubwa ni kwamba vigezo vyote haja ya kuanza kwa $ tabia. Wewe haja ya kufanya hivyo wakati wewe ni kufafanua yao, unahitaji kufanya hivyo wakati wewe ni akimaanisha kwao baadaye. Daima haja ya $ hiyo. Ni rafiki yako mpya bora, pretty much. Huwezi - tofauti na C, huna haja ya kuweka aina gani ya kutofautiana aina ni. Hivyo wakati huna haja ya $, huna haja ya kuweka, kama, int x au kamba y, nakadhalika, nakadhalika. Hivyo tofauti kidogo. Kama matokeo ya hili, maana yake ni kwamba PHP ni aina weakly. PHP ni weakly lugha aina, na ina weakly typed vigezo. Kwa maneno mengine, hiyo ina maana kwamba unaweza kubadili kati ya aina tofauti ya aina ya kutofautiana. Unaweza kuhifadhi namba yako ya 1 kama int, unaweza kuhifadhi kama kamba, na unaweza kuhifadhi kama kuelea, na yote itakuwa kwamba idadi 1. Hata kama wewe ni hifadhi hiyo katika aina mbalimbali, bado ni - aina variable bado ni kufanya katika mwisho. Hivyo kama wewe kuangalia hapa, kama unakumbuka kutoka pset 7, wengi wenu pengine alikuwa na masuala na hili. Mbili ishara sawa, 3 ishara sawa, ishara 4 sawa. Sawa, hakuna dalili 4 sawa, lakini kuna 2 na 3. Unaweza kutumia 2 ishara sawa na kuangalia maadili. Ni unaweza kuangalia katika aina. Hivyo kama unaweza kuona katika mfano wa kwanza, Nina num_int == num_string. Hivyo int yako na kamba yako ni wawili, kitaalam, 1, lakini wao ni aina mbalimbali. Lakini kwa usawa mara mbili, kutakuwa na bado kupita. Hata hivyo, kwa usawa tatu, ni hundi thamani kama vile aina mbalimbali. Hiyo ina maana kwamba siyo kwenda kupita katika kesi ya pili hapa, ambapo unatumia 3 ishara sawa badala yake. Hivyo hiyo ni tofauti kubwa kwamba lazima wote umeonyesha sasa. Kamba concatenation ni kitu kingine nguvu unaweza kutumia katika PHP. Ni kimsingi tu hii Handy dot nukuu, na kwamba ni jinsi gani inaweza kumfunga masharti pamoja. Hivyo kama una Cat na una Dog, na unataka kuweka 2 masharti pamoja, unaweza kutumia kipindi, na hiyo ni aina ya jinsi kazi. Unaweza pia tu kuwaweka karibu na kila mmoja, kama unaweza kuona hapa katika mfano chini, ambapo nina echo string 1, nafasi string 2. PHP kujua nafasi yao kama vile. Arrays. Sasa, katika PHP, kuna 2 aina mbalimbali za arrays. Unaweza kuwa na arrays mara kwa mara, na unaweza pia kuwa na arrays associative, na sisi ni kwenda njia ya haki yao sasa. Mara kwa mara na arrays ni haki hii katika C, na hivyo kuwa fahirisi kwamba zinahesabika. Hivi sasa tuko tu kwenda kujenga moja na kuweka - hivyo hii ni jinsi sisi kujenga safu tupu, kisha tunakwenda kuweka katika index namba 0. Sisi ni kwenda kuweka namba 6, thamani 6. Unaweza kuona chini hapa. Where's - katika index namba 1 tunakwenda kuweka thamani namba 4, na hivyo unaweza kuona kuna 6, kuna 4, na kisha kama sisi ni uchapishaji mambo, wakati sisi kujaribu na magazeti thamani kuhifadhiwa katika index namba 0, kisha tutaweza kuona thamani 6 kuwa kuchapishwa. Cool? Hivyo kwamba ni arrays mara kwa mara kwa ajili yenu. Njia nyingine unaweza pia kuongeza mambo ya arrays mara kwa mara sasa ni unaweza tu append yao mwishoni. Hiyo ina maana kwamba huna kutaja maalum index. Unaweza kuona idadi, na kisha katika mabano mraba hakuna index maalum. Na itakuwa kujua - PHP kujua tu kuongeza hadi mwisho wa orodha, karibu bure doa. Hivyo unaweza kuona 1 haki pale katika kwamba 0 doa, 2 akaenda haki pale katika doa kwanza. 3 huenda - ni aliongeza huko pia. Ili aina ya hufanya akili. Wewe tu mara kwa mara na kuongeza kuwa, na kisha wakati sisi ni akirejea ripoti ya namba 1, itakuwa magazeti nje thamani 2. Kisha sisi na arrays kwamba ni arrays associative. Arrays associative, badala ya kuwa fahirisi namba, wanachokifanya ni, wana fahirisi kwamba ni kwa kamba. Unaweza kuona, badala ya - I got kuondoa wale wote fahirisi posta, na sasa ni key1, key2, key3, na wao uko katika quotes mbili kwa ishara ya kwamba wao ni masharti yote. Ili tuweze kuwa na mfano wa hii. Mfano wa hili ni kwamba tuna tf, na kwamba jina index. Sisi ni kwenda kuweka "Ali" kama jina, katika index, kalori kuliwa, tunaweza kuweka int wakati huu badala ya kamba, na kisha index anapenda, tunaweza kuweka safu nzima ndani yake. Hivyo hii ni aina ya - ni sawa na dhana ya jinsi tulikuwa fahirisi na idadi, lakini sasa tunaweza kubadili fahirisi karibu kuwa nao kama masharti badala yake. Unaweza pia kufanya hivyo, badala ya tu kufanya hivyo mmoja mmoja, unaweza kufanya yote katika chunk moja. Hivyo unaweza kuona kwamba tf ya kwamba safu, na kisha sisi kuweka watu wote katika moja kubwa za mraba mabano kuweka. Hivyo kwamba wanaweza kasi ya mambo up. Ni zaidi ya uchaguzi Stylistic kuliko hivyo. Sisi pia kuwa matanzi. Katika C tuna matanzi kwamba kazi kama hii. Tulikuwa na safu yetu, na sisi akaenda kutoka index 0 hadi mwisho wa orodha, na sisi magazeti yote, sawa? Ila tatizo ni, kwa associative arrays, sisi si lazima kujua fahirisi wale namba kwa sababu sasa tuna fahirisi kamba. Sasa sisi kutumia foreach tanzi, ambayo, tena, hopefully kutumika katika pset 7. Foreach loops tu kujua kila sehemu moja ya orodha. Na haina kujua hasa index namba kwamba wewe. Hivyo kuwa foreach syntax, hivyo ni foreach, kuweka safu. Hivyo safu yangu inaitwa pset, na kisha kama, neno kama, na kisha kuweka variable hii mitaa muda kwamba wewe ni kwenda kutumia tu kwa ajili ya kitu maalum kwamba kinaendelea kushikilia maalum - mfano moja au sehemu moja ya safu. Pset num kushikilia 1, na kisha labda ni kushikilia namba 6, na kisha kushikilia namba 2. Lakini ni uhakika kupitia kila thamani moja kwamba katika safu. Kazi muhimu ambayo unapaswa kujua katika PHP ni kuhitaji, hivyo kwamba inafanya uhakika kuwa wewe ni ikiwa ni pamoja na baadhi ya files, echo, exit, tupu. Mimi sana kupendekeza ukiangalia pset 7 na kuangalia kazi hizo. Unaweza kuwa na kujua hizo, hivyo napenda dhahiri kujua nini, hasa, wale wote kufanya. Na sasa sisi ni kwenda kupitia wigo kweli haraka. Kwa upeo, PHP ni aina ya kitu funky, tofauti na C, na hivyo sisi ni kwenda tu kwenda kwa njia hiyo haraka. Basi hebu kusema sisi kuanza saa mshale kwamba tuna huko. Na sisi ni kwenda kuanza na $ i. Hivyo variable 'i' ni kwenda 0, na sisi ni kwenda tu kuweka uchapishaji ni katika kuwa nyeupe kubwa sanduku zaidi ya hapo. Sisi ni kwenda kuanza na i0, na kisha tunakwenda kurudia yake. Hivyo kuna 0. Na kisha tunakwenda nyongeza ni kwa ajili ya kitanzi, na kisha kwenda kuwa thamani ya 1. Moja ni chini ya 3, hivyo kwenda kupita kwamba kwa kitanzi, na kisha tunakwenda kuona kuchapishwa tena. Tunakwenda nyongeza tena kwa 2, na 2 ni chini ya 3, hivyo itabidi kupita kwa kitanzi, na kutakuwa na magazeti 2. Basi itabidi kumbuka kuwa 3 ni si chini ya 3, hivyo tutaweza kuvunja nje ya kwa kitanzi. Hivyo sasa tumekuwa exited, na kisha sisi ni kwenda katika aFunction. Sawa. Hivyo kuwa na kumbuka kuwa kutofautiana hii tumeunda, 'I' variable, si ndani ya nchi scoped. Hiyo ina maana kwamba siyo ndani kitanzi, na kwamba variable bado tunaweza kupata na mabadiliko ya baadaye, na bado kuwa na ufanisi. Hivyo kama wewe kwenda katika kazi sasa, utaona kwamba sisi pia kutumia 'i' variable, na tunakwenda nyongeza 'i' + +. Unaweza kudhani, kwa mara ya kwanza, kwa kuzingatia C, kwamba nakala ya 'i' kutofautiana. Ni jambo tofauti kabisa, ambayo ni sahihi. Hivyo wakati sisi magazeti hayo, tunakwenda magazeti 'i' + +, ambayo ni kwenda magazeti kuwa 4, na kisha tunakwenda - sorry. Kisha tunakwenda mwisho nje ya kazi hiyo, na tunakwenda kuwa na ambapo mshale ni hivi sasa. Hiyo ina maana kwamba huo, hata hivyo, ingawa kazi iliyopita thamani ya 'i', hakuwa na kubadili nje ya kazi, kwa sababu kazi ina wigo tofauti. Hiyo ina maana kwamba wakati sisi echo 'i', ina si iliyopita katika wigo wa kazi, na hivyo basi tunakwenda magazeti 3 tena. Mambo mbalimbali juu ya mipaka katika PHP kuliko katika C. Sasa katika PHP na HTML. PHP ni kutumika kufanya kurasa za mtandao nguvu. Ni aina ya hufanya mambo mbalimbali. Tuna ni tofauti na HTML. Kwa HTML, sisi daima tu kuwa sawa tuli kitu, kama jinsi Rob ilionyesha, ambapo PHP, unaweza kubadilisha mambo msingi ambao user ni. Basi, ikiwa mimi na huu, mimi, "Wewe ni watumiaji katika kama -" na kisha jina, na Mimi naweza kubadili jina. Hivyo sasa hivi jina ni Joseph, na ina "kuhusu mimi," lakini naweza pia kubadili jina kuwa na Tommy. Na kwamba itakuwa ni jambo tofauti. Hivyo tunaweza pia kubadili mambo mbalimbali juu yake, na itakuwa kuonyesha bidhaa tofauti kulingana na jina. Hivyo PHP unaweza aina ya kubadili nini kinaendelea katika tovuti yako. Same hapa. Hata hivyo, kumbuka kwamba wao kuwa na maudhui tofauti, hata kama wewe ni utaalamu bado kupata mtandao huo ukurasa kwamba juu ya uso. Kuzalisha HTML. Kuna njia 2 mbalimbali ambazo unaweza kufanya hivyo. Hivyo tutaweza kwenda kwa kuwa hivi sasa. Njia ya kwanza ni, una - yeah, sorry. Hivyo tu na mara kwa mara yako kwa kitanzi katika PHP, na kisha echo katika PHP na echo nje HTML. Kutumia kile Rob ilionyesha yenu ya HTML script na kisha kwa kutumia PHP magazeti tu magazeti ya nje kwa ukurasa wa mtandao. njia mbadala ni kufanya hivyo kama wewe tofauti nje PHP na HTML. Hivyo unaweza kuwa mstari wa PHP kwamba kuanza kwa kitanzi, basi unaweza kuwa mstari wa HTML katika kitu tofauti, na kisha mwisho kitanzi, tena, na PHP. Hivyo ni aina ya kutenganisha nje. Upande wa kushoto, unaweza kuwa una wote - ni 1 tu chunk ya PHP. Juu ya haki unaweza kuona kwamba una mstari wa PHP, una mstari wa HTML, na una mstari wa PHP tena. Hivyo kutenganisha ni nje katika waliyo ni kufanya. Na wewe utakuwa kumbuka kuwa aidha njia, kwa aidha wao, wao bado magazeti nje ya picha, picha, picha, ili HTML bado ni kuchapishwa njia hiyo hiyo. Na kisha bado utaona 3 images show up kwenye tovuti yako. Hivyo ni njia 2 mbalimbali ya kufanya kitu kimoja. Sasa tuna aina na maombi. Kama Rob ilionyesha wewe, kuna aina ya HTML, na sisi tu breeze kwa njia hii. Una hatua na una mbinu, na hatua yako aina ya inaonyesha wapi utaenda kutuma, na njia ni kama ni kwenda kuwa GET au POST. Na ombi GET, kama Rob akasema, ina maana kwamba ni kwenda kuweka katika fomu na utaona kama URL, ambapo ombi POST huwezi kuona katika URL. Hivyo tofauti kidogo. Hata hivyo, jambo moja kwamba jambo kama hilo ni kwamba POST na GET ni sawa salama. Hivyo unaweza kufikiri kwamba kwa sababu tu huna kuona katika URL, hiyo ina maana POST ni salama zaidi, lakini bado unaweza kuona katika cookies zako katika taarifa kwamba wewe ni kutuma. Hivyo sidhani kuwa karibu moja au nyingine. Kitu kingine kukumbuka ni kwamba wewe pia kuwa na sehemu vigezo. You guys alitumia katika pset 7 kupata user ID habari yako. Ni nini kilichotokea ni kwamba unaweza kutumia safu hii associative, $ _SESSION, Na kisha uko na uwezo wa kupata mambo mbalimbali na kuhifadhi vitu mbalimbali katika kurasa. Jambo la mwisho ni kwamba tuna SQL, Uliza muundo lugha, na hii ni lugha ya programu ya kusimamia database. Nini, hasa, ni database? Wao ni makusanyo ya meza, na kila meza inaweza kuwa sawa aina ya vitu. Hivyo tulikuwa na meza ya watumiaji katika fedha pset yako. Na kwa nini wao muhimu? Kwa sababu ni njia ya kudumu ya kuhifadhi habari. Ni njia ya kufuatilia mambo na kusimamia mambo na kwa kweli kuona kwenye kurasa tofauti na kuweka wimbo. Wakati kama wewe tu kuhifadhi katika kwamba mtu mara moja wakati na kisha kutumia baadaye, huwezi kuwa na uwezo wa kupata kitu chochote wameweza kuokolewa. Tuna 4 mambo makubwa kwamba sisi kutumia kwa amri SQL. Tuna kuchagua, kuingiza, kufuta, na update. Wale ni kweli ni muhimu kwa nyie kujua kwa jaribio yako. Tutaweza haraka kwenda juu ya haki ya kuchagua sasa. Kimsingi, wewe ni kuchagua safu kutoka database. Hivyo kama una, haki hapa - tuna mambo haya 2 mbalimbali, na tunataka kuchagua kutoka madarasa meza ambapo kutisha - ambapo katika safu ya kutisha thamani ni 1. Hivyo unaweza kuona hapa, tuna mambo haya 2 ya jina darasa, CS50 na Stat110, na sisi na vitambulisho darasa na kauli mbiu. Hivyo tunataka kuchagua wote wa habari kwamba. Basi unaweza kuona haki hapa kwamba ni aina ya kuokota nje ya safu ya kwamba kutisha, ambapo mambo yote ni 1, na kisha ina darasa ID, jina darasa na kauli mbiu ya kwamba inaweza kuchukua nje. Jinsi gani hasa gani unaweza kufanya hili katika kanuni? Una kutumia PHP. Basi hiyo ni aina ya jinsi PHP na SQL ni kuhusiana na kila mmoja. Sasa tuna kanuni zetu, na sisi ni kwenda kutumia swala yetu kufanya kazi kama tulivyofanya katika pset 7, na sisi ni kwenda kukimbia SQL query. Kisha tunakwenda na - sisi daima kuwa na kuangalia kama mstari wa tatu sawa kama uongo. Hivyo tena, unataka kuangalia aina na thamani, na kisha kama hana kazi, basi unataka kuomba msamaha, kama kawaida, kama tulivyofanya katika pset 7. Vinginevyo, unataka kitanzi kwa njia ya kila kitu na wale Handy foreach matanzi kwamba sisi tu alikwenda juu. Sasa kwa kuwa sisi ni wanaoendesha kupitia na tumekuwa alifanya hivyo siku za nyuma, hebu kudhani kwamba swala zetu kupita, kwa sasa tuna foreach yetu kitanzi. Na safu ya kwanza ina, hivyo hapa ni mstari, haki hapa; ni boxed. Ni kwenda na magazeti nje taarifa zote kwamba wamezipata. Hivyo ni kwenda magazeti nje chini "Wanna Jifunze HTML?" Basi ni kwenda kwa mstari unaofuata, kwa sababu ni kukamilika kwanza kwa kitanzi, na hivyo basi ni kwenda magazeti nje line pili ya hayo, ambayo ni kwenda kuwa STAT110, kupata muda wote. Jambo la mwisho ni juu ya SQL Udhaifu. Mimi najua David kuguswa juu ya hii kidogo katika hotuba. Unaweza kusoma hii baadaye. Ni kweli funny. SQL sindano ni aina ya kitu gumu. Hebu kusema kwamba wewe tu fimbo vigezo wale haki katika hoja yako, kama unaweza kuona katika mstari wa kwanza. Hivyo inaonekana faini, sawa? Wewe ni kuweka tu katika jina la mtumiaji na password kwa SQL yako swala, na unataka meli hiyo mbali na kupata chochote ni katika meza yako data. Hiyo inaonekana kuwa rahisi. Kwa hiyo lets kusema mtu unaweka katika, kwa password, hii AU Nakala haki hapa - lazima kweli kuwa katika sanduku nyekundu. Basi hebu kusema kwamba wao kuweka neno la siri kwamba katika - kwamba ni nini wao kuingia. Basi ni kuweka AU "1" = 1. Aina ya password silly kuwa. Sasa hebu tu badala yake katika, na wewe utakuwa kumbuka kuwa katika SQL swala sasa, ni kutathmini kwa kweli daima, kwa sababu wewe utakuwa kumbuka kuwa unaweza SQL swala kuchagua wote wa habari hii au unaweza tu na 1 = 1. Ili daima kwenda kutathmini kwa kweli. Hiyo si kwenda kwa kweli kazi, kwa sababu hiyo ina maana kwamba hacker unaweza kuvunja katika mfumo wako. ufumbuzi wa hili ni kwamba una kutumia mfumo wa PDO, ambayo ina maana kwamba una kutumia alama ya swali, ambayo ni nini guys kutumika katika pset 7, wapi utaenda kutumia alama swali katika nafasi ya wapi unataka kuweka kitu, na kisha utaenda na comma, na kisha itabidi baada ya hapo, baada ya kamba yako, vigezo mbalimbali kwamba unataka kuchukua nafasi ya ndani yako alama ya swali. Hivyo itabidi kukumbuka hapa kwamba sasa nina alama hizi nyekundu swali. Kisha mimi kuweka vigezo baada ya masharti yangu ili niweze kujua nafasi yao ili baadaye. Hiyo kuhakikisha kwamba kama mtu gani kama hii, na wana au 1 = 1 hali hiyo, ambayo kuhakikisha, mwisho nyuma, kuhakikisha kwamba si kweli kuvunja SQL query. Sawa, hivyo kwamba ni pretty kiasi, kimbunga cha PHP na SQL. Bora wa bahati nyote, na sasa Ore [Oreoluwatomiwa Babarinsa] Sawa kila mtu. Muda wa kwenda juu ya baadhi ya JavaScript na baadhi ya mambo mengine kwa haraka sana hivyo hatuna kushikilia wewe up usiku wa leo. JavaScript. Ndiyo. JavaScript ni aina ya kitu baridi, purportedly. mambo kweli unahitaji kujua kuhusu JavaScript, ni aina ya kama mteja upande mwisho wa kile mtandao programu yako ni kwenda kufanya. Kuna baadhi ya mambo tu hawataki kutunza muda wote juu ya upande server. Mwingiliano kidogo zote, akielezea jambo moja, kufanya kitu kutoweka. Wewe kweli hawataki kuzungumza na server yako wakati wote kwa ajili hiyo. Na baadhi ya kwamba ni hata inawezekana kufanya upande wa server. Hii ni kwa nini tunahitaji kitu kama JavaScript. Mambo ya baridi kuhusu JavaScript: Ni dynamically typed. Nini maana ya hii ni kwamba mpango wako haina haja ya kujua nini, hasa, vigezo ni wakati kuandika nje. Ni itabidi aina ya takwimu nje kama ni mbio. Mambo mengine ambayo ni ya baridi kuhusu hilo: Ni curly lugha brace, ambayo ina maana syntax ni sawa na C na PHP. Huna kufanya rework sana wakati wewe ni kujifunza JavaScript. Hapa tuna kidogo ya JavaScript. Kuvutia jambo la haki hapa ni kwamba, kama ukiangalia hiyo, sisi kuwa na kidogo ya JavaScript haki pale katika tag kichwa. Je, ni gani kimsingi ni tu ni pamoja na JavaScript file. Hii ni njia moja unaweza ni pamoja na JavaScript katika mpango wako. Kisha pili kidogo ni kweli kuna baadhi ya inline JavaScript, sawa na inline style na CSS, na wewe ni kuandika tu baadhi ya kanuni haraka sana huko. JavaScript ina arrays. Tu njia nyingine ya kuweka data kote, muhimu sana. Nzuri sana na rahisi syntax. Unaweza kutumia mabano mraba ya kupata kila kitu na kuweka kila kitu pamoja. Hakuna magumu mno. jambo zuri kuhusu JavaScript na lugha scripting kwa ujumla ni kwamba huna kuwa na wasiwasi kuhusu ukubwa safu. Unaweza kutumia tu array.length na kuweka wimbo wa hivyo, na pia safu unaweza kukua au kuogopa kama unahitaji kwa. Hivyo huna hata haja ya kuwa na wasiwasi kuhusu aina yoyote ya, oh no, mimi haja ya kutenga mambo mengi zaidi, au kitu kama hicho. Jambo zuri hapa ni kwamba JavaScript ina kitu kinachoitwa vitu. Ni kitu-oriented lugha, ili kile ina ni, kimsingi, njia kwa ajili yenu kwa data kundi pamoja, kwa kiasi fulani sawa na struct, lakini unaweza kupata ni kama struct au katika associative safu syntax. Ni pretty rahisi na nini unaweza kufanya na hii ni data kundi pamoja kama wewe kuwa na rundo la data hiyo kuhusiana. Kwa sababu ni mambo yote unahitaji kuelezea gari, huna haja ya kuwa ni katika kundi la maeneo mbalimbali. Unaweza tu fimbo yake katika 1 kitu katika JavaScript. Kama pengine kujua, iterating ni moja ya kazi hizo tedious. Wewe tu kufanya hivyo juu ya tena. Unahitaji kuzungumza na kila kitu katika gari, au haja ya kwenda kwa kila kitu katika orodha au kitu kama hicho. Hivyo JavaScript ina, sawa na PHP, foreach syntax. Katika kesi hiyo, ni kwa ajili ya katika kitanzi. Unataka kutumia hii tu juu ya vitu. Kuna baadhi ya matatizo kutokea kama wewe kutumia hii juu ya arrays. Ni kwa ujumla ni moja ya mambo hayo, ingawa, kwamba ni muhimu sana, kwa sababu wewe kuondoa mengi ya uendeshaji kwa sababu huna kuvuta juu ya kila kitu katika kitu yako na wewe mwenyewe. Huna kukumbuka majina yote muhimu. Wewe tu aina ya kupata yao nyuma katika syntax hii. Katika hili, na kwa ajili ya, wewe tu wanataka kukumbuka kwamba wewe ni kupata nyuma funguo zote, katika njia sawa na hash meza. Kama unakumbuka na kwamba, wakati bila kuweka katika kamba unaweza kupata kitu nje kwamba ingekuwa kuhusishwa thamani nayo. Nini unaweza kufanya na hii ni unaweza kusema, haki ya wote, Mimi kuweka katika gari, na mimi kuitwa kuwa ni Ferrari. Hivyo unaweza kuweka katika kamba Ferrari tena baadaye, na unaweza kupata kwamba nje. Na unaweza kufanya hivyo katika kitanzi, na kwa katika kitanzi. Hivyo tu zaidi kuhusu vitu. Jambo muhimu kutoka huu unahitaji kukumbuka ni kwamba unaweza kutumia kitu struct kama syntax wakati wowote unataka na hayo, isipokuwa kama yako kwenda kutumia kama kamba si halali jina kutofautiana. Hivyo kama ukiangalia kwamba kuna, tuna muhimu kwa nafasi. Naam, kama ungekuwa na kuweka object.key, nafasi, na, nafasi, nafasi, kwamba tu bila ya kufanya maana syntactically. Hivyo tu anaweza kufanya hivyo na aina hii ya bracket syntax. Pia, JavaScript ni sana wigo-busara PHP. Una 2 namna ya kushughulikia upeo. Huwezi kuwa na var mbele ya kutofautiana, na kwamba tu maana hii ni ya kimataifa. Unaweza kuona kutoka mahali popote. Hata kama ungekuwa na kuweka hii katika kama taarifa, mahali popote katika kanuni yako baada ya hatua hiyo unaweza kuona kwamba kutofautiana. Jambo jingine, ingawa, ni kwa var, ni mdogo kwa chochote kazi ulimokuwa Kama wewe si katika kazi, vizuri, ni duniani. Lakini kama wewe ni katika kazi ni wazi tu ndani ya kazi hiyo. Sina mfano, lakini, yeah. Ni moja ya mambo hayo ambapo unaweza kusimamia nini vigezo unataka kuwa wa kimataifa, nini vigezo unataka kuwa wa ndani, lakini huna haja ya kuwa makini kuhusu hili, kwa sababu huna aina ya kudhibiti nafaka faini kufanya katika C, ambapo kama kitu fulani ni alitangaza kwa ajili ya kitanzi, ni kwenda kukaa katika kwamba kwa kitanzi. kitu sisi kweli huduma kuhusu kutumia JavaScript kwa ni kufanyia kurasa za mtandao, sawa? I mean, hiyo ndiyo sababu sisi ni kufanya hivyo. Kwa kufanya hivyo, sisi kutumia kitu kinachoitwa DOM. Document Object Model. Kimsingi, kile yake ni inachukua HTML yako yote na mifano ni nje ndani ya rundo la vitu kwamba ni kuwekwa ndani ya kila mmoja. Unaweza kuanza nje kwa kitu kama hiki. Wewe, juu ya haki kwa ajili yangu, rundo la code huko nje kwamba ni aina ya - Unaweza kudhani kwamba d kuwa vigumu sana kuendesha, kwa sababu wewe d parsing kupitia kundi la Nakala na kuwa na kipande mbali mambo. Na nini kama haikuwa kwa usahihi mpangilio? Mambo mabaya ingeweza kutokea. Hivyo JavaScript inachukua huduma ya hii kwa ajili yenu, na kupata muundo nzuri data, kama moja upande wangu wa kushoto, ambapo wewe tu hati, na ndani ya kwamba una kitu kinachoitwa HTML, na ndani ya kwamba una kichwa na mwili, na ndani ya kichwa kwamba una cheo, na kadhalika, na kadhalika, nakadhalika. Hii simplifies kufanyia ukurasa mtandao ili tu, oh, mimi nataka tu kuzungumza na hii kitu. Aina ya njia sawa na ungependa kuzungumza na mwingine kitu umefanya mwenyewe. Kama nilivyosema, DOM yote ni katika hati kitu. Ama ni tu sehemu moja na kisha unaweza kwenda ndani yake kupata mambo, na unaweza kufanya hivyo - hii ni style ya zamani ya kufanya hivyo, huko, ambapo unaweza kufanya document.getElementById, na kisha jina, na kama pengine unaweza kuwaambia, hii anapata unwieldy sana baada ya muda. Hivyo pengine hawataki kufanya hivyo. Hiyo ndiyo sababu tuna Jambo la pili tunakwenda majadiliano juu ya baada ya hii. Jambo muhimu hapa ni kwamba, kila haki, una mambo haya yote, sawa? Hivyo labda naweza kubadili alama ya kitu wakati ukurasa mizigo. Basi ni nini? Nini kama user wangu Clicks kitu? Mimi nataka kufanya jambo la kuvutia wakati wao bonyeza kitu. Hiyo ndiyo sababu tuna matukio. Unaweza, kimsingi, kupata hiki yoyote katika DOM yako, na kisha kusema, hey. Wakati hii mizigo au mtu Clicks yake, au wakati wao panya juu yake, kufanya kitu kwa hayo. Na nini ni, una kazi ambayo kushughulikia suala hili kwa ajili yenu. Kazi hizi ni tukio la handlers. Nini they're - ni njia tu dhana ya kusema, kazi hii ni kunyongwa tu wakati tukio hili hufanyika. Hivyo Hushughulikia tukio hilo kuwa hutokea. Hii ni jinsi gani kuweka tukio handler. Mimi na baadhi ya kifungo, na wakati bonyeza yake, unatokea. Hivyo si bonyeza button. Hii ni njia moja ya inakaribia yake, sawa? Una tag kifungo, na juu ya click una kamba kwamba anasema, oh, kwa njia, mimi kufanya jambo hili kulipuka kwa ajili yangu. Vinginevyo, ni tu kama kifungo mara kwa mara tu kufanywa. Unaweza pia kufanya hii kwa njia nyingine, kwa grabbing DOM hiki, lakini tutaweza kuokoa kwamba baada ya sisi majadiliano juu ya jQuery. JQuery: Ni maktaba ambayo ni msalaba-browser. Unaweza kutumia katika pretty kiasi chochote. Na tu inakupa mengi ya zana kufanya kazi pamoja. Kwa sababu JavaScript, wakati nguvu, hana zana zote unahitaji nje ya boksi kwa kweli kukabiliana na programu mtandao unaweza kutaka kufanya. Hivyo simplifies mambo mengi, anatoa mengi ya kazi nje ya boksi kuwa wewe kawaida na kuandika mwenyewe, tena na tena na tena. Na tu hufanya mambo rahisi sana. Unaweza pia kuwa na selectors, ambayo basi wewe kuchukua wale mambo yote kutoka DOM yako mengi zaidi tu, badala ya kuwa na matumizi ya simu hizi kazi kwa muda mrefu sana. Zaidi juu ya selectors haya. Wewe, hadi pale una, hebu sema Nataka kupata hiki na ID "mwamba." Naam, katika jQuery, ni tu $ na kisha kamba ambayo ina chupa, na kisha "mwamba." Ni rahisi sana na mengi zaidi kuliko jadi JavaScript njia ya kukabiliana na tatizo hili. Na una mambo sawa kwa ajili ya madarasa na aina hiki. jQuery ni - moja ya makala ya baridi ni wewe unaweza aina ya kubana chini maswali yako juu ya DOM yako sana, kwa haraka sana. Sasa tuko nyuma kwa tukio utunzaji, na hii ni jinsi gani ya kushughulikia tukio moja katika jQuery. Hivyo nini tunakwenda hapa ni sisi ni kusema, haki ya wote. Nina tag script, sawa? Hivyo nina inline hii JavaScript. Nini tunakwenda kufanya ni tunakwenda kusema, haki ya wote. Wakati hati ni tayari, ambayo ina maana hati imekuwa kubeba, sisi ni kwenda katika kazi hiyo, na sisi ni kwenda kusema, haki ya wote, kazi hii ni kweli kufanya kitu kingine. Ni kimsingi akisema, sawa, mimi kupata hiki na ID "MyID." Na kisha kutoa hii kazi handler kwamba executes wakati bonyeza yake. Kimsingi nini hii haina ni, inasema, sawa. ukurasa ni kubeba, hivyo mimi nina kwenda katika, kupata kipengele hiki, kuwapa hii handler tukio hilo, na kimsingi unaweka juu ya ukurasa wako kwa ajili yenu. Na hii ni jinsi gani kufikiria juu ya tukio hilo kuchukua. Wewe tu nataka kufikiri kuhusu, sawa, wakati kitu hutokea, je, nataka kutokea? Hawataki kufikiri juu ya, okay, mimi haja ya kuhakikisha mazungumzo jambo hili kwa jambo hili, jambo hili blah blah blah, kwa sababu wewe tu unataka kuzungumza kitu katika suala la matukio. Wakati hii itatendeka, hii hutokea. Wakati hii itatendeka, ambayo hufanyika. Na kama mambo kusababisha mambo mengine, kwamba ni kubwa. Lakini hawataki kujaribu na kufanya ngumu code ambapo wewe ni kuchochea mambo mbalimbali wakati huo huo, kwa sababu wewe ni tu kwenda kutoa mwenyewe maumivu ya kichwa. Sawa. Sasa tunaweza kupata ukurasa yetu ya kushughulikia matukio, lakini hebu sema user yangu Clicks kifungo. Nini kama mimi unataka kutuma ombi kwamba nyuma ya server, lakini mimi sitaki upya ukurasa, kwa sababu ya kuwa na upya ukurasa mpya kila wakati anapata aina ya nyeti, na kwa nini mimi haja kubomoa header tena, na footer tena, na mambo yote ya ukurasa tena tu mahitaji salamu au wakati? Hivyo ndiyo sababu tuna kitu kama Ajax. Nini tunaweza kufanya hapa na Ajax ni tunaweza kusema, haki ya wote, Nataka kupeleka baadhi data kwa server, na mimi nataka kupata majibu nyuma hivyo siwezi update ukurasa wangu, au labda tu kufanya baadhi ya hesabu algorithmic kwamba siyo lazima kuonyesha kitu chochote kwa mtumiaji. Je, unahitaji kufanya hili? Vizuri, unahitaji URL unahitaji kuzungumza. Server yako huwezi magically kusikiliza kutoka popote. Unahitaji kuwa na mahali maalum wewe ni kutuma data hii. Na wewe pia haja ya baadhi ya data kutuma, au labda ni dataless swala. Unataka tu Ping nyuma server na kusema, hey, mimi niko hai, au kitu kama hicho. Na kisha unataka kazi ambayo kimsingi Hushughulikia na mafanikio. Hebu sema wewe kupata nyuma baadhi ya taarifa kutoka kompyuta yako, na unataka kubadili jina la mtumiaji juu ya ukurasa yao. Hivyo ungependa kupata habari nyuma, na ungependa kushinikiza kwamba screen. Nini kinatokea ni kwamba, wakati ukurasa ni tayari, kujenga juu ya click kazi kwa ajili ya kifungo hii inayoitwa greeter. Nini hii haina kisha ni, wakati kwamba kifungo ni kusukuma, kuongea na greetings.php, unaweza kufanya ombi POST, na kusema, hey, mimi kupata kitu kutoka ukurasa wako. Sisi si kweli haja ya kueleza kwamba, lakini greetings.php, hebu sema tu, inatoa nyuma "hello dunia." Ili tuweze kupata nyuma hii "hello dunia," na mafanikio ya mpango huu, kuchukua kitu kitaenda vibaya, kisha sisi tu kwenda hii mahali lengo kwamba sisi maalum na sisi tu fimbo majibu huko. Na hii ni njia rahisi sana ya kuanzisha Ajax swala. Haraka sana, Rob aina ya zilizotajwa hii tayari, mambo yanaweza kwenda vibaya, mambo mabaya yanaweza kutokea, hivyo unataka familiarize mwenyewe na kanuni hizi HTTP majibu. Hawa ni nini ni haki, kama, 200, kila kitu akaenda sawa. Kitu kingine, mambo mabaya kilichotokea. Ni kwa ujumla jambo unataka kukumbuka. Lakini ni nzuri kujua yote haya. Na hatimaye, mara moja tumeenda kwa njia zote za kwamba, sisi haja ya kuzungumza kwa haraka sana juu ya mpango, na kisha tunaweza basi wewe wote kuondoka. Design. Mambo unataka kukumbuka. Jiulize maswali haya: Nani utakuwa kutumia hii? Nini wao kutumia kwa? Je, watumiaji yangu huduma ya juu? Je, si wao huduma ya juu? Wewe tu hawataki kufanya programu na basi ni tu kukua na kuwa hii kubwa, kila mwingi kitu kwamba huwezi hata kumaliza. Unataka kuwa na malengo za kipekee na mipango na mambo unataka kushughulikia. Kufanya hivyo effortless. Yote hii anasema, kimsingi, kufanya hivyo ni rahisi kwa mtumiaji kuitumia, wala kufanya hivyo Blob kubwa ya maandishi kama slide hii ni, kwa kweli. Wewe unataka tu ni kuwa kitu ambapo ni rahisi sana kwa mtu kwenda katika na kufanya nini wanataka kufanya. Hawataki wao kuwa na navigate 5 kurasa kupata kazi yako mkuu wa tovuti yako. Kama Google alikuwa kurasa 5 kabla unaweza hata kutafuta kitu, hakuna mtu matumizi yake. Na mwisho, karatasi mfano, vikundi. Na design nzuri na mazoea ya kupima. Kwa sababu tu unafikiri kazi kwa ajili yenu, haina maana mtu mwingine anadhani ni kazi. Lakini yeah, hiyo ni yake. [CS50.TV]