[Powered by Google Translate] [Недеља 9] [Давид Ј. Малан - Универзитет Харвард] [Ово је ЦС50. - ЦС50.ТВ] У реду. Добродошли назад. Ово је ЦС50, и то је почетак седмице 9. Данас смо посебно фокусирана на дизајну, више не у контексту Ц али у контексту ПХП и мало СКЛ и мало ЈаваСцрипт-а, посебно према крају оба псет 7 и ваш коначни пројекат. У ствари, ако сте у том тренутку у свом завршном пројекту где је вероватно од сат времена пре вас барем почели да дају неке мисли до крајњег пројекту и ви размишљате желите да сарађујете са 1 или 2 друговима, Ако имате проблема са повезивањем са изјавио другове, слободно попуните образац на цс50.нет/партнерс/форм. То је само пита ко си, какав пројекат размишљате о томе, где живите само за логистичких разлога. А онда, ако желите да задржите на оку током наредне седмице или тако унакрсне УРЛ адресе тамо, тада можете видети само за читање верзију Гоогле доц у којој смо прикупљање такве информације. Дакле, ако желите да радите са неким, по свим средствима слободно да допру до људи преко тог механизма. Али већина људи раде соло. То је потпуно у реду. Дакле, не осећају да је то на било који начин обавезне. У петак је био само ја и неколико тима овде, празно позориште за највећи део. Ту су 3 туристи седе тамо горе, тако да је мало незгодно. Оно што смо говорили о било базе података и разговарали смо о псет 7 мало. А ако се није десило да се ухватим да на видео снимку још увек, то је у реду. Ја ћу покушати да дефинишу све услове које бисмо иначе узимамо здраво за готово заснован на предавању у петак. Али данас ћемо покушати да вас до тачке да не само у стању да уради овако нешто псет 7 али стварно разумевање шта се дешава испод хаубе, посебно неке од апстракције које смо ставили у месту у фунцтионс.пхп фајл да своје животе мало лакше, али тако да на крају разумемо тако да када се тренинг точкови отпасти у року од неколико недеља и даље можете да преживи у стварном свету и да те ствари без икаквог ЦС50 оквира испод вас. Ова $ _СЕССИОН, за оне од вас који су упознати или ко је већ ухватио видео у петак, шта сједница урадимо у ПХП веб апликације засноване? Ово је суперглобал променљива, што значи да је слично у духу на ГЕТ и ПОСТ и неколико других, али шта је ово корисно за? Шта је СЕДНИЦА користи? Да. [Ученик] Логгинг ин Извини? [Ученик] Пријава за Логгинг ин Заиста. У псет 7 користимо овој сесији суперглобал да олакша улогују А шта је лепо о овом суперглобал је да је асоцијативног низа. Асоцијативно низ, опозив, само низ али чији индекси више не морају да буду бројеви као 012. Они могу да буду бројеви или они могу бити и жице. И тако ако сте заронио у псет 7 ипак, можда се сећате да смо чување кључну зове ИД Унутрашњост овог асоцијативног низа чија је вредност нешто као 123 - без обзира на тренутно пријављени ИД корисника је. Мотивација за ово је да чак и након што је корисник посетио лоцалхост или мој сајт уопште, а онда сте се пријавили, чак и ако они не кликнете на везу или се вратите на мој сајт за 5 минута или чак сат времена или чак дана, али они напусте њихов прозор прегледача отворен, преко овог суперглобал могу да се сетим да су пријављени Другим речима, то ми омогућава да сачувате нешто дугорочно ништа желим о кориснику. И можете мислити о томе заиста као инкарнацији за куповину. Места попут Амазона очигледно да сте ставили ствари у корпи, али ХТТП протокол који напаја Вебом, лице без држављанства у смислу да када посетите неки веб сајт, за највећи део немате неку сталну везу са мрежом између вашег претраживача и сервера. Чим сте преузели ХТМЛ и ЈПЕГ и ГИФ сличице и све то, веза иде даље и имате само један примерак ХТМЛ и ситница са сервера. Али ако сервер жели да запамтите нешто о вама, терет је на серверу да заиста сними ту информацију. И тако ти програмер који имају контролу над сервером можете ставити највише шта желите унутар овог суперглобал асоцијативне низу и то ће бити следећи пут корисник врати, да ли је записник или касније чак дана, осим ако су затворили свој прозор прегледача, на којој тачки СЕДНИЦА нестаје. Дакле, то је пролазна складиштење, то је не-упорни, и то је требало да оде чим корисник затвори свој бровсер - не само да је картица, често читав претраживач, чиме ефективно логовања корисника напоље. Па како је ово заиста спроводи? Хајде да брзо погледамо једноставан пример смо гледали у петак. За оне који нису упознати, то је једноставно као ово. Ово је веб страница чија је једина сврха у животу је да ми кажеш колико пута сам посетио ову страницу. Ово је први пут овде у понедељак да сам га посетио, тако пише 0 пута. Али ако почнем претовара ову страницу, пише 1 пут, 2, 3, 4, 5, и то ће на крају само наставите бројање горе, горе, горе, горе, горе за сваки пут сам заправо дугме Релоад на њему. Па како је ово ради? Пусти ме унутра овог фајла зове цоунтер.пхп. Горњи део је све плаво коментаре, али занимљив део је овде. На линији 13 зовемо ову функцију сессион_старт, и то је буквално све што треба да урадите ако желите да имате приступ да ова посебна суперглобал зове $ _СЕССИОН. То га чини све могуће, па ћемо видети у једном тренутку како је то уопште могуће. У реду 16 најаве шта радим. Ако је кључ, који се зове контра - другим речима, вредност индекса - "контра" постоји унутар овог низа назива СЕДНИЦА, шта онда радим са њим у линији испод? Шта је линија 18 ради? [Нечујан ученик одговор] Шта је то? [Ученик] Чување вредност. Добро. То је чување вредности који је на седници сада у новој локалној привремене променљиве, $ Контра у свим малим. Приметимо да ПХП се већ помало лењ овде. Обавештење немамо никакву помињање инт или плутају или параметар, или било шта слично томе јер ПХП је слабо откуцао, при чему не морате да одредите тип променљиве, и у овом случају овде нисам сам ни објавио још. Ја сам га проглашава унутар ових заграда и за разлику од Ц, то је заправо добро. Без обзира колико дубоко угнездио декларацију променљиве у ПХП-у - Унутрашњост коврџавом браце, унутар коврџавом браце и слично - да ће у том моменту постоје за остатак програма, за боље или на горе. Тако да одмах постаје глобална чим га дефинишу као ми овде радимо. У супротном, ако не мисле да постоји нешто у седници суперглобал, Ја сам очигледно иницијализација ову променљиву бројач на 0, тиме само под претпоставком корисник никада није био овде раније. И онда, наравно, увецава контра како? Ја ажурирање вредност која је унутар овог низа асоцијативне постављајући га једнака без обзира на контра ис цуррентли + 1. Ако сам дођите овде да ХТМЛ странице, то је заправо прилично једноставна. Све што имам у телу ове странице је: "Ви сте посетили овај сајт, тако-и-тако времена." А ово је ПХП конструкт. Ако то урадите <=, то је еквивалент ономе што ефикасно функционишу? Заиста је еквивалент нечему као што је инт, које смо видели много пута у Ц, иако је можда већ знате из спецификације у псет 7, принт је такође функција која управо штампа нешто, она заправо не користите кодове формата, а ви у ствари можете рећи одјек као добро. Они су сви икада тако нешто другачија, иако је нето ефекат је на крају исти. Дакле, ово употреба знак једнакости је само нека врста елегантан начин да то ураде више језгровито него што би иначе моћи. Тако да је све овај сајт ради. Он исписује вредност шалтеру. Како се све ово стварно дешава? Можда се сећате недељу или тако смо почели гледа испод хаубе како веб страница ради користећи ову картицу инспектора. Цхроме има ово, како у Мац верзији, Виндовс верзију, па чак и Линук верзије, и Фирефок и ИЕ имају сличне механизме којима имате ову уграђену у дебагер унутар претраживача. Хајде да погледамо на следећем. Имамо овде гомилу картица, и подсетити да је један крајње лево Елементи, и без обзира на то колико је годавфул ХТМЛ и ЈаваСцрипт је у страну, Подсећамо да са језичком Елементс можете заправо хијерархијски навигацију ХТМЛ и лепо и уредно. Дакле, ако покушавате да сазнате са сајта као Гоогле или Фацебоок или стварно било који веб сајт, схватите да сте вероватно боље гледа изворног кода на овај начин, уместо да гледате сировог извор, што може да буде хаос, као што смо видели, посебно на лицу Гоогле. Дакле, ако сам уместо тога кликните на Нетворк картици овде, хајде да видимо шта се дешава када посетите ову страницу. Прво дозволите ми да разбистрим кеш. Ја ћу да одем у подешавања у Цхроме и онда идите на историју а затим Обриши све податке прегледања. Можда се користи да радиш ово за друге сврхе, [смех] али када је у питању развоју сајтова, то је заправо корисно - Ако се смејете знате. [Смех] То је заправо веома корисна када се развијају сајтове, јер реалност је ствари попут колачића и ствари попут кешираних ХТМЛ датотеке, кеширане фајлове ЈаваСцрипт заиста могу постати велика главобоља, јер ако из било ког разлога претраживач одлучи да кешира неку датотеку, а ипак сте направили измене у тај фајл на серверу али прегледач није стварно схватио да је фајл измењен па заправо не да га поново преузели чак и када кликнете на дугме Релоад, један од најбољих начина да се поуздан Само будите сигурни кривица није са вашег кода, је са понашањем претраживача, је да иде овде у вашем бровсеру и само обрисали целу историју, тако да нема забуне. И онда ако заиста желите да будете параноични, затворите прегледач, то поново, а затим се уверите да све ради као што је очекивано. Дакле укратко, брисање кеша је добро када се ради развој. Дакле, овде имамо Нетворк картицу. Раније сам посетио сајт 9 пута, али дозволите ми да иде напред сада и кликните Релоад. И ја сам назад до 0. Хајде да видимо како ствари је да је ова сједница суперглобал се спроводи. Идем да кликнете на 1 ХТТП захтев који је направио, а ово за отклањање грешака прозор ми омогућава да погледате унутар тога. Овде видим само одговор од сервера, што није интересантно. Видела сам то у било ком броју различитих начина. Али оно што је интересантно технички су заглавља. Ако ја помицати овде и фокусирати се на захтев заглавља и кликните извор поглед, шта ћу да видим буквално ХТТП да је само отишао из мог претраживача на серверу, ГЕТ бити оперативна реч и онда / цоунтер.пхп Бити име датотеке, ХТТП/1.1 само бити верзија ХТТП да мој прегледач користи. Ова линија је овде мали подсетник из претраживача на серверу оно име сервера да жели да разговара. А онда остатак је понекад занимљиво, али нису релевантна сада. Ово је само врста радозналости. Цриптиц иако је ово стринг, сваки пут ваш прегледач посети сајт је информисање серверу који бровсер користите и шта оперативни систем који користите и коју верзију истог. Дакле, ако сте се икада питали како сајтове као што су ЦНН и ситница Знам шта су проценти су Мац кориснике на Веб, ПЦ корисницима, ИЕ корисници, Цхроме корисника и слично, то је зато што све наше претраживача говоре сваки сајт тамо шта смо. То не мора нужно да садржи личне податке, али ипак каже шта је ваш сервер ИП адресу и који бровсер и ОС који користите. Дакле, то је место где је ова информација. Али оно што је још занимљиво сада када је у питању ова седница је одговор заглавља. Дозволите ми да кликнете видите извор поред одговора. Оно што је интересантно је овде неколико ствари. 1, имамо назад статусни код 200. Ми никада не виде ову статусни код, јер то значи да је све добро. То значи буквално у реду за разлику од нешто друго. Шта је број понекад видимо да је то лоше? [Ученик] 404. 404, датотека није пронађена, 403 можда се самосаплитања већ, што је забрањено, што значи да је заборавио да цхмод нешто, највероватније. И ту је гомила других. Овде доле, ово је мало луд. Ја стварно само написао овај фајл пре неколико минута тако да је лепљењем у гедит. Зашто је ова страница истиче у 1981 пре него што је стварно био Веб? Шта се тамо дешава? [Нечујан ученик одговора] временска ознака. Али зашто? То је донекле произвољан, али то је заправо корисно. Шта ово говори мом бровсеру је ово ПХП фајл који сте управо тражили већ истекао. У ствари, то је истекао пре 30 година. Али шта то заиста значи? То само значи да следећи пут када корисник посети ову страницу, било путем поновног утовара или куцајући УРЛ у адресно поље, будите сигурни да и донесе нову копију. То је нека врста пример кеш разбијам, глупа реч која значи само покушава да обесхрабри прегледаче из заправо кеширање ХТМЛ-а који је био послат са сервера тако да се не случајно ударио релоад и онда видети исту верзију датотеке. Ви заправо желите да сервер пошаље нову копију. Дакле, чињеница да је 1981 само значи да је то оно што је апарат бира као произвољне датум у прошлости. Али стварно сочна линија је сада ово један. Чак и пре него 50 што си вероватно слабо упознати са колачићима. Од сада, нарочито међу онима мање удобна, или између, шта је колачић у вашем разумевању сада иако смо о томе да ваше разумевање више техничке? Шта је колачић? Да. [Ученик] Информације о кориснику, као да они пишу своје корисничко име или тако нешто. Добро. То је информација о кориснику, без обзира да ли су они унели у свом корисничком имену већ. Колачићи су начин којим серверима могу да се сетим нешто о кориснику. А шта колачић заиста јесте текст фајл или неки низ бајтова који је посадио на серверу унутар вашег претраживача, и унутар тог фајла, или међу онима бајта је нека врста идентификатора. Можда је буквално ваше корисничко име, али чешће је то нешто више гробни изглед овако ствари овде - бо8дал3цт и тако даље - то заиста велики алфанумерички гудачки то је заиста само треба да буде јединствени идентификатор за вас. Или можете мислити о томе као врсти виртуелне руке печатом. Ако одете на неки клуб или забавни парк, да се сетите да сте заправо платили и отишла, они ставили мало црвену налепницу на руци неке врсте, и да подсећа људе на шалтеру да сте већ платили и можете доћи и отићи, као што молим. Колачићи су мали сличне у духу тога. Први пут сам посетио овај сајт, као што сам урадио након чишћења мој кеш, веб сервер, апарат у овом случају, стави печат на мојој руци чије је име ПХПСЕССИД, ИД сесије, чија вредност је ово заиста дуго алфанумерички ниска. Тако да је сад некако украшен на мојој руци, тако да следећи пут сам погодио релоад или ручно посетите ову адресу у прегледачу, мој прегледач по дефиницији ХТТП ће представити печат руке опет и опет и опет. Дакле, иако је сервер не мора знати ко сам, они барем знају да сам ја исто корисник или барем, тачније исти претраживач. И тако је на крају како СЕДНИЦА суперглобал се спроводи. Сервер нема појма ко си, када си поново сајт за други или трећи пут ако представити руку печат. И чим представити ту руку печат, веб сервер суштински иде у малу базу сопственог и провере, у реду, само сам видела ручну печат корисника бо8дал3цт и тако даље. Дозволите ми да видим какве информације програмер је ускладиштена Унутрашњост суперглобал о овом кориснику, и онда нека ми се уверите да су подаци поново унутар ЗАСЕДАЊА суперглобал тако да програмер може поново приступити тим подацима чак и ако је постављена пре неколико минута или сати. Дакле, другим речима, кекс, који је добио лошу репутацију због неког времена због несигурности у бровсер и они заиста могу да крше наше приватност и све ово, они заправо имају велику корисност, јер без њих стално би се пријавити на свакој Фацебоок страници коју посетите или сваки Гмаил емаил читате, ако прегледач није имала неки начин сећања да сте већ потврђен. Дакле, на овај начин су колачићи шаљу и назад преко жице. Други куриозитет о колачићима, поготово овде, је да је то потпуно у чистог текста. Нема енкрипције се овде уопште, и заиста сам користећи ХТТП у овом тренутку. Један од наших омиљених тренутака у ЦС50, који је сада пре 2 године, године у време алат зове Фиресхееп изашао. Ово је био слободан комад софтвера који је направио безбедности истраживач као позив на буђење за заједницу да кажу колико атроциоусли имплементиран извесне аутентичности механизми на Интернету били. Дакле, за неко време, Фацебоок је скоро у потпуности преко ХТТП, ХТТПС нема. А чак и ако немате појма колико крипто ради, С је сигурно па то значи да постоји бар нека енкрипција укључена. Фацебоок је коришћен за шифровање корисничких имена и лозинки, али чим си погледао на вашем чачка или ваше поруке или ваш Невс Феед, све што је криптовано. Тако је било до пре само Гмаил годину или 2. Сваки пут када се пријавите, да, они су користили сигурну енкрипцију, али након тога нису урадили. А зашто би то могло бити? Зашто једноставно не користе криптографију све време у употреби случајевима као што је овај? Шта је то? Мислим да сам чуо нешто. [Ученик] брзина. Брзина, зар не? Постоје начини око овога. Али, ако само мало размислите логично, ако шифрујете нешто, морате да урадите барем мало више посла. У псет 2 када спроводи Цезара или Вигенере или чак Црацк, Управо штампа стринг је релативно лако. Шифровање и онда штампа минимално низ захтева мало више посла.  За супер популарних сајтова као што су Гоогле и Фацебоок, ако морате да урадите више посла за сваког корисника за сваку веб страницу коју посетите, да је само потребно више ЦПУ времена. А ако вам је потребно више ЦПУ времена, можда ће бити потребно више сервера, што значи да можда треба више новца. И тако већ годинама ово само стварно није најбоља пракса. Људи би користе ССЛ енкрипцију само када им је потребно да. Али испоставило се, и као овај момак са Фиресхееп је супер јасан, кад ви момци који су тренутно на Фацебоок одмах - Из радозналости, да видимо да ли ће признам горе. Ако сте на Фацебооку сада у некој картици, чак и ако то није у првом плану, је Ваш УРЛ ХТТП или ХТТПС? [Више] студенти С. С? [Смех] Ок. Било ХТТП? Само 1? Ок. Дакле, све нас може хаковати Фацебоок налог тог момка сада. За највећи део то је постало подразумевано укључен, бар у неким сајтовима. И скратим причу, ако је ваш саобраћај веб није кодиран, не само ХТМЛ иде напред и назад преко ВиФис некодиране, тако да ствари као што су цоокиес иде напред и назад кроз ваздух без било каквог облика енкрипције. Дакле, ако имате само мало програмирања памет или мало Гооглинг вештине наћи слободан софтвер који ради ово, све што треба да урадите је да седи у Старбакс или седите на аеродрому где постоји генерално је некодиране ВиФи и само гледам по кључним речима као што су Сет-Цоокие: или ПХПСЕССИД јер ако имате технички потковани да само гледају ВиФи за све битова који протока кроз ваздух за овај образац, онда могу да кажем да лик је ПХПСЕССИД се дешава да се бо8дал и тако даље. А онда опет, ако си довољно технички потковани или имају одговарајући алат, онда можете само реконфигурацију свој прегледач да почне приказујући ту руку печат на Фацебоок.цом и Фацебоок само ће претпоставити да сте тај момак јер сви они знају не ко си, али да имате овај јединствени идентификатор. Дакле, ако сте украли тај јединствени идентификатор и представити га на веб сервер, као своје, они су само ћу да вам покажем невсфеед те особе Или да особе поруке или чачка. И ја бих сада Гоогле како да активирате ХТТПС фор Фацебоок можда. Али заиста је тако једноставно. И тако Фацебоок и Гоогле и као добио стварно добар у томе, али пази све више за све локације које посећујете које не користе ХТТП и имају неку врсту осетљивих информација о њима, да ли је то финансијски или лични или слично. Ако они не користе ово, сасвим је могуће да колачићи као ово може бити веома лако украдена и онда фалсификовао, а то је управо оно што Фиресхееп урадио. Ниси морао да буде програмер. Све што је имао да уради је да интернет конекција, преузети овај бесплатан алат, и шта ће учинити је да се пријавите и онда ће вам показати Фацебоок имена за свако у Сандерса, у овом конкретном демонстрацијама, око тебе и све што је имао да урадите је кликнете на своје име и софтвер аутоматизован процес од њушка тај колачић, представљајући га као своје Фацебоок, и, воила, ви сте пријављени Дакле, ово је још једна од оних "не ради то" званично. Ако имате сопствену кућну мрежу и желите да пртљати, свим средствима, али схватите ово не пређе линију на универзитетском окружењу. Али циљ овде је заиста да нагласим не како то да урадите али како да се брани од оваквих ствари. А тривијално решење овде, иако је и сама је погрешна, је да заиста смањи коришћење свих сајтова који се не користе ХТТПС стално. Дакле, сајтови као што су Фацебоок и Гоогле имају све квадратиће где можете одлучити на овакве ствари, а банке су имале ово година из сличних разлога. Дакле, само мало од страха фактор ако можемо. Али то је у кратким цртама. Тако је сервер памти ко си. И чим они могу сетити ко си, они могу да се сетим о вама да програмер је унутра чува овог специјалног суперглобал зове $ _СЕССИОН. А за псет 7 смо га користи тривијално само да запамтите једну инт, наиме јединствени ИД корисника који је пријављен, тако да смо знали да смо тамо били пре. Сва питања затим на седницама или колачиће или као? Фиресхееп не ради, као и више, и морате да ставите рачунар у посебном режиму промискуитетног тако да заправо слушају саобраћај поред себе. Дакле, ако сте тренутно преузимање Фиресхееп, то схватају није баш тако лако као што је некада био да покаже. У реду. И то не уради у Сандерс. Уради то код куће. Базе података. Једна од ствари које смо радили у псет 7 врло смишљено године смо вам сто узорак базе података за кориснике који има неке корисничке личне карте, нека корисничка имена, и ту неке шифроване лозинке. И као што ћете видети, ако већ нисте, ти ћеш морати да се промени у табели мало. Ти ћеш морати да додате мало кеш да сваки од корисника у тој табели, а ти ћеш морати да додате још једну табелу историје, портфолији табеле, или можда зову нешто друго. Али у смислу размишљања о томе како да то урадите, хајде да отворимо ову алатку које смо користили у петак, али ако непознатим, апарат долази са алатом зове пхпМиАдмин који је случајно написан у ПХП-у, али је његова сврха у животу, након што сам се пријавим овде као јхарвард са црвац, јесте да ми дају усер-фриендли начин посматрања и мењам базу података. База да сам ради на апарату се зове МиСКЛ. Ово је веома популаран, и то је бесплатан опен соурце базе података која је чудесно једноставан за коришћење, посебно са предње завршава овако. Оно што овај алат омогућава да урадим, на пример, у џаку око столова. Пусти ме само напред и урадите то. У петак смо направили табелу под називом студенти то је било супер једноставно. Имао је 3 колоне - ИД, име и е-пошту - и ручно убаци неколико редова као Давид и Мајк у овом конкретном примеру. Узмимо ово мало даље, и претпоставимо да желимо да се сетим више него само име и е-маил о кориснику. Дозволите ми да кликнете структуру овде на врху. И опет, псет вас води кроз кораке прописане овде, тако да не брините ако нешто од тога је мало брза. Онда ћу да кликнете овде. Идем да додате мало више колона после емаил јер желим да додам нешто слично кући. Заборавио сам да сними кућу студента. Пусти ме на дугме Иди, и сада имамо ову форму која је, нажалост, мало широка слева на десно, али ја ћу да позовем име овог поља куће, и онда тип И сада морају да изаберу. Дакле, хајде да кратак разговор о различитим типовима у МиСКЛ јер док ПХП је слабо откуцан и то некако игра брзо и губе са врстама, у бази података, посебно је важно да се супер заправо користити куцање у своју корист јер је један од ствари МиСКЛ и остале базе мотора може да учини за вас се обезбедило да се не стави лажне податке у бази података. То је врста слободног грешке провере на располагању. За кућу, ми очигледно не желимо да то буде инт, који је 32-битна вредност у МиСКЛ. Урадили смо разговарамо на кратко петак око варцхар, која се залаже за променљиве дужине цхар. Шта је ово? Ово вам омогућава да одредите да ли желите да то буде низ неке врсте. Ви стварно не знате унапред колико дуго је он, тако да произвољно рећи кућа име може да буде 255 карактера, али сте могли ићи са 32, 64 - заиста било који број. Али предност коришћења ВАРЦХАР преко поља зове знак је шта? Само интуитивно ако сам доле помицати овде приметити да је карактер и ту је варцхар. Варцхар је променљиве дужине знак, знак је фиксне дужине знак. Дакле, само на основу те дефиниције, која је предност или мана сваке од ових? Другим речима, ко брине о разлици, или зашто би требало да занима? Да. [Ученик] ВАРЦХАР има већу флексибилност, али заузима више меморије. Добро. Варцхар заузима више - Хајде да видимо. Нисам сигуран да ли сам чуо то право. Може ли се рећи да још једном? [Ученик] Ја сам рекао варцхар вероватно има већу флексибилност, али заузима више меморије. Занимљиво. Ок. Варцхар вероватно вам даје већу флексибилност, али заузима више меморије. Ово последње није нужно тачно. То зависи од контекста, али хајде да се вратимо на то. [Нечујан ученик одговор] Управо тако. То је заправо случај да ће знак обично користе више меморије јер знак, као у Цу, је као стринг, то је низ знакова. Дакле, ако сте рецимо цхар поље дужине 255, База података је буквално ће вам дати 255 знакова. И ако кућа завршава се Матхер и 6 карактера укупно, губите више од 200 знакова. Дакле варцхар ефикасно користи само онолико знакова колико је потребно до максималног износа. Али цена коју плаћате је заправо представа, потенцијално. Ако знате унапред да све ваше жице ће бити 8 карактера - На пример, претпоставимо да вам је потребна лозинке дужине 8 - наопако коришћења цхар поље поводом, мада не често, је да наведете фиксну дужину за тако нешто лозинку јер сада база података може бити још паметнија. Ако се зна да је сваки цхар поље, сваки стринг у колони је иста дужина, да се врати функцију случајног приступа. Можете скочити око међу различитим пољима цхар у табели базе података јер мисле базе података, као редова и колона. Дакле, ако сваки од низова је иста дужина, Ви знате да је прва је у бајту 0, следећи је у бајту 8 а онда 16 и онда 24 и тако даље. Дакле, ако су сви критеријуми су исте дужине, можете поскакивање много ефикасније. Тако да може да буде предност у погледу перформанси, али обично немате луксуз знајући унапред, па варцхар је пут којим треба ићи. Ево још један детаљ који још Фацебоок налетео на крају. Интс су велики, а ми смо некако да их користе по дефаулту било које време желимо број, али то је само 32 бита. И иако Фацебоок не баш сада имају 4 милијарде корисника, Дефинитивно има неких људи тамо са више налога или рачуни који су отворени, а затим затворен, па Фацебоок сама верујем пре неколико година имала за транзицију из инт да, као што се достојно зове, бигинт, што је само 64 бита уместо. Дакле, ово је такође одлука о дизајну. Ти би невероватно срећни ако ваш коначни пројекат окреће покретање, је 4 милијарде и 1 корисника, дати или узети, у ком случају коришћења Интс можда мало кратковида. Али у стварности, ваша табела корисници вероватно у реду са Интс. Али за тако нешто псет 7, као и твој историје табели, можда имате хиљаде, милиони корисника уколико еволуирају у етраде.цом. Дакле, док ви можда имате више од 4 милијарде корисника, ти корисници имате можда имају више од 4 милијарде трансакција током времена - купује и продаје, а ствари у њиховој историји. Дакле, ако ти предвидети - опет, то су добри проблеми имају ако имате оволико податке - ако ти предвидети податке премашују величину инт, иде са нечим као бигинт је правац није довољно често усвојена од стране дизајнера јер људи цифра која се неће бити проблема, али је ово лако изабрати нешто веће од тога. Децимални смо коришћења у псет 7, који одређује фиксну прецизност тако да можете да избегнете проблеме који укључују Флоатс и дубл и реалних бројева и као. А онда овде има неких других области. Ми ћемо махати наше руке на њих у извесној мери. Али датуми, време сви имају прописану формат у МиСКЛ, и предност чување датума, као датума и не варцхарс значи да база стварно их форматирате у различитим форматима, да ли САД формат или Европски формат, или слично - али ви то желите - много ефикасније него што би то били само неки генеричке варцхар. А онда ту је нека друга бинарна, варбинари, грудвице. Ово су бинарни велики објекти, а такође можете сачувати бинарних података као и геометријских података у бази података. Али за нас, ми ћемо обично стало Интс и варцхарс и слично. Да завршим овај пример са куће. Кућа ћу произвољно рећи ће бити 255 знакова. Онда дефаулт вредност нисмо могли да урадимо ово. Могли по дефаулту стави све у Матхер кући, на пример. Тако бисмо могли да наведете да база података треба да обезбеди да увек неко има неку вредност. Али ја ћу оставити то бити. У ствари, за људе који живе ван кампуса, а не у кући, можда сам стварно желео да прецизира да подразумевана вредност за кућу је НУЛЛ и онда морам да проверим ову кутију и рећи базу података да је у реду ако је корисник кућа је НУЛЛ. Опет, ово је још један одбрамбени механизам можете ставити на место тако да не морате чак ни да га стави у ПХП коду нужно. База података ће обезбедити да ствари или нису НУЛЛ. И онда на крају, атрибути. Ниједан од њих су заиста релевантни. Бинарни, унсигнед - нико од оних који су релевантни за варцхар. Индекс. Да ли неко зна или запамти или имају погоди као шта индекс за нешто кући? Ово је, такође, у ствари важно и релативно лако дизајн одлука. За оне који још нису видели, у петак смо кратко разговарали о примарним кључевима. У табели базе података, примарни кључ поље или колона која јединствено идентификује редове у табели. Дакле, у тренутној табели имамо личне карте, имамо имена и е-пошту. Која од њих је најбољи кандидат да буде примарни кључ, чија је улога да идентификује редове? Вероватно ИД. Свакако, ми смо такође може користити оно иако? Можда бисте могли да користите е-маил, јер у теорији је то јединствена ако људи деле емаил налоге. Али реалност је да ако користите нумеричку ИД као 1234, то је само 32 бита, а е-маил адреса може да буде оволико бајтова или оволико бајтова. Дакле, у погледу ефикасности за јединствених идентификатора, она тежи да буде добра пракса само да користи инт чак и ако имате неку ниску кандидата који аргументовано могао користити. За тако нешто кући, то не би требало да буде примарни кључ јер онда само 1 особа могла да живи у Матхер и 1 лице у Цурриер и слично. Слично томе, ово не би требало да буде јединствен. Разлика између примарне и јединствен је да у случају наше тренутне табеле, ИД ће бити примарни, али е није примарна за разлога управо поменули - перформансе - али то ипак треба да буде јединствен. Дакле, још увек можете применити јединственост без да је захтев да је супер важна основна делатност. Али ово је веома корисно: Индекс. Ако знате унапред за свој коначни пројекат за псет 7, или уопште, да је ова област кућа ће бити нешто што тражи на парцели користи за избор кључних речи или нешто друго, онда превентивно могу да кажем базу да ради своју магију и уверите се да она ствара у меморији било фенси структуре података неопходно да убрза претраге засноване на кући. Можда ће користити хеш табелу, можда ће користити повезану листу. У стварности, она тежи да се користи дрво, често структура назива Б-стабло - Не бинарно стабло, али Б-дрво - што је веома широка дрво да сте могли видети у класи као што ЦС124, структуре података класе. Али укратко, не морате да бринете о томе да приликом коришћења паметне базе података софтвера. Можете само да кажем, "Индекс ову област, тако да можете да претражујете на то ефикасније." Ако оставите овај офф и покушајте да пронађете све у бази података који живи у Матхер, она ће припасти у линеарном претрагу. А ако имаш 6.000 недипломираних све који живе у некој кући, ћеш да претражите целу табелу да пронађе Матхеритес, а ако ти кажеш Индекс, надамо се да ће бити нешто близу логаритамском претрагу да пронађе оне врсте студената. Ово је само слободан функција за укључивање, иако не долази по цени од око износа простора. На крају, ауто-прираст, ово АИ поље, што само значи ако је инт а ви не желите да се брину да га повећате себе сваки пут када је нови корисник, проверите да и сваки корисник који буде убачена ће аутоматски добити нову личну карту. Идемо на дугме Сачувај, а сада хајде да нађемо ману са овим дизајном. Ако одем у Бровсе, приметице да су Мајк и моја кућа је НУЛЛ. Ја могу да користе пхпМиАдмин за уређивање ручно. Могу да идем овде и упишите Матхер и затим притисните Ентер, и сада приметити сто је другачија. Али приметио сам могао да урадим нешто друго, као добро. Давидов ИД је 1, па опет пхпМиАдмин је само административна алатка; ово није нешто што ваши корисници ће икад видети. Дакле, ако сам уместо тога изаберите СКЛ картицу до врха - и опет, псет 7 ће вас упознати са више од ових питања - Ја ручно да извршава СКЛ структурирану команду Куери Лангуаге УПДАТЕ корисници СЕТ кућу = 'Пфохо' ВХЕРЕ ид = 1. Ове СКЛ упити су лепо довољно читљиве слева на десно. Ажурирање корисника табелу, поставите поље зове кућа Пфохо где је корисников ИД је 1. Или чак сам могао да урадим, где е = 'малан@харвард.еду'. Докле год то јединствено ме идентификује, који ће радити као добро. Али ИД тенденцију да буде већи учинак, па хајде да то урадимо. Идемо кликните на Го. Ок, лецтуре.усерс не постоји. Шта је моја грешка? Шта је сто заправо зове овде? То се зове студенти само зато што је то оно што смо урадили овде у горњем левом углу. То се зове студенти, а не корисника. Дакле, кликните сад Го. 1 ред погођени. Упит је трајала 0,01 секунди. Ако сам дугме Бровсе сада, сада Малан животе у Пфохо. Дакле, то је још један укус СКЛ, али псет ће вас провести кроз нешто више од тога. Ту је глупа одлука, већ сам овде направио. Ја бих рекао да је ово дизајн базе података је неефикасна јер више људи додају у табелу студената, више од нас почнем додајући више од ТФС почнем додаје ћемо почети да видим шта вишка запослених у овој табели? Да. [Ученик] Видевши да је код студената, ми користимо исти [нечујан] Исти - Тачно, тачно. Дакле, ако 400 људи живи у Матхер, дати или узети, на крају овај сто ће имати 400 редове који кажу "Матхер", "Матхер," "Матхер", "Матхер", "Матхер". Губимо свих ових бајтова, и тамо је пар такеаваис. 1, тамо је луда кутак случај где ако неко плати много новца и преименује Матхер, сада морамо да променимо наше целу табелу базе података. То се неће десити да често, иако Пфохо је једном назвао Северна кућа пре 15 година, па се дешава. Али то није све што убедљив. Више убедљив од угла случају као да од потребе да ажурирате податке у ринфузи за базе података зашто складиштење Матхер опет и опет и опет и опет? То је много карактера, 6 карактера. Да не радимо још боље од тога, посебно за Пфорзхеимер? Сигурно можемо да урадимо боље него да многи знакова. Зашто једноставно не повезују јединствени идентификатор са сваке куће и продавница која за сваког корисника? Дакле, хајде да пробамо ово. Уместо само користе студенти табелу, пусти ме да одем до моје предавање базе овде у горњем левом углу. Приметимо овде пише Направи табелу. Дозволите ми да креирате нову табелу под називом куће. Број колона ће бити 2. Ентер. Сада имам 2 поља. Ја ћу да зовем ово име, а то ће бити варцхар дужине 255, али то је прилично произвољан. Дозволите ми да ово доле конвенцијом. Дакле, ставио ИД овде. Дајмо свакој кући јединствени идентификатор. Дајмо сваку кућу име. Идемо прецизира да ће идентификатор бити неознацен само Конвенције да користе само позитивне бројеве. Идемо напред и да овај ауто-инцремент поље за сада. А да ли нам треба још нешто? Идемо напред и кликните на Сачувај. Сада имам другу табелу. Обавештење као страни је нешто криптичан СКЛ наредба да ли би морао да ручно упишете ако не користите административни алат као што пхпМиАдмин. Дакле, још један разлог да га користимо. То је предивно корисно врста педагошки, јер можете да кликнете около и схватим како ствари функционишу тако једноставно копирање и лепљење шта пхпМиАдмин урадио. Али Креирај сто команда је оно што је управо погубљен, а овде је мој сто. Пусти ме напред сада и користите сирови СКЛ него поједностављују кликом на Инсерт картицу. Дозволите ми да се ИНСЕРТ ИНТО кућа, и ја ћу рећи име куће ће имати вредност "Матхер". То је то. Ова синтакса је мало више криптичан. То је име области желимо да убаците. То су вредности које желите да убаците у тим областима. Пусти ме кликните Го. 1 ред убаци трајало 0,02 секунди. Дозволите ми да се сада кликните Бровсе. Обратите пажњу да ли на дугме Потражи, има Матхер, чији ИД је аутоматизацијом број 1. Пусти ме да радим још један. Пусти ме да идем у СКЛ картици. ИНСЕРТ ИНТО кућа. Име куће ће имати вредност Пфохо и тако даље. Иди. И ја могу да наставим да радим ово опет и опет и опет. Или ако вам је досадно користите пхпМиАдмин, можете само да користите картицу Уметање и не морате да куцате сировог СКЛ. Можете само да га ударају се брже од куцања, на пример, Цурриер, Ентер, и сада ако ми дугме Потражи, има Цурриер са идентитету 3. Дакле, то је оно што подразумевамо под ауто-прираста. Али сада морамо да поправимо нешто у ученика. У студентима шта треба да тип података поља куће сада бити? То би требало да буде инт, зар не? Дакле, циљ је да се факторишу, иначе познат као нормализовати, столови тако да ми не складишти информације редундантно у једном од мојих табеле. И опет, били смо на пут овде рећи Матхер, Матхер, Матхер, Матхер, Пфохо, Пфохо, Пфохо, Пфохо, што је веома редундантно у смислу стварању отпада на карактера. Зато ме пусти да иде напред и променити тако што ћете кликнути структура, и пусти ме да иде напред и проверите ван терена кућу, кликните на дугме Промени, и сад ћу да се ово промени да буде инт. 255 више није релевантно. Пусти ме само напред и да кажем да је у реду ако је још НУЛЛ. Саве. Сада листа студената је успешно промењен, и приметио опет куца је инт. Као страну, да игноришу тај број у загради, када је у питању Интс. Ово је за наслеђених разлога. Назад у дану када нисте имали ГУИ, уместо тога имали командне линије окружења, у 10 и 11, односно наведени колико карактера треба да покаже у прозору терминала да се заиста приказали поља. То нема никакве везе са битном дужине самог терена, тако да ћу игнорисати то за сада. Сада морам да идем у овој табели. А ако Дејвид живи у Матхер, кућа не би требало да буде 0, што је стандардна инт вредност најближа НУЛЛ. Он би требало да живи у кући 1. Хајде да кажемо да произвољно Мике живи у Пфохо, тако кућа број 2. Сада ми сто изгледа мало више криптичан. Али размислите ефикасности. Сада сам користећи само 32 бита за идентификацију кућу, што значи да је само 1 канонска дефиниција мојој кући Матхер и Пфохо и то је у табели кућа. Дакле, ако желим да се сада придружи ове табеле, мислим да то на овај начин. Овде имам студентима табелу, а на десној страни је ове бројке, 1 и 2. 1 је Матхер, 2 је Пфохо. Ми имамо те исте бројеве у овој другој табели, која се зове кућа, 1 и 2 и 3 за ова 3 куће. Оно што ми сада желимо да урадимо је да има способност у коду, ПХП и СКЛ, да некако придружи ове табеле, где, ако су ученици и то су куће, желимо да се некако их комбинујете тако да се 1 линија са 1, 2 линије са 2, и тако да можемо да откријемо где је Дејвид и где Мајк и где су сви остали живи. Да бисте то урадили можемо извршити СКЛ упит овако. СЕЛЕЦТ * ФРОМ студенти ПРИДРУЖИТЕ куће ОН - И сада шта поља не желимо да се придружите на? Дакле студентс.хоусе = хоусес.ид. Мало криптичан, али овај део дословно значи створити нову привремену табелу То је резултат спајања студенте и куће. И како хоћете да овде комбинују савете мојих прстију? Сет 'поље кућа једнак кућа' студентски ИД поља. И ако сам сад на дугме Иди, ја вратим оно што сам се надао да. Давид је у Матхер, Мајк је у Пфохо, и ја видим јединствене идентификаторе. Али поента је сада имам комплетну табелу. И тако ПОНЕТИ овде псет 7 или стварно за коначни пројекат: Ако сте сазнали да сте редундантно складиштење било који део информација, да ли је то кућа, можда је град, држава и поштански где могу ЗИП обично, али не увек да се користи као јединствени идентификатор, Не прође кроз вежбу ментално, а затим са нечим као пхпМиАдмин факторинга да заједничким подацима, јер поготово што ваш сајт добија више добро користи и више популаран, то је како сте сигурни да је све супер брз, дајући базу онолико савете како да јединствености могуће. То је је била много. Има ли питања? У реду. Узмимо 5-минута паузе тамо и прегруписати. У реду. Следи је пример који је коришћен пре неких година,, када сам узео ЦС161, што је оперативни системи за класа у хотелу колеџу који је познат по томе што невероватно, али луд количина рада, и заиста фокусира на неке од ниског нивоа проблема који се појављују у оперативним системима и такође чак и у свету базама података. Прича да је рекао мој професор, Марго Селтзер, те године је као што следи. Претпоставимо да имате мало дорм фрижидер за вас и ваш цимер и обоје стварно желите млеко. Дакле, ви долазе кући из класног једног дану, ваша цимерка јесте није још увек тамо, отворите фрижидер, а ви схватате, "Ох проклетство, ми смо из млека." Дакле, ви затворите фрижидер, ви ходати преко пута улице да ЦВС-а и да у све дугим редовима да се купи млеко у ЦВС. У међувремену, ваш цимер дође кући из његове или њене класе, долази у собу, отвара фрижидер заиста жели мало млека, отвара фрижидер и "Проклетство, не млеко." Дакле, он или она затвара фрижидер, шетње напоље на врата, и одлази да се АБП или негде друго него што ЦВС-а, где ви не сте одлазе да се налетети у сваки другу да одемо мало млека. Од Наравно, касније, а неколико минута, обоје од вас гет назад кући а сада имате дупло толико млеко као ви заправо желели. И бивајући млеко, сада то је иде да иде лоше зато што сте се свиђа млеко али ти не урадите стварно ми се свиђа млека, тако да сада ви имате превише много млеко, тако да то је иде да се кисело. То је ужасно, ужасно стање. Шта је могло да реши ова ситуација, ако сте били први цимер кући? Да. [Ученик] Ти требало би да су напустили један белешку. [Смех] Добро. Требао си оставио поруку. Требао си ставити пост-ит ноте или као да кажете: "Прохујало за млеко" а онда ваш цимер концептуално би били избацени из заправо раде. Или сте могли да одете 1 корак даље. Ви буквално могао да закључате по фрижидер са неком врстом оф катанцем, и сада ваш цимер ће буквално бити закључане из фрижидера. Ако се вратимо генерализовати за програмирање, сте скоро можете мислите о фрижидера, као неке врсте Црне променљиве, или једног струцт, нека врста од контејнеру за информацијама. Проблем је у томе што се овде суштински обоје било дозвољено да разгледа или прочитајте стање ове структуре података, али га посматрати у различитим временима и још обоје донео одлуку на основу стања у свету на тим различитим тренуцима у времену. Дакле, да ли сте закључали фрижидер, ти би барем избећи своју цимерку почев од пошто је био у стању да инспекцију на стање у света, тако да он или она не би направио исту одлуку. Тако да базама података, као што је је то Испоставило напоље, имати константно овај проблем. Хајде да видимо да ли можемо да изгради сценарио. Претпоставимо да сте нека врста лошег момка и идете на Банку Америке или један од осталих места у тргу који имају пар банкомата раме уз раме, и некако ви схватио напоље како да дуплирате ан картицу банкоматску - а не све то тешко. То је само је то магнетне траке. И шта желите да покушате да урадите је да играју ову игру где сте ставили 1 картицу у 1 машину, другу картицу у другу машину, , а сте у суштини желите да покушате да се повуче новац истовремено, јер замислите да прича иде на следећи начин. Машина са леве узима вашу картицу и ваш ПИН, и онда сте кажете, ", Дај ми $ 100.", Банкомат је програмиран да се прво урадите изаберите на њеном бази података или на еквивалента - шта год База података то је користи - да бисте види нема овај корисник хаве најмање $ 100 у његовом или њеном по виђењу? Ако је тако, онда испљуне $ 100 и $ 100 одузмите од њиховог стања. Али, наравно, ако има више машина овде или више начина инспекцију стање тог света, банка трезор, да видим колико новца имате, Претпостављам да је само случајно машину лево и десно и питати то питање отприлике у истом тренутку у времену. А то свакако може десити. Банкомати су компјутери ових дана. Дакле, ако је машина на левој каже: "Да, ви имате најмање $ 100," У међувремену је машина на десној каже: "Да, ви имате најмање $ 100," онда обојица наставите да заврше своје програме и стварно испљуне $ 100 и рећи, ", Претходно сте имали $ 200.", "Дозволите ми да ажурирате варијаблу за сада бити $ 100 оставио у на рачуну.", Али,, ако су обе од њих су се чекирали вашу налога равнотежу и нашао да је то је $ 200 и обојица затим урадите математику и рећи 200 - 100, машине су потенцијално испљунути две $ 100 новчанице у свакој машини, али је они само Добили ажурирани на вашу Укупно километара налогу равнотежу да се да буде $ 100. Другим речима, ви сте извели $ 200, већ зато што су прегледали стање света симултано и онда направио одлуку засновану на тој вредности, они не могу урадити математику коначно исправно. Дакле, у ситуацији банке сувише ли заиста желите да имате неку врсту блокадом тако да чим сте проверили стање неке променљиве То је заиста важно, као и вашем налогу, не дозволите да неко други доноси одлуке на основу које се врши док радите свој ствар, где је у овом случају сте банкомат на левој страни. Закључавање све остало напоље. Можете заправо постигао овај ефекат у неколико различитих начина. Најједноставнији начин МиСКЛ је линија СКЛ који смо вам дали у спецификацији проблема сет који изгледа баш овако. Убаците у табели - шта год да се зове - ид, симбол, и удео, број акција, следеће вредности, на пример. Ако још нисте прочитали спецификацију, ово је пример који укључује како идете о куповином 10 акција ове Пени берза за председника Скрооб, чији кориснички ИД се дешава да се број 7? Овај казе ИНСЕРТ ИНТО табели следећи ид, симбол, а број акција од 7, 'ДВН.В "и 10. Али - али, али, али - Друга линија је важна. О дуплирани кључ упдате акција = акција + ВАЛУЕС (акција). Дакле, потпуно гробни-гледа на први поглед. Али чињеница да је ово СКЛ упита, иако је обавија на 2 линије, је 1 дугачак упит, то значи да је атомска у смислу да овај упит или ће извршити све заједно, или уопште не. И по дефиницији МиСКЛ, ето како они спроводе овај упит. То је по дефиницији у приручнику гарантовано да извршава одједном, или нимало. Мотивација за ово је следећи. Ако у овом случају да се покушава да купи 10 деоница, то је врста исте приче као млеко, то је врста исте приче као банкомата. Ако направите грешку да не користите ову синтаксу већ избором из базе да видимо колико акција ове Пени берза Председник нема Скрооб имају, а претпостављам да има 10 акције, и касније неки делић секунде онда урадимо УПДАТЕ изјаву, што је још један исказ у СКЛ који каже напред и додајте још 10 акција његовом тренутном 10, тако да идеално укупно износи 20, Проблем је јер у базама данашњим системима и зато што у данашњим рачунарима имате више процесора, више језгара - Другим речима, рачунари могу да раде буквално више ствари одједном - нема гаранције да је ваш ИЗАБЕРИ и ваш УПДАТЕ у овом случају ће се дешавати бацк то бацк. Тако лош сценарио би ти СЕЛЕЦТ да видимо колико акција овог Пени берза нема Скрооб имају, и онда само случајно један упита извршава - можда његова Скрооб у другом прозору покушавајући да купи 10 акција у другом прозору укупно, налик банкомату - и претпоставимо да је још један упит добија између СЕЛЕЦТ и УПДАТЕ. То може бити случај да Скрооб сада губи известан број акција зато што други процес је увидом у стање свог света, или он добија више акција него што би он имати. Нећемо улазити у појединостима шта ти поједини прича линије ће бити, али поента је да ако морате да проверите променљиве вредности, а затим донети одлуку, ако постоји ризик од још неко нешто између ове 2 изјаве, као што се може десити у системима са ви, у мултицоре система, рачунари са могућношћу да уради више ствари одједном, лоше ствари се може десити као банковни рачуни буду погрешно задужује, куповина дупло толико млека, или у овом случају погрешан број акција. Али постоји лакши начин да се размишља о томе. Испоставило се да СКЛ подржава, ако сте конфигурисали правилно табелу, нешто што се зове трансакција, што бих рекао је заправо још лакше разумети од тога, али то није 1-брод, тако да је заправо мало више укључени. Постоје дословно је изјава у СКЛ зове СТАРТ трансакцију. Баш као да је СЕЛЕЦТ, УПДАТЕ, ИНСЕРТ, ДЕЛЕТЕ, а ЈОИН и гомила других, постоје кључне речи као што СТАРТ трансакције. И шта сте онда урадили у контексту псет 7 - Ви не морате да урадите ово за псет 7; то је изричито демантовао да не потребно, али за коначних пројеката може да буде корисно - ако позовете упит о СТАРТ трансакције и затим још један упит а затим још један упит, а затим још један, још један, и још један, ти упити заправо неће бити извршена док не позовете СКЛ наредба ЦОММИТ, на којој тачки, било да је 2 изјаве или 20 изјаве, они ће сви бити стрељани одједном, што значи да нико други не може случајно купити превише млека или дебитну превише новца или купити много акција, јер све ваше упите ће извршити бацк то бацк враћа се назад. И ово је супер важно, посебно када радиш нешто овако. Ово је произвољан пример који каже хајде да ажурирате банковни рачун од успостављања равнотеже једнак билансу - $ 1000, где је број рачуна 2. А онда друга изјава је сада идемо уложите да је $ 1000 у туђи рачун у банци чији рачун је број 1. Другим речима, ово је савршен пример где желите да се уверите да су оба ова изјава се деси или уопште не јер у супротном купац ће се зезнуо и ти ћеш узети свој новац и не депонује на другом месту, или банка ће се зезнуо где идете да уплати новац али не заправо одузима са рачуна корисника. Дакле, желите обојица да изврши заједно. Тако улази у светским пословима. Дакле, то је нешто што треба имати у позадини вашег ума, не толико за потребе само завршног пројекта, али ако желите негде да узме свој завршни пројекат, ако желите да покренете неку фирму око њега, ако желите да решите проблем неке студентске групе на кампусу и заправо имају уживо, активан сајт, то су врста суптилне грешака које могу да настану ако не баш размисли шта се може десити ако 2 особе покушавају да приступите свом сајту у буквално у истом тренутку у времену, чиме би њихове упите иначе се преплићу. Спремни за неке ЈаваСцрипт, задиркивање њих? Ово је наш последњи језик за семестар. У реду. Срећом, ЈаваСцрипт изгледа веома, веома, веома сличан 2 језика, Ц и ПХП, Урадили смо до сада. Нема ЈаваСкрипт на псет 7, али то је невероватно корисна алатка када је у питању ради веб базираних завршне пројекте или заиста само веб програмирање уопште. Тако кратак преглед нечега што се зове ДОМ. Овде је супер једноставан веб страница које заиста само каже здраво, свет како у наслову и телу. Као што је удубљење указују на неко време, заиста постоји хијерархија на веб страницама. Скренуо бих ово исто фрагмент ХТМЛ као дрво, мислећи назад на нашим дискусијама структурама података у Ц, као што следи. Имам неки посебан роот чвор зове документ чвор, па ћемо видети аналог то у ЈаваСцрипт за само неколико тренутака. Прво дете и једино дете које је у овом случају ХТМЛ тагове. Нема директне мапирање ДОЦТИПЕ. То је посебна ствар, тако да ми само треба да га игноришу, када је у питању овај дом, ово Доцумент Објецт Модел дрво. Обратите пажњу на то ХТМЛ ознака, који сам самовољно приказује као правоугаоника, има 2 деце: главу и тело. Они су на сличан начин као нацртана правоугаоника. То има смисла сликовито да шеф је са леве стране тела. Импликација је да глава долази први у дрвету. Тако заправо постоји наручивања на дрвету када га нацртати овако, иако су облици и ситница су произвољне. Шеф међувремену има једну дете зове наслов, и наслов заправо има своје сопствено дете, што је "здраво, свете", који сам нацртао као намерно овалним овде да би се мало разликује од правоугаоника. Ови правоугаоници су елементи, док је здраво, свет је заиста текст чвор. Дакле, то је чвор у стаблу, али је другачији тип чвора па сам га нацртао произвољно другачије. Слично нема тело има дете зове здраво, свет као добро, толико различити чвор иако су случајно ти исти текст, али сам га извући користећи исту форму. Па кога је брига? Па, шта је лепо о ХТМЛ је да нема ту хијерархијску природу. А шта је лепо о ЈаваСцрипт-у и посебно библиотека које су слободно доступни и популаран као јКуери, можете да се крећете структуру стабла тако невероватно лако. Свака од ствари смо урадили у Ц са показивачима и попречно дрвећа и рецурсинг на чворовима лева на десно дете дете, све изненада можемо некако узети здраво за готово као невероватно просветљујућа, ако не мало фрустрирајуће али ни близу ефикасан начин да се иде о програмирању. И тако са овим вишим нивоима језицима као што су ЈаваСцрипт ћемо бити у могућности да се крећете ово дрво много више интуитивно. И заиста, синтакса ће бити сасвим познато. Ако никада нисте видели ЈаваСцрипт раније, ово је заиста лепо референца из Мозилла људи, људи који доносе Фирефок, тако да слободно прегледајте да на ваше удобности. Шта ћете наћи - и ове слајдове су идентични са оним што смо неки дан - Слично томе, главни је нестао. Дакле, када напишете програм у ЈаваСцрипт, нема основна функција. Ви само почети писање кода. Али кључна разлика између ЈаваСцрипт и Ц и ПХП је да, док Ц и ПХП до сада нису извршена страни сервера од апарата у овом случају или уопште од стране сервера, ЈаваСцрипт по дизајну обично извршава у бровсеру. Другим речима, можда пишете ЈаваСцрипт кода, као што смо о томе да, на серверу у апарату, али га укључи у вашој ХТМЛ код вашег ЦСС, међу вашим ГИФ и ПНГ вашим и ваше ЈПЕГ тако да када корисник посети вашу веб страницу, ако користите ЈаваСцрипт, да је ЈаваСцрипт кода долази са сервера до претраживача, и то је бровсер који заправо извршава. Дакле, ово има значајне импликације за чак интелектуалне својине. То је врста глупо да чак ни размишљати о заштити свој ИП, када је у питању ЈаваСцрипт кода јер по природи језика зрацима обично извршавају бровсер страну. Можете га замрачити, што значи да можете да изгледа лудо и ружно без размака, страшних имена променљивих, да теже за људе да украде свој ИП, али кључ је да се извршава бровсер страну. Иако је као страни Јава може да се користи страни сервера, најчешћи случај коришћења сада је још увек на претраживачу. А ево како изгледа. Овде је ако-иф-елсе изгради баш као Ц, баш као ПХП. Овде је Булов израз када "или" 2 ствари заједно. Овде је када "и" заједно 2 ствари. Овде је прекидач изјава, који је сличан ПХП у које можете да укључите различите типове вредности. Петље слично имају за петље овде, који су идентично структурирани на оно што смо раније видели. Док петље, морамо радити док петљи. Променљиве, икада тако нешто другачије. Ви не прогласи променљиве као ти у ПХП и Ц, али исто тако је Јава слабо откуца. Не прецизира инт или пловак или ниска или нешто слично обично. Можете да одредите вар. Не морате да наведете вар, али има импликације ако не урадите. Обично, ако сте изоставили вар, ви случајно створи глобалну променљиву уместо локалне. Дакле, дозволите ми предлажемо да сте управо скоро увек кажем вар, а затим име променљиве. То није тип, то је само за променљиву вар. То би, на пример, да ли је 123 или "здраво, свете". Низови су присутни и синтаксички сличан ПХП. Ја ћу рећи вар бројеве и онда ја користим угласте заграде поново прогласи променљиву чији тип је низ који има ове посебне бројеве у њој раздвојене зарезима. И онда на крају, ово је само један који стварно изгледа другачије. Подсетимо да је у ПХП бисмо реализовали низ асоцијативну за студента као Замила да би изгледати овако, где променљива се назива ученик. Угласте заграде значе долази низ. Чињеница да не користим нумеричких индекса, али стрингове - ид, кућа, и име - значи да је асоцијативна арраи и ове стрелице са знаком једнакости и угаони носач значи да је кључ "ИД", вредност 1; Кључ је "кућа", вредност је Винтроп кућа; Кључ је "име", вредност је Замила Чен. Дакле, ту је 3 тастера унутар овог асоцијативног низа, од којих свака има своју вредност. Видели смо да је у псет 7, или ћете ускоро, у ЈаваСцрипт истој идеји, али то ће изгледати овако. Дакле вар ученик - нема знак за долар, а не спомиње типа и даље, али вар - једнако, а затим отворите витичасте заграде, јер у ЈаваСцрипту, када имате кључне вредности парове, ви заправо користите нешто што се зове објекат. А они од вас који су узели транспортерима или као можда сећате предмете из Јаве или сличним језицима. Јава није Јава, пре свега. То је било пре намеран дизајн одлука година склепати нешто друго што је био популаран, његово име, иако нема везе фундаменталну да се јава. Јава има објекте и да их креирате путу коврџавом Браце нотацији. Објекти у ЈаваСцрипту су прилично еквивалент асоцијативних низова у ПХП када је у питању чување података унутар њих. Али, још снажније у ЈаваСцрипту можете врло лако повезати функције унутар објекта, и иако то можете учинити на другим језицима, то је сасвим уобичајена парадигма, као што ћемо видети. Укратко, овај објекат представља студента, који је посебно Замила, и то је сличан концепцијски, само синтаксички другачији од овога. Хајде да заправо користе ЈаваСцрипт у датотеци. Испоставило се да је сценарио таг. Видели смо стила ознака и видели смо и друге ХТМЛ ознаке. Скрипта ознака заправо ће садржати неке ЈаваСцрипт кода. Пусти ме да идем у апарату, где имамо неке изворни код претходно направио. Нисам га послали још на сајту, али ја ћу то урадити након класе. Хајде да отворимо ову једну, блинк.хтмл. Назад у 1990, дошло је буквално ХТМЛ тагове зове блинк ознака, и ово је био један од најзначајнијих вондерфулли Оверусед ознака на Интернету чиме ћеш посетите неку страницу 1990 стил сајт и да видите текст трепћу те овако, резултати Маркиза таг, који је текст иде овако. Један од ретких пута, где је свет заиста договорених на веб стандарда, сви преко одбора убио трептају ознаку пре неколико година. Али ми можемо да васкрсне са ЈаваСцрипт као демонстрација моћи имате када можете написати програм унутар веб странице. Прво идемо прескочио нових ствари и фокусирати се само на стари. Овде је стара ствар у овом примеру. Имам ХТМЛ таг, главе команду и наслов ознаку. Онда имам тело ознаку овде са див, који опозив је само правоугаони подела странице да сам добио јединствени ИД произвољно да "поздрав" да, само тако имам начин јединствено односи на то, да има неке врло једноставне: здраво, свет. Сада пусти ме помицати до врха ове датотеке и видим шта има ново. Прва ствар која је нова до врха је скрипта ознака, и унутар обавештења скрипта таг сам проглашен функцију. Да прогласи неку функцију у ЈаваСцрипту, прилично слично ПХП, буквално пишете функције, а затим име функције, заграде, а можда и неки аргументи, ако је потребно било. Онда сам добио коврџаву протезу, као и обично, и сада имамо неке благо нову шифру али хајде да видимо шта то значи. Дакле вар див, то само значи да ми променљиву зове див. Могао сам да га звали фоо, али сам хтео да се зове див због разлога који ће бити јасно у секунди. Онда испада у ЈаваСцрипт - а то је ЈаваСцрипт код уграђен у мојој веб страници - постоји посебна глобална променљива врста зове документ. ЈаваСцрипт је у ствари објектно оријентисаних језика. Нећемо ићи у детаље у 50 томе шта то значи, али за сада знам да објекат је прилично слично струцт. Као што смо видели пут назад када је у једној од најстаријих проблема поставља где смо ставили много информација у струцт, Слично је документ посебан струцт који долази са претраживача, долази са било које веб странице. То није нешто што сам створио. Унутар овог документа структуре, ипак, нисте само податке али такође имају функције. И сваки пут када имају функцију унутар структуре, унутар објекта, То се зове метод. Али то је иста ствар. Метод је функција која само тако се дешава да се унутра нешто друго. Дакле, то значи да је ово посебна глобална променљива зове документ је функција зове гетЕлементБиИд који буквално чини то. То ће вас елемент из ДОМ, Доцумент Објецт Модел дрво, чији ИД је у овом случају поздрављања. Другим речима, све то време смо провели на структуре података долази у игру овде. Ова слика о ДОМ који смо имали пре тренутак, иако страница мало другачија, ако бих имао див на овој слици, шта доцумент.гетЕлементБиИд ће се вратити на мене би ефикасно бити показивач на правоугаонику у дрвету, референци на правоугаоника на дрвету. Дакле, то је оно што значи да заиста позове једну од тих функција. У том случају поново је див. То није тело или наслов. Дакле, хајде да видимо шта онда са овим див сада када сам га унутар ове променљиве зове див. Испада са ЈаваСцрипт имате могућност да динамички уштинути ЦСС ваше странице. До сада, све што смо урадили ЦСС, иако ограничена, у стилу атрибута, или где другде смо ставили ЦСС? Некако размаженог тог једног. У стилу ознаци на врху датотеке. Или треће место је у? Екстерни фајл, нешто ЦСС.. Дакле, то су 3 места смо урадили до сада ЦСС, али цака је да смо тешко смо кодирани све. Одлучили сте како сте дове у псет 7, одлучили смо да пре предаје оно што наш ЦСС бити. Али, ако желите да промените ЦСС, ви заправо могу да урадим када имате конкретан програмски језик. ЦСС, ХТМЛ - а не програмске језике. ЈаваСцрипт је. Тако испада да чим имате један од оних правоугаоника од дрвета зове ДОМ, она сама има неке податке унутар ње. Дакле, див који сам ухватио од дрвета има шта ћемо позвати имовину унутар њега зове стил, а стил имовина себе има имовину зове видљивост. Ја бих да ово само гледајући упутство ЦСС корисника. Испоставило се да је видљивост ЦСС имовине која ради оно што каже. То чини нешто видљиво или не, видљива или не. А како ти је то то. Ја питам да ли програмски видљивост овог дива је скривена, Шта сам то променити у? Видљиво. Иф видљивост ове странице није скривена, логично ја да га скривена. Немам појма зашто је то видљиво и скривено и није видљиво и невидљиво. То је била лоша одлука о дизајну успут. Али, они су заиста супротност у ЦСС: видљива и скривена. Све ово не значи да је то променити ЦСС моје датотеке и гасе, и искључите за тај див. Али опет, то је функција зове трептај. Када је трептај функција зове? Испоставило се да постоји још једна посебна глобална променљива зове прозор, сличне по духу документу, али док документ односи на својој веб страници, као ДОМ стабло, ХТМЛ сте послали са сервера, Прозор се односи на хрома око њега, адреса, бар наслов бар, и све те ствари око вашег веб страници. И испоставило се да је прозор објекат има посебну функцију унутар њих зове сетИнтервал да ради оно што каже. То ће подесити интервал - у овом случају на сваких 500 милисекунди - и узети ваљда, шта ли ће да уради на сваких 500 милисекунди? То ће да изврши тај трептај функцију. И оно што је лепо овде је да смо урадили у Ц иако никад нисмо урадили. Ц има нешто што се зове функција показивачи где можете проћи функције около као аргументе. Слично томе, у ЈаваСцрипт можете проћи име функције у другу функцију. А погледајмо шта ја радим. Ја не радим ово. Ако сам ставио заграде после трепере, то би значило позвати функцију трепне. Ако их изоставите, то значи да је овде блинк функција тако да сетИнтервал може назвати сваких 500 милисекунди. Дакле, крајњи резултат, мада је ужасна, јесте да ако одем у лоцалхост и идите на блинк.хтмл, Ја сада ово дешава изнова и изнова. И ако сам заправо Инспецт елемент, хајде да видимо да ли можемо да видимо. Дозволите ми да Прегледајте Елемент, дозволите ми да се померите надоле само мало, дозволите ми да изаберете Елементи овамо, и обратите пажњу на унутрашњост ДОМ инспектора Цхроме. Буквално се мења и назад на сваких 500 милисекунди. Ако идемо на нашем пријатељу Нате, Ако сте се икада запитали како се то ради, сличну идеју са интервалом, али Нате је заправо одлука веома ефикасно коришћење боја у овом конкретном случају овде. Дакле, шта више можемо заправо урадити са овим? Хајде да отворимо још један пример и покушајте нешто То је програмски још кориснији од доношења ствари трептај. Пусти ме да идем у нашем каталогу форме и данас иде у форм0. Ово је најружнија могућа форма која би могла да смисли, и дозволите ми да вам покажем како то изгледа у прегледачу. Пусти ме да идем у лоцалхост / форме, а то је форм0. Ово је супер ружна ХТМЛ форма која има неколико поља за е-маил, за лозинку, лозинку, а онда мало чекбокс да пристане на неке услове. Цака је ако сам посетите овај формулар и ја не желим да ти дам моју адресу, Ја не желим да се слажете са условима и можда, можете да кликнете Регистрација и то ми омогућава кроз свеједно. Ово се дешава да се подвргне глупог ПХП фајл под називом думп.пхп. Све што ради је одштампате садржај $ _ГЕТ само за дијагностичке сврхе. То је оно што је достављен од стране корисника управо сада. Али претпостављам да ми заправо желимо да потврдимо поднесак обрасца корисника. Пусти ме да идем у верзији 1. Ово је форм1.хтмл. То је естетски изгледа баш тако лоше, али је приметио како је фенси. Ако сам дугме Региструј без сарадње, ја се викао на. "Морате навести своју адресу." У реду. Дакле, дозволите ми да пробам. Тако малан@харвард.еду. Не треба лозинку. Регистрација. "Ви мора да обезбеди лозинку." У реду. Зато ћу дати лозинку Цримсон. Регистрација. "Лозинке се не поклапају." Морам сада да откуцате Цримсон овде. Случајно сам проверио. Регистрација. "Морате се сложити са условима и условима." У реду. Слажем се. Регистрација. А сада ми показује дијагностички излаз тамо. Дакле, шта се десило? Ми смо имали ту способност да потврдите поднеске образаца. У ствари, ако сте урадили зароните у псет 7, ту је Апологизе функција да чини прилично лако да виче на корисника са поруком на екрану. Ја користим мало другачији механизам упозорења функцију, што није функција која се насмејао на будући чини врло ружне корисничких порука. Али, хајде да видимо шта радим овде. Ово је форм1.хтмл, и приметили да имам неку прилично познато синтаксу: Тело ознака, облик ознака, акција атрибут, метод атрибут. Али приметио сам дао мој облик јединствени идентификатор за удобност. Онда сам добио е-маил поље чији је тип текста, поље за лозинку чији је тип лозинка, потврда поља чији је тип лозинку и онда чекбокс чије име је уговор овамо, тип је чекбокс. А онда сам добио СУБМИТ дугме. Али приметите на врху шта више имам. Пре свега, ту је још једна примена скрипта ознаку. Ако имате неку ЈаваСцрипт кода у другом фајлу, баш као и са ЦСС можете га укључити. И ти то са скриптом извора, а онда сам приметио очигледно повезивање да гооглеапис.цом на веома дугом путу, али чије име фајла завршава јкуери.мин за минимум јс.. јКуери је супер популарна библиотека за ЈаваСцрипт да само чини ЈаваСцрипт Све више разумљив за коришћење. Је ефективно је постало де фацто стандард. Дакле, иако је оно што ћете видети није чист Јава по себи, то је библиотека на врху ЈаваСцрипт слично ЦС50 библиотеци слој на врху ниског нивоа Ц кода; стварност је готово свако на Интернету га користи. Дакле, ово није тренинг точкови. Ово је само најбоље практиковати ових дана. Сада приметити испод тога је моје писмо ознака, и погледајмо шта сам овде урадио. Испоставило се да јКуери ради нешто мало фенси. Јава има знак долара, али су бесмислени. Они су као слова или Б или Ц. јКуери је једноставно усвојио Конвенцију или некако ставила тврде да чињенице да $ ће бити њихова посебна симбол. Дакле, чим учитате ову глобалну ЈаваСцрипт фајл овде са скриптом таг, имате приступ посебном глобалне променљиве која се зове $. Је више правилно се зове јКуери, али то не изгледа скоро као секси долара. Али $ нема посебно значење. У ПХП је имао посебно значење. Морао си да га испред променљиве. Ово је само секси ствар коју је преузео. Шта се овде дешава? Обавештење сам пролази у јКуери функцији моју глобалну променљиву документ и онда зовем спреман.. Шта јКуери суштини нема је она омогућава да се неке ствари ваниле ЈаваСцрипт као документа објекта, прозор објекат, а ако га прође на јКуери функције - и опет, да буде јасно, ово је функција зове јКуери - оно што ради је то враћа вама посебну верзију документа који има више функција у вези са њом. Дакле, у сировом ЈаваСцрипт постоји спреман функција, али ако прође документ у јКуери функцији први, враћа се вама посебну верзију документа објекта који има више фенси функције. И то је разлог зашто га људи воле. То чини ствари лакше да раде, као што ћемо ускоро видети. Дакле, шта ова линија кода значи? Ова линија кода овде значи када документ је спреман - Другим речима, када се врши претраживач чита овај фајл врха до дна - само напред и извршава следеће функције. Оно што је заиста интересантно у ЈаваСцрипт - а ПХП има и ово - је анонимни функције. У ЈаваСцрипт можете да прогласи функције које немају име, али они имају тело. Приметите шта се овде дешава. То је функција зове спремни, и то само значи учинити следећи када цела веб страница је спремна, када је све било чита са сервера. Шта желите да урадите? Желим да изврши комад кода. Приметите да ми не желимо да изврши овај код одмах. Ако сам пропустио ово, то би значило одмах почети извршавање ове линије кода. Али чињеница да кажем не, не, не, замотајте ово у анонимном функцији као што је овај значи да не извршава га још, зову га на крају. Видели смо то пре тренутак у нашем претходном примеру обрасца. Оно што смо ми на крају функција позове, касније 500 милисекунди? Блинк. Дакле, иста идеја. Опет, чак и ако то изгледа мало чудно, само се за сада на вери то прогласи анонимну функцију која је на крају зове, једноставно написати фунцтион () { Дакле, оно што код ћемо евентуално изврши? Следећи. Ово такође изгледа мало нев, али то значи да овде јКуери функција, а ово сад је пречица. Овај фрагмент ХТМЛ на дну екрана наравно има неку стабла заступљеност. Није ово. Ова страница је интересантнији од овог Хелло, ворлд пример. Али има неких дрво које одговара том ХТМЛ. Било би бол у врату морати да примените неку врсту рецурсиве функције почети на основном чвору, а затим пронаћи чвор чији је ИД производње. Па шта јКуери чини изузетно лак за нас буквално је ово. Само напред и да ме било шта див или било ком облику, без обзира на ХТМЛ елемент има ИД регистрације. Ово је еквивалентно доцумент.гетЕлементБиИд ('производње'). Зашто људи воле јКуери? Зато што је краће за куцање. Али то је све што јесте. То је иста идеја. Дај ми ознаку чији је ИД производње. А када је ознака, који се дешава да се облик, подноси се, само напред и изврши овај код. Па хајде да узмемо једну сада да погледамо како стојимо обрасца проверу ваљаности. Синтакса је додуше криптично на први поглед, али шта се дешава? Ако ова линија кода је истина, ја ћу да вичем на кориснику да обезбеди свој емаил адресу. Дакле, шта је ова линија кода? $ Значи јКуери. Сада обратите пажњу на ово. То је нешто као ЦСС. Ако сте заронио у ЦСС ипак, ви ћете знати да то значи елемент чији је ИД производње. Простор значи пронаћи дете или потомка регистрације чије име је улаз. И онда та ствар у угластим заградама је мало филтера. Па чак и ако то изгледа криптично, то само значи отићи на форму чија ИД је регистрација, иди у унутрашњост улазног елемента тога чије је име е-маил, и онда се њена вредност, без обзира на његова вредност се деси да буде - асдф ако је то све што сам унео или малан@харвард.еду ако је то оно што сам откуцао. Дакле, ако вредност е поља обрасца == ништа, виче на корисника. Иф вредност поље за лозинку == ништа, виче на корисника. Иф вредност поље за лозинку не једнака вредност поље за потврђивање, који је био други облик елемент, виче на корисника. И онда на крају - и ово је један такође има неку нову синтаксу своје, али када сте га видели, то је барем мало разуман - иф облик чији је ИД производње има улазни елемент чије је име уговор и то се проверава, само напред и виче на корисника. Тако да сам тотално признам да је ово потпуно неодољив на први поглед. То је много нову синтаксу. Али све јКуери следи ове врсте образаца. А искрено, нисам ни знао да је постојала до пре неколико минута. Ја Гооглед "Како да проверите да ли поље за потврду се проверава у јКуери?" и то је синтакса, јер има начина да то ураде са стварним сировог ЈаваСцрипт кода. Дакле, као први страни проблема Сет 7 наглашава, псет 7 је веома вежба у себе боотстраппинг где смо под условом, надам се, концептуални оквир са којим желите да се позабаве псет. Али, као што је често случај са веб дизајном, то је на вама заиста на око џаку, инкорпорирају исечке кода и примере из Веб докле год их цитирати По условима на том првом листу, и схвате да учење ХТМЛ, ЦСС, ЈаваСцрипт, па чак и СКЛ заиста требало да буде ово код куће вежбе као што смо почели да се ове обуке точкова искључен. А схватити превише има толико много више ствари које можете да урадите са претраживача. Унутар већина ових елемената постоје и друге ствари које се зову догађаја Руковаоци. И чак иако смо само гледали оне зову онсубмит и онреади, можете да урадите ствари као онкеидовн, онкеиуп, Волим када корисник додирне кључ, можете слушати то и тастер горе. Гмаил има пречице на тастатури. Како Гоогле спроводи пречице попут Ц за компонује? Они слушају догађајима, као они зову, као онкеипресс или онкеиуп и онкеидовн. Ако сте икада лебдела миша преко неке опције менија и одједном, Воила, мени се појављује или графички мења боју, како су они то раде? Уместо слуша онреади или онсубмит, можете слушати онмоусеовер или онмоусеоут. Дакле укратко, са овим веома једноставним основама које смо почели да огребете површину данас а ми ћемо зароните у даље у среду, имате све више, моћ да спроведу врсте ствари које сте већ упознати. Дакле, хајде да завршимо тамо, а ми ћемо наставити и ове среду. [ЦС50.ТВ]