Дејвид MALAN: Во ред. Ова е CS50, а тоа е на крајот на недела девет. Тоа е виорот над Во изминатите неколку дена. И проблемот постави седум, ако сте коленото длабоко во неа, да сфатат дека е сосема малку ново што е таму. Но, да видиме, ако не можеме состави сето заедно тука накратко пред потоа veering исклучување во уште друга насока и гледање каде на друго место може да се оди. Па досега, ние разговаравме за HTML. Ние разговаравме за CSS. Ние разговаравме за PHP. Сте почнале да се доживее SQL. Денес, ние ќе зборуваме малку За JavaScript. Но како да сите овие различни јазици се вклопуваат заедно? Па ние разговаравме минатата недела во врска со Идејата да се има сервер. Па да се подготви овој правоаголник како веб сервер тука. И веб сервер служи сигурно датотеки. А некои од овие датотеки можат да бидат HTML датотеки. Значи една од работите што веб сервер може да плукаат може да биде датотека која ние само ќе подготви вака кои содржат некои HTML. Значи во однос на Едноставен, што се HTML да го направите? Публика: Страна изгледа убаво. Дејвид MALAN: Добро, направи страница изгледа убаво, иако мислам дека сум докажан на друг начин. Па HTML не ви нокаутирам страници структурно, и тоа ви овозможува да вид на естетски одбележи до страната, означувајте статична содржина, така што ќе тогаш може да ја видите со веб пребарувач. Но тоа е клучот. Тоа е статична содржина. Ти ја пишуваш, го зачувате, а потоа ќе го бродот. И на веб сервер, тогаш служи го до вашите посетители. Но, ние стилизирам работи со користење на различни јазик заедно. Почнавме да се користи стил атрибут на некои од таговите. И стил атрибут нека постави работи како големина на фонт и боја. И веројатно сте почнале да се откријат, или наскоро ќе за конечниот проекти потенцијално, а сепак другите својства кои можете да го користите во CSS. И така во однос на Едноставен, што навистина, тогаш се CSS направам? Тие се само примери од него. Што значи тоа да го направи тоа на HTML не чини да се од она што видовме досега? Публика: Дефинирање стилови со себе. Дејвид MALAN: Дефинирање стилови од себе. Значи се дефинираат работите како класи, како што Можеби сте наишле, или уникатно идентификуваат јазли во еден документ, па дека можете да ги стилизирам. Но поконкретно, јас би рекол дека CSS навистина ви овозможува да работите на последната милја и ви овозможува да одредите колку поточно естетика, додека HTML во најголем дел им овозможува на можете да структура вашите страници. И иако постојат некои стандардно, како што видовме таг за тарифен број таг, кој грубо зборувајќи направени нешта големи и задебелени букви. Тоа е прилично генерички дефиниција на етикетата - големи и задебелени букви. Што големина на фонт е тоа? Која боја е тоа? Како храбар е тоа? И CSS ви овозможува повеќе ситно мелодија работи како што. Како и распоред, како што некои од вас имаат видено. И искрено, CSS е малку на неуредна јазик. Тоа е многу моќен во кои можете да направите буквално секој веб-сајт што сте види на интернет денес со неа, но тоа е вид на болка во вратот. И некои од вас имаат тресок вашата глава против ѕидовите веќе само да се направи нешто глупаво како центар мени на Проблемот постави седум ако сте дојден до тој момент веќе. Но сфати, тие работи се полесно со текот на времето. Ќе почнете да забележи дезени. И повторно, Google ќе ти биде пријател за различните начини на кои можете да реши овие видови на проблеми. И јас се осмелувам да кажам со CSS и HTML повеќе Општо земено, може да ги реши проблемите во многу повеќе начини, од кои сите може многу и да бидат точни, отколку што би можеле во нешто како C, дури и сега PHP или го вклучите Javascript-. Постојат само многу различни начини да се постават работите надвор. Но, ова почна да се неуредна, рековме. Само вид на commingling вашата HTML и вашиот CSS со стил атрибут беше малку невешт. И така ние наместо рече, вид на апстрактно гледано, дека треба да барем да почне да се фактор од вашиот CSS веројатно. Не твојот стил атрибути, но барем користете стил таг внатре она што дел од веб страница? Публика: Раководител. Дејвид MALAN: Во глава. До сега, имавме само насловот до таму, но вие исто така може да додадете стил ознака, и може да се стави вашиот CSS приближно говорејќи кон врвот на оваа страница. Но, тогаш ние ги зедоа работите еден чекор понатаму и ние констатирано дека од повеќе во посебен фајл. И така овие две датотеки се некако сега поврзани. И навистина тоа беше ознака што го сторија тоа. И она што беше една од Општата мотивации за факторинг нашата CSS сè повеќе и повеќе? Публика: reusability. Дејвид MALAN: reusability. Нели? Може да сте виделе во p-сет седум веќе дека многу од страниците, купување страница, продажба страница, портфолио страница, веројатно структурирани нешто слично. Има CS50 финансии логото на врвот освен ако не сте одлучиле да го промени. Има подножјето на крајот на страната. И CSS ви овозможува потоа да го фактор од го во посебен фајл, така што ако сакате да го смените нешто на глобално ниво низ целиот сајт, можете да навистина само да го промените на едно место. Но, постои цената што ја плаќате потенцијално со тоа што констатирано надвор од CSS од мојот HTML датотека во посебен поднесе референцирање го со ознака, која ја видовме во понеделникот. Што недостатоци може да биде од ова? Размислување назад пред една недела, кога ние сме зборуваме за HTTP и TCP / IP и како на интернет работи. Нешто овде? ПУБЛИКАТА: Потребно е повеќе време. Дејвид MALAN: Потребно е повеќе време. Зошто? ПУБЛИКАТА: [нечујни]. Дејвид MALAN: Да. Па тоа веројатно потребно е малку повеќе време. Бидејќи еден, CSS е очигледно не во истата датотека. Па сега ќе мора да не се направи една, туку две барања. И секоја од овие барања како што видовме во Хром во т.н. инспектор, и ние погледна на мрежата јазичето, секој на овие датотеки бара еден HTTP барање, која ја видовме зема некои износот на време. Сега, можеби тоа не е многу. Можеби тоа е само 20 милисекунди. Можеби тоа е 200 милисекунди. Но, мислам за една страница како Facebook, или Ен-Ен или Google, кои се многу поголема од примерите ние сме погледна досега. Овие страници може да имаат десетици датотеки, од кои секоја може да бара симнување на датотека. Па работите може потенцијално почне да се забави. А особено овие денови кога сите ние имаат мобилни телефони во нашите џебови и поспори интернет конекции, да се почека уште неколку милисекунди, неколку повеќе милисекунди за дополнителни додадени фајлови: всушност може да биде бавен. Латентност е зборот што го опишува вид на чекање дека имате што ќе искуство кога чекајќи некои парче на информации. Но, постои наопаку. Па тоа не е сите вид на - што всушност е малку неодржлива тука. Недостатоци сега, но она што прелистувачи може да го направи ако тие се паметни, со цел да се избегне морале да побарате истите styles.css датотеката повторно може да биде да го направи она? Кешот неа. Па кеширање - Ц-А-Ц-В-Е - обично значи дека тука само за да се спаси поднесе ви побара за прв пат, и тогаш проверете ја вашата кеш за тоа. Проверете дали сте вид на сад за чување, и ако веќе имаат копија од styles.css, дури и ако некои други страница во p-сет, или било кој веб-сајт, побара тоа повторно, само да се даде на корисникот истата кеширана копија. Не мачи бара од него. Недостатоци таму, иако, како што некои од вас имаат tripped над во p-сет. Ако се направи промена на серверот и ќе се вратиме на прелистувачот и ви превчитате, понекогаш пребарувач не ви корист и тоа не им пречи повторно симнување вашиот styles.css датотека затоа, ајде, какви се шансите дека овие стилови дека Фејсбук користи се случува да се промени час на час или ден на ден? Тоа е прилично ниско. Тие можат да се сменат со текот на времето, но не од страна на минута или од страна на час. Па трик, само Материјал цел кога го прави веб развој, често се држите Shift копчето за пример и потоа кликнете на превчитате во вашиот интернет пребарувач, и дека ќе обично каже на прелистувачот Вчитај ја страната повторно сè, дури и ако веќе имаат тоа во кешот. Значи, повторно, квит сум и downsides, но сите од нив во крајна линија дизајн одлуки. Па сега, ние не сме само крај на приказната тука. Ако јас сега одиме назад и назад и назад и назад, почнавме да се воведе не само HTML, но PHP. Значи во однос на Едноставен, што што не PHP нека направам? ПУБЛИКАТА: [нечујни]. Дејвид MALAN: Што е тоа? ПУБЛИКАТА: Воведување на логиката во кодот. Дејвид MALAN: Да, воведе логика во вашиот код. Па тоа е вистински програмски јазик со петелки, и променливи, и функции, како и условите и сите работите што сум бил со користење патот назад кога од нула. И PHP, што видовме, може да се користи или на командната линија - тоа не мора да имаат нешто да се прави со веб, иако тоа е навистина неговото потекло и што таа има тенденција да биде добар во и придонесуваат за - но можете да го користите PHP само со природата на фактот дека тоа има печати () функција, и printf () функцијата, или ехо () функција. Има гроздовете на начини можете може да се печати текст со PHP. Затоа, можете да го користите овој програмски јазик за излез точно она што ние се зборува за пред. Можете може динамички да генерира HTML. Можеби не сите од неа. Можеби тешко код работи, како заглавие, и подножјето, и логото, и на вашиот стил листови, и сето тоа. Но за такво нешто п-сет седум, каде што сте манипулирање со акции и покажува портфолио на корисникот, кој е случува да се динамички промени, може да се сигурно го користите PHP и логиката тоа му дава вас, како програмски јазик за излез динамички подмножества на страната. Значи, кога се зборува за динамична веб-сајтови, или веб програмирање, тоа е она што сте навистина зборуваме. Користење на јазик како PHP, или работи т.н. Пајтон или Руби, или Java, или уште други јазици, да се пребарува базата на податоци често, или на друг сервер, и потоа динамички плукаат HTML. Сега крајниот резултат, како настрана, е дека HTML на повеќето веб-сајтови, вклучувајќи го и вашиот п-сет седум, веројатно е ќе биде огромен хаос ако ќе се погледне на извор кодот во пребарувач. Тоа не е голема работа. Во овој момент, кога ние се грижиме за стил, ние се грижиме за работи што ќе пишувам. Ние не ќе се грижат за нешта дека она што вашиот код излези. Затоа, не се грижите за вовлекување тука ако е PHP дека е всушност Ставање нешта. По сите, пребарувачот не ќе се грижи, и човечки нема да се гледа на изворот секој случај. Ние на вработените, на пример, би се гледа во вашиот PHP. Па да ми даде брз пример сега зошто друго ова може да биде корисно. Па искрено, не можам да се сетам кога последен пат јас се користи C за да реши еден проблем во реалниот свет. Тоа е веројатно во Факултетот кога Требаше да се користи јазик кој беше прилично ниско ниво и ми даде можност да се направи нешто многу висока вршење навистина да ја зачувате како многу процесорот циклуси што можев, во голем дел бидејќи јас бев со користење огромни збирки на податоци, и секој процесорот циклус изброи. И искрено, дури и во нештата како телефони овие денови и други уреди каде што не сосема имаат колку меморија и не сосема имаат како многу процесорот, користење побрзо јазици се уште привлечен. Но, во реалниот свет, кога само сакате да се фрли некои програма заедно за да анализираат некои податоци, или сте ги собрале целиот куп на менаџери за некои ученикот група и дека сакате да многу брзо ги автоматизира испраќање на пораки еден по еден на секој еден од оние регистранти, си оди за да се достигне за повисоко ниво јазик од C, така да зборува. Нешто како PHP или Пајтон или Руби, или половина дузина други кои постојат овие денови. Но тие три се веројатно повеќето модерни во моментов. И она што ова значи е дека можете да ја отворите до текст едитор како gedit или повеќето ништо друго, а потоа само на проектот пишување на код без да се грижите за собирање, без да навистина се грижите за управување со меморијата, имајќи на ум дека иако малку несовесноста на крајот ќе се врати да те гризнам ако на податоци добива поголеми или проблемот добива голема. Но, она што ова значи за ни е следниот. Дозволете ми да оди напред и да ја стартувате правопис од проблемот постави шест. Значи ова е мојот TRIE-базирана имплементација дека јас се користи на големите одбор каде што не врши толку добро. Ние ќе се врати во време од една недела и враќате оние кои не завршуваат на врвот на голема табла на нашиот последен предавање. Но, за сега, дозволете ми да оди напред и само се кандидира мојот решение во текстот, а ние ќе направиме Кралот Џејмс Библијата, и тука ќе одиме. Па оние што се сите на наводно погрешно напишани зборови од Кралот Џејмс Библијата. И мојот имплементација се половина секунда во вкупно. Па не е лошо на овој особено компјутер. Но, мислам за тоа колку кодот морав да напишам. Мислам колку код ти мораше да пишуваат. Мислам колку часа сте потрошени во Д-сала или вашата dorm или каде всушност кодирање до тоа решение. Па, ако јас всушност имаат повисоко ниво јазик како PHP, внимавајте на она што можам да направам тука. Прво, да претпоставиме дека ова е наместо вашата дистрибуција код. Ова е датотека наречена правопис. Тоа е достапен како дел од денешните дистрибуција код. И јас одам да се бранува мојата рака во повеќето на детали, но ова е всушност интересен пример за тоа како Можеби порта јазик како C во текот на PHP. Јас буквално отвори два текст прозорци, еден со моите C верзија на speller.c, и јас само што почнав да се преведе во мојот се упатат кон PHP и внесување со користење на најблиску еквивалент функции. Па така некои од овие работи се различни. Видовме последен пат дека PHP не користи се вклучат во прилично на истиот начин. Таа користи бараат обично, иако вклучуваат постои. Дефинира е малку различен од # Define во C, но тоа е Како ние да константа. $ Argc излегува постои во PHP, па видовме дека пред. Овие се само променливи, сите што ќе почнат со доларот знаци. Потсетиме овие се само еден куп на лебдат поени. Значи скратам приказната, вие сте добредојдени да флип преку ова ако љубопитни, ова е речиси линија за линија конверзија на C верзија на speller.c во PHP. И можете да го направите ова повторно за половина дузина други јазици. Но она што е интересно е тоа. Или она што е искрено лош е ова. Дозволете ми да оди напред и да напишеш за dictionary.php, и тврдат дека јас сум ќе одиме напред и повторно спроведување Проблемот постави шест тука. Па ајде да предложи првиот што во овој датотека, која ќе се спроведува во PHP, па да ми се отвори мојот тагови се допаѓа. Дозволете ми да даде себеси глобален променлива, $ големина добива нула. И јас одам да се даде себе хаш табелата. Ќе се користи хаш табелата за оваа работа. Како можам да се изјасни за хеш табелата во PHP? Направи. OK. Толку отворен заградата блиску заграда, претставува што во PHP, како што видовме? Низа, но низа кои би можеле да биде асоцијативна низа. Асоцијативна низа е податочна структура што соработници клучеви со вредности. Сега во наједноставен бројно индексирани низа, тие клучеви се што? Нула, еден, два, три, право? Старата школа се работи врати од C. Но тоа може да исто така да биде низи како foo, и бар, или Максвел, или било како стринг. За да можам да потпора дека во само еден миг. Дозволете ми да оди напред и да се изјасни функција како - ајде да направиме оптоварување () прв план. Така функција оптоварување (). И PHP е малку поинаков во тоа што вие буквално тип функција, но Не тип враќање тип. Одам да се оди напред и да се каже дека оптоварување () функцијата треба да се земе во аргумент $ речник, само како C верзија направив. Јас го правам тоа од меморија. И јас предложи дека јас сум ќе го направите тоа. Јас сум едноставно се случува да направам foreach. Одам да се јавите на функција наречена датотека (), минувајќи во името на таа датотека, кое е променлива $ Речник како $ збор. А потоа внатрешноста на мојата за јамка тука, јас сум ќе одиме напред и чување во мојата $ Табела дека $ зборот добива точно. Направи. О, чекај. Направи. OK. Тоа е оптоварување () функцијата велат во PHP. Сега, зошто таа работа? И јас сум вид на мамење тука. Значи, еден, foreach видовме накратко последен пат. Тоа само значи дека можете да iterate преку низа без пречеше со i и n и плус плус, и сето тоа. Речник е, се разбира името на датотеката, нешто како голема или мала, двете речници ние се користи последен пат. Датотека е функција која се отвора текст датотеката, таа го чита во линија по линија, и рацете ви се врати огромна низа, секој од чии елементи е линија од таа датотека. Па тоа е комбинација на fopen и fread, и додека јамка, а запишам, и сето тоа. Конечно, како збор само значи дека е променлива, ќе одам да имаат пристап до на секоја итерација во овој циклус. Значи во кратки, ова лагер тука значи отвори датотека чие име е во речник, променлива, iterate преку тоа линија по линија, и секој пат кога ќе се линија, продавница во променлива наречена збор, а потоа направи нешто со зборот. Што сакам да направам? Сакам да се стави збор во мојот хаш табелата. Па, можам да се стави нешто во мојата хаш табелата исто како и во C користење квадратни загради. Ова е името за мојата хаш табелата. Одам да индексира во кои се дешифрираат маса на оваа локација. Па не заградата нула, не заградата еден. Заградата цитат unquote нешто, она што тој збор е. И само како може да имате во вашата хаш табелата работа Trie, вие само чување ефикасно Булова, имплицитно или експлицитно. Направи. Јас сум чување на вредноста вистина. Сега има неколку работи Јас сум сечење агли за тука. Технички, таму се случува да биде досадни нова линија, / n, на крајот на секоја од овие зборови. Па јас веројатно ќе треба да се јавите на функцијата PHP наречен сека (), кои ќе буквално се исецка дека надвор. И јас всушност треба да направи една друга работа. Јас веројатно ќе треба да прираст големина на секоја повторување, па јас сум следење на глобално ниво од тоа што е. И искрено, и ова е еден од stupider аспекти на PHP, ако сте користење на глобалната променлива, што треба експлицитно да се каже дека сте. Па ќе одам да всушност тип во глобалната $ Големина, глобалната $ маса, и сега мојата функција е завршена. Па не е толку едноставно како порано, но веројатно се помалку време отколку на C верзија, можеби? OK. Па сега ајде да го направи проверка () функција. Ајде да видиме дали ова најмалку зеде часа на крајот тоа што ни го зеде во C. Значи дозволете ми да оди напред и да се изјасни провери како функција. Зема во аргументот збор, која е случува да дојде од правопис. И јас сум само ќе провери дали следниве променлива isset, маса заградата strtolower на зборот - ајде да се балансираат сите од моите загради - потоа се врати вистина. Друго - тоа беше навистина тешко дел од оваа програма. Друго, враќање false. Направи. Тоа е чек (). Сега, зошто го прави ова дело? Па, оној што го помина со еден збор, која е стринг. Две, јас сум проверка на внатрешноста на хаш маса, кој се нарекува $ табела. Јас сум принудувајќи го во мали букви со повик функција доста слични tolower () во Ц, но тоа го прави целиот збор, не еден лик. И ако тоа е во собата, со други зборови има е вредност утврдена, со други зборови, ако тоа е вистина, тогаш да, ова е еден збор. Затоа што Јас ја ставив таму со оптоварување (). А ако не, јас ќе одам да се врати лажни. Сега други се едноставно. Функција големината (), како можам да го направите ова? Јас во суштина се врати $ големина. Но јас технички треба да направите ова досадни нешто. А всушност се слуша, јас бев сечење еден агол премногу. Јас навистина треба да направите глобалната $ табела. Но тоа се рече, бриши). Бриши () е неверојатен. Функционира бриши (). Како можам да сакате да се спроведе бриши ()? Направи. OK. Па бриши (), управување со меморијата е целосно згрижени за вас во нешто како PHP и многу на повисоко ниво јазици. Па ова е неверојатно. Како зошто, по ѓаволите, не ни поминал изминатите осум плус недели на C пишување очигледно навистина бавно, навистина време одзема проблеми со десетици часови на работа под нашите појаси? Па, за една работа, ова може да работи парична казна за мали програми. Тоа сигурно го забрза мојот развојот на време. Но, ајде да видиме што се случува во реалниот свет. Дозволете ми да одат во овој директориум во терминален прозорец. Има правопис. И ќе забележите како настрана, и може да се соочуваат со овој во проблемот сет шест или проблем во собата седум. Вие не строго мора да заврши PHP датотеки со. PHP. Ако се стави линија како што првиот на самиот врв, тоа е посебна линија на синтаксата што во суштина значи најдете на програма наречена PHP и го користат за да интерпретираат оваа датотека. Па сега никој не знае кој Јас сум водење на PHP програма. Јас може да го работи само како и покрај тоа беа нешто Составувач во C. Но, тука е нешто. Всушност, ајде да го направите ова повторно. Dropbox/pset6 /. Има правопис. Добро, 0,44 секунди. Тоа добива побрзо тоа време. Сега ајде да одиме во верзија на PHP. Убав допир. Но само мислам колку време Чував на работното време. OK. Значи 3,59 секунди, што всушност не звучи точни или. Но тоа е затоа скратам приказната, кога сте печатење огромна сума на работи на екран, кој себе го забавува работите надолу. Она што навистина го зеде процесорот во апаратот бил 3,59 секунди, во Спротивно на C, која ја презеде 0,44 секунди неодамна. Тоа е навистина редот на големината поинаква. Значи каде е таа цена доаѓаат од? Зошто е толку многу побавно? Зошто PHP изврши толку лошо? Danielle? ПУБЛИКАТА: Вие не навистина го користите хаш табелата. Дејвид MALAN: Јас не навистина го користите хаш табелата. Па јас вид на не. Па тоа е асоцијативна низа. Најверојатно ако луѓето на PHP се навистина паметни, тие се користат под качулка вистински хаш табелата спроведува во нешто како C или C + +. Но. Да. ПУБЛИКАТА: [нечујни]. Дејвид MALAN: Да. Така што секоја од функциите што сум го напишала сега - всушност, може да се каже дека уште еднаш го малку погласно? Публика: Секоја од функциите кои сте вклучени има многу повеќе целосна капацитет од - Дејвид MALAN: Значи тоа е многу точно. Има многу повеќе надземни дека ние сме навистина не гледаат со фокусирање на само dictionary.php, за што јас само напишав. Спротивно на тоа, има цела преведувач случува во позадина. Навистина, кога Истрчав оваа програма, не беше трчање Составувач нули и единици наменета за мојот Intel процесорот. Напротив, тоа беше работи линија по линија PHP код што изгледа исто како што го напишавте. И така секогаш кога имате потреба при користење на толкува јазик, всушност не ја плати оваа цена. Тоа се случува да се земе некое време да ја прочитате вашата датотека врвот до дното, лево кон право, а потоа изврши секој линија повторно и повторно. Сега во реалноста, посебно на интернет, вие всушност може да го забрза овој процес од страна на кеширање на резултатите од PHP код се толкува. А тоа го прави смисла на веб, бидејќи ако имате не еден корисник како јас сум тука, но 1000 или 10.000 корисници, а потоа можеби прв пат на датотеката е пристапува тоа е бавно, но потоа тоа е многу побрзо. Но ова е премногу, повторно, е пласирам. И за нешто како истражување на податоци во собата, па дури и нешто крупни како ова, вашите корисници ќе крајот почнете да се чувствувате дека застој. Значи во кратки, толкува јазици се многу многу во мода, многу популарна, а искрено се веројатно јазици што треба да стигнат за кога решавање на проблемите после CS50. Но сфати колку сте навистина земајќи здраво за готово под хауба навистина оние изминатите неколку недели во хеш маси, и дрвјата, и неуспешни обиди, кои се користат во крајна линија да всушност имплементираат работи како отворен заградата, квадратни заградата, која што можеме сега благодарност земе здраво за готово. Па ајде да ги разгледаме сега во оваа веб-контекст. И јас спомнав последен пат дека има еден куп на superglobals во PHP што не се навистина релевантни на командната линија. Тие се повеќе релевантни во контекст од користењето на PHP во веб контекст. Па работите со PHP на веб серверот, со цел да се генерираат нешта како HTML. И ние погледна $ _GET и $ _POST, и тоа е каде што автоматски на корисниците влез завршува едноставно ако поднесе формираат во датотека завршува во. PHP на веб серверот како апаратот. Но ајде да ги погледнеме накратко во $ _COOKIE И $ _SESSION. Во однос на Едноставен, она што е куки како да не го разбереш, во контекст на со користење на веб? ПУБЛИКАТА: Датотека на компјутерот. Дејвид MALAN: Да. Тоа е датотека на компјутерот на корисникот поставена од она што веб-сајтот ви се случи да ја посетите. Па кога ќе отидете на Фејсбук, кога одите да bankofamerica.com, кога одите на google.com, кога ќе одат за речиси било каков сајт во светот овие денови, вклучувајќи cs50.net, колаче е поставена на вашиот компјутер, кој е или вредност се чуваат во RAM меморија во вашиот компјутер во меморијата на вашиот интернет пребарувач, или понекогаш навистина податок зачуван на вашиот хард диск. И она што обично се чуваат во таа датотека не е вашето корисничко име, а не на вашиот лозинка, обично не нешто чувствителни освен ако на веб-сајтот не е толку добри со нивната безбедност, туку тоа е голем единствен идентификатор меѓу други работи. Тоа е голем случаен број засадени на вашиот компјутер, но можете да замислите како вид на виртуелна рака печат како од некој клуб или некои забавен парк кој им овозможува на вработените, на сопствениците на таа услуга, да се сеќавам на кој сте. Па ако големите случаен број е како 12345678, иако тоа е очигледно не се премногу случаен избор, мислам на тоа како страна печат дека кога ќе ја посетите facebook.com за прв пат, тие печат дека бројот на вашата рака. А потоа затоа што зборуваат на HTTP, можете да се биде пребарувач, и поради Фејсбук очигледно зборува иста како и на веб сервер, на HTTP протоколот вели дека во секое време да потоа посета facebook.com, без разлика дали тоа е вториот подоцна, еден час подоцна, дури следниот ден, толку долго како што имате не е експлицитно одјавени, која ефикасно се е како миење на рацете. HTTP вели дека треба да покажете вашата рака печат секој пат кога ќе се врати на овој веб-сајт. Она што на Фејсбук, тогаш не е тоа што тие погледне онаа страна печат и велат тие, ох, 123456789. Не знам на прв поглед дека овој е Дејвид Malan во Кембриџ, Масачусетс, но тие можат да ги проверат своите база на податоци и да каже, ох, лицето на чија компјутер ние засадени 123456789 е Дејвид Malan од Кембриџ, Масачусетс. Ајде да покажеме дека корисникот потоа неговиот профил страница или неговата Новости. Но има еден проблем тука, ако овој е начинот на веб навистина функционира. Ајде да ги погледнеме во брз пример. Ајде да, всушност, оди да се каже facebook.com. Но, пред да одиме таму, нека ме да си одам напред и се отвори Хром Инспектор овде долу. Дозволете ми да се погледне на мрежата табот. И сега ајде да одиме напред и да напишеш во https://facebook.com. И јас го правам тоа, така што ние не ги гледаме сите оние пренесувања и отпад време гледајќи низ нив. Дозволете ми да притиснете ентер. Сите во право. Гледаме на целиот куп на барања. Доаѓа Фејсбук. Постојат еден куп на датотеки. И тука, во моето споменување на латентност последен пат, тоа е многу HTTP барања. Но првиот е веројатно од најинтересните. Па ајде да дојдете долу тука, и Јас ќе зумирате во една секунда. Ова ќе биде вид на хаос, но ајде да видиме. Фејсбук е ни пратите целиот куп на работи. Но еј, интересно. Тие се садат не една, туку четири рака марки врз мојата рака овде. Сет-куки, Местење куки, сет-куки, сет-куки. И постојат неколку карактеристики тука. Сите од нив споменам некои вид на истекот. И тоа изгледа како Фејсбук се надева дека да се запамти мене до 2015 година. Па тоа е веројатно времето со кое Јас мора да се одјавите или тие ќе се само автоматски претпоставуваат Јас сум не се враќаат. Па тоа е всушност пристоен износот на време. И постојат некои други работи се случува тука. Оваа колаче се чини дека е насилно избришани од страна велејќи дека тоа престана да важи во 1970 пред колачиња постоел. Така прелистувачот е само ќе да се претпостави Добро, тоа е како миење на рацете печат. Но сега кога мојот интернет пребарувач го прави подоцнежно барање - дозволете ми да оди напред и да го направите тоа повторно и повторно. Сега дозволете ми да дојдете назад кон Топ барање и да одат надолу тука, барање заглавија. Забележуваат тоа. Па сега јас не сум под одговор заглавија, но информации што се вели барање заглавија. И ќе забележите дека мојот интернет пребарувач, како дел од своето барање по притискање Вчитај ја страната повторно има испратено најмалку следниве информации. Не сет-куки, но колаче. Значи ова е линијата, насловот на HTTP така да се каже, каде што мојот интернет пребарувач е вид на без мојот знаејќи дека презентирање мојата рака за инспекција на Фејсбук. Па овие колачиња можат да бидат користени тогаш за што? Да се ​​сеќавам на кој сте, или се сеќавам како многу пати сте биле таму, или навистина ништо. Па тука е counter.php. И дозволете ми да зумирате на фонт. И секој пат јас вчитајте ја оваа страница, информации тоа е сеќавајќи се колку пати Сум бил таму. Па, тоа не е сè што импресивен. Ајде само затвори таа табот, а сега да се вратиме на http://localhost/counter.php. О, тоа е интересно. Таа се уште се сети, дури и иако јас ја затвори табот. И искрено, ако јас го затворите пребарувачот, ако спроведува на вистински начин, јас уште можеше да се сети дека овој корисник е кој тој или таа беше прв пат, и само еднаш одам во менито Хром, кој овде е тука, и да одат во Историја, и кликнете Clear Browsing Data, како што некои од вас може да има во минатото, само тогаш ќе колачињата всушност да бидат избришани во текот на веб развој. Значи, ако ние одиме - ајде да се затвори до gedit тука. И ако ние одиме сега на оваа датотека. Дозволете ми да одат во нашата vhosts / localhost / јавноста, и дозволете ми да го направите counter.php. Забележите дека ова е прилично едноставна програма. Тоа е прилично едноставен веб-сајт. Па на врвот на датотека е само коментари. Но, тука е нова линија што може веќе видовме во p-сет седум, session_start (). Ова е линија на PHP код кој суштина кажува на веб сервер, осигурајте се сигурни да се искорени раце и да сигурни да проверите рака марки. Тоа е сето она линија прави тоа, и тоа не сите на тој процес за нас. Тогаш забележите Тукушто добив две гранки тука. Ако контра клучните внатрешноста на оваа посебни глобалната променлива наречена $ _SESSION Е поставена - со други зборови, ако има некоја вредност тука - ајде да го добие и чувајте го на локалната променлива наречена $ шанкот. Друго, ајде да доделите $ контра на стандардната вредност на 0. Сега тука е еден аспект на PHP тоа е и благослов и проклетство. PHP е малку невешт. Значи додека во Ц, она што ќе го обемот на контра се или тука или тука? Тоа би биле ограничени на оние големите загради. Погоди што? Во PHP, таа постои дури и надвор од оние кадрави загради, тука и тука, и тука и тука, и дури и долу. Па јас велат дека ова е благослов во смисла дека не треба да се размислува како тешко како што го правевме пред неколку недели. Но тоа е, исто така, малку на клетвата во кои без разлика каде се користи променлива во PHP, барем во некоја програма како оваа, тоа е глобално достапен за подобро или за полошо. Па мора да имајте на ум дека сега Вашиот променливи не може да биде недефинирано. Можеби сте ги дефинирани друго место. Но, она што сум јас ќе го стори на крајот? Одам да се сместат во оваа глобална променлива како вредноста на контра клучните резултат на прави контра плус 1. Па ова е само аритметички што го прави incrementation на тој шалтер. И фактот дека јас сум зачувување на таа вредност назад во тука е средство за суштина ажурирање на базата на податоци се сеќавам дека корисникот 123456789 е тука два пати. И кога ќе го направи тоа повторно следниот пат кога вчитување на страната, тоа се случува да се провери мојата рака печат и велат, ох, корисникот 123456789 сега е тука три пати. И уште па што PHP и слични јазици се прават за нас е дека тие се пронајдат како и каде и за колку време за да ја запази вредности во оваа специјална superglobal. И ова superglobal следниот пат кога ја посетите страницата е вид на магично пред-населен, исполнет со вредности кои беа таму последен пат сте ги посетиле, дали тоа беше пред една секунда, една недела пред, или во 2013 година и ние сме сега зборуваме за 2015 година. PHP и веб серверот се грижи сето тоа за вас. ПУБЛИКАТА: [нечујни]. Дејвид MALAN: Променливи во PHP се во суштина секогаш глобалната освен ако декларира како во внатрешноста на функција, а потоа тие се локални функција само. Но, бидејќи јас не сум напишал било функции, тие се сега ефикасно глобалната текот на целиот мој датотека тука. Публика: Дали постои начин да ги направи локалните? Дејвид MALAN: Дали има некој начин да ги направи локалните? Само завиткани во функции. Која во најновата верзија на PHP, можете да го направите ова со анонимен функција. Но повеќе за тоа во контекст на JavaScript. Но кратко одговорот е не. А веќе одговорот е да. Убаво. Добар квиз прашање. Во ред е. Па на крај, самата страница е всушност прилично едноставна. Забележите дека еднаш бев излезете PHP на владата, да се потсетиме дека сите овие работи надолу подолу е само ќе да се плукаат надвор суровини на прелистувачот. Што е во ред, затоа што сакате да ја пратите корисникот некои HTML, но јас сакам да динамички ажурирање дека HTML. И еден начин да се направи ова е да се најде решение на многу брзо се намали назад во PHP владата, употреба отворен заградата прашалник знак за еднаквост, а потоа и излез вредноста на шанкот. Или ако тоа изгледа малку криптичната, ова знак за еднаквост е, всушност, само некои синтаксички шеќер за ова printf ($ контра). Но искрено, тоа е само малку грдо и малку досадни да напишеш. Така PHP многу убаво ја нуди оваа опција каде што само може да се каже повеќе посочно во ист начин. Значи она што се случува под хаубата? Ајде брзо се погледне на мрежата табот тука за counter.php. И дозволете ми да оди напред и првиот ајде да го исчистите вашиот колачиња. Ајде јасно бараат податоци од на почетокот на времето. Сега, ајде да се вратиме овде. Сега ајде да ја превчитате страната. И јас сум назад на нула. Бидејќи мојата рака печат е испран, Јас сега се добие нов куки. Навистина, ако гледам во јазичето мрежа и прегледуваме одговорот заглавија, најава дека апаратот е ме испраќање колаче чие име е донекаде арбитрарно, туку вид на разумно, PHPSESSID. И тоа е испраќање на мене ова навистина големи случаен број. Тоа не е мал бројот. Тоа не е сосема хексадецимален. Тоа е некој вид на алфанумерички стринг, но се претпоставува дека тоа е случаен избор. А тоа е рака печат, така да зборуваат дека јас сум се однесуваат на. Во меѓувреме, ако јас кликнете Вчитај а потоа погледне во оваа втора линија за мојата втора барање, известување дека сега моето барање заглавја вклучуваат PHPSESSID еднаква на ова, не е поставена-куки, но само колаче. И тоа е презентација на мојот интернет пребарувач од мојата рака печат. Па сега како закачка, а ние ќе разговараме повеќе за тоа во една недела или така, но на кој начин го прави ова да се направи ранливи, вашиот Фејсбук профил ранливи, и други такви сметки ранливи? Публика: Ако некој има вашиот колаче. Дејвид MALAN: Да, ако некој има вашата колаче. Мислам навистина, слично како некои од вас може да се обиде на како клуб или забавен парк, ако се обидете нешто вака да ја копирате печат, иако наназад кон страна на друго лице, и тогаш тој или таа го претставува како свои, и ако тоа всушност изгледа идентични, 123456789, а потоа на веб серверот е очигледно само ќе верувам дека тој е вас. И ова е навистина фундаментален закана во секое време ви користи cookies затоа што ако некој само spoofs така да зборуваат вашиот куки, фигури од она што го е, или со вистински да го копирање од страна гледајќи во вашиот компјутер и се допаѓа, во ред. Колаче Дејвид е JJ3JIK и така натаму, а потоа тие се доволно паметни да знаат како да се вид на рачно испрати дека куки од прелистувачот или од програма тие пишуваат, тие би можеле целосно влезете во веб-сајт како и вие. Тоа не е тешко да се преправаме дека некој друг, освен ако ние враќате п-сет две, со кој се воведе што? Публика: Криптографија. Дејвид MALAN: А малку малку на криптографијата. Едноставна криптографијата, барем во Standard Edition, но крипто сеедно. помалку. Значи излегува ако криптирате сите овие заглавија користење на нешто што ќе сега може да знаат поголема позната како SSL, Secure Socket Layer, или https:// адреси, тогаш сите овие работи ние сме биле обѕрне на се, всушност, се шифрираат, што значи дека тоа е како да не може да прочитате страна печат. Само facebook.com може, или google.com, или во овој случај, апаратот може да Прочитав дека раката печат. Трагично иако, и повторно, ова е сите премногу е соодветно, со нешта зимскиот на крајот, дури и SSL е кршливи. А тоа е всушност не е толку тешко дури попуштат дека енкрипција. Не толку од пукнатини на енкрипција, но со трикови на прелистувачот во декрипција податоците предвреме. Но, повторно, ние ќе ти душманке со тоа пред долго. За сега, само се плаши. Тоа е трагично вид на вистина. Во ред е. Значи, каде што го прави ова сега ни остави? Добро, ајде да го направиме тоа. Ајде да одиме напред и да се земе брз закачка пред да се одмори. И јас мислам дека ние ќе траат малку подолго денес, но ние ќе се нурне во нешто сосема нови и секси, кој ќе наточи вашиот апетит за уште повеќе. Па тоа е закачка. Па SQL, почнавме да зборуваме за некогаш толку кратко последен пат. Навистина ќе ја добиете вашата раце валкани со некои од нив во p-сет седум. И во однос на Едноставен, она што го прави SQL - S-Q-L - направи за вас? Што е тоа? Да. ПУБЛИКАТА: Да те пристап до податоците. Дејвид MALAN: Да. Тоа нека ви пристап до податоци во база на податоци. Структурно јазик за пребарување. И ова е во суштина програмски јазик. Постојат карактеристики на тоа дека ние дури и не ќе го користи во класа. Но можете да ефикасно дефинираат функции. Тие се наречени чуваат процедури во SQL. Но, ние ќе го задржи прилично едноставен и само користат за некои основни операции како избирање на податоци, внесување на податоците, ажурирање на податоци, и бришење на податоци. И навистина може да се мисли на базата на податоци, како SQL база на податоци, како само се Microsoft Excel. Бидејќи SQL однесува на релациона база на податоци, каде што однос само значи маси. Редови и колони. Така нешто што може да се стави во табела вака или Google Docs, може да се стави во SQL база на податоци со декларирање на табелата. Сега, како вие всушност пристап таа информација? Па, со команди или прашања, како ова. Одберете, ставете, ажурирање и бришење. И во најголем дел, тие се четири само состојки ќе треба да се направи нешто сосема силно во проблемот постави седум. Сега назад во текот на денот, ќе всушност комуницирате со базата на податоци во црно и бело терминален прозорец на трепка брзо како овој. И базата на податоци ние сме се извршува на апаратот се нарекува MySQL, кој е слободен и софтвер со отворен код база на податоци моторот. Ако на Google и читање на Википедија член, ќе знаеш дека името е малку на транзицијата за некои верзии на Linux. Марија база на податоци е всушност вилушка, па да се зборува за MySQL. Скратам приказната, Oracle купи MySQL. Oracle е голема компанија. Луѓето се загрижени дека тоа би веќе не остане толку отворен код, па ова е само копија на MySQL тоа е уште е бесплатно, сепак со отворен код, и инсталирани во Fedora Linux стандардно. Но, ова е вид на болка во вратот да се запознаат со база на податоци на овој начин. Значи ние се вклучат во CS50 апаратот бесплатен софтвер со отворен код алатка наречена phpMyAdmin. Само коинциденција што тоа е напишана во PHP. Нема основните треба за PHP тука. Но, ова е само еден веб-базирана алатка која ние се симне бесплатно, инсталирани во апаратот, која ни овозможува да имаат графички кориснички интерфејс со кој да се истражуваат п-собата седум база на податоци со нив да се создаде нови бази на податоци, велат за вашата завршен проект ако сакате како, и на крајот се создаде динамична веб-сајтови како CS50 финансии кои ќе ви овозможи да се пребарува на податоци и ажурирање на податоците динамично. Вие нема да мора да ја користи само едноставна текстуална датотека или CSV. Можете да го користите паметна база на податоци програма, така што ќе може да се изврши повеќе софистицирани прашања отколку само читање преку сè линеарно. Така на пример, ова е она што го даде сте надвор од кутијата за p-сет седум. Ова е табела со очигледно најмалку три колони, од кои еден е корисничко име, од кои една е хаш, и други од кои е ID. Но интересна работа, и само за да размрси коренсподенцијата една мисла тука, корисничко име е веројатно веќе уникатни, нели? Мислам, повеќето секој веб-сајт, ако имате корисничко име, таму не може да биде два Цезар. Не може да има два malans. Не може да има два jharvards. Својата единствена. Инаку, тие не знаат што jharvard што всушност е. Значи она што може да биде мотивација за, исто така, има третата колона на левата таму се нарекува проект, кој изгледа како број кој е сличен уникатен? Таа се чувствува малку излишни за мене во прв поглед. Зошто тоа би можело да биде огромна за да имаат не само уникатен кориснички имиња, но исто така уникатен броеви? ПУБЛИКАТА: Тие би можеле да имаат истата лозинка. Дејвид MALAN: Луѓето би можеле да имаат истата лозинка, секако. Дека апсолутно може да се случи. Но, ако тие имаат овој уникатен корисничко име, Јас би рекле дека тоа навистина не прашање, бидејќи ако тие тип во нивните корисничко име, јас само треба да се провери нивната лозинка, нивните хаш него. Зошто инаку? ПУБЛИКАТА: Побрзо пребарување. Дејвид MALAN: Побрзо пребарување. Зошто? Публика: ID е само еден. Дејвид MALAN: ID е само еден карактер, или да бидам попрецизен, тоа е голем број, така што е веројатно 32 бита или нешто слично. Со оглед на тоа корисничко име, очигледно Џејсон Hirschhorn е таму горе е вид на смешно долго, и тоа се случува да да ме многу повеќе време да стринг споредуваат H-I-R-S-C-H-H-O-R-N, и можеби А / 0 или нешто слично, со цел да се погледне до Џејсон, што е спротивно на само велејќи ми даде кориснички број два. Тоа е 32 бита. Тоа е една ИНТ дека што треба да се споредуваат. И навистина, тоа е токму зошто бази на податоци имаат тенденција да се додели единствена лични карти да редови во нив. Сега што други типови на податоци се таму Покрај ИНТ и очигледно жици вака? Па, да бидам повеќе правилно, SQL бази на податоци, како и MySQL, имаат знак полиња. И знак малку погрешно не е еден знак. А знак поле во MySQL база на податоци е една или повеќе карактери, но тоа е фиксен број на карактери. Така на пример, ако одам во текот на phpMyAdmin како може да имате веќе, или наскоро ќе биде проблем постави седум, а јас одам да ми база на податоци, и само за забава, ајде да креирате нова табела наречена ги тестираат со само две колони. Јас тогаш ќе кликнете на Оди. И тоа ќе стане прилично запознаен, особено како да нескопосник околу тоа на своја. Еве јас може да се тип проект да се создаде нова табела на видот INT. Но, тука би можел да напишеш корисничко име да рекреираат дека порано табела. И ќе забележите Имам цел куп на типови да изберете од. И тоа исто така е зошто phpMyAdmin е вид на убаво. Тоа е вид на авто-учење во кој ќе може само вид на точка и клик, и погледне во паѓачкото мени, и заклучиме од дека она што овластувањата SQL ти дава. И, навистина, ако изберам знак, јас тогаш мора да се специфицира должината, или како многу вредности, колку карактери. Толку многу заеднички вредности се работи како 255, но тоа е малку долго. Најчесто е осум за корисничко име. Но, тоа е малку мала, овие денови. Значи ова е дизајн одлука. Тоа е максимум 8 карактери, 32, 255, 1000? Тоа е навистина зависи од вас. Но знак поле не е фиксен број. Па изберете премалку и сте вид на зезнав ако сакате подолг корисничко име. Изберете премногу и она што е Во надолна линија? ПУБЛИКАТА: [нечујни]. Дејвид MALAN: Тоа е непотребното. Исто како и во C, ако имате поголем парче меморија отколку што треба, вие сте само губат време и да губат простор. Па како алтернатива, постои VARCHAR, која го решава овој проблем од страна на лекување должина не како со фиксна должина, но како максимална должина, и со помош на променлива број на карактери, кои потоа има тенденција да се користи само како многу знаци што всушност треба. Тоа звучи совршено. Зошто не можеме да се ослободи од Знак тип на податоци, тогаш? Што може да биде во надолна линија на користење VARCHARs, што звучи како тоа е убаво победа? Да? ПУБЛИКАТА: [нечујни]. Дејвид MALAN: Добро, добро. Значи, ако сите на вашите податоци е исто должина, што е загриженост? ПУБЛИКАТА: Бидејќи ти си губи податоци од страна кажувам сите нив. Дејвид MALAN: Значи, ако сите на вашите податоци е со иста должина, сепак, јас би рекол дека специфицирање максимална должина на VARCHAR не се разликува од одредување на фиксна должина на знак, ако знаеш дека бројот однапред. Но, постои навистина, и јас ќе вид на екстракт од тој одговор реалноста тоа е уште постои Макс, кои би можеле да да биде здодевна, особено ако се судрите со името на лицето што е невообичаено долго што не сте предвиди. И тоа е, исто така, малку помалку ефикасни за да всушност пребарувате на VARCHARs како за разлика од пребарувањето карактери, особено за долги маси, кои имаат многу и многу податоци. Значи и тука, тематски е повторно нема очигледен избор. Па само да ви даде чувство на други типови на податоци кои би можеле да бидат од интерес или за p-сет седум или во иднина, има Int. Има BIGINT, која е како долго долго. Тоа се стреми да биде 64 бита. Има децимали, кој ќе ја видите во проблемот сет, што е многу почиста одговор на проблемите со кои се се сретнал со плови и лебди точка непрецизност. А потоа, тука е DATETIME. Има буквално податочен тип кој има да изгледаат како една година, еден месец, еден ден, и еден час, минута, и второ. Но SQL бази на податоци, исто така, имаат работи ќе го наречеме индекси. И индекс е нешто што можете наведете при создавањето на маса за да направи пребарувања и други операции поефикасно. Поточно, има нешто што се нарекува Примарната индекс, кој можете да декларираат како што следи. Ние го направи ова за вас со корисници табелата ние ви даде. Но известување, ако јас се рачно Пресоздавањето корисниците табела тука, им тоа име на корисници. Јас веќе одреден проект. Јас наведени Int. Јас наведени корисничко име со максимум 32 карактери. Но, ако ние ги лизгање во оваа прилично широк прозорец, најава има куп други нешта што може да се определи. Еден, можам да наведете атрибути како, знаеш што, оваа ИНТ треба да биде потпишан. Не сакам негативни броеви, па ајде да ја направат е потпишан. Нула не е релевантен, бидејќи тука Јас сакам секој корисник да имаат единствена број. Не сакам тоа да биде нула. Но, ова е интересно. Можам да се каже дека проект е или примарниот клуч на оваа база на податоци, или тоа е уникатен, или тоа е индексирани, или целосниот текст. Така и за цели денес, долга приказна Накусо, ПРИМАРНА значи дека ова ќе биде и концептуално и технички поле кои се користат за уникатно идентификуваат корисниците. Па кога ќе се погледне нагоре на корисниците, ова е вид на ветување да ги гледам нагоре во најголем дел од дека единствен идентификатор. И базата на податоци ќе се осигура дека ако имаат кориснички број 3, не можете да физички внесете друг корисник со тоа истиот број 3. База на податоци само ќе одбие да ги зачувате вашите промени. Што е добра работа, бидејќи можете да се заштитат себе си од себе. само Алтернативно, за корисничко име. Па вториот ред, да се потсетиме, е областа на корисничко име. Па вториот ред тука е корисничко име, како што го направивме на многу лево таму. Па што друго би можеле Сакам да го одредите? Не ми е дозволено, според SQL, да се определи две основни клучеви. можете да наведете еден заеднички клучните каде што погледне во двете полиња, но тие не можат поединечно да бидат примарни клучеви. Па тоа е надвор од прашање. Така што може да сакам да се избере? Добро, уникатен е слични во духот на примарен клуч, каде што ќе се определи ова поле ќе биде уникатен, но тоа е нема да биде една Јас го користам цело време. И ние нема да го користите овој еден сите време за што причина повторно? Тоа е побавен потенцијално ако тоа е долго корисничко име. Тоа е само губење на време. Индекс, пак, наведува дека тоа е нема да биде уникатен, но јас би сакал да работат својата магија под качулка да се направи тоа побрзо за мене да пребарување на ова поле. Така што ова веројатно не е релевантно тука. За корисничко име, јас би рекол дека Уникатен е добар одговор. Но, претпоставувам дека ние направивме корисниците повеќе Интересно од само кориснички имиња, хашови, и ID броеви. Што ако ние даде луѓе со име и презиме? Што ако ние им го дадовме адреси и други податоци за нив? Па, ако се каже дека колона во база на податоци се индексира, тоа значи дека MySQL, или Oracle, или што и база на податоци што го користите, треба да работат својата магија и употреба на некои вид на фенси податоци структура како дрво, или TRIE, или хаш табелата, или нешто да се гарантира дека кога ќе пребарување за податоци со користење изберете на кој одредена област - како мене покаже на сите дека живее на Оксфорд Стрит. А за пребарување како што. Ако имаш специфицирано во однапред дека сакаш индекс на тоа поле, на пребарувања ќе биде многу, многу побрзо. Ако не специфицирате индекс, најдобар можете да го направите е линеарно пребарување ако тоа не е сортирана. Но ако се определи Индекс, паметни лицата кои се во базата на податоци - луѓе како тебе кои сега знаеме дрвја и се обидува и хаш маси - автоматски ќе се изгради таков податоци структура во RAM за да бидете сигурни дека оние пребарувања се многу побрзо. Fulltext меѓувреме е сличен со духот, но ви овозможува да направите маска пребарувања, како мене покаже на сите дека живее во улиците кои започнуваат со Буквата О било причина. Можете да го направите маска пребарувања како што. Или, повеќе привлечни работи како шоу мене секој кој има зборот - покажи ми секој чие име почнува со одредена буква. Можете да пребарувате за клучни зборови на овој начин. Во ред е. Значи, дизајн можности има потенцијално. Има и други кои јас ќе бранува моите раце во. Излезе дека можете да имате различни складирање мотори. И ова е повеќе arcane отколку што треба секако за проблемот постави седум. По дифолт, вие момци се користат нешто што се нарекува InnoDB. Ќе видите споменување на овој некаде во интерфејс phpMyAdmin, најверојатно. Но знам дека постојат и други дизајн одлуки кои се потенцијални интерес да дојде финалето проекти, доколку ќе се направи нешто на веб-базирана. Но, ајде да го направиме тоа. Ајде да одиме напред и да се стави ова на екранот, како закачка за приказна вклучувајќи вас, цимер, и една чаша млеко. Ајде да ги две минути или па се скрши тука. И ако може да се држи околу, да се назад, погледнете малку повеќе на SQL и потоа малку го вклучите Javascript-со P-постави осум во умот. Во ред е. Значи, ајде да мислиш за агол случај дека многу лесно може да се појават во контекст на користење на базата на податоци, или искрено, дури и со користење реалниот свет работи како банкомати да добијат пари. Па тука е фрижидер. Да претпоставиме дека имаш еден премногу во вашиот dorm или вашата куќа. И имаш еден цимер, и двете од навистина ви се допаѓа млеко на пример. Па ќе дојдеш дома од класа еден ден. Тој или таа не е уште назад. Ќе го отворите фрижидерот. Навистина сакате голема чаша млеко. Нема млеко. Значи она што го правиш? Ќе го затворите фрижидерот. Ќе имате своја клучеви. Да излезеш на плоштадот. И ќе добиете во линија на CVS на оние само исходот нешта, кои секогаш трае подолго отколку всушност има касиери. Во секој случај. Па тогаш, во меѓувреме, точка точка точка, вашиот цимер доаѓа дома и тој или таа Слично има копнеж за малку млеко. Па тој или таа се отвора фрижидерот, изгледа внатре, и ох, гајле. Нема млеко. Па тој или таа поаѓа, се случува да се обратите на други CVS, што е само блокира далеку поради некоја причина, и тој или таа добива во ред за да купат млеко. Во меѓувреме, ќе дојдеш дома, тој или таа доаѓа дома, и она што го прават што во крајна линија имаат? Двојно повеќе млеко. Но, вие не навистина ми се допаѓа млеко тоа многу. Така, сега имате толку многу млеко кое сега еден од нив е само ќе одиме во кисела на крајот. Значи ова е навистина лоша проблем. Нели? Значи она што се случило? Значи во основа, ова е вид на смешно пример. Но под хаубата, она што го имаше се случи тука е и од вас проверува состојбата на некои парче на меморија, фрижидер. Двете од вас проверуваат државата на некои променлива. И двајцата извлече заклучок кои потоа ќе постапи натаму. Но, за жал, додека вашиот цимер беше во продавницата, државата на која променлива промени, тој или таа се врати а сега сака да ја смени држава, но тоа е веќе изменет на него или неа. И, се разбира, тој или таа нема да имаат качил до продавница ако знаеле дека сте биле веќе на пат. Така и во реалниот свет, како може да ви избегне овој проблем, претпоставувајќи дека имате фрижидер, имате цимер, и ти всушност се допаѓа млеко? ПУБЛИКАТА: Комуницирање. Дејвид MALAN: Комуницирање. OK. Но, како може да ви се причестиш? ПУБЛИКАТА: Оставете белешка. Дејвид MALAN: Оставете белешка, нели? Секогаш оставете белешка, за навивачите на шоуто. Добро, така што секогаш ќе остават порака или стави навистина како катанец или нешто на фрижидер што ги држи вашиот цимер од контрола на државата на таа променлива. Сега, зошто би можеле ова да биде germane да Проблемот постави седум или да банкомати. Па, замисли свет во банкомат каде може да биде во можност да одат до банкомат машина тука, а друг банкомат тука. И ова се случува доста често. И да претпоставиме дека имаше две банкомат картички, што е можно за да се добие. И ќе влезете во двете машини ефикасно истовремено, се надевам дека Иако никој не гледа. И тогаш ќе внесете го вашиот PIN приближно истовремено. А потоа ќе се направи рамнотежа пребарување да видите колку пари имате. И ајде да речеме дека имате 100 $ лево во вашиот профил. Значи во суштина истовремено, велат едно, нула, нула, влезе. И ќе се надевам да се вратам на некои пари. Но колку пари може да ви се вратам? Сега компјутери на крајот на денот, особено ако тие се зборува за сервери, не мора да се прават работите во цел дека се очекува. Па претпоставувам што се случува, бидејќи на што брзината на мрежата прашања има се, или процесорот прашања постојат, или нешто слично, да претпоставиме дека првиот банкомат ја проверува вашата рамнотежа и гледа, ах, овој човек има 100 $. Но, тогаш се расејува, бидејќи можеби резерви се случува и затоа е забавување. Или можеби додека проверка, мрежата врска доби малку побавно, бидејќи ова едноставно се случува. Тие се физички уреди. Па во меѓувреме, вториот АТМ е прашуваат истото прашање. Колку пари се Дејвид имаат? 100 $ е одговорот. Но, бидејќи првиот банкомат се уште не испрати порака одземе $ 100, и Банкомати имаат прегледано свод на банката, види таму е 100 $ таму, и сега двете машини потенцијално се ќе плукаат одговор. Сега, ова е одлично за вас во извесна смисла ако она што банката го прави на крајот е промена на износот до минус 100 од поставување на променлива еднаква на твојот банкарска сметка е еднаква на 0, што е спротивно да прави минус 100. Сега во најлош случај за банката - или во најдобра за банката, пак, тие ви даде $ 200, и вашата банкарска сметка сега покажува негативни 100 $, која навистина не е така може да ви корист на сите. Но поентата е во тоа што оваа трка услов за две цимерите добивање млеко, или за две банкомати се обидува да добие пари и промена на состојба на свод во исто време постои ниту време имаш базата на податоци. Сега во проблем постави седум, ова прашање се појавува во смисла дека ако се купи удел на акции Фејсбук, а потоа за пример ќе купите втор дел од Акциите на Фејсбук, што треба да направите одлука како програмер. Со цел да одлучат како да се ажурираат база на податоци, шансите се сте ќе треба да имаат еден ред дека акциите, и тоа е еден начин да се имплементира. И ви се случува да имаат една акција од FB, кој е нивните акции симбол за оваа корисничко име, или овој корисник Проект, единствен идентификатор. Но истата приказна може да се случи тука. Ако се направи Избери во SQL, како што ќе видите во проблемот постави седум, кога ќе видите, ох, Дејвид има една акција на акции Фејсбук. А сега допуштете ми се промени тоа да биде две акции, бидејќи тој сака да купи Вториот акција. Но, претпоставувам Дејвид всушност имале две прозорци на пребарувачот се отвори, или да претпоставиме дека тоа е заедничка сметка со двајцата брачни другари, и двете од нив се обидуваат да се изврши истата операција, има, исто така, на постои потенцијал за одлуката да биде врши врз основа на претходниот состојбата на светот - сметка има една акција - и двете лица, или и двете сервери, сега обидете се да се каже прираст до две акции. Но, во овој случај, можеби сте обвинети мене пари и акции, но зголемува само дека едно време. Значи во кратки, основниот проблем тука, како и со вицот за оставање на белешка, или ставање катанец на неа, е ако двајца луѓе, или две теми - сетам на нула - може да изврши увид во состојбата на некои променлива и потоа обидете се да се промени таа променлива, но тие две работи не се случуваат на исто време, но може да се прекинат од страна на други работи што се случуваат, податоците може да добие во многу чудни држава. И може да имаат корист или можете да страдаат во смисла на пари пример. Па во проблем постави седум, ние ви даде оваа линија код, која долго приказната, го решава овој проблем во MySQL. Ова многу долго обука која не ги дури и се вклопуваат во една линија на екранот тука гарантира дека вашата работа е она што се нарекува атомска. Сето тоа се случува одеднаш или тоа не се случи на сите. Ова многу долго фраза не може се прекинат делумно. И она што го прави тоа е буквално она што го кажува. Вметнете во некои табела следниве три области оние кои се специфични вредности, но дупликат клучот, не прават вметнете. Направи ажурирање. Значи ова е како прави Избери и Вметнете така да се каже, во исто време. И она што е клучот тоа е веројатно се наведени тука? Излезе, и ќе видите ова во проблем во собата на seven спецификации, затоа што ние сме прогласени за таму да биде уникатен клуч на овој маса, така што не може да има повеќе редови за ист корисник со исто денар акции симбол - во овој пример тука, DVN.V е глупо денар акции кои ги се однесуваат на во спецификации. Затоа што ние сме го прогласил за да биде уникатен, она што ова значи е дека ако обидете се да се вметне дупликат ред, ти си наместо да оди да го ажурирате без некој друг има шанса да го промени на состојбата на светот или. Значи во кратки, ова гарантира работи се атомски. Поопшто иако, бази на податоци како MySQL - а вие не треба оваа функција за P-собата седум, но да ја задржат во умот за иднина - поддршка како што се нарекува трансакции, каде што може да се каже СТАРТ трансакција буквално. Тогаш може да се изврши две SQL извештаи. И SQL изјава, како што ќе видите во p-сет седум, изгледа малку нешто како ова. Ажурира табела наречена сметка. Постави рамнотежа колона еднаква на она што рамнотежата колона во моментов е минус 1.000, каде што бројот, број на сметка, како корисничко име, изнесува 2, а потоа ажурирање сметка точка точка точка. Значи во однос на Едноставен, што значат овие две прашања се чини дека се прават во реалниот свет чувство на банкарство? Публика: Пренесување да заштеди. Дејвид MALAN: Токму така. Пренесување на средствата од една сметка на другите. И ова е уште еден пример каде што навистина сакате овие две работи да се случи или не се случи. Вие не сакате нешто да добиете во средината на нив и потенцијално се плеткаш математика, или плеткаш колку пари имате, или колку пари на банката има. Значи она што е навистина убаво за трансакции во MySQL е дека, и бази на податоци генерално, е дека тие и паметни луѓе кои го спроведуваат овие карактеристики дознаам како да се направи сигурни дека и двете од овие работи се случуваат или не на сите. И ако сте навистина се стремат да се направи веб-сајт кој се користи од страна на луѓе на кампусот, луѓето во реалниот свет, го прават нешто во стартување смисла, овие се видови на дизајнот на одлуки кои стане некогаш толку важно. Инаку, ќе почнете да изгубите податоци, изгуби корисници, или во најлош случај како видовме тука, потенцијално губат пари. Па уште еднаш, повеќе за тоа во проблем постави седум, како и можеби за некои од вас во финалето проекти. Па ајде промени таа слика моравме пред еден миг само во уште еден начин. Па да ми всушност се види дали можам да - Не бе, тоа го нема. Ете го. Значи ова е местото каде што ние ја напушти последен пат. И испоставува ние ќе фрли уште една работа во микс тука - јазик наречен вклучите Javascript-. Па го вклучите Javascript-всушност одговара на во ова парче - и јас не сосема остава доволно простор, па ова не е сега да скала. Добро, ова е навистина патетично. Добро, така што е да го вклучите Javascript. Во ред е. Јас сум навистина го прави лош. Во ред е. Па JavaScript е друг програмски јазик, и нашиот последен, ако тоа им помага уверам дека таму не е многу повеќе на хидранти за пожар тука. Па го вклучите Javascript-е исто така се толкува јазик, што значи дека не компајлирајте го во нулите и. Можете само да го работи. Но она што е фундаментално различно со Го вклучите Javascript-обично е во тоа што не се кандидира на вашиот веб сервер. Тоа не се работи во апаратот само по себе. Напротив, тоа добива симнати од страна на корисникот преку HTTP во нивниот интернет пребарувач - Chrome, Safari, Internet Explorer, Firefox, што - и тоа е интернет пребарувач, кој извршува оваа особено програмскиот јазик. Значи да биде јасно, PHP досега е извршува или на командната линија во нашата црна и бела прозорец, на сервер како апарат, компјутер сакале апаратот, или тоа е извршена од страна на веб серверот работи на компјутер. Но темата тука е дека PHP досега е извршена од страна на серверот, па корисникот и прелистувачот на корисникот никогаш не гледа линија на PHP код. Всушност, ако некогаш сте се отвори прелистувачот за вашиот веб-сајт или на друг и ќе всушност гледаат PHP код во вашиот прозорец, некој зезнав. Затоа што тоа не е замислена да биде испраќа до пребарувачот директно. Тоа би требало да биде извршена и се сврте во нешто како HTML. Но го вклучите Javascript-е во суштина спротивното. Тоа е со цел да се кандидира обично внатре на прозорецот на прелистувачот на корисникот. И она што видови на веб-сајтови користат Го вклучите Javascript-тогаш овие денови? Како буквално секој популарен веб-сајт. Секој веб-сајт кој ви момци веројатно користат секојдневно користи JavaScript за Наједноставниот, па дури и најсекси карактеристики. Па нешто како што се Фејсбук Чет ако користите тоа. Како тоа всушност функционира? И досега, сите од работите ние сме направено со HTML и PHP се претпоставува дека се повлече до URL-то, и ќе притиснете ентер, и ќе видите некои HTML содржина. И ќе кликнете на линкот, кој го менува URL-то, се менува страницата, и ја превчитува некои нови содржини. Кликнете на друг рачно или да поднесат форма, се однесен во друга страница и можете да видите некои нови содржини. Но со користење на нешто како Фејсбук Чет, или Gchat, или на Google Maps, ретко дали целата страница освежи таква што ќе видите бел екран миговно и потоа нови содржини. Наместо тоа, веб-страници и денес се динамички добивање ажуриран повторно и повторно и повторно сите вид од зад сцената. И испоставува дека кога ќе одат да нешто како Фејсбук, или Gchat, или Gmail, како и страница надградби автоматски, без претовар на целиот екран, она што се случи е дека Вашиот прелистувач има направено вид на тајно дополнителни HTTP барања - не за целиот веб-страници, но само за малку парчиња на податоци, како и инстант порака дека вашиот пријател само вас, или да ги ажурирате статусот испратил некој само вие, или чуруликам испратени дека некој само што ја испратил. Тоа е само правење малку барања за податоци, а потоа со помош на JavaScript, оваа програмски јазик, да се промени она што веб-страница изгледа како без сервер помагање, без сервер генерирање дека HTML. Значи во кратки, JavaScript може да се користи тогаш не само да пренесам новите податоци од серверот без претовар целина страница или поднесување на формуларот. Таа, исто така може да се користи за да се промени т.н. ДОМ - документ Object Model - што е само стилизиран начин за велејќи дека дрвото на HTML што сме го виделе последен пат. Така да се увери, го вклучите Javascript-е синтаксички така сличен на C, како и. Нема главната функција. Вие само почнете да го пишувате код и тоа ќе се извршуваат, или толкува повеќе како што треба. Услови ќе изгледа вака. Не се разликува од C или PHP за таа материја. Булова изрази или-ед заедно ќе изгледа вака. Anded заедно да изгледа вака. Прекинувачи ќе изгледаат вака. За петелки ќе изгледа вака. Додека петелки ќе изгледа вака. Направите додека петелки ќе изгледа вака. Ова е нова. Па го вклучите Javascript-не има foreach изградба само по себе, но ова конструкција за променлива i во низа, и јас во овој случај станува индекс на вредност. Па тоа е малку различен од оној foreach, иако нови верзии на Го вклучите Javascript-се излегува цело време, па дури и овие јазични карактеристики се развива. И како настрана, JavaScript овие денови исто така може да се користи на сервер исто како PHP со користење на рамка наречена Node.js. Еден од CS50 е TFS, Кевин, води семинар за Node.js што е на располагање на cs50.net/seminars. Значи, ако сте љубопитни, знаете дека да го користите на серверот од страна на како добро, но тоа е прилично последните тренд, но моќен во тоа. Ова е малку различен. Ова е низа во JavaScript. И она што ќе те удри како различни наспроти C или PHP за најдобар? Постојат неколку брзи приказни може да се каже тука. Она што недостасува наспроти PHP? ПУБЛИКАТА: [нечујни]. Дејвид MALAN: Да? Жал ми е, велат повторно? ПУБЛИКАТА: Не прогласување типот на променлива. Дејвид MALAN: Ние не сме прогласување типот на променлива. Па всушност сосема како PHP, ние не сме пропишување на видовите на оваа променлива. Наместо тоа, ние сме повеќе генерички велејќи var за променлива. Ние немаме PHP е непријатност на знакот за долар, кој додека досадни да се тип, прави повеќе јасно дека нешто е променлива. Додека овде, ние сме вид на назад Пристап на C со само нарекувајќи променлива со името сакаме да го даде, како броеви. А исто така и како PHP, имаме квадратни загради за вредности во внатрешноста таа низа. Па променливи во JavaScript, исто така, може да изгледа вака. Забележи ова е стринг нарекува S, но слично имаат не е наведено дека тоа е стринг. Тука иако е карактеристика која не прави постојат во токму на ист начин во PHP, но малку сличен начин. Ова е објект во вклучите Javascript-. И предмети се вид на швајцарската армија Нож на податочна структура во која ќе да ги користите за било кој број на нештата. Еве, на пример, ние сме прогласување променлива наречена понуда. На видот на таа променлива е предмет. Можете да мислам на тоа како C struct дека има клучеви и вредности. Симбол е клучен. FB е вредност, очигледно на акции симбол. Запирка. Цената е уште еден клучен, а неговата вредност е очигледно со подвижна запирка, или број поопшто, во JavaScript, на 49,26 $. Па PHP не имаат - не сме виделе во PHP објекти доста вака, но ние го види аналоген, кој беше она? ПУБЛИКАТА: [нечујни]. Дејвид MALAN: асоцијативни низи. Па додека PHP има асоцијативни низи чија синтакса е секогаш малку па различни - видовме квадратни загради. Видовме чудни стрели симболи. Го вклучите Javascript-има објекти, но ова е главно на семантички разлики и различни синоним за сега. Сепак, како настрана, PHP, исто така има предмети на начин кој Java и други јазици имаат објекти во објектно-ориентираното програмирање. Но, ние ќе ги користат овие само за типови на податоци за сега. Објекти и асоцијативни низи. Оваа една може да го направи малку повеќе јасно. Еве зошто некој објект е корисно. Кога ќе сакаат да пријават студент, како Zamyla, ние може да всушност капсулирало така да се каже во внатрешноста на тој објект со помош кадрава загради само како пред целиот куп на клучеви и вредности тука. Имаме проект, куќа, и име за Zamyla, проследено со запирка како вообичаено на крајот. Долу тука, ова е малку различни, но исто така многу моќен овие денови. Еве низа, и знам дека поради има плоштад заградата до врвот и на плоштадот заграда на дното. И ова е низа на она што на податоци тип очигледно во вклучите Javascript-? Ова е низа од тоа изгледа како три објекти. И знам дека тоа е предмет само бидејќи на големите загради. И ќе забележите има отворени кадрава голема заграда, некои работи, во близина кадрава голема заграда, запирка, потоа некои повеќе, запирка, а потоа некои повеќе. Па тоа е три аргументи одделени со две запирки. Значи ова е низа од три објекти. И секоја од овие објекти се чини дека е студент или член на персоналот на некои вид, секоја со лична карта, куќа, и име. Но јас ова го нарече нешто наречен JSON - Го вклучите Javascript Цел Нотација. И ова е формат на податоци кои, всушност, е толку многу популарна и во мода овие денови дека ако напишете апликација која го користи Фејсбук API, Твитер API-то, навистина речиси некој API таму овие денови, вклучувајќи и некои од свој, CS50 е на податоци ќе се вратам не е во старата школа CSV формат. Бидејќи се потсетиме дека CSV е супер едноставен. Тоа е само колони одделени со запирки. JSON податоци ви дава повеќе метаподатоци. Тоа соработници клучна со секоја вредност, така тие не мора да се само да се претпостави дека колоната 0. е една вредност, колона е друго, колона две е друга. Се што е во објект JSON тука е вид на само-опис, бидејќи секој еден од имињата во оваа датотека има буквално името пред него како Цитираниот текст. Па ајде да ги разгледаме во неколку примери овде. Дозволете ми да одат во апаратот. И дозволете ми да одат во нашите vhost директориумот во јавноста. И дозволете ми да одат во Го вклучите Javascript директориум. И ајде да одиме напред и да се отворат dom-0.html, каде ДОМ само значи документ објектот модел. Тоа е дрво работи на кои Јас од порано. И дозволете ми да предложи следниве. Тука е веб страница, чија телото е прилично едноставна. Значи тука долу на дното, забележите Имам форма. Ние сме виделе оние пред. Таа има два влеза, од кои едната има Проект на името, од кои едниот има еден вид на достават, како и првата еден тип е текстот. Така што ова, всушност, звучи прилично едноставна. Ајде да одиме тука. Да се ​​вратиме на оваа страница тука. Ајде да одиме во локалниот компјутер, и да си одат во нашата JavaScript директориум, и да одат во ДОМ-0, и тука имаме оваа форма. Па тоа е очигледно сите оваа страница прави. Таа има името поле со на копчето Испрати. Но јас не одам да го користите PHP тука. Одам да стори сé што е клиентската страна така да се каже во JavaScript како што следи. Забележите дека јас сум навистина дадено името областа на овој влез единствен идентификатор, кој ќе всушност се ме спаси некое време во еден момент. И ќе забележите сум воведен уште еден таг во главата на мојата веб страница,  таг. Па тоа е во оваа смисла дека го вклучите Javascript-е на клиентот-страна програмски јазик. Во овој случај, само како CSS, јас сум се стави тоа директно во внатрешноста на мојот HTML. Но забележиш јас сум прогласена за функција која изгледа малку како PHP синтаксички, но тоа е, всушност, JavaScript, бидејќи повторно, тоа е клиент-страна во прелистувачот. И да се погоди што е ова се случува да се направи тоа, иако некои од синтаксата тука е нова. ПУБЛИКАТА: Велат здраво на кој. Дејвид MALAN: Тоа се случува да се каже здраво за секој кој посети оваа страница. Па како? Па известување, излегува во вклучите Javascript- има сигнал () функција. Ова е многу вид на тажен функција која навистина само има тенденција да се одело на нерви на корисниците. Тоа не е една навистина треба да го користите обично, но тоа е брз и валкан начин на кој вид на печатење нешто на графички кориснички интерфејс, како интернет пребарувач. Забележи дека имам стринг единечен наводник. Излезе дека за разлика од C, го вклучите Javascript- всушност може да го користите една наводници, и искрено тоа е само вид на стилски конвенцијата меѓу JavaScript програмерите да Користете единечен наводник. PHP, тие всушност имаат малку различно значење. Но, за сега, само знам дека тоа е единствената причина. На конвенцијата во вклучите Javascript-е често да се Користете единечен наводник, но ние би можеле да користат двојни наводници во двете места, како и. Па ова е интересно. Потсетиме последен пат дека имавме дека слика на екранот, кои можеа дрво каде што имаше на HTML јазол, и главата јазол, а телото јазол, а потоа некој текст. Но имаше една посебна јазол на самиот врв дека се јавив на документот. Па, излегува во JavaScript, било пат кога ќе се напише програма во вклучите Javascript- во прелистувачот, ќе имате пристап до посебна глобалната променлива. Слични во духот со superglobals PHP, ова се нарекува во сите мали документ. Тоа е како struct, но ова struct исто така има и функции во него. Па struct Ц само има податоци обично. Но објектот вклучите Javascript-како оваа технички, исто така, има функции, инаку позната како методи, во него. И можете да се јавите на функција во внатрешноста на овој објект буквално си го прави своето име, точка, а потоа името на функцијата, или повторно метод. Тоа е само синоним, навистина. И она што го прави ова функција направам? Можете да вид на се погоди од своето име. Земете елемент од проект. Значи ова се случува да пребарувате на веб страница, пребарување тоа дрво, во потрага по без оглед на јазол, АКА елемент, има единствен број на цитат unquote име. И тогаш што сум јас ќе направам? Одам да се добие вредноста внатрешноста на тој јазол во дрвото, и јас одам некако да се поздрави со тоа име. Па претпоставете, иако ние не сум видел оваа уште, она што го прават плус симболи значи тука и тука веројатно? Публика: CONCATENATE. Дејвид MALAN: CONCATENATE. Право, и овие се само вид на дизајн на одлуки луѓе направени пред неколку години. Во PHP, ќе CONCATENATE работи со точки. Во C, можете скокаат преку неколку карики и јавете функции како strcopy () или strcat () или други слични функции. Но во JavaScript, имате потреба при користење предности. Значи ова е само надоврзување три жици - Здраво, име, а потоа фантастичен точка. Значи, кога и зошто е оваа функција наречен иако? Па, претпоставете од HTML на дното. Зошто е поздрават () се нарекува, или кога? Очигледно, како најдобро можам да кажам, по поднесе, кога е поднесена оваа форма, Одам да се стори се што е внатрешноста на овие цитати. И посебно, јас ќе одам да се јавите поздрават () и потоа се врати лажни. Добро, ајде да видиме што на мрежата ефект тука е во прв план. Па да ми се оди напред и напишете во, да речеме, Лорен, Submit. Здраво Лорен. Ајде да видиме дали можеби ова беше само среќа имплементација. Не бе. Така, тоа е пишување од она што именува Јас всушност се стави таму. Но се забележи она што не се менува. URL-то е уште ДОМ-0.html. Нема register.php. Нема втора датотека. Нема акција атрибут. Па што е ова враќање лажни се претпоставува дека правиш? Зошто сум јас повикувајќи го поздрават () и потоа враќање лажни веројатно? Што нормално се случува кога ќе кликнете на Прати на образец што дури имаме виден во изминатата недела? ПУБЛИКАТА: [нечујни]. Дејвид MALAN: Тоа оди некаде, нели? Таа оди на некои целни URL. Но не сакам тоа да се случи тука. Сакам мојот веб страница да биде целосно динамичен како Gmail, каде што некогаш сте таму, ќе остане таму. URL-то не се менува на начин што укажува целата страница е претовар. Напротив, јас само сакам да се смени нешто како печатење нешто тука на екранот. Па нека ме исчисти овој до малку. Дозволете ми да се отвори не ДОМ-0, но дозволете ми да се отвори ДОМ-2. Само така сте виделе некои синтакса тука. Излезе дека она што ние едноставно не е користење на суровини вклучите Javascript-. Значи ова е навистина јазик Го вклучите Javascript-. Некои од вас можеби не знаат за библиотека наречена jQuery. Па jQuery не е исто нешто како го вклучите Javascript-. Тоа е само библиотека која навистина паметна дечко напиша и популаризира како дека речиси сите во светот сега користи jQuery кога користејќи JavaScript. И на прв поглед, искрено, тоа изгледа малку повеќе криптичната. Но ќе се најде, особено ако одите таму за вашиот конечниот проект со веб развој, ќе најдете дека овој чисти работите и ви заштедува доста неколку линии на код. Значи, ајде само се загледувам во колку оваа форма е работа. Се забележи она што никако не можев да се отстрани очигледно од мојот HTML? Нема на поднесе управувачот така да се каже. Нема атрибут. Затоа што знаете, она што Јас не навистина ми се допаѓа? Се чувствував како ние паѓаа во старите навики таму. Исто како што беше почнуваат да се чувствуваат невешт да се мешаат двете CSS со HTML, затоа што ти си вид на фрлање различни јазици низ целиот место, на сличен начин го направи ова почнете да се чувствувате како лош пат да одат надолу, каде што Јас сум ставање JavaScript код во внатрешноста на мојата HTML наместо факторинг тоа надвор. Значи тоа е поука тука. Во дом-2.html, Јас сум тоа факторинг надвор. И јас го правам работите малку поинаку. За сега, јас ќе одам да се бранува моите раце во она што ова навистина не под хауба. Но, само сега за сега се претпостави дека тој прв линија код во оваа библиотека наречен jQuery само значи кога документот е подготвен, направете го следново. Бидејќи на веб страници може да потрае некое време да се вчита. Може да биде на бавен интернет конекција, и тоа би можело да се врти и се врти, и конечно тоа е натоварен. Таа линија на кодот само вели почекајте додека целата страница е подготвена, документот е подготвена, пред извршување на овој код. И сега се забележи, ова е веројатно најкорисните прв земе од jQuery. Оваа линија тука е многу слични во духот на оваа многу подолго линија тука. Додека во сурова JavaScript код, постојат постои документ глобалната објект кој има функција наречена getElementById (), на луѓето кои пишуваше jQuery поедноставен дека за да речеме знакот за долар, а потоа внатрешноста на загради стави две понуди, а потоа стави хаш симбол проследено со единствен број што сакате да го дофати. Значи ова е еквивалент на document.getElementById. Во меѓувреме,. Поднесат само значи на поднесување на било која форма сте се однесуваат на на левата страна, се оди напред и изврши тоа. Но, ова е сега љубопитност премногу. Што е чудно за тоа што Сум Нагласени тука? Не само што е вид на синтаксички нови, таму е исто така нешто недостасува. Публика: Тоа е само наречен функција? Тоа не се вика алармирање? Дејвид MALAN: Да. Добро, па алармирање () е долу тука, за да биде фер. Но, не постои споменување на името, како што знаете, foo или нешто тука. И навистина, ова е една од карактеристиките на JavaScript тоа е сосема моќни, но, исто така, сосема ново. И PHP, всушност, ја има оваа, како и. Дозволете ми да оди напред и да прават нешто вистински брз. Дозволете ми да оди напред и да се стави ова овде. Дозволете ми да го направите тоа. Функција. Да ја наречеме оваа управувачот (). А управувачот функција така да се каже. Нешто што се справува со некои операција. Дозволете ми да се исчисти ми вовлекување. И стави ова овде. И го стави тоа овде. Да. OK. Па сега имам функција наречена управувачот () дека јас навистина не знам она што го прави уште. Тоа само уште има тие работи. Whoops. Зеде премногу. Ајде да го направите тоа. Сите во право. Жал. Сите во право. Дозволете ми да го направите тоа. OK. Дека изгледа убаво и директно напред сега. Дозволете ми да го направите тоа. Го направите тоа. И OK. Па сега, ајде да се стави ова овде. Нема повеќе програмирање на мува. OK. Па сега, ајде да се вратиме на каде што приказната започна. Претходно, јас реков дека оваа линија тука значи кога документот е подготвен, одете напред и да го направите тоа. Што сакам да направам? И конкретно, сакам да одам напред и да го направите следново. Изврши оваа линија код, а потоа она што сакам да направите е да се јавите на оваа функционира кога форма е поднесена. Сега тоа е она што е интересно. Ова не е самата функција. Информации Јас не сум ставање загради тука во вообичаен начин. Јас сум буквално поминува функција наречена управувачот () на друга функција наречен достават () како аргумент како иако тоа е како една променлива. И ова е една од карактеристиките на JavaScript, е функции се се навистина само објекти. Всушност, тие се навистина само променливи на некој вид. И ако името на функцијата е управувачот (), не постои причина не можам помине тоа во како аргумент тука. А тоа значи кога форма со проект на демо е поднесени, јавете се на оваа функција. Но, сега, ако јас го вратите сите на овој, зошто тогаш никако не можев можеби направи ова пред една момент? Па, ова е анонимен функција. Затоа што искрено, сфатив зошто сум јас пречеше да губите време за прогласување на функција наречена управувачот () само да се јавите го во едно и само едно место? Ако јас не треба на име, а јас не треба да се јавите тоа повеќе од едно место, ајде само спроведување на функција право, каде што им е потребно. И така го вклучите Javascript-и PHP поддршка што се нарекуваат анонимни функции кои дозволете ми да го стори токму тоа овде. Но, ние сме само гребење по површината. Ајде да се закачам со само неколку конечна примери овде. Ако одам во quote.php. Забележите дека ова е всушност PHP функција, програма PHP, дека сум го напишала дека очекува HTTP параметар се нарекува симбол, и јас може да помине во вредност како FB. И ако ние всушност се погледне на извор код, тоа е доведување во прашање бесплатен веб-сајт наречен Јаху финансии, исто како и п-сет седум, а тоа е враќање кон мене нешто очигледно формат познат е JSON - Го вклучите Javascript Цел Нотација. Тоа е само еден објект. Обрнете внимание на големите загради, наводници, на дебелото црево, и запирки. Сега меѓувреме, ова е прилично кул. Затоа што веројатно може да се користи за програмирање јазик да се генерираат URL- кои изгледаат како оваа динамички, нели? Можам да го промените ова на Google и да се вратам на Google цената на акциите на $ 1,017.55. Да видиме ако не можеме да ја користите оваа сега. Дозволете ми да одат на Ајакс-0 тука, што изгледа како следново. Тоа е само веб-сајт кој има форма со едно копче. Дозволете ми тука оди напред и да напишеш во YHOO за акции симбол на Јаху, кликнете Get Понуда, а сега забележите сум добил сигнал со 32,86. Дозволете ми, всушност, оди на познавач верзија на оваа страница, верзија две, и тип во да речеме Мајкрософт, MSFT. Добие Изрека. И сега забележите, нема алармирање. Забележите каде што вели цена да бидат определени? Таму е наједноставниот на примери кои загатки на она што Gchat, и Фејсбук Чет, и Gmail и други такви веб-сајтови се прават од страна, всушност, менување на веб-страница. Забележуваат тоа. Дозволете ми да ја превчитате страната. Дозволете ми да се отвори инспектор Хром. Дозволете ми да одат на елементи табот овде долу. Сега забележите ако јас зум во долу тука и отвори овој горе, забележите дека ова е мојот HTML ДОМ - мојот документ објектот модел. Ова е мојот HTML. Но сега забележите, иако тоа се случува да биде малку тешко да се види во двете места одеднаш, ако јас напишете FB до тука, да се види на дното на екранот само. Тоа е всушност менување на мојот HTML на мува. И таа го прави ова доста едноставно со правење нешто како ова. Ако јас се отвори Ајакс-2, забележите спроведување нешто како секси како дека, иако тоа е прилично грда, но како што е софистициран како што функционално, има некои HTML на дното. Но забележиш јас се користи да таг. Ние не сум користел ова порано, но ова е како, но тоа не сила сè што кон нова линија. Тоа едноставно го прави правоаголни регионот на иста линија суштина. Забележете дека јас го даде проект на цената. И излегува од страна на користење на истите JavaScript библиотека, имам функција наречен цитат () што се вика кога форма се поднесува. И она што го правам е ова. Јас сум за прогласување на променлива во вклучите Javascript- наречен рачно, заштеда на вредноста quote.php? симбол =. Со други зборови, јас сум почетокот да се подготви за HTTP барање, а потоа Јас сум надоврзување врз кои со плус без оглед на елементот со проект на симболот е, која се забележи е дека полето за текст право овде долу. Па како само имавме форми во минатото. А потоа излегува во jQuery, ако се јавам. Val (), кој повикува на val функција, вредност функција, која добива она што корисникот го внесе внатре А потоа сите на мрежниот сообраќај што се случува е тоа. $. GetJSON. И како настрана, знакот за долар е само стенографија нотација. Тоа е навистина jQuery.getJSON. Ме да JSON од овој рачно, и кога Барањето доаѓа назад, ова го нарекуваат функцијата и во како аргумент што се вратија од серверот. Значи со други зборови, ако јас се вратиме на пребарувач, и ќе се вратам да quote.php, она што мојот интернет пребарувач го прави е добивање ова парче на податоци. И кога ќе одам на оваа веб страна тука, известување, ако ние наместо да одат на мрежата табот и чистење, а потоа напишете во нешто како GOOG за Google и ќе добиете Цитат, забележите страница не се промени. Но HTTP барање е направен, и она што се врати тука, ако се погледне на одговор е целиот куп на JSON дека ние се пристапи конечно со оваа едноставна линија тука. Податоци е она што беше добивано од серверот. Цената е името на Клучот е гајле за него. Па data.price ми дава тоа. Сега во меѓувреме, и ова е последниот пример. Можете да го направите уште повеќе со оваа страница. Еден всушност, добро две. Ние може да го врати таг, ако се сеќавате ова. Тоа е да го вклучите Javascript. Ние можеме да го направите тоа. Многу возбудлив. Ќе им го оставиме тоа како cliffhanger. Но повеќе возбудливо, можете да се прават работите вака. Ако одам во Прецизни-1, што се испоставува дека Хром знае дека се наоѓаме во ширина должина 42,37. -71,10. Па има дури и повеќе има на ваше располагање. Но повеќе за тоа следната недела. Те видат понеделник.