HANNAH Blumberg: Hi sa lahat. Kami ay pagpunta upang makapagsimula lamang ng ilang mga minuto ng maaga dahil kami ay may isang buong maraming ng mga materyal upang makakuha ng pamamagitan. Ako Hannah. Ako TF. Maria ay pagpunta sa pagsali sa amin sa loob lamang ng ilang minuto. Siya ay nagtuturo sa section bago mismo. Turuan ko section karapatan pagkatapos, kaya kami ay pagpunta upang panatilihin ang mga ito sa oras at kalahati. Kaya tulad ng makikita mo dito, kami ay lubos na ang ilang mga paksa na kailangan namin upang makakuha ng pamamagitan, kaya makikita ay pupunta kami ng isang maliit na piraso ng mabilis. Ngunit kung sa anumang punto ang sinasabi namin ng isang bagay masyadong mabilis o hindi mo maintindihan, huwag mag-atubili sa pag-abala sa mga tanong. Gusto naming ma-gumawa ito ng isang repasuhin ang session bilang kapaki-pakinabang sa lahat ng mga ka hangga't maaari. Kahanga-hanga. Kaya sabihin tumalon ni karapatan sa ilang mga paksa na namin ang aktwal na tunay, tunay daglian sakop para sa pagsusulit 0 sa pagsusulit 0 session review. Kaya simula sa naka-link na mga listahan. Kaya't tiyakin na ikaw ay may ilang mga lang pangunahing kaalaman tungkol sa mga listahan ng link at ay kumportable paggawa ang ilan sa mga pangunahing mga operasyon. Kaya upang repasuhin lamang, na naka-link listahan ay mas mahusay kaysa sa array dahil sila ay maaaring maging pabago-bago. Kaya kami na malaking kalamangan. Nakita namin ang mga ito na ginagamit sa hash talahanayan kapag kami hindi alam eksakto kung gaano karaming bagay na kami ay pagpunta sa nais upang ipasok sa aming mga istraktura ng data. Sa kasamaang palad, kami ay may mga piraso ng ang listahan ng mga link sa lahat ng dako ng memorya, kaya hindi namin kinakailangang maging magawa constant time access sa anumang elemento sa naka-link na listahan. Upang makahanap ng isang partikular na elemento, kami kung umulit ng lahat ng mga paraan mula sa simula. Kaya tandaan na ang karamihan ng mga pangunahing pagpapatakbo mga wakas ng 1. Kaya insert ay lamang pagpunta sa tumagal ng 1. Burahin ang pagpunta sa kumuha n dahil tayo kung pumunta mahanap ito mula sa listahan. At ang paghahanap ay maaaring tumagal, sa pinakamalala, n. Hindi namin maaaring gawin ang isang bagay tulad ng binary paghahanap sa isang listahan ng mga link dahil hindi namin Maaari lamang sapalaran tumalon sa gitna. Cool. Kahanga-hanga. Ang isang maliit na piraso ng stack. Ito, muli, ay tumataas sa pagsusulit 0, kaya mo dapat maging sobrang komportable dito. Ngunit para sa mga stack, hinihiling namin sa iyo tandaan ng isang stack ng mga trays. At ito ay magiging unang in, huling out. Kaya stack namin ang mga bagay up sa stack, at pagkatapos ay kung kami ay sinusubukan upang gumawa ng isang bagay off-- na tawag namin pop off ang stack-- dumating kami mula sa itaas. At kung gusto naming ilagay ang isang bagay sa stack, tinatawag namin itong panunulak. Kaya ito ay palaging pagpunta sa paglaki mula sa ilalim tulad ng isang stack ng mga trays. Kahanga-hanga. Ipinatupad namin nakita stack sa parehong mga listahan ng link at mga array. Kung ikaw ay pagpapatupad may array, na nais mong tiyakin na subaybayan ang pareho ang laki at ang kapasidad. Kaya laki ay magiging kasalukuyang bilang ng mga bagay-bagay sa iyong stack, samantalang kapasidad ay ang kabuuang bilang ng mga bagay na maaari mong iimbak sa iyong stack. Cool. Very katulad, mayroon kaming queue. Sa kasong ito, sa halip ng pag-iisip tungkol isang stack ng mga trays, sa tingin ng isang line. Ito ay magiging unang, unang out. Kaya't kung ikaw ay lining up para sa isang bagay sa tindahan, inaasahan namin na ang taong unang in line ay magiging unang nakatulong. Sa halip na sabihing push at pop tulad ng ginagawa namin para sa stack, sabihin lang namin enqueue at dequeue. At muli, kung ikaw ay pagpapatupad na ito sa isang array, kailangan namin upang subaybayan ng hindi lamang ang laki ng at kakayahan, kundi pati na rin ang ulo, na kung saan ay magiging sa harap ng aming queue. Cool. Ang anumang mga katanungan sa anumang ng mga iyon? Kahanga-hanga. Paglipat ng karapatan kasama. OK, hash talahanayan. Narito ang kung saan ito ay nagsisimula sa makakuha ng talagang kawili-wili. Kaya ang isang hash table ay isa pagpapatupad ng isang nag-uugnay array. Kaya talaga kung ano ang nangyari ay namin ang lahat ng input na ito, at bigyan kami ng ito sa isang hash function na kung saan ay nagsasabing, OK, ito ay kung saan sa hash table ito aari. Kaya ang pinakasimpleng hash na nakakita kami ay lamang na sinasabi, OK, ipagpalagay na nais namin na ilagay ang string sa aming hash table. At talagang simpleng ideya maaaring sabihin, OK, pagbukud-bukurin lamang sa pamamagitan ng ipaalam unang titik ng salita. Kaya maaari mong makita dito, aming banana, ilalagay namin ito sa pamamagitan ng isang hash function, at sinasabi nito, hey, na dapat pumunta sa index 1. Kaya maaari namin mahalagang isipin ng isang hash mesa bilang isang grupo ng mga iba't ibang mga bucket. At bawat isa sa mga bucket ay pagpunta upang i-hold ang ulo ng isang listahan ng mga link. At sa na listahan ng mga link ay kung saan maaari naming talagang ilagay iba't ibang piraso ng data. Kaya diving nang kaunti pa sa isang hash, narito ang mga halimbawa ko lang inilarawan kung saan kami lang sabihin, OK, gawin ang unang titik ng salita at hindi namin pagpunta sa uri-uriin ang mga ito sa mga bucket. Kaya siguro, may makikita maging 26 mga bucket, isa para sa bawat titik ng alpabeto. Bakit ito ay hindi isang mahusay na pag-andar hash? Ano ang gumagawa ng mga ito di-tamang-tama? Oo. Madla: Ikaw ay pagpunta na magkaroon ng banggaan. HANNAH Blumberg: Oo, eksakto. Ikaw ay pagpunta sa may banggaan. Kaya na ang isang bagay. At kami ay makipag-usap tungkol sa kung paano aming makakaya ayusin ang mga banggaan sa isang segundo lang. Ang isa pang problema sa mga ito partikular na function hash ay na ang aming iba't-ibang mga bucket ay magiging ng pretty lubhang iba't ibang mga sukat. Alam namin na may isang buong maraming higit pang mga salita na nagsisimula sa A kaysa sa X, kaya kami ay pagpunta sa may napaka tabingi bucket sa aming hash table. Cool. Kaya oo, sabihin bumalik sa sa punto ng mga banggaan. Ano ang gagawin namin kung may isang banggaan? Mayroon kaming ilang iba't-ibang mga opsyon. Kaya isa, kaya ipagpalagay aming sinusubukan upang ilagay ang isang itlog ng isda sa aming hash table. At kami ay makikita, oh, gusto naming upang ilagay ito sa index 1, ngunit banana na nakatira doon. Ano ang gagawin natin? Mayroon kaming dalawang mga pangunahing mga opsyon. Bilang isa ay maaari naming sabihin, OK, walang kuwarto sa index 1, ngunit hayaan lamang panatilihin ang naghahanap sa pamamagitan ng hanggang maaari naming mahanap ang isa pang bukas na lugar. Kaya makikita namin sabihin, OK, ilagay ito sa lugar 3 ipaalam. Iyan ay isang pagpipilian. Iyan ay tinatawag na linear probing. At ang pangalawang opsyon ay nagsasabi, OK, na rin, gumawa lang bawat isa sa mga bucket ipaalam maging ulo ng mga naka-link na mga listahan. At ito ay OK kung mayroon pa sa isang bagay sa isang bucket. Kami ay pagpunta sa idagdag ito papunta sa harap. Kaya dito maaari mong makita, OK, kapag ipinasok namin itlog ng isda, namin kinuha lang saging, uri ng itinulak ito sa loob ng isang maliit na piraso at itinapon sa isang itlog ng isda sa doon. At na ring ganap fine. Ito ay tinatawag na hiwalay na chaining. Maaari mong isipin na ito bilang uri ng tulad ng isang hanay ng mga ulo sa naka-link na mga listahan. Anumang mga katanungan sa hash mga talahanayan, hash function? Kahanga-hanga. Puno at sumusubok. Kaya ang isang puno ay anumang uri ng mga istraktura ng data kung saan mayroong ilang mga uri ng hierarchy o ilang mga uri ng ranggo sa iyong iba't ibang mga bagay. At ito ay magiging sobrang malinaw na kapag nakita namin ang isang halimbawa. At nakita namin sumusubok, kasama may hash talahanayan, sa pset5-- kung saan, muli, lubos makatarungang laro para sa mga ito quiz-- bilang isa pang data istruktura na aming makakaya tindahan ng iba't ibang mga bagay. Sa kaso ng diksyonaryo, namin na naka-imbak ng grupo ng mga salita. Kaya sabihin kumuha ng isang pagtingin sa ilan sa mga puno. Kaya ito ay isang halimbawa ng isang puno. Ito ay may isang uri ng istraktura, na hierarchical istraktura, kung saan maaari mong makita na ito 1 node sa tuktok may ilang mga uri ng mga ranggo sa itaas 2 at 3, na kung saan ay sa itaas ng 4, 5, at 6 at 7, na kung saan ay sa itaas ng 8 at 9. Kaya na ang lahat ang ibig sabihin namin sa pamamagitan ng isang puno, kaya maaari mong uri lamang ng larawan na ito sa iyong ulo. Ngayon, kami ay may isang pares ng mga higit pang mga pinasadyang mga puno. Kaya isang halimbawa ay isang binary tree. At isang binary puno ay, muli, lamang ang pagpunta sa isang istraktura ng data na may ilang mga uri ng hierarchy, ngunit ang bawat isa sa mga node ay maaaring magkaroon ng hindi hihigit sa dalawang bata. Iyon ay kung saan ang salita binary ay mula. Kaya ito ay isang halimbawa ng isang binary tree. Kaya na ang isang mas maliit na kategorya ng mga puno. Ngayon sabihin makakuha ng mas tiyak at makipag-usap tungkol sa binary trees-- binary search puno, sa halip. Kaya dito ay ang ginagawa ng mga ideya hindi lamang mayroon ang bawat node sa karamihan ng dalawang anak, ngunit ang lahat ng mga anak sa mga kaliwang ay magiging mas maliit at ang lahat ng mga anak sa mga karapatan ay magiging mas malaki. Kaya mapansin lamang sa aming binary puno, may walang relasyon sa pagitan ng mga numero. Ngunit sa aming binary search tree, nakita namin, OK, narito ang 44. At ang bawat numero sa bandang kaliwa ng 44 ay mas maliit at ang lahat ng bagay sa kanan ay mas malaki. At na humahawak sa bawat antas ng puno. Kaya dito, ito ay mas maliit kaysa sa 22 at ito ay mas malaki kaysa sa 22. At na binary puno ng paghahanap. Bakit sa tingin namin ito ay tinatawag na isang binary puno ng paghahanap? Ano algorithm ay ito ipaalala sa iyo ng? Madla: Binary paghahanap. HANNAH Blumberg: Binary paghahanap. Dahil kung ikaw ay naghahanap para sa isang partikular na numero sa punong ito, sa bawat punto, maaari mo lamang kumatok off sa kalahati ng mga puno, na kung saan ay malaki. At kaya na ang pagpunta sa magbibigay sa amin ng isang bagay na hitsura ng maraming tulad ng binary paghahanap. May tanong? Lahat ng mga karapatan, cool. Lahat ng karapatan, sumusubok. Paboritong ng lahat. Kaya ito ay ang halimbawa na nakakita kami ng grupo sa klase. At muli, ito ay isa lamang paraan na maaari kaming mag-imbak ng data. Sa kaso ng mga diksyunaryo, muli, ito ay lamang ang pagpunta sa mga string. Kaya sabihin makita kung ano ang aktwal na Mukhang sa isang bahagyang mas mababang antas. Kaya sabihin tumagal ng isang pagtingin sa isang node sa isang trie. At kami ay makita, OK, may pupuntahan upang maging isang Boolean at isang node, isang pointer sa isang node. At nakita namin na ang Boolean ay tinatawag is_word. Kaya mahalagang, na ang pagpunta sa tumutugma sa mga maliit na tatsulok na sabi, kung nakuha dito, nakakita ka ng kumpletong salita. Alam namin na ang "turing" over dito ay isang kumpletong salita, samantalang lamang T-U-R ay hindi isang salita dahil hindi namin makita na ang maliit na delta. At na maliit na delta, muli, katumbas nito is_word, ito Boolean is_word. At pagkatapos kami ay may isang hanay ng mga bata. Kaya sa bawat antas, ikaw magkaroon ng isang partikular na node, at na node puntos sa isang array ng buong alpabeto. Kaya makikita mo, muli, in sa ang larawang ito Ako pagpunta sa panatilihin ang tumatalon papunta at forth-- na na array sa tuktok ay may isang bungkos ng iba't ibang nodes pagdating off ng mga ito. Ito ay may 26, o 27 kung nais mong upang isama ang isang dagdag na character. At ito ay nagbibigay sa amin ng isang paraan sa tindahan ng aming data sa isang paraan na maaaring tumingin sa na maaari mong tingnan up napakabilis na. Ano ang time lookup para sa isang trie? Madla: [hindi marinig]. HANNAH Blumberg: Oo. Sa teorya, ito ay pare-pareho ang panahon. Ito ay lamang ang pagpunta sa maging ang laki ng ang salita na nais mong tingnan up. Kahit na kung namin magdagdag ng isang zillion higit pang mga salita sa aming trie, hindi ito ay pagpunta sa tumagal kami anumang mas mahaba upang matukoy kung ang isang ibinigay na salita ay nasa trie. Kaya na talagang maganda. Madla: Ang ibig mo lamang magpasimula na array? Hindi mo nasagot ang isa o dalawang mga punto. Maaari kayong makipag-usap lamang tungkol sa na para sa isang segundo? HANNAH Blumberg: Oo naman, walang pasubali. Magandang tanong. Ang tanong ay, namin magkaroon ng isang array na pagpunta sa may node star bilang laban sa lamang node, di ba? Cool. Kaya dito kung ano ang sinasabi namin ay ang aming array ay lamang magiging payo sa iba pang mga array. Kaya ito ay essentially-- ito uri ng nararamdaman ng isang listahan ng mga link sa ganitong paraan kung saan ang bawat isa sa mga bata ituro lang sa susunod na node. At ang paraan na aming talagang matukoy, hey, OK, na iterated namin sa pamamagitan ng isang buong salita, ang salitang ito sa diksyunaryo, check lang namin ito is_word. Mahusay na tanong. Oo. Madla: OK. Kaya kung ano ang runtime para sa trie? HANNAH Blumberg: Oo naman. Kaya ang runtime para sa isang trie para lookup ay magiging tapat na oras. Kaya lamang ito ay magiging ang bilang ng mga titik sa salita. Ito ay hindi nakasalalay sa mga laki ng diksyunaryo o ang laki ng mga istraktura ng data. Kaya dito ay isang bahagyang mas simpleng halimbawa. Sa kasong ito, maaari mong makita na ang salitang bat ay sa diksyunaryo at mayroon kang mag-zoom, ngunit ikaw hindi magkaroon ng isang bagay tulad ng zoo. Paano kami gumawa ng zoo? Paano ako magdadagdag kami zoo sa aming diksyonaryo, sa aming trie? Oo. Madla: Gumawa is_word totoo para sa [hindi marinig]. HANNAH Blumberg: Good. Kaya gusto naming sabihin Z-O-O, at pagkatapos ay gusto namin gusto mong suriin off na box pati na rin. Great. Napaka daglian ni ihambing Ipaalam sumusubok laban hash talahanayan. Sinusubukan ay talagang mahalaga dahil, gaya ng sinabi namin, nagbibigay sila ng pare-time lookup. Ngunit ang malaking kawalan ay ang mga ito ay humongous. Maaari kang makakuha ng pang-unawa, kahit na sa pamamagitan ng pagtingin sa mga ito, na ito ay pagpunta sa tumagal isang malaking halaga ng memory. Kaya sila ay magiging magkano mas malaki kaysa sa hash talahanayan, pero ang mga ito ay pagpunta sa bigyan sa amin marami mas mabilis na oras lookup. Kaya na uri ng iyong tradeoff, mga bagay na mahalaga sa iyo, maging ito man ay bilis o memory. Ang anumang mga katanungan sa anumang ng na, lahat ng mga istruktura C data. Maganda. SIGE. Kami ay pagpunta sa ilipat sa isang maliit na bit ng pag-unlad ng web na may Maria. MARIA ZLATKOVA: kaibig-ibig. SIGE. HANNAH Blumberg: Maaari mong gamitin ang aking laptop. MARIA ZLATKOVA: Nice. OK, cool. Sa paglipat namin ngayon upang web pag-unlad, pinag-usapan namin ng isang maliit na tungkol sa pagbabago ng mga pahintulot ng mga file at mga direktoryo upang maaari silang ma-access sa sa ibang mga gumagamit, sa mundo, at upang maaari naming makita kung paano talaga maaari naming ihatid ang mga ito kapag bumuo kami ng mga bagay-bagay tulad ng mga website na namin ang halos lahat ay ginagawa. Kaya nakita natin ang utos chmod, na kung saan ay ang pagbabago mode, talaga. Iyan ay isang command sa Linux at ito ang mga pagbabago ng mga pahintulot ng access ng mga bagay na file system. At ang isang file system object ay isang direktoryo lamang, ang isang file, anumang bagay na maaari mong baguhin ang mga pahintulot ng. Kaya upang makita ang mga pahintulot ng file, type namin ang command ls, listahan, l. At kapag nag-type namin na, kami ay karaniwang makita ang ilang mga pahintulot na hitsura uri ng tulad nito sa harap ng isang pangalan ng direktoryo. Kaya d tumutukoy sa direktoryo. At pagkatapos kami ay may tatlong triads na talaga sumangguni sa mga pahintulot ng alinman sa ang isang user, ang isang grupo, o ang mundo. Ang mga uri ng pahintulot na aming makakaya magkaroon ng para sa mga tatlong mga grupo ng mga tao ay alinman sa r para basahin, w para magsulat, at x para maipatupad. At maaari kaming magkaroon ng mga para sa ang grupo at mundo rin. Ang mapanlinlang na bagay ay na kung minsan kapag nag-type namin ang utos chmod, Gusto namin i-type ang ilang mga numero ng na binubuo ng tatlong piraso. Kaya maaari naming gawin tulad ng 777 at na talaga tinutukoy ang mga idinagdag na halaga ng bawat isa sa mga triads dahil r ay sumangguni sa 4, w gagawin sumangguni sa 2, at x ay sumangguni sa 1, kaya kapag idinagdag up, ang bawat isa sa mga numero ng ay bumaba sa isang pinagsama-samang bilang sa isang pinagsama-samang halaga sa pagitan ng 0 at 7. Kaya namin maaaring magkaroon din ng 0 para sa walang pahintulot sa lahat. At iyon ay isa lamang ibigay sa amin ang mga pahintulot para sa alinman sa mga user, grupo, o sa mundo. Ang anumang mga katanungan sa mga ito sa ngayon? Madla: Ikaw sinabi basahin ay 4? MARIA ZLATKOVA Oo. Madla: [hindi marinig]. HANNAH Blumberg: Yup. Madla: At pagkatapos ay sa pamamagitan ng pagdaragdag ng lahat ng mga iba ay nagpapahiwatig ng iyong numero. MARIA ZLATKOVA: Oo. Oo. Ang mga ito ay mahusay na mga katanungan. Kaibig-ibig. Susunod, kami ay kumuha ng puwesto sa HTML at isang kaunti pa tungkol sa web development. Kaya lamang ay nangangahulugan HTML Hyper Text Markup Language. At iyon ay ang markup wika na ay isang standard na ito ay ginagamit upang lumikha ng mga pahina ng web. Ito ay tinatawag na isang markup language dahil sa ito ay hindi aktwal na naipon. Hindi nito sinasabi kung paano ang ilang mga code ay dapat na pinaandar o anumang bagay tulad na. Delineates Ito lamang at naglalarawan kung paano ang isang web dapat na i-set up page sa bawat isa sa kanyang mga sangkap at kung paano sila ay dapat magmukhang para sa gumagamit. Ang ilan sa mga tag na HTML na tayo tumawid ay ang sumusunod. Ang lahat ng aming mga dokumento HTML nagsimula sa mga DOCTYPE html. Pagkatapos kami ay laging may html tag. Kami ay may isang ulo at isang katawan. At ito ay mahalaga na ang HTML ay ang ganitong uri ng nested istraktura dahil sa ito ay napakalinaw. At pagkatapos ito ay nagiging tunay malinaw kapag kami kailangan upang buksan at talagang malapit na mga tag. At kami ay laging kailangan upang isara mga tag na iyong binuksan namin. At dito kami ay may ilan sa mga uri ng maagang mga bagay na gusto naming magkaroon. Kaya kami, halimbawa, ang pamagat ng CS50. At pagkatapos ay namin ang aktwal na Maaaring i-link ng isang style sheet na tumutukoy sa kung paano namin estilo ang aming website. Iyon ay CSS. Kami ay pagpunta sa pumunta sa paglipas ng ito sa susunod na pares ng mga slide na rin. Sa loob ng katawan, kami ay itakda ang ilang mga klase at mga ID. At bilang isang paalala, muli, ID ng natatangi at klase maaaring italaga sa maramihang mga item. At iyon ay nangangahulugan lamang na maaari naming gamitin ang mga klase at mga ID sa loob ng iba pang mga structures-- gayon, para sa Halimbawa, sa loob ng CSS file o style sheets-- na mag-refer sa mga tiyak na mga elemento at talaga sabihin na gusto naming i-style o disenyo ng ilang mga elemento sa ilang partikular na paraan. At ang aming sumangguni sa kanila sa pamamagitan ng kanilang mga ID at mga klase. At maaari naming ring sumangguni sa iba't-ibang mga bagay-bagay sa pamamagitan ng mga tag na rin, ngunit ID at mga klase lamang magbigay sa amin ng ilang mga kagalingan sa maraming bagay at kung ano ang partikular na namin nais na mag-refer sa. Kaya lamang ng isang halimbawa. Maaari naming, muli, sa loob ng isang CSS file na kung saan namin nais na tukuyin ang ilang mga style-- kaya kulay, font, at bagay-bagay tulad ng na- aming makakaya tukuyin ang mga estilo para sa isang katawan. Kaya na tukuyin ang mga ito para sa buong katawan tag. Ngunit pagkatapos ay maaari naming ring tukuyin ang isang estilo para sa isang #title. At muli, ang hashtag tumutukoy sa ating ID at ang tuldok ay tumutukoy sa aming klase. At pagkatapos ay para sa mga info, kami Maaari ring itakda ang ilang mga katangian. At muli, kapag pumunta namin pabalik, nagkaroon kami ng aming klase na tinatawag na info at ang aming mga pamagat ID. At maaari naming makita na namin sumangguni sa kanila sa pamamagitan #title at info. Madla: Gusto mong sabihin hashtag [? magpatibay sa akin? ?] MARIA ZLATKOVA: Sorry? Madla: Gusto mong sabihin hashtag [? magpatibay sa akin? ?] MARIA ZLATKOVA: Hashtag nangangahulugan ID, kaya #title ay tumutukoy sa kahit anong mga elemento na ito ay may ID na tinatawag na pamagat. At pagkatapos ay ang tuldok ay tumutukoy sa isang klase. Kaya info tumutukoy sa elemento na ito dahil ito ay may impormasyon class. Oo. Madla: Bakit mo makikilala ang mga ito sa HTML? Bakit sinasabi mo ang ilang mga bagay ay Mga ID at ilang mga bagay-bagay ay class? MARIA ZLATKOVA: Iyon lang ang sa you-- HANNAH Blumberg: Ulitin ang tanong. MARIA ZLATKOVA: Oh, sorry. Bakit namin makilala ang ilang mga elemento bilang mga ID at iba pang mga elemento tulad ng mga klase? Iyan na lamang dahil sa ito ay talagang madalas isang pagpipilian disenyo. Ito ay nagbibigay sa iyo ng maraming masaklaw na karunungan sa pagiging maaaring sabihin na gusto ko ang partikular na item na magkaroon ng ganitong ID dahil gusto nilang upang gawin ang isang pulutong ng mga bagay-bagay sa mga ito, at ako lamang nais na tukuyin ang isang estilo, ang ilang mga estilo o kulay kahit anong para sa item na iyon. At ang paraan upang gawin iyon ay pagbibigay lamang ito ng isang ID. At pagkatapos ay kung gusto kong magkaroon ng isang pares ng mga iba't ibang mga item pagkakaroon na, sa halip ng pagpunta at pag-set their-- sa halip ng paggawa ng ito sa pamamagitan ng tag dahil ang tag gagawin itakda ang cell para sa buong tag para sa bawat oras na tag ay ginagamit, maaari kang magtakda ng isang klase sa maramihang mga item. At pagkatapos ay ma-access lamang ng klase na at sabihin Gusto kong i-style ito klase na paraan. At muli, ang mga klase ay maaaring maging maramihang mga iba't ibang mga item at ang ID ay dapat na kakaiba. Mahusay na mga katanungan. Anumang iba pang mga katanungan? OK, kasindak-sindak. Muli, ito ay kung paano ang mga tagapili ay sumasangguni sa CSS, na may hashtag, may tuldok, o walang anumang bagay para sa pagtatalaga ng mga estilo ng ilang mga tag, tulad ng katawan. At dito kami ay may pangkalahatang syntax ng kung paano ito ay tapos na. Para ulitin ang ilang mga pinakamahusay na kasanayan para sa HTML at CSS, kailangan naming, muli, isara ang lahat ang mga tag na HTML na buksan namin. At kung ano ang inirerekomenda namin kayo gawin para sa iyong huling proyekto, pati na rin ang para sa CS50 Finance, ay upang gumawa ng Siguraduhin na ang lahat ng iyong mga HTML na napatunayan. At iyan ay tapos na sa W3 validator. At pagkatapos ay kung ano ang aming ginawa at kung ano ang inirerekumenda namin ang paggawa ng ay naghihiwalay estilo, kaya CSS mula sa markup HTML. Kaya ang anumang bagay na may kaugnayan sa kung paano ang iyong pahina ay pagpunta sa biswal tumingin at kung paano ito ay pagpunta upang mabago dapat pumunta sa isang CSS na dokumento. At pagkatapos ang iyong markup sinasabi kung paano mga bagay-bagay ay may kaugnayan sa isa't-isa ay HTML, at na dapat pumunta sa loob ng iyong mga dokumento HTML. May tanong? Mhm. Madla: Ano ang eksaktong ay pagpunta sa sa mga validation pahina kapag kami ay pagpapatunay sa HTML na [hindi marinig] nilikha? MARIA ZLATKOVA: So what-- tingin mo. Kaya kung ano ang eksaktong ay pagpunta on sa pagpapatunay pahina at bakit kailangan namin upang gawin iyon? Talaga, kailangan namin upang gawin iyon dahil ang isang pulutong ng mga oras, ang iyong browser, kung hindi mo isara ang isang tag o isang bagay tulad na, ang iyong browser ay makakaranas pa rin mailarawan ang isang pahina at maaari pa rin gumagana, ngunit ito ay pinakamahusay na pagsasanay upang tiyakin na ka na, muli, sarado ang lahat ng iyong mga tag, na lahat ng iyong mga sangkap ay ang paraan na sila ay dapat, at talaga na ito ay sa pamamagitan ng kombensiyon na mga preset. Ito ay, muli, lamang ng isang bagay na dapat mong ay pag-aaral na ginagawa, bilang laban sa pagkakaroon sloppier code at bagay-bagay na tulad ng. Oo. Pasensya na. Akala ko kayo ay ang pagtataas ng iyong mga kamay. Madla: Hindi, ako ay lamang [hindi marinig]. MARIA ZLATKOVA: OK. Madla: Salamat sa iyo. MARIA ZLATKOVA: Siyempre, salamat sa iyo. Kaya muli, nangyayari sa kung paano impormasyon ay ililipat at modelo ng komunikasyon sa paglilipat ng impormasyon. TCP / IP. Nangangahulugan lamang TCP Transmission Control Protocol at IP ay tumutukoy sa Internet Protocol. At na lamang ay tumutukoy sa ang paraan ng data ay inihatid. Kung kami ay may ilang mga data na kailangang inihatid sa you-- kaya gumawa ka ng isang kahilingan para sa isang tiyak na server. Halimbawa, kapag tayo subukan na i-access cs50.net, gumawa kami ng isang kahilingan sa CS50 server at kami makita na gusto naming makuha ang ganitong uri ng impormasyon. At pagkatapos ay ayon sa protocol na ito para sa kung paano ang impormasyon na ito ay inihatid, ang server ay nagbibigay ng impormasyon pabalik sa amin, ang client. At pagkatapos ay hindi namin magagawang tingnan ang mga impormasyon para sa pahina at pagkatapos ay gamitin ito. Kaya nga ang Hypertext Transfer Protocol ay isa lamang protocol o hanay ng mga convention na tumutukoy sa kung paano ang web browser at ang web server dapat makipag-usap. At inilagay na ito sa lahat ng sama-sama, HTTP, muli, tumutukoy lamang kung paano tinukoy ito hypertext sa pamamagitan ng HTML na kami ay nagtatrabaho sa mga ito, kung paano ito dapat na inihatid sa iyo at sa paano na data na ihahatid sa iyo makakakuha ng sa iyo. At iyon ang dahilan kung bakit, kung ikaw guys tandaan mula sa isang klase, nagkaroon kami ng maraming mga kahilingan at kami ay may isang pulutong ng mga syntax para sa mga kahilingan na ito na hindi namin pagpunta sa pumunta sa ngayon. Kaya muli, kapag nagpapadala kami isang kahilingan sa isang server, kami ay may upang tukuyin ang isang pares ng mga bagay-bagay. Kaya kailangan namin upang mahanap ang uri ng kahilingan na kami ay pagtatakda. At muli, mayroon kaming, halimbawa, GET ay isang uri ng paraan na mayroon kami sa aming kahilingan. At pagkatapos ay HTTP / 1.1 ay lamang ang protocol na aming ginagamit sa kasalukuyan. Karamihan ng panahon, na pagpunta sa protocol na ginagamit namin. Kaya kung mayroon kang isang katanungan na tulad ng sa iyong pagsusulit. Iyan ang mga convention na mayroon sa ngayon namin. Backslash ay tumutukoy sa kung ano ang uri ng bagay na kami ay humihiling. Pagkatapos, ang aming host ay, halimbawa, sa ganitong kaso, kami ay sinusubukan upang pumunta sa google.com. Kaya ito ay ang halaga para sa isang host. Ito ay isang uri ng kahilingan na maipapadala. At pagkatapos ay isang uri ng sagot na maaaring ipapadala, muli, batay sa protocol na ito, ay muli, HTTP / 1.1. Kaya na muli ang HTTP na bersyon. 200 OK lang ang code ng katayuan. At na OK ay isang parirala lamang batay sa na code ng katayuan. At pagkatapos ay ang Content-Type ay tumutukoy sa uri na ibabalik sa iyo na para na web page na matanggap mo at na ang iyong browser makapagbibigay pagkatapos. At iyon ay text / html. Madla: Ano ang ibig sabihin ng 1.1? MARIA ZLATKOVA: Iyan na lamang ang bersyon of-- oh, kung ano ang ibig sabihin ng 1.1? Iyon ay lamang ang bersyon, ang HTTP bersyon ng isang protocol na ginagamit namin. Mahusay na tanong. Iba pang mga tanong? Madla: Maaari mo bang sabihin sa ilang pananalita Content-Type tunay na mabilis? MARIA ZLATKOVA: Kaya na ay kung ano ang server. ang uri ng information-- kung ano ang uri ng nilalaman ay ang mga katanungan. Kaya na ay ang uri ng mga impormasyon na makakuha ka pabalik mula sa server, ang mga uri ng data na pagkatapos ay ang browser na maaari render na ginagamit mo. Madla: Ay na kung ano ang protocol ay nagsasabi sa iyo na gawin? MARIA ZLATKOVA: Sorry? Madla: Ay na kung ano ang sinasabi ng mga protocol? MARIA ZLATKOVA: protocol-- Ang Madla: --What ang Content-Type ay o what-- MARIA ZLATKOVA: protocol ay batay on-- ano ang protocol na nagsasabi sa iyo? Iyan na lamang ang paraan na ang impormasyon na ito ay inihatid sa iyo batay sa kung anong uri ng mga protocol ay ang impormasyon na ito got inihatid pabalik sa iyo. Ba na magkaroon ng kahulugan ng uri ng? HANNAH Blumberg: You makapag-isip ng protocol bilang a-- tingin ko Professor Malan inilarawan ito sa klase ng uri ng tulad a-- ito ay tulad ng ang katumbas ng handshaking tao. Sabihin nating, tulad ng, hey, ako ng isang kahilingan at ako malaman kung paano panghawakan HTTP ng bersyon 1.1. At pagkatapos ay ang sabi ng server, oh, OK, I-- at parehong umiiral. Alam ko rin kung paano makitungo sa HTTP / 1.1. At ako pagpunta upang bigyan i-back sa iyo ang ilang nilalaman. Sa kasong ito, ito ay pagpunta na ng uri ng teksto / html. Kaya ito ay uri ng lamang ng isang paraan ng mga ito para sa communicating-- MARIA ZLATKOVA: Ito ay lamang na nagpapatunay na ikaw parehong sumusunod sa parehong protocol at na ang parehong ng mga client at ang server-- kaya ang iyong browser at ang server-- uri ng malaman kung ano ang iyong pakikipag-usap tungkol sa at magkaroon convention para sa pagpasa sa data. Madla: Kaya ang part-- Content-Type text Content-Type ang / html-- na isang hiwalay na bahagi ng parehong message? O bahagi ng sabihin nating, 200 ito? 200 sabihin sa kanila na o is-- ba MARIA ZLATKOVA: 200 nagsasabing ang lahat ng ito nagpunta OK. At pagkatapos ay i-type ang nilalaman ay mga uri ng isang hiwalay na bahagi ng parehong mensahe, at sinasabi ang bagay na aking ibabalik ang ganitong uri ng text / html. Ang pagbibigay lamang ito ng higit na impormasyon. Magkaroon ng anumang bagay upang idagdag? SIGE. Anumang iba pang mga katanungan sa mga ito? Kahanga-hanga. Kaya ang ilang iba pang mga katayuan ng HTTP na maaari naming makuha sa karagdagan sa 200 OK, mga na nasaksihan namin marahil marahil ng isang pulutong ay 403 at 404. Kaya 404, kung ikaw ay sinusubukan upang access ang isang bagay na ay hindi umiiral. Kaya halimbawa, sa iyong CS50 Finance psets, kung ikaw ay nagre-render quote.html at hindi ka magkaroon ng file na iyon, ngunit sa halip na kayo ay nagkaroon ng quote.php, na ay magreresulta sa isang 404 Not Found dahil maaaring hindi umiiral ang file. Para sa isang 403 ipinagbabawal, na ay tumutukoy sa mga pahintulot. Kaya kung ang ilang mga file ay hindi mababasa sa pamamagitan ng mundo, maaari kang makakuha ng isang 403 ibinalik. Ang ilang mga iba na maaari ka get-- 301, Permanenteng Inilipat; 302, Natagpuan; 304, Binago; 400, Bad Request; at pagkatapos Internal Server Error para sa 500 at 503, Unavailable Service. Oo. Madla: ba namin inaasahan na kabisaduhin ang lahat ng mga katayuan? MARIA ZLATKOVA: ako ay magkakaroon mga ito sa iyong cheat sheet. [Tawa] Madla: Sigurado inaasahan naming malaman kung ano ang nag-trigger sa bawat isa? MARIA ZLATKOVA: sila? HANNAH Blumberg: Para sa mga na hindi namin tumakbo into-- kaya tanong was-- MARIA ZLATKOVA: sila inaasahan na malaman kung ano ang bawat isa sa mga status Mga code ng maaaring ma-trigger sa pamamagitan ng? Kaya para sa mga na namin ginagamit at ang bumangga sa, nais kong sabihin, yes. Kaya tiyak nakakita kami ng 200 OK at lectured ito sa psets. Nakita namin na 403, 404. Para sa iba pang mga? HANNAH Blumberg: Gusto ko sabihin 500 tila makatarungang laro. MARIA ZLATKOVA: 500, oo. HANNAH Blumberg: Oo. Mayroon lamang isang pangkalahatang kamalayan ng kung ano ang nagiging sanhi ng mga ito. At din sa pamamagitan lamang ng mga mga pangalan, maaari mong uri ng tulad ng gumawa ng isang edukado hulaan bilang sa kung ano ang aktwal na sanhi ang mga ito. Halimbawa, permanenteng lumipat, malamang ang file ay permanenteng inilipat. Madla: Ngunit sa isang nakaraang exam, nagkaroon ng iba paano mo inaasahan sa amin upang sagutin iyon? HANNAH Blumberg: That ay nagkakahalaga ng zero points. Ang tanong sa 418 sa tsarera ay technically isang HTTP status, ngunit ito ay nagkakahalaga ng zero points. Malinaw, hindi ka inaasahan na malaman ang mga ito. Madla: isang tunay na isa ba ito? HANNAH Blumberg: Ito ay isang tunay na isa, ngunit ito ay hindi nangangahulugan na kahit ano. Ito ay isang biro lamang. Internet ang mga tao ay nakatatawa. MARIA ZLATKOVA: Great mga katanungan, guys. Anumang iba pang mga katanungan? Madla: Ano ang mga panloob na error sa server? MARIA ZLATKOVA: Internal error sa server lang ay nangangahulugan na ikaw ay magawang makipag-usap sa server para sa ilang kadahilanan. Kaya ito ay hindi kinakailangan isang bagay na may sa gawin sa mga client o isang bagay tulad na. Hindi ko alam ng anumang tiyak na halimbawa na kami ay wala ng higit sa na ipaliwanag, ngunit oo. HANNAH Blumberg: Oo naman. Kaya halimbawa, tulad natin sasabihin mo ay nagtatrabaho sa mashup at nagpunta sa isang server ng Google down para sa ilang dahilan, walang kuryente, sabihin natin. Iyon ay magiging isang panloob na server error o ilang mga uri of-- gusto mo hindi makakuha ng isang tugon. MARIA ZLATKOVA: Oo. Ito ay lamang kapag ikaw ay magawang makipag-usap sa server para sa ilang kadahilanan dahil ng mga ito pagpunta pababa o iba pang kadahilanan. Kaya paglundag sa PHP. PHP, hindi tulad ng HTML, ay isang programming language. At sinimulan namin ang paggamit nito dahil sa ito ay lubhang kapaki-pakinabang para sa web development. Kami ay unang ginamit ito sa CS50 Finance. At ito talaga nakakatulong sa amin na dalhin magkasama ito markup, ang disenyo, at kung paano namin ang aktwal na gamitin ang impormasyon ng upang ipakita ang mga bagay sa isang web page. Kaya PHP mismo ay nangangahulugan PHP Hypertext Preprocessor, kaya ito ay isang recursive backnorym mismo. At pagbukas ng mga tag para sa PHP namin ang kaliwang at kanang mga arrow sa mga tandang pananong at php. Kaya na namin nakita ng grupo ng mga ito. Ngayon, lamang kami ay pagpunta sa pumunta sa paglipas ng ilan sa mga pangunahing bagay tungkol dito. Kaya sa PHP, ang mga variable simulan pangalan na may dollar sign. Hindi namin tukuyin, muli, type anymore isang variable. Katulad ng ginawa namin sa C, hindi namin kailangan upang gawin iyon. Maaari naming gawin ang isang grupo ng mga iba't-ibang mga bagay-bagay na may mga variable. Maaari naming ilagay ang mga ito nang sama-sama sa pamamagitan ng concatenating ito may mga tuldok notasyon, na hindi namin mai-gawin sa C muli. Muli, kami ay may isang bit mas masaklaw na karunungan may PHP sa mga tuntunin ng mga variable. Muli, hindi namin ay may isang pangunahing pag-andar. At PHP ay naisalin bilang laban sa pinagsama-sama, Kaya lang kung paano namin ginawa para sa C file, hindi namin ay may upang gawin iyon para sa PHP. Ngunit sa halip, ang mga paraan na ang mga wika ay tatakbo sa pamamagitan ng kanyang sarili, ito ay kahulugan. At pagkatapos ay maluwag type ito ay nangangahulugan lamang na tayo Hindi mo na kailangang tukuyin ang isang variable type at ang mga uri ng variable ay naunawaan sa runtime. Madla: Ngunit ano ang ginawa mo ibig sabihin sa pamamagitan ng dot pagdudugtong? MARIA ZLATKOVA: Oo naman. Kapag gusto naming ilagay ang mga bagay together-- kaya kung nagkaroon kami ng ilang mga variable na nagkaroon ang halaga ng 3 at nagkaroon kami ng isa pang variable na nagkaroon ng mga halaga ng string, maaari naming ilagay ang mga variable na magkasama sa pamamagitan ng paglagay ng isang tuldok sa pagitan ng mga ito at concatenating kanila. O maaari naming lumikha ng isang variable na tinatawag na pangalan at ilagay ang mga ito nang magkasama sa pamamagitan ng concatenating dalawang string. Kaya kung kami ay may isang string sa double quotes at ilalagay namin ang isang tuldok pagkatapos na ito, at pagkatapos ay nagkaroon kami ng isa pang string, na ay lumikha ng isang string kabuuan. Madla: OK. MARIA LATVIA: Ay na i-clear? Madla: Oo. MARIA ZLATKOVA: OK. Oo. Madla: Kapag sinabi mo naisalin na sa halip na naipon, sinasabi mo na hindi mo kailangan upang maging tiyak na kapag ito ay dumating sa PHP kumpara C? MARIA ZLATKOVA: Kapag sinasabi namin naisalin na bilang laban sa pinagsama-sama, kung ano ang ibig sabihin namin? Kaya na nangangahulugan na hindi namin kailangan mga maipapatupad na file na tumakbo PHP. Ito ay nangangahulugan na ito ay nagpapatakbo ng pumupunta dito. Ba na magkaroon ng kahulugan? Kaunti pa. HANNAH Blumberg: Kaya mo makapag-isip ng isang interpreter bilang isa pang program na responsable para sa pagpunta linya sa pamamagitan ng linya sa pamamagitan ng PHP at talagang Isinasagawa ang mga ito, bilang kabaligtaran sa pag-ipon ng lahat ng ito pababa sa binary. Hindi ito talaga ang ibig sabihin ng kahit na ano tungkol sa kung paano natukoy namin na kailangan upang maging. Kailangan pa rin namin upang maging tumpak, at hindi nakalimutan mo ang iyong tuldok-kuwit, at tiyakin mayroon ka sa iyong dollar sign, at ang mga bagay na tulad ng. Magandang tanong. MARIA ZLATKOVA: Oo. Kaya bawat linya, tulad ng laban sa may C file, kami ay may sa gawin ang buong final bago maaari naming aktwal na patakbuhin ito. Iyon ang pangunahing pagkakaiba. Ngunit muli, kami ay hindi maaari talagang maging mas tiyak. Kaya array sa PHP ay kumakatawan talagang isang order na mapa. Kaya halaga array associate sa keys. Ang dalawang mga paraan upang magpahayag ng isang array, batay sa mga ito syntax, maaari naming maging mas malinaw sa nagsasabi kami ay may isang array at kami ay may ito key1 na mga mapa sa ito value1, key2 na ang mga mapa value2. O maaari naming lamang lumikha ng isang array na naglalaman ng mga halaga ng kanyang sarili at pagkatapos ay ang key ay nauunawaan sa isang paraan. Ang anumang mga katanungan sa mga ito? Madla: Ano ang gusto ng mga susi sa ikalawang halimbawa? 0, 1, 2, 3? MARIA ZLATKOVA: Halimbawa, ito lang ang susi sa ito ay hindi kinakailangang gumawa ng isang pagkakaiba. Sila tukuyin lamang kung paano mo magagawa gamitin ang mga halaga sa loob ng mga ito. Kaya kung kami ay may isang foreach loop sa PHP na gagawin daan sa amin upang pumunta sa lahat ng mga halaga, maaari naming pumunta sa lahat ng mga halaga, kahit na mayroon o kami ay hindi natukoy isang tiyak na susi sa loob ng site Nakaraang syntax. Kaya kahit na may ganitong uri ng array, maaari pa rin namin magkaroon ng isang foreach loop na napupunta sa pamamagitan ng bawat ng halaga sa key sa array. Kaya ang syntax ng isang foreach loop, namin magsimula sa isang array. Ito $ arr variable ay ang aming aktwal na array na tinukoy natin sa nakaraang slide bilang halaga na literal napupunta sa pamamagitan ng bawat isa sa mga values, hindi alintana kung nagkaroon kami ng isang key o hindi. At pagkatapos ay maaari naming gawin ang isang bagay na may ang halaga sa loob ng foreach loop. Kaya muli, kung kami ay may isang array tulad nito dito created-- kaya kami ay ang key ng foo at halaga ng bar, ang susi ng baz at halaga ng qux-- maaari kaming magkaroon ng foreach loop na Dumadaan array bilang halaga key at pagkatapos ay gawin ang isang bagay gamit ang key at / o halaga. Ngunit hindi namin kinakailangang laging kailangang magkaroon ng isang foreach loop na Dumadaan array bilang susi mapa upang value. Maaari naming pumunta sa pamamagitan ng foreach loop array bilang halaga. HANNAH Blumberg: At sa tingin ko to-- ay iyong tanong, ano ay ang implicit index? Madla: Kinda. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Oo, oo. Kaya talaga, kung hindi mo tukuyin ang isang susi, ito ay magiging 01. MARIA ZLATKOVA: Oo. Katulad ng C, ito ay zero index kung hindi mo tukuyin ang isang susi. Madla: Paumanhin. Puwede mo subukan pagsasalita Medyo louder? Nagkakaroon ako ng isang maliit na piraso ng problema sa pandinig ang lahat. MARIA ZLATKOVA: Ako kaya paumanhin. Oo siyempre. Kaya ang gusto mo sa akin upang pumunta muli sa paglipas ng ito? O kaya ay this-- Madla: Kaya sa nakaraang slide-- kung maaari kang bumalik lamang para sa isang segundo. MARIA ZLATKOVA: Siyempre, paumanhin. Madla: Kaya ang pangalawang array dito ay hindi mukhang may isang halaga na susi, medyo [? pagsasagawa. ?] MARIA ZLATKOVA: Right, right. Madla: Kaya kung paano na ang trabaho kapag sinabi mo ito ay ang lahat o wala. Para sa akin, na ganito ang hitsura a [? foo?] na. MARIA ZLATKOVA: Oo, oo. Kaya muli, ito ay isang order na mapa sa ganitong kahulugan na ay nauunawaan, halimbawa, ang mga index dito ay maaaring maunawaan bilang 0, 1, 2, 3. Muli, na ang pagkakaroon ng mga ini-index ay ang aming katumbas ng pagkakaroon ng key na nai-map papunta halaga. Kaya kung ang aming key ay 0-- sorry. HANNAH Blumberg: Hindi, mayroong tisa up dito. Ito ay talagang talagang maganda. MARIA ZLATKOVA: Mabuti iyan. SIGE. Kaya muli, $ arr 0 ay ang susi para sa halaga 1. 0 ay ang susi para sa halaga ng 1. Madla: Sorry. Ito ay invisible. HANNAH Blumberg: Sige, Huwag na. Tisa ay isang masamang ideya. Kumuha ako ng ito pabalik. Maaari mong isipin na ang mga susi bilang 0 mga mapa sa ang halaga 1. MARIA ZLATKOVA: Oo. Kaya ito ay 0, ito ay 1, 2, 3. Ang mga maaaring maging ang iyong mga susi. Maaari mong isipin ng mga ito as-- oo. Kaya sa halip ng pagkakaroon ng tahasang key, ang mga ito ay uri ng naiintindihan na rin ang pagiging ang index simula sa 0. Tisa Ang hindi tumulong. Oo. Madla: Para sa foreach loop, kung gusto naming makita ang bilang halaga, Gusto ito ay awtomatikong index lamang sa 0? MARIA ZLATKOVA: Oo. Ito ay pumunta sa pamamagitan ng bawat isa sa mga halaga. Madla: [hindi marinig] bilang 0 o gagawin na lamang 0? MARIA ZLATKOVA: Gusto mong magkaroon ng sabihin ng dollar sign at pagkatapos ay ilang pangalan ng variable, halaga. Madla: [hindi marinig]. MARIA ZLATKOVA: Sorry? Madla: Paumanhin, hindi ako lamang sinusubukan mong matandaan. Paano mo na kung ikaw ay maaaring gawin ito awtomatikong pag-index ay 0 lang ng? MARIA ZLATKOVA: Kaya kung paano mo gawin iyon kung hindi ka magkaroon ng tiyak na mga pangalan ng key? Madla: Oo. MARIA ZLATKOVA: Gusto mo define-- lamang lamang sabihin sa iyong sarili bilang ng ilang pangalan. Kaya sa inyong psets, guys baka tandaan foreach $ hilera bilang $ hilera, lumikha kami mismo ito $ hilera sinasabi gusto naming pumunta sa pamamagitan ng hilera bilang $ hilera. Kahit na hindi namin ay may ito tahasang $ hilera tinukoy, kami ay maaaring pumunta lamang at sabihin ito ay maaaring maging ang aming mga key, at pumunta lamang sa pamamagitan ng bawat isa sa mga halaga. Madla: Kaya ay ang halaga ng isang bagong variable kami ay ang paglikha sa mga tindahan ng [hindi marinig]? MARIA ZLATKOVA: Kaya ito ay hindi likas na isang bagong variable. Ito ay isang variable na tumutukoy sa sa loob ng array sa bawat isa sa kanila. HANNAH Blumberg: Ito ay ng isang bagong pangalan ng variable. MARIA ZLATKOVA: Oo, ito ay isang bagong pangalan ng variable, ngunit hindi ito ang inherently-- oo. Ito ay lamang ng isang bagong variable na maaari mong gawin iyon. Kaya lang kung paano gawin ang ginawa namin $ hilera bilang $ hilera, hilera ay isang bagong pangalan ng variable na tayo ay maaaring lumikha sa aming foreach loop. Hindi nito kailangang naroroon na bago na. Madla: Maaari kang pumunta sa pamamagitan ng logic para sa bawat isa, gamit ang mga halimbawa doon? MARIA ZLATKOVA: Mhm. Pasensya na. Narito ang mga halimbawa. Oo naman. Kaya para sa bawat array-- kaya ay nangangahulugan na ang pumunta sa array na ito bilang susi value-- na pupuntahan pumunta sa pamamagitan ng array at magpunta muna at makakuha ng foo, ang key foo at ang halaga bar. At pagkatapos ay sa ikalawang pag-ulit ng loop, ito ay pagpunta sa pumunta sa pamamagitan ng at tumagal ang susi baz at ang halaga qux. At pagkatapos ay maaari mong gawin ang isang bagay na may alinman sa kanila o pareho ng mga ito. Madla: Kaya ang ideya sa likod pagkakaroon ng isang mahalagang punto sa ang halaga, ano ang gagawin mo end up sa pag-access? MARIA ZLATKOVA: Ano ang ideya ng pagkakaroon ng isang key na tumuturo sa halaga? Ito ay isa lamang convention, ang isa pang paraan ng pagpunta sa pamamagitan ng array at ng kakayahang ma-access ang alinman sa key o ang halaga o pareho at gamitin ang mga ito. Madla: Ano ang mga papel para sa utos na ang foreach tumatakbo sa? Kaya kung kami ay upang magdagdag ng mga elemento sa array sa ibang pagkakataon, ay ang unang mga bago sa mga tinatawag na sa foreach array, o magiging susunod? MARIA ZLATKOVA: Kaya kung ano ang ang pagkakasunod-sunod na ang foreach loop napupunta sa pamamagitan ng isang array in? Ito ay napupunta sa pamamagitan ng unang element sa huling elemento, sa huling idinagdag element. Kung nagdagdag ka ng mga elemento sa susunod, gagawin nila maging accessed-- ang unang elemento ay ma-access bilang ang unang elemento ng array, at pagkatapos ay gusto mong pumunta sa pamamagitan ng bawat isa sa ang mga elemento tulad ng mga uri ng isang ordered-- hindi isang order, ngunit ang paraan na ang mga ito ay ilagay sa array. Madla: Kaya bagong elemento ay idinagdag sa susunod? Kaya ito ay naka added-- ang mga ito ay ang huling mga sa [? pag-ulit. ?] MARIA ZLATKOVA: New elemento can-- karaniwang, kapag ang mga bagong elemento ay idinagdag, ay idinagdag sila sa dulo ng array? Madla: Oo. MARIA ZLATKOVA: Naniniwala ako na ito. Oo. At pagkatapos ay sa iyong foreach loop, matapos mong nagdagdag ng mga bagong elemento at pumunta ka sa pamamagitan ng mga ito, ang mga bagong elemento ng gagawin maging accessed-- mga bagong elemento, kung ito ay Idinagdag huling, ito ay ma-access sa huling. Madla: Maaari mo lamang magbigay ng isang halimbawa ng isang bagay na gagawin [hindi marinig] na may isang bagay na may halaga tulad ng [hindi marinig] o halaga, Gusto kung paano gusto mong i-format na? MARIA ZLATKOVA: Oo naman. Maaari ko bang magbigay ng isang halimbawa ng kung ano ang Gusto naming gawin sa ang halaga? Kaya kung ano ang maaaring maging pamilyar sa iyo guys ay na kami ay wala sa pamamagitan ng isang array at talaga naka-print bawat isa sa mga sangkap na ito, halimbawa, bilang bahagi ng isang list order o isang bagay na. Ba na magkaroon ng kahulugan o ang gusto natin to-- Madla: Maaari naming i-print ang mga halagang ito sa labas? MARIA ZLATKOVA: Oo, maaari naming i-print at pagkatapos ay karaniwang $ na halaga dahil sa na tiyak na halaga, kami ay magiging imprenta ang halaga sa loob ng mga ito. Kaya kung kami ay sa aming unang pag-ulit ng mga ito at naka-print na kami ng $ na halaga, ay pag-print namin bar. Madla: Mayroon ding para loop sa PHP o foreach loop lamang? MARIA ZLATKOVA: May para sa mga loop sa PHP din. At ang kanilang mga logic ay halos ang katulad ng kung ano ang iyong na-ginagamit sa. Madla: Kaya ang halaga nito ay null. MARIA ZLATKOVA: Ito ay tulad ng pareho. Oo. Madla: lamang ako ng pagpunta sa magtanong. Kaya kapag ipinapahayag mo ang isang array, hindi mo na kailangan upang sabihin kung ano ang laki ito ng pagpunta sa maging, na nangangahulugan na maaari mo lamang magdagdag at mag-alis ng mga elemento [hindi marinig]. MARIA ZLATKOVA: Yup. Oo. Mismong. Kung ating sinasabing isang array, kami ay hindi na kailangan sabihin kung ano ang sukat na ito ay, upang maaari naming lamang magdagdag ng mga elemento papunta ito mamaya rin. Higit pang mga tanong? Kaya nagdadala PHP at HTML magkasama, kung ano ang seen-- namin na rin, halimbawa, sa halimbawang ito, kami ay isang HTML form na may isang input field. At ang input field ay pangalan lamang at pagkatapos ay ito ay isang pindutan Isumite. At kapag pinindot mo ang Isumite button, sa aming hello.php file, dahil ang paraan para sa mga form ay makakuha ng, maaari naming ma-access ang anumang ay sa pangalan sa pamamagitan ng ito makuha global variable na is-- ang syntax para sa mga ito ay $ _GET. At pagkatapos ay maaari naming ma-access ang anumang mga input ng user sa loob ng form na para sa pangalan sa pamamagitan ng pagtukoy sa mga pangalan ng patlang na iyon. Anumang iba pang mga katanungan o anumang mga katanungan sa mga tiyak na halimbawa? Madla: Saan ang PHP? MARIA ZLATKOVA: dito. Kaya ito ay ang aming opening tag para sa PHP. Madla: Oh, right. MARIA ZLATKOVA Oo. HANNAH Blumberg: Ang = ay shorthand sapagka't ito ang PHP at lamang echo. Madla: Oh. MARIA ZLATKOVA: Oo, paumanhin. Dapat ginawa ko na malinaw. HANNAH Blumberg: Print. MARIA ZLATKOVA: Ito lang ang pag-andar na nagbibigay-daan sa amin upang mag-print ng isang bagay. Mahusay na tanong. Kaya going-- yes. Madla: Mayroon bang pagpunta sa lubos na isang piraso ng hand coding ng PHP at HTML sa quiz 1? MARIA ZLATKOVA: May ay maaaring maging isang patas na dami ng pagpapakahulugan ng PHP at HTML, hindi kinakailangang tulad ng isang malaking halaga ng coding, bagaman maaaring mayroon kang magsulat ng isang foreach loop, kahit na, para sa isang loop. Anuman sa mga loops na tayo masakop dito ay makatarungang laro. At na karamihan ito. HANNAH Blumberg: Gusto ko maging handa. Sa parehong paraan na hiniling namin sa iyo upang magsulat ng isang bungkos ng mga C function sa pagsusulit 0, Gusto ko ay handa na gawin ang parehong sa PHP at JavaScript. MARIA ZLATKOVA: Oo. HANNAH Blumberg: Gusto ko sabihin isang little-- tulad kami ay hindi pagpunta sa gawin ay sumulat ng isang malaking HTML page dahil lamang na ang isang maliit na piraso nakakapagod, ngunit maaari kang magkaroon ng bahagi. Iyan ay lubos makatarungang laro. Tulad ng maliit na HTML na pahina, ganap na makatarungan. Madla: OK. Paano ang tungkol sa JavaScript pati na rin? HANNAH Blumberg: Oo. JavaScript ay makatarungang laro. MARIA ZLATKOVA: Oo. Iyan ay lubos makatarungang laro. HANNAH Blumberg: Kami makakuha sa na sa tulad ng 10 minuto. MARIA ZLATKOVA: SQL, muli, Nakabalangkas na Query Wika. Ito ay nagbibigay-daan talaga sa amin upang pamahalaan ang data sa isang pamanggit database management system. Iyon lang talaga ang ibig sabihin na mayroon kami sa tabi-tabi sa tindahan ng ilang mga data na maaari namin nais na gamitin ito sa isang website o sa ilang iba pang mga form. At pagkatapos kami ay may mga query upang makakuha ng impormasyon mula sa aming database, o upang ipasok ang impormasyon sa mga ito. Ang isang pulutong ng mga karaniwang ones-- UPDATE, INSERT, PUMILI, at ALISIN. Kaya para sa UPDATE, ito ay ang syntax para sa pag-update ng data sa isang database. Ina-update ang talahanayan na ito na tinatawag na mesa sa pamamagitan ng pagsasabi SET, maaari naming i-set ang ilang mga halaga sa lahat hilera sa pantay na ang iba pa. Kaya maaari rin naming tukuyin ang ilang tiyak entries na gusto naming baguhin at na maaaring maging gamit SAAN. At maaari naming tukuyin na gusto lamang naming baguhin ang ilang mga hilera kung saan ang mga bahay para sa, kung nagkaroon kami ng isang talaan ng mga mag-aaral at ang lahat ng mga mag-aaral ay nagkaroon ng bahay, kaya gusto naming baguhin ang ilan lamang sa mga halaga kung saan ang isang bahay ay katumbas Currier, Halimbawa. Para INSERT, maaari naming ipasok tiyak na halaga sa isang table. Kaya INSERT sa table, at pagkatapos ay ang halaga, at pagkatapos ay sa mga panaklong, tukuyin natin kung saan ang halaga na gusto mong ipasok. Kaya INSERT sa table, col1 at col2, ang halaga ay VAL1 at VAL2. Kaya ito pagsingit talaga ng isang bagong hilera sa isang table na naglalaman ng mga halaga ng 1 at 2 sa ilalim ng haligi ng 1 at 2. At pagkatapos kami ay pagpunta sa pumunta sa ibabaw isang mabilis na halimbawa ng kung paano ito mukhang tulad ng sa aming database sa isang maliit na bit. Ngunit ito final query na ako Sa tingin namin ay pagpunta sa pumunta sa ibabaw, SELECT, pinapayagan lamang sa amin upang piliin ang data mula sa isang table na posibleng gamitin ito pagkatapos. At ang paraan namin ito ay namin tindahan lamang ito sa ilang mga variable. At pagkatapos ay marahil maaari naming gamitin ang mga ito muli. Kaya SELECT star nangangahulugan piliin ang lahat. Iyan ay isang shorthand lamang para sa pagpili ng lahat. MULA mesa SAAN, kami ay naghahanap para sa ilang tiyak na mga kondisyon, kaya kung saan ay katumbas ng column isang bagay, halimbawa. Kung nais lang namin sa piliin ang lahat mula sa table, ito pinipili lamang ang lahat ng mga haligi at ang lahat ng mga hilera mula sa isang table. At pagkatapos ay ALISIN MULA mesa SAAN col katumbas ng isang bagay, ito lamang tinatanggal ang ilang mga hilera mula sa aming mga talahanayan kung saan mayroon kaming ilang mga tiyak na mga kondisyon. Sa kasong ito, ang mga kondisyon mga haligi ay katumbas ng isang bagay. Kaya lamang ng isang mabilis na halimbawa nito. Kung kami ay may table na ito karapatan dito at kami ay ipasok ito sa isang table, ang mga halagang ito, na ipasok ang isang bagong hilera. At kung kami ay auto-pagdagdag, ito gagawin dagdagan lamang ang aming ID mula 0 hanggang 1 sa 2. Kung pinili namin ang lahat mula sa mga mag-aaral, ito nagbabalik lamang ang lahat ng mga patlang at ang lahat ng mga hilera. Saan taon ay mas malaki kaysa sa o katumbas ng 2016, na bumalik lang Hannah at ang aking sarili. At pagkatapos ay kung lang pinili namin taong id at taon FROM mga mag-aaral kung saan ang mga bahay ay Cabot House, na Gusto, muli, bumalik Hannah at ang aking sarili. Pagkatapos kung tinanggal namin mula sa mga mag-aaral kung saan ang pangalan ay katumbas ng Rob, na tanggalin ang buong hilera. At pagkatapos ay kung kami ay itakda ang pangalan, UPDATE mga mag-aaral SET pangalan ay katumbas sa Daven SAAN bahay ay pantay-pantay Cabot House, na ang pagpunta sa pumunta sa mga hilera at pagkatapos ay i-update ang pangalan. At pagkatapos ng ilang mga uri SQL data ay Pansamantalang trabaho, VARCHAR, INT, at lumutang. Ang mga ito ay makatarungang laro. Gusto kong pumunta nang muli at tiyakin na alam mo at magkaroon ng mga ito sa iyong cheat sheet, kung ano ang bawat isa sa mga character ay ginamit para sa, kung ano na ginamit mo ang mga ito sa iyong psets, at tiyakin na hindi ka pamilyar at komportable sa pagkakaroon na pumili mula sa iba't ibang mga uri ng data sa iyong pset. Oo. Madla: Ano ang table na naka-imbak? Oo, kung saan naka-imbak ang talahanayan na ito? MARIA ZLATKOVA: Well, sa ngayon, hindi ito ay naka-imbak. Gayon pa man, kung saan naka-imbak ang talahanayan na ito? Ngunit ito ay maaaring ma-imbak sa isang database SQL. Madla: At kung saan ay ang database SQL? Sa computer, online isang lugar, ang mga server? MARIA ZLATKOVA: Ito ay maaaring maging isang bilang ng iba't ibang mga bagay. HANNAH Blumberg: ko interfaced kami sa SQL mga talahanayan karamihan sa phpMyAdmin. Kaya maaari naming hilingin sa isang server upang mag-imbak ang mga ito para sa amin. Kami ay maaaring itabi ang mga ito sa aming sariling computer. MARIA ZLATKOVA: Ito lamang ay depende kung paano mo nais na gawin ito para sa iyong sarili. Ngunit kami ay pag-iimbak mga ito, bilang Hannah nabanggit, sa phpMyAdmin, na kung saan ay online. At pagkatapos ay ang paraan na ginagamit namin PHP at SQL, iniimbak namin ito sa ilang mga variable kung ano ang aming na-query para sa. Kaya kung PUMILI namin ang lahat FROM history kung saan user_id katumbas ng session id, na piliin ang lahat ng mga hilera para sa mga partikular na tao na ay naka-log in mula sa kasaysayan talahanayan at uri-uriin ang mga ito sa mga hilera. Ang isang cool na bagay na malaman na query function na CS50 pinoprotektahan laban sa SQL iniksyon tag. Iyon ay nangangahulugan lamang na ito ay gumagawa sigurado ang input na ipinasok ay tama at na ang mga tao na ay ang pagpasok ng input ay hindi nagsisikap na input ang ilang mga malisyosong code upang i-drop ang alinman sa aming mga talahanayan o tanggalin ang lahat ng bagay sa loob ng aming database. Ang isang mabilis na pangkalahatang-ideya ng Modelo Tingnan Controller model, ito lamang ay isang paraan ng pag-aayos at nag-iisip tungkol code. Ito ay muli, isang disenyo tularan. Ano ang ibig sabihin nito ay na namin can-- at ito ay mahusay na kasanayan sa hiwalay sa iba't ibang bahagi ng aming mga code at kung ano ang kanilang kontrolin sa mga tatlong paradigms. Kaya ang aming pagtanaw ay pinaka-madalas na ang aming mga template, ang aming mga layout, ang mga paraan na itinakda namin kung paano ang hitsura ng aming code. Iyon ang aming mga CSS file at ang paraan ay halos na natukoy namin ang disenyo ng aming code, talaga. Ang aming controller ay halos kung ano namin nai-paggawa na may mga file na PHP. Kaya muli, nagtatrabaho sa mga impormasyon na mayroon kami at pagtukoy kung paano na impormasyon ay ginagamit, at pagkatapos ay pagpasa na impormasyon mag papunta sa view o modelo. At ang mga modelo, ang mga paraan na kami Gumagamit ay ay ang aming database, kaya kung saan ang aming impormasyon ay naka-imbak sa gayon ito ay isang lugar upang manirahan sa, at alinman sa mga code na may kaugnayan sa paraan na makuha namin ang impormasyon na iyon o ang paraan na aming i-update ang impormasyon na iyon. Kaya sa mga modelo ng MVC, HTTP kahilingan ay ipinadala sa isang web server. Pagkatapos, ang binibigyang-kahulugan controller ang kahilingan mula sa mga gumagamit at pagkatapos ay napatunayan ang input ng user. Ito ay opsyonal na kami ang controller usap sa isang modelo, para sa isang bagay tulad ng ating database o ilang iba pang mga pag-andar na relays impormasyon. At pagkatapos ay sa wakas, ang controller ipinapasa ang impormasyon papunta sa view sa gayon ay maaari itong maging render at na ito ay maaaring makikita ng sinumang tao pag-access sa web page. May tanong? Kahanga-hanga. Kaya muli, ang mga modelo, pag-andar nito, muli, ay paulit-ulit na pag-iimbak ng impormasyon, pamamahala at pag-aayos ng data. At kung ano ang nasaksihan namin sa Hanggang dito ang MySQL database at ang anumang mga file ng data na maaaring gamitin. View, pagtatanghal ng impormasyon sa sa gumagamit, ang UI, o user interface. At ang mga halimbawa nito ay HTML. At pagkatapos ay magkaroon tayo ng minimal PHP. Kaya para sa isang loop na iterates higit sa data na naka-print out ay bahagi ng view, bilang taliwas sa mga controller. At pagkatapos ay isang pulutong ng aming mga file na PHP mahulog sa kategorya controller. Lamang Ito ay pinangangasiwaan ng mga kahilingan ng gumagamit at makakakuha ng impormasyon mula sa mga modelo. Tumatalon papunta sa Document Object Model, ito lamang ay tumutukoy sa paraan HTML mga dokumento ay organisado. At sila ay isasaayos sa isang puno structure na may isang hierarchy. Kaya kung kami ay may access sa [hindi marinig] representasyon ng mga dokumento, maaari naming magtrabaho sa mga dokumento, tulad ng namin manipulahin ang mga bagay talaga. At upang gawin ang isang Medyo mas malinaw, kapag kami ay may isang pulutong ng aming mga iba't ibang mga tag tumugon sa iba't ibang mga ruta sa aming tree. At pagkatapos ay para sa mga halimbawa na ito, kami Mayroon ang panimulang node dokumento. Mayroon kaming, pagkatapos, ang aming HTML node na hating sa ulo at katawan. Head ay may pamagat at pagkatapos ay ang pamagat ay naglalaman hello, mundo. At ang aming mga katawan lamang ay naglalaman ng hello, mundo rin. Kaya ang anumang mga katanungan sa alinman sa mga bagay-bagay na namin sakop sa ngayon? At kung hindi, Hannah ay kumuha ng higit sa JavaScript. Kahanga-hanga. HANNAH Blumberg: OK, cool. Kung ang anumang bagay ay lumalabas na may PHP o HTML, o alinman sa mga bagay-bagay na sakop Maria, maaari naming laging i-pause. Kami ay gumagawa ng mas mahusay na sa panahon na muli, kaya kahanga-hangang. At lamang upang bumalik talagang mabilis na ito, kung pagtingin mo ang bawat exam nakaraang taon, ito pagdating up either-- dito ay ang ilang mga HTML, gumawa diagram na ito. O narito ang diagram na ito, gumawa ng ilang mga HTML, kaya tiyak pagsasanay na iyon. At pagkatapos na ang isang garantisadong tanong na maaari mong makakuha ng karapatan. Cool. Kaya sabihin makipag-usap tungkol sa JavaScript at kung ito ay isang maliit na piraso naiiba mula sa mga wika tulad ng PHP at C, ang dalawang wika ng nakita natin sa simula pa. Kaya bilang isa, ito ay maluwag type. Iyon ay tulad ng PHP, ngunit hindi katulad ng C. Ito ay isang interpreted wika. Muli, na tulad ng PHP, hindi katulad ng C. At ito ay pagpunta sa nagpapahintulot sa amin upang use-- ito gumagana tunay mabuti sa mga pahina ng web. Ito ay pagpunta sa-daan sa amin upang manipulahin ang nilalaman at hitsura nito at kung ano ang ginagawa nito. Kami ay pagpunta upang makita ang isang maliit na piraso ng Ajax. Ito ay nagpapahintulot sa amin upang makipag-usap asynchronously sa iba't-ibang servers at makakuha ng impormasyon. At ito ay ang mga bagay na tunay naghihiwalay JavaScript mula sa PHP at C ay na ito ay client-side. Parehong PHP at C ay karaniwang server-side. Para sa nakararaming bahagi at halos buong ano nasaksihan namin, hindi bababa sa ito klase, JavaScript gawang sa client-side, na nangangahulugan na ang mga browser ay talagang responsable para sa pagpapatakbo ng mga ito. At na nangangahulugan na hindi namin kailangan upang makipag-ugnayan sa server. Kaya ito ay nangangahulugan na maaari itong maging ng maraming mas mabilis dahil sa ito ay talagang lamang ito ay Chrome, ito ay Safari, ito ay Firefox, anumang ikaw gamitin ang aktwal na tumatakbo ang iyong JavaScript. Madla: Ano ang ibig sabihin ng asynchronous? HANNAH Blumberg: Ah, ano ang ibig sabihin ng asynchronous? Mahusay na tanong. Asynchronously means-- well, ang nilalaman na kung saan ang ginagamit namin ito ay, OK, kami ay ay ang paglikha ng isang web page at kailangan namin upang makakuha ng ilang impormasyon. Kaya sa mga halimbawa ng mga mashup, ilang impormasyon na maaari naming nais ay mga pamagat ng artikulo. Ngayon, could-- namin isa sa option ay upang gawin ito synchronous at na nangangahulugan na hahayaan itigil, pumunta makakuha ng mga artikulo, makakuha ng likod ng artikulo, at pagkatapos ay render, ngunit iyon ay magiging talagang mabagal. Iyon ay magiging isang masamang karanasan ng user dahil gusto mo lang ma-upo may naghihintay para sa isang bagay na tumugon. Asynchronously nangangahulugan na namin makikita magpatuloy pagpunta tungkol sa aming negosyo, nagre-render ang pahina, at magpapadala kami off ng isang kahilingan na uri ng pagpunta sa mangyayari sa background. Sa tingin ko gagamitin namin ang mga halimbawa sa lecture ng pagtawag Rob at sinasabi, hey, maaari mong tingnan ito up para sa akin at bumalik sa akin, bilang laban sa akin lamang naghihintay sa telepono. Kaya asynchronously nangangahulugan ito mangyayari sa background ang layo mula sa amin kahanay. Mahusay na tanong. Ano pa? Great. Susubukan naming tumalon ng maraming higit pa sa asynchronous kahilingan sa Ajax. Madla: ba JavaScript-- kung saan ginagawa Bumagsak sa model-view-controller? HANNAH Blumberg: Great tanong. Saan ang JavaScript pagkahulog may model-view-controller? Hm. Hulaan ko ito ay maaaring fall-- kaya hindi namin karaniwang tulad ng upang squish ito sa na tularan, ngunit hulaan ko nais kong sabihin, OK, kaya JavaScript talaga ay pagpunta sa payagan amin upang mangalap ng data, bigyang-kahulugan ang data, talagang gawin makabuluhang mga bagay na may data. Sa ganoong paraan, ito ay tunay control-like. Ngunit ito ay din ng pagpunta sa nagpapahintulot sa amin upang ipakita ang mga bagay-bagay at i-print na mga bagay. Sa ganoong paraan, ito ay tunay view-gusto. Oo. Kaya ito ay uri ng tulad ng PHP sa kung saan maaari itong uri ng maging pareho. Magandang tanong. Ano pa? Lahat ng karapatan, kasindak-sindak. Paglipat ng karapatan kasama. Kaya sabihin makita ang isang halimbawa ng kung paano namin maaaring gamitin ang Ang JavaScript sa isa sa aming web programs. Kaya kailangan ko isaalang-alang na ito index.html may isang bungkos ng HTML. At ang mga bagay na gusto ko sa iyo focus sa ay ang script na tag. At ito ang sabi, OK, gusto kong magpatakbo ng ilang mga JavaScript at dito ay kung saan ito buhay. Ito ay nakatira sa hello.js. At napaka tulad ng CSS, magagawa namin ilagay JavaScript sa loob ng HTML. Bakit maaaring gusto naming hiwalay na ito sa labas? Oo. Madla: Mas madaling isulat na muli? HANNAH Blumberg: Oo. Ito ay mas madaling gamitin sa kabuuan iba't-ibang mga pahina ng web. Pinapanatili nito ang mga bagay na cleaner. Ito ay magandang pagsasanay lamang. Kahanga-hanga. Magandang sagot. Kaya mabuting, kaya ito ay pagpunta upang ating maging index.html. At pagkatapos ay down na dito ay ang aming maliit na maliit maliit JavaScript file. At lahat ng sinasabi nito ay alerto Hello, mundo. Kaya kung ano ang mangyayari kapag sa pahinang ito renders-- kaya kung ikaw ay pupunta sa kahit anong website ito is-- lahat na kaya ang mangyari ay ito ay pagpunta sa sabihin, OK, ako pagpunta upang patakbuhin ang JavaScript code. At ito ang JavaScript code lang sabi alert Hello, mundo. Kaya ako ng pagpunta sa kumuha ito friendly na maliit na pop-up. Cool? Iyon ay uri ng tulad ng aming pinakaunang Program JavaScript, aming Hello, mundo. Tingnan natin ang isang maliit na bit higit pa tungkol Hayaan ano ang syntax ng JavaScript kamukha. At partikular, ihambing natin ito upang ipaalam sa C at PHP, na kung saan namin nakita bago. Sa JavaScript, kami ay pagpunta sa may var, ang pangalan ng variable, at pagkatapos ay ang kanyang tunay na halaga. At hindi namin tukuyin ang isang uri, lamang tulad ng sa PHP, ngunit napaka hindi katulad sa C. Kaya halimbawa, kung nais namin sa tindahan ng mga halaga ng 50, sa C, kami ay may sa sabihin, hey, C, Gusto ko ng isang integer, Pupunta ako sa mga tawag na ito i, at ang halaga nito ay 50. Sa PHP, ito ay isang maliit na bit mas madali. Sabihin namin, hey, gusto ko ng isang variable tinatawag na i at ang halaga nito ay 50. Very katulad, sa JavaScript, namin sabihin hey, gusto ko ng isang variable na tinatawag na i, ang halaga nito ay 50. Bawat kasunod na oras na gamitin ko i, hindi ko na kailangan upang isulat var. Ito lang ang i mula sa puntong iyon sa. Sa parehong paraan, sa C, kung saan minsan sa sinasabi namin int i, gamitin lamang namin i. Cool? Lahat tama. Paglipat sa sa loop, kabutihang-palad, ang mga ito ay halos Tumingin exactly-- tingin ko na ang mga ito eksaktong katulad ng kung ano ang loops ay pagpunta sa hitsura sa isang bagay tulad ng C kung saan ang iyong para sa loop ay pagpunta sa may tatlong parts-- isang Pinasimulan, isang kundisyon, at isang update. Ang isang habang loop, tinitingnan nito ang eksaktong parehong. Bigyan kami ng lang ito ng isang kondisyon. At isang gawin habang loop, muli, eksakto ang parehong. Bigyan namin ito ng isang kondisyon. Ipagpalagay natin na nais ko upang umulit over-- Nais kong gawin ang isang bagay na limang beses. Sa C, upang aming maisulat para sa init i katumbas ng 0. i ay mas mababa sa 5, i ++. Pagkakaiba lamang, sa JavaScript, sa halip na sabihing int i katumbas ng 0, sinasabi namin var i katumbas ng 0. Maganda. Iyan na lamang ang pagkakaiba. Ang anumang mga katanungan sa anumang ng mga iyon? Oo. Madla: Kaya sa PHP, ito ay ang parehong bagay, maliban ngunit tulad ng isang variable? O ay na ang isang var halimbawa? HANNAH Blumberg: Oo. Kaya sa PHP, ito ay pagpunta upang maging isang dollar sign. Kaya ito ay pagpunta sa $ i equals 0, $ i ay mas mababa sa 5, $ i ++. Mahusay na tanong. Ngayon sabihin makipag-usap tungkol function na pahayag. Sa C, kapag kami ipinahayag ng isang function, kami ay nagbigay ito ng isang pangalan at nagbigay kami ng ilang mga parameter. At sa simula, kami ay sumulat ang uri. Sa JavaScript, lahat tayo may sa gawin ay isulat ang pag-andar sa keyword na iyon sabi, hey, JavaScript, Ako ay tungkol sa upang tukuyin ang isang function. Sa kasong ito, ito ay may pangalan sum. At ito ay tumatagal ng dalawang argumento, x at y. Pansinin na hindi namin pakialam tungkol sa mga uri ng mga x at y. At tulad ng C, kami ay return keyword na ito, upang maaari naming gawin ang isang bagay tulad ng return x at y. At ngayon sa sandaling namin ang nakasulat muna ito function, maaari naming gamitin ang kabuuan kahit saan. At iyon ay lubos na fine. Isa talagang cool na bagay tungkol JavaScript ay tunay hindi katulad ng C ay na pag-andar na maaari tratuhin tulad ng mga halaga. Kaya maaari naming gawin ang isang bagay tulad dito kung saan ako ipagpalagay cover ko ito up-- Sakop ko ang var sum part-- at sinabi lang namin function na xy katumbas return x plus y. Iyon ay kung ano ay tinatawag na sa isang hindi nakikilalang function. Ito ay isang function na walang pangalan. Sapagkat ang function na ito sabi sum, blah, blah, blah, ito ay sabihin lamang function. Ngunit ngayon kahit na mayroon akong anonymous function na ito, na function na ay talagang isang halaga lang. Maaari naming ituring ito tulad ng isang halaga. Kaya maaari naming i-save ito sa isang variable ng parehong paraan namin ay maaaring mag-imbak 50 sa isang variable. Kaya maaari naming sabihin, OK, gusto ko ng variable, ito ay tinatawag na kabuuan, at ito ay ang function na ito. Kaya ang dalawang bagay na ito ay talagang pagpunta sa gawin ang parehong bagay, ngunit ang syntax ay isang maliit na ibang-iba at uri ng isang masaya note. Oo. Madla: Kaya maaari mong tawagan ang isang function na ay anonymous sa pagsasabing, sum bracket 2, 5? HANNAH Blumberg: Oo. Maaari mong tawagan ang anonymous function sa parehong paraan. Gusto mong gawin sum (2, 5) ;. Iyon ay magiging ganap fine. Kung hindi ko ginawa var sum ay katumbas ng function, kung lang tinanggal ko this-- Alam ko ito ay sa aking kamay, ngunit magpanggap tinanggal ko this-- pagkatapos na function na ay uri ng lamang nawala. Hindi mo maaaring gamitin ito muli dahil hindi mo na magkaroon ng isang pangalan para sa mga ito. Ito ay mahirap na mag-refer sa isang bagay hindi mo alam kung ano ang tawag. Magandang tanong. Oo. Madla: Maaari mo reference sum in iba pang mga lugar sa mga halaga ng x plus y? HANNAH Blumberg: Maaari mo reference sum sa iba pang mga lugar sa ang halaga x plus y? Hindi ako lubos na sigurado kung ano ang ibig sabihin. Madla: Kaya iyong mga nakalipas na semi-anonymous function ay sum ay katumbas na ito anonymous na function, kaya sum ay ngayon ay isang variable na can-- mo HANNAH Blumberg: Kanan. Kaya sum ay ang variable, ngunit ito ay actually-- kaya sum ay isang variable na ang halaga ay ang function. Kaya ito ay isang function, kung saan ay uri ng isang kakaibang bagay sa wrap ang inyong ulo sa paligid dahil naglalaro kami sa C at ikaw ay hindi maaaring gawin na sa C. Ngunit ngayon ay maaaring tumawag sum namin ang parehong paraan na maaari naming tumawag sum dito. Madla: OK. HANNAH Blumberg: Oo. Magandang tanong. Oo. Madla: Kaya hindi namin gamitin ang modelo sa PHP o JavaScript? HANNAH Blumberg: Hindi, kami ay hindi kailangan na gumamit ng mga modelo, lalo na sa JavaScript. Kaya isa masamang kaugalian bagay na Ako pagpunta sa sabihin na hindi mo dapat gawin ay hindi mo na kailangang magsulat ng var i = 50. Maaari mo lamang simulan ang paggawa i = 50. At gusto lang gumawa ako ng isang global variable. Ito ay napaka-masamang kaugalian sa hindi kailanman sabihin explicity var i, ngunit ito ay isang bagay na maaari mong gawin. Ang interpreter ay hindi pagpunta sa sumigaw sa iyo. JavaScript ay medyo tulad ng, maaari mong gawin kung ano ang gusto mo. Pasensya na. May dalawa. Sa pantalon orange. Sige lang. Madla: Hindi, una ka pumunta. Madla: Hindi, ako ay makatarungan kasabihan Hindi ko nakita ang aking mga kamay up. SIGE. Kaya't kung ikaw ay tumawag na unang pagkakataon, ngayon sabihin sa ilang, tawag namin ito sa parehong paraan, x, y, tulad ng lahat ng oras? HANNAH Blumberg: Oo. Kaya ang dalawang mahalagang gawin ang parehong bagay. Madla: At ano ang bentahe ng paggamit ng isa o ang iba? HANNAH Blumberg: No advantage ng paggamit ng isa o ang iba. Nais ko lamang na ipakita sa iyo ng dalawang iba't ibang piraso ng syntax. Ang isang pulutong ng mga oras kung saan anonymous function ay walang isang layunin ay kung ang argument sa isa pang function na ay dapat na isang function. At kami na makita na sa lamang ng isang segundo sa Ajax. Kaya kung na hindi gumawa ng anumang mga kahulugan, store na ito sa likod ng iyong ulo. Iyon ay kung saan ang isang hindi nakikilalang ito ay maaaring maging kapaki-pakinabang na pag-andar dahil sa ito ay hindi tunay na nagkakahalaga nagbibigay ito ng isang pangalan dahil hindi namin lamang pupunta na gamitin ito nang isang beses. Oo. Madla: Kung x at y pagbabago sa ibang pagkakataon on, ay sum magbabago rin? HANNAH Blumberg: Kung x at y pagbabago sa susunod, ay sum magbabago rin? Kaya ito ay ang tunay na ako sa tingin ng isang bagay na, muli, ito lamang ang nararamdaman ibang-iba mula sa C. Ito ay hindi isang halaga. Ito ay hindi 5. Ito lang ang pag-andar ng kanyang sarili. Kaya sa lalong madaling ikaw ay bigyan ito ng mga parameter, pagkatapos ay makikita mo ang tunay na kalkulahin ang halaga. MARIA ZLATKOVA: At pagkatapos ay maaari mong tawagin ang function at gamitin ito upang makakuha ng ilang mga halaga. HANNAH Blumberg: Kanan. Mismong. Oo. Madla: Kaya kung ikaw lang tindahan ito sa variable, tulad ng var x ay katumbas ng halagang dalawang values-- HANNAH Blumberg: Oo. Kaya maaari mong gawin lamang var sum ay katumbas ng kabuuan ng dalawang mga halaga. Oo. Anumang iba pang mga katanungan? Oo. Madla: Ngunit nais na malito sum at sum? Tulad ng kung ikaw ay tumawag sa iyong variable sum, Gusto mong tawagin ang function sum? HANNAH Blumberg: Mm. Mm. Kung ikaw ay isang bagay tulad ng, sum ay katumbas ng sum 2, 5? Madla: Oo. HANNAH Blumberg: Naniniwala ako na Gusto patungan ang halaga ng sum. Kaya isa pang kawili-wiling bagay tungkol sa JavaScript ay na ang isang solong variable ay maaaring tumagal ng sa isang grupo ng mga iba't ibang uri. Bad practice. Hindi ka dapat gumawa ng isang bagay tulad ng kung ano ang sinabi mo lamang. Ngunit sa C, kung i ay naka-set katumbas ng isang integer, alam namin na ito ay hindi kailanman pagpunta sa maging isang string. Hindi ito ang kaso sa JavaScript. Oo, magandang katanungan. Ano pa? Lahat tama. Ang paggawa ng lahat ng karapatan sa oras. Pagpapanatiling pagpunta. Lahat tama. Kung titingnan natin sa isang array sa JavaScript, narito ang isang mabilis na halimbawa ng isang array ng mga string. At array ay maaaring maging pabago-bago. Hindi sila magkaroon ng isang takdang sukat sa parehong paraan na ginagawa nila sa C. Maaari naming i-access ang elemento na may lamang ang mga square bracket. Na mukhang ng maraming tulad ng PHP at ng maraming tulad ng C, kung saan maaari naming sabihin, sa kasong ito, kung gusto ko ang salitang JavaScript, gagawin ko huwag arr square bracket na may 0, 1, 2. At pagkatapos ay kung maalala mo sa C kapag kami Nais upang makakuha ng haba ng isang array, ito ay talagang nakakainis. Ngunit sa JavaScript, napakadaling. Lahat ng ginagawa namin, .length. Binibigyan nito ang mga haba. Ayan yun. Madla: Iyan ay simple. HANNAH Blumberg: Oo, gumagawa isang pulutong mas madali ang iyong buhay. OK, hindi object-- doon. Objects sa JavaScript pakiramdam ng maraming tulad structs sa C at nag-uugnay array sa PHP. Kaya kung ano ang iyong nakita namin ang isang maraming ay JSON, na ibig sabihin para sa JavaScript Bagay pagtatanda. At ito ay isa lamang paraan ng structuring aming data. Kaya sabihin makita ang isang halimbawa, marahil ang pinakamadaling. Kaya narito ang isang halimbawa ng isang bagay na nag-iimbak ng mga klase, CS50. At kapag sinabi ko class, ibig sabihin ko course, Hindi like-- oo, ang mga kurso, CS50. At makikita mo na lahat ng bagay sa object ay magiging nakapaloob in curly braces. At simulan namin upang iugnay ang mga pangalan ng field o mga susi sa mga iba't ibang mga halaga. Kaya maaari mong simulan upang makita kung paano ito uri ng nararamdaman ng isang nag-uugnay array sa PHP. Kaya kami ay pagpunta upang iugnay ang mga patlang o ang susi pangalan, siyempre, na may string, CS50. Kami ay pagpunta sa may isang guro. Kami ay pagpunta sa may TFs. Kami ay pagpunta sa may bilang ng psets at kami ay pagpunta sa may record. At isa cool na bagay upang tandaan ay ang lahat ng mga bagay na ito ay may iba't ibang mga uri, at iyon ang ganap fine. Ito ay multa para sa isang bagay, sa katunayan, marahil ito ay inaasahan para sa isang bagay na magkaroon ng isang kumbinasyon ng mga string at numero at Booleans at array at ang anumang iba maaari ka nais na magkaroon sa loob ng iyong object. At tandaan na ang mga ito ay magiging ang mga pangalan o ang mga key, at pagkatapos namin lamang itakda ito katumbas sa isang maliit na colon. Madla: Ano ang eksakto ang ibig sabihin ng JSON? HANNAH Blumberg: Ano eksakto ang ibig sabihin JSON? Lamang nakatayo JSON para JavaScript Bagay pagtatanda. Ito ay lamang ng isang paraan ng pag-format. Oo. Ito ay isang paraan ng pag-format ng aming data. Sa C, ito ay structs. Sa PHP, ito ay nag-uugnay array. Sa JavaScript, mayroon kaming mga bagay. Madla: Kaya ang CS50 isang bagay? HANNAH Blumberg: CS50 ay ang mga bagay na sa kasong ito. Ngayon, paano namin talagang access mga patlang o baguhin ang mga patlang. Halimbawa, ipagpalagay na kami ay nagpasya na Nais mo ang isa ng mas kaunting mga pset ito semestre. Sa halip na siyam, hindi namin lamang ng pagpunta sa may walong. Paano namin baguhin iyon? Oh, maling paraan. Mayroong dalawang mga paraan na maaari naming gawin iyon. Bilang isa ay may tuldok notation at numero ng dalawang ay may mga square bracket pagtatanda. Kaya, halimbawa, kung ako nais na baguhin o pag-access larangan psets sa aming CS50 bagay, kung ano ang gusto kong gawin ay CS50.psets, kaya ang pangalan ng bagay na tuldok ang pangalan ng patlang o ang key. Very katulad, ito ay eksaktong katumbas na gawin CS50, at pagkatapos ay sa square braces, psets. Cool? Oo. Madla: Kaya ang JSON technically JavaScript pa rin, kahit na sa psets namin hiwalay na ito out [hindi marinig]? HANNAH Blumberg: Oo naman. Kaya ang tanong ay, ang mga JavaScript at JSON katumbas? Kaya JSON ay notation, talaga ang paraan na isulat namin isang bagay mula sa JavaScript. Kaya ito ay hindi eksakto ang parehong. Gusto ko sabihin JavaScript, may mga bagay sa JavaScript. JSON ay tumatagal ng mga bagay at mga kopya sa kanila at ipinapakita ang mga ito o nag-iimbak ng mga ito sa isang magandang paraan. Kaya JSON ay hindi isang programming wika ang paraan na ang JavaScript ay. Ito lang ang notasyon para sa ang aming mga bagay sa JavaScript. Oo. Madla: Kaya kung ano ang eksaktong [Hindi marinig] makumpleto? HANNAH Blumberg: Oo naman. Kaya talagang gumagana ito sa wala. Ito ay lamang ng isang paraan upang ma-access. Kaya sabihin nating namin nais na baguhin ang bilang ng mga hanay ng problema 9-8. Ano ang ginagawa namin ay gawin ang isang bagay tulad CS50.psets = 8 ;. Oo, mahusay na tanong. Ito ay upang ipakita sa iyo syntax. Hindi talaga dapat gawin kapaki-pakinabang. May tanong? Paglipat ng karapatan kasama. Kaya tingnan natin ang isang mabilis na halimbawa ng kung paano ipaalam Gumagana JavaScript dahil sinabi ko sa iyo na ito ginagawa ang lahat ng mga cool na bagay na ito at ay nagbibigay-daan sa amin upang baguhin ang mga pahina ng web. Sabihin aktwal na makita ito sa aksyon. Kaya maglaan ng, halimbawa, ang file na HTML. At ang mga bagay na gusto kong mag-focus sa ay ito partikular na tag, na kung saan ay isang pindutan, may id search_button. Ito lang ang sa pahina. Kaya ngayon sabihin makita kung ano ang maaari naming talagang gawin. Well, ipagpalagay na kapag i-click mo ang pindutan na iyon, nais naming gumawa ng isang alert-- nag-click ka sa pindutan. Tayo'y makita kung paano namin maaaring gawin iyon. Kaya window.onload-- hindi ito ay isang bagay na nakita mo sa klase, sa gayon hindi kailangan upang malaman ito para sa mga pagsusulit. Ngunit ito talaga sabi, OK, call mga function na ito kapag naglo-load ang window. Kaya na uri lang ng code setup. Huwag mag-alala kaya magkano ang tungkol na. Ano ang gusto kong mag-focus sa ay in dito. Sabihin namin var searchButton katumbas document.getElementByID search_button. Kaya bilang maaari mong hulaan, kung ano ang nagagawa nito ay sinasabi nito, OK, pumunta mahanap ang elemento may ID search_button. At ngayon kami na aktwal na element at ako pagpunta sa tindahan ito sa isang variable searchButton. At ngayon namin ang aktwal na maaaring gamitin ang mga elemento na at baguhin ito, o ma-access ang mga halaga nito, mga bagay-bagay na tulad ng. Maaari naming talagang simulan upang umaakit sa mga web page. Kaya dito sinasabi ko, OK, ngayon na mayroon akong button na, kapag ito ay na-click, tumawag hindi kilalang function na ito. Kaya ito ay kung saan anonymous function na maging kapaki-pakinabang. At ano ang mga function na gawin? Well, ang mga tawag na ito lamang alerto function at sinasabi nito, ikaw ay nag-click ang pindutan ng Paghahanap. Kaya kung ano ang mangyayari kung pupunta ako sa kung saan man nabubuhay ang HTML at i-click ko ang button, Kukunin ko ang isang fancy maliit na alerto na nagsasabing ikaw ay nag-click sa pindutan. Kaya ang mga bagay na mag-focus sa here-- document.getElementByID makakakuha ng isang partikular na HTML elemento na may mga ibinigay na ID. At ngayon maaari naming i-set kung ano ang dapat mangyari kapag na partikular na elemento ay na-click. Madla: Mayroon kaming upang ilagay ang lahat ng na in? HANNAH Blumberg: Sorry? Madla: Mayroon ba nating pisikal na code sa lahat ng mga iyon? HANNAH Blumberg: Kailangan nating pisikal na code sa lahat ng mga iyon? Oo. Hindi baga ito ang uri ng mga nakakainis? Ito ay isang pulutong ng code. Madla: Maaari kang mag-import ng isang bagay. HANNAH Blumberg: Kanan. Maaari naming gamitin ang isang bagay. At sa particular-- oh, ito ay na nagsasabi sa akin Mayroon akong magturo sa section. Sa partikular, sabihin gamitin ang library jQuery, dahil iyon ay talagang mahaba at talagang nakakainis at gusto kong ma-gawing simple ito at gawin itong mas maikli at mas madaling isulat. Kaya jQuery ay isang JavaScript library. Kaya JavaScript ay programming wika; jQuery ay isang library. At ito ay gumagawa ng isang grupo ng mga bagay na mas madali. Ito ay gumagawa ng pagbabago at pagpunta sa buong isang HTML na dokumento lubhang mas madaling. Ito ay gumagawa ng mas madaling paghawak ng mga kaganapan. Ito ay ginagawang mas madali animation at ito ay gumagawa Ajax mas madali. Kaya sabihin tumalon sa dalawa sa ngayon ang mga bagay. Mawalang-galang na. Bago namin gawin, ang ilang mga pangunahing syntax. Ito ay kung ano ang karamihan ng mga tawag sa jQuery library hitsura. Ginagamit namin ang dollar sign-- walang sign koneksyon sa PHP, inconvenient-- lang ang pangalan ng isang selector, tuldok, at pagkatapos ng isang aksyon. Kaya tingnan natin ang ilang mga kongkreto halimbawa ng na. Kaya ito talaga ang parehong code mula sa slide na kaganapan. Kaya ito mahaba, pangit na bagay ay nagiging ganito karami nicer, mas maliit na bagay. Kaya sabihin subukan sa break na ito pababa. Ito ay nagsasabi, OK, jQuery-- ito dollar sign-- jQuery, hanapin ako ng bintana. Kaya iyon ang tagapili. Kapag ito ay naglo-load, tawagan ang function na ito. Kaya na ang nasa loob ng lahat ng bagay. SIGE. Sa ngayon, kaya mabuti? Lahat tama. Ngayon, jQuery, mahanap ako sa bagay na may ID search_button. At kung ano ito ay nag-click, tawagan ang function na ito. At pagkatapos ay ang function na ito ni eksaktong pareho. Lamang gawin ng isang maliit na piraso ng alerto, ikaw ay nag-click ang pindutan ng Paghahanap. Kaya ito ay talagang maganda. Ito ay talagang namumuo at Pinadadali ng aming code. Paano ko malalaman na ito ay ID search_button at hindi tulad ng klase search_button? Madla: Hashtag? HANNAH Blumberg: Oo. Ito simbolo hash, ito ay tulad ng CSS. Kaya tandaan, sa CSS, kapag tayo nais na pumili ng isang bagay sa pamamagitan ng ID, ginamit namin ang pound sign. At kapag gusto naming piliin isang bagay sa pamamagitan ng klase, gagamitin namin ang mga tuldok. Great. Magkaroon ng kahulugan? Kaya jQuery ay dapat na gumawa lang mas madali ang ating buhay. Oo. Madla: Kaya ako ng isang maliit na bilang nalilito sa kung paano gumagana ang pag-andar anonymous. Mong pangalan ba ito anonymouse function, gumana? Paano tinawag na? HANNAH Blumberg: Oo naman. Kaya function ay isang keyword lamang na sabi, ako tungkol upang tukuyin ang isang function. Madla: Oh, OK. HANNAH Blumberg: OK? At pagkatapos ay ipasa namin ito bilang isang argument to-- sabihin tumagal ito sa loob one-- sa click function. Kaya oo, kaya na function, anonymous function na ito, nagiging isang aktwal na argument. Kaya tandaan sa JavaScript, namin maaaring tratuhin ang mga function bilang halaga. Madla: Oh, OK. HANNAH Blumberg: Oo. Gusto ko na "oh." Nice. Iba pang mga tanong? Time? MARIA ZLATKOVA: Good. Good. HANNAH Blumberg: Kahanga-hanga. Ang ilang mabilis na mga kapaki-pakinabang jQuery. Hindi ako pupunta upang pumunta sa pamamagitan ng lahat ng mga ito. Ang mga slide ay up online isang maliit na piraso mamaya, kaya maaari mong suriin ito ang isang maliit na bit sa ibang pagkakataon. Pero talaga, ang pangkalahatang pattern humahawak kung saan namin sabihin, OK, hey, jQuery, narito ang aking selector at pagkatapos ay narito ang isang action. At maaari mong gawin ang mga bagay tulad ng pag-access ang mga halaga ng isang form, i-access ang ilang mga HTML, control sa kung ano ang mangyayari kapag ang gumagamit nagsumite ng isang form, mga bagay-bagay na tulad ng. Oo. Madla: Kaya sa pagsusulit, kami ay pagpunta sa kailangan malaman pa ng maraming mula sa ang dokumentasyon jQuery. Kaya ibinigay na kopyahin namin / ilagay ang jQuery babasahin sa aming cheat sheet, kung saan ay inilabas ng linya? Tulad ng kung gaano karaming mga kailangan naming malaman? HANNAH Blumberg: Great tanong. Ang tanong ay mahalagang ibinigay na kayo Hindi ma-access ang mga babasahin jQuery sa panahon ng pagsubok kung magkano ang dapat, mo malaman? Hindi namin ay inaasahan mong dumating hanggang sa ilang mga random function na namin inaasahan mo sa Google. Mga bagay na fair game ay gagawin ko sabihin lang ang uri ng pangkalahatang syntax, kawalan ng kakayahang pumili ng ID at sa pamamagitan class-- kaya lang tulad ng CSS. At pagkatapos ay ang aktwal na pag-andar themself, kami ay malamang na sabihin sa iyo. Oo. Madla: Kaya kapag pinili mo sa pamamagitan ng klase ay nangangahulugan na tuldok. HANNAH Blumberg: Oo, eksakto. Good. Kapag pinili mo sa pamamagitan ng klase, ito ay pagpunta na tuldok sa halip na ang pound sign. Oo. Madla: Gusto mo pumunta sa mga pagkakaiba sa pagitan ng pagpili sa pamamagitan ng ID at sa pamamagitan ng klase? HANNAH Blumberg: Oo naman. Ang pagkakaiba sa pagitan ng pagpili ID at pagpili sa pamamagitan ng klase. Kaya tulad ng sinabi Maria a Medyo mas maaga, may maaari lamang maging isang HTML element sa isang ibinigay na ID, samantalang class, ito ay nagbibigay-daan sa amin sa grupong ng grupo ng iba't ibang mga elemento ng magkasama, kaya bagay na may kaugnayan, ngunit hindi eksakto ang parehong. Nasagot ba ang tanong? Kahanga-hanga. Oo. Madla: Paano kung mayroon kang maramihang mga bagay na nasa parehong klase? HANNAH Blumberg: Ano ang mangyayari kung mayroon kang maramihang mga bagay na ay ang parehong klase? Kaya, halimbawa, kung hindi namin lamang gamit ang purong JavaScript, Gusto natin ng isang bagay tulad ng document.getElementsByClass. At pagkatapos ay kung ano talaga ang ginagawa na ay nagbabalik ng isang array ng mga elemento. At kailangan mong mag umulit sa ang mga ito o makahanap ng kung saan ang isa na nais mo. Ito ay hindi pagpunta upang bigyan ikaw ay isang solong elemento. Ito ay pagpunta sa magbibigay sa iyo ng isang hanay ng mga elemento. Mahusay na tanong. Ano pa? Kahanga-hanga. Kaya sa tingin ko kung hindi ka pamilyar sa anumang jQuery na nakita mo sa pset, dapat kang maging handa na upang patakbuhin. Tanong? Oh hindi. Ako tunay may magturo. Relaks. Makikita ito ay multa. Kukunin ko doon. Makipag-usap tungkol Ajax Hayaan. Kaya Ajax ay magiging a-- rin, Magsimula tayo sa kung ano ito ay kumakatawan para ipaalam. Ito ay isang acronym. Ito ay kumakatawan sa Asynchronous JavaScript at XML. At XML ay talaga ay magiging [Hindi marinig] na may isang uri ng aming mga data. Ngunit hindi pa namin talagang ginagamit XML. Sa halip, gamitin na lamang namin JSON. Kaya talaga, ito ang ilang mga data-- asynchronous, JavaScript, at data, sa kasong ito, JSON. At ang aming mga layunin, tulad ng aming nabanggit isang maliit na piraso ng mas maaga, ay para ma-gumawa ng isang kahilingan, gawin na kahilingan kanyang bagay sa background, ngunit patuloy gawin ang anumang kami ay nagbabalak na gawin. At pagkatapos ay kapag ang impormasyon na iyon ay handa na, pagkatapos ay gagamitin namin isama ito. Kaya sabihin makita kung ano ito talagang ganito ang hitsura. At ito, dapat ikaw ay Medyo pamilyar mula pset8, ang isa lang naka ka in. Kaya narito ang isang may-bisang jQuery function na namin baka nais na malaman about-- ito dollar sign. Kaya ito sabi jQuery function, GetJSON. At kung ano ang function na ito ay ito tumatagal ng isang URL at ilang parameters-- kaya tingin ko sa kaso ng pset8, ito tulad noon, ang URL ay articles.php at ang parameter ay pumunta = ilang postal code. At sinasabi nito, OK, gumawa ng isang kahilingan sa ang URL na ito gamit ang ibinigay na mga parameter. At iyon lang ang mangyayari. Kapag natapos na ito, ito ay alinman pagpunta sa matagumpay na makumpleto o ito ay pagpunta sa mabibigo. Kaya ito ay ang katumbas ng call Rob at hilingin sa kanya na gawin ang isang bagay. At pagkatapos ay kapag siya tawag sa likod, siya ay mag pagpunta sa sinasabi ko tapos na o ako ay nabigo. Kaya sa kaso kung saan ikaw ay tapos, sabihin mo, OK, ako tapos na. At pagkatapos mong tawagin ang function na ito. Sa kasong ito, ito ay magiging isang function na tumatagal ng ilang impormasyon. Ang isa ay karaniwang pag-aalaga namin tungkol ay data, ang data na kami ay talagang nagbalik bilang resulta ng pagtawag GetJSON. At maaari mong gawin ang isang bagay sa mga ito. Kaya sa kaso ng pset8, ipinapakita namin ito bilang isang listahan. Nabigong ay magiging isang function iyon ay tinatawag na mabigo ang kahilingan para sa anumang dahilan. At sa kaso ng pset8, console.log lang namin ito. Ang anumang mga katanungan sa mga iyon? Oo. Madla: Maaari naming gamitin lamang ang function theta sa halip ng mga function, textStatus, jqHXR. HANNAH Blumberg: Oo naman. Kaya oo, sa tingin ko sa pset, Nakita lang namin ang function ng data. Kaya lamang the-- yes, OK. Iyon ay kung ano ang nakita natin sa pset. Iyan ay lubos fine. Ang mga ito ay lamang kung nais mong upang bunutin ang higit pang impormasyon, Ito ang mga bagay na maaari mong makuha mula GetJSON. Magandang tanong. Ano pa? Oo. Madla: Kaya GetJSON ay Ajax? HANNAH Blumberg: OK. Kaya ito ay ang uri ng mga mapanlinlang na bahagi. Ito ay isang jQuery function na nagpapahintulot sa mong gawin asynchronous tawag. At ang mga asynchronous tawag, na ang kung ano ang aming na-nagre-refer sa bilang Ajax. Oo. Na kinuha sa akin ng isang talagang mahabang panahon upang tanggalin kapag ako ay isang mag-aaral. Madla: Maaari mong sabihin na muli? HANNAH Blumberg: Oo. Maaari ko bang sabihin na muli? Ito GetJSON function, ito ay isang jQuery function. At ito ay pagpunta sa gawin isang asynchronous tawag. At ang mga ito asynchronous tawag, na namin ay nagre-refer sa mga bilang Ajax. Anumang iba pang mga katanungan? Mayroon kaming lamang ng ilang minuto ang natitira. At Maria pagpunta sa balutin sa seguridad at pagkatapos kami ay pagpunta na lamang ang tungkol sa tapos na. MARIA ZLATKOVA: Galing, OK. Kaya is-- tumagal lamang ito ng ilang ng mga segundo upang tingnan ito. At ito ay hindi isang bagay na talagang mahusay. At maaari isang tao sabihin sa akin kung bakit? Ano ang nangyayari sa foo at maaaring dati maaring magresulta sa isang bagay na masama, at kung ano na ang tawag dito? Oo. Madla: Kung ang argument na ipinasa sa ay higit sa 12 mga character, maaaring ito apaw. MARIA ZLATKOVA: Kanan. Perpekto. Ano ang tinatawag na ito? Nabanggit mo lamang ito. Madla: Buffer overflow. MARIA ZLATKOVA: Yup, buffer overflow. Kaya ito ay isang bagay na namin sumangguni sa bilang buffer overflow. At nakita namin na sa loob ng foo, tinukoy na namin ang aming buffer, c, na may sukat na 12. Gayunpaman, sa main, hindi kami suriin sa anumang paraan sa lahat kung ang mga argv1-- upang ang ay ang pangalawang argumento. Hindi namin suriin kung ang mga laki ng mga ito ay angkop. Kaya kung kami ay isang lalo na malisyosong user na ilagay sa ilang mga argument na mas mahaba kaysa sa 12, at pagkatapos ay maaring sa kabila ng hangganan ng na argument, nagkaroon ng ilang mga executable code na siya ay sinusubukan na gawin ang isang bagay na masama kasama; pagkatapos na ito, kung ano ang mangyayari, Gusto override ang return address ng foo function, nagiging sanhi ng pag-andar upang kapag pagbabalik-execute na code. At pagkatapos ay masamang bagay na maaaring mangyari. Ba ito gumawa ng kahulugan sa lahat ng tao? At paano natin maprotektahan laban sa mga ito? Ang anumang mga mungkahi? Talaga, sa loob ng potensyal na foo, kung paano maaari naming suriin upang tiyakin na na hindi na maaaring mangyari? Madla: Kung ang laki 12 ay lumampas na, Gusto mong magtalaga ng karagdagang memory? MARIA ZLATKOVA: Suggestion ay, maglaan Lumagpas karagdagang memorya ng laki. Talaga, maaari naming gawin ang isang bagay ng isang maraming mas simple kaysa sa na rin. Maaari lang namin makuha ang haba ng string mga argument na ipinasok, suriin kung iyon ay mas mababa kaysa sa o katumbas 12-- na kung saan ay kung ano ang aming nais na ito na dahil hindi namin nais ito na lumampas sa hangganan ng aming buffer. At pagkatapos ay kung ito ay hindi, kami ay maaaring magtrabaho kasama ang argument. At pagkatapos ay kung ito ay, namin talagang gusto sa Yello potensyal na sa user. Ngunit ito ay kung paano namin gawin iyon. Oo. Madla: Maaari ninyo ipaliwanag memcpy tunay na mabilis? MARIA ZLATKOVA: Oh, sorry. Oo. Memcpy tumatagal ng anumang is-- Paumanhin, OK. Memcpy tumatagal ang anumang ay sa bar, ano man ay lumipas papunta foo bilang argumento command line. Kaya ito ay pagpunta sa tumagal argv1. Argv1 ay tinatawag na bar dito. Kaya ito ay pagpunta sa tumagal bar at ito ay pagpunta sa kopyahin ito sa c. Madla: OK. MARIA ZLATKOVA: At ito ay pagpunta sa copy-- ikatlong argument lamang tumutukoy sa kung magkano ito ay pagpunta sa kopya sa c. Madla: Ah. Kaya pagkopya ang isang ito ay ang lahat ng mga ito pagkatapos. MARIA ZLATKOVA: Oo, ito ay pagkopya ng lahat ng ito. Yep. Una, siguraduhin na ang mga bar ay hindi natin katumbas ng null dahil ito ay isang pointer. Pagkatapos namin makuha ang string haba ng bar. Tinitiyak namin na ito ay mas mababa sa o patas sa 12. At pagkatapos ay dahil hindi namin Tiniyak, maaari namin talaga memcpy at siguraduhin na iyon ang OK. May tanong? Great. Mayroon akong dalawang totoo o hindi tanong. Maaari sinuman sabihin sa akin kaagad kung ang mga ito ay totoo o hindi? Oo, ito ay hindi totoo. Mismong. Pareho sa mga ito ay hindi totoo. Kaya gamit ang isang solong password ay hindi kailanman talagang magandang ideya dahil kung may alam ang iyong password, maaari sila lamang ma-access ang lahat ng iyong iba pang mga account. At pagkatapos icon wala upang matiyak ang seguridad. Kami ay karaniwang dapat magmukhang para sa HTTPS sa halip ng HTTP at ang URL. At ilang iba pang mga uri ng pag-atake na namin na nabanggit, na si David ay nabanggit sa magbigay ng panayam, SQL iniksyon atake. Nakapagpadala na kami nakita ko na kung do not namin ang Query function CS50 tinitiyak na SQL atake ng iniksyon ay hindi maaaring mangyari. Ngunit kung hindi namin ay gumagamit ng CS50, quote, magpanipi "sa query," Gusto namin na tiyakin na ang input ng user ay hindi tunay na ang ilang mga SQL query na magiging sanhi ng lahat aming mga talahanayan na bumaba o isang bagay na masama sa mangyayari sa aming database. Hijack Session ay isa pang uri ng pag-atake na ang mangyayari kapag ang ilang mga masamang tao ay gumagamit ng session ilang biktima ID-access ang impormasyon sa pag-login. Kaya ang isang tunay maliit na halimbawa ng mga iyon ay tulad ng kung kami ay may isang pampublikong computer, pagkatapos ay ang masamang tao log in at pagkatapos ay Mayroon cookies na naka-save ang mga ito. At cookies ay hindi nagbabago para sa session. Pagkatapos kami ay ang biktima ay pumunta sa at pagkatapos ay mag-log sa website. Ang cookies ay hindi nagbabago para sa isang partikular na sesyon. At pagkatapos ay ang biktima lo-log sa ang mga website at pagkatapos ay umalis. At pagkatapos ay ang tao na napupunta likod maaaring pagkatapos pa rin gamitin ang kanilang mga session ID upang ma-access ang kanilang impormasyon. Kaya na ang isang halimbawa ng kung paano na maaaring mangyari. At pagkatapos ay ako ay hindi mag-alala masyadong marami tungkol sa tiyak na code o anumang tulad na na maaaring maging sanhi ito, ngunit may ilang mga uri ng mga ideya kung ano ang ang mga variable na kasangkot sa ito ay. At pagkatapos ay pagmamanipula header data ay isa pang uri ng pag-atake na may David ay uusapang tungkol sa. At ito ay tumutukoy lamang sa mga kung ano ang maaaring mangyari kapag ang tugon, ang HTTP response sa loob ng aming mga header Hindi sanitized maayos. At alinman sa mga fields-- halimbawa, kung ang isang tao overwrites isa sa mga header mga halaga na naglalaman ng anumang higit pa kaysa ano ang dapat nilang contain-- at talagang naglalaman ng, halimbawa, ng isang 200 OK status code, at pagkatapos na sila maaaring potensyal na gawin malisyosong mga bagay-bagay kapag hindi nila dapat makita. Ngunit hindi ko nais mag-alala masyadong marami tungkol sa mga tiyak na code na maaaring maging sanhi ito, uri lamang ng pag-unawa mga bagay-bagay sa mataas na antas na tulad ng. Sa tingin ko ito ang lahat ng na kami ay may upang masakop. Kahanga-hangang. Sinuman ay may anumang mga katanungan sa anumang sa mga bagay na namin sakop? Oo. Madla: Kaya isang uri ng higit logistical tanong. Ay ang nilalaman pangunahing nakatuon sa mga bagay pagkatapos quiz 1? MARIA ZLATKOVA: So tanong ay, ay ang nilalaman pangunahing nakatuon sa mga bagay pagkatapos quiz 1? Kaya ang pokus ay sa matapos quiz 1, maliban na kailangan namin upang tumutok sa mga bagay sa pset5 at isang pulutong ng mga istruktura ng data na sakop namin. At hindi namin maaaring sabihin na tayo huwag pansinin ang anumang bagay bago na dahil ito ay nagbubuo mula sa mga ito pati na rin. Kaya tumutok sa mga iyon, plus pset5 materyal tulad ng kasama ang mga listahan ng link, stack, queues, at lahat ng bagay na napunta Hannah over. HANNAH Blumberg: Kanan. Oo, nagpunta kami sa lahat ng mga bagay-bagay C sa pinakadulo simula nang masyadong mabilis. Ngunit siguraduhin na suriin na. Bumalik at panoorin ang mga pagsusulit 0 review. Ilang higit pang mga logistical mga tala, lamang habang kami ay may sa iyong pansin. Kami ay pagpunta sa may mga oras ng opisina parehong sa Lunes at Martes ng gabi. Sila ay pagpunta sa maging sa MD 119. Ito ay ang lahat sa website, sa gayon kung hindi mo marinig ang mga ito, walang alalahanin. MARIA ZLATKOVA: 8:30-11:00. HANNAH Blumberg: Oo, 8:30-11:00. Babalik kami diyan. Babalik kami doon upang sagutin ang mga katanungan. Ito ay medyo chill at masaya. Ikaw guys ay maaaring hilingin sa anumang mga katanungan na mayroon ka sa quiz 1. At quiz 1 ay sa Miyerkules, kaya good luck. Kung mayroon kang anumang mga katanungan, marahil dumating makipag-usap sa amin dito one-on-one. Cool. Maraming salamat. MARIA ZLATKOVA: masyado Salamat, guys. Madla: Yay. [Palakpakan]