DAVID Malan: Allt í lagi. Þetta er CS50, og þetta er lok viku níu. Það er verið vindbylur yfir síðustu daga. Og Heimadæmi sjö, ef þú ert hné djúpt inn í það, við gerum það er alveg hluti nýja sem er þarna. En við skulum sjá hvort við getum ekki stykki allt saman hér stuttlega áður þá veering burt í enn aðra átt og að sjá hvar annars við getum farið. Svo svona langt, höfum við talað um HTML. Við höfum talað um CSS. Við höfum talað um PHP. Þú hefur byrjað að upplifa SQL. Í dag munum við tala aðeins um JavaScript. En hvernig gera öll þessi ólíkum tungumál passa saman? Þannig að við ræddum í síðustu viku um hugmynd af having a framreiðslumaður. Þannig að við skulum draga bara þessa rétthyrning eins og a vefur framreiðslumaður hér. Og a vefur framreiðslumaður þjónar vafalaust skrá. Og sumir af þeim skrám getur verið HTML skrár. Svo einn af þeim hlutum sem vefþjóni geta spýta út gæti verið skrá sem við verðum bara draga svona inniheldur nokkrar HTML. Svo í skilmálum leikmaður er, hvað er HTML láta þig gera? Áhorfendur: Page útlit ágætur. DAVID Malan: OK, gera síðu útlit ágætur, þó svo að ég held að ég hef sannað sem annars. Svo HTML er að láta þig leggja út síður setningafræðilega, og það gerir þér kleift að konar fagurfræðilega merkja upp síðu, merkja upp _STATIC_CONTENT, svo að þú geta þá skoðað það með a vefur flettitæki. En það er lykillinn. Það er fast efni. Þú skrifar það, spara það, og þá skip það. Og the vefur framreiðslumaður þjónar þá það upp til þinn gestur. En við stylize hlutina með mismunandi tungumál að öllu leyti. Við byrjuðum að nota stíl eigindi á ákveðnum merkjum. Og stíl eigindi skulum setja hlutir eins og leturstærð og lit. Og þú hefur sennilega byrjað að uppgötva, eða þú vilja bráðum til endanlegrar verkefni hugsanlega enn öðrum eiginleika sem þú getur notað í CSS. Og svo í skilmálum leikmaður er, hvað í raun þá er CSS do? Þeir eru bara dæmi þar. Hvað þýðir það að láta þig gera það HTML virðist ekki frá því sem við höfum séð hingað til? Áhorfendur: Skilgreina stíl sjálfur. DAVID Malan: Skilgreina stíl sjálfur. Svo skilgreina hluti eins og flokkum eins og þig kunna að hafa komið upp, eða einstaklega þekkja hnúður í skjali svo að þú getur stylize þá. En nánar tiltekið, myndi ég segja að CSS raunverulega gerir þér kleift að taka hlutina á síðast míla og gerir þér kleift að tilgreina mikið nánar fagurfræði, en HTML mestu leyfir þú uppbygging síðurnar þínar. Og jafnvel þó að það eru sumir vanskil, eins og við sáum merkinu vöruliði tag, sem bil að tala gerði hlutina mjög stór og djörf. Það er nokkuð almenn skilgreining merkislns - stór og djörf. Hvað leturstærð er það? Hvaða litur er þetta? Hvernig feitletrað er það? Og CSS leyfir þér meira fínskorinn Tune svoleidis. Auk skipulag, eins og sumir af þú hefur séð. Og hreinskilnislega, CSS er dálítið af sóðalegur tungumál. Það er mjög öflugur í að þú getur gert bókstaflega allir website að þú hafir séð á vefnum í dag með það, en það er góður af a sársauki í hálsi. Og sum ykkar hafa banged höfðinu gegn veggjum þegar bara að gera eitthvað heimskur eins miðju á valmyndinni Heimadæmi sjö ef þú hefur fengið að að benda nú þegar. En átta sig, þá hluti fá auðveldara með tímanum. Þú byrjar að taka eftir mynstrum. Og aftur, Google mun vera vinur þinn fyrir ýmsar leiðir sem þú getur leysa þessar tegundir af vandamál. Og ég þori að segja með CSS og HTML meira Almennt er hægt að leysa vandamál í margar fleiri leiðir, sem allt gæti mjög vel vera rétt, en þú gætir í eitthvað eins og C, jafnvel nú PHP eða JavaScript. Það eru bara margar mismunandi Leiðir til að leggja það út. En þetta byrjaði að fá sóðalegur, sagði við. Bara svona commingling HTML og CSS þinn með stíl eigindi var smá sloppy. Og svo ég sagði í staðinn, eins konar abstractly tala, að þú ættir amk byrja að þáttur út CSS þitt sennilega. Ekki þinn stíll eiginleika, en að minnsta kosti nota stíl tag inni það hluti af vefsíðu? Áhorfendur: Head. DAVID Malan: í höfuðið. Allt þar til nú, við höfðum aðeins titilinn upp það, en þú getur einnig bætt við stíl merkja, og þú getur sett CSS þinn u.þ.b. tala í átt að efst á síðu. En þá tókum við það einu skrefi lengra og við reiknað það út meira í sérstakri skrá. Og svo þessar tvær skrár voru einhvern veginn nú tengdir. Og reyndar var það tag sem gerði það. Og hvað var einn af sérlegu motivations fyrir þátta út CSS okkar allt meira? Áhorfendur: Reusability. DAVID Malan: Reusability. Satt? Þú gætir hafa séð í p-sett sjö þegar að mikið af þeim síðum, sem kaupa síðu, sölu síðu, sem eigu síðu, eru líklega byggð nokkuð álíka. There 'a CS50 fjármál merki efst nema þú hafir ákveðið að breyta því. There 'a fót í því neðst á síðum. Og CSS gerir þú þá að þáttur það út það inn í sérstaka skrá þannig að ef þú vilt breyta einhverju á heimsvísu yfir alla síðuna þína, þú getur raunverulega bara breyta því á einum stað. En það er verðið sem þú greiðir hugsanlega með því að hafa reiknað út CSS HTML skrá mína í sérstakt skrá tilvísanir það með tag, sem við sáum á mánudag. Hvað gæti hæðir verið um þetta? Hugsun aftur fyrir viku síðan að þegar við erum tala um HTTP og TCP / IP og hvernig Netið virkar. Eitthvað hérna? Áhorfendur: Það tekur lengri tíma. DAVID Malan: Það tekur lengri tíma. Hvers vegna? Áhorfendur: [inaudible]. DAVID Malan: Já. Svo tekur það að öllum líkindum aðeins meiri tíma. Vegna þess að einn, CSS er augljóslega ekki í sama skrá. Svo nú þú ert að gera ekki einn, heldur tveir beiðnir. Og hver af þeim beiðnum sem við sáum í Króm í svokölluðu Inspector, og við leit á flipann Network, hvor af þeim skrám þarf einn HTTP Beiðni, sem við sáum tekur smá tíma. Nú, kannski er það ekki mikið. Kannski er það aðeins 20 millisekúndur. Kannski er það 200 millisekúndur. En hugsa um síðu eins og Facebook, eða CNN eða Google, sem eru mun stærri en dæmi sem við höfum horfði á svona langt. Þeim síðum gætu hafa heilmikið af skrá, sem hver um sig gæti þurft að niðurhal á skrá. Svo það geta hugsanlega byrja að hægja niður. Og sérstaklega þessa dagana þegar við allir hafa farsíma í vasa okkar og hægari Internet tengingar, þurfa að bíða í nokkrar fleiri millisekúndur, nokkrar fleiri millisekúndur fyrir viðbótar skrá geta raunverulega vera hægur. Leynd er orðið sem lýsir konar bíða að þú ert að þú upplifa þegar að bíða eftir sumir stykki af upplýsingar. En það er hækkun en lækkun. Svo það er ekki allt hálfgerður - það er í raun hluti af a seesaw hér. Galli nú, en hvað vafrar geta gert ef þeir eru klár til að forðast að þurfa að biðja um sömu styles.css skrá aftur getur verið að gera hvað? Skyndiminni það. Svo flýtiminni - C-A-C-H-E - yfirleitt er hér bara til að vista skrá sem þú baðst um í fyrsta skipti, og þá stöðva skyndiminni fyrir það. Athugaðu að þú ert konar geymsla gámur, og ef þú ert þegar með afrit af styles.css, jafnvel þótt einhver annar síðu í p-sett, eða allir website, óskar það aftur, bara til að gefa notandi sama afrit afrit. Nenni ekki að biðja hana. Hæðir þar, þó, eins og sum ykkar hafa skemmtiferðamaður yfir í p-setja. Ef þú gerir breytingar á þjóninum og þú ferð til baka í vafranum og þú endurhlaða, stundum virkar vafrinn þér greiða og ekki nennir aftur að sækja styles.css skrá vegna þess, að koma á, hvað eru líkurnar að þessi stíll sem Facebook notar eru að fara að breyta klukkutíma eða degi til dags? Það er nokkuð lágt. Þeir breytast með tímanum, en ekki við mínútu eða eftir klukkustund. Svo bragð, bara FYI hvenær aðgerð vefur þróun, er oft halda niðri Shift lyklinum til dæmis og þá smelltu endurhlaða í vafranum þínum, og það mun yfirleitt segja vafranum endurhlaða allt, jafnvel ef þú ert nú þegar það í skyndiminni. Svo aftur, upsides og downsides, en öll þeirra lokum hönnun ákvarðanir. Svo nú, við gerðum ekki bara enda söguna hér. Ef ég fer nú aftur og aftur og aftur og aftur, við byrjuðum að kynna ekki bara HTML, en PHP. Svo í skilmálum leikmaður er, hvað er PHP skulum við gera? Áhorfendur: [inaudible]. DAVID Malan: Hvað er það? Áhorfendur: Kynntu rökfræði inn kóðann. DAVID Malan: Já, kynna rökfræði í kóðann þinn. Svo það er satt forritunarmál með lykkjur, og breytur og aðgerðir og aðstæður, og allt það sem við höfum verið að nota leið til baka þegar síðan grunni. Og PHP, við höfum séð, er hægt að nota annaðhvort í stjórn lína - það þarf ekki að hafa neitt að gera með vefnum, jafnvel þó að það er virkilega uppruna þess og hvað það hefur tilhneigingu að vera góður í og ​​hvetur til - en þú getur notað PHP eingöngu eðli sínu af þeirri staðreynd að það hefur prentun () virka, og printf () virka, eða echo () virka. Það er bunches af lifnaðarhættir þú Hægt er að prenta texta með PHP. Því er hægt að nota þennan forritun tungumál til að framleiðsla nákvæmlega hvað við vorum að tala um áður. Þú getur dynamically mynda HTML. Kannski ekki minna en það. Kannski þú harður kóða hlutir, eins og haus og fæti, og lógó, og stíll lak þína, og allt það. En fyrir eitthvað eins p-sett sjö, þar sem þú ert að notfæra fiskistofna og sýna eigu notandans, sem er fara að breytist, þú gætir vafalaust nota PHP og rökfræði það gefur þú sem forritunarmálið til framleiðsla virk undirhópum á síðunni. Svo þegar þú talar um dynamic websites, eða vefur forritun, sem er hvað þú ert í raun að tala um. Using a tungumál eins og PHP, eða hlutum kallast Python eða Ruby eða Java, eða hefur enn öðrum tungumálum, að fyrirspurn gagnagrunn oft, eða annar framreiðslumaður, og þá breytilega spýta út HTML. Nú er niðurstaðan, sem innskot, er að HTML flestra vefsíður, þ.mt p-setja sjö þinn, er líklega fara til vera a gríðarstór sóðaskapur ef þú horfir á upptökum kóða í vafranum. Það er ekki stór samningur. Á þessum tímapunkti, þegar við vænt um stíl annt um efni sem þú skrifar. Við munum ekki sama um efni sem hvað númerið framleiðsla þinn. Svo ekki hafa áhyggjur óður í inndrátt hér ef það er PHP sem er reyndar outputting efni. Eftir allt saman, the flettitæki vilja ekki kæra, og manneskju muni ekki vera að leita við upptök samt. Við starfsfólk, til dæmis, myndi að horfa á PHP þinni. Svo láta mig gefa a fljótur dæmi nú af hverju annars þetta gæti verið gagnlegt. Svo að segja get ég ekki munað síðast skiptið sem ég notaði C til að leysa vandamál í the raunverulegur veröld. Það var líklega í framhaldsnám þegar Ég þurfti að nota tungumál sem var nokkuð lágt stig og gaf mér tækifæri til að gera eitthvað mjög hátt framkvæma til raunverulega spara eins og margir CPU hringrás og ég gat, í stórum hluta vegna þess að ég var að nota mikið gagnagrunna, og sérhver CPU hringrás telja. Og hreinskilnislega, jafnvel í hlutum eins og sími þessa dagana og önnur tæki þar sem þú ert ekki alveg eins mikið minni og þú þarft ekki alveg eins mikið CPU, nota hraðari tungumál er enn aðlaðandi. En í hinum raunverulega heimi, þegar þú bara vilja til að henda eitthvað forrit saman að greina nokkur gögn, eða þú hefur safnað allt fullt af skráningum fyrir sumir Nemendahópurinn og þú vilt mjög fljótt sjálfvirkan að senda tölvupóst eitt af öðru að hver og einn af þeim sem skráir, ætlar þú að fara til að ná til hærra stigi tungumál en C svo að segja. Eitthvað eins og PHP eða Python, eða Ruby, eða hálfa tylft aðrir sem eru fyrir hendi þessa dagana. En þeir þrír eru líklega mest töff núna. Og hvað þýðir þetta er að þú getur opnað upp texta ritil eins gedit eða mest allt annað og þá bara byrja skrifa kóðann án þess að þurfa að hafa áhyggjur um söfnun, án þess að þurfa að raunverulega hafa áhyggjur af stjórnun minni, hafðu í huga þó að lítið sloppiness mun að lokum koma aftur að bíta þig ef gögnum verður stærri eða vandamálið fær stór. En hvað þýðir þetta fyrir okkur er eftirfarandi. Láta mig fara á undan og keyra Speller frá Heimadæmi sex. Svo er þetta trie-undirstaða framkvæmd minn sem ég notaði á stóru borð þar sem ég söng ekki svo vel. Við munum koma aftur í tíma viku og endurskoðun þeir sem á endanum topp stór borð á síðasta fyrirlestri okkar. En nú, láttu mig fara á undan og bara hlaupa lausn mína í texta, og við munum gera King James Biblían, og hér við fara. Þannig að þeir eru allt í talið rangt stafsett orð af The King James Biblían. Og framkvæmd minn tók hálfa sekúndu í aðaleinkunn. Svo ekki of slæmt á þetta sérstakur tölva. En hugsa um hversu mikið númer sem ég þurfti að skrifa. Hugsa hversu mikið númerið sem þú þurfti að skrifa. Hugsaðu hversu margar klukkustundir þú varið í D-sal eða dorm eða hvar reyndar erfðaskrá upp þessi lausn. Jæja, ef ég hef reyndar meiri tungumál eins og PHP, taka mið af hvað ég get gert hér. Fyrst, gera ráð fyrir að þetta er í staðinn dreifingu númerið þitt. Þetta er skrá sem heitir Speller. Það er í boði sem hluti af dag dreifingu kóða. Og ég ætla að veifa hendinni á mér á flestum á smáatriði, en þetta er í raun áhugaverð dæmi um hvernig þú gætir höfn tungumál eins og C yfir til PHP. Ég opnaði bókstaflega tvær texti gluggakista, einn með C minn útgáfa af speller.c, og ég byrjaði bara að þýða það í mínum höfuð til PHP og slá það út með því að nota nánustu sambærileg verkefni. Svo sumir af þessum hlutum eru mismunandi. Við sáum síðasta skiptið sem PHP notar ekki fela í alveg sama hátt. Það notar venjulega þurfa, þó eru hefur til. Skilgreina er svolítið öðruvísi # Skilgreina í C, en það er hvernig við tökum fasti. $ Argc það reynist til í PHP, þannig að við höfum séð það áður. Þetta eru bara breytur, allar sem byrja með dollara merki. Muna að þetta eru bara fullt fljótandi stig. Svo löng saga stutt, þú ert velkominn að flettir gegnum þetta ef forvitinn, þetta er nánast línu-fyrir-línu ummyndun á C útgáfa af speller.c í PHP. Og þú getur gert þetta aftur fyrir hálfri tylft annarra tungumála. En hvað er áhugavert er þetta. Eða hvað er satt Svekkjandi er þetta. Láta mig fara á undan og slá um dictionary.php, og halda því fram að ég er að fara á undan og með tilvísun til-innleiða Heimadæmi sex hér. Svo skulum leggja fyrst að í þessu skrá, sem verður hrint í framkvæmd í PHP, svo látið mig opna tags mínar svona. Leyfðu mér að gefa mér alþjóðlegt breytu, $ stærð fær núll. Og ég ætla að gefa sjálfur kjötkássa borð. Ég nota kjötkássa borð fyrir þetta. Hvernig get ég lýsa kjötkássa borð í PHP? Lokið. OK. Svo opinn krappi nærri krappi táknar hvað í PHP, sem við höfum séð? An array, en fylki sem gæti vera tengin array. An tengin array er gögn uppbygging sem tengir lykla með gildum. Nú í einfaldasta tölulega verðtryggð array, eru þessir lyklar hvað? Núll, einn, tveir, þrír, satt? Gamla skólann efni aftur frá C. En það getur einnig vera strengi eins foo, og bar, eða Maxwell, eða allir svo band. Svo ég get skiptimynt sem á aðeins augnablik. Láta mig fara á undan og lýsa fall eins - skulum gera álag () fyrst. Svo virka hlaða (). Og PHP er svolítið öðruvísi í því þú slærð bókstaflega virka, en þú ekki skrifa aftur tegund. Ég ætla að fara á undan og segja að hlaða () fall ætti að taka í rök $ orðabók, bara eins og C útgáfa gerði. Ég ætla að gera það úr minni. Og ég leggja til að ég er að fara að gera þetta. Ég er einfaldlega að fara að gera framhandleggur. Ég ætla að hringja í aðgerð sem kallast skrá (), sem liggur í nafni sem skrá, sem er breytan $ Orðabók sem $ orði. Og þá inni í mín fyrir lykkju hérna, ég er að fara á undan og geyma í mínu $ Töflunni að $ orð fær satt. Lokið. Ó, bíddu. Lokið. OK. Það er álag () fall segja í PHP. Nú, hvers vegna er það að vinna? Og ég er svona að svindla hér. Svo, einn, framhandleggur við sáum stuttlega síðasta skipti. Það þýðir bara að þú getur iterate yfir fylki án þess að angra með i og n og plús plús og allt það. Orðabók er auðvitað the skrá nafn, eitthvað eins stór eða lítil, tveir orðabækur sem við notuðum síðasta sinn. Skrá er fall sem opnast texta skrá, les það í samræmi við línu, og hendur þér aftur a gríðarstór fylking, hver af hverra þætti er lína frá þessi skrá. Svo er að samsetning fopen, og fread, og á meðan lykkja, og fclose, og allt það. Að lokum, eins og orðið merkir bara það er breytu Ég ætla að hafa aðgang að á hverjum endurtekning í þessu lykkju. Svo í stuttu máli, þetta eitt Ferja hér þýðir opna skrána sem heitir í orðabók, breytu, iterate yfir það línu fyrir línu, og í hvert sinn sem þú færð lína, geymt í breytu sem heitir orð, og þá gera eitthvað með orði. Hvað vil ég að gera? Mig langar að setja orð í kjötkássa töflunni minni. Jæja, ég get sett eitthvað í mínum kjötkássa borð rétt eins og í C nota hornklofa. Þetta er nafn fyrir kjötkássa borð mitt. Ég ætla að skrá inn í þessi hash borð á þessum stað. Svo ekki krappi núlli, ekki krappi einn. Bracket vitna unquote eitthvað, hvað sem það orð er. Og rétt eins og þú gætir hafa í þinn kjötkássa borð vinna trie, geymt bara raun Boolean, óbeint eða óbeint. Lokið. Ég er að geyma verðmæti satt. Nú er það a par af hlutur Ég er að skera horn á hér. Tæknilega, það er að fara að vera pirrandi nýja línu, / n, í lok hvert þessara orða. Þannig að ég ætti sennilega að hringja í PHP virka kallað höggva (), sem mun alveg bókstaflega höggva það burt. Og ég þarf í raun og veru að gera einn annar hlutur. Ég ætti líklega að hækka stærð á hverjum endurtekning, svo ég ætla að halda utan heimsvísu um hvað það er. Og hreinskilnislega, og þetta er eitt af stupider þætti PHP, ef þú ert með alþjóðlegum breytu, þú þarft að beinlínis að segja að þú ert. Þannig að ég ætla að fara til raunverulega tegund í alþjóðlegum $ Stærð, alþjóðlegt $ borð, og nú virka minn er lokið. Svo ekki alveg eins einfalt eins og áður, en sennilega tók minni tíma en C útgáfa, kannski? OK. Svo nú skulum gera stöðva () virka. Við skulum sjá hvort þetta amk tók tímunum að það tók okkur í C. Svo láta mig fara á undan og lýsa athuga sem virka. Tekur í rifrildi orði, sem er fara að koma frá Speller. Og ég ætla bara að fara að athuga hvort Eftirfarandi breytilegum isset, borð krappi strtolower orðs - skulum jafnvægi alla sviga mínum - þá aftur að veruleika. Annað - sem var mjög harður hluti af þessari áætlun. Annars, return false. Lokið. Það er stöðva (). Nú, hvers vegna er þetta? Jæja, einn ég fór í orði, sem er band. Tveir, ég er að haka inni hökkun borð, sem heitir $ töflunni. Ég er að neyða það til lágstafir með því að hringja fall alveg líkur tolower () í C, en þetta er allt orðið, ekki einn stafur. Og ef það er sett, með öðrum orðum það er gildi stillt, með öðrum orðum, ef það er satt, þá já, þetta er orðið. Vegna þess að ég setti það þar með álag (). Og ef ekki, ég ætla að return false. Nú hinir eru auðvelt. Virka stærð (), hvernig geri ég þetta? Ég í raun aftur $ stærð. En ég þarf tæknilega að gera þetta pirrandi hlutur. Og reyndar upp heyra, ég var að klippa eitt horn of margir. Ég þarf virkilega að gera alþjóðlegt $ töflunni. En það að segja, afferma). Afferma () er ótrúlegt. Virka afferma (). Hvernig vil ég að innleiða afferma ()? Lokið. OK. Svo afferma (), minni stjórnun er alveg gætt af fyrir þig í eitthvað eins og PHP og margt af hærri stigi tungumálum. Þannig að þetta er alveg magnað. Eins hvers vegna í fjandanum gerði við eytt síðustu átta plús vikur á C skriflega virðist mjög hægt, raunverulega tími neyslu vandamál með tugum klukkustunda af vinna undir belti okkar? Jæja, fyrir eitt, þetta mega vinna fínt fyrir litlum forritum. Það greiddist vissulega upp minn þróun tími. En við skulum sjá hvað gerist í raunheimum. Leyfðu mér að fara inn í þessa möppu í flugstöðinni glugga. Það er Speller. Og taka eftir Sem innskot, og þú gætir hafa komið þessu í Heimadæmi sex eða Heimadæmi sjö. Þú ert ekki strangt verða að enda PHP skrá með. php. Ef þú setur línu svona fyrsta einn á the mjög toppur, sem er með sérstaka línu af setningafræði sem í raun þýðir að finna er forrit sem heitir PHP og nota það til að túlka þessa skrá. Svo nú enginn veit í raun að Ég er að keyra PHP forrit. Ég get keyrt það bara eins og það voru eitthvað saman í C. En hér er málið. Reyndar, við skulum gera þetta aftur. Dropbox/pset6 /. Það er Speller. OK, 0,44 sekúndur. Það varð hraðari í þetta sinn. Nú skulum fara inn í PHP útgáfu. Ágætur snerta. En bara hugsa hversu miklum tíma Ég spara á skrifstofutíma. OK. Svo 3,59 sekúndur, sem í raun hljómar ekki rétt heldur. En það er vegna langa sögu stutta, þegar þú ætlar að prenta út mikið magn af efni á skjánum, að sjálft hægir það niður. Hvað það tók virkilega á CPU í tæki var 3,59 sekúndur, í Öfugt við C, sem tók 0,44 sekúndur nýlega. Það er sannarlega röð Umfang öðruvísi. Svo hvar er það verð að koma frá? Hvers vegna er það svo miklu hægar? Hvers vegna virkar PHP framkvæma svo illa? Danielle? Áhorfendur: Þú varst í raun ekki nota kjötkássa borð. DAVID Malan: Ég gerði í raun ekki nota kjötkássa borð. Svo ég gerði svona. Svo er það tengin array. Líklegast ef að fólk á PHP eru virkilega klár, notað þau undir hlutanum Hood raunveruleg kjötkássa borð til framkvæmda í eitthvað eins og C eða C + +. En. Já. Áhorfendur: [inaudible]. DAVID Malan: Já. Svo að hver af þeim störfum sem ég skrifaði núna - Reyndar er hægt að segja að þegar meira lítill hávær? Áhorfendur: Hver af þeim aðgerðum sem þú fylgir hefur mikið meira fullur getu en - DAVID Malan: Svo er það mjög satt. There 'a einhver fjöldi fleiri kostnaður að við erum í raun ekki að sjá með því að einblína eingöngu á dictionary.php, sem ég skrifaði bara. Hins vegar er allt túlkur fara í bakgrunni. Reyndar, þegar ég hljóp þetta forrit, það var ekki hlaupandi saman núll og sjálfur hannað fyrir Intel CPU minn. Fremur, það var að keyra á milli lína PHP kóða sem lítur nákvæmlega eins og við slegið það. Og svo þegar þú notir túlkað tungumál, þú reyndar borga þetta verð. Það er að fara að taka nokkurn tíma til að lesa skrá Top til botn, vinstri til hægri, og þá framkvæma hvert lína aftur og aftur. Nú í raun, sérstaklega á vefnum, þú getur raunverulega flýta þessu ferli By Búrhvalur að niðurstöður PHP kóða sem túlka. Og það er vit á vefnum, vegna þess ef þú ert ekki einn notandi eins mig hér, en 1.000 eða 10.000 notendur, þá kannski í fyrsta skipti sem skrá er nálgast það er hægt, en eftir það það er miklu hraðar. En þetta líka, aftur, er að skipta út. Og fyrir eitthvað eins og rannsóknargögnum sett, eða jafnvel eitthvað stórt eins og þetta, notendur munu að lokum byrja að líða að hægagangur. Svo í stuttu máli, túlkað tungumál eru mjög mikið fyrst komist í tísku, mjög vinsæll, og hreinskilnislega eru sennilega þeim tungumálum sem þú ætti að ná til þegar leysa vandamál kjölfar CS50. En átta sig á hversu mikið þú ert virkilega taka sem sjálfsögðum hlut undir hetta fá þessa undanfarnar vikur í hash borðum, og tré, og reynir, sem eru notuð á endanum að raun framkvæma hluti eins og opna krappi, ferningur krappi, sem við getum nú þakklæti taka sem sjálfsögðum hlut. Þannig að við skulum taka a líta nú á þessari vefsíðu samhengi. Og ég nefndi síðast að það er fullt af superglobals í PHP sem eru í raun ekki máli í stjórn lína. Þeir eru meira máli í sambandi þess að nota PHP í a vefur samhengi. Svo keyra PHP á a vefur framreiðslumaður í röð til að búa til efni eins og HTML. Og við leit á $ _GET og $ _POST, og það er þar sjálfkrafa notendur ' inntak endar einfaldlega ef þú sendir inn mynda að skrá sem endar á. PHP á vefnum framreiðslumaður eins tækinu. En við skulum líta stuttlega á $ _COOKIE Og $ _SESSION. Í skilmálum leikmaður er, hvað er kex sem að skilja það í samhengi við nota vefinn? Áhorfendur: skrána á tölvunni. DAVID Malan: Já. Það er skrá á tölvu notandans gróðursett af hvaða vefsíðu þú verður að heimsækja. Svo þegar þú ferð á Facebook, þegar þú ferð til bankofamerica.com, þegar þú ferð á google.com, þegar þú ferð að nánast allir website í heiminum þessa dagana, þ.mt cs50.net, en kex er gróðursett á tölvunni þinni, sem er annaðhvort gildi sem eru geymdar í vinnsluminni í þinn tölva í minni vafrans þíns, eða stundum örugglega geymd á harða disknum þínum. Og hvað er yfirleitt geymd í þessi skrá er ekki notandanafnið þitt, ekki þinn lykilorð, yfirleitt ekki eitthvað næmur nema vefsíða er ekki svo góður með öryggi þeirra, heldur það er stór einstakt auðkenni meðal aðra hluti. Það er stór handahófi tala gróðursett á þinn tölva en þú getur hugsað sem konar raunverulegur hönd frímerki eins frá félag eða einhver skemmtigarður sem gerir starfsfólk, eigendur sem þjónustu, að muna hver þú ert. Þannig að ef stór handahófi tala er eins og 12345678, þó að það er augljóslega ekki of handahófi, hugsa um það sem er hönd stimpill að þegar þú heimsækir facebook.com í fyrsta skipti, þeir stimpla þessi númer á hendinni. Og þá vegna þess að þú talar HTTP, þú vera flettitæki, og vegna þess að Facebook augljóslega talar sama og vefur miðlara, siðareglur HTTP segir að hvenær sem þú heimsækir í kjölfarið facebook.com, hvort sem það er annað síðar, klukkutíma síðar, jafnvel næsta dag, svo lengi sem þú ert ekki beinlínis innskráður, sem í raun er eins og að þvo hendurnar. HTTP segir þú ættir að kynna þér hönd stimpill í hvert skipti sem þú aftur til að website. Hvað Facebook þá gerir er að þeir líta á þessi hönd stimpli og þeir segja, ó, 123456789. Ég veit ekki við fyrstu sýn að þessi er David Malan í Cambridge, Massachusetts, en þeir geta stöðva þeirra gagnagrunn og segja, ó, sá á sem tölva við gróðursett 123456789 er David Malan frá Cambridge, Massachusetts. Við skulum sýna að notandi þá uppsetningu hans síðu eða News hans Feed. En það er vandamál hér ef þetta er hvernig vefur virkar örugglega. Láta 'taka a líta á a fljótur dæmi. Við skulum fara í raun að segja facebook.com. En áður en við gátum farið þangað, láta mér að fara á undan og opna Króm Skoðunarmaður hérna. Láta mig líta á flipann Network. Og nú skulum fara á undan og slá í https://facebook.com. Og ég er að gera það þannig að við sjáum ekki allar þessar tilvísanir og úrgangs tíma í að leita í gegnum þá. Leyfðu mér högg koma inn í. Allt í lagi. Við sjáum allt fullt af beiðnum. Það kemur Facebook. There 'a heild búnt af skrá. Og hér, á minnast mínu Leynd síðasta sinn, sem er a einhver fjöldi af HTTP beiðnir. En sá fyrsti er líklega mest áhugavert. Svo skulum fletta niður hér, og Ég zoom í á sekúndu. Þetta er að fara að vera eins konar sóðaskapur, en við skulum sjá. Facebook er að senda okkur allt fullt af dóti. En hó, áhugavert. Þeir eru að gróðursetningu ekki einn, heldur fjórir hönd frímerki inná minni hendi hér. Set-Cookie, Set-cookie, setja-cookie, setja smáköku. Og það eru nokkrar aðgerðir hér. Öll þau nefna nokkur konar fyrningu. Og það lítur út eins og Facebook er vonast að muna eftir mér fyrr en 2015. Svo er það væntanlega sinn sem Ég verð að skrá þig út eða þeir bara sjálfkrafa gera ráð fyrir að ég er ekki aftur. Svo er það í raun ágætis tíma. Og það eru nokkrar aðrar hlutir að gerast hér. Þetta kex virðist vera með valdi eytt með því að segja að það rann út í 1970 áður smákökur lýði. Svo vafrinn er bara að fara að gera ráð fyrir OK, það er eins og þvo hendur stimpil. En nú þegar vafrinn minn gerir beiðni síðar - láta mig fara á undan og gera þetta aftur og endurhlaða. Nú láta mig fletta aftur til Top beiðni og fara niður hér, óska ​​haus. Taka þetta. Svo núna er ég undir ekki svar haus, en eftir það segir beiðni haus. Og taka eftir því að vafrinn minn sem hluta af beiðni hans eftir hitting endurhlaða hefur sendi amk eftirfarandi upplýsingar. Ekki sett-cookie, en kex. Þannig að þetta er lína, HTTP haus svo að tala, þar sem vafrinn minn er tegund um án þess að vita mína það hugboð hönd mín til skoðunar Facebook. Svo þessar smákökur má notað þá fyrir hvað? Að muna hver þú ert, eða muna hvernig margir sinnum þú hefur verið þar, eða virkilega eitthvað. Svo er hér counter.php. Og láta mig að súmma inn á letri. Og í hvert sinn sem ég endurhlaða þessa síðu, taka það er að muna hversu oft Ég hef verið þarna. Jæja, það er ekki allt sem áhrifamikill. Skulum bara loka þeim flipa, og nú skulum við fara aftur til http://localhost/counter.php. Ó, það er áhugavert. Það mundi samt, jafnvel þótt ég lokaði flipann. Og hreinskilnislega, ef ég loka vafranum ef til framkvæmda á réttan hátt, ég gæti enn man að þessi notandi er sem hann eða hún var í fyrsta sinn, og aðeins þegar ég fer inn í valmyndinni Króm ', sem hérna er hér, og fara að Sögu, og smelltu Hreinsa vefskoðunargögn, eins og sumir af þú mega hafa í fortíð, aðeins þá verður fótspor reyndar eyðingar vefnum þróun. Svo ef við förum - skulum nærmynd gedit hér. Og ef við förum nú í þessa skrá. Láta mig fara inn í okkar vhosts / localhost / almennings, og láta mig gera counter.php. Takið eftir að þetta er nokkuð einfalt forrit. Það er frekar einfalt website. Svo efst á skránni er bara athugasemdir. En hér er ný lína sem þú getur hafa séð þegar í p-sett sjö, session_start (). Þetta er lína af PHP kóða sem meginatriðum segir vefur framreiðslumaður, gera viss um að stimpla hendur og gera viss um að athuga hönd frímerki. Það er allt sem línan er, og það er öll þessi ferli fyrir okkur. Þá eftir ég hef bara tvær greinar hér. Ef gagn lykillinn inni af þessu sérstakt alþjóðlegt breytu sem heitir $ _SESSION Er stillt - með öðrum orðum, ef það er einhver gildi þar - skulum fá það og geyma það í sveitarstjórn breytu sem heitir $ gegn. Annað, við skulum úthluta $ counter sjálfgefið gildi 0.. Nú er hér einn þáttur í PHP sem er bæði blessun og bölvun. PHP er svolítið sloppy. Svo þar sem í C, hvað myndi Umfang counter hafa verið annaðhvort hér eða hér? Það hefði verið bundinn þeim hrokkið axlabönd. Giska á hvað? Í PHP, er það jafnvel utan þeirra hrokkið axlabönd, hér, og hér, og hér, og hér, og jafnvel niður fyrir. Svo ég segi að þetta sé blessun í þeim skilningi að þú þarft ekki að hugsa eins og harður eins og við gerðum vikum. En það er einnig hluti af formælingum í að Sama hvar þú notar breytu í PHP, amk í forriti eins og þetta, það er á heimsvísu aðgengilegt betri eða verri. Svo þú verður að hafa í huga nú að breytur má ekki óskilgreindur. Þú gætir hafa skilgreint þá annars staðar. En hvað er ég að fara að gera á endanum? Ég ætla að geyma inni að alþjóðlegum breytilegir eins og af en gegn slá niðurstöðu gera gegn auk 1. Svo er þetta bara reiknað sem gerir incrementation þess borðið. Og sú staðreynd að ég er að geyma það gildi aftur hérna þýðir að meginatriðum uppfæra gagnagrunninn til muna að notandinn 123456789 hefur verið hér tvisvar sinnum. Og þegar ég gera það aftur næst þegar ég endurhlaða síðunni, það er að fara að athuga hönd stimpilinn minn og segja, ó, notandi 123456789 hefur nú verið hér þrisvar sinnum. Og hvað með það PHP og svipuð tungumál eru að gera fyrir okkur er að þeir eru vangaveltur út hvernig og hvar og hve lengi til að geyma gildi í þessu sérstaka superglobal. Og þetta superglobal næst þegar ég heimsækja síðu er tegund af dularfullur fylltar, fyllt með gildum sem voru þar í síðasta skipti sem þú heimsótt, hvort það var annað síðan, viku síðan, eða árið 2013 og við erum nú að tala um 2015. PHP og vefur framreiðslumaður að gæta af öllum sem fyrir þig. Áhorfendur: [inaudible]. DAVID Malan: Breytur í PHP eru raun alltaf alþjóðlegt nema þú lýsa þeim inni í virka, og þá eru þeir staðbundið við fallið aðeins. En vegna þess að ég hef ekki skrifað eitthvað aðgerðir, eru þeir nú í raun heimsvísu um alla skrá mína hér. Áhorfendur: Er there a vegur að gera þá staðbundin? DAVID Malan: Er einhver leið til að gera þá staðbundin? Aðeins með umbúðir þá í aðgerðir. Sem í nýjustu útgáfu PHP, getur þú gert þetta með nafnlaus virka. En meira um það í samhengi JavaScript. En Stutta svarið er nei. Lengri svarið er já. Nice. Good Quiz spurning. Allt í lagi. Svo loksins, síðan sjálf er í raun frekar einfalt. Takið eftir að þegar ég loka PHP háttur, muna að allt þetta efni niður hér er bara að fara að fá spýta út hrár til the flettitæki. Sem er fínt, því ég vil að senda notandi sumir HTML, en ég vil við breytilega uppfæra þessi HTML. Og ein leið sem ég get gert þetta er að raða mjög fljótt falla aftur í PHP háttur, nota opinn Bracket spurningarmerki jafn merki, og þá framleiðsla gildið á borðið. Eða ef þetta lítur svolítið dulinn, þetta jafn skilti er í raun bara nokkur dæmi um setningarleg sykur fyrir þetta printf ($ gegn). En hreinskilnislega, það er bara smá ljót og smá pirrandi að slá. Svo PHP mjög vel upp þennan eiginleika þar sem þú getur bara segja það meira succinctly á sama hátt. Svo hvað er að gerast undir hetta? Skulum fljótt að líta á netið flipann hér fyrir counter.php. Og láta mig fara á undan og fyrsta skulum hreinsa fótspor. Skýr skulum vefskoðunargögn síðan upphaf tíma. Nú skulum fara aftur hérna. Nú skulum endurhlaða síðunni. Og ég er aftur á núlli. Vegna hönd stimpill minn hefur verið þvegið, Ég fæ nú nýtt kex. Reyndar ef ég horfi á the net flipann og líta á haus svar, taka að tækið er að senda mér kex er nafn hans nokkuð geðþótta, en svona sæmilega, PHPSESSID. Og það er að senda mér þetta virkilega stór handahófi númer. Það er ekki alveg a tala. Það er ekki alveg sextánskur. Það er einhvers konar tölu band, en væntanlega er það af handahófi. Og það er hönd frímerki svo að tala sem ég er að vísa til. Á sama tíma ef ég smellt endurhlaða og þá líta á þetta annarri línu fyrir seinni minn beiðni, taka nú að beiðni mína haus eru PHPSESSID jafngildir þetta, ekki sett kex, en bara kex. Og það er kynning vafranum míns af stimpil hönd mína. Svo nú sem beitu, og við munum tala meira um þetta í viku eða svo, en á hvaða hátt er þetta að gera þér viðkvæm, Facebook reikning þinn viðkvæm og aðrar slíkar reikninga varnarlaus? Áhorfendur: Ef einhver hefur kex þinn. DAVID Malan: Já, ef einhver hefur kex þinn. Ég meina sannarlega, mikið eins og sumir af þú gæti hafa reynt að eins félaginu eða tívolí, ef þú ert að reyna eitthvað svona að afrita stimpil, að vísu aftur á móti annars manns, og þá kynnir hann eða hún það sem eigin spýtur, ef það raunverulega hjartarskinn útlit eins, 123456789, þá vefur framreiðslumaður er greinilega bara að fara að treysta því að þessi notandi er þér. Og þetta er örugglega grundvallaratriði ógn hvenær þú notar fótspor því ef einhver spoofs bara svo til tala kex þína, tölur út hvað það er, annaðhvort með því sannarlega að afrita það með því að horfa á tölvuna og vera eins, OK. Kex Davíðs er JJ3JIK og svo framvegis, og þeir ert sviði nógur til vita hvernig á að raða í höndunum senda sem kex úr vafranum eða frá program þeir skrifa, gætu þeir algerlega skráir þig inn á vefsíðu sem þú. Það er ekki það erfitt að þykjast vera einhver annar nema við endurskoðun p-setja tveir, sem kynnt hvað? Áhorfendur: dulmál. DAVID Malan: Smá bita dulmál. Einföld dulmál, amk í Standard Edition, en dulritunarstjórneiningunni engu að síður. minna. Svo kemur í ljós ef þú dulkóða öll þessi haus með eitthvað sem þú gæti nú vita meira familiarly sem SSL, Secure Socket Layer, eða https:// vefslóðir, þá allt þetta sem við höfum verið glancing á eru í raun dulkóðuð, sem þýðir að það er eins og þú getur ekki lesið hönd stimpil. Aðeins facebook.com getur, eða google.com, eða í þessu tilfelli, the tæki geta lesa höndina stimpil. Tragically þó, og aftur, þetta er allt of rétt við NSA efni upp á síðkastið, jafnvel SSL er breakable. Og það er í raun ekki þessi harður til jafnvel sprunga þessi dulkóðun. Ekki svo mikið með sprunga the brengla, en með því að svikull vafra í Afkóðun gögnin snemma. En aftur, munum við stríða þér með það fyrir löngu. Fyrir nú, bara vera hræddur. Það er tragically konar satt. Allt í lagi. Svo, hvar er þetta nú yfirgefa okkur? Jæja, við skulum gera þetta. Við skulum fara á undan og taka a fljótur beitu áður en við að taka pásu. Og ég held að við munum sitja lengi aðeins lengur í dag, en við erum að fara að kafa í eitthvað glæný og kynþokkafullur, sem mun brýni lyst þína fyrir jafnvel fleiri. Svo að beitu. Svo SQL, við byrjuðum að tala um alltaf svo snöggt síðasta skipti. Þú munt í raun fá þinn snertið ekki óhrein með eitthvað af því í p-setja sjö. Og í skilmálum leikmaður er, hvað gerir SQL - S-Q-L - gert fyrir þig? Hvað er það? Já. Áhorfendur: skulum þér aðgang að gögnum. DAVID Malan: Já. Það skulum þú aðgang gögn í gagnagrunni. Structured Query Language. Og þetta er fyrst og fremst á forritunarmál. Það eru aðgerðir af því að við munum ekki einu sinni að nota í bekknum. En þú getur í raun skilgreina aðgerðir. Þeir eru kallaðir geymd aðferðir í SQL. En við munum halda það nokkuð einfalt og bara nota það fyrir nokkrum helstu aðgerðir eins og að velja gögn, setja gögn, uppfæra gögn og eyða gögnum. Og þú getur raunverulega hugsa af gagnagrunni, eins og SQL gagnagrunn, sem bara vera Microsoft Excel. Vegna þess að SQL er átt við a relational gagnasafn, þar Tengsl þýðir bara töflur. Línum og dálkum. Svo eitthvað sem þú getur sett í töflureikni svona eða Google Docs, þú gætir sett inn í SQL gagnagrunn með því að lýsa töflu. Nú, hvernig gera þú fá aðgang raun að upplýsingar? Jæja, með skipunum eða fyrirspurnir líkar þetta. SELECT, INSERT, UPDATE og DELETE. Og að mestu leyti eru þeir sem fjórir aðeins efni sem þú þarft til að gera eitthvað alveg öflug í vanda sett sjö. Nú aftur í dag, myndir þú raunverulega samskipti við gagnagrunn í svart og hvítt endastöðvar á blikkandi hvetja svona. Og gagnasafn sem við erum að keyra á tæki heitir MySQL, sem er frjáls og opinn uppspretta gagnasafn vél. Ef þú Google og lesa Wikipedia grein, munt þú vita að nafnið er smá umskipti fyrir suma útgáfur af Linux. Maria gagnagrunnur er í raun punga svo að tala um MySQL. Löng saga stutt, Oracle keypti MySQL. Véfrétt er stór fyrirtæki. Fólk hefur verið áhyggjur af því að það væri ekki lengur vera alveg eins og opinn uppspretta, svo er þetta bara afrit af MySQL sem er enn frjáls, enn opinn uppspretta, og sett í Fedora Linux sjálfgefið. En þetta er góður af a sársauki í háls til að kynnast á gagnasafn með þessum hætti. Þannig að við eru í CS50 tæki frjáls opinn uppspretta tól gestur phpMyAdmin. Bara tilviljun að það er skrifað í PHP. Það er enginn grundvallarmunur þörf fyrir PHP hér. En þetta er bara a vefur-undirstaða tól sem Við niður fyrir frjáls, sett upp í tækið, sem gerir okkur kleift að hafa grafísku notendaviðmóti sem að kanna p-setja sjö gagnagrunni með sem að búa til nýja gagnagrunna, segja fyrir eigin endanlega verkefnið ef þú vilt eins og, og að lokum að búa til dynamic vefsíður eins CS50 Fjármál sem leyfa þér að fyrirspurn gögn og uppfæra gögn virk. Þú ert ekki að fara að hafa til að nota bara einfalt textaskrá eða CSV. Þú getur í raun nota sviði gagnagrunn program þannig að þú getur keyrt meira háþróuð fyrirspurnir en bara að lesa gegnum allt línulega. Svo til dæmis, þetta er það sem við gefum þú út af the kassi fyrir p-setja sjö. This er borð með greinilega að minnsta kosti þrír dálkar, einn sem er notandanafn, einn sem er kjötkássa, og hinn af, sem er ID. En áhugaverður hlutur, og bara til að stríða út einn hugsun hér, notandanafn er væntanlega þegar einstök, ekki satt? Ég meina flest allir website, ef þú hafa notendanafn, þar getur ekki verið tvær Caesars. Það getur ekki verið tvær malans. Það getur ekki verið tvær jharvards. Einstaka þess. Annars, gera þeir vita ekki hver jharvard það er í raun. Svo það gæti verið hvatning fyrir líka having þriðja dálkurinn til vinstri það heitir ID, sem lítur út eins og tala sem er álíka einstakt? Mér finnst smá óþarfi til mig við fyrstu sýn. Af hverju gæti það verið sannfærandi að hafa ekki aðeins einstök notendanöfn, en einnig einstakt númer? Áhorfendur: Þeir gætu hafa Sama lykilorð. DAVID Malan: Fólk gæti hafa Sama lykilorð, viss. Það gæti alveg gerst. En ef þeir hafa þetta einstakt notandanafn, ég myndi halda því fram að það skiptir ekki mál, vegna þess að ef þeir slá í þeirra username, ég þarf aðeins að athuga þeirra lykilorð, kjötkássa þeirra stað. Hvers vegna í ósköpunum? Áhorfendur: Festa leita. DAVID Malan: Festa leita. Hvers vegna? Áhorfendur: ID er bara einn. DAVID Malan: ID er bara einn staf, eða til að vera nákvæmari, það er númer, svo það er sennilega 32 bitar eða eitthvað svoleiðis. En username, virðist Jason Upp Hirschhorn er það er tegund af hlægilegur langur, og það er að fara að taka mér mikið meiri tíma til band bera saman H-I-R-S-C-H-H-O-R-N, og ef til vill A / 0 eða eitthvað af því að til að líta upp Jason, í stað þess bara segja gefa mér notandi númer tvö. Það er 32 bita. Það er einn INT sem þú ert að bera saman. Og reyndar, það er einmitt hvers vegna gagnagrunnar hafa tilhneigingu til að tengja einstaka auðkenni til að raðir í þeim. Nú hvað aðrar tegundir gagna eru auk INT og virðist strengir svona? Jæja, til að vera meira viðeigandi, SQL gagnagrunna, eins og MySQL, hafa bleikju sviðum. Og char smá villandi er ekki einn char. A char sviði í MySQL gagnagrunninum er einn eða fleiri stafir, en það er föst tala af stöfum. Svo til dæmis, ef ég fer yfir til phpMyAdmin sem þú kannt að hafa þegar, eða brátt mun vandamál setja sjö, og ég fer að gagnagrunninum mínum, og bara til gamans, skulum búa til nýja töflu sem heitir prófa með aðeins tveimur dálkum. Ég smelltu fara. Og þetta mun verða nokkuð kunnugleg, sérstaklega þar sem þú tinker um á eigin spýtur. Hér gæti ég Auðkenni til að búa a nýr borð int. En hér er ég kannski slá notandanafnið til endurskapa að fyrr borð. Og eftir ég hafa a heild búnt tegundir til að velja úr. Og þetta líka er ástæðan phpMyAdmin er bara gott. Það er góður af sjálf-kennslu í því að þú getur bara svona benda og smella, og líta á listanum valmyndir, og álykta af það hvaða völd SQL gefur þér. Og reyndar, ef ég valið char, ég þá verður að tilgreina lengd, eða hvernig mörg gildi, hversu mörg tákn. Svo mjög algeng gildi eru hlutir eins og 255, en það er svolítið langt. Almennt er átta um notandanafn. En það er svolítið lítill þessa dagana. Þannig að þetta er hönnun ákvörðun. Er það 8 stafir max, 32, 255, 1000? Það er í raun komið að þér. En char reitur er föst tala. Svo velja of fáir og þú ert góður af ruglaður ef þú vilt lengri notandanafn. Velja of margir og hvað er hæðir? Áhorfendur: [inaudible]. DAVID Malan: Það er eyðslusamur. Rétt eins og í C, ef þú ert með stærri klumpur af minni en þú þarft, þú ert bara að sóa tíma og eyðileggjandi pláss. Svo sem val, þar til VARCHAR, sem leysir þetta vandamál með því að meðhöndla lengd ekki sem fasta lengd, en eins og hámarkslengd, og nota breytilegum fjölda af stafir, sem síðan hefur tilhneigingu til að nota aðeins eins mörg stafir eins og þú raunverulega þörf. Það hljómar fullkominn. Hvers vegna eigum við ekki að losna við Bleikju gögn gerð þá? Hvað gæti verið ókostur við nota VARCHARs, sem hljómar eins og það er ágætur vinna? Já? Áhorfendur: [inaudible]. DAVID Malan: OK, gott. Þannig að ef öll gögn er það sama lengd, hvað er áhyggjuefni? Áhorfendur: Þar sem þú ert að sóa gögn með því að segja þeim öllum. DAVID Malan: Svo ef öll gögn er sömu lengd, þó, myndi ég halda því fram að tilgreina hámarkslengd á varchar er ekkert öðruvísi tilgreina fasta lengd á char ef þú veist að tala fyrirfram. En það er örugglega, og ég mun svoleiðis þykkni frá því svari að veruleika að það er enn max, sem gæti verið pirrandi, sérstaklega ef þú fundur nafn einstaklings sem er óvenju lengi sem þú hefur ekki ráð. Og það er líka aðeins minna duglegur að í raun að leita á VARCHARs sem öfugt við leita stafir, einkum fyrir langa töflur sem hafa hellingur og hellingur af gögnum. Svo hér líka, áherslusviða er aftur engin augljós kostur. Svo bara til að gefa þér tilfinningu um annað gögn tegundir sem gæti haft áhuga á hvort sem er til p-setja sjö eða í framtíðin, það er INT. Það er BIGINT, sem er eins lengi lengi. Það hefur tilhneigingu til að vera 64 bita. Það er aukastafa, sem þú munt sjá í vandamálið sett, sem er mun hreinni svar við þeim vandamálum sem við fundur með fljóta og fljótandi benda imprecision. Og þá er það DATETIME. Það er bókstaflega a gögn tegund sem hefur að líta út eins og ár, mánuð, dag, og klukkutíma, mínútu, og sekúndu. En SQL gagnagrunna hafa einnig hlutir sem við munum kalla stuðla. Og vísitala er eitthvað sem þú tilgreina hvenær kreatín the borð til gera leit og aðrar aðgerðir skilvirkari. Sérstaklega, það er eitthvað sem kallast Aðal vísitölu sem þú gætir lýsa á eftirfarandi hátt. Við gerðum þetta fyrir þig með því notandi borð við gefum þér. En taka ef ég væri með höndunum skemmtun notenda töflu hér að gefa það nafn notenda. Ég er þegar ID. Ég tilgreint INT. Ég tilgreint notendanafn með hámark 32 stafir. En ef við höldum hreyfast í þessu nokkuð breiður glugga, eftir því að það er fullt af öðrum hlutum sem ég get tilgreinir. Einn, ég get tilgreina eiginleika eins, þú veist hvað þetta INT ætti að vera óundirritaður. Ég vil ekki neikvæðar tölur, þannig að við skulum gera það án undirritunar. Null er ekki viðeigandi hér vegna Ég vil öllum notendum að hafa einstakt númer. Ég vil ekki það að vera núll. En þetta er áhugavert. Ég get tilgreina að ID er annaðhvort aðal lykill af þessum gagnagrunni, eða það er einstakt, eða það er verðtryggð, eða fullum texta. Svo fyrir tilgangi í dag, löng saga stutt, PRIMARY þýðir að það skuli vera bæði hugmyndalega og tæknilega svæðið sem við notum til að einstaklega bera kennsl á notendur. Svo þegar við horfum upp notendur, þetta er tegund af loforð um að líta þær upp að mestu af sem einstakt auðkenni. Og gagnasafn mun tryggja að ef þú hafa a notandi númer 3, þú getur ekki líkamlega setja annan notanda með sama númer 3. Gagnagrunnurinn mun bara neita til að vista breytingarnar. Sem er gott, því þú getur vernda sjálfur frá þér. sjálf Val, fyrir notandanafn. Svo seinni röðinni, muna, er notendanafnið sviði. Svo seinni röðin hér er notendanafnið, eins og við gerðum á lengst til vinstri þar. Svo hvað gæti ég vil að tilgreina? Ég er ekki leyft samkvæmt SQL, að tilgreina tvo aðal lykla. hægt að tilgreina sameiginlega takka þar sem þú líta á báðum sviðum, en þeir geta ekki sig vera aðal lykla. Svo er það út af spurningunni. Svo hver gæti ég vil velja? Jæja, UNIQUE er svipað í anda upp á aðal lykill þar sem þú tilgreinir þetta sviði skal vera einstakt, en það er ekki að fara að vera einn Ég nota allan tímann. Og við erum ekki að fara að nota þessa einu allur tími til hvers aftur? Það er hægara hugsanlega ef það er langur notandanafn. Það er bara tímasóun. INDEX, á meðan, tilgreinir að það er ekki að fara að vera einstakt, en ég vil þig að vinna galdur undir hlutanum hetta til að gera það hraðar fyrir mig að leita á þessu sviði. Þannig að þetta er sennilega ekki viðeigandi hér. Fyrir username, myndi ég halda því fram að UNIQUE er gott svar. En geri ráð fyrir að við gert notendum meira áhugavert en bara notendanöfn, kjötkássa, og kennitölur. Hvað ef við gaf fólki fullt nafn? Hvað ef við gaf þeim heimilisföng og önnur gögn um þá? Jæja, ef þú tilgreinir að dálkur í Gagnagrunnurinn er verðtryggð, sem þýðir að MySQL, eða Oracle, eða hvað gagnagrunn þú ert að nota, ætti að vinna galdur hennar og nota einhvers konar ímynda gögn uppbyggingu eins og tré, eða trie, eða A kjötkássa borð, eða eitthvað til að tryggja að þegar þú að leita að gögnum með velja á þessi ákveðnu sviði - eins sýna mér alla sem býr á Oxford Street. A fyrirspurn svona. Ef þú hefur tilgreint fyrirfram að þú vilt nota vísitölu á því sviði, sem leit verður miklu, miklu hraðar. Ef þú tilgreinir ekki vísitölu, besta þú getur gert er línuleg leit ef það er ekki flokkað. En ef þú tilgreinir vísitölu, the sviði fólk sem gerði gagnagrunninn - fólk eins og þú sem nú vita tré og reynir og kjötkássa matskeið - sjálfkrafa byggja slíka gögn uppbygging í vinnsluminni til að tryggja að þeim sem leitar er mun hraðvirkari. Fulltext meðan er svipað í anda, en gerir þér kleift að gera algildisstaf leit, eins og sýna mér alla sem býr á götum sem byrja á bréf O einhverri ástæðu. Þú getur gert algildisstaf leit svona. Eða, meira sannfærandi hluti eins sýningu mig allir sem hafa orðið - sýna mér alla hét byrjar með sérstakri staf. Hægt er að leita að leitarorðum á þennan hátt. Allt í lagi. Svo, hönnun tækifæri það hugsanlega. Það eru aðrir sem ég ætla veifa höndum mínum á. Það kemur í ljós að þú getur haft mismunandi geymsla vél. Og þetta er meira Bogagöng en við þurfum vissulega fyrir Heimadæmi sjö. Sjálfgefið, eruð þið að nota eitthvað sem kallast InnoDB. Þú munt sjá minnst á þetta einhvers staðar í tengi phpMyAdmin er líklegast. En veit að það eru önnur hönnun ákvarðanir sem eru um hugsanlega vextir koma lokaverkefni ef þú gerir eitthvað vefur-undirstaða. En við skulum gera þetta. Við skulum fara á undan og setja þetta á skjár sem beitu fyrir sögu felur þig, herbergisfélaga, og glas af mjólk. Skulum taka tvö mínútu eða svo brjótast hér. Og ef þú getur kyrr, við skulum koma aftur, líta aðeins meira í SQL, og þá hluti af JavaScript og p-setja átta í huga. Allt í lagi. Svo skulum við fá þig til að hugsa um að horn mál sem getur mjög auðveldlega komið upp í tengslum við að nota gagnagrunn, eða hreinskilnislega, jafnvel með raunverulega hluti heimsins eins og hraðbankar að fá peninga. Svo hér er ísskápur. Segjum að þú hafir fengið einn of í dorm eða húsið þitt. Og þú hefur fengið einn herbergisfélagi og báðar þú vilt virkilega mjólk til dæmis. Svo þú kemur heim úr bekknum í einn dag. Hann eða hún er ekki enn aftur. Þú opnar ísskápinn. Þú vilt virkilega stórt glas af mjólk. Það er engin mjólk. Og hvað gerir þú? Þú lokar ísskápinn. Þú grípa lyklana. Þú ferð út að torginu. Og þú færð í samræmi við CVS hjá þeim sjálf stöðva atriði, sem alltaf tekið lengri tíma en raun hafa Cashiers. Einhvern veginn. Svo, á meðan, punktur punktur punktur, þinn herbergisfélagi kemur heim og hann eða hún álíka hefur hankering fyrir mjólk. Svo hann eða hún opnar ísskápinn, lítur inni, og ó, fjandinn. Engin mjólk. Svo hann eða hún höfuð út, gerist til að fara að hinn CVS, sem var aðeins húsaröð burt af einhverjum ástæðum, og hann eða hún fær í línu til að kaupa mjólk. Á meðan, kemur þú heim, hann eða hún kemur heim, og hvað gera þú þarft að lokum? Tvisvar sinnum eins mikið mjólk. En þú í raun ekki eins og mjólk það mikið. Svo nú þú ert svo mikla mjólk að nú einn af þeim er bara að fara að fara súr endanum. Þannig að þetta er mjög slæmt vandamál. Ekki satt? Svo hvað hefur gerst? Svo í grundvallaratriðum, þetta er góður af fáránlega dæmi. En undir hetta, hvað við höfum haft gerast hér er bæði þig köflóttur ástand suma stykki af minni, kæli. Bæði þig köflóttur ástand af einhverju breyta. Þú bæði dró niðurstöðu sem þið lékuð þá á. En því miður, en herbergisfélagi þinn var í búð, ástand sem breytu breytt, hann eða hún kom til baka og nú vill breyta stöðu, en það er þegar verið breytt á honum eða henni. Og auðvitað, hann eða hún myndi ekki hafa farið út í búð ef þeir vissu sem þú varst nú þegar á leiðinni. Svo í hinum raunverulega heimi, hvernig gastu forðast þetta vandamál, hrokafullur þú hafa ísskápur, þú hafa a herbergisfélaga, og þú vilt í raun mjólk? Áhorfendur: Samskipti. DAVID Malan: Samskipti. OK. En hvernig getur þú tjáð? Áhorfendur: Skildu eftir miða. DAVID Malan: Skildu eftir miða, ekki satt? Fara alltaf í huga, að aðdáendur af sýningunni. Allt í lagi, svo alltaf eftir minnismiða, eða setja sannarlega eins og hengilás eða eitthvað á kæli sem heldur þinn herbergisfélagi frá eftirlitsmaður stöðu sem breytu. Nú, hvers vegna gæti þetta verið germane til Heimadæmi sjö eða að hraðbankar. Jæja, ímynda sér heiminn í hraðbanka þar þú might vera fær til að fara upp á hraðbanka vél hér, og annar ATM hér. Og þetta gerist nokkuð oft. Og geri ráð fyrir að þú átti tvo hraðbanka kort, sem er hægt að fá. Og þú skráir þig inn í báðum vélum í raun samtímis, vonandi á meðan enginn er að leita. Og þá þú slærð inn PIN u.þ.b. á sama tíma. Og þá þú gera a jafnvægi fyrirspurn að sjá hversu mikið fé þú hefur. Og við skulum segja að þú hefur 100 $ eftir í reikningi þínum. Svo í raun samtímis, þú segja einn, núll, núll, slá. Og þú færð vonandi aftur peninga. En hversu mikið fé þú might fá til baka? Nú tölvur í lok dagsins, sérstaklega ef þeir eru að tala við netþjónum, ekki endilega að gera hlutina í þeirri röð sem er gert ráð fyrir. Svo gera ráð fyrir því sem gerist, vegna þess að hvað net hraði málum þar eru, eða CPU mál eru, eða eitthvað svoleiðis, ætla að Fyrsta ATM tékka jafnvægið og sér, ó, þessi manneskja hefur 100 $. En þá fær annars hugar því kannski afrit er að gerast og svo er það hægja niður. Eða kannski á meðan að haka, netið tengingu fékk svolítið hægar vegna þetta gerist bara. Þeir eru líkamlegt tæki. Svo á meðan, annað ATM er spyrja sömu spurningu. Hversu mikið fé er Davíð með? 100 $ er svarið. En vegna þess að fyrstu ATM hefur ekki enn sendi skilaboðin draga $ 100, bæði Hraðbankar hafa skoðað gröfina bankans, sjá að það er $ 100 þar, og nú báðir vél hugsanlega eru fara að spýta út svarið. Nú, þetta er frábært fyrir þig í einhverjum skilningi ef það sem bankinn gerir að lokum er að breyta upphæð til mínus 100 með setja breytu jöfn þinn banki reikningur jafnt og 0, öfugt að gera mínus 100.. Nú í versta tilfelli fyrir bankann - eða í besta bankanum, á meðan, þeir gefa þér $ 200, og bankareikning þinn sýnir nú neikvæður $ 100, sem er í raun ekki gagnast þér yfirleitt. En punkturinn er að þetta mót Skilyrði fyrir tvo herbergisfélaga fá mjólk, eða fyrir tveimur hraðbankar að reyna að fá peninga og breyta stöðu gröfina á sama tíma eru til staðar allir þegar þú ert með gagnagrunni. Nú í Heimadæmi sjö, þetta mál myndast í þeim skilningi að ef þú kaupir Hlutdeild Facebook lager, og þá fyrir dæmi þú kaupa annan hlut Facebook birgðir, þú þarft að gera ákvörðun sem forritari. Í því skyni að ákveða hvernig á að uppfæra gagnasafn, líkur ert þú ert að fara að hafa eina röð fyrir þeim stofni, og þetta er ein leið til að framkvæma það. Og þú ert að fara að hafa einn hlut FB, sem er auðkenni fyrir verðbréf þeirra fyrir þetta notandanafn, eða þennan notanda ID, Auðkenni. En sama sagan getur gerst hér. Ef þú gera a velja í SQL, eins og þú munt sjá í Heimadæmi sjö þegar þú sérð, ó, David hefur einn hlut af Facebook lager. Láta mig breyta nú þetta að vera tveir hlutir, vegna þess að hann vill kaupa Seinni hlut. En geri ráð fyrir Davíð í raun átti tvo vafragluggum opna, eða gera ráð fyrir að það er sameiginlegt reikningur með tveimur mökum, og þau bæði eru að reyna að framkvæma sama aðgerð, þar líka, hugsanlegt að ákvörðun um að vera gerðar byggðar á fyrri ástand í heiminum - reikningurinn hefur einn hlut - og bæði fólk, eða bæði netþjóna, nú reyna að segja hækka það til tveggja hluta. En í þessu tilfelli, þú might hafa innheimt mig peninga fyrir bæði hlutabréf, en hækkar bara að eitt sinn. Svo í stuttu máli, grundvallaratriði vandamál hér, eins og með brandari um að fara á athugið, eða setja hengilás á það, er ef tvær manneskjur, eða tveir þræðir - hugsa til baka að klóra - getur athugað stöðu einhverju breyta og þá reyna að breyta þá breytu, en þessir tveir hlutir gerist ekki á sama tíma en getur orðið rofin af öðrum hlutum að gerast, geta gögn komast í mjög undarlegt ástand. Og þú getur notið góðs eða þú getur þjást í skilningi peninga dæmi. Svo í Heimadæmi sjö, gefa við þig þetta ein lína af kóða, sem lengi saga stutt, leysa þetta vandamál í MySQL. Þetta mjög lengi kennsla sem ekki jafnvel passa á eina línan á skjár hér tryggir að þinn gangur er það er kallað lotukerfinu. Það gerist allt í einu, eða það gerist ekki á öllum. Þetta mjög lengi setningu geta ekki fá hlé hluta. Og hvað það gerir er bókstaflega hvað það segir. Settu inn einhvern töflunni eftirfarandi þremur sviðum þá sem sérstaka gildi, en á afrit lykill, ekki gera að setja inn. Gera uppfærslu. Svo er þetta eins og að gera a velja og Setja svo að segja á sama tíma. Og hvað er lykillinn sem er líklega var vísað til hér? Það kemur í ljós, og þú munt sjá þetta í Heimadæmi sérstakur sjö, vegna við höfum lýst það að vera ótvíræða á þessari tilteknu töflu þannig að þú getur ekki haft margar raðir fyrir sama notandi með Sama eyri birgðir tákn - í þessu dæmi hér, DVN.V er kjánalegt eyri birgðir að við vísa til í sérstakur. Vegna þess að við höfum lýst yfir að það að vera einstakt, hvað þetta þýðir er að ef þú reyna að setja inn afrit röð, þú ert staðinn að fara að uppfæra hana án einhver annar að hafa tækifæri til að breyta the ástand af the veröld heldur. Svo í stuttu máli, þetta tryggir hlutirnir eru lotukerfinu. Almennt þó, gagnagrunna eins og MySQL - og þú þarft ekki þennan möguleika fyrir p-setja sjö, en hafðu það í huga að framtíðina - styðja það sem kallast viðskipti, þar sem þú getur sagt START Viðskiptakostnaður bókstaflega. Þú getur þá framkvæma tveir SQL staðhæfing. Og SQL staðhæfing, eins og þú munt sjá í p-setja sjö, lítur svolítið eitthvað eins og this. Uppfæra töflunni nefnist reikning. Setja Dálkurinn jöfn hvað Dálkurinn nú er mínus 1000 þar sem númerið númer reiknings, eins þess að kenni, jafnt og 2, og síðan uppfæra reikningur punktur punktur punktur. Svo í skilmálum leikmaður er, hvað gera þessir tveir fyrirspurnir virðast vera að gera í raunverulega heimi tilfinningu bankastarfsemi? Áhorfendur: Flytja til sparnaðar. DAVID Malan: Einmitt. Flytja fé frá einum til annara. Og þetta er annað dæmi þar sem þú raunverulega vilja þessir tveir hlutir að gerast eða ekki gerast. Þú vilt ekki eitthvað til að fá í miðju þeirra og hugsanlega skipta upp stærðfræði, eða sóða hversu mikið fé sem þú hefur, eða hversu mikið peningar sem bankinn hefur. Svo er það virkilega gott um viðskipti í MySQL er þessi, og gagnagrunna almennt, er að þeir og snjallt fólk sem hefur innleitt Þessir eiginleikar reikna út hvernig á að gera viss um að báðir þessir hlutir gerast eða alls ekki. Og ef þú ert virkilega að aspirín að gera A website þessi er notuð af fólki á Campus, fólk í hinum raunverulega heimi, að gera eitthvað í ræsingu skilningi, Þetta eru tegundir af hönnun ákvarðanir sem verða alltaf svo mikilvægt. Annars, byrja þú að missa gögn, missa notendur, eða í versta tilfelli sem við höfum séð hér, hugsanlega tapa peningum. Svo aftur, meira um það í Heimadæmi sjö, sem og ef til vill fyrir suma af þú í lokaverkefnum. Svo skulum breyta þessi mynd sem við höfðum í smá stund síðan bara í einn vegur. Svo láta mig sjá í raun ef ég get - Nei, það er farið. Það er það. Svo þetta er þar við fórum síðast. Og það kemur í ljós að við erum að fara að henda eitt í viðbót til að blanda hér - tungumál sem heitir JavaScript. Svo JavaScript passar í raun inn í þetta stykki - og ég vissi ekki alveg fara nóg pláss, þannig að þetta er nú ekki að skala. OK, þetta er virkilega sorglegt. OK, svo er það JavaScript. Allt í lagi. Ég er í raun að gera það disservice. Allt í lagi. Svo er JavaScript annað forritun tungumál, og síðast okkar, ef það hjálpar fullvissa um að það er ekki mikið meira af brunahana hér. Svo er einnig JavaScript túlka tungumál, sem þýðir að þú ert ekki þýða það inn núllum og sjálfur. Þú keyrir bara það. En hvað er í grundvallaratriðum öðruvísi með JavaScript yfirleitt er að þú ekki keyra það á vefþjóninum þínum. Það skiptir ekki fá að keyra í tæki í sjálfu sér. Frekar, það verður sótt af notanda gegnum HTTP inn í vafrann sinn - Króm, Safari, Internet Explorer, Firefox, hvað - og það er vafrinn sem keyrir þetta einkum forritunarmál. Svo til að vera skýr, PHP svona langt hefur verið ýmist framkvæmd á the stjórn lína í svart og hvítt glugga okkar, á netþjóni eins og tæki, tölvu eins og tæki, eða það hefur verið keyrð af vefþjóni gangi á tölvunni. En þemað hér er að PHP svona langt hefur verið framkvæmd framreiðslumaður-hlið, svo notandinn og vafra notandans aldrei sér línu af PHP kóða. Í staðreynd, ef þú opnar alltaf vafranum til vefsvæði þitt eða annars og þú raunverulega sjá PHP kóðann í glugganum þínum, einhver hefur ruglaður upp. Því það er ekki ætlað að vera send til vafra beint. Það er ætlast til að framkvæma og sneru í eitthvað eins og HTML. En JavaScript er í raun hið gagnstæða. Það er ætlað að vera að keyra venjulega inni af vafranum notanda. Og hvers konar vefsíður nota JavaScript þá þessa dagana? Eins bókstaflega hvert vinsæll website. Sérhver viðbót sem þið sennilega nota daglega nota JavaScript til að Einfaldasta og jafnvel kynjamisrétti lögun. Svo eitthvað eins og Facebook Spjallaðu ef þú notar það. Hvernig virkar þessi raunverulega vinna? Jæja svona langt, öll efni sem við höfum gert með HTML og PHP gert ráð fyrir að þú draga upp slóðina, og þú ýta á Enter, og þú sérð einhver HTML efni. Og þú smellir á tengilinn, sem breytir URL, breytingar á síðunni, og endurhleður sumir nýr efni. Smelltu aðra vefslóð eða senda inn mynd, þú fá whisked á aðra síðu og þú sjá nokkrar nýjar efni. En að nota eitthvað eins og Facebook Chat, eða Gchat eða Google Maps, sjaldan er alla síðuna hressa þannig að þú sérð hvítur skjár augnablik og þá nýtt efni. Frekar, eru vefsíður í dag virk getting uppfærður aftur og aftur og aftur allur tegund á bak við tjöldin. Og það kemur í ljós að þegar þú ferð að eitthvað eins og Facebook, eða Gchat, eða Gmail, og síðan uppfærslur sjálfkrafa án þess að endurhlaða heild skjár, hvað hefur gerst er að Vafrinn þinn hefur gert svoleiðis leynilega fleiri HTTP beiðnir - ekki fyrir heilum vefsíðum, en bara fyrir litla klumpur af gögnum, eins spjallskilaboð sem vinur þinn bara sendi þér, eða stöðuuppfærslu sem einhver sendi bara þú, eða kvak að einhver send bara. Það er bara að gera smá beiðnir um gögn, og nota JavaScript, þetta forritunarmál, að breyta því sem vefsíðan lítur út eins án miðlara hjálpa, án þess að miðlara búa að HTML. Svo í stuttu máli, getur JavaScript að nota þá að ekki aðeins ná nýjum gögnum frá miðlara án þess að endurhlaða heild síðu eða senda inn mynd. Það er einnig hægt að nota til að breyta svokölluð DOM - skjal mótmæla líkan - sem er bara fínt leið fyrir segja tré HTML sem við sáum síðast. Svo að fullvissa, JavaScript er setningafræðilega svo svipað og C og vel. Það er ekki helsta hlutverk. Þú byrjar bara að skrifa kóðann og það mun fá fram, eða túlka fleiri almennilega. Aðstæður mun líta svona út. Ekkert annað C eða PHP fyrir þessi mál. Boolean tjáning eða-ed saman mun líta svona út. Anded saman líta svona út. Rofar mun líta svona út. Fyrir lykkjur mun líta svona út. Þó lykkjur mun líta svona út. Gera á meðan lykkjur mun líta svona út. Þetta er nýtt. Svo hefur JavaScript ekki a framhandleggur reisa í sjálfu sér, en þetta smíða fyrir i breytu í array, og ég í þessu Málið verður vísitalan. Svo það er lítið annað að framhandleggur, þótt nýjar útgáfur af JavaScript eru að koma út allan tímann, svo lögun jafnvel þessi tungumál eru að þróast. Og Sem innskot, javascript þessa dagana Einnig er hægt að nota á miðlara rétt eins PHP notar ramma sem heitir Node.js. Einn af TFS CS50 er, Kevin, hefur leitt í Málstofa um Node.js sem er í boði á cs50.net/seminars. Svo ef þú ert forvitinn, veit að þú getur notað þetta á miðlara megin og vel, en það er nokkuð nýleg stefna, en öflugur einn á því. Þetta er svolítið öðruvísi. Þetta er fylki í JavaScript. Og hvað slær þig eins mismunandi móti C eða PHP? Það eru nokkur fljótleg sögur við getum sagt hér. Hvað vantar móti PHP? Áhorfendur: [inaudible]. DAVID Malan: Já? Því miður, segja aftur? Áhorfendur: Ekki lýsa the tegund af breytu. DAVID Malan: Við erum ekki að lýsa the tegund af breytu. Svo í raun alveg eins og PHP, við erum ekki tilgreina þær tegundir af breytu. Frekar erum við meira generically segja Var að breyta. Við höfum ekki óþægindi PHP er af dollaramerki, sem en leiðinlegur að gerð, gerir meira ljóst að eitthvað er breytilegt. En hér erum við svoleiðis aftur C er nálgun við bara að hringja í breytu með nafn sem við viljum að gefa það, eins og tölur. Og líka eins og PHP, höfum við hornklofum fyrir að gildi innan þess array. Svo breytur í JavaScript einnig gæti litið svona út. Tilkynning hér þetta er band sem heitir s, en álíka höfum við tilgreint ekki að það er strengur. Hér er þó eiginleiki sem gerir ekki eru á nákvæmlega sama hátt í PHP, en dálítið álíka. Þetta er hlut í JavaScript. Og hlutir eru konar svissneska hernum Hníf af gögn uppbygging í að þú getur notað þá fyrir allir tala af hlutur. Hér til dæmis, við erum að lýsa yfir breytu sem heitir tilvitnun. The tegund af þeirri breytu er hlutur. Þú getur hugsað þetta sem C struct sem hefur lykla og gildi. Tákn er lykillinn. FB er gildi, virðist lager tákn. Komma. Verð er annar lykill, og gildi þess er greinilega fljótandi lið, eða tala meira almennt í JavaScript, af $ 49,26. Svo PHP hjartarskinn ekki - við höfum ekki séð í PHP mótmæla alveg eins og þetta, en við gerðum sjá flaumi, sem var hvað? Áhorfendur: [inaudible]. DAVID Malan: tengin fylki. Svo þar sem PHP hefur tengin fylki sem setningafræði er alltaf örlítið svo öðruvísi - sáum við hornklofa. Sáum við skrýtin örvar tákn. JavaScript verður hluti, en þetta er aðallega merkingartækni mismunur og mismunandi samheiti fyrir nú. Hins vegar, eins og innskot, PHP hefur einnig hlutir á þann hátt sem Java og öðrum tungumál hafa hluti í hlutbundin forritun. En við munum nota þetta aðeins fyrir gerðir gagna fyrir nú. Hlutir og tengin fylki. Þetta eitt gæti gert það svolítið skýrari. Hér er ástæðan hlut er gagnlegt. Þegar þú vilt lýsa nemanda, eins Zamyla, getum við í raun þjappa svo að segja inni á því mótmæla því að nota hrokkið sviga rétt eins áður a heild búnt af lyklum og gildi í hér. Við höfum kenni, hús, og heiti fyrir Zamyla, fylgt eftir með semíkommu sem venjulega á endanum. Hérna líka, þetta er örlítið mismunandi, en einnig mjög öflugt þessa dagana. Hér er fylki, og ég veit að vegna það er ferningur krappi upp efst og ferningur krappi neðst. Og þetta er fylki af hvaða gögn tegund virðist í JavaScript? Þetta er fylki af það lítur eins þrír hlutir. Og ég veit að það er að mótmæla aðeins vegna hrokkið axlabönd. Og eftir því að það er opið hrokkið borsveif, smá dót, nálægt hrokkið Brace, kommu, þá sumir meira, kommu, og þá meira. Svo er að þrjú rök aðskilin tvö kommum. Svo er þetta fylki af þremur hlutum. Og hver af þeim hlutum virðist vera nemandi eða starfsmaður sumra raða, hver með kenni, hús, og nafn. En ég hef kallað þetta eitthvað heitir JSON - JavaScript Object Ritháttur. Og þetta er gögn snið sem raunverulega er svo mjög vinsæll og í tísku þessa dagana að ef þú skrifar forrit sem notar Facebook API, Twitter API, í raun næstum allir API þarna úti þessa dagana, þar á meðal sumir af eigin CS50, the gögn sem þú færð til baka er ekki í gamla skólann CSV sniði. Vegna Muna að CSV er frábær einfalt. Það er bara dálka aðskilin með kommum. JSON gögn gefur þér fleiri lýsigögn. Það tengir lykil með hverri gildi svo þeir þurfa ekki að bara gera ráð fyrir að á 0 dálkur er eitt gildi dálki einn er annar dálki tvö er annað. Allt í JSON mótmæla hér er tegund af sjálf-lýsa, vegna þess að hvert eitt af nöfnum í þessari skrá er bókstaflega nafn fyrir framan það sem Streng innan gæsalappa. Þannig að við skulum taka a líta á a par af dæmi hér. Láta mig fara inn í tækið. Og láta mig fara í vhost okkar skrá í almenningi. Og láta mig fara inn í JavaScript skrá. Og við skulum fara á undan og opna DOM-0.html, þar DOM þýðir bara Document Object Model. Það er tré efni sem Ég nefndi áðan. Og láta mig leggja eftirfarandi. Hér er vefsíða sem líkami er laglegur einfaldur. Svo niður hér neðst, eftir ég hafa mynd. Við höfum séð þá áður. Það hefur tvær inntak, einn sem hefur ID á nafni, einn sem hefur gerð leggja fram, og fyrsta tegund manns er texti. Þannig að þetta í raun hljómar frekar einfalt. Skulum fara hér. Við skulum fara aftur á þessa síðu hér. Förum inn localhost, og fara inn í JavaScript skrá okkar, og fara að DOM-0, og hér höfum við þetta eyðublað. Svo er það víst allt þetta síða hleðst. Það hefur reitinn með A Senda hnappinn. En ég ætla ekki að nota PHP hér. Ég ætla að gera allt viðskiptavinur hlið svo að segja í JavaScript sem hér segir. Takið eftir að ég hef örugglega gefið nafnið sviði sem þessi inntak einstakt kennimerki, sem mun í raun spara mér tíma í smá stund. Og eftir ég hef kynnt annað merki í höfuðið á vefsíðu mína, sem  tag. Svo er það í þessum skilningi sem JavaScript er viðskiptavinur-hlið forritunarmál. Í þessu tilviki, rétt eins og CSS, hef ég sett það beint inni HTML mínum. En eftir ég hef lýst fall sem lítur svolítið eins og PHP setningafræðilega, en þetta er í raun JavaScript, því aftur, það er client-megin í vafranum. Og taka giska hvað þetta er að fara til gera, jafnvel þótt sumir af the setningafræði hér er nýr. Áhorfendur: Segja halló til hvern sem er. DAVID Malan: Það er að fara að segja halló að hver sá sem heimsækir þessa síðu. Svo hvernig? Svo taka eftir, það kemur í ljós í JavaScript það er alert () virka. Þetta er mjög svona sorglegt fall sem raun bara tilhneigingu til að ónáða notendur. Það er ekki það sem þú ættir virkilega að nota yfirleitt, en það er a fljótur og óhreinn leið konar prentun eitthvað myndrænt notenda tengi, eins og vafra. Tilkynning hér að ég hef fengið band í einn vitna. Það kemur í ljós að ólíkt C, JavaScript getur í raun hefur þú notar einn vitna, og satt það er bara góður á stylistic samningnum þeirra JavaScript forritari að nota einn quotes. PHP, þeir hafa reyndar örlítið mismunandi merkingu. En nú, bara vita að það er eina ástæðan. Samningurinn í JavaScript er oft hægt að Notaðu einn quotes, en við gætum notað gæsalappa í báðum stöðum eins og heilbrigður. Svo er þetta áhugavert. Muna síðasta skipti sem við höfðum að mynd á skjánum sem dró upp í tré þar sem þú hefðir HTML hnút, og höfuð hnút og líkaminn hnút, og þá sumir texta. En það var eitt sérstakt hnút minnsta mjög toppur sem ég kallaði skjalið. Jæja, það kemur í ljós í JavaScript, hvaða skipti sem þú skrifað forrit í JavaScript í vafra, hefur þú aðgang að sérstakt alþjóðlegt breytu. Svipuð í anda að superglobals PHP er, þetta er kallað í allt lágstafir skjal. Það er eins og strúktúrinn, en þetta struct einnig hefur störf innan þess. Svo C struct hefur bara gögn yfirleitt. En JavaScript hlut sem þetta tæknilega er einnig hefur störf, annars þekkt sem aðferðir, inni af því. Og þú getur hringt í virka inni þessi hlutur alveg bókstaflega að gera sitt nafn, punktur, og þá nafn virka, eða aftur aðferð. Það er bara samheiti, virkilega. Og hvað þýðir þessi aðgerð að gera? Þú getur konar giska frá nafni sínu. Fá eininguna með því auðkenni. Þannig að þetta er að fara að leita á vefsíðu, leita að tré, leita hvað hnút, AKA frumefni, hefur Unique ID tilvísun unquote nafn. Og þá hvað á ég að gera? Ég ætla að fá verðmæti inni að hnútur í trénu, og ég ætla að einhvern veginn segja halló við því nafni. Svo taka giska, jafnvel þó að við höfum ekki séð þetta ennþá, gera hvað sem auk tákn merkja hér og hér sennilega? Áhorfendur: concatenate. DAVID Malan: concatenate. Einmitt, og þetta eru bara konar ákvarðanir hönnun fólk gerði árum. Í PHP, concatenate þú hluti með punktum. Í C, hoppa þú í gegnum nokkrar hindranir og kalla virka eins strcopy () eða strcat () eða öðrum slíkum aðgerðum. En í JavaScript, þú nota plús-merkjum. Þannig að þetta er bara concatenating þrír strengir - halló, nafn, og þá upphrópunarmerki. Svo þegar og hvers vegna er þessi aðgerð kallaði þó? Jæja, taka giska á HTML neðst. Hvers vegna er heilsa () heitir, eða hvenær? Apparently, sem best ég get sagt, á leggja fram, þegar þessi mynd er lögð, Ég ætla að gera hvað sem er inni af þessum tilvitnunum. Og sérstaklega, ég ætla að hringja heilsa () og þá return false. Jæja, við skulum sjá hvað nettó áhrif hér er fyrst. Svo láta mig fara á undan og slá í, segjum, Loren, Submit. Hello Loren. Við skulum sjá hvort þetta kannski bara heppinn framkvæmd. Nope. Svo það er að slá út hvað nefna að ég setti í raun það. En taka eftir hvað er ekki að breytast. Slóðin er enn DOM-0.html. Það er engin register.php. Það er engin annar skrá. Það er engin aðgerð eiginleiki. Svo hvað er þetta aftur ósatt væntanlega gera? Hvers vegna er ég að kalla heilsa () og þá aftur ósatt sennilega? Hvað gerist venjulega þegar þú smellir Leggja á formi sem jafnvel við höfum séð í síðustu viku? Áhorfendur: [inaudible]. DAVID Malan: Það fer einhvers staðar, ekki satt? Það fer að einhverju áfangastað vefslóð. En ég vil ekki að gerast hér. Ég vil vefsíðu mína til að vera alveg dynamic eins og Gmail, þar þegar þú ert þar, vera þú þar. The URL breytist ekki á þann hátt að bendir allt síðu er að endurhlaða. Frekar vil ég bara að breyta einhverju eins prenta út eitthvað hér á skjánum. Jæja látið mig þrífa þetta upp smá. Leyfðu mér að opna ekki DOM-0, en láta mig opna Dom-2. Bara svo þú hafir séð nokkur setningafræði hér. Það kemur í ljós að það sem við bara gerði er að nota hrátt JavaScript. Svo er þetta sannarlega tungumál JavaScript. Sumir af þú might vita af bókasafn heitir jQuery. Svo er jQuery ekki það sama hlutur og JavaScript. Það er bara bókasafn að virkilega klár strákur skrifaði og útbreiðslu svo að nánast allir í heiminum nú notar jQuery þegar JavaScript. Og við fyrstu sýn, heiðarlega, það lítur svolítið meira dulinn. En þú munt finna, sérstaklega ef þú ferð þar lokaverkefni þitt með vefnum þróun, munt þú finna að þessi hreinsar það upp og sparar þér alveg nokkrar línur af kóða. Þannig að við skulum bara litið á hvernig þessi mynd er að vinna. Tilkynning hvað gerði ég fjarlægja virðist frá HTML mínum? Það er engin á leggja dýraþjálfari svo að segja. Það er enginn eiginleiki. Þar sem þú veist, hvað Ég vissi ekki alveg eins? Mér fannst eins og við vorum að falla í gamla venja þar. Rétt eins og það var byrjað að líða sloppy að intermingle bæði CSS og HTML, því þú ert góður að kasta mismunandi tungumál allan stað, álíka var þetta byrjað að líða eins og slæmur vegur til fara niður þar Ég er að setja JavaScript kóða inni af mínum HTML frekar en þátta það út. Svo er að lærdómi hér. Í Dom-2.html, ég þátta það út. Og ég er að gera hlutina örlítið öðruvísi. Fyrir nú, ég er að fara að veifa höndum mínum á hvað þetta þýðir í raun undir hetta. En bara fyrir nú ráð fyrir að þessi fyrsta lína af kóða í þessu bókasafni kallast jQuery þýðir bara þegar skjalið er tilbúið skaltu gera eftirfarandi. Vegna þess að vefur blaðsíða geta tekið nokkurn tíma að hlaða. Þú gætir verið á hægum internetinu tengingu, og það gæti verið að snúast og spuna, og að lokum það er hlaðinn. Þessi lína af kóða segir bara að bíða þangað allt síða er tilbúinn, skjalið er tilbúinn, áður en framkvæmd þessa kóða. Og nú fyrirvara, þetta er sennilega the gagnlegur fyrst taka í burtu frá jQuery. Þessi lína hér er mjög svipuð í anda við þessa miklu lengri línu hér. En í hrár JavaScript kóða, þar til skjal alþjóðlegt hlut sem hefur fall sem kallast getElementById (), fólkið sem skrifaði jQuery einfölduð að bara segja króna merki, og þá innan sviga setja tvær tilvitnanir, og þá setja kjötkássa tákn á eftir einstakt auðkenni sem þú vilt að grípa. Svo er þetta jafngildir document.getElementById. Á sama tíma,. Senda inn þýðir bara á skil á hvaða formi sem þú ert vísa til vinstri, fara undan og framkvæma þetta. En þetta er nú forvitni líka. Hvað er undarlegt um hvað Ég hef bent hér? Ekki aðeins er það eins konar setningafræðilega ný, það er líka eitthvað sem vantar. Áhorfendur: Það er bara kallað virka? Það er ekki kallað vakandi? DAVID Malan: Já. Jæja, svo vakandi () er niður hér, að vera sanngjarn. En það er ekki minnst á að nafn, eins og þú veist, foo eða eitthvað upp hér. Og reyndar, þetta er einn af þeim eiginleikum af JavaScript sem er alveg öflugur, en einnig alveg nýr. Og PHP hefur reyndar þetta eins og heilbrigður. Leyfðu mér að fara á undan og gera eitthvað raunverulegur fljótur. Leyfðu mér að fara á undan og setja þetta út hér. Leyfðu mér að gera þetta. Virka. Við skulum kalla þetta dýraþjálfari (). A dýraþjálfari virka svo að segja. Eitthvað sem annast einhverja aðgerð. Leyfðu mér að hreinsa upp inndrátt mína. Og setja þetta hér. Og setja það hér. Yep. OK. Svo nú hef ég fall sem kallast stjórnandinn () að ég í raun ekki vita hvað það gerir enn. Það hefur bara enn þessi efni. Úpps. Tók of mikið. Drífum í þessu. Allt í lagi. Sorry. Allt í lagi. Leyfðu mér að gera þetta. OK. Það lítur ágætur og beinn senda núna. Leyfðu mér að gera þetta. Gera þetta. Og Í lagi. Svo nú skulum við setja þetta hérna. Ekkert meira forritun á flugu. OK. Svo nú skulum við fara aftur til þar sem sagan hófst. Áður sagði ég að þessi lína hér þýðir að þegar skjalið er tilbúið, fara undan og gera þetta. Hvað vil ég að gera? Jæja sérstaklega, ég vil fara undan og gera eftirfarandi. Keyra þessa línu af kóða, og þá það sem ég vil að þú gerir er að hringja þetta virka þegar mynd er send inn. Nú er þetta það sem er áhugavert. Þetta er ekki sjálft fall. Eftir ég er ekki að setja sviga hér á venjulegan hátt. Ég er bókstaflega farið fall sem kallast sýnandi () til annars virka kallað leggja () sem rök sem þó það er eins og breytu. Og þetta er einn af the lögun af JavaScript er HLUTVERK sjálfir eru virkilega bara hlutir. Í raun, þeir eru í raun bara breytur af einhverju tagi. Og ef nafnið á virka er stjórnandinn (), það er engin ástæða sem ég get ekki gefa það í sem rök hér. Og þetta þýðir þegar formið með kenni kynningu er lögð, kalla þessa aðgerð. En nú ef ég losa þetta allt, hvers vegna þá gerði ég kannski gert þetta í smá stund síðan? Jæja, þetta er nafnlaus aðgerð. Því hreinskilnislega, áttaði ég hvers vegna er ég ómak til að sóa tíma að lýsa yfir fall sem kallast dýraþjálfari () aðeins til að hringja það í einum og aðeins einum stað? Ef ég þarf ekki nafn, og ég geri ekki þarf að kalla það fleiri en einum stað, skulum framkvæma bara virka rétt þar sem ég þarf það. Og svo JavaScript og PHP stuðning hvað eru kallaðir nafnlaus aðgerðir sem leyfa mér að gera einmitt það hér. En við erum bara að klóra yfirborðið. Skulum stríða með réttlátur a par endanlegar dæmi hér. Ef ég fer inn í quote.php. Takið eftir að þetta er í raun PHP virka, PHP forrit, sem ég skrifaði sem gerir ráð fyrir HTTP breytu sem heitir tákn, og ég get fara í gildi eins og FB. Og ef við lítum í raun á upptökum kóða, þetta er fyrirspurn a frjáls website heitir Yahoo Finance, rétt eins og p-sett sjö, og það er aftur að mér eitthvað í greinilega snið þekktur er JSON - JavaScript Object Ritháttur. Það er bara hlutur. Takið eftir hrokkið axlabönd, tilvitnanir, ristli, og kommum. Nú á meðan, þetta er laglegur kaldur. Vegna þess að ég get sennilega notað forritun tungumál til að búa til vefslóðir að líta svona virk, ekki satt? Ég get breytt þessu í Google og fá til baka Google gengi hlutabréfa $ 1,017.55. Svo við skulum sjá hvort við getum ekki notað þetta núna. Leyfðu mér að fara til Ajax 0 hér, sem lítur út eins og eftirfarandi. Það er bara a website þessi hefur mynd með takka. Leyfðu mér að hér fara á undan og tegund í yhoo fyrir lager tákn Yahoo, smelltu fá Quote, og nú eftir að ég hef fengið vakandi með 32,86. Láta mig fara í raun til áhugamaður útgáfa af þessari síðu, útgáfa tveimur og tegund í segjum Microsoft, MSFT. Fá Quote. Og nú eftir, ekki alert. Takið eftir þar sem stendur verð að ákvarða? Það er einfaldasta dæmi sem vísbending á hvaða Gchat og Facebook Spjalli og Gmail, og aðrar slíkar vefsíður eru að gera með því að í raun og veru breyta vefsíðu. Taka þetta. Leyfðu mér að endurhlaða síðunni. Leyfðu mér að opna Eftirlitsmaður Króm '. Láta mig fara að þeim þáttum flipann hérna. Nú taka ef ég súmma inn hingað og opna þetta upp, taka eftir að þetta er minn HTML DOM - Document Object Model minn. Þetta er HTML mín. En nú eftir, jafnvel þó að það er að fara að vera svolítið erfitt að sjá það í báðum stöðum í einu, ef ég tegund í FB upp hér, horfa á botn á skjánum eingöngu. Það er í raun að breyta HTML minn á flugu. Og það er að gera þetta einfaldlega með því að gera eitthvað eins og this. Ef ég opna AJAX 2, tilkynning um framkvæmd eitthvað eins kynþokkafullur eins og að jafnvel þó að það er ansi ljót, en eins og háþróaður eins og þessi Virkni, hefur það einhver HTML neðst. En eftir ég nota til að merkja. Við höfum ekki notað þetta áður, en þetta er eins og, en það þýðir ekki að þvinga allt á nýja línu. Það gerir bara rétthyrnd svæði á sömu línu í meginatriðum. Takið eftir að ég gaf það kenni af verð. Og það kemur í ljós með því að nota sama JavaScript bókasafn, ég er með virka kallað QUOTE () sem heitir þegar mynd er lögð. Og hvað ég er að gera er þetta. Ég er að lýsa yfir breytu í JavaScript heitir url, sparnaður gildi quote.php? tákn =. Með öðrum orðum, ég sjálfur er farin að undirbúa HTTP beiðni, og þá Ég er concatenating á að með plús hvað þátturinn með auðkennið af tákn er, þar sem atriði er að reitur rétt niður hér. Svo bara eins og við höfðum eyðublöð í fortíðinni. Og þá kemur í ljós í jQuery, ef þú kalla. Val (), sem kallar á Val virka, er gildi virka, sem fær hvað notandinn hefur slegið inn Og síðan alla net umferð það gerist er þetta. $. GetJSON. Og eins og til hliðar, dollara merki er bara shorthand tákn. Það er í raun jQuery.getJSON. Fá mig til JSON frá þessari vefslóð, og þegar beiðnin kemur aftur, kalla þetta virka og fara í eins og rifrildi hvað kom til baka frá þjóninum. Svo í öðrum orðum, ef ég fer aftur til vafra, og ég fer aftur til quote.php, hvað vafrinn minn er að gera er að fá þetta klumpur af gögnum. Og þegar ég fer á þessa vefsíðu hér, taka ef við förum í staðinn á netið flipann og hreinsa það, og þá tegund í eitthvað eins GOOG fyrir Google og Fá Vitna, taka síðan breyttist ekki. En HTTP beiðni var gert, og hvað kom aftur hingað ef við skoðum svar er a heild búnt af JSON að við nálgast að lokum með þetta einfalda lína hér. Gögn er það var fengið frá þjóninum. Verð er að nafn hins lykill mér þykir vænt um. Svo gefur data.price mér það. Nú á meðan, og þetta er síðasta dæmi. Þú getur gert enn meira með síðuna. Einn reyndar, vel tveir. Við getum koma til baka tag, ef þú manst þetta. Það er JavaScript. Við getum gert það. Mjög spennandi. Við munum fara að sem cliffhanger. En meira excitingly, getur þú gera hlutina eins og þetta. Ef ég fer til Geolocation-1, snýr það út að Króm veit að við erum á breiddargráða lengdargráðu 42.37. -71,10. Svo er það enn þar að ráða þínum. En meira um það í næstu viku. Sjáumst Mánudagur.