[Powered by Google Translate] [Wiki 9] [David J. Malan - Chuo Kikuu cha Harvard] [Hii ni CS50. - CS50.TV] Wote haki. Karibu tena. Hii ni CS50, na hii ni mwanzo wa wiki 9. Leo sisi lengo hasa juu ya kubuni, tena katika mazingira ya C lakini katika mazingira ya PHP na kidogo ya SQL na kidogo ya JavaScript, hasa kuelekea mwisho wa wote wawili pset 7 na pia mradi wako wa mwisho. Kwa kweli, kama wewe ni katika hatua ya kuwa katika mradi wako wa mwisho ambapo labda kama wa saa moja au zaidi iliyopita wewe angalau kuanza kutoa baadhi ya mawazo kwa mradi wako wa mwisho na unachokifikiria Ningependa kushirikiana na wanafunzi 1 au 2, kama wewe ni kuwa na matatizo ya kuunganisha na alisema wanafunzi, jisikie huru kujaza fomu katika cs50.net/partners/form. Ni tu anauliza wewe ni nani, ni aina gani ya mradi wewe ni kufikiri kuhusu, ambapo kuishi tu kwa sababu vifaa. Na kisha kama unataka kuweka jicho kwenye wiki ijayo au hivyo URL spreadsheet huko, basi unaweza kuona toleo kusoma tu ya doc Google ambayo sisi ni kukusanya habari. Hivyo kama unataka kufanya kazi na mtu, kwa njia zote jisikie huru kufikia nje kwa watu kupitia utaratibu huo. Lakini wengi wa folks kufanya kazi solo. Hiyo kabisa faini. Hivyo si kujisikia kwamba hii ni kwa njia yoyote lazima. Siku ya Ijumaa ilikuwa mimi tu na wachache wa timu katika hapa, tupu ukumbi kwa sehemu kubwa. Kuna walikuwa 3 watalii wamekaa huko, ili kwamba ilikuwa kidogo Awkward. Nini sisi aliyesema kuhusu alikuwa database na kuongelea pset 7 kidogo. Na kama hakuwa na kutokea kwa kukamata kwamba kwenye video bado tu, kwamba ni faini. Nitajaribu kufafanua masharti yoyote kwamba sisi vinginevyo kuchukua kwa nafasi msingi hotuba ya Ijumaa. Lakini leo sisi ni kwenda kujaribu kupata kwa uhakika ya si tu kuwa na uwezo wa kufanya kitu kama pset 7 lakini kwa kweli kuelewa nini kinaendelea chini ya Hood, hasa baadhi ya matumizi ya kwamba sisi kuweka katika faili functions.php kufanya maisha yako kidogo rahisi lakini ili hatimaye kuelewa hivyo kwamba wakati magurudumu mafunzo kufika mbali katika wiki chache bado unaweza kuishi katika ulimwengu wa kweli na kufanya mambo haya bila mfumo CS50 chini wewe. Hii _SESSION $, kwa wale ambao ni ukoo au ambao tayari hawakupata video juu ya Ijumaa, nini KIPINDI tufanye katika PHP makao maombi ya mtandao? Hii ni variable superglobal, ambayo ina maana ni sawa katika roho kwa GET na POST na wengine wachache, lakini ni kitu gani hii muhimu kwa ajili ya? Nini ni KIPINDI kutumika kwa? Yeah. [Mwanafunzi] magogo in Samahani? [Mwanafunzi] magogo in magogo in Kweli. Katika pset 7 sisi ni kutumia hii superglobal KIPINDI kuwezesha magogo in Na nini kizuri kuhusu superglobal hii ni kwamba ni safu associative. safu associative, wanakumbuka, ni tu safu lakini ambao fahirisi tena kuwa idadi kama 012. Wanaweza kuwa idadi au wanaweza kuwa hata masharti. Na hivyo kama wewe ve dived katika pset 7 bado, unaweza kukumbuka kuwa sisi ni hifadhi muhimu kuitwa ID ndani ya safu hii associative ambao thamani ni kitu kama 123 - chochote kwa sasa watumiaji katika ID mtumiaji ni. motisha kwa ajili ya hii ni kwamba hata baada ya mtumiaji ametembelea kwenye localhost au tovuti yangu kwa ujumla zaidi na kisha wameweza umeingia, hata kama hawana bonyeza kiungo au kurudi tovuti yangu kwa dakika 5 au hata saa moja au hata siku lakini wao kuondoka browser yao dirisha wazi, kupitia superglobal hii naweza kukumbuka kuwa wao ni watumiaji in Kwa maneno mengine, inaruhusu yangu ya kuhifadhi kidogo ya muda mrefu kitu chochote nataka kuhusu mtumiaji. Na unaweza kufikiria ni kweli kama mwili wa gari ununuzi. Maeneo kama Amazon wazi basi wewe kuweka mambo katika gari ununuzi, lakini HTTP, itifaki kwamba mamlaka ya mtandao, ni stateless kwa maana kwamba wakati wewe kutembelea tovuti, kwa sehemu kubwa huna baadhi ya mara kwa mara ya mtandao kati ya browser yako na server. Haraka kama wewe ve kupakuliwa HTML na JPEGs na GIFs na wote, uhusiano inakwenda mbali na wewe tu kuwa na nakala ya HTML na whatnot kutoka kwa seva. Lakini kama seva anataka kukumbuka kitu kuhusu wewe, ni mzigo kwenye server kwa kweli kurekodi kwamba habari. Na hivyo programu ambao wana mamlaka juu ya server unaweza kuweka zaidi kitu chochote unataka ndani ya safu hii superglobal associative na itakuwa kuna wakati mwingine mtumiaji anakuja nyuma, kama ni dakika au hata siku chache baadaye, isipokuwa wao karibu browser yao dirisha, ambapo kiwango KIPINDI kutoweka. Hivyo ni ephemeral kuhifadhi, ni yasiyo ya kudumu, na ni maana ya kwenda mbali haraka kama mtumiaji atakapokamilisha browser yao - sio tu kwamba tab, mara nyingi browser nzima, hivyo kwa ufanisi magogo nje ya mtumiaji. Hivyo jinsi ni kitu kweli hii kutekelezwa? Hebu tuangalie kwa haraka katika mfano rahisi sisi inaonekana katika siku ya Ijumaa. Kwa wale unfamiliar, ilikuwa rahisi kama hii. Hii ni ukurasa wa mtandao ambao lengo pekee katika maisha ni kuwaambia mimi mara ngapi nimetembelea ukurasa huu. Hii ni mara ya kwanza hapa Jumatatu kwamba mimi alitembelea yake, hivyo anasema 0 nyakati. Lakini kama mimi kuanza reloading ukurasa huu, inasema 1 wakati, 2, 3, 4, 5, na hii hatimaye kuweka tu juu ya kuhesabu juu, juu, juu, juu, juu kwa muda kila mimi kwa kweli bofya Reload juu yake. Hivyo jinsi ni kufanya kazi hii? Hebu kwenda ndani ya faili hili aitwaye counter.php. sehemu ya juu ya yote ni maoni bluu, lakini sehemu ya kuvutia ni hapa. On line 13 sisi wito session_start kazi, na kwamba ni literally wote unahitaji kufanya kama unataka kuwa na uwezo hii superglobal maalum iitwayo $ _SESSION. Kwamba inafanya wote iwezekanavyo, na tutaweza kuona katika wakati gani kwamba wote iwezekanavyo. Katika mstari 16 ilani nini mimi kufanya. Kama ufunguo, iitwayo counter - kwa maneno mengine, thamani index - "counter" lipo ndani ya safu hii inaitwa KIPINDI, basi je, Mimi kufanya na ni katika mstari chini? Nini ni mstari 18 kufanya? [Inaudible mwanafunzi majibu] Nini hiyo? [Mwanafunzi] Kuhifadhi thamani. Nzuri. Ni hifadhi thamani hiyo katika KIPINDI sasa hivi katika variable mpya ndani ya muda mfupi, $ Counter katika lowercase wote. Ona kwamba PHP tayari kuwa kidogo wavivu hapa. Notice hatuna yoyote kutaja int au kuelea au kamba au kitu kama hicho kwa sababu PHP ni weakly typed, ambapo huna kutaja aina ya kutofautiana, na katika kesi hii hapa nimepata hata alitangaza kuwa bado. Mimi kutangaza kuwa ndani ya braces haya curly na tofauti na C, hii ni kweli sawa. Hakuna jambo jinsi undani nested tamko variable ni katika PHP - ndani ya curly Brace, ndani ya curly brace na kama - itakuwa wakati huo katika wakati zipo kwa ajili ya salio wa mpango, kwa bora au mbaya. Hivyo mara moja inakuwa ya kimataifa haraka kama unaweza kufafanua kama sisi ni kufanya hapa. Vinginevyo, kama si kupata kwamba kuna kitu katika superglobal KIPINDI, Mimi nina inaonekana initializing hii counter variable 0, hivyo tu kuchukua user haijawahi hapa kabla. Na kisha hii bila shaka ni incrementing counter jinsi gani? Mimi nina uppdatering thamani hiyo ndani ya safu hii associative kwa kuweka ni sawa kwa kila counter sasa ni + 1. Kama mimi kitabu chini hapa kwa HTML ya ukurasa, ni kweli pretty rahisi. Mimi wote katika mwili wa ukurasa huu, "Wewe alitembelea tovuti hii ili-na-hivyo mara." Na hii ni kujenga PHP. Kama wewe kufanya <=, hii ni sawa na kile ufanisi kazi? Ni kweli sawa na kitu kama printf, ambayo tumeona mara nyingi katika C, ingawa kama unaweza kujua tayari kutoka spec katika pset 7, magazeti pia ni kazi ambayo tu Prints kitu nje, haina kweli matumizi ya namba format, na unaweza kweli kusema echo pia. Wao ni wote milele hivyo tofauti kidogo ingawa athari wavu ni hatimaye sawa. Hivyo hii ni sawa na matumizi ya ishara ni aina ya njia ya kifahari ya kufanya hivyo zaidi succinctly kuliko wewe ili vinginevyo kuwa na uwezo. Basi hiyo ni tovuti hii yote gani. Ni Prints nje thamani ya counter. Je, huu wote kweli yanatokea? Unaweza kukumbuka wiki au hivyo iliyopita sisi kuanza kuangalia chini ya Hood jinsi ya ukurasa wa mtandao kazi kwa kutumia tab Inspekta. Chrome ana hili wote katika toleo la Mac, toleo Windows, na hata toleo Linux, na Firefox na IE na taratibu sawa ambapo una hii debugger kujengwa katika ndani ya browser. Hebu tuangalie yafuatayo. Sisi tumepewa rundo zima la tabo hapa, na kukumbuka kuwa moja leftmost ni Elements, na hakuna jambo jinsi godawful HTML na javascript ni katika ukurasa, kukumbuka kwamba kwa tab Elements unaweza kweli navigate HTML hierarchically na nzuri na neatly. Hivyo kama wewe ni kujaribu kujifunza kutoka tovuti kama Google au Facebook au kweli tovuti yoyote, kutambua kwamba wewe pengine bora mbali kuangalia chanzo code njia hii kinyume na viewing chanzo mbichi, ambayo inaweza kuwa fujo, kama tumeona hasa kwenye tovuti ya Google. Hivyo kama mimi badala bonyeza tab Mtandao hapa, hebu angalia nini kinaendelea wakati mimi kutembelea ukurasa huu. Kwanza napenda wazi cache yangu. Mimi nina kwenda katika vipimo katika Chrome na kisha kwenda Historia na kisha Wazi data zote kuvinjari. Unaweza kutumika kwa kufanya hivyo kwa madhumuni mengine, [kicheko] lakini linapokuja tovuti zinazoendelea, ni kweli muhimu - kama wewe ni laughing unajua. [Kicheko] Ni kweli kweli muhimu wakati wa kuandaa tovuti kwa sababu ukweli ni mambo kama biskuti na mambo kama files cached HTML, cached JavaScript files unaweza kweli kuwa maumivu ya kichwa kubwa, kwa sababu kama kwa sababu yoyote browser anaamua cache baadhi faili na bado wewe Umefanya mabadiliko kwenye faili kwamba kwenye server lakini kivinjari si kweli akagundua kwamba faili imebadilika na kwa hiyo si kweli re-download hivyo hata wakati bonyeza kifungo Reload, moja ya njia surefire tu kuhakikisha kosa si kwa code yako, ni pamoja na tabia ya kivinjari, ni kwenda katika hapa katika browser yako na tu kufuta historia nzima hivyo kwamba kuna mkanganyiko hakuna. Na kisha kama kweli unataka kuwa Paranoid, kuacha browser, restart yake, na kisha kuhakikisha wote ni kufanya kazi kama ilivyotarajiwa. Hivyo katika muda mfupi, clearing cache ni nzuri wakati wa kufanya maendeleo. Hivyo hapa tuna tab Network. Mimi hapo awali alikuwa alitembelea tovuti mara 9, lakini napenda kwenda mbele sasa na bonyeza Reload. Na mimi nina nyuma chini ya 0. Hebu kweli kuona jinsi gani ni kwamba superglobal hii KIPINDI unatekelezwa. Mimi naenda bonyeza juu ya ombi 1 HTTP lililofanyizwa, na dirisha hili debugging lets mimi kuangalia ndani ya kwamba. Hapa naona tu majibu kutoka server, ambayo si ya kuvutia. Nimeona hii katika idadi yoyote ya njia. Lakini nini kitaalam kuvutia ni headers. Kama mimi kitabu chini hapa na kuzingatia ombi headers na bonyeza mtazamo chanzo, nini mimi kwenda kuona ni halisi ombi HTTP kwamba tu akaenda kutoka browser yangu kwa server, GET kuwa neno operative na kisha / counter.php kuwa jina la faili, HTTP/1.1 tu kuwa toleo la HTTP kwamba browser yangu ni kutumia. Hii line hapa ni ukumbusho kidogo kutoka browser kwa server nini jina la seva ni kwamba anataka kuzungumza. Na kisha wengine wa hii wakati mwingine ni ya kuvutia lakini si muhimu hivi sasa. Hii ni aina tu ya udadisi. Cryptic ingawa kamba hii ni, wakati wowote browser yako kutembelea tovuti ni taarifa server nini unatumia browser na nini mfumo wa uendeshaji unatumia na nini toleo yake. Hivyo kama wewe ve umewahi kujiuliza tovuti jinsi kama CNN na whatnot kujua nini asilimia ni ya watumiaji wa Mac kwenye mtandao watumiaji PC, IE watumiaji, watumiaji Chrome na kama, ni kwa sababu yote ya browsers wetu ni kuwaambia kila tovuti moja huko nje nini sisi ni. Haina lazima vyenye binafsi zinazotambulika, lakini haina kuwaambia server nini anwani yako ya IP ni nini na kivinjari na OS wewe ni kutumia. Hivyo hiyo ambapo habari hii ni. Lakini nini zaidi ya kuvutia sasa linapokuja vikao hivi ni header majibu. Hebu bofya mtazamo chanzo ijayo kwa majibu. Nini kuvutia hapa ni mambo machache. 1, tulipata nyuma code ya hadhi ya 200. Sisi kamwe kuona hii code sasa kwa sababu inamaanisha yote ni sawa. Ina maana halisi sawa kwa kulinganisha na kitu kingine. Nini idadi sisi wakati mwingine kuona kwamba ni vibaya? [Mwanafunzi] 404. 404, saizi ya hakuonekana, 403 unaweza kuwa kikwazo juu tayari, ambayo ni haramu, ambayo ina maana alisahau chmod kitu, uwezekano mkubwa. Na kuna rundo la wengine. Chini hapa, hii ni mambo kidogo. Mimi kwa kweli tu aliandika faili hii dakika chache zilizopita na pasting ndani gedit. Kwa nini ukurasa huu inaisha mwaka 1981 kabla ya hapo kweli ilikuwa Mtandao? Nini kinaendelea huko? [Inaudible mwanafunzi majibu] stempu muda. Lakini kwa nini? Ni kiasi fulani holela, lakini ni kweli muhimu. Nini hii ni kusema kwa browser yangu ni hii faili PHP ve tu aliomba tayari kimekwisha. Kwa kweli, ni muda wake wa miaka 30 iliyopita. Lakini ni nini kwamba kweli maana? Ni tu ina maana wakati mwingine mtumiaji ziara ukurasa huu, ama kwa reloading au kuandika URL katika bar anwani, kuhakikisha ya kwenda na kuchota nakala mpya wa hayo. Hii ni aina ya mfano wa busting cache, neno kijinga kwamba njia tu kujaribu tamaa browsers kutoka HTML kweli Caching hiyo wametumwa na seva hivyo kwamba huna ajali hit Reload na kisha kuona toleo moja ya faili. Wewe kweli unataka server kutuma nakala mpya. Hivyo ukweli kwamba ni 1981 tu ina maana kwamba kwamba ni nini appliance ni kuchagua kama tarehe holela katika kipindi. Lakini halisi line Juicy sasa ni hii moja. Hata kabla ya 50 wewe pengine vaguely familiar na biskuti. Kama ya hivi sasa, hasa miongoni mwa walio chini ya starehe au katika kati, kile ni kuki katika akili yako sasa hivi ingawa sisi ni juu ya kufanya uelewa wako zaidi ya kiufundi? Nini kuki? Yeah. [Mwanafunzi] Taarifa kuhusu user, kama kama wameweza imeandikwa mtumiaji yao jina au kitu. Nzuri. Ni taarifa kuhusu user, kama wameweza typed katika jina la mtumiaji zao tayari. Cookies ni njia ambapo servrar wanaweza kukumbuka kitu kuhusu mtumiaji. Na nini kuki kweli ni ni faili maandishi au baadhi mlolongo ya ka hiyo kupandwa na server ndani ya browser yako, na ndani ya faili kwamba au kati ya wale ka ni baadhi ya aina ya kitambulisho. Labda ni literally user name yako, lakini mara nyingi zaidi ni kitu zaidi cryptic-kuangalia kama hii kitu hapa - bo8dal3ct na kadhalika - kweli hii kubwa alphanumeric string hiyo ni kweli tu maana ya kuwa kitambulisho kipekee kwa ajili yenu. Au unaweza kufikiria kama aina ya stempu virtual mkono. Kama wewe kwenda baadhi ya klabu au Hifadhi ya pumbao, na kukumbuka kwamba ve kweli kulipwa na wamekwenda katika, wao kuweka nyekundu kidogo sticker ya mkono wako wa aina fulani, na kwamba kuwakumbusha watu katika counter kwamba ve tayari kulipwa na unaweza kuja na kwenda kama wewe tafadhali. Cookies ni kidogo sawa katika roho ya kwamba. mara ya kwanza mimi alitembelea tovuti hii, kama mimi tu alivyofanya baada ya clearing cache yangu, server mtandao, appliance katika kesi hii, kuweka muhuri juu ya mkono wangu ambaye jina lake ni PHPSESSID, kikao ID, ambao thamani ni kweli hii kwa muda mrefu alphanumeric kamba. Basi hiyo ni sasa aina ya emblazoned upande wangu hivyo kwamba wakati mwingine mimi hit Reload au manually kutembelea URL katika browser, browser yangu kwa ufafanuzi wa HTTP kwenda sasa muhuri mkono tena na tena na tena. Hivyo hata kama server haina lazima kujua mimi ni nani, wao angalau kujua kwamba mimi nina user hiyo au angalau, zaidi hasa, kivinjari kimoja. Na hivyo hii ni hatimaye jinsi superglobal KIPINDI ni kutekelezwa. server hana wazo wewe ni nani wakati wewe kupitia upya tovuti kwa ajili ya pili au ya tatu isipokuwa wewe sasa hii muhuri mkono. Na haraka kama wewe sasa kuwa muhuri wa mkono, server mtandao kimsingi huenda katika database kidogo ya yake mwenyewe na hundi, sawa, Nimeona muhuri mkono wa bo8dal3ct mtumiaji na kadhalika. Hebu kuona nini habari programu ina kuhifadhiwa ndani ya superglobal kuhusu mtumiaji huyu, na basi mimi kuhakikisha kwamba data kwamba ni tena ndani ya KIPINDI superglobal hivyo kwamba programu unaweza re-kupata data kwamba hata kama ni kuweka baadhi ya dakika au saa iliyopita. Hivyo katika maneno mengine, biskuti, ambayo got rap mbaya kwa baadhi ya wakati kwa sababu ya mashaka katika browsers na wanaweza kweli kukiuka faragha yetu na yote haya, wao kweli kuwa shirika kubwa kwa sababu bila wao ungependa kuwa daima kuingia katika kila ukurasa wa Facebook wewe kutembelea au kila barua pepe Gmail kusoma kama browser hakuwa na baadhi ya njia ya kukumbuka kwamba ve tayari kuthibitishwa. Hivyo kwa njia hii cookies waliotumwa na kurudi katika waya. Mwingine udadisi kuhusu cookies, hasa hapa, ni kwamba hii ni kabisa katika maandishi wazi. Hakuna encryption kinachoendelea hapa chochote, na kwa kweli mimi nina kutumia HTTP kwa sasa. Moja ya muda wetu katika favorites CS50, ambayo sasa ni miaka 2 iliyopita, alikuwa karibu wakati chombo inayoitwa Firesheep alikuja nje. Hii ilikuwa kipande bure ya Programu ya kwamba alikuwa yaliyotolewa na mtafiti wa usalama kama wito wake-up kwa ajili ya jamii ya kusema tu jinsi atrociously kutekelezwa fulani mitambo ya uthibitishaji kwenye mtandao walikuwa. Hivyo kwa baadhi ya wakati, Facebook ilikuwa karibu kabisa juu ya HTTP, hakuna HTTPS. Na hata kama wewe hawana wazo jinsi crypto kazi, S ni salama hivyo ina maana kuna angalau encryption baadhi kushiriki. Facebook gani kutumika encrypt majina ya utumiaji na nywila, lakini kwa haraka kama wewe inaonekana saa yako anawafanyia au ujumbe wako au habari yako malisho, yote ya kwamba alikuwa kimaandishi. Hivyo ilikuwa Gmail mpaka tu mwaka mmoja au 2 iliyopita. Wakati wowote wewe umeingia, ndiyo, walitumia encryption salama, lakini baada ya hapo hawakuwa. Na kwa nini wapate kuwa kuwa? Mbona si tu kutumia cryptography wakati wote katika kesi ya kutumia kama hii? Nini hiyo? Nadhani nikasikia kitu. [Mwanafunzi] Speed. Speed, haki? Kuna njia ya kuzunguka hili. Lakini kama wewe tu aina ya kufikiri juu ya mantiki, kama wewe encrypt kitu, una kufanya angalau kidogo zaidi ya kazi. Katika pset 2 wakati kutekelezwa Kaisari, au Vigenere au hata ufa, tu uchapishaji string ni rahisi. Encrypting na kisha kuchapisha string minimally inahitaji kidogo zaidi kazi.  Kwa super tovuti maarufu kama Google na Facebook, kama una kufanya kazi zaidi kwa kila mtumiaji kwa kila ukurasa moja ya mtandao wao kutembelea, kwamba tu inachukua zaidi CPU wakati. Na kama unahitaji zaidi CPU muda, unaweza kuhitaji servrar zaidi, ambayo ina maana unaweza kuhitaji fedha zaidi. Na hivyo kwa miaka mingi hii tu kweli alikuwa si bora mazoezi. Watu bila kutumia encryption SSL tu wakati walihitaji. Lakini aligeuka, na kama huyu kwa Firesheep alifanya super wazi, wakati wewe guys ambao kwa sasa juu ya Facebook hivi sasa - Nje ya udadisi, hebu angalia kama wewe utakuwa fess up. Kama uko kwenye Facebook hivi sasa katika baadhi ya tab, hata kama si foregrounded, ni URL yako HTTP au HTTPS? [Nyingi wanafunzi] S. S? [Kicheko] Sawa. Yoyote HTTP? 1 tu? Sawa. Hivyo sisi wote wanaweza hack kwamba guy Facebook akaunti hivi sasa. Kwa sehemu kubwa hii imekuwa akageuka juu na default, angalau katika baadhi ya tovuti. Na hadithi ndefu kifupi, kama mtandao wako trafiki haujasimbwa, si tu haina HTML kwenda na kurudi katika WiFis kimaandishi, hivyo mambo kama cookies kwenda na kurudi katika hewa bila aina yoyote ya encryption. Hivyo kama una kidogo tu ya savvy programu au kidogo ya googling ujuzi kupata programu ya bure ambayo gani hii, wote una kufanya ni kukaa katika Starbucks au kukaa katika uwanja wa ndege ambapo kuna ujumla kimaandishi WiFi na kuangalia tu kwa maneno kama Set Cookie-: au PHPSESSID kwa sababu kama una savvy kiufundi kwa kuangalia tu WiFi kwa wote wa bits kwamba mtiririko katika hewa kwa mfano hii, basi unaweza kusema kwamba PHPSESSID guy hutokea kwa kuwa bo8dal na kadhalika. Na kisha tena kama uko kutosha kitaalam savvy au kuwa na chombo haki, basi unaweza tu reconfigure browser yako mwenyewe kuanza kuwasilisha kwamba muhuri mkono kwa Facebook.com, na kuungana na ni kwenda tu kwa kudhani kuwa wewe ni kwamba guy kwa sababu wote wanajua si wewe ni nani lakini kwamba una hii kitambulisho kipekee. Hivyo kama wewe kuiba kwamba kitambulisho kipekee na kuwasilisha ni ya server mtandao kama yako mwenyewe, wao ni kwenda tu kuonyesha habari kwamba mtu kulisha au kwamba mtu au ujumbe anawafanyia. Na napenda Google sasa jinsi ya kuamsha HTTPS Facebook labda. Lakini ni kweli ni rahisi kama hayo. Na hivyo Facebook na Google na kama Gotten mzuri katika hili, lakini kushika jicho nje wote zaidi kwa ajili ya Nje yoyote wewe kutembelea kwamba si kutumia HTTP na kuwa na aina fulani ya habari nyeti juu yao, kama ni fedha au binafsi au kama. Kama siyo kutumia hii, unaweza kabisa uwezekano cookies kama hii kuwa kwa urahisi sana kuibiwa na kisha uzua, na kwamba ni nini hasa Firesheep alivyofanya. You hawakuwa kuwa programu. Wote alikuwa kufanya ni kuwa na uhusiano Internet, download zana hii ya bure, na nini itakuwa kufanya ni wewe ingia na basi ingekuwa kuonyesha majina ya Facebook ya kila mtu katika Sanders, katika maandamano huu, hasa karibu na wewe na wote mnatakiwa kufanya mara bonyeza juu ya jina yao na programu automatiska mchakato ya sniffing kwamba cookie, kuwasilisha kwa Facebook kama yako mwenyewe, na, voilà, umeingia in Hivyo hii ni mwingine mmoja wa wale "kufanya hivi" rasmi. Kama una nyumba yako mwenyewe mtandao na unataka tinker, kwa njia zote, lakini hii haina kutambua kuvuka mstari juu ya mazingira ya chuo kikuu. Lakini lengo hapa ni kweli kusisitiza si jinsi ya kufanya hili lakini jinsi ya kuilinda dhidi ya aina hii ya mambo. Na ufumbuzi trivial hapa, hata kama ni yenyewe ni kiujanja, ni kweli kupunguza matumizi ya maeneo yoyote ambayo si kutumia https daima. Hivyo maeneo kama Facebook na Google inazidi kuwa checkboxes ambapo unaweza kuchagua katika hii aina ya kitu, na benki kuwa na hii kwa miaka kwa sababu kama hizo. Hivyo tu kidogo ya sababu hofu kama tunaweza. Lakini hiyo ni yake kwa kifupi. Hiyo ni jinsi server anakumbuka wewe ni nani. Na haraka kama wao wanaweza kukumbuka wewe ni nani, wanaweza kukumbuka kitu chochote kuhusu wewe kwamba programu ina kuhifadhiwa ndani ya superglobal hii maalum iitwayo $ _SESSION. Na kwa pset 7 tunayatumia trivially tu kukumbuka int, yaani ID ya kipekee ya mtumiaji ambaye umeingia, ili tujue wao tumekuwa huko mbele. Maswali yoyote kisha juu ya vikao au cookies au kama? Firesheep haifanyi kazi kama vizuri tena, na una kuweka kompyuta yako katika mode maalum waigaji hivyo wewe ni kweli kusikiliza kwa trafiki badala yenu. Hivyo kama wewe sasa kushusha Firesheep, kutambua hilo si rahisi kabisa kama kama ni mara moja ilikuwa kudhihirisha. Wote haki. Na si kufanya hivyo katika Sanders. Kufanya hivyo nyumbani. Hifadhidata. Moja ya mambo ya sisi alivyofanya katika pset 7 sana kwa makusudi mara sisi kukupa database sampuli meza kwa watumiaji kwamba ina Vitambulisho baadhi ya mtumiaji, majina ya mtumiaji baadhi, na nywila baadhi encrypted humo. Na kama utaona, kama wewe si tayari, wewe ni kwenda kuwa na mabadiliko ya meza kidogo. Wewe utaenda kuwa na kuongeza baadhi ya cache kwa kila mmoja wa watumiaji katika meza ya kwamba, na mtaenda kuwa na kuongeza mwingine meza historia, meza portfolios, au labda kuiita kitu kingine. Lakini katika suala la kufikiria juu ya jinsi ya kufanya hili, hebu kufungua chombo hiki ambayo sisi kutumika juu ya Ijumaa, lakini kama unfamiliar, appliance kuja na chombo kuitwa phpMyAdmin ambayo ni coincidentally imeandikwa katika PHP, lakini kusudi lake katika maisha, baada ya mimi kuingia katika hapa kama jharvard na nyekundu, ni kwa kunipa njia user-kirafiki ya kuangalia na kubadilisha database yangu. Mbegu kwamba mimi nina mbio appliance inaitwa MySQL. Hii ni maarufu sana, na ni bure wazi chanzo database hiyo ajabu rahisi kutumia, hasa kwa mbele mwisho kama hii. Nini chombo hiki inaruhusu mimi kufanya, kwa mfano, ni poke kuzunguka meza. Hebu kwenda mbele na kufanya hili. Siku ya Ijumaa sisi aliumba meza inayoitwa wanafunzi kwamba alikuwa super rahisi. Ni alikuwa nguzo 3 - id, jina, na barua pepe - na mimi manually kuingizwa michache ya safu kama Daudi na Mike katika mfano huu hasa. Hebu hii kidogo zaidi, na hebu kudhani kwamba tunataka kukumbuka zaidi kuliko tu jina na barua pepe kuhusu mtumiaji. Hebu bonyeza Muundo hapa juu kwa juu. Na tena, pset matembezi yenu kupitia hatua zinazohitajika hapa, hivyo usijali kama baadhi ya hii ni kidogo haraka. Kisha mimi naenda bonyeza hapa. Mimi nina kwenda kuongeza baadhi ya idadi ya nguzo baada ya barua pepe sababu nataka kuongeza kitu kama nyumba. I forgot kurekodi nyumba mwanafunzi. Hebu bofya Nenda, na sasa tuna fomu hii kwamba kwa bahati mbaya ni kidogo mbalimbali kutoka kushoto kwenda kulia, lakini nina kwenda kuwaita jina la nyumba uwanja huu, na basi aina mimi sasa na kuchagua. Basi hebu kuwa na mazungumzo mafupi kuhusu aina mbalimbali katika MySQL kwa sababu wakati PHP ni weakly typed na ni aina ya ina haraka na huru na aina, katika database hasa ni super muhimu kwa kweli matumizi ya kuandika kwa faida yako kwa sababu moja ya mambo MySQL na injini nyingine database unaweza kufanya kwa ajili yenu ni kuhakikisha kwamba huna kuweka data bogus katika database yako. Hii ni aina ya kosa bure kuangalia inapatikana na wewe. Maana nyumba sisi ni wazi sitaki kuwa int, ambayo ni thamani ya 32-bit katika MySQL. Sisi tulikuwa kuzungumza kwa ufupi juu ya Ijumaa kuhusu varchar, ambayo inasimamia kwa urefu variable Char. Hii ni nini? Hii utapata bayana kwamba unataka hii kuwa kamba ya aina fulani. Wewe si kweli kujua mapema ni muda gani, hivyo tutaweza kiholela kusema jina nyumba inaweza kuwa 255 wahusika, lakini unaweza kwenda na 32, 64 - idadi yoyote kwa kweli. Lakini faida ya kutumia varchar juu ya shamba iitwayo Char ni nini? Tu intuitively kama mimi kitabu chini hapa, kuna taarifa Char na kuna varchar. Varchar ni variable urefu Char; Char ni urefu fasta Char. Hivyo msingi tu juu ya ufafanuzi kwamba, nini faida au hasara ya kila moja ya haya? Kwa maneno mengine, ambaye wasiwasi kuhusu utofautishaji huo, au kwa nini huduma? Yeah. [Mwanafunzi] varchar ina zaidi kubadilika lakini inachukua hadi zaidi ya kumbukumbu. Nzuri. Varchar inachukua hadi zaidi - Hebu angalia. Mimi nina uhakika kama nikasikia kwamba haki. Je, unaweza kusema kwamba mara zaidi? [Mwanafunzi] Mimi alisema varchar pengine ina zaidi kubadilika lakini inachukua juu ya kumbukumbu zaidi. Kuvutia. Sawa. Varchar pengine inatoa zaidi kubadilika lakini inachukua hadi zaidi ya kumbukumbu. Mwisho ni lazima si kweli. Ni inategemea mazingira, lakini hebu kuja nyuma na kwamba. [Inaudible mwanafunzi majibu] Hasa. Ni kweli kwamba kesi Char itakuwa kawaida kutumia zaidi ya kumbukumbu kwa sababu Char, kama katika C, ni kama kamba, ni safu ya wahusika. Hivyo kama wewe kusema shamba Char ya urefu 255, database ni halisi naenda kukupa wewe wahusika 255. Na kama nyumba kuishia kuwa Mather na 6 wahusika jumla, wewe ni kupoteza zaidi ya wahusika 200. Hivyo varchar ufanisi anatumia tu kama wahusika wengi kama ni muhimu hadi kiasi upeo. Lakini bei ya kulipa ni kweli utendaji, uwezekano. Kama wewe kujua mapema kwamba wote wa masharti yako ni kwenda kuwa 8 wahusika - kwa mfano, tuseme kwamba wewe kuhitaji nywila ya urefu 8 - suala la mafanikio ya kutumia uwanja Char juu ya tukio, ingawa si mara nyingi, ni bayana urefu fasta kwa kitu kama nywila kwa sababu sasa database unaweza kuwa hata nadhifu. Kama anajua kwamba kila shamba Char, kila string katika safu ni urefu sawa, kupata nyuma hulka ya upatikanaji random. Unaweza kuruka karibu kati ya nyanja mbalimbali Char katika database meza yako kwa sababu kufikiria database kama safu na nguzo. Hivyo kama kila moja ya masharti ni urefu sawa, unajua kwamba moja ya kwanza ni katika Byte 0, moja ya pili ni katika Byte 8 na kisha 16 na kisha 24 na kadhalika. Hivyo kama masharti yote ni ya urefu sawa, unaweza kuruka karibu sana kwa ufanisi zaidi. Hivyo kwamba inaweza kuwa faida katika suala la utendaji, lakini kwa kawaida wewe hawana anasa ya kujua mapema, hivyo varchar ni njia ya kwenda. Hapa ni mwingine undani kwamba hata Facebook mbio katika hatimaye. Ints ni kubwa, na sisi aina ya matumizi yao na default wakati wowote tunataka idadi, lakini ni 32 tu bits. Na hata kama Facebook haina kabisa na watumiaji bilioni 4 sasa, kuna dhahiri baadhi ya watu huko nje na akaunti nyingi za au akaunti ambayo imefunguliwa na kisha kufungwa, na hivyo Facebook yenyewe Naamini miaka michache iliyopita alikuwa na kipindi cha mpito kutoka int kwa, kama ni aptly aitwaye, bigint, ambayo ni 64 tu bits badala yake. Hivyo hii pia ni uamuzi design. Utakuwa kushangaza bahati kama mradi wako wa mwisho anarudi startup, ina bilioni 4 na watumiaji 1, kutoa au kuchukua, katika kesi ambayo kwa kutumia ints inaweza kuwa ni kidogo shortsighted. Lakini katika hali halisi, wako watumiaji meza pengine ni faini kwa ints. Lakini kwa kitu kama pset 7, kama historia meza yako, unaweza kuwa na maelfu mamilioni, ya watumiaji kama wewe kufuka katika etrade.com. Hivyo wakati unaweza kuwa na zaidi ya watumiaji bilioni 4, wale watumiaji una tupate kuwa na mashirikiano zaidi ya bilioni 4 baada ya muda - hununua na kuuza na mambo katika historia yao. Hivyo kama wewe kufanya wanatarajia - tena, hizi ni nzuri kuwa na matatizo kama una data sana hii - kama wewe kufanya wanatarajia data mno ukubwa wa int, kwenda na kitu kama bigint ni mwelekeo si mara nyingi kutosha iliyopitishwa na wabunifu kwa sababu watu takwimu kwamba si kwenda kuwa tatizo, lakini ni hii rahisi kuchagua jambo kubwa kuliko hiyo. Decimal sisi ni kutumia katika pset 7, ambayo inabainisha usahihi fasta hivyo unaweza kuepuka masuala yanayohusiana na ikifungwa DOUBLES na reals na kama. Na kisha kuna baadhi ya mashamba mengine hapa. Tutaweza kukitikisa mikono yetu kwao kwa kiasi fulani. Lakini tarehe, wakati wote kuwa na muundo eda katika MySQL, na faida ya tarehe hifadhi kama tarehe na si varchars ina maana kwamba database unaweza kweli reformat yao katika muundo tofauti, kama format Marekani au Ulaya au format kama - hata hivyo unataka - mengi kwa ufanisi zaidi kuliko kama ingekuwa tu baadhi varchar generic. Na kisha kuna baadhi binary nyingine, varbinary, matone. Hizi ni binary kubwa vitu, na unaweza pia kuhifadhi data binary kama vile data kijiometri katika database. Lakini kwa sisi tutaweza kawaida huduma kuhusu ints na varchars na kama. Hebu kumaliza up mfano huu kwa nyumba. Nyumba nitakacho kiholela kusema itakuwa 255 chars. Kisha default thamani tunaweza kufanya hii. Tunaweza na default kuweka kila mtu katika Mather House, kwa mfano. Hiyo ni jinsi gani tunaweza bayana kwamba database inapaswa kuhakikisha kwamba mtu daima ina thamani. Lakini mimi itabidi kuondoka kwamba kuwa. Kwa kweli, kwa watu ambao wanaishi mbali na chuo si katika nyumba, labda mimi kweli wanataka bayana kwamba thamani default kwa ajili ya nyumba ni null, na kisha mimi haja ya kuangalia hii sanduku na kuwaambia database ni sawa kama nyumba ya mtumiaji ni null. Tena, hii ni mwingine utaratibu wa utetezi unaweza kuweka hivyo huna hata kuwa na kuiweka katika code yako PHP lazima. database itahakikisha kwamba mambo ni au si null. Na kisha mwisho, Sifa. Hakuna wa haya ni kweli husika. Binary, unsigned - hakuna wa wale ni muhimu kwa varchar. Index. Je, mtu yeyote kujua au kukumbuka au kuwa na nadhani kama yale index ni kwa kitu kama nyumba? Hii pia ni kweli muhimu na rahisi kubuni maamuzi. Kwa wale ambao bado kuiona, Ijumaa sisi aliyesema ufupi kuhusu funguo msingi. Katika meza database, muhimu ya msingi ni shamba au safu ya kipekee kubainisha mistari katika meza. Hivyo katika meza ya sasa tuna vitambulisho, sisi kuwa na majina na barua pepe. Ambayo ni ya wale mgombea bora kuwa muhimu ya msingi, jukumu lake ni ya kipekee kutambua safu? Pengine ID. Kihoja, tunaweza pia kutumia nini ingawa? Labda unaweza kutumia barua pepe kwa sababu katika nadharia ni ya kipekee isipokuwa watu wanashiriki akaunti za barua pepe. Lakini ukweli ni kwamba kama wewe ni kutumia ID numeric kama 1234, hiyo ni 32 tu bits, ambapo anwani ya barua pepe inaweza kuwa hii ka wengi au ka hii wengi. Hivyo katika suala la ufanisi kwa vitambulisho vya kipekee, huelekea kuwa nzuri mazoezi tu kutumia int hata kama una baadhi mgombea string kwamba unaweza arguably kutumia. Kwa kitu kama nyumba, hii haipaswi kuwa muhimu ya msingi kwa sababu basi tu 1 mtu anaweza kuishi katika Mather na 1 mtu katika Currier na kama. Vile vile, hii haipaswi kuwa ya kipekee. tofauti kati ya msingi na ya kipekee ni kwamba katika kesi ya meza yetu ya sasa, ID itakuwa msingi lakini email si ya msingi kwa sababu sisi tu zilizotajwa - utendaji - lakini ni lazima bado kuwa ya kipekee. Hivyo unaweza bado kutekeleza uniqueness bila kufanya madai kwamba ni super muhimu ya msingi shamba. Lakini hii ni moja kabisa kusaidia: Index. Kama unajua mapema kwa ajili ya mradi wako wa mwisho, kwa pset 7, au kwa ujumla, kwamba nyumba hii shamba ni kwenda kuwa kitu wewe tafuta juu ya mengi kutumia Keyword kuchagua au kitu kingine, basi unaweza preemptively kuwaambia database kwa kazi yake ya uchawi na kuhakikisha kuwa inajenga katika kumbukumbu yoyote miundo data dhana muhimu kuharakisha utafutaji msingi nyumba. Labda itakuwa matumizi meza hash, labda itakuwa matumizi orodha zilizounganishwa. Katika hali halisi, huelekea kutumia mti, mara nyingi muundo inayoitwa B-mti - si mti binary lakini B-mti - ambayo ni mti pana sana kwamba unaweza kuona katika darasa kama CS124, data miundo darasa. Lakini katika muda mfupi, huna na wasiwasi juu ya kwamba wakati wa kutumia smart database programu. Unaweza tu kuwaambia hayo, "Index uwanja huu ili niweze kutafuta juu yake kwa ufanisi zaidi." Kama wewe kuondoka hii mbali na wewe kujaribu kutafuta kwa kila mtu katika database ambaye anaishi katika Mather, itakuwa kukabidhi katika tafuta linear. Na kama nimepata undergrads 6000 hai wote katika nyumba fulani, utaenda kutafuta meza nzima kupata Matherites, lakini kama wewe kusema Index, hopefully itakuwa kitu karibu na tafuta logarithmic kupata aina wale wa wanafunzi. Hii ni hulka bure kurejea kwenye, hata kama anakuja kwa bei ya baadhi ya kiasi cha nafasi. Mwisho, auto-increment, uwanja huu AI, ambayo ina maana tu kama ni int na hutaki kutunza na increment mwenyewe kila wakati kuna mtumiaji mpya, kuangalia kwamba, na kila mtumiaji kwamba anapata kuingizwa moja kwa moja kupata ID mpya. Hebu bonyeza Ila, na sasa hebu kupata kosa na muundo huu. Kama mimi kwenda katika kuvinjari, taarifa kwamba wote Mike na nyumba yangu ni null. Naweza kutumia phpMyAdmin kuhariri hii manually. Naweza kwenda katika hapa na aina katika Mather na kisha hit Enter, na sasa taarifa meza ni tofauti. Lakini taarifa mimi naweza kufanya kitu kingine pia. ID ya Daudi ni 1, hivyo phpMyAdmin tena ni chombo tu utawala; hii si kitu watumiaji yako ni milele anaenda kuona. Hivyo kama mimi badala bonyeza tab SQL juu juu - na tena, pset 7 mapenzi kuanzisha wewe zaidi ya maswali haya - Naweza manually nitafanya SQL muundo swala lugha amri UPDATE watumiaji SET nyumba = 'Pfoho' WAPI id = 1. Haya maswali SQL ni, nicely kutosha, pretty someka kutoka kushoto kwenda kulia. Update meza watumiaji, kuweka shamba iitwayo nyumba kwa Pfoho ambapo ID mtumiaji ni 1. Au mimi naweza hata kufanya ambapo barua pepe = 'malan@harvard.edu'. Hiyo kwa muda mrefu kama ya kipekee kubainisha yangu, kwamba ingekuwa kazi kama vizuri. Lakini ID huelekea kuwa juu ya utendaji, hivyo hebu kufanya hivyo. Hebu bonyeza Go. Okay, lecture.users haipo. Nini kosa langu? Nini meza kweli kuitwa hapa? Ni wito wanafunzi kwa sababu tu kwamba ni nini sisi alifanya juu hapa juu kushoto. Ni wito wanafunzi, si watumiaji. Hivyo bonyeza Nenda sasa. 1 mstari walioathirika. Query sekondi 0.01. Kama mimi bonyeza Browse sasa, sasa maisha Malan katika Pfoho. Basi hiyo ni mwingine ladha ya SQL, lakini pset kutembea wewe kupitia kidogo zaidi ya kwamba. Kuna uamuzi kijinga nimekuwa tayari alifanya hapa. Ningependa kusema kwamba design hii database ni ufanisi kwa sababu watu zaidi mimi kuongeza meza ya wanafunzi, zaidi ya sisi mimi kuanza kuongeza, zaidi ya TFS mimi kuanza kuongeza, sisi ni kwenda kuanza kuona nini redundancies katika meza hii? Yeah. [Mwanafunzi] Kuona kwamba ni katika wanafunzi, sisi ni kutumia sawa [inaudible] sawa - Haki, hasa. Hivyo kama watu 400 wanaishi katika Mather, kutoa au kuchukua, hatimaye meza hii ni ya kwenda kuwa na safu 400 kwamba kusema "Mather," "Mather," "Mather," "Mather," "Mather." Sisi ni kupoteza yote ya ka hizi, na kuna wanandoa wa takeaways huko. 1, kuna mambo kona kesi ambapo kama mtu pays mengi ya fedha na renames Mather, sasa tuna kubadili database yetu nzima ya meza. Hiyo si kinaenda kutokea mara nyingi, ingawa mara kwa mara nyingine huitwa Pfoho Amerika ya Nyumba miaka 15 iliyopita, hivyo ndivyo inavyokuwa. Lakini si kwamba kulazimisha kwamba wote. Zaidi ya kulazimisha kuliko kesi kona kama ile ya wanaohitaji update data kwa wingi kwa database ni kwa nini hifadhi Mather tena na tena na tena na tena? Hiyo mengi ya chars, chars 6. Je, si sisi kufanya hata bora zaidi ya kwamba, hasa kwa Pforzheimer? Hakika tunaweza kufanya vizuri zaidi kuliko wahusika kuwa wengi. Mbona si tu kujiunga kitambulisho kipekee kwa kila nyumba na kuhifadhi kwamba kwa kila mtumiaji? Basi hebu jaribu hii. Badala tu ya kutumia meza ya wanafunzi, uniruhusu niende kwa hotuba database wangu hapa juu kushoto. Ona hapa inasema Unda meza. Hebu kujenga meza mpya iitwayo nyumba. idadi ya nguzo ni kwenda kuwa 2. Kuingia. Sasa nina mashamba 2. Mimi naenda kuwaita jina hili, na ni kwenda kuwa varchar ya urefu 255, lakini hiyo ni pretty holela. Hebu kuweka hii hapa chini kwa mkataba. Hivyo kuweka ID hapa juu. Hebu kutoa kila nyumba kitambulisho kipekee. Hebu kutoa kila nyumba jina. Hebu bayana kwamba kitambulisho itakuwa unsigned tu na mkataba kwa kutumia tu idadi chanya. Hebu kwenda mbele na kutoa hii auto-increment shamba kwa sasa. Na nini tunahitaji kitu kingine? Hebu kwenda mbele na bonyeza Hifadhi. Sasa nina meza ya pili. Angalia kama kando hii ni kidogo cryptic SQL amri kwamba ingekuwa alikuwa na aina manually kama si kutumia chombo kiutawala kama phpMyAdmin. Hivyo sababu nyingine sisi kuitumia. Ni ajabu manufaa ya aina ya pedagogically kwa sababu unaweza bonyeza karibu na kufikiri jinsi mambo kazi na tu kuiga na pasting nini phpMyAdmin alivyofanya. Lakini meza Unda amri ni kile tu kunyongwa, na hapa ni meza yangu. Hebu kwenda mbele sasa na kutumia SQL ghafi kuliko oversimplify kwa kubonyeza tab Ingiza. Hebu kufanya Insert KATIKA nyumba, na mimi nina kwenda kusema jina ya nyumba ataenda kuwa na thamani ya 'Mather'. Hiyo ni. Syntax Hii ni kidogo zaidi cryptic. Hii ni jina la mashamba tunataka Insert. Haya ni maadili tunataka kuingiza katika mashamba hayo. Hebu bofya Go. 1 mstari kuingizwa sekondi 0.02. Hebu bofya Vinjari sasa. Taarifa kama mimi bonyeza Browse, kuna Mather, ambaye ni ID na automatisering namba 1. Hebu kufanya mwingine mmoja. Hebu kwenda katika tab SQL. Insert KATIKA nyumba. jina la nyumba ataenda kuwa na thamani ya Pfoho na kadhalika. Go. Na siwezi kuendelea kufanya hii tena na tena na tena. Au kama wewe kupata kuchoka kwa kutumia phpMyAdmin, unaweza kutumia tu tab Insert na si kuwa na aina SQL ghafi. Unaweza tu bang ni nje kwa haraka zaidi kwa kuandika, kwa mfano, Currier, Ingieni, na sasa kama sisi bonyeza Browse, kuna Currier na ID ya 3. Hivyo hii ni nini maana sisi na increment auto-. Lakini sasa inabidi kurekebisha kitu katika wanafunzi. Katika wanafunzi kile lazima data aina ya shamba nyumba sasa kuwa? Ni lazima kuwa int, haki? Hivyo Lengo hapa ni sababu nje, inayojulikana kama normalize, meza hivyo kwamba hatuwezi kuhifadhi habari redundantly yoyote ya meza yangu. Na tena, njia tulipokuwa kwenye hapa itasema Mather, Mather, Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, ambayo ni sana redundant katika suala la israfu ya chars. Hivyo basi mimi kwenda mbele na kubadilisha hii kwa kubonyeza Muundo, na napenda kwenda mbele na kuangalia mbali shamba nyumba, bonyeza lugha, na sasa mimi naenda kubadili hili kuwa int. 255 ni tena husika. Hebu kwenda mbele na kusema kwamba faini kama ni bado null. Ila. Sasa wanafunzi meza imebadilishwa kwa mafanikio, na ilani tena nyumba ni int. Kama kando, kupuuza idadi katika mabano linapokuja ints. Hii ni kwa sababu ya urithi. Nyuma kwa siku wakati hawakuwa na GUIs, wewe badala yake alikuwa mstari amri mazingira, 10 na 11 kwa mtiririko huo maalum ngapi wahusika unapaswa kuonyesha katika dirisha terminal kwa kweli kuonyesha mashamba. Ina chochote cha kufanya na urefu kidogo ya shamba halisi, hivyo tutaweza tu kupuuza kwamba kwa sasa. Sasa mimi kwenda katika meza hii. Na kama Daudi anaishi katika Mather, nyumba isiwe 0, ambayo ni int default thamani karibu null. Anapaswa kuishi katika nyumba 1. Hebu kiholela kusema kwamba Mike maisha katika Pfoho, hivyo nyumba namba 2. Sasa meza yangu inaonekana kidogo zaidi cryptic. Lakini fikiria ufanisi. Mimi sasa kutumia bits 32 tu kwa kutambua nyumba, ambayo ina maana kuna tu 1 kisheria ufafanuzi wa nyumba yangu Mather na Pfoho na kwamba katika meza ya nyumba. Hivyo kama nataka sasa rejoin mbao hizo, kufikiria njia hii. Hapa nina wanafunzi wangu meza, na upande wa kulia kuna idadi hii, 1 na 2. 1 ni Mather, 2 ni Pfoho. Tuna idadi wale sawa katika meza hii nyingine, ambayo inaitwa nyumba, 1 na 2 na 3 kwa nyumba hizo 3. Nini sisi sasa wanataka kufanya ni kuwa na uwezo katika kanuni, PHP na SQL, kwa aina ya kujiunga tena mbao hizo, ambapo kama hawa ni wanafunzi na hizi ni nyumba, tunataka namna fulani kuchanganya yao ili 1 yanaendana na 1, 2 yanaendana na 2, na ili tuweze kufikiri ambapo Daudi na ambapo Mike na ambapo kila mtu mwingine anaishi. Ili kufanya hivi tunaweza kutekeleza swala SQL kama zifuatazo. CHAGUA * KUTOKA wanafunzi JOIN nyumba ILIYO - Na sasa mashamba nini tunataka kujiunga juu? Hivyo students.house = houses.id. cryptic kidogo, lakini sehemu hii ina maana halisi kujenga mpya ya muda meza hiyo ni matokeo ya kujiunga na wanafunzi na nyumba. Na jinsi gani unataka kuchanganya tips ya vidole yangu hapa? Kuweka wanafunzi 'nyumba uwanja sawa kwa nyumba' ID shamba. Na kama mimi sasa bofya Nenda, mimi kupata nyuma hasa kile walitarajia. Daudi ni katika Mather, Mike ni katika Pfoho, na mimi pia kuona vitambulisho vya kipekee. Lakini uhakika ni sasa nina meza kamili. Na hivyo takeaway hapa kwa pset 7 au kweli kwa ajili ya mradi wa mwisho: Kama wewe kujua kwamba wewe ni hifadhi yoyote kipande cha habari redundantly, kama ni nyumba, labda ni mji, jimbo, na ZIP ambapo ZIP unaweza kawaida lakini si daima kutumika kama kitambulisho kipekee, kufanya kwenda njia ya mazoezi ya kiakili na kisha na kitu kama phpMyAdmin ya factoring nje data kwamba kawaida kwa sababu hasa kama tovuti yako anapata zaidi pamoja na kutumika na maarufu zaidi, hii ni jinsi gani kuhakikisha kwamba kila kitu ni super haraka, kwa kutoa database kama mwanga wengi kama kwa uniqueness iwezekanavyo. Hiyo ilikuwa mengi. Maswali yoyote? Wote haki. Hebu kuchukua mapumziko 5-dakika huko na kujikusanya. Wote haki. Ufuatao ni mfano kwamba ilitumika baadhi ya miaka iliyopita wakati mimi alichukua CS161, ambayo ni ya uendeshaji wa mifumo ya darasa katika chuo ambayo inajulikana kwa kuwa ajabu lakini kiasi mambo ya kazi, na inalenga kweli juu ya baadhi ya matatizo ngazi ya chini kwamba kina katika mifumo ya uendeshaji na pia hata katika ulimwengu wa database. hadithi kwamba aliambiwa na profesa wangu, Margo Seltzer, kwamba mwaka ilikuwa kama ifuatavyo. Tuseme kwamba una kidogo Dorm friji kwa ajili yenu na roommate yako na wote wawili kwa kweli kama maziwa. Hivyo wewe kuja nyumbani kutoka darasa ya siku moja, roommate yako ni bado kuna, wewe kufungua friji, na wewe kutambua, "Oh damn, tuko nje ya maziwa." Hivyo wewe karibu fridge, wewe kutembea katika barabara kwa CVS na kupata katika mistari inazidi muda mrefu ya kununua baadhi ya maziwa katika CVS. Wakati huo huo, roommate yako amerudi nyumbani kutoka kwake au darasa lake, anakuja katika chumba, anafungua friji kweli kutaka baadhi maziwa, kuufungua friji na, "Damn, hakuna maziwa." Hivyo yeye au yeye anafunga fridge, anatembea nje ya mlango, na huenda kwa ABP au mahali fulani nyingine kuliko CVS ambapo wewe si kwenda mapema ndani ya kila mmoja kwenda kupata baadhi ya maziwa. Bila shaka dakika chache baadaye, wote wewe kupata kurudi nyumbani na sasa una mara mbili kama vile maziwa kama wewe kweli walitaka. Na kuwa maziwa, sasa ni kwenda kwenda mbaya kwa sababu wewe kama maziwa lakini wewe si kweli kama maziwa, hivyo sasa una sana maziwa, hivyo ni kwenda sour. Hii ni kubwa, kubwa hali. Je, inaweza kuwa na kutatuliwa tatizo hili kama ungekuwa kwanza roommate nyumbani? Ndiyo. [Mwanafunzi] Unapaswa wameondoka note. [Kicheko] Nzuri. Unapaswa wameondoka note. Unapaswa kuwa na kuweka note Post-au kama akisema, "Gone kwa maziwa," na kisha roommate yako conceptually ingekuwa imefungwa nje ya kweli ya kufanya hivyo. Au unaweza kwenda 1 hatua zaidi. Unaweza literally lock jokofu na baadhi ya aina ya kufuli, na sasa roommate yako mapenzi halisi kuwa imefungwa nje ya friji. Kama sisi generalize nyuma ya programu, unaweza karibu kufikiri ya friji kama baadhi ya aina ya kutofautiana au struct, aina fulani ya chombo kwa taarifa. tatizo la msingi hapa ni kwamba wote wewe waliruhusiwa kukagua au kusoma hali ya muundo huu data, lakini wewe ni kutazamwa kwa nyakati tofauti na bado wote wewe alifanya uamuzi msingi juu ya hali ya dunia katika muda mfupi wale tofauti kwa wakati. Hivyo alikuwa na wewe umefungwa jokofu, wewe ingekuwa angalau kuepukwa roommate yako kutoka kuwa imekuwa na uwezo wa kukagua hali ya dunia, hivyo yeye au yeye hakuweza kuwa alifanya kwamba uamuzi huo. Hivyo database, kama ni zamu nje, kuwa na tatizo hili mara kwa mara. Hebu tuone kama tunaweza kujenga mazingira. Tuseme kwamba wewe ni aina ya mtu mbaya na kwenda Benki Kuu ya Marekani au moja ya maeneo mengine katika mraba kwamba kuwa wanandoa ATM kwa upande upande, na kwa namna fulani wewe figured nje ya jinsi duplicate kadi za ATM - si wote ngumu. Ni tu strip sumaku. Na hivyo nini unataka kujaribu kufanya ni kucheza mchezo huu ambapo wewe kuweka 1 kadi katika mashine 1, mwingine kadi katika mashine nyingine, na wewe kimsingi wanataka kujaribu kuchukua fedha wakati huo huo, kwa sababu kufikiria hadithi kwamba huenda kama ifuatavyo. mashine ya kushoto inachukua kadi yako na PIN yako, na kisha wewe sema, "Nipe $ 100." ATM ni programmed kwa kwanza kufanya juu ya kuchagua database yake au sawa - chochote database ni kutumia - kuona haina mtumiaji huyu angalau $ 100 katika akaunti yake au yake? Ikiwa hivyo, basi mate nje $ 100 na $ 100 kutoka Ondoa mizani zao. Lakini bila shaka kama kuna nyingi mashine hapa au njia nyingi za ukaguzi hali ya ulimwengu kuwa, kuba benki, ili kuona kiasi cha fedha una, kudhani kwamba tu kwa bahati mashine upande wa kushoto na kulia wote kuuliza swali wakati takribani sawa na kwa wakati. Na hakika hii inaweza kutokea. ATM ni kompyuta siku hizi. Hivyo kama mashine kushoto anasema, "Ndiyo, una angalau $ 100," wakati huo huo mashine kulia anasema, "Ndiyo, una angalau $ 100," kisha wote wawili kuendelea na mipango yao ya kumaliza na kweli mate nje $ 100 na kusema, "Hapo awali alikuwa na $ 200." "Hebu update variable kwa sasa kuwa $ 100 kushoto katika akaunti." Lakini kama wote wawili kuwa checked masalio ya akaunti yako na kukuta kwamba ni $ 200 na wote wawili kisha kufanya math na kusema 200-100, mashine na uwezekano ametema mbili bili $ 100 katika kila mashine, lakini wameweza tu updated Jumla akaunti yako ya usawa kuwa $ 100. Kwa maneno mengine, umechukua nje $ 200, lakini kwa sababu wao kukaguliwa hali ya dunia wakati huo huo na kisha alifanya uamuzi wa msingi juu ya thamani ya kwamba, wapate kufanya math hatimaye kwa usahihi. Hivyo katika hali ya benki pia kweli unataka kuwa na aina fulani ya lockout hivyo kwamba haraka kama wewe ve checked hali ya kutofautiana baadhi kwamba kweli ni muhimu, kama akaunti mizani yako, usiruhusu mtu mwingine kufanya maamuzi kwa kuzingatia kwamba mpaka wewe ni kufanyika kufanya kitu yako, ambapo katika kesi hii ni ATM upande wa kushoto. Funga kila mtu mwingine nje. Unaweza kweli kufikia athari katika michache ya njia tofauti. njia rahisi katika MySQL ni mstari wa SQL kwamba tuliyowapeni katika kuweka vipimo tatizo kwamba inaonekana hasa kama hii. Ingiza katika meza - chochote ni kuitwa - id, alama, na kushiriki, idadi ya hisa, maadili yafuatayo, kwa mfano. Kama si kusoma spec bado, huu ni mfano kuwashirikisha jinsi gani unaweza kwenda kuhusu kununua hisa 10 ya hisa hii senti kwa Rais Skroob, user ID ambao hutokea kwa kuwa namba 7? Hii inasema Insert KATIKA meza id zifuatazo, alama, na idadi ya hisa ya 7, 'DVN.V', na 10. Lakini - lakini, lakini, lakini - mstari wa pili ni moja muhimu. ILIYO duplicate KEY UPDATE hisa = hisa + MAADILI (hisa). Hivyo kabisa cryptic-kuangalia katika mtazamo wa kwanza. Lakini ukweli kwamba hoja hii SQL, hata ingawa Wraps kwenye mistari 2, ni 1 kwa muda mrefu swala, ina maana ni atomic kwa maana kwamba swala hili ama kuuawa wote kwa pamoja au si wakati wote. Na kwa ufafanuzi wa MySQL, kwamba ni jinsi gani wao kutekelezwa hoja hii. Ni kwa ufafanuzi katika mwongozo uhakika wa kutekeleza yote kwa mara moja au si wakati wote. motisha kwa ajili ya hii ni kama ifuatavyo. Kama katika kesi hii ni kujaribu kununua hisa 10 ya hisa, ni aina ya hadithi ileile kama maziwa, ni aina ya hadithi ileile kama ATM. Kama kufanya makosa ya si kutumia syntax lakini badala ya kuchagua kutoka orodha ya kuona hisa ngapi ya hisa hii senti haina Rais Skroob kuwa, na kudhani yeye ana hisa 10, na kisha baadhi kupasuliwa pili baadaye wewe kisha kufanya kauli UPDATE, ambayo ni mwingine taarifa katika SQL kwamba anasema kwenda mbele na kuongeza hisa 10 zaidi kwa 10 yake ya sasa ili walau jumla ni 20, Tatizo ni kwa sababu katika mifumo ya leo kwa sababu database na katika kompyuta ya leo una wasindikaji nyingi, nyingi cores - kwa maneno mengine, kompyuta unaweza literally kufanya mambo nyingi kwa mara moja - kuna dhamana hakuna kwamba SELECT yako na UPDATE yako katika kesi hii yanaenda kutokea nyuma kwa nyuma. Hivyo scenario mbaya itakuwa kufanya SELECT kuona hisa ngapi ya hii hisa senti haina Skroob kuwa, na kisha tu kwa bahati swala mwingine database ni kunyongwa - labda Skroob yake katika dirisha lingine browser kujaribu kununua hisa 10 katika dirisha lingine kabisa, kiasi kama ATM - na kudhani kwamba swala mwingine anapata katika kati ya SELECT na UPDATE. Ni inaweza kuwa kesi hiyo Skroob sasa hupoteza baadhi idadi ya hisa kwa sababu mchakato mwingine ni ukaguzi hali ya ulimwengu wake, au yeye anapata hisa zaidi ya anapaswa kuwa. Sisi si kwenda katika maelezo ya nini hasa wale fulani hadithi mistari itakuwa, lakini uhakika ni kama wewe na kuangalia thamani ya vigezo na kisha kufanya uamuzi, kama kuna hatari ya mtu mwingine kufanya kitu katika kati ya wale kauli 2, kama inaweza kutokea katika mifumo multiprocessor, katika mifumo multicore, kompyuta na uwezo wa kufanya mambo nyingi kwa mara moja, mambo mabaya yanaweza kutokea akaunti ya benki kama kuwa debited kimakosa, kununua mara mbili kama vile maziwa, au katika kesi hii idadi ya makosa ya hisa. Lakini kuna njia rahisi kufikiri juu ya hili. Ni zinageuka kuwa SQL pia inasaidia, kama wewe configure meza yako kwa usahihi, kitu kinachoitwa mashirikiano, ambayo Ningependa kusema ni kweli hata rahisi kuelewa kuliko huu, lakini siyo 1-mjengo, hivyo ni kweli kidogo zaidi kushiriki. Kuna literally taarifa katika SQL kuitwa START manunuzi. Tu kama kuna CHAGUA, UPDATE, Insert, FUTA, na JOIN na rundo la wengine, kuna maneno kama manunuzi START. Na nini basi kufanya katika muktadha wa pset 7 - huna kufanya hili kwa pset 7; ni wazi alikana kama si muhimu, lakini kwa ajili ya miradi ya mwisho inaweza kuwa na manufaa - kama simu swala ya manunuzi START na kisha mwingine swala na kisha mwingine swala na kisha mwingine, mwingine, na mwingine, maswali hayo si kweli kuwa kunyongwa mpaka wewe piga taarifa SQL kutenda, ambapo kiwango, kama ni 2 kauli au matamshi 20, wao wote ni lazima ifanyike kwa mara moja, ambayo ina maana hakuna mtu mwingine anaweza ajali kununua sana maziwa au debit sana fedha au kununua hisa nyingi sana kwa sababu wote wa maswali yako nitafanya nyuma kwa nyuma kwa nyuma kwa nyuma. Na hii ni super muhimu, hasa wakati wewe ni kufanya kitu kama hiki. Huu ni mfano holela kwamba anasema hebu update akaunti ya benki kwa kuweka uwiano sawa na usawa - $ 1000 ambapo idadi ya akaunti ni 2. Na kisha kauli ya pili sasa hebu amana kwamba $ 1000 ndani ya mtu mwingine ya akaunti ya benki ambaye akaunti namba ni 1. Kwa maneno mengine, hii ni mfano kamili ya wapi unataka kuhakikisha kwamba wote wa taarifa hizi za kutokea au si wakati wote kwa sababu vinginevyo mteja ni kwenda kupata Star na wewe ni kwenda kuchukua fedha zao na si mahali pengine amana, au benki ni kwenda kupata Star ambapo utaenda, hukuiweka fedha lakini si kweli Ondoa ni kutoka akaunti ya mtumiaji. Kwa hiyo unataka wote wawili na nitafanya pamoja. Hivyo inaingia katika shughuli dunia. Basi hiyo ni kitu kuweka katika nyuma ya akili yako, sio sana kwa madhumuni ya mradi tu wa mwisho, lakini kama unataka kuchukua mradi wako wa mwisho mahali fulani, kama unataka kuanzisha baadhi ya kampuni ya karibu yake, kama unataka kutatua tatizo baadhi ya kundi mwanafunzi juu ya chuo na kweli kuwa hai, hai tovuti, hizi ni aina ya mende Mpole kwamba yanaweza kutokea kama huna kabisa kufikiri kwa nini inaweza kutokea kama watu 2 ni kujaribu kupata tovuti yako kwa wakati huo katika muda halisi, ambapo maswali yao ili vinginevyo kupata interwoven. Tayari kwa baadhi JavaScript, teaser yake? Hii ni lugha yetu ya mwisho kwa muhula. Wote haki. Nashiriki, JavaScript inaonekana sana, sana, sana sawa na lugha 2, C na PHP, tumefanya hivi sasa. Hakuna JavaScript katika pset 7, lakini ni chombo muhimu incredibly linapokuja kufanya mtandao msingi miradi ya mwisho au kweli tu mtandao programu kwa ujumla zaidi. Hivyo maelezo ya haraka ya kitu kinachoitwa DOM. Hapa ni super rahisi mtandao ukurasa kwamba kweli tu anasema hello, dunia wote katika cheo na katika mwili. Kama indentation amekuwa akipendekeza kwa muda fulani, kuna shaka Hierarkia kwa kurasa za mtandao. Mimi naweza kuchora snippet hiyo ya HTML kama mti, Tafakari kwa majadiliano yetu ya miundo data katika C, kama ifuatavyo. Mimi na baadhi maalum mzizi nodi kuitwa nodi hati, na tutaweza kuona Analog ya hili katika JavaScript katika muda tu. mtoto wa kwanza na mtoto tu ya kwamba katika kesi hii ni tag HTML. Hakuna ramani moja kwa moja ya doctype. Hiyo ni kitu maalum, hivyo sisi lazima tu kupuuza linapokuja hii DOM, hii Object Kudhibiti Model mti. Ona kwamba HTML tag, ambayo nimekuwa depicted kiholela kama mstatili, ana watoto 2: kichwa na mwili. Wale ni vile vile kama inayotolewa mistatiri. Ni ya maana pictorially kwamba kichwa ni upande wa kushoto wa mwili. Kidokezo ni kwamba kichwa huja kwanza katika mti. Hivyo kuna kweli kuagiza kwa mti wakati kuteka ni kama hii, ingawa maumbo na whatnot ni holela. Mkuu wakati huo huo ana mtoto mmoja aitwaye cheo, na cheo kweli ina mtoto wake mwenyewe, ambayo ni "hello, dunia", ambayo mimi kwa makusudi akauchomoa kama Oval hapa kufanya ni tofauti kidogo kutoka mstatili. Haya ni mambo mistatili, ambapo hello, dunia ni kweli nodi maandishi. Hivyo ni nodi katika mti, lakini ni aina tofauti ya nodi hivyo mimi akauchomoa kiholela tofauti. Vile vile haina mwili na mtoto aitwaye hello, dunia kama vile, hivyo tofauti nodi ingawa wao ni bahati Nakala huo, lakini nimekuwa inayotolewa kwa kutumia umbo moja. Hivyo ambaye anajali? Naam, ni nini kizuri kuhusu HTML ni kwamba ni gani hii asili kihierarkia. Na nini kizuri kuhusu JavaScript na maktaba hasa kwamba ni hiari inapatikana na maarufu kama jQuery, unaweza navigate muundo mti hivyo kushangaza rahisi. Yoyote ya mambo sisi alivyofanya katika C na kuyatumia na miti na traversing recursing juu ya nodes kushoto mtoto kwa mtoto wa kulia, kwa ghafla tunaweza aina ya kuchukua kwa nafasi kama kuwa kushangaza mwangaza kama si kidogo frustrating lakini si karibu njia bora ya kwenda kuhusu programu. Na hivyo kwa hizi ngazi za juu lugha kama JavaScript tutaweza kuwa na uwezo navigate mti huu zaidi intuitively. Na hakika syntax ni kwenda kuwa familiar kabisa. Kama wewe sijawahi kuona JavaScript kabla, hii ni kumbukumbu ya kweli nice kutoka folks Mozilla, watu ambao kufanya Firefox, hivyo kujisikia huru na kuvinjari kwamba kwa urahisi. Nini utapata - na hizi slides ni kufanana na kile sisi kutumika siku nyingine - vile vile, kuu ni gone. Hivyo wakati wewe kuandika mpango katika JavaScript, hakuna kazi kuu. Wewe tu kuanza kuandika code. Lakini tofauti muhimu kati ya JavaScript na C na PHP ni kwamba wakati ambapo C na PHP hivi sasa wamenyongwa server upande na appliance katika kesi hii au zaidi kwa ujumla na server, JavaScript kwa kubuni ni kawaida kunyongwa kwa browser. Kwa maneno mengine, unaweza kuandika JavaScript code, kama sisi ni juu ya, kwenye server katika appliance, lakini wewe ni pamoja na hiyo kati ya HTML yako, kati ya CSS yako, kati ya GIFs yako na PNGs yako na JPEGs yako hivyo kwamba wakati mtumiaji ziara mtandao wako ukurasa, kama wewe ni kutumia JavaScript, kwamba code JavaScript huja kutoka server browser, na ni kweli kwamba browser executes yake. Hivyo hii ina maana ya maana kwa ajili ya mali hata miliki. Ni aina ya silly hata kufikiri kuhusu kulinda IP yako linapokuja JavaScript code kwa sababu kwa asili ya lugha ya anapata kunyongwa kawaida browser upande. Unaweza obfuscate yake, ambayo ina maana unaweza kufanya ni kuangalia mambo na ugly na hakuna whitespace, kutisha variable majina, kwa kufanya ni vigumu kwa watu kuiba IP yako, lakini muhimu ni kwamba ni kunyongwa browser upande. Hata ingawa kama upande kando JavaScript inaweza kutumika server, matumizi ya kawaida kesi hivi sasa bado ni browser. Na hapa ni nini inaonekana kama. Hapa ni kama-kama-mwingine mwingine kujenga tu kama C, kama PHP. Hapa ni kujieleza Boolean wakati wewe "au" mambo 2 pamoja. Hapa ni wakati wewe "na" mambo 2 pamoja. Hapa ni taarifa kubadili, ambayo ni sawa na PHP katika kwamba unaweza kubadili kwa aina mbalimbali za maadili. Matanzi vile vile kuwa kwa matanzi hapa, ambayo ni muundo identically kwa nini tumekuwa kuona mbele. Wakati matanzi; tumekuwa got kufanya wakati matanzi. Vigezo, milele hivyo tofauti kidogo. Huwezi kutangaza vigezo kama wewe kufanya katika PHP na C, lakini vile vile ni JavaScript weakly typed. Huwezi kutaja int au kuelea au kamba au kitu kama hicho kwa kawaida. Unaweza kutaja var. Huna kutaja var, lakini ina maana kama huna. Kwa kawaida kama wewe omit var, ajali kujenga variable kimataifa badala ya mitaa. Hivyo basi mimi kupendekeza kwamba wewe daima karibu tu kusema var na kisha jina la kutofautiana. Ni si aina, ni tu var kwa kutofautiana. Hii itakuwa mfano, kama ni 123 au "hello, dunia". Arrays ni sasa na syntactically sawa na PHP. Mimi itabidi kusema idadi var na kisha mimi kutumia mabano mraba tena kutangaza variable ambao ni aina safu ambayo ina idadi haya hasa katika hilo kutengwa kwa koma. Na kisha mwisho, hii ni moja tu kwamba kweli inaonekana tofauti. Kumbuka kwamba katika PHP sisi ingekuwa kutekelezwa safu associative kwa mwanafunzi kama Zamyla kwamba ili kuangalia kama hii, ambapo variable inaitwa mwanafunzi. mabano mraba maana hiyo inakuja safu. ukweli kwamba mimi si kutumia fahirisi numeric lakini masharti - id, nyumba, na jina - ina maana kwamba hii ni safu associative, na haya mishale na alama ya usawa na bracket angled ina maana kwamba muhimu ni "id", thamani ni 1; muhimu ni "nyumba", thamani ni Winthrop Nyumba; muhimu ni "jina", thamani ni Zamyla Chan. Hivyo kuna 3 funguo ndani ya safu hii associative, ambayo kila mmoja ana thamani yake mwenyewe. Tumeona kwamba katika pset 7, au hivi karibuni mapenzi, katika JavaScript wazo moja, lakini ni kwenda kuangalia kama hii. Hivyo var mwanafunzi - hakuna ishara ya dola na bila kutaja aina bado lakini var - sawa na kisha kufungua braces curly kwa sababu katika JavaScript wakati una jozi thamani muhimu, wewe kweli matumizi ya kitu kinachoitwa kitu. Na wale ambao hawakuwa kuchukua APCS au kama anaweza kukumbuka vitu kutoka Java au lugha zinazofanana. JavaScript si Java, kwanza ya yote. Ilikuwa makusudi kubuni uamuzi miaka iliyopita na kubisha mbali kitu kingine kwamba alikuwa maarufu, jina lake, hata kama hana uhusiano msingi kwa java yenyewe. JavaScript ina vitu, na wewe kujenga nao kwa njia ya nukuu brace curly. Vitu katika JavaScript ni kiasi pretty sawa na arrays associative katika PHP linapokuja data hifadhi ndani mwao. Lakini hata kwa nguvu zaidi katika JavaScript unaweza kujiunga kwa urahisi sana kazi ndani ya kitu, na ingawa unaweza kufanya hivyo katika lugha nyingine, ni kabisa dhana ya kawaida, kama tutaweza kuona. Kwa kifupi, kitu hii inawakilisha mwanafunzi, ambaye ni hasa Zamyla, na ni sawa conceptually, tu syntactically tofauti na hii. Hebu kweli matumizi JavaScript katika faili. Ni zinageuka kuna tag script. Tumeona tag style na tumeona tags nyingine HTML. tag script kweli yana baadhi code JavaScript. Hebu kwenda katika appliance ambapo tuna baadhi code chanzo kabla ya kufanywa. Mimi si posted bado kwenye tovuti, lakini mimi itabidi kufanya hivyo baada ya darasa. Hebu kufungua hii moja, blink.html. Nyuma katika miaka ya 1990, kulikuwa na literally tag HTML kuitwa tag blink, na hii ilikuwa ni moja ya vitambulisho wengi ajabu overused kwenye mtandao ambapo wewe d kutembelea baadhi ya 1990 style mtandao ukurasa na kuanza kuona Nakala flashing wewe kama hii, matokeo ya tag Marquis, ambayo alikuwa Nakala kwenda kama hii. Moja ya mara chache ambapo dunia kweli walikubaliana juu ya kiwango mtandao, kila mtu katika bodi kuuawa tag blink baadhi ya miaka iliyopita. Lakini tunaweza kufufua kwa JavaScript kama maandamano ya nguvu una wakati unaweza kuandika mpango ndani ya ukurasa wa mtandao. Kwanza hebu ruka juu ya mambo mapya na lengo tu juu ya zamani. Hapa ni mambo ya zamani katika mfano huu. Nina tag HTML, tag kichwa, na tag cheo. Basi nina tag mwili hapa kwa div, ambayo ni wanakumbuka tu mgawanyiko pembenne ya ukurasa kwamba Nimekupa ID kipekee kiholela ya "salamu" kwa, hivyo tu nina njia ya kipekee akimaanisha yake, ambayo ina baadhi ya maandishi rahisi sana: hello, ulimwengu. Sasa basi mimi kitabu hadi juu ya faili hii na kuona nini mpya. Jambo la kwanza kwamba mpya juu juu ni tag script, na ndani ya taarifa tag script nimekuwa alitangaza kazi. Kutangaza kazi katika JavaScript, pretty sawa na PHP, wewe literally kuandika kazi basi jina la kazi mabano, na labda baadhi ya hoja kama inachukua yoyote. Kisha mimi nimepata brace yangu curly kama kawaida, na sasa tuna baadhi code kidogo mpya, lakini hebu angalia hii ina maana gani. Hivyo div var, hii ina maana tu nipe variable inayoitwa div. Ningeweza kuitwa ni foo, lakini mimi alitaka kuitwa div kwa sababu hiyo itakuwa wazi katika pili. Kisha zinageuka katika JavaScript - na hii ni JavaScript code iliyoingia katika mtandao ukurasa wangu - kuna maalum wa kimataifa wa aina variable iitwayo waraka. JavaScript kwa kweli ni lugha ya kifaa-oriented. Sisi si kuingia kwa undani katika 50 kama yale kwamba maana, lakini kwa sasa kujua kwamba kitu ni pretty kiasi kama struct. Kama tuliona njia ya nyuma wakati katika moja ya tatizo mwanzo seti ambapo sisi kuweka mengi ya habari katika struct, vile vile ni hati struct maalum ambayo inakuja na kivinjari, kuja na ukurasa mtandao yoyote. Ni si kitu mimi kuundwa. Ndani ya muundo huu hati, ingawa, una data si tu lakini pia una kazi. Na wakati wowote una kazi ndani ya muundo, ndani ya kifaa, ni kuitwa mbinu. Lakini ni kitu kimoja. Njia ni kazi ambayo tu hivyo hutokea kuwa ndani ya kitu kingine. Hivyo hii ina maana kwamba hii maalum variable kimataifa iitwayo waraka ina kazi kuitwa getElementById kwamba literally anafanya hivyo. Ni kupata wewe kipengele kutoka DOM, Kudhibiti Object Model mti, ambao ni ID katika salamu kesi hii. Kwa maneno mengine, wakati wote sisi alitumia juu ya miundo ya data anakuja katika kucheza hapa. Hii picha ya DOM kwamba tulikuwa na wakati uliopita, ingawa ukurasa ni kidogo tofauti, kama alikuwa div katika picha hii, nini document.getElementById atarudi kwangu ingekuwa na kuwa pointer kwa Mstatili katika mti, akimaanisha Mstatili katika mti. Basi hiyo ni nini maana ya kweli piga moja ya kazi hizo. Katika kesi hii tena ni div. Ni si mwili au jina. Basi hebu angalia nini mimi kufanya na kisha div hii sasa kwamba mimi ni ndani ya hii div variable kuitwa. Ni zinageuka na JavaScript una uwezo wa tweak CSS yako ukurasa wa dynamically. Hadi sasa, wote wa CSS tumefanya, angalau mdogo, ni katika sifa style, au mahali pengine ambapo kuwa sisi kuweka CSS? Mimi aina ya kuharibiwa kwamba moja. Katika tag style ya wakati juu ya faili. Au nafasi ya tatu imekuwa katika? faili nje, kitu css.. Basi hizo sehemu 3 tumefanya CSS hivi sasa, lakini samaki ni ngumu tumekuwa coded yote. Wewe aliamua kama wewe njiwa katika pset 7, tuliamua kabla hotuba nini CSS yetu itakuwa. Lakini kama unataka kubadilisha CSS yako, unaweza kweli kufanya hivyo mara moja una halisi ya programu lugha. CSS, HTML - si programu lugha. JavaScript ni. Hivyo ni zinageuka kuwa haraka kama una moja ya mistatiri wale kutoka mti kuitwa DOM, ina yenyewe baadhi ya data ndani yake. Hivyo div kwamba mimi tu grabbed kutoka mti ina nini Tutamwita mali ndani yake kuitwa style, na mali style ina yenyewe mali inayoitwa kujulikana. Ningependa kujua hii tu kwa kuangalia juu ya mwongozo user CSS ya. Ni zinageuka kuna muonekano CSS mali ambayo haina nini anasema. Ni hufanya kitu inayoonekana au la, inayoonekana au la. Na jinsi ya kufanya kwamba ni hii. Mimi nauliza programmatically ikiwa muonekano wa div hii ni siri, nini mimi kuibadilisha kwa? Inayoonekana. Mwingine kama muonekano wa ukurasa huu si siri, mantiki mimi kufanya hivyo siri. Mimi sielewi kwa nini ni inayoonekana na siri na si vinavyoonekana na visivyoonekana. Hii ilikuwa maskini kubuni uamuzi njiani. Lakini hayo ni kweli kinyume katika CSS: inayoonekana na siri. Yote hii haina maana ni kubadili CSS ya faili yangu na mbali, na mbali kwa kuwa div fulani. Lakini tena, hii ni kazi kuitwa blink. Wakati ni kazi blink wito? Ni zinageuka kuwa kuna mwingine maalum wa kimataifa variable kuitwa dirisha, sawa katika roho na waraka huo, lakini wakati hati inahusu mtandao ukurasa wako, kama mti DOM, HTML wewe alimtuma kutoka server, dirisha inahusu chrome karibu yake, anwani bar, bar cheo, na yote ya kwamba mambo kote mtandao ukurasa wako. Na zinageuka kuwa kitu dirisha ina kazi maalum ndani yake aitwaye setInterval kwamba anafanya nini anasema. Itakuwa kuweka Interval - katika kesi hii kila milliseconds 500 - na, kuchukua nadhani, nini ni kwenda kufanya kila milliseconds 500? Ni kwenda nitafanya kwamba blink kazi. Na nini ni nzuri hapa ni kwamba sisi wangefanya hii katika C ingawa sisi kamwe alifanya. C gani kuwa kitu kinachoitwa kazi kuyatumia ambapo unaweza kupita kazi kuzunguka kama hoja. Vile vile katika JavaScript unaweza kupita jina la kazi katika kazi nyingine. Na taarifa ya nini mimi kufanya. Mimi si kufanya hili. Kama mimi kuweka mabano baada blink, kwamba ingekuwa na maana piga kazi blink. Kama mimi omit yao, kwamba maana hapa ni kazi blink hivyo setInterval kwamba wanaweza kumwita kila milliseconds 500. Hivyo matokeo ya mwisho, ingawa mauaji ni, ni kwamba kama mimi kwenda katika kwenye localhost na kwenda blink.html, Mimi sasa hili likitokea tena na tena. Na kama mimi kwa kweli Kagua Element, hebu tuone kama tunaweza kuona hayo. Hebu Kagua Element, basi mimi kitabu chini kidogo tu, basi mimi kuchagua Elements zaidi ya hapa, na ilani ndani ya DOM ya mkaguzi Chrome. Ni literally kubadilisha na kurudi milliseconds kila 500. Kama sisi kwenda kwa rafiki yetu Nate, kama umewahi kujiuliza jinsi hii ni kazi, sawa na wazo Interval, lakini Nate ni kweli kufanya ufanisi sana matumizi ya alama katika kesi hii hapa. Basi nini zaidi tunaweza kweli kufanya na hili? Hebu kufungua mfano mwingine na kujaribu kitu hiyo ni programmatically hata muhimu zaidi kuliko kufanya mambo blink. Hebu kwenda katika directory yetu fomu leo ​​na kwenda katika form0. Hii ilikuwa fomu ugliest inawezekana kwamba mimi naweza kuja na, na napenda tu kuonyesha nini inaonekana kama katika browser. Hebu kwenda kwenye localhost / fomu, na hii ni form0. Hii ni super ugly HTML fomu kuwa ana mashamba chache kwa barua pepe, kwa password, password, na kisha tiki kidogo kwa kukubaliana na masharti ya baadhi na masharti. catch ni kama mimi kutembelea fomu hii na sitaki kukupa yangu ya barua pepe, Sitaki kukubaliana na masharti na sheria labda, naweza bonyeza Register na inakuwezesha yangu kwa njia ya anyway. Hii hutokea kwa kuwasilisha faili kijinga PHP kuitwa dump.php. All yake ni magazeti nje ya yaliyomo ya $ _GET tu kwa madhumuni ya uchunguzi. Hiyo ilikuwa ni nini in kwa mtumiaji tu sasa. Lakini tuseme sisi kweli unataka kuhalalisha aina ya mtumiaji kuwasilisha. Hebu kwenda katika toleo 1. Hii ni form1.html. Inaonekana aesthetically kama mbaya, lakini taarifa jinsi dhana ni. Kama mimi bonyeza Register bila kushirikiana, mimi kupata yelled saa. "Lazima kutoa anuani yako ya barua pepe." Wote haki. Hivyo basi mimi kujaribu kuwa. Hivyo malan@harvard.edu. Sihitaji password. Register. "Lazima kutoa password." Wote haki. Hivyo mimi kutoa password ya rangi nyekundu. Register. "Nywila hayaoani." Mimi sasa hapa aina katika nyekundu. Mimi ajali checked kwamba. Register. "Wewe lazima kukubaliana na masharti na sheria." Wote haki. Kukubaliana huko. Register. Na sasa inaonyesha mimi pato uchunguzi zaidi ya hapo. Basi nini ilitokea tu? Tulikuwa na uwezo huu ili adhibitishe maoni fomu. Kwa kweli, kama alivyofanya kupiga mbizi katika pset 7, kuna kazi Apologize kwamba inafanya pretty rahisi yell katika user kwa ujumbe kwenye screen. Mimi nina kutumia utaratibu tofauti kidogo, kazi tahadhari, ambayo si kazi hiyo alitabasamu juu tangu inafanya ujumbe user sana ugly. Lakini hebu angalia nini mimi kufanya hapa. Hii ni form1.html, na taarifa kwamba mimi na baadhi ya syntax pretty familiar: mwili tag, fomu tag, hatua sifa, njia sifa. Lakini taarifa Nimekupa fomu yangu ID kipekee kwa urahisi. Kisha mimi nimepata email shamba ambaye ni aina ya maandishi, shamba password ambaye ni aina ya nywila, uthibitisho shamba ambaye ni aina ya nywila, na kisha tiki ambaye jina lake ni makubaliano juu hapa, aina ni checkbox. Na kisha mimi nimepata kifungo kuwasilisha. Lakini taarifa juu nini zaidi nina. Awali ya yote, kuna mwingine matumizi ya tag script. Kama una baadhi code JavaScript katika faili mwingine, kama tu na CSS unaweza ni pamoja na hiyo. Na wewe kufanya hivyo kwa chanzo script, na kisha taarifa mimi nina kuunganisha inaonekana kwa googleapis.com kwa njia ya muda mrefu sana lakini faili ambaye jina inaishia katika jquery.min kwa kiwango cha chini JS.. jQuery ni super maarufu maktaba kwa JavaScript kwamba tu hufanya JavaScript zaidi ya yote user-kirafiki kutumia. Ni kwa ufanisi kuwa kiwango de facto. Hivyo hata kama nini wewe kuhusu kuona si safi JavaScript per se, ni maktaba juu ya JavaScript kiasi kama maktaba CS50 ni safu juu ya ngazi ya chini code C; ukweli ni karibu kila mtu kwenye mtandao anatumia hiyo. Hivyo haya si mafunzo ya magurudumu. Hii ni bora mazoezi siku hizi. Sasa taarifa chini ya kwamba ni script wangu mwenyewe tag, na taarifa ya kile nimepata kufanyika hapa. Ni zinageuka kuwa jQuery haina kitu dhana kidogo. JavaScript ina ishara ya dola, lakini wao ni maana. Wao ni kama barua B au au C. jQuery ina tu iliyopitishwa mkataba au aina ya madai aliweka na ukweli kwamba dola itakuwa alama yao maalum. Hivyo kwa haraka kama wewe kupakia hii ya kimataifa JavaScript faili hapa juu na tag script, unaweza kupata variable maalum ya kimataifa kwamba wito $. Ni vizuri zaidi kuitwa jQuery, lakini hiyo haina kuangalia karibu kama sexy kama $. Lakini $ hana maana maalum. Katika PHP ilikuwa maana maalum. Ilikupasa kuwa ni mbele ya kutofautiana. Hii ni kitu sexy kwamba wao alichukua. Ni nini kinachoendelea hapa? Taarifa mimi nina kupita kwa kazi jQuery variable wangu kimataifa hati na kisha mimi nina wito tayari.. Nini jQuery kimsingi haina ni utapata kuchukua baadhi ya mambo JavaScript vanilla kama kitu hati, kitu dirisha, na kama wewe kupita katika kufanya kazi jQuery - na tena, kwa kuwa wazi, hii ni kazi kuitwa jQuery - kile yake ni kuirudisha kwa wewe toleo maalum ya hati ambayo ina zaidi ya utendaji yanayohusiana na hayo. Hivyo katika JavaScript ghafi hakuna kazi tayari, lakini kama wewe kupita hati kwa kazi jQuery kwanza, kuirudisha kwa wewe toleo maalum ya kitu hati ambayo ina makala zaidi dhana. Na kwamba ni kwa nini watu kama hiyo. Ni tu hufanya mambo rahisi kufanya, kama sisi ni juu ya kuona. Hiyo ni nini hii maana ya mstari wa kanuni? Hii mstari wa kanuni hapa ina maana wakati hati tayari - kwa maneno mengine, mara moja browser inafanywa kusoma hii ya juu faili chini - kwenda mbele na kutekeleza kazi zifuatazo. Nini kweli kuvutia katika JavaScript - na PHP ina hii pia - ni anonymous kazi. Katika JavaScript unaweza kutangaza kazi ya kwamba hawana jina lakini wao kuwa na mwili. Angalia kinachotokea hapa. Hii ni kazi kuitwa tayari, na ni njia tu kufanya yafuatayo wakati wote mtandao ukurasa ni tayari, wakati ni wote wamekuwa kusoma katika kutoka kwa seva. Nini unataka kufanya nini? Nataka nitafanya chunk ya code. Ona kwamba hatutaki kutekeleza kanuni hii haki ya mbali. Kama mimi omitted hii, hii itamaanisha kuanza utekelezaji mara moja mistari haya ya kificho. Lakini ukweli kwamba mimi kusema hapana, hapana, hapana, wrap hii katika kazi bila majina kama hii njia wala nitafanya hivyo bado, simu yake hatimaye. Tuliona huu iliyopita katika mfano wetu uliopita fomu. Nini kazi gani sisi kuwaita hatimaye, 500 milliseconds baadaye? Blink. Hivyo wazo moja. Tena, hata kama hii inaonekana kidogo weird, tu kuchukua kwa sasa juu ya imani kwamba kutangaza kazi bila majina kwamba wito hatimaye, wewe tu kuandika kazi () { Basi nini code ni sisi kwenda nitafanya hatimaye? zifuatazo. Hii pia inaonekana mpya kidogo, lakini hii ina maana hapa kazi jQuery, na hii sasa ni njia ya mkato. Hii snippet ya HTML chini ya screen ya shaka ina baadhi ya uwakilishi mti. Siyo hii. Ukarasa huu ni ya kuvutia zaidi kuliko mfano huu hello, ulimwengu. Lakini kuna baadhi ya mti kwamba sambamba na HTML hii. Itakuwa maumivu katika shingo ya kuwa na kutekeleza baadhi ya aina ya kazi ya kujirudia kuanza nodi katika mizizi na kisha kupata nodi ambaye ni ID usajili. Basi nini jQuery hufanya super rahisi kwetu ni halisi huu. Kwenda mbele na kupata yangu chochote div au fomu chochote, chochote HTML kipengele ana ID ya usajili. Hii ni sawa na document.getElementById ('usajili'). Kwa nini watu kama jQuery? Sababu ni mfupi kwa aina. Lakini hiyo yote ni. Ni wazo moja. Kupata yangu tag ambao ID ni usajili. Na wakati tag kwamba, ambayo hufanyika kuwa fomu, ni in, kwenda mbele na kutekeleza kanuni hii. Basi hebu kuchukua moja kuangalia sasa jinsi sisi ni kufanya aina validation. syntax ni admittedly cryptic mara ya kwanza, lakini nini kinaendelea? Kama hii mstari wa kanuni ni kweli, mimi nina kwenda yell katika user kutoa yake anuani ya barua pepe. Hivyo ni nini hii mstari wa kanuni? $ Maana jQuery. Sasa taarifa hii. Hii ni aina ya kama CSS. Kama umefanya dived katika CSS bado, utajua kwamba hii ina maana ya kipengele ambao ID ni usajili. nafasi ina maana kupata mtoto au mtoto wa usajili ambaye jina lake ni pembejeo. Na kisha jambo hili katika mabano mraba ni chujio kidogo. Na hata kama hii inaonekana cryptic, hii ina maana kwenda kwa ajili ya ambao ID ni usajili, kwenda ndani ya pembejeo kipengele cha kwamba ambaye jina lake ni barua pepe, na kisha kupata thamani yake, chochote thamani yake hutokea kwa kuwa - asdf kama kwamba ni yote Mimi typed au malan@harvard.edu kama kwamba ni nini mimi typed. Hivyo kama thamani ya shamba barua pepe aina ya kitu ==, yell katika mtumiaji. Mwingine kama thamani ya shamba password == kitu, yell katika mtumiaji. Mwingine kama thamani ya shamba password haina sawa thamani ya shamba uthibitisho, ambayo ilikuwa nyingine aina ya kipengele, yell katika mtumiaji. Na kisha mwisho - na moja hii pia ina baadhi syntax mpya ya peke yake, lakini mara ve kuona hilo, ni angalau kidogo zaidi ya busara - mwingine kama fomu ambao ni ID usajili ina kipengele pembejeo ambaye jina lake ni makubaliano na ni checked, kwenda mbele na yell katika mtumiaji. Kwa hiyo mimi kabisa kukubali hii ni balaa kabisa katika mtazamo wa kwanza. Ni mengi ya syntax mpya. Lakini yote ya jQuery ifuatavyo aina hii ya ruwaza. Na kwa uaminifu, sikuweza hata kujua hii ulikuwepo mpaka dakika chache zilizopita. Mimi Googled, "Je, wewe kuangalia kama checkbox ni checked katika jQuery?" na hii ni syntax, kwa sababu kuna njia tofauti za kufanya hivyo na halisi code ghafi JavaScript. Hivyo kama ukurasa sana kwanza ya tatizo Set 7 inasisitiza, pset 7 ni mengi sana katika zoezi uchangishaji mwenyewe ambapo tumekuwa zinazotolewa, hopefully, mfumo wa dhana ambayo kukabiliana pset. Lakini kama ni mara ya kesi pamoja na kubuni mtandao, ni juu kweli poke kote, kuingiza snippets ya maadili na mifano kutoka Mtandao muda mrefu kama wewe wanaelezea yao kwa masharti juu ya karatasi ya kwanza, na kutambua kwamba kujifunza HTML, CSS, JavaScript na hata SQL ni kweli maana ya kuwa zoezi hili katika-nyumbani kama sisi kuanza kuchukua magurudumu haya mafunzo mbali. Na kutambua pia kuna mengi zaidi ya mambo unaweza kufanya kwa browser. Ndani ya zaidi ya mambo haya kuna mambo mengine aitwaye tukio handlers. Na hata kama sisi alimwangalia ndio inayoitwa onsubmit na onready, unaweza kufanya mambo kama onkeydown, onkeyup, kama wakati mtumiaji linagusa muhimu, unaweza kusikiliza kwa kuwa na up muhimu. Gmail ina keyboard shortcuts. Jinsi gani Google kutekeleza keyboard shortcuts kama C kwa kutunga? Wao kusikiliza kwa matukio, kama uko wito, kama onkeypress au onkeyup na onkeydown. Kama ve milele hovered mouse yako juu ya chaguo baadhi menu na ghafla, voilà, menu inaonekana au graphic mabadiliko Michezo, jinsi wanafanya hivyo? Badala ya kusikiliza kwa onready au onsubmit, wewe kusikiliza kwa onmouseover au onmouseout. Hivyo katika muda mfupi, na shemu hizi rahisi sana kwamba tumeanza kwa scratch ya uso wa leo na tutaweza kupiga mbizi katika zaidi juu ya Jumatano, una, inazidi, uwezo wa kutekeleza aina ya mambo ambayo tayari wewe ni ukoo na. Basi hebu mwisho huko, na tutaweza kuendelea hii juu ya Jumatano. [CS50.TV]