David MALAN: Lahat ng karapatan. Ito ay CS50, at ito ay katapusan ng linggo siyam. Naging ipoipo sa ibabaw nakalipas na ilang araw. At problema set pitong, kung ikaw ay tuhod malalim sa ito, mapagtanto mayroong medyo isang bit bagong na nasa doon. Ngunit sabihin makita kung hindi namin maaaring piraso ang lahat ng bagay magkasama dito sa madaling sabi bago pagkatapos ay veering off pa sa isa pang direksyon at nakikita kung saan pa ang maaari naming pumunta. Kaya kaya ngayon, na-usapan natin ang tungkol sa HTML. Na-usapan natin ang tungkol sa CSS. Na-usapan natin ang tungkol sa PHP. Nagsimula ka nakakaranas ng SQL. Ngayon, muli naming makipag-usap ng kaunti tungkol sa JavaScript. Ngunit kung paano gawin ang lahat ng mga disparate wika magkasya magkasama? Kaya usapan natin noong nakaraang linggo tungkol sa kuru-kuro ng pagkakaroon ng isang server. Kaya hayaan gumuhit ng lamang ito parihaba bilang isang web server dito. At Naghahain ang tiyak na file ng isang web server. At ang ilan sa mga file na iyon ay maaaring maging HTML file. Kaya isa sa mga bagay na ang isang web server Maaari sabihin ang lahat ay maaaring maging isang file na ipapakita namin lamang gumuhit tulad nito na naglalaman ng ilang mga HTML. Kaya sa mga tuntunin lego, na kung ano ang ang HTML hayaan mong gawin? Madla: hitsura ng Pahina magaling. David MALAN: OK, gumawa ng isang pahina tumingin maganda, kahit na sa tingin ko at napatunayan ko na kung hindi man. Kaya HTML ay hayaan maglatag ka out mga pahina structurally, at nagbibigay-daan ito sa iyo upang uri ng aesthetically markahan up ng isang pahina, markahan up static na nilalaman, sa gayon ay Maaari pagkatapos ay tingnan ito sa isang web browser. Ngunit iyon ang key. Ito ay static na nilalaman. Isulat mo ito, i-save mo ito, at pagkatapos mong ipadala ang mga ito. At ang mga web server pagkatapos ay naghahain ito hanggang sa iyong mga bisita. Ngunit stylize namin ang mga bagay gamit ang ibang wika nang sama-sama. Sinimulan namin na gamitin ang isang katangian ng estilo sa mga tiyak na mga tag. At ang mga estilo katangian sa amin set mga bagay tulad ng laki ng font at kulay. At nagsimula marahil mo na upang matuklasan, o sa lalong madaling panahon mo para sa final mga proyekto ng potensyal, pa iba pang mga katangian na maaari mong gamitin sa CSS. At kaya sa mga tuntunin lego, na kung ano ang talaga pagkatapos ay ang ginagawa ng CSS? Iyon ang mga halimbawa lamang hinggil doon. Ano ang ibig sabihin nito gawin mo na HTML Mukhang hindi mula sa kung ano nasaksihan namin kaya ngayon? Madla: Tukuyin ang mga estilo sa pamamagitan ng iyong sarili. David MALAN: Tukuyin ang mga estilo sa pamamagitan ng iyong sarili. Kaya tukuyin ang mga bagay tulad ng mga klase tulad ng sa iyo Maaaring nakatagpo, o katangi-tangi kilalanin ang mga node sa isang dokumento sa gayon na maaari mong stylize mga ito. Ngunit higit na partikular, gusto kong sabihin na CSS talaga ay nagbibigay-daan magdadala sa iyo bagay ang huling milya at nagbibigay-daan sa iyo upang tukuyin magkano Mas tiyak ang aesthetics, samantalang ang HTML para sa pinaka-bahagi ay nagbibigay-daan ikaw ay buuin ang iyong mga pahina. At kahit na mayroong ilang mga default, tulad ng nakita natin ang tag para sa isang heading na tag, na halos nagsasalita ginawa bagay na malaki at naka-bold. Iyon ay isang magandang generic na kahulugan ng tag - malaki at naka-bold. Ano ng font laki ay na? Ano ang kulay ay na? Paano naka-bold ay na? At CSS ay nagbibigay-daan sa iyo ng karagdagang pino tune mga bagay tulad na. Pati na rin ang layout, bilang ilang mga ng na nakita mo. At nang tapat, CSS ay isang bit ng isang marumi wika. Ito ay napakalakas na maaari mong gawin Literal anumang website na ikaw ay nakikita sa web ngayon may ito, ngunit ito ay uri ng isang sakit sa ulo. At ang ilan sa iyong na-Nabunggo ang iyong ulo laban sa mga pader na gawin na lamang isang bagay bobo tulad ng sentro ng menu sa itakda problema pitong kung nakuha sa na tuldok na. Ngunit mapagtanto, ang mga bagay makakuha ng mas madali sa paglipas ng panahon. Magsisimula ka na mapansin pattern. At muli, ang Google ay maging kaibigan mo para sa iba't-ibang mga paraan kung saan maaari kang malutas ang mga ganitong uri ng mga problema. At maglakas-loob ko sabihin sa CSS, at HTML higit pa Sa pangkalahatan, maaari mong malutas ang mga problema sa maraming mas maraming mga paraan, ang lahat ay puwede napaka na rin maging tama, kaysa dati mo sa isang bagay tulad ng C, kahit na ngayon PHP, o JavaScript. Maraming mga iba't ibang lamang mga paraan upang mag-ipon ng mga bagay out. Ngunit ito na nagsimula upang makakuha ng gulung-gulo, sinabi namin. Lamang uri ng commingling iyong HTML at iyong CSS na may estilo katangian ay isang maliit na nanggigitata. At kaya sa halip namin sinabi, uri ng abstractly nagsasalita, na dapat mong hindi bababa sa magsimula sa factor out iyong CSS marahil. Mga katangian hindi ang iyong estilo, ngunit hindi bababa sa gamitin ang estilo tag sa loob ano bahagi ng web page? Madla: Head. David MALAN: Sa ulo. Up hanggang ngayon, tanging nagkaroon kami ng pamagat up doon, ngunit maaari ka ring magdagdag ng isang estilo i-tag, at maaari mong ilagay ang iyong mga CSS halos nagsasalita patungo sa tuktok ng pahina. Ngunit pagkatapos ay kinuha namin ang mga bagay isang hakbang karagdagang at isinasali namin na ang higit pa sa isang hiwalay na file. At kaya ang dalawang mga file ay sa paanuman ngayon naka-link. At sa katunayan ito ay ang tag na gumawa niyan. At kung ano ay isa sa mga overarching motivations para sa factoring ang aming CSS lahat ng higit pa? Madla: Reusability. David MALAN: Reusability. Mag-right? Maaaring nakakita sa p-set pitong na na ng maraming mga pahina, ang pahina ng pagbili, ang pahina ng pagbebenta, ang pahina ng portfolio, ay marahil nakaayos medyo katulad. Mayroong isang CS50 pananalapi logo sa tuktok maliban kung nagpasya kang baguhin ito. Mayroong isang footer sa ibaba ng pahina. At CSS ay nagpapahintulot sa iyo pagkatapos ay sa kadahilanan ito ito sa isang hiwalay na file upang kung gusto mong baguhin ang isang bagay sa buong mundo sa kabuuan ng iyong buong site, maaari mo ba talagang baguhin lamang ito sa isang lugar. Subalit mayroong isang presyo na babayaran mo potensyal sa pamamagitan ng pagkakaroon ng isinasali ang CSS mula sa aking HTML file sa isang hiwalay na mag-file na tumutukoy ito sa tag, na kung saan nakita natin sa Lunes. Ano ang maaaring maging downside ng ito? Nag-iisip bumalik sa isang linggo nakaraan upang kapag kami ay pakikipag-usap tungkol sa HTTP at TCP / IP at kung paano Gumagana ang internet. Isang bagay na sa paglipas dito? Madla: Ito ay tumatagal ng mas maraming oras. David MALAN: Ito ay tumatagal ng mas maraming oras. Bakit? Madla: [hindi marinig]. David MALAN: Oo. Kaya arguably tumatagal ng kaunti pang panahon. Dahil isa, ang CSS ay malinaw naman hindi sa parehong file. Kaya ngayon ikaw ay may upang gumawa ng hindi isa, ngunit dalawang mga kahilingan. At sa bawat isa sa mga kahilingan ng bilang nakita natin sa Chrome sa tinaguriang Inspector, at itinuturing namin ang tab na Mga network, ang bawat isa ng mga file na iyon ay nangangailangan ng isang HTTP hiling, na nakita natin ay tumatagal ng ilang tagal ng panahon. Ngayon, siguro hindi ito ng maraming. Siguro ito ay 20 lamang millisecond. Siguro ito ay 200 millisecond. Ngunit isipin ang tungkol sa isang pahina tulad ng Facebook, o CNN, o Google, na kung saan ay magkano mas malaki kaysa sa mga halimbawang hindi namin ay tumingin sa gayon ay malayo. Yaong mga pahina na maaaring mayroon dose-dosenang mga file, ang bawat isa ay maaaring mangailangan ng isang pag-download ng isang file. Kaya bagay na maaari potensyal na simulan na pabagalin. At lalo na ang mga araw kung kailan namin lahat may mga mobile phone sa aming bulsa at mas mabagal na internet na koneksyon, na kinakailangang maghintay ng ilang higit pang mga millisecond, ang ilang mga higit pa millisecond para sa karagdagang na file ay maaaring talagang maging mabagal. Latency ay ang salita na naglalarawan ng uri ng paghihintay na mayroon ka na sa iyo maranasan kapag naghihintay para sa ilang piraso ng impormasyon. Subalit mayroong isang nakabaligtad. Kaya ito ay hindi lahat ng mga uri ng isang - ito talaga ay isang bit ng isang palatimbangan dito. Downside ngayon, ngunit kung ano ang mga browser ay maaaring gawin kung ang mga ito ay matalino upang maiwasan ang pagkakaroon upang hilingin ang parehong styles.css muli-file ay maaaring maging upang gawin kung ano? Cache ito. Kaya pag-cache - C-A-C-H-E - karaniwan ay nangangahulugan lamang dito upang i-save ang mag-file na iyong hiniling sa unang pagkakataon, at pagkatapos suriin ang iyong cache para dito. Suriin ikaw ay isang uri ng imbakan lalagyan, at kung ikaw ay mayroon ng isang kopya ng styles.css, kahit na ang ilang mga iba pang pahina sa p-set, o anumang website, Humihiling itong muli, upang bigyan lamang ang gumagamit na parehong naka-cache na kopya. Huwag mag-abala na humihiling ito. Downside doon, kahit na, bilang ilan sa inyo na tripped sa paglipas ng sa p-set. Kung gumawa ka ng pagbabago sa server at mo bumalik sa browser at mo i-reload, paminsan-minsan ang browser gumagana sa iyo ng isang pabor at hindi mag-abala muling pag-download ng iyong styles.css file dahil, dumating sa, ano ang mga logro na ang mga estilo na gumagamit ng Facebook ay pagpunta sa baguhin nang oras-oras o araw-araw? Ito ay medyo mababa. Maaari nilang baguhin sa paglipas ng panahon, ngunit hindi sa pamamagitan ng mga minuto o sa pamamagitan ng oras. Kaya isang kahanga-hangang gawa, Para sa Iyong Impormasyon lamang kapag ang paggawa ng web pag-unlad, ay madalas na panghawakan ang shift key halimbawa at pagkatapos ay i-click ang i-reload sa iyong browser, at kalooban na Karaniwang sabihin ang reload na browser ang lahat ng bagay, kahit na mayroon ka ito sa cache. Kaya muli, upsides at downsides, ngunit lahat ng mga ito sa huli magdisenyo ng mga desisyon. Kaya ngayon, ginawa naming hindi lamang tapusin ang kuwento dito. Kung pumunta ako ngayon pabalik at pabalik at pabalik at pabalik, nagsimula kami upang ipakilala hindi lamang HTML, ngunit PHP. Kaya sa mga tuntunin lego, na kung ano ang ang ibig sabihin ng PHP sa amin gawin? Madla: [hindi marinig]. David MALAN: Ano iyon? Madla: Ipakilala logic sa ang code. David MALAN: Oo, ipakilala logic sa iyong code. Kaya ito ay isang tunay na wika programming may mga loop, at mga variable, at mga pag-andar, at mga kondisyon, at lahat ng sa mga bagay na namin na ginagamit mo paraan pabalik kapag mula noong simula. At PHP, nasaksihan namin, ay maaaring magamit alinman sa command line - ito hindi kailangang magkaroon ng anumang bagay na gawin gamit ang web, kahit na talaga mga pinagmulan nito at kung ano ito ay may gawi upang maging mahusay sa at kaaya-aya sa - ngunit maaari kang gumamit ng PHP at wala na sa pamamagitan ng kalikasan ng katotohanan na ito ay may naka-print () function, at isang function () printf, o isang function na () echo. Mayroong bunches ng mga paraan sa iyo maaaring mag-print ng teksto na may PHP. Samakatuwid, maaari mong gamitin ang programming wika sa output eksakto kung ano ang pinag-uusapan natin ay tungkol sa bago. Maaari mong dynamic na bumuo ng iyong HTML. Siguro hindi lahat ng ito. Siguro mo na hard bagay na code, tulad ng header, at footer, at ang logo, at ang iyong mga style sheet, at ang lahat ng iyon. Ngunit para sa isang bagay tulad ng p-set pitong, kung saan ka pagmamanipula ng mga stock at na nagpapakita ng portfolio ng gumagamit, na kung saan ay pagpunta sa dynamic na baguhin, ikaw ay maaaring tiyak gamitin ang PHP at ang logic ito ay nagbibigay sa iyo bilang isang wika programming upang pabagu-bagong mga subset ng output ng pahina. Kaya kapag makipag-usap sa iyo tungkol sa pabago-bagong mga website, o web programming, na kung ano ang talagang pakikipag-usap sa iyo tungkol sa. Paggamit ng isang wika tulad ng PHP, o bagay tinatawag na Python, o Ruby, o Java, o pa iba pang mga wika, para sa mga tanong ng isang database madalas, o isa pang server, at pagkatapos ay magilas na sabihin ang lahat ng HTML. Ngayon ang resulta, bilang isang-tabi, ay na HTML ng karamihan sa mga website, kabilang ang iyong p-set pitong, ay marahil pagpunta sa maging isang malaking gulo kung mong tingnan ang pinagmulan code sa isang browser. Iyan ay hindi isang malaking pakikitungo. Sa puntong ito, kapag pinapahalagahan namin tungkol sa estilo, pinapahalagahan natin ang tungkol sa bagay-bagay na sinulat mo. Hindi namin na nagmamalasakit sa mga bagay-bagay na kung ano ang iyong code output. Kaya huwag mag-alala tungkol sa indentation dito kung ito ay PHP na talaga outputting bagay-bagay. Pagkatapos ng lahat, hindi na mahalaga sa browser, at isang tao ay hindi naghahanap sa gayon pa man ang pinagmulan. Namin ang mga tauhan, halimbawa, gagawin tumitingin ka sa iyong PHP. Kaya hayaan mo akong bigyan ng isang mabilis na halimbawa ngayon ng bakit pa ito maaaring maging kapaki-pakinabang. Kaya nang tapat, hindi ko matandaan ang huling oras na ginamit ko C upang malutas ang isang problema sa tunay na mundo. Ito ay marahil sa graduate paaralan kapag Kailangan ko bang gamitin ang isang wika na ay medyo mababa ang antas at binigyan ako ng pagkakataon na gawin ang isang bagay napakataas na gumaganap sa talagang i-save ng maraming CPU cycle bilang ng dati ko, sa malaking bahagi dahil na ginagamit ko malaking hanay ng data, at ang bawat ikot ng CPU binibilang. At lantaran, kahit na sa mga bagay tulad ng mga telepono mga araw na ito at iba pang mga device kung saan wala ka pa masyadong magkaroon ng maraming memorya at hindi mo pa masyadong may bilang magkano ang CPU, gamit ang mas mabilis na mga wika ay sumasamo pa rin. Ngunit sa tunay na mundo, kapag mo lamang gusto magtapon ng ilang mga programa nang magkasama upang pag-aralan ang ilang data, o na iyong nakolekta ang maramihang mga pagrerehistro para sa ilang mag-aaral group at gusto mong napaka mabilis na i-automate ang pagpapadala ng mga email isa-isa sa bawat isa sa mga registrants, ka ng pagpunta sa maabot para sa isang wika mas mataas na antas kaysa C kaya na magsalita. Isang bagay na tulad ng PHP o Python, o Ruby, o isang kalahating dosenang iba na umiiral mga araw na ito. Ngunit ang mga tatlong ay marahil ang pinaka-usong ngayon. At ano ang ibig sabihin nito ay maaari mong buksan up ng isang text editor tulad ng gedit o pinaka-anumang bagay at pagkatapos ay simulan lamang pagsusulat ng code nang hindi na kinakailangang mag-alala tungkol sa kino-compile, nang hindi na kinakailangang talagang mag-alala tungkol sa pamamahala ng memorya, isinasaisip bagaman na ng kaunti sloppiness ay malaon bumalik upang kumagat sa iyo kung ang hanay ng data ay makakakuha ng mas malaki o ang problema ay makakakuha ng malaki. Ngunit ano ang ibig sabihin nito para sa sa amin ay ang sumusunod. Hayaan akong sige at magpatakbo ng speller itakda mula sa problema anim. Kaya ito ay ang aking trie-based na pagpapatupad na ginamit ko sa malaki board kung saan ako gumanap hindi kaya mahusay. Darating kami pabalik sa panahon ng linggo at muling bisitahin ang mga taong nag napupunta sa ibabaw ng malaking board sa aming huling panayam. Ngunit para sa ngayon, hayaan mo akong magpatuloy at lang tumakbo ang aking mga solusyon sa teksto, at kami na ang King James na Bibliya, at dito pumunta namin. Kaya mga ay ang lahat ng parang maling nabaybay salita out sa ang King James Bibliya. At kinuha ang aking pagpapatupad kalahati ng isang segundo sa kabuuan. Kaya hindi masyadong masamang sa ito partikular na computer. Ngunit sa tingin ng kung magkano code ko ay nagkaroon na magsulat. Isipin kung gaano kalaki ang code na kayo ay nagkaroon na magsulat. Isipin kung gaano karaming oras mo na ginugol sa D-hall o sa iyong dorm o kung saan man talaga coding up solusyon na iyon. Well, kung ako talagang magkaroon ng isang mas mataas na antas wika tulad ng PHP, itala ng kung ano ang maaari kong gawin dito. Una, ipagpalagay na ito ay sa halip ang pagbabahagi ng code. Ito ay isang file na tinatawag na speller. Ito ay magagamit bilang bahagi ng ngayong araw code pamamahagi. At pupuntahan ko iwagayway ang aking kamay sa pinaka- ng mga detalye, ngunit ito ay ang tunay isang kawili-wiling halimbawa ng kung paano maaari mong port ng wika tulad ng C sa ibabaw sa PHP. Literal na ako nagbukas ng dalawang mga bintana ng teksto, isa sa aking mga C bersyon ng speller.c, at lamang na sinimulan ko isinasalin ito sa aking magtungo sa PHP at pag-type ito gamit ang ang pinakamalapit na katumbas na pag-andar. Kaya ang ilan sa mga bagay na ito ay magkaiba. Nakakita kami huling beses na hindi gumagamit ng PHP isama sa masyadong sa parehong paraan. Gumagamit ito ay nangangailangan ng karaniwan, bagaman isama ang umiiral. Tukuyin ay isang maliit na naiiba mula sa # Tukuyin sa C, ngunit iyan ay paano namin gumawa ng isang pare-pareho. $ Argc ito ay lumiliko out umiiral sa PHP, kaya nakakita kami na bago. Ang mga ito ay lamang na variable, ang lahat ng na magsimula sa mga karatula dolyar. Isipin ang mga ito ay isang bungkos lamang ng mga lumulutang na mga puntos. Kaya mahaba kuwento maikli, ikaw ay malugod na tinatanggap i-flip sa pamamagitan ng ito kung malaman, ito ay halos isang line-para sa-linya ng conversion ng C bersyon ng speller.c sa PHP. At maaari mong gawin ito muli para sa kalahating dosenang iba pang mga wika. Ngunit kung ano ang kawili-wiling ay na ito. O kung ano ang lantaran disheartening ay ito. Hayaan akong sige at i-type ang tungkol sa dictionary.php, at claim na ako pagpunta sa sige at muling ipatupad itakda ang problema anim dito. Kaya hayaan muna ni magpanukala na sa ganitong file, na ipinapatupad sa PHP, kaya hayaan buksan sa akin ang aking mga tag tulad na. Hayaan akong bigyan ang sarili ko ng isang global variable, $ laki ay makakakuha ng zero. At ako pupunta upang bigyan sarili ko ng hash table. Makikita ko bang gamitin ang isang hash talahanayan para sa bagay na ito. Paano Ipinahahayag ko ng hash talahanayan sa PHP? Tapos na. OK. Kinakatawan Kaya bukas bracket malapit bracket ano sa PHP, bilang nasaksihan namin? Ang isang array, ngunit isang array na maaari maging isang nag-uugnay array. Ang isang nag-uugnay array ay isang istraktura ng data na iniuugnay ng mga susi na may halaga. Ngayon sa pinakasimpleng ayon sa bilang na-index array, mga pindutang iyon ay kung ano? Zero, isa, dalawa, tatlo, tama? Bagay-bagay pabalik mula sa C. Lumang paaralan Ngunit kaya nito maging din tulad ng mga string ng foo, at bar, o makswel, o anumang katulad na string. Kaya ang maaari kong magamit na sa sandali lamang. Hayaan akong sige at ipinapahayag isang function tulad ng - gawin ang unang pag-load ng () ipaalam. Kaya pag-load ng function (). At PHP ay isang maliit na iba't ibang sa na ka literal type function, ngunit ikaw huwag mag-type ng uri ng return. Pupunta ako sa sige at sabihin na ang pag-load ng function () ay dapat kumuha sa argumento $ diksyunaryo, lamang tulad ng ginawa C bersyon. Ako paggawa na mula sa memorya. At ipanukala ko na ako pagpunta sa gawin ito. Lamang ako ng pagpunta sa gawin foreach. Pupunta ako sa tumawag sa isang function na tinatawag na mag-file (), pagpasa sa pangalan ng na maghain, kung saan ay ang variable $ Diksyunaryo habang $ salita. At pagkatapos ay sa loob ng aking para sa loop dito, ako pagpunta sa sige at mag-store sa aking $ Talahanayan na $ salita ay makakakuha ng totoo. Tapos na. Oh, maghintay. Tapos na. OK. Iyon ay ang function () pagkarga sabihin sa PHP. Ngayon, kung bakit ay na gumagana? At ako uri ng Pandaraya dito. Kaya, isa, foreach namin nakita sa madaling sabi huling beses. Nangangahulugan itong lamang na maaari mong umulit sa ibabaw isang array na walang Iniistorbo sa i at n at plus plus, at ang lahat ng iyon. Diksyunaryo ay siyempre ang file name, isang bagay tulad ng malaki o maliit, ang dalawang mga diksyunaryo ginamit namin huling beses. File ay isang pagpapaandar na bubukas up teksto file, bumabasa ng ito sa linya sa pamamagitan ng linya, at kamay-back ka ng isang napakalaking array, bawat isa sa kung saan ang mga elemento ay isang linya mula sa file na iyon. Kaya iyon ang kumbinasyon ng mga fopen, at fread, at habang loop, at fclose, at ang lahat ng iyon. Panghuli, bilang ng salita lamang ay nangangahulugan na ang variable na pupuntahan ko ay may access sa sa bawat pag-ulit sa loop. Kaya sa maikling, ang isang ito Liner dito ay nangangahulugang buksan ang file na kung saan ang pangalan ay nasa diksyonaryo, ang variable, umulit sa ibabaw ito linya sa pamamagitan ng linya, at sa bawat oras na makakuha ka isang linya, mag-imbak sa salita sa isang variable na tinatawag na, at pagkatapos ay gawin ang isang bagay na may salita. Ano ang gusto kong gawin? Gusto kong maglagay ng salita sa aking hash table. Well, maaari ko bang ilagay ang isang bagay sa aking hash talahanayan tulad ng sa C paggamit ng mga square bracket. Ito ang pangalan para sa aking hash table. Pupunta ako sa index sa na hash talahanayan sa lokasyon na ito. Kaya hindi bracket zero, hindi bracket isa. Bracket quote magpanipi isang bagay, ano naman ang salitang iyon ay. At tulad ng maaaring mayroon ka sa iyong hash talahanayan trabaho trie, mag-imbak ka lang epektibo ng Boolean, nang kataon lamang o tahasang. Tapos na. Ako pag-iimbak ng tunay na halaga. Ngayon ay mayroong dalawang bagay Ako pagputol sulok sa dito. Technically, may pupuntahan maging isang nakakainis na bagong linya, / n, sa dulo ng bawat isa sa mga salitang ito. Kaya dapat marahil tumawag ako ng isang function na PHP tinatawag na tumaga (), na masyadong literal tumaga na-off. At talagang kailangan kong gawin ang isa sa iba pang mga bagay. Dapat kong marahil dinagdagan ng laki sa bawat iteration, kaya ako pagpapanatiling track globally ng kung ano ito ay. At nang tapat, at ito ay isa sa mga stupider aspeto ng PHP, kung ikaw ay gamit ang isang global variable, kailangan mo upang tahasang sabihin na ikaw. Kaya pupuntahan ko talaga type sa global $ Laki, global $ talahanayan, at ngayon ang aking mga pag-andar ay kumpleto na. Kaya hindi masyadong kasing simple ng dati, ngunit marahil kinuha ng mas kaunting oras kaysa sa C bersyon, marahil? OK. Kaya gawin ng check function na () ngayon hayaan. Ni makita kung ito ang hindi bababa sa kinuha Hayaan ang oras sa dulo na ito kinuha sa amin sa C. Kaya ipaalam sa akin sige at ipinapahayag tingnan bilang isang katangian. Dadalhin sa argumento salita, na pagpunta sa darating mula speller. At lamang ako pupunta upang suriin kung ang sumusunod na variable isset, table bracket strtolower ng salita - sabihin balansehin ang lahat ng aking mga panaklong - pagkatapos ay nagbabalik ng tunay. Iba Pa - na noon ay talagang ang matapang bahagi ng programang ito. Iba Pa, bumalik hindi totoo. Tapos na. Iyon check (). Ngayon, kung bakit gumagana ito? Well, isa akong nakapasa sa isang salita, na isang string. Dalawang, ako ng pagsuri sa loob ng hash talahanayan, sino ang tinatawag na $ talahanayan. Ako ng pagpilit na ito sa lowercase sa pamamagitan ng pagtawag isang function medyo katulad tolower () sa C, ngunit ito ang ginagawa ng buong salita, Hindi isang solong character. At kung iyon ay itinakda, sa ibang salita doon ay magtakda ng isang halaga, sa ibang salita, kung ito ay totoo, at pagkatapos ay oo, ito ay isang salita. Dahil itong ilagay ko doon sa pag-load ng (). At kung hindi, ako pagpunta sa bumalik hindi totoo. Ngayon ang iba ay madaling. Laki function na (), paano ang gagawin ko ito? Lubos kong gawin bumalik $ laki. Ngunit technically kailangan kong gawin ito nakakainis na bagay. At talagang up dinggin, ako pagtputol masyadong maraming isang sulok. Talaga kailangan kong gawin global $ talahanayan. Ngunit na sinasabi, alisan ng bala). Alisan ng bala () ay kahanga-hangang. Ang function na mag-ibis (). Paano ko gusto kong ipatupad alisan ng bala ()? Tapos na. OK. Kaya mag-ibis (), sa pamamahala ng memorya ay ganap na kinuha pag-aalaga ng para sa iyo sa isang bagay tulad ng PHP at marami ng mga wika mas mataas na antas. Kaya ito ay kamangha-manghang. Tulad ng kung bakit ang impiyerno ay ginugol namin ang nakalipas walong linggo plus sa C pagsulat sa malas talaga mabagal, talagang oras pag-ubos ng mga problema sa sampu-sampung ng mga oras ng ng gumagana sa ilalim ng aming sinturon? Well, para sa isang bagay, ito ay maaaring gumana masarap para sa maliit na mga programa. Ito ay tiyak na sped up ang aking oras-develop. Ngunit sabihin makita kung ano ang mangyayari sa tunay na mundo. Hayaan akong pumunta sa direktoryong ito sa isang terminal na window. Mayroong speller. At mapansin bilang isang bukod, at puwede mong Nakaranas na ito sa problema set anim o problema set pitong. Wala ka mahigpit na kailangang mag- magtapos ang PHP file na may. php. Kung inilagay mo ang isang line na tulad nang unang isa sa tuktok napaka, na ang isang espesyal na linya ng syntax na mahalagang ay nangangahulugan mahanap ang programa na tinatawag na PHP at gamitin ito sa bigyang-kahulugan ang file na ito. Kaya ba talagang nakakaalam ngayon walang sinuman na Ako nagpapatakbo ng isang program na PHP. Maaari ko ba itong tumakbo lamang bilang bagaman ito ay isang bagay na pinagsama-sama sa C. Ngunit narito ang bagay. Talaga, ni gawin muli ito ipaalam. Dropbox/pset6 /. Mayroong speller. OK, 0.44 segundo. Nakakuha ito ng mas mabilis na oras na ito. Ngayon pumunta sa ang bersyon na PHP ipaalam. Ugnay Nice. Ngunit sa tingin lamang kung magkano ang oras Naka-save na ako sa oras ng opisina. OK. Kaya 3.59 segundo, na talagang hindi umaandar ang tumpak na alinman. Ngunit iyon ay dahil mahaba kuwento maikli, kapag tapos ka sa pag-print out ito ng napakalaking halaga ng mga bagay-bagay sa screen, na mismo slows bagay pababa. Ano ito talaga ang kumuha ng CPU sa appliance ay 3.59 segundo, sa pag-ibahin sa C, na kung saan kinuha 0.44 segundo pinaka-kamakailan. Iyon ay tunay na isang order ng magnitude na naiiba. Kaya kung saan nanggagaling ay presyo na mula sa? Bakit ito ay kaya magkano ang mas mabagal? Bakit ang gumanap kaya mahina PHP? Danielle? Madla: Hindi mo ginawa talaga gumamit ng hash table. David MALAN: ko ay hindi talaga gumamit ng hash table. Kaya uri ng ko ng ginawa. Kaya ito ay isang nag-uugnay array. Malamang kung ang mga tao sa PHP ay talaga ang smart, ginagamit ang mga ito sa ilalim ng hood isang aktwal na talahanayan hash ipinatupad sa isang bagay tulad ng C o C + +. Ngunit. Oo. Madla: [hindi marinig]. David MALAN: Oo. Kaya ang bawat isa sa mga pag-andar na sinulat ko ngayon - talaga, maaari mong sabihin na sa sandaling higit sa isang maliit na louder? Madla: Ang bawat isa sa ang mga function na mong isama ay may maraming mga iba pang full kapasidad sa - David MALAN: Kaya na masyado nang totoo. Maraming higit pang overhead na kami hindi talaga nakikita sa pamamagitan ng tumututok lamang sa dictionary.php, na kung saan ko lang ang sinulat ni. Sa pamamagitan ng kaibahan, mayroong isang buong interpreter pagpunta sa background. Sa katunayan, kapag nagpatakbo ako sa programang ito, ito Hindi tumatakbo ang pinagsama-sama ng mga zero at mga bago Idinisenyo para sa aking Intel CPU. Sa halip, ito ay tumatakbo ang linya sa pamamagitan ng linya Code na PHP na mukhang eksakto tulad namin nai-type ito. At kaya sa tuwing ginagamit mo ang isang kahulugan ng wika, mo talaga ang babayaran ito presyo. Ito ay pagpunta sa tumagal ng ilang oras upang basahin ang ang iyong file itaas hanggang sa ibaba, ang natitira upang kanan, at pagkatapos ay isakatuparan bawat linya muli at muli. Ngayon sa katotohanan, lalo na sa web, Maaari mong aktwal na pabilisin ang prosesong ito sa pamamagitan ng caching ang mga resulta ng Code na PHP ini-kahulugan. At na ang may katuturan sa web, dahil kung mayroon kang hindi isa ng gumagamit tulad ng sa akin dito, ngunit 1,000 o 10,000 mga gumagamit, pagkatapos ay siguro ang unang pagkakataon na ang file ay na-access ito ay mabagal, ngunit pagkatapos noon ito ay lubhang mas mabilis. Ngunit ito masyadong, muli, ay isang kalakalan-off. At para sa isang bagay tulad ng isang data pananaliksik itakda, o kahit na isang bagay tulad ng malaking ito, ang iyong mga user nasain kalaunan simulan sa pakiramdam na paghina. Kaya sa maikling, kahulugan ng mga wika ay Sobra sa katanyagan, napaka-tanyag, at nang tapat ay marahil ang mga mga wika dapat maabot para kapag paglutas ng mga problema kasunod sa CS50. Ngunit mapagtanto kung magkano ang talagang paglalaan para sa ipinagkaloob sa ilalim ng hood talaga mga nakalipas na ilang linggo sa hash mga talahanayan, at mga puno, at pagsusubok, na kung saan ay ginagamit sa huli upang aktwal na ipatupad ang mga bagay tulad ng open bracket, square bracket, na kung saan kami ay maaari na ngayong mapasalamat mang-ahas. Kaya ipaalam sa tumagal ng isang hitsura ngayon sa web konteksto ito. At nabanggit ko huling beses na mayroong ng grupo ng mga superglobals sa PHP na ay hindi talaga may-katuturang sa command line. Ang mga ito ay mas may-katuturan sa konteksto ng gamit ang PHP sa isang web konteksto. Kaya't ang pagpapatakbo ng PHP sa isang web server sa pagkakasunud-sunod upang makabuo ng mga bagay tulad ng HTML. At glanced namin sa $ _GET at $ _POST, at na kung saan awtomatikong mga gumagamit ' ay nagtatapos up input lamang kung nagsumite ka ng bumubuo sa isang file na nagtatapos sa. PHP sa isang web server tulad ng appliance. Ngunit sa madaling sabi tingnan natin hayaan $ _COOKIE At $ _SESSION. Sa mga tuntunin lego, na kung ano ang isang cookie bilang Nauunawaan mo ito sa konteksto ng gamit ang web? Madla: File sa computer. David MALAN: Oo. Ito ay isang file sa computer ng gumagamit nakatanim sa pamamagitan ng anumang website mangyari mong bisitahin. Kaya kapag pumunta ka sa Facebook, kapag pumunta sa iyo sa bankofamerica.com, kapag pumunta sa iyo sa google.com, kapag pumunta ka sa halos anumang website sa mundo mga araw na ito, kabilang ang cs50.net, ang isang cookie ay nakatanim sa iyong computer, na kung saan ay alinman sa isang halaga na naka-imbak sa RAM sa iyong computer sa memorya ng iyong browser, o minsan sa katunayan ng isang file na naka-imbak sa iyong hard drive. At kung ano ang karaniwang naka-imbak sa file na iyon ay hindi ang iyong user name, hindi ang iyong password, karaniwang hindi isang bagay sensitive maliban kung ang website ay hindi kaya mabuti sa kanilang seguridad, ngunit sa halip ito ay isang malaking natatanging identifier kasama ng iba pang mga bagay. Isa itong malaking random na numero nakatanim sa iyong computer na ngunit maaari mong isipin bilang uri ng isang virtual na kamay stamp tulad ng mula sa isang club o ilang amusement park na ay nagbibigay-daan sa mga kawani, ang mga may-ari ng na serbisyo, upang matandaan kung sino ka. Kaya kung ang malaking random na numero ay tulad ng 12345678, bagaman na malinaw naman hindi masyadong random, sa tingin ng na bilang kamay stamp na kapag binisita mo ang facebook.com para sa unang pagkakataon, ang mga ito tatakan ng numerong iyon sa iyong kamay. At pagkatapos ay dahil nagsasalita ka ng HTTP, mo pagiging isang browser, at dahil Facebook malinaw naman nagsasalita ang parehong bilang isang web server, sinasabi ng protocol HTTP na anumang oras sa dakong huli kang bumisita facebook.com, maging ito man ay isang pangalawang mamaya, isang oras sa paglaon, kahit sa susunod na araw, kaya hangga't mayroon kang hindi tahasan log out, na epektibong ay tulad ng paghuhugas ng iyong mga kamay. HTTP sabi dapat mong ipakita ang iyong kamay stamp sa bawat oras na bumalik sa website na iyon. Ano Facebook pagkatapos ay ay sila Tignan natin ang kamay stamp at sinasabi nila, oh, 123456789. Hindi ko alam kung sa unang sulyap na ito ay David Malan sa Cambridge, Massachusetts, ngunit maaari nilang tingnan ang kanilang database at sabihin, oh, ang tao sa kung saan ang computer na namin nakatanim 123456789 ay David Malan mula sa Cambridge, Massachusetts. Ipakita sa gumagamit na pagkatapos ng kanyang profile Hayaang pahina o ang kanyang Feed News. Ngunit mayroong problema dito kung ito ay kung paano talaga gumagana ang web. Hayaan ang kumuha ng isang pagtingin sa isang mabilis na halimbawa. Sabihin talagang pumunta sa sinasabi facebook.com. Ngunit bago kami pumunta doon, sabihin sa akin sige at buksan up ang Chrome ng Inspector pababa dito. Hayaan akong tumingin sa tab na network. At ngayon sabihin sige at i-type sa https://facebook.com. At ako paggawa na kaya na hindi namin makita lahat ng mga pag-redirect at pag-aaksaya oras ng pagtingin sa mga. Hayaan ang mga hit sa akin ang enter. Ayos lang. Nakakakita kami ng isang buong bungkos ng mga kahilingan. Mayroong pagdating Facebook. Mayroong ang maramihang mga file. At dito, bawat aking pagbanggit ng latency huling oras, na ng maraming mga kahilingan ng HTTP. Ngunit ang unang isa ay marahil ang pinaka-kagiliw-giliw. Kaya ni-scroll pababa dito hayaan, at Kukunin ko mag-zoom in sa isang segundo. Ito ay magiging uri ng gulo, ngunit sabihin makita. Facebook ay pagpapadala sa amin ng isang ang maramihang mga bagay-bagay. Ngunit aba, kawili-wili. Ang mga ito ay planting hindi isa, ngunit apat kamay selyo papunta sa aking kamay dito. Set-cookie, Set-cookie, set-cookie, set-cookie. At may ilang mga tampok dito. Ang lahat ng mga ito banggitin ang ilang mga uri ng pag-expire. At mukhang Facebook ay umaasa upang tandaan ako hanggang 2015. Kaya na siguro ang oras sa pamamagitan ng kung aling mga Dapat ba akong mag-log out o idedetalye lang nila awtomatikong ipinapalagay ako hindi bumabalik. Kaya na talagang isang disenteng tagal ng oras. At mayroong ilang mga iba pang mga bagay na nangyayari sa dito. Lumilitaw ang cookie na ito upang maging papuwersa tinanggal na ni na sinasabi expire na ito sa 1970 bago umiral ang mga cookies. Kaya ang browser ay lamang ng pagpunta upang angkinin ang OK, na tulad ng paghuhugas ng mga kamay stamp. Ngunit ngayon kapag gumagawa ng aking browser isang kasunod na kahilingan - ipaalam sa akin sige at gawin ito muli at reload. Ngayon hayaan mo akong mag-scroll pabalik sa tuktok kahilingan at bumaba dito, humiling ng header. Pansinin na ito. Kaya ngayon ako sa ilalim ng hindi mga header ng tugon, ngunit napansin ang nakasulat sa kahilingan header. At napansin na ang aking browser bilang bahagi ng kahilingan nito pagkatapos ng pagpindot reload na may Nagpadala ng hindi bababa sa mga sumusunod na impormasyon. Hindi nakatakda-cookie, ngunit cookie. Kaya ito ay ang linya, ang HTTP header kaya magsalita, kung saan ang aking browser ay uri ng nang wala ang aking pag-alam ito nagtatanghal ang aking kamay para sa inspeksyon Facebook ni. Kaya mga cookies na ito ay maaaring maging ginamit pagkatapos ay para sa kung ano? Upang matandaan kung sino ka, o tandaan kung paano maraming beses ka nakapunta doon, o talaga kahit ano. Kaya dito ay counter.php. At hayaan mo akong mag-zoom in sa mga font. At sa bawat oras na i-reload ko ang pahinang ito, na notice ito ay pag-alala kung gaano karaming beses Nakapunta ako doon. Well, hindi iyon ang lahat na kahanga-hanga. Isara ni lamang na tab Hayaan, at ngayon sabihin bumalik sa http://localhost/counter.php. Oh, na ay nakawiwili. Ito remembered pa rin, kahit na bagama't sarado ko ang tab. At nang tapat, kung isinara ko ang browser, kung naipatupad sa tamang paraan, ako maaari pa ring tandaan na ang user na ito ay sino siya ay ang unang pagkakataon, at isang beses lang pumunta ako sa menu ng Chrome, na sa paglipas dito ay dito, at pumunta sa Kasaysayan, at i-click ang I-clear ang Data ng Pag-browse, bilang ay maaaring magkaroon ng ilan sa inyo sa nakaraan, lamang pagkatapos ang iyong cookies talaga matatanggal sa panahon ng web pag-unlad. Kaya, kung pumunta kami - ni isara up gedit dito ipaalam. At kung pumunta kami ngayon sa file na ito. Hayaan akong pumunta sa aming vhosts / localhost / publiko, at ipaalam sa akin gawin counter.php. Pansinin na ito ay isang magandang simpleng programa. Ito ay isang medyo simple website. Kaya sa tuktok ng file lamang ang mga komento. Ngunit narito ang isang bagong linya na maaari mong Nakita nasa p-set pitong, session_start (). Ito ay isang linya ng code na PHP na lubos na nagsasabi sa mga web server, ginagawa sigurado na tatakan ng mga kamay at gumawa ng mga Siguraduhing suriin ang kamay ng mga selyo. Iyon lang ang linya na gumagana, at ito ang lahat ng mga proseso na para sa amin. Pagkatapos mapansin lang ang nakuha ko dalawang sangay dito. Kung ang sagot na key sa loob ng ito espesyal na global variable na tinatawag na $ _SESSION Ay naka-set - sa ibang salita, kung mayroong ilang mga halaga doon - hayaan makakuha ng ito at mag-store ito sa isang lokal na variable na tinatawag na $ counter. Iba Pa, magtalaga ng $ counter ipaalam ang default na halaga ng 0. Ngayon narito ang isang aspeto ng PHP na Parehong pagpapala at isang sumpa. PHP ay isang maliit na nanggigitata. Kaya samantalang sa C, ano ang gagawin ang ang saklaw ng counter naging alinman dito o dito? Ito sana ay nai ikukulong sa mga kulot tirante. Hulaan kung ano? Sa PHP, umiiral na ito kahit na sa labas ng mga kulot tirante, dito, at dito, at dito, at dito, at kahit pababa sa ibaba. Kaya sinasabi ko ito ay isang pagpapala sa kamalayan na hindi mo kailangang isipin bilang matigas tulad ng ginawa namin linggo nakaraan. Ngunit ito ay din ng isang bit ng isang sumpa sa na hindi mahalaga kung saan mo gamitin ang isang variable sa PHP, ng hindi bababa sa isang program na tulad nito, ito ay naa-access sa buong mundo para sa mas mahusay o mas masahol pa para sa. Kaya ikaw ay may upang panatilihin sa isip na ngayon ang iyong mga variable ay hindi maaaring hindi natukoy. Maaaring tinukoy mo ang mga ito sa ibang lugar. Ngunit kung ano ako pagpunta sa gawin sa huli? Pupunta ako upang mag-imbak sa loob ng global na variable na bilang isang halaga ng counter key ang resulta ng paggawa counter plus 1. Kaya ito ay lamang ang palatuusan na nagsasagawa ng incrementation ng na counter. At ang katotohanan na ako ang pag-iimbak na halaga pabalik dito ay kung nangangahulugan na mahalagang i-update ang database upang tandaan na 123456789 gumagamit ay naging dito dalawang beses. At kapag ito gagawin ko muli sa susunod na oras ko i-reload ang pahina, ito ay pagpunta sa suriin ang aking kamay stamp at sabihin, oh, 123456789 gumagamit ay mayroon na ngayong inalisan dito tatlong beses. At kaya kung ano ang PHP at katulad na mga wika ang ginagawa para sa atin ay ang mga ito ay ang pag-uunawa kung paano at kung saan at kung gaano katagal mag-imbak ng mga halaga sa ito espesyal na superglobal. At ito superglobal sa susunod na oras ko bisitahin ang pahina ay isang uri ng magically pre-may naninirahan, na puno ng mga halaga na ay doon sa huling panahon na binisita mo ang, kung na noon ay isang segundong nakalipas, sa isang linggo nakaraan, o sa 2013 at ngayon kami ay pakikipag-usap tungkol sa 2015. PHP at ang pag-aalaga tumagal web server ng lahat ng iyon para sa iyo. Madla: [hindi marinig]. David MALAN: Variable sa PHP ay mahalagang palaging global maliban kung Ipinahahayag ang mga ito sa loob ng isang function, at pagkatapos ay ang mga ito ay lokal sa ang pag-andar lamang. Ngunit dahil hindi ko na nakasulat ang anumang mga mga pag-andar, ang mga ito ay epektibong global sa buong aking buong file dito. Madla: Mayroon bang paraan upang gumawa ng mga ito lokal? David MALAN: Mayroon bang anumang paraan upang gumawa ng mga ito lokal? Tanging sa pamamagitan ng pambalot na ang mga ito sa mga pag-andar. Alin sa pinakabagong bersyon ng PHP, maaari mong gawin ito gamit ang isang hindi nakikilalang function. Ngunit higit pa sa na sa konteksto ng JavaScript. Ngunit ang maikling sagot ay hindi. Ang isang mas mahabang sagot ay oo. Nice. Magandang katanungan pagsusulit. Ayos lang. Kaya bilang wakas, ang pahina mismo ay talagang kaakit-akit simple. Pansinin na sa sandaling lumabas ako mode PHP, pagpapabalik na ang lahat ng mga bagay-bagay na ito pababa sa ibaba ay pagpunta lamang upang dumura out raw sa browser. Alin ang masarap, dahil gusto ko upang magpadala ng ang gumagamit ng ilang mga HTML, ngunit ko nais upang magilas na update na HTML. At isang paraan maaari kong gawin ito ay upang ayusin ng masyadong mabilis drop pabalik sa PHP mode, gamitin ang open bracket tandang pananong katumbas lagdaan, at pagkatapos ay i-output ang halaga ng counter. O kung ito ang hitsura ng isang maliit na misteriyoso, ito katumbas ng pag-sign ay talagang lamang ng ilang sintaktik asukal para sa printf ($ counter). Ngunit nang tapat, na ang isang ilan lamang mainit ang ulo at isang maliit na nakakainis na i-type. Kaya PHP napaka mabuti Nag-aalok ang tampok na ito kung saan maaari kang lamang ito sinasabi nang higit pa succinctly sa parehong paraan. Kaya kung ano ang nangyayari sa ilalim ng hood? Ng mabilis na makita ang network ng Hayaan tab dito para counter.php. At ipaalam sa akin sige at unang i-clear ng iyong cookies ipaalam. Sabihin-clear ang data sa pag-browse mula noong sa simula ng panahon. Ngayon ay bumalik sa paglipas dito ipaalam. Ngayon i-reload ang pahina ipaalam. At ako pabalik sa zero. Dahil ang aking kamay stamp ay na-washed, Ako ngayon kumuha ng bagong cookie. Sa katunayan kung tiningnan ko sa tab na network at tumingin sa mga header ng tugon, abiso na ang appliance ay pagpapadala sa akin isang cookie na ang pangalan ay medo nagkataon, ngunit uri ng makatwirang, PHPSESSID. At ito ay pagpapadala sa akin ito talaga malaki random na numero. Ito ay hindi pa isang numero. Ito ay hindi masyadong hexadecimal. Ito ay ilang mga uri ng mga alphanumeric string, ngunit baka ito ay random. At iyon ay ang kamay stamp kaya upang magsalita na ako nagre-refer sa. Samantala kung nag-click ako reload at pagkatapos ay tumingin sa ito pangalawang linya para sa aking pangalawang kahilingan, notice ngayon na ang aking kahilingan mga header isama katumbas ito PHPSESSID, hindi set-cookie, ngunit cookie lamang. At iyon ang pagtatanghal aking browser ng aking kamay stamp. Kaya ngayon bilang isang teaser, at kaming makipag-usap nang higit pa tungkol dito sa o kaya sa isang linggo, ngunit sa anong paraan ang mga ito gawin mo maaaring masugatan, iyong Facebook account maaaring masugatan, at iba pang mga naturang mga account ng kahinaan? Madla: Kung ang isang tao ay may ang iyong mga cookie. David MALAN: Oo, kung may isang taong May iyong cookie. Ko ibig sabihin ng tunay, tulad ng ilan sa inyo maaaring Sinubukan sa tulad ng isang club o isang amusement park, kung susubukan mo ang isang bagay tulad nito upang kopyahin ang mga selyo, kahit na paurong papunta sa kamay ng ibang tao, at pagkatapos siya ay nagtatanghal ng ito bilang kanilang sarili, kung ito talaga ang hitsura magkakahawig, 123456789, pagkatapos ay ang web server ay tila lamang ng pagpunta sa pinagkakatiwalaan na gumagamit na iyon ay sa iyo. At ito ay talagang isang pangunahing pagbabanta anumang oras na gamitin mo ang mga cookies dahil kung may isang taong lang Katatawanan kaya upang sabihin ang iyong cookie, figure out kung ano ito ay, alinman sa pamamagitan ng tunay na pagkopya ito pamamagitan ng pagtingin sa iyong computer at sa pagiging tulad ng, OK. Cookie David ay JJ3JIK at iba pa, at pagkatapos ay ang mga ito ay sapat na smart na malaman kung paano uri ng manu-manong ipadala na cookie mula sa isang browser o mula sa isang programa nila magsulat, ng dati nilang lahat-lahat mag-log sa isang website tulad ng sa iyo. Ito ay hindi na mahirap upang magpanggap na maging ibang tao maliban kung muling bisitahin kami p-set dalawang, na ipinakilala kung ano? Madla: Cryptography. David MALAN: Ang isang maliit na bit ng cryptography. Simple cryptography, ng hindi bababa sa standard edition, ngunit crypto gayunman. mas mababa. Kaya ito ay lumiliko out kung encrypt mo ang lahat ng mga header ng paggamit ng isang bagay na iyong maaaring ngayon malaman ang higit pa pabihasa bilang SSL, secure socket layer, o https:// mga URL, pagkatapos ang lahat ng mga bagay na ito nakapunta namin glancing sa ay naka-encrypt talaga, na nangangahulugan na ito ay tulad mo hindi maaaring magbasa ng mga kamay stamp. Tanging facebook.com maaari, o google.com, o sa kasong ito, ang appliance maaari basahin na kamay stamp. Tragically bagaman, at muli, ito ay lahat masyadong naaangkop sa NSA bagay-bagay ng late, kahit SSL ay marupok. At ito ay talagang hindi na mahirap sa kahit crack-encrypt na. Hindi kaya magkano sa pamamagitan ng pag-crack ng encryption, ngunit sa pamamagitan ng tricking ang browser sa decrypting ang data maaga. Ngunit muli, magpapadala kami sa iyo mang-ulol may na bago ang haba. Para sa ngayon, matakot lamang. Ito ay tragically uri ng totoo. Ayos lang. Kaya, kung saan ang mga ito umalis ngayon sa amin? Well, ni gawin ito ipaalam. Sabihin sige at magsagawa ng mabilis teaser bago namin kumuha ng pahinga. At sa tingin ko gagamitin namin nagtatagal ng kaunti mas mahaba ngayon, ngunit kami ay pagpunta sa sumisid sa bagong bagay tatak at sexy, na paghahasa iyong gana sa pagkain para sa kahit na higit pa. Kaya na teaser ang. Kaya SQL, nagsimula kami ng pakikipag-usap tungkol sa napaka daglian huling beses. Makikita mo talaga makuha ang iyong mga kamay marumi sa ilan sa mga ito sa p-set pitong. At sa mga tuntunin lego, na kung ano ang ginagawa SQL - S-T-L - magawa para sa iyo? Ano ito? Oo. Madla: Sabihin mo data access. David MALAN: Oo. Ito sabihin mo access ang data sa isang database. Nakaayos sa Wika Query. At ito ay mahalagang isang programming language. Mayroong mga tampok ng ito na hindi namin kahit na gagamitin sa klase. Ngunit maaari mo nang epektibo tukuyin ang mga function. Ang mga ito ay tinatawag na naka-imbak mga pamamaraan sa SQL. Ngunit itinatago namin ito medyo simple at lamang gamitin ito para sa ilang mga pangunahing mga operasyon tulad ng pagpili ng data, pagpasok ng data, pag-update ng data, at pagtanggal ng data. At maaari mo ba talagang mag-isip ng isang database, tulad ng isang database ng SQL, bilang lamang pagiging Microsoft Excel. Dahil SQL ay tumutukoy sa isang pamanggit database, kung saan kaugnayan nangangahulugan lamang mga talahanayan. Mga hilera at mga hanay. Kaya kahit ano maaari mong ilagay sa isang spreadsheet tulad nito o Google Docs, maaari mong ilagay sa isang database SQL sa pamamagitan ng deklarasyon ng lamesa. Ngayon, paano mo talagang i-access ang na impormasyon? Well, may mga utos o mga query tulad nito. Piliin, INSERT, UPDATE, at ALISIN. At para sa pinaka-bahagi, ang mga ay ang mga apat lamang sangkap kakailanganin mong gawin ang isang bagay pa masyadong powerfully sa problema set pitong. Ngayon bumalik sa araw, gagawin mo talaga makipag-ugnayan sa isang database sa isang black and white ang terminal na window sa isang nagbi-blink na prompt na katulad nito. At ang database kami ay tumatakbo sa appliance ay tinatawag na MySQL, na libre at open source database engine. Kung mo ang Google at basahin ang Wikipedia artikulo, malalaman mo na ang pangalan ay ng kaunting transition para sa ilang mga mga bersyon ng Linux. Maria database ay talagang isang tinidor kaya magsalita ng MySQL. Long maikling kuwento, Oracle binili MySQL. Oracle ay isang malaking kumpanya. Ang mga tao ay na nag-aalala na gagawin ito hindi na mananatili pa masyadong bilang open source, kaya ito ay isang kopya lang ng MySQL na libre pa rin, bukas pa rin ang pinagmulan, at na naka-install sa Fedora Linux sa pamamagitan ng default. Ngunit ito ay uri ng isang sakit sa leeg upang makakuha ng mga pamilyar na may database ganitong paraan. Kaya isama natin sa CS50 appliance isang libreng open source tool na tinatawag na phpMyAdmin. Isang pagkakataon lamang na ito ay nakasulat sa PHP. Walang saligan kailangan para sa PHP dito. Ngunit ito lamang ang tool ng web-based na namin nai-download nang libre, na naka-install sa ang appliance, na nagbibigay-daan sa amin upang magkaroon ng isang graphical user interface na kung saan upang galugarin ang p-set pitong database na may kung saan upang lumikha ng mga bagong database, sabihin para sa iyong sariling huling proyekto kung ikaw ay parang, at sa huli lumikha pabagu-bagong mga website tulad ng CS50 Pananalapi na nagbibigay-daan sa iyo upang i-query ng data at i-update ang pabago-bagong data. Hindi ka pagpunta sa may upang magamit lamang isang simpleng text file o CSV. Maaari mong aktwal na gamitin ang isang smart database programa upang maaari mong execute nang higit pa sopistikadong mga query pa sa pagbabasa sa pamamagitan ng lahat ng bagay linearly. Kaya halimbawa, ito ay kung ano ang bigyan namin sa iyo sa labas ng kahon para sa p-set pitong. Ito ay isang talahanayan na may tila hindi bababa sa tatlong haligi, isa rito ay username, isa rito ay hash, at ang iba pang mga na kung saan ay ID. Ngunit ang mga kagiliw-giliw na bagay, at lamang sa mang-ulol out isa-iisip dito, username ay siguro na natatangi, tama? Ibig kong sabihin, karamihan sa anumang website, kung mayroon kang isang username, mayroong Hindi maaaring dalawang caesars. May hindi maaaring maging dalawang malans. May hindi maaaring maging dalawang jharvards. Ang natatanging. Kung hindi man, hindi nila alam kung saan jharvard ito talaga. Kaya kung ano ang maaaring ang pagganyak para sa din pagkakaroon ng ikatlong haligi sa kaliwa mayroong tinatawag na ID, na kamukha ng isang bilang na katulad natatanging? Ito pakiramdam ng isang maliit na kalabisan sa akin sa unang tingin. Bakit maaari itong maging nakakahimok upang magkaroon hindi lamang natatanging username, ngunit ring natatanging numero? Madla: maaari silang ang parehong password. David MALAN: maaaring mayroon Tao ang parehong password, sigurado. Iyon ay maaaring talagang mangyari. Ngunit kung mayroon silang ito natatanging username, ako Gusto magtaltalan na iyon ay hindi talaga matter, dahil kung type sila sa kanilang username, kailangan ko lang na tignan ang kanilang password, ang kanilang hash hinggil doon. Bakit iba? Madla: Mas mabilis na naghahanap. David MALAN: Mas mabilis na naghahanap. Bakit? Madla: ID ay isa lamang. David MALAN: ID ay isang character lamang, o upang maging mas tumpak, ito ay isang numero, kaya marahil ito ay 32 bits o ang isang bagay tulad na. Sapagkat ang username, sa malas Jason Up Hirschhorn ni doon ay isang uri ng ridiculously mahaba, at ito ay pagpunta sa dalhin ako ng maraming mas maraming oras upang string ihambing H-ko-R-S-C-H-H-O-R-N, at siguro isang / 0 o isang bagay tulad na, sa pagkakasunud-sunod upang tumingin up Jason, bilang kabaligtaran sa makatarungan sinasabi ninyo akong bigyan ng gumagamit bilang dalawang. Iyon ay 32 bits. Ito ay isang solong int na mayroon kang upang ihambing. At sa katunayan, iyon mismo kung bakit mga database ay may posibilidad na magtalaga natatanging ID na hilera sa kanila. Ngayon kung ano ang iba pang mga uri ng data ang naroon bukod sa int at sa malas mga string tulad nito? Well, upang maging mas tamang, Mga database ng SQL, tulad ng MySQL, may pansamantalang trabaho mga patlang. At pansamantalang trabaho ng kaunti misleadingly ay hindi isang solong pansamantalang trabaho. Ang isang patlang ng pansamantalang trabaho sa isang MySQL database ay isa o higit pang mga character, ngunit ito ay isang naayos na bilang ng mga character. Kaya halimbawa, kung pumunta ako sa ibabaw sa phpMyAdmin bilang na maaaring mayroon ka na, o sa lalong madaling panahon ay magse-set ng problema sa pitong, at pumunta ako sa aking database, at para lang sa kasiyahan, lumikha ng isang bagong talahanayan na tinatawag na ipaalam subukan sa mga hanay ng dalawang lamang. Kukunin ko pagkatapos i-click ang Go. At ito ay magiging medyo pamilyar, lalo na bilang manghihinang mo sa paligid sa iyong sariling. Dito maaaring nagta-type ako ID upang lumikha ng isang bagong talahanayan ng uri ng int. Ngunit dito ay maaaring nagta-type ako username sa muling likhain na mas maaga talahanayan. At napansin ba akong magkaroon ang maramihang ng mga uri upang pumili mula sa. At ito masyadong ang dahilan kung bakit phpMyAdmin ay uri ng magaling. Ito ay uri ng self-pagtuturo sa iyo na Maaari lamang uri ng point, at i-click, at tumingin sa dropdown na menu, at magpakilala mula sa na kung ano ang mga kapangyarihan ng SQL ay nagbibigay sa iyo. At sa katunayan, kung pinili ko ang pansamantalang trabaho, ako pagkatapos mayroon upang tukuyin ang haba, o kung paano maraming mga halaga, kung gaano karaming karakter. Kaya napaka-karaniwang mga halaga ay mga bagay tulad ng 255, ngunit iyan ay isang maliit na mahaba. Karaniwan ay walong para sa isang username. Ngunit iyon lamang ang isang maliit na maliit na mga araw na ito. Kaya ito ay isang desisyon disenyo. Ito ba ay 8 character na max, 32, 255, 1000? Ito ay talagang nakasalalay sa iyo. Ngunit isang patlang pansamantalang trabaho ay isang nakapirming numero. Kaya pumili masyadong kaunting at ikaw ay uri ng screwed kung gusto mo ng mas mahabang username. Pumili ng masyadong maraming at kung ano ang ang downside? Madla: [hindi marinig]. David MALAN: Ito ay mapag-aksaya. Tulad ng sa C, kung mayroon kang isang mas malaking tipak ng memory kaysa sa kailangan mo, ikaw ay pag-aaksaya lamang ng oras at pag-aaksaya ng espasyo. Kaya bilang isang kahalili, umiiral doon VARCHAR, na malulutas nito ang problemang ito sa pamamagitan ng pagpapagamot ng haba hindi bilang isang nakapirming haba, ngunit bilang isang maximum na haba, at ang paggamit ng isang variable na bilang ng mga karakter, na pagkatapos ay may gawi na gamitin lamang ng maraming mga karakter tulad ng sa iyo talagang kailangan. Iyan perpekto. Bakit hindi namin mapupuksa ang Pagkatapos i-type ang data ng pansamantalang trabaho? Ano nga ang downside ng gamit VARCHARs, na tunog tulad ng ito ay isang magaling na panalo? Oo? Madla: [hindi marinig]. David MALAN: OK, mabuti. Kaya kung ang lahat ng iyong data ay pareho haba, kung ano ang mga pag-aalala? Madla: Dahil ka pag-aaksaya data sa pamamagitan ng pagsasabi sa kanila lahat. David MALAN: Kaya kung ang lahat ng iyong data ay ang parehong haba, bagaman, Gusto ko magtaltalan na pagtukoy ng isang maximum na haba sa VARCHAR ay hindi naiiba mula sa pagtukoy ng isang nakapirming haba sa pansamantalang trabaho kung alam mo ang numerong iyon nang maaga. Ngunit mayroong sa katunayan, at idedetalye uri ng ko extract mula sa na sagot ang katotohanan na mayroong pa rin ng isang max, na dati maging nakakainis, lalo na kung makaharap pangalan ng isang tao na hindi karaniwang mahaba na hindi mo ginawa inaasahan. At ito ay mas mababa ng kaunti mahusay din upang aktwal na naghahanap sa VARCHARs bilang kabaligtaran sa paghahanap char, lalo na para sa mahabang mga talahanayan na may maraming at ng maraming data. Kaya dito masyadong, pampakay ay muli hindi halata choice. Kaya lamang upang mabigyan ka ng ideya sa iba pang mga mga uri ng data na maaaring ma ng interes alinman para sa p-set pitong o sa sa hinaharap, may int. Mayroong BIGINT, na ay tulad ng mahabang mahaba. Ito ay may gawi na maging 64 bit. Mayroong decimal, na makikita mo sa ang hanay ng problema, na kung saan ay mas mas malinis na sagot sa mga problema namin Nakatagpo na may float at lumulutang ituro imprecision. At pagkatapos ay mayroong DATETIME. Mayroong literal na isang uri ng data na may upang magmukhang isang taon, isang buwan, sa isang araw, at isang oras, minuto, at segundo. Ngunit mga database ng SQL ay mayroon ding bagay kami tatawag sa ini-index. At isang index ay isang bagay na sa iyo tukuyin kapag lumilikha ng talahanayan upang gumawa ng mga paghahanap at iba pang mga pagpapaandar mas mabisa. Sa partikular, mayroong isang bagay na tinatawag na ang PANGUNAHIN index na maaari mong Ipinahahayag tulad ng sumusunod. Ginawa namin ito para sa iyo sa talahanayan ng mga gumagamit bigyan ka namin. Ngunit mapansin kung saan ako nang manu-mano nililikha talahanayan ng mga gumagamit dito na nagbibigay sa ito ng isang pangalan ng user. Tinukoy na ako ng ID. Tinukoy ko int. Tinukoy ko username sa maximum na 32 mga character. Ngunit kung panatilihin namin ang pag-scroll sa ito nang walang kinikilingan malawak na window, paunawa mayroong isang bungkos ng iba pang mga bagay ang maaari kong tukuyin. Ang isa, ang maaari kong tukuyin katangian tulad ng, alam mo na kung ano, ito Int dapat na unsigned. Hindi ko nais negatibong numero, kaya ni gawin itong unsigned ipaalam. Walang bisa ay hindi nauugnay dito dahil Nais ko bawat gumagamit upang magkaroon ng isang natatanging numero. Hindi ko gusto ito upang maging null. Ngunit ito ay kawili-wili. Maaari ko bang tukuyin na ang ID ay alinman ang pangunahing key ng database, o ito ay natatangi, o ito ay na-index, o buong teksto. Kaya para sa mga layuning ngayong araw, mahaba ang kuwento maikling, PANGUNAHIN ay nangangahulugan na ito at magtataglay maging parehong conceptually at technically sa field na ginagamit namin upang katangi-tangi kilalanin ang mga gumagamit. Kaya kapag tumingin up kami ng mga gumagamit, ito ang uri ng isang pangako upang tumingin sa kanila up karamihan sa pamamagitan ng na natatanging identifier. At ang mga database ay tinitiyak na kung ikaw may user numero 3, hindi mo magagawa pisikal na magpasok ng isa pang user may na parehong numero 3. Ang database ay lamang tanggihan upang i-save ang iyong mga pagbabago. Aling ay isang magandang bagay, dahil maaari ka protektahan ang iyong sarili mula sa iyong sarili. sarili Bilang kahalili, para sa username. Kaya sa pangalawang hilera, pagpapabalik, ay ang patlang ng username. Kaya ang pangalawang hilera dito ay username, tulad ng ginawa namin sa malayong kaliwa doon. Kaya ano pa ang maaaring nais kong tukuyin? Hindi ako pinapayagan, ayon sa SQL, upang tukuyin ang dalawang pangunahing mga susi. maaari mong tukuyin ang isang magkasanib na key kung saan mo tumingin sa parehong patlang, ngunit hindi sila makakapag isa-isa maging pangunahing key. Kaya na palabas ng tanong. Kaya na maaaring gusto kong piliin? Well, NATATANGING ay katulad sa espiritu sa isang pangunahing key kung saan mo tukuyin ito patlang ay dapat na natatangi, subalit ito ay hindi pagpunta sa maging ang isa Ginagamit ko sa lahat ng oras. At hindi namin pagpunta sa gamitin ang isang ito ang lahat ng ang panahon para sa kung ano ang dahilan muli? Ito ay mas mabagal potensyal na kung ito ay isang mahaba ang username. Ito ay lamang ng isang pag-aaksaya ng oras. INDEX, samantala, ay tinutukoy na ito hindi pagpunta sa maging natatangi, ngunit Gusto ko mo upang gumana ang iyong magic sa ilalim ng hood upang gawin itong mas mabilis na para sa akin upang maghanap sa patlang na ito. Kaya marahil hindi ito katuturang dito. Para sa username, Gusto ko magtaltalan na NATATANGING ay isang magandang sagot. Ngunit ipagpalagay na gumawa kami ng mga gumagamit higit pa kagiliw-giliw kaysa lamang mga username, hashes, at mga numero ng ID. Paano kung nagbigay kami ng mga tao buong pangalan? Paano kung binigyan namin sila ng mga address at iba pang mga data tungkol sa mga ito? Well, kung tinukoy mo na ang isang haligi sa isang database ay na-index, ibig sabihin nito ay na MySQL, o Oracle, o anumang database ang ginagamit mo, dapat na gumana magic nito at gamitin ang ilang mga uri ng magarbong data istraktura tulad ng isang puno, o isang trie, o isang hash talahanayan, o isang bagay upang magarantiya na kapag naghanap ka para sa data gamit ang piliin sa partikular na patlang - tulad ng ipakita sa akin ang lahat ng tao na naninirahan sa Oxford Street. Ang isang query tulad na. Kung ikaw ay tinukoy nang maaga na Gusto mo ng isang index sa patlang na iyon, ang paghahanap ay magiging magkano, mas mabilis. Kung hindi mo tukuyin ang isang index, ang pinakamahusay na Maaari mong gawin ay isang linear paghahanap kung hindi ito pinagsunod-sunod. Ngunit kung tinukoy mo ang INDEX, ang matalino mga tao na ginawa sa database - mga taong katulad mo na ngayon alam mga puno at pagsusubok at hash talahanayan - Awtomatikong bumuo ng ganoong data istruktura sa RAM upang matiyak na sa mga paghahanap ay mas mabilis. FULLTEXT samantala ay katulad sa espiritu, ngunit nagbibigay-daan sa iyo upang gawin wildcard paghahanap, tulad ng ipakita sa akin ang lahat ng tao na nakatira sa mga kalye na nagsisimula sa ang sulat O para sa kahit anong dahilan. Maaari mong gawin wildcard na paghahanap tulad na. O kaya naman, mas nakakahimok ang mga bagay tulad ng palabas sa akin sa lahat na mayroong salita - ipakita sa akin ang lahat ng tao na ang pangalan ay nagsisimula na may partikular na titik. Maaari kang maghanap para sa mga keyword sa ganitong paraan. Ayos lang. Kaya, mga pagkakataon sa disenyo may potensyal. May mga iba na idedetalye ko iwagayway ang aking mga kamay sa. Ito ay lumiliko out na maaari kang magkaroon ng iba't ibang mga storage engine. At ito ay mas arcane kaysa kailangan namin tiyak para sa problemang set pitong. Sa pamamagitan ng default, ka guys ay gumagamit ng isang bagay na tinatawag na InnoDB. Makikita mo ang pagbanggit ng ito sa isang lugar sa interface phpMyAdmin ng pinaka-malamang. Ngunit malaman na mayroong iba pang mga disenyo mga pagpapasya na ng mga potensyal na interes ay panghuling proyekto kung gawin mo ng isang bagay na web-based. Ngunit ni gawin ito ipaalam. Sabihin sige at ilagay ito sa ang screen bilang isang teaser para sa isang kuwento kinasasangkutan mo, isang kasama sa kuwarto, at isang baso ng gatas. Hayaan ang kumuha ng isang dalawang minutong o kaya masira dito. At kung maaari mong manatili sa paligid ng dumating, sabihin pabalik, tumingin ng kaunti pa sa SQL, at pagkatapos ng kaunting JavaScript sa p-set walong nasa isip. Ayos lang. Kaya, sabihin kumuha ka ng pag-iisip tungkol sa isang sulok kaso na maaaring napaka madaling pumailanglang sa konteksto ng paggamit ng isang database, o nang tapat, kahit na gamit ang real bagay mundo tulad ng mga ATM upang makakuha ng pera. Kaya narito ang isang refrigerator. Ipagpalagay na mayroon ka ng isa masyadong sa iyong dorm o sa iyong bahay. At mayroon ka ng isang kasama sa kuwarto, at pareho ng Talaga bang gatas halimbawa. Kaya't dumating ka sa bahay mula sa klase ng isang araw. Siya ay hindi pa pabalik. Buksan mo ang refrigerator. Talagang gusto mo ng isang malaking baso ng gatas. Walang gatas. Kaya ano ang gagawin mo? Isara mo ang refrigerator. Grab mo ang iyong mga susi. Ikaw pumunta out sa parisukat. At makakakuha ka sa linya sa CVS sa mga bagay sa sarili checkout, na palaging magtagal kaysa sa aktwal na pagkakaroon ng Kahero. Sa papaano mang paraan. Kaya pagkatapos, samantala, dot tuldok tuldok, ang iyong kasama sa kuwarto ay tahanan at siya ay katulad ay may isang pagmimithi para sa ilang mga gatas. Kaya siya ay bubukas ang refrigerator, mukhang sa loob, at oh, mapahamak. Walang gatas. Kaya siya o ulo out siya, ang mangyayari sa pumunta upang ang iba pang CVS, na noon ay lamang ng isang i-block ang layo para sa ilang mga dahilan, at siya o nakakakuha siya sa linya upang bumili ng ilang mga gatas. Samantala, napunta ka sa bahay, siya o pagdating niya sa bahay, at kung ano ang ginagawa mo sa huli ay may? Dalawang beses bilang magkano ang gatas. Ngunit hindi mo talaga gusto gatas na magkano. Kaya ngayon ikaw ay may kaya magkano ang gatas na ngayon isa sa mga ito ay lamang ng pagpunta sa pumunta mapanis Sa kalaunan. Kaya ito ay isang ganap na hindi maayos problema. Mag-right? Kaya kung ano ang nangyari? Kaya sa panimula, ito ang uri ng isang katawa-tawa halimbawa. Ngunit sa ilalim ng hood, kung ano ang mayroon kaming mangyari dito ay pareho ng iyong sinuri ang estado ng ilang mga piraso ng memorya, ang refrigerator. Pareho ka naka-check ng estado ang ng ilang mga variable. Parehong iginuhit mo ang isang konklusyon na pagkatapos ay kumilos sa. Ngunit sa kasamaang-palad, habang ang iyong kasama sa kuwarto noon ay sa tindahan, ang estado ng na variable ay nagbago, siya ay dumating likod at nais na ngayon upang baguhin ang estado, ngunit ito na nabago sa kanya. At syempre, hindi siya ay magkaroon ng nawala na sa tindahan kung alam nila na ikaw ay mayroon en ruta. Kaya sa tunay na mundo, paano mo magagawa maiwasan ang problemang ito, sa pag-aakala mayroon kang isang refrigerator, mayroon kang isang kasama sa kuwarto, at talagang mo bang gatas? Madla: Pakikipag-ugnay. David MALAN: Pakikipag-ugnay. OK. Ngunit kung paano maaari mong makipag-usap? Madla: Mag-iwan ng tala. David MALAN: Mag-iwan ng tala, tama? Palaging mag-iwan ng tala, para sa tagahanga ng show. Ang lahat ng mga karapatan, kaya palaging mag-iwan ng tala, o ilagay tunay na tulad ng isang padlock o isang bagay sa refrigerator na mapigil ang iyong kasama sa kuwarto mula sa inspecting ang estado ng na variable. Ngayon, kung bakit maaaring ito ay dyermeyn sa itakda problema pitong, o sa mga ATM. Well, isipin ang isang mundo sa isang ATM kung saan na maaaring magawa upang pumunta hanggang sa isang ATM machine dito, at isa pang ATM dito. At ito ang mangyayari masyadong madalas. At ipagpalagay na mayroon kang dalawang ATM card, na kung saan ay posible upang makakuha. At i-log sa parehong machine mabisa nang sabay-sabay, sana ay habang walang sinuman ang hinahanap. At pagkatapos i-type mo sa iyong PIN halos sabay-sabay. At pagkatapos ay gumawa ka ng query sa balanse upang makita kung magkano ang cash na mayroon ka. At sabihin nating mayroon kang $ 100 naiwan sa iyong account. Kaya mahalagang nang sabay-sabay, mo sinasabi ng isa, zero, zero, ipasok. At sana ay makabalik ng pera. Ngunit kung magkano ang pera na maaari mong bumalik? Ngayon mga computer sa pagtatapos ng araw, lalo na kung ang mga ito ay pakikipag-usap sa mga server, ay hindi kinakailangang gumawa ng mga bagay sa pagkakasunud-sunod na inaasahan. Kaya ipagpalagay kung ano ang mangyayari, dahil sa kahit anong network isyu sa bilis doon ay, o mga isyu CPU mayroong, o anumang bagay tulad na, ipagpalagay na ang unang ATM nagsusuri ang iyong balanse at nakikita, oh, ang taong ito ay $ 100. Ngunit pagkatapos ay makakakuha ng ginulo dahil siguro isang backup ang nangyayari at kaya alalay. O siguro habang sinusuri, ang network medyo mas mabagal dahil nakakuha koneksyon ito lamang ang mangyayari. Ang mga ito ay mga pisikal na device. Kaya samantala, ang ikalawang ATM ay na nagtatanong ng parehong tanong. Magkano pera mayroon ang David? $ 100 ay ang sagot. Ngunit dahil ang unang ATM ay hindi pa ipinadala ang mensahe ibawas $ 100, parehong Mga ATM na siniyasat hanay ng mga arko ng bangko, nakikita mayroong $ 100 doon, at ngayon parehong machine potensyal na mga pagpunta sa sabihin ang lahat ng sagot. Ngayon, ito ay mahusay para sa iyo sa ilang mga kahulugan kung ano ang ginagawa ng bangko sa huli ay baguhin ang mga halaga sa minus 100 sa pamamagitan ng pagtatakda ng mga variable na katumbas ng iyong bank account katumbas ng 0, bilang kabaligtaran sa paggawa minus 100. Ngayon sa pinakamasama kaso para sa mga bangko - o sa pinakamahusay para sa bank, samantala, bigyan sila sa iyo ng $ 200, at ang iyong bank account ay nagpapakita ngayon ng mga negatibong $ 100, na talagang hindi makikinabang ka sa lahat. Ngunit ang punto ay na karera kondisyon para sa dalawang kasamahan sa silid pagkuha gatas, o para sa dalawang mga ATM sinusubukan upang makakuha ng cash at baguhin ang katayuan ng isang hanay ng mga arko sabay na umiiral ang anumang oras mayroon kang isang database. Ngayon sa problema set pitong, ang isyu na ito arises sa kamalayan na kung bumili ka ng isang magbahagi ng Facebook stock, at pagkatapos ay para sa Halimbawa bumili ka ng isang pangalawang bahagi ng Facebook stock, kailangan mong gumawa ng mga isang desisyon bilang programmer. Upang magpasya kung paano i-update ang database, logro ay ka pagpunta sa magkaroon ng isang hilera para sa na stock, at ito ay isang paraan upang ipatupad ito. At ka ng pagpunta sa magkaroon ng isa bahagi ng FB, na kung saan ay ang kanilang mga ticker symbol ng stock para ang username na ito, o ang user na ito ID, ang natatanging identifier. Ngunit ang parehong kuwento Maaari itong mangyari dito. Kung gagawin mo ang isang piliin sa SQL, bilang makikita mo sa problema set pitong kapag nakita mo, oh, si David ay may isa share ng Facebook stock. Hayaan akong baguhin ngayon ito upang maging dalawang pagbabahagi, dahil gusto ni siya upang bumili ng ikalawang bahagi. Ngunit ipagpalagay na talagang nagkaroon David dalawang buksan ang mga window ng browser, o ipagpalagay na ito ay isang joint account na may dalawang asawa, at pareho sa mga ito ay sinusubukan upang isagawa ang parehong pagpapatakbo, doon, masyadong, ang potensyal na umiiral para sa isang desisyon na maging ginawa batay sa mga nakaraang estado ng mundo - ang account ay may isang bahagi - at kapwa tao, o pareho mga server, ngayon subukan upang sabihin dinagdagan ito sa dalawang pagbabahagi. Ngunit sa kasong ito, maaari mo pa siningil sa akin ng pera para sa parehong pagbabahagi, ngunit incremented lamang na ang isa oras. Kaya sa maikling, sa pangunahing mga problema dito, bilang may magbiro tungkol iiwan ng Tandaan, o paglalagay ng kandado sa ito, ay kung ang dalawang tao, o dalawang mga thread - bumalik sa scratch tingin - Maaari siyasatin ang estado ng ilang mga variable at pagkatapos ay subukan upang baguhin ang variable na iyon, ngunit ang mga dalawang bagay ay hindi mangyayari sa Kasabay nito ngunit maaari makakuha ng Naantala ang pag- sa pamamagitan ng iba pang mga bagay nangyayari, data maaari makapunta sa isang napaka-kakaiba ng estado. At maaari kang makinabang o maaari mong magdusa sa kamalayan ng perang halimbawa. Kaya sa problema set pitong, bigyan ka namin ito isang linya ng code, na mahaba kuwento maikli, malulutas nito na ito problema sa MySQL. Ito napakatagal pagtuturo na hindi kahit magkasya sa isang linya sa Tinitiyak ng screen dito na ang iyong operasyon ay kung ano ang tinatawag na atomic. Ito ang lahat ng mangyayari nang sabay-sabay, o hindi ito mangyayari sa lahat. Ito napakatagal parirala ay hindi maaaring makakuha ng Naantala ang pag-bahagyang. At kung ano ang ginagawa nito ay literal kung ano ang sinasabi nito. Magsingit sa ilang mga talahanayan ang mga sumusunod na tatlong mga patlang ng mga partikular na mga halaga, ngunit sa duplicate na key, huwag gawin ang isang insert. Gumawa ng isang update. Kaya ito ay tulad ng paggawa ng isang piliin at isang INSERT kaya upang makipag-usap sa parehong oras. At kung ano ay ang susi na ay marahil na tinutukoy dito? Ito ay lumiliko out, at makikita mo ito sa problema itakda pitong ni spec, dahil kami ipinahayag doon upang maging isang natatanging key sa ang partikular na mesa tulad na hindi ka maaaring magkaroon ng maramihang mga hilera para sa parehong mga user na may parehong matipid stock symbol - sa halimbawang ito dito, DVN.V ay isang hangal stock matipid na namin sumangguni sa spec. Dahil kami ipinahayag itong maging natatangi, kung ano ang ibig sabihin nito ay kung ikaw subukan upang magsingit ng isang dobleng mga hilera, ikaw ay sa halip ng pagpunta sa i-update ito nang walang sinumang iba pa nagkakaroon ng pagkakataong baguhin ang estado ng mundo alinman. Kaya sa maikling salita, ito ay nagsisiguro bagay ang atomic. Higit pang mga karaniwang bagaman, mga database tulad ng MySQL - at hindi mo kailangan ang tampok na ito para sa p-set pitong, ngunit panatilihin ito sa isip para sa sa hinaharap - sumusuporta sa kung ano ay tinatawag na mga transaksyon, kung saan maaari mong sabihin START TRANSAKSYON literal. Maaari mo nang isagawa dalawang SQL pahayag. At isang SQL na pahayag, bilang makikita mo ang sa p-set pitong, mukhang ng kaunti isang bagay na katulad nito. I-update ang isang talahanayan na tinatawag na account. I-set ang balanse haligi katumbas ng kahit anupamang ang balanse haligi kasalukuyan ay binawasan ng 1,000 kung saan ang bilang, ang numero ng account, tulad ng mga ID ng gumagamit, ay katumbas ng 2, at pagkatapos ay i-update account tuldok tuldok tuldok. Kaya sa mga tuntunin lego, na kung ano ang ginagawa ng dalawang query mukhang paggawa sa tunay na mundo pakiramdam ng banking? Madla: Paglilipat sa pagtitipid. David MALAN: Mismong. Paglilipat ng mga pondo mula sa isa account upang ang iba. At ito ay isa pang halimbawa kung saan mo talagang gusto ang dalawang mga bagay na mangyayari o hindi mangyayari. Hindi mo na gusto ng isang bagay upang makakuha ng sa gitna ng mga ito at potensyal na sumira ang matematika, o gulo up kung magkano pera na mayroon ka, o kung magkano pera ang bangko ay may. Kaya kung ano ang talagang maganda tungkol sa mga transaksyon sa MySQL ay na, at database sa mas pangkalahatang paraan, ay na sila at matalinong tao na naipatupad mga tampok na ito maisip kung paano gumawa siguraduhin na pareho ng mga bagay na mangyayari o hindi sa lahat. At kung tunay na ikaw ay naghahangad upang gawing isang website na ginagamit ng mga tao sa campus, ang mga tao sa tunay na mundo, ang paggawa ng isang bagay sa startup pakiramdam, ang mga ito ay ang mga uri ng disenyo ng mga desisyon na maging napaka mahalaga. Kung hindi man, simulan mo upang mawalan ng data, mawala gumagamit, o sa pinakamasama kaso bilang nasaksihan namin dito, potensyal na mawalan ng pera. Kaya muli, higit pa sa na sa problema nakatakda pitong, pati na rin marahil para sa ilan sa mo sa huling proyekto. Kaya natin baguhin ang larawan na nagkaroon kami ng ilang sandali ang nakalipas lamang sa isa pang paraan. Kaya ipaalam sa akin talaga makita kung ang maaari kong - nope, na nawala. May ito ay. Kaya ito ay kung saan namin iniwan huling oras. At ito lumiliko out kami ng pagpunta sa itaas na bigla isa pa bagay sa mix dito - isang wika na tinatawag JavaScript. Kaya JavaScript aktwal na umaangkop sa ito piraso - at hindi ko pa masyadong mag-iwan ng sapat na kuwarto, kaya ito ay hindi na ngayon upang masukat. OK, ito ay talagang kalunus-lunos. OK, kaya iyon ang JavaScript. Ayos lang. Talaga ako ginagawa ito ng isang masamang paglilingkod. Ayos lang. Kaya JavaScript ay isa pang programming wika, at ang aming huling, Kung na tumutulong sa muling bigyan ng katiyakan na mayroong hindi marami pang iba ng hydrants apoy dito. Kaya JavaScript ding kahulugan wika, na nangangahulugan na hindi mo ipunin ito sa mga zero at mga bago. Ikaw lamang patakbuhin ito. Ngunit kung ano ang sa panimula iba't ibang mga gamit JavaScript ay karaniwan na sa iyo huwag patakbuhin ito sa iyong web server. Hindi ito makapag-tumakbo sa appliance per se. Sa halip, ito ay makakakuha ng nai-download ng isang user sa pamamagitan ng HTTP sa kanilang browser - Chrome, Safari, Internet Explorer, Firefox, kahit anong - at ito ay ang browser na ito executes partikular na programming language. Kaya upang maging malinaw, PHP kaya ngayon ay naging maisakatuparan ang alinman sa command line sa ang aming black and white window, sa isang server tulad ng appliance, isang computer tulad ng appliance, o naging ipinatupad sa pamamagitan ng isang web server tumatakbo sa isang computer. Ngunit ang tema dito ay ang PHP kaya malayo ay pinaandar server-side, kaya ang gumagamit at browser ng gumagamit hindi kailanman nakikita ng isang linya ng PHP code. Sa katunayan, kung sakaling magbukas ng browser para sa ang iyong website o isa at sa iyo talaga makita ang PHP code sa iyong window, isang tao ay screwed up. Dahil hindi ito sinadya upang maging ipinadala sa isang browser nang direkta. Ito ay dapat na ipatupad at naka- sa isang bagay tulad ng HTML. Ngunit JavaScript ay mahalagang ang kabaligtaran. Ito ay sinadya upang ma-tumakbo karaniwang sa loob ng window ng browser ng isang gumagamit. At kung ano ang mga uri ng mga website ang gumagamit JavaScript pagkatapos ay mga araw na ito? Nagustuhan Literal na araw-popular na website. Ang bawat website na iyong guys marahil gamitin araw-araw na gamitin para sa JavaScript ang pinakasimpleng at kahit ang sexiest tampok. Kaya isang bagay tulad ng Facebook Makipag-chat kung gumagamit ka na. Paano gumagana na talagang gumagana? Well kaya sa ngayon, ang lahat ng mga bagay-bagay na namin tapos sa HTML at PHP Ipinagpapalagay na mong makuha ang isang URL, at ikaw pindutin ang Enter, at nakikita mo ang ilang mga HTML na nilalaman. At nag-click ka sa link, na nagbabago ang URL, nagbabago ang mga pahina, at muling pagkarga ilang mga bagong nilalaman. I-click ang isa pang URL o magsumite ng form, mo makapag whisked sa isa pang pahina at makita mo ang ilang mga bagong nilalaman. Ngunit gamit ang isang bagay tulad ng Facebook Chat, o Gchat, o Google Maps, bihirang ay ang buong pahina tulad refresh na nakakita ka ng isang puting screen at ilang sandali lamang pagkatapos ng bagong nilalaman. Sa halip, mga pahina ng web ngayon ay pabago-bago nagsisimula pa na-update muli at muli at muli ang lahat ng uri ng likod ng mga eksena. At ito ay lumiliko out na kapag ikaw ay pumunta sa isang bagay tulad ng Facebook, o Gchat, o Gmail, at ang mga update na pahina awtomatikong nang walang i-load muli ang buong screen, kung ano ang nangyari ay na Nakagawa na uri ng mga lihim ng iyong browser karagdagang mga kahilingan ng HTTP - hindi para sa buong mga pahina ng web, ngunit para lamang sa mga maliit na chunks ng data, tulad ng instant message na ang iyong mga kaibigan lamang Nagpadala sa iyo, o ang pag-update ng katayuan na lamang ay nagpadala sa iyo, o ang tweet na may isang taong na may isang taong nagpadala lamang. Ay lamang ginagawa itong maliit na mga kahilingan para sa data, at pagkatapos ay ang paggamit ng JavaScript, ito programming language, upang baguhin kung ano tinitingnan ng web page tulad nang walang server pagtulong, nang walang ang server pagbuo na HTML. Kaya sa maikling, JavaScript ay maaaring gamitin pagkatapos upang makuha ang mga hindi lamang ang bagong data mula sa ang server nang walang i-load muli isang buo pahina o pagsusumite ng form na ito. Maaari rin itong magamit upang pagbabago ng tinatawag na DOM - dokumento modelo sa bagay - na kung saan ay lamang ang magarbong paraan para sinasabi sa puno ng HTML na nakita namin noong huli. Kaya upang muling bigyan ng katiyakan, ang JavaScript ay syntactically kaya katulad sa C pati na rin. Walang pangunahing pag-andar. Magsisimula ka lang sa pagsusulat ang code at ito ay makakuha ng pinaandar, o kahulugan nang higit pa maayos. Kundisyon magmumukhang ganito. Walang iba mula sa C o PHP para sa na bagay. Boolean expression o-ed magkasama ganito ang magiging hitsura. Anded magkasama magmukhang ganito. Lilipat magmumukhang ganito. Para sa mga loop ganito ang magiging hitsura. Habang loop ganito ang magiging hitsura. Gawin habang loop ganito ang magiging hitsura. Ito ay bagong. Kaya ang JavaScript ay hindi isang foreach bumuo per se, ngunit ito ay makagawa ng para sa variable na i sa array, at i in na ito kaso nagiging isang halaga index. Kaya ito ay isang maliit na naiiba mula sa na foreach, bagaman mga bagong bersyon ng JavaScript ay darating out sa lahat ng oras, kaya kahit na ang mga tampok na wika ay umuunlad. At bilang isang bukod, JavaScript mga araw na ito Maaari ding gamitin sa isang server tulad lamang PHP gamit ang isang framework na tinatawag Node.js. Isa sa CS50 ng TFs, Kevin, ay humantong sa isang pantas-aral sa Node.js na magagamit sa cs50.net/seminars. Kaya kung gusto mong malaman, malaman na kayo Maaari itong gamitin sa server side bilang mahusay, ngunit iyan ay isang walang kinikilingan kamakailang trend, ngunit isang malakas na isa sa na. Ito ay isang maliit na naiiba. Ito ay isang array sa JavaScript. At kung ano ang naaabot mo bilang mga naiibang kumpara sa C o PHP? Mayroong ilang mabilis na mga kuwento maaari naming sabihin dito. Ano kulang kumpara sa PHP? Madla: [hindi marinig]. David MALAN: Oo? Paumanhin, sabihin muli? Madla: Di deklarasyon ang uri ng variable. David MALAN: Hindi kami deklarasyon ang uri ng variable. Kaya talagang medyo tulad ng PHP, kami ay hindi pagtukoy ng mga uri ng mga ito na variable. Sa halip, kami ay higit pa generically sinasabi var para variable. Wala kaming istorbo ng PHP ni pag-sign dolyar, na habang nakakainip na uri, ay gawing mas malinaw na isang bagay ang isang variable. Sapagkat dito, hindi namin uri ng mga pabalik sa Diskarte C sa pamamagitan ng pagtawag lamang variable na gamit ang pangalan na gusto namin upang bigyan ito, tulad ng mga numero. At katulad din ng PHP, mayroon kami square bracket para sa mga halaga sa loob na ng array. Kaya mga variable sa JavaScript din Maaaring ganito ang hitsura. Pansinin dito na ito ay isang string na tinatawag s, ngunit katulad magkaroon hindi namin tinukoy na ito ay isang string. Narito bagaman ay isang tampok na hindi gumagana ang umiiral sa eksaktong parehong paraan sa PHP, ngunit medyo katulad. Ito ay isang bagay sa JavaScript. At bagay ay isang uri ng mga Swiss Army Kutsilyo ng istruktura ng data sa iyo na Maaari gamitin ang mga ito para sa anumang bilang ng mga bagay. Dito, halimbawa, ipinapadala namin deklarasyon isang variable na tinatawag na quote. Ang uri ng variable na ay isang object. Maaari mong isipin na ito bilang isang C struct na may mga pindutan at halaga. Simbolo ay isang key. FB ay isang halaga, sa malas isang simbolo ng stock. Comma. Presyo ay isa pang key, at halaga nito ay sa malas ng mga lumulutang na tuldok, o isang bilang sa mas pangkalahatang sa JavaScript, ng $ 49.26. Kaya PHP ay walang - hindi pa namin nakikita sa PHP object masyadong tulad nito, ngunit namin ginawa ng isang analog, na kung saan ay kung ano? Madla: [hindi marinig]. David MALAN: nag-uugnay array. Kaya kung saan ang PHP ay nag-uugnay array na kung saan ang syntax ay kailanman bahagyang kaya iba't ibang - Nakita namin ang mga square bracket. Nakita namin ang kakaiba simbolo arrow. JavaScript ay may mga bagay, ngunit ito ay halos isang semantiko pagkakaiba at isang iba't ibang mga kasing kahulugan para sa ngayon. Gayunpaman, bilang isang bukod, PHP din itong bagay sa isang paraan na Java at iba pang mga wika ay mayroon bagay sa object-oriented programming. Ngunit gagamitin namin ang mga lang para sa mga uri ng data sa ngayon. Mga bagay at nag-uugnay array. Maaaring gawin itong isa na ito mas malinaw ng kaunti. Narito kung bakit ang isang bagay ay kapaki-pakinabang. Kapag nais mong magpahayag ng isang mag-aaral, tulad ng Zamyla, maaari namin talaga encapsulate kaya upang makipag-usap sa loob ng na Bagay gamit ang kulot bracket tulad lamang bago ang maramihang mga susi at mga halaga sa dito. Mayroon kaming isang ID, isang bahay, at isang pangalan para sa Zamyla, sinusundan ng isang tuldok-kuwit bilang karaniwan sa dulo. Down dito masyadong, ito ay bahagyang iba't ibang, ngunit din napaka-makapangyarihang mga araw na ito. Narito ang isang array, at alam ko na dahil mayroong isang parisukat na bracket up tuktok at isang parisukat na bracket sa ibaba. At ito ay isang array ng kung ano ang data nagta-type sa malas sa JavaScript? Ito ay isang hanay ng mga ito ay mukhang tulad ng tatlong bagay. At alam ko ito ay isang bagay na lamang dahil sa ang kulot tirante. At mapansin mayroong bukas kulot suhay, ang ilang mga bagay-bagay, malapit kulot suhay, kuwit, pagkatapos ng ilang higit pa, kuwit, at pagkatapos ng ilang higit pa. Kaya na tatlong argumento pinaghiwalay ng dalawang mga kuwit. Kaya ito ay isang array ng tatlong bagay. At sa bawat isa sa mga bagay ay lumilitaw na isang mag-aaral o kawani ng miyembro ng ilan -uri-uriin, bawat isa ay may isang ID, bahay, at pangalan. Ngunit tinatawag ko ang isang bagay tinatawag JSON - JavaScript Bagay pagtatanda. At ito ay isang format ng data na talaga ay kaya napaka-tanyag at sa katanyagan mga araw na ito na kung sumulat ka ng isang application na gumagamit sa Facebook API, ang Twitter API, talagang halos anumang mga API out doon mga araw na ito, kabilang ang ilan sa sariling CS50, ang data makabalik ka ay wala sa lumang format na CSV paaralan. Dahil pagpapabalik na CSV ay sobrang simple. Ito ay mga hanay lamang ng kuwit sa pamamagitan ng mga kuwit. Binibigyan ka ng JSON data sa higit pang metadata. Iniuugnay nito ang susi sa bawat halaga sa gayon hindi nila kailangang mag-ipinapalagay lamang na ang hanay na 0 ay isa halaga, haligi isa ay isa pang, haligi dalawang ay isa pang. Lahat sa isang JSON object dito ay uri ng self-naglalarawan, dahil bawat isa sa mga pangalan sa file na ito ay may literal pangalanan sa harap ng mga ito bilang isang naka-quote na string. Kaya ipaalam sa tumagal ng isang pagtingin sa isang ilang mga halimbawa dito. Hayaan akong pumunta sa appliance. At hayaan mo akong pumunta sa aming vhost direktoryo sa publiko. At hayaan mo akong pumunta sa JavaScript direktoryo. At ni sige at buksan up hayaan DOM-0.html, kung saan ay nangangahulugan lamang DOM dokumento modelo object. Ito ay tree mga bagay-bagay na kung saan Tinutukoy kong mas maaga. At ipaalam sa akin ipanukala ang mga sumusunod. Narito ang isang web page na kung saan ang katawan ay medyo simple. Kaya pababa dito sa ibaba, mapansin Mayroon akong isang form. Nakita namin ang mga bago. Ito ay may dalawang input, isa rito ay may isang ID ng pangalan, isa sa na may isang uri ng isumite, at ang unang isang uri ng ay teksto. Kaya ito talagang tunog medyo simple. Sabihin pumunta dito. Sabihin bumalik sa pahinang ito dito. Sabihin pumunta sa localhost, at pumunta sa aming direktoryo ng JavaScript, at pumunta sa DOM-0, at dito mayroon kaming form na ito. Kaya na sa malas lahat pahinang ito gumagana. Ito ay may isang patlang na may pangalan Isumite ang isang pindutan. Ngunit hindi ako pagpunta sa gamitin ang PHP dito. Pupunta ako sa magawa ang lahat ng client side kaya upang makipag-usap sa JavaScript tulad ng sumusunod. Pansinin na sa katunayan ko ang ibinigay ang pangalan larangan ng pag-input na ito ng isang natatanging identifier, na talaga i-save sa akin ang ilang oras sa isang sandali. At mapansin ipinakilala ko ang isa pang tag sa head ng aking web page, ang  tag. Kaya sa puntong ito na ang JavaScript ay isang programming language client-side. Sa kasong ito, tulad ng CSS, inilagay ang mga ko ito diretso sa loob ng aking HTML. Ngunit abisuhan ang mga ipinahayag ko ang isang function na mukhang isang maliit na tulad ng PHP syntactically, ngunit ito ay ang tunay JavaScript, dahil muli, ito ay client-side sa browser. At maglaan ng hula kung ano ito ay pagpunta sa gawin, kahit na ang ilan sa mga syntax dito ay bago. Madla: Sabihing kumusta sa kung sinuman. David MALAN: Ito ay pagpunta sa kamustahin upang ang sinumang bibisita sa pahinang ito. Kaya paano? Kaya't mapapansin, ito ay lumiliko out sa JavaScript mayroong isang function na () alerto. Ito ay isang napaka-uri-uriin ng malungkot na pag-andar na talaga lang may gawi na inisin ang mga gumagamit. Ito ay hindi isa dapat mo ba talagang gamitin karaniwan, ngunit ito ay isang mabilis at marumi paraan ng pag-uuri ng pagpi-print ng isang bagay sa isang graphical user interface, tulad ng isang browser. Mapapansin dito na mayroon akong isang string sa solong panipi. Ito ay lumiliko out na hindi tulad ng C, JavaScript Maaari aktwal na mayroon gamitin mo single quote, at lantaran ito ay lamang uri ng pangkakanyahan convention kasama ng JavaScript programmer upang gamitin ang solong quote. PHP, sila aktwal na mayroon nang bahagya iba't ibang kahulugan. Ngunit para sa ngayon, alam lamang na iyon ang tanging dahilan. Ang convention JavaScript ay madalas upang gamitin ang solong quote, ngunit maaari naming gamitin double quote sa parehong mga lugar pati na rin. Kaya ito ay kawili-wili. Isipin ang huling beses na namin ay may na larawan sa screen na iginuhit isang puno kung saan mo ay nagkaroon ng HTML node, at ang magtungo ang node, at ang katawan node, at pagkatapos ng ilang teksto. Ngunit nagkaroon ng isang espesyal na node sa pinakatuktok na tinatawag ko ang mga dokumento. Well, ito ay lumiliko out sa JavaScript, ang anumang mga oras sumulat ka ng isang programa sa JavaScript sa isang browser, may access ka sa isang espesyal na global variable. Katulad sa espiritu sa superglobals PHP, ang ang isang ito ay tinatawag sa lahat ng maliit na dokumento. Ito ay tulad ng isang struct, ngunit ito struct Mayroon ding mga pag-andar sa loob nito. Kaya isang C struct may data ang karaniwang lamang. Ngunit isang bagay ang JavaScript bilang na ito technically ay may function din, kung hindi man ay kilala bilang mga pamamaraan, sa loob nito. At maaari mong tawagin ang isang function sa loob ng sa bagay na ito masyadong literal ang paggawa nito pangalan, tuldok, at pagkatapos ay ang pangalan ng ang pag-andar, o muli pamamaraan. Ito ay isang kasingkahulugan lamang, talaga. At kung ano ang function na ito gawin? Maaari mong uri ng hulaan mula sa pangalan nito. Kumuha ng mga elemento sa pamamagitan ng ID. Kaya ito ay pagpunta upang maghanap sa web page, maghanap puno na, naghahanap para sa ano naman node, aka elemento, ay may natatanging ID ng quote magpanipi pangalan. At pagkatapos ay kung ano ako pagpunta sa gawin? Pupunta ako upang makuha ang halaga sa loob ng na node sa tree, at ako pupunta upang kahit papaano ay batiin si na pangalan. Kaya maglaan ng hula, kahit na hindi namin hindi Nakita ito pa, kung ano ang ginagawa ng plus simbolo ibig sabihin dito at dito marahil? Madla: pagdugtungin. David MALAN: pagdugtungin. Mag-right, at ang mga ito ay lamang uri ng desenyo ng mga pagpapasya mga tao na ginawa taon na ang nakakaraan. Sa PHP, pagdugtungin mo mga bagay na may tuldok. Sa C, tumalon sa iyo sa pamamagitan ng maraming hoops at tumawag sa mga function tulad ng strcopy () o strcat () o ibang tulad ng mga pag-andar. Ngunit sa JavaScript, gamitin mo plus. Kaya ito ay lamang concatenating tatlong mga string - kumusta, isang pangalan, at pagkatapos ay isang exclamation point. Kaya kapag at kung bakit ito ay function na tinatawag na bagaman? Well, kumuha nang isang hula mula sa HTML sa ibaba. Bakit bumati () na tinatawag na, o kapag? Sa malas, bilang pinakamahusay na maaari kong sabihin, sa isumite, kapag ang form na ito ay isinumite, Pupunta ako sa gawin ang anumang ay sa loob ng mga panipi. At partikular, Pupunta ako sa tumawag sa bumati () at pagkatapos ay bumalik hindi totoo. Well, sabihin makita ng kung ano ang net epekto dito ay unang. Kaya ipaalam sa akin sige at i-type sa, sabihin nating, Loren, ang Isumite. Kamusta Loren. Ni makita kung marahil ito ay isa lamang Hayaang isang masuwerteng pagpapatupad. Nope. Kaya ito ay ang pag-type out kahit anong pangalanan talaga kong ilagay doon. Ngunit mapapansin kung ano ang hindi nagbabago. Ang URL ay DOM-0.html pa rin. Walang register.php. Walang pangalawang file. Walang katangian ng pagkilos. Kaya kung ano ito return false siguro ginagawa? Bakit ako ay batiin ako sa pagtawag () at pagkatapos ay bumabalik na hindi totoo marahil? Ano normal ang mangyayari kapag nag-click ka Isumite sa isang form na kahit na mayroon kami nakita sa nakalipas na linggo? Madla: [hindi marinig]. David MALAN: Ito napupunta sa isang lugar, i-right? Ito ang papunta sa ilang mga destination URL. Ngunit hindi ko nais na mangyari dito. Gusto ko ang aking web page upang maging ganap dynamic na tulad ng Gmail, kung saan sa sandaling nasa doon, mo manatili doon. Ang URL ay hindi nagbabago sa isang paraan na Ipinapahiwatig ang buong pahina ay i-load muli. Sa halip, gusto ko lang upang baguhin ang isang bagay tulad ng pag-print out ng isang bagay dito sa screen. Well hayaan mo akong linisin ito up ng isang maliit na bit. Hayaan akong magbukas ng mga hindi DOM-0, ngunit hayaan mo akong magbukas ng mga DOM-2. Kaya lang iyong nakita mo ang ilang mga syntax dito. Ito ay lumiliko out na kung ano ang aming lamang ay gumagamit ng raw JavaScript. Kaya ito ay tunay na mga wika JavaScript. Maaaring kilala ang ilan sa iyo ng isang library na tinatawag na jQuery. Kaya jQuery ay hindi katulad bagay tulad ng JavaScript. Ito ay lamang ng isang library na isang talagang matalino Sinulat ni lalaki at popularized tulad na halos lahat ng tao sa mundo ngayon ay gumagamit ng jQuery kapag gumagamit ng JavaScript. At sa unang tingin, totoo lang, ito mukhang higit pa ng kaunti misteriyoso. Ngunit makikita mo mahanap, lalo na kung pumunta ka doon para sa iyong huling proyekto sa web pag-unlad, makikita mong makita na ito cleans bagay up at makatipid ka ng masyadong isang ilang linya ng code. Kaya sabihin sulyap lang sa kung paano ang form na ito ay gumagana. Pansinin kung ano ang ginawa ko aalisin sa malas mula sa aking HTML? Walang isumite sa handler kaya na magsalita. Walang katangian. Dahil alam mo na, kung ano Hindi talaga ako ang nagustuhan? Nadama ko tulad ng tayo ay bumabagsak na sa lumang mga gawi doon. Tulad ng ito ay nagsisimula sa pakiramdam nanggigitata upang makihalubilo sa parehong CSS na may HTML, dahil naka uri ng masusuka iba't ibang mga wika sa buong lugar, katulad ay ito magsimula sa pakiramdam tulad ng isang masamang kalsada upang pumunta down na kung saan Ako paglalagay ng JavaScript code sa loob ng aking HTML sa halip na factoring ito. Kaya iyon ang aralin dito. Sa DOM-2.html, ako factoring ito. At ako paggawa ng mga bagay bahagyang magkaiba. Para sa ngayon, ako ng pagpunta sa iwagayway ang aking mga kamay sa kung ano ang ginagawa na ito talaga sa ilalim ng hood. Ngunit para lamang sa ngayon ay ipinapalagay na ang unang linya ng code sa aklatang ito tinatawag lamang ay nangangahulugan jQuery kapag ang dokumento ay handa na, gawin ang sumusunod. Dahil maaaring tumagal ng mga web page ilang oras upang i-load. Ikaw ay maaring sa isang mabagal na internet koneksyon, at ito ay maaaring umiikot at umiikot, at sa wakas ito ay load. Iyon linya ng code lamang sabi maghintay hanggang ang buong pahina ay handa na, ang dokumento ay handa na, bago e-execute ang code na ito. At mapansin ngayon, ito ay marahil ang pinaka-kapaki-pakinabang muna tumagal ang layo mula sa jQuery. Ang line dito ay katulad na katulad sa espiritu sa ganito karami na linya dito. Sapagkat sa raw na JavaScript code, mayroong Umiiral na ang isang dokumento global bagay na iyon May isang function na tinatawag na getElementById (), ang mga tao na sinulat ni pinasimple jQuery na upang sabihin lamang pag-sign dolyar, at pagkatapos ay sa loob ng panaklong maglagay ng dalawang quote, at pagkatapos ay maglagay ng simbolo ng hash kasunod ang natatanging ID na gusto mong i-grab. Kaya ito ay katumbas ng document.getElementById. Samantala,. Isumite ang ibig sabihin lamang sa pagsumite ng kahit anong paraan ikaw ay nagre-refer sa sa kaliwa, pumunta Magpatuloy at isakatuparan ito. Ngunit ito ay ngayon ang pag-usisa masyadong. Ano ang kakaiba tungkol sa kung ano Na-highlight ko dito? Hindi lamang ito ay uri ng syntactically bagong, mayroon ding nawawalang isang bagay. Madla: Ito ay tinatawag na lamang ang function? Hindi ito na tinatawag na alerto? David MALAN: Oo. Well, kaya alerto () ay bagsak dito, upang maging patas. Ngunit walang pagbanggit ng isang pangalanan, tulad ng alam mo, foo o isang bagay up dito. At sa katunayan, ito ay isa sa mga tampok ng JavaScript na Medyo makapangyarihan, ngunit din masyadong bagong. At PHP aktwal May pati na rin ito. Hayaan akong magpatuloy at gawin isang bagay na tunay mabilis. Hayaan akong magpatuloy at ilagay ito dito. Hayaan akong gawin ito. Ang function na. Hayaan tawagan ni ito handler (). Ang isang humahawak ng pag-andar nang sa gayon na magsalita. Isang bagay na humahawak sa ilang mga operasyon. Hayaan akong linisin ang aking mga indentation. At ilagay ito dito. At ilagay na dito. Yep. OK. Kaya ngayon mayroon akong isang function na tinatawag na handler () na hindi ko talaga alam kung ano ang ginagawa nito pa. Ito lamang ay mayroon pa ring mga bagay-bagay na. Oops. Kinuha masyadong maraming. Natin gawin ito. Ayos lang. Sorry. Ayos lang. Hayaan ang gawin sa akin ito. OK. Na mukhang maganda at tuwid inaabangan ang panahon ngayon. Hayaan ang gawin sa akin ito. Gawin ito. At ang OK. Kaya ngayon, sabihin ilagay ito sa paglipas dito. Wala nang mga programming sa mabilisang. OK. Kaya ngayon, sabihin bumalik sa kung saan ang kwento ay nagsimula. Noong una, sinabi ko na ang linyang ito dito ibig sabihin kapag ang dokumento ay handa na, pumunta Magpatuloy at gawin ito. Ano ang gusto kong gawin? Well partikular, gusto kong pumunta Magpatuloy at gawin ang mga sumusunod. Ipatupad ito linya ng code, at pagkatapos ay kung ano ang gusto ko mong gawin ay tumawag ito gumana kapag ang form ay isinumite. Ngayon na ito ay kung ano ang kawili-wili. Ito ay hindi mismo ng isang function. Pansinin hindi ako ay paglagay ng panaklong dito sa normal na paraan. Literal na ako ng pagpasa ng isang function na tinatawag na handler () sa isa pang function na tinatawag na isinumite () bilang isang argumento bilang bagaman ito ay tulad ng isang variable. At ito ay isa sa mga tampok ng JavaScript, mga function ay ang kanilang mga sarili ay talagang lamang bagay. Sa katunayan, ang mga ito ay talagang lamang mga variable ng uri. At kung ang pangalan ng function na ay handler (), walang dahilan na hindi ko makakaya pumasa ito sa bilang isang argumento dito. At ito ay nangangahulugan na kapag ang form may ID ng demo ay isinumite, tinatawag ito ng pag-andar. Ngunit ngayon kung ko i-undo lahat ng ito, bakit pagkatapos ay ang nakuha ko marahil gawin ito ng ilang sandali ang nakalipas? Well, ito ay isang hindi kilalang function. Dahil lantaran, napagtanto ko kung bakit ako Iniistorbo upang aaksaya ng oras sa isang deklarasyon function na tinatawag na handler () lamang na tumawag ito sa isa at lamang ng isang lugar? Kung hindi ko kailangan ang mga pangalan, at gawin ko hindi kailangang tumawag ito ng higit sa isang lugar, sabihin lang ipatupad ang pag-andar kanan kung saan kailangan ko ito. At kaya JavaScript at PHP support kung ano ay tinatawag na anonymous function na payagan ang sa akin upang gawin eksakto na dito. Ngunit lang kami scratching ang ibabaw. Sabihin mang-ulol sa pamamagitan lamang ng ilang huling mga halimbawa dito. Kung pumunta ako sa quote.php. Pansinin na ito ay talagang isang PHP function, isang PHP programa, na ako ay sumulat na Inaasahan ng isang HTTP parameter na tinatawag na simbolo, at maaari ba akong pumasa sa ng halaga tulad ng FB. At kung namin talagang tumingin sa ang source code, ito ay querying isang libreng website na tinatawag na Yahoo Finance, tulad ng p-set pitong, at ito ay bumabalik sa akin isang bagay sa tila ang format na kilala ay JSON - JavaScript Bagay pagtatanda. Ito ay lamang ng isang bagay. Pansinin ang kulot tirante, ang mga quote, ang tutuldok, at ang mga kuwit. Ngayon samantala, ito ay medyo cool. Dahil ang maaari kong marahil gumamit ng programming wika upang bumuo ng mga URL na hitsura tulad ng mga dynamic na ito, tama? Maaari ko bang baguhin ito sa Google at makabalik ng Google stock presyo ng $ 1,017.55. Kaya sabihin makita kung hindi namin maaaring gamitin ito ngayon. Hayaan akong pumunta sa ajax-0 dito, na Mukhang ang mga sumusunod. Ito ay lamang ng isang website na mayroong isang form na may isang pindutan. Hayaan akong dito sige at i-type sa YHOO para sa stock symbol ng Yahoo, i-click ang Kumuha ng Quote, at ngayon ay mapapansin ko na nakuha isang alerto na may 32.86. Hayaan akong talagang pumunta sa isang may interes bersyon ng pahinang ito, dalawang bersyon, at type sabihin nating Microsoft, MSFT. Kumuha ng Quote. At ngayon mapansin, walang alerto. Pansinin kung saan sinasabi nito na presyo na tinutukoy? May ay ang pinakasimpleng ng mga halimbawa na mga pahiwatig sa kung ano Gchat, at Facebook Makipag-chat, at Gmail, at iba pang mga katulad ang mga website na ginagawa sa pamamagitan ng aktwal pagbabago ng web page. Pansinin na ito. Hayaan akong i-reload ang pahina. Hayaan akong buksan up ng Chrome Inspector. Hayaan akong pumunta sa mga elemento down na tab dito. Ngayon mapansin kung ako mag-zoom in down na dito at buksan ito up, mapapansin na ito ay ang aking HTML DOM - ang aking mga dokumento object modelo. Ito ang aking HTML. Ngunit ngayon mapansin, kahit na ito ang nangyayari upang maging isang maliit na mahirap na makita ito sa parehong mga lugar nang sabay-sabay, kung ako mag-type sa FB up dito, panoorin ang ilalim ng screen lamang. Talaga Ito ay nagbabago aking HTML sa mabilisang. At ito ay ginagawa ito medyo simple sa pamamagitan ng paggawa ng isang bagay na katulad nito. Kung ko bang buksan up ajax-2, mapansin pagpapatupad isang bagay bilang sexy bilang na, kahit na ito ay medyo mainit ang ulo, ngunit bilang sopistikadong bilang na pagtakbo, ito ay may ilang mga HTML sa ibaba. Ngunit mapansin ginamit ko na i-tag. Hindi namin ginagamit ito bago, ngunit ito ay katulad ng, ngunit hindi ito puwersahin ang lahat ng bagay sa isang bagong linya. Ito lamang ang gumagawa ng isang hugis-parihaba rehiyon sa parehong linya talaga. Pansinin na Nagbigay ako ng ito ng isang ID ng presyo. At ito lumiliko out sa pamamagitan ng paggamit ng parehong JavaScript library, mayroon akong isang function tinatawag quote () na tinatawag na kailanman ang form na ay isinumite. At kung ano ako ay ginagawa ito. Ako deklarasyon ng variable sa JavaScript tinatawag na url, sine-save ang halaga quote.php? simbolo =. Sa ibang salita, ako sarili ko ako ay nagsisimula upang maghanda ng isang HTTP kahilingan, at pagkatapos ay Ako concatenating papunta na ng plus ano ang mga elemento na may ID ng mga simbolo ay, na paunawa ay na field ng teksto kanan pababa dito. Kaya tulad ng nagkaroon kami mga form sa nakaraan. At pagkatapos ay ito lumiliko out sa jQuery, kung tumawag. Val (), na tawag ng isang Val function, isang halaga function, na nakukuha ng ano ang gumagamit ay nag-type in At pagkatapos ay ang lahat ng trapiko ng network na mangyayari ito. $. GetJSON. At bilang isang bukod, dollar sign ay lamang ng isang shorthand notation. Ito ay talagang jQuery.getJSON. Kumuha ako sa JSON mula sa URL na ito, at kapag ang kahilingan ay bumalik, tumawag ito function at pumasa sa bilang ng mga argumento kahit anong dumating pabalik mula sa server. Kaya sa ibang salita, kung pumunta ako pabalik sa browser, at pumunta ako pabalik sa quote.php, kung ano ang aking browser ay paggawa ay pagkuha ito tipak ng data. At kapag pumunta ko sa web page na ito dito, kung napansin namin sa halip pumunta sa network tab at i-clear ito, at pagkatapos ay i-type ang isang bagay tulad ng GOOG para sa Google at Kumuha Ilagay sa mga sipi, mapansin ang pahina ay hindi baguhin. Ngunit isang HTTP na kahilingan ay ginawa, at kung ano dumating bumalik dito kung tinitingnan namin ang tugon ay ang maramihang mga JSON na namin ang access sa wakas ay may ito simpleng linya dito. Data ay kung ano ang nakuha mula sa server. Presyo ay ang pangalan ng key pinapahalagahan ko tungkol sa. Kaya data.price nagbibigay sa akin na. Ngayon samantala, at ito ay ang huling halimbawa. Maaari mong gawin pa higit pa gamit ang pahina. Isang aktwal, well dalawa. Maaari naming isauli ang tag, kung tandaan mo na ito. Iyon ang JavaScript. Maaari naming gawin iyon. Tunay na kapana-panabik. Susubukan naming umalis na bilang isang cliffhanger. Ngunit higit pa excitingly, maaari mong gawin ang mga bagay na katulad nito. Kung pumunta ako sa geolocation-1, ito lumiliko out na alam ng Chrome na tayo sa latitude longitude 42.37. -71.10. Kaya mayroong kahit na higit pa doon sa iyong pagtatapon. Ngunit higit pa sa na sa susunod na linggo. Magkita Lunes.