[За възпроизвеждане на музика] DAVID Malan: Това е CS 50, и това е началото на седмица девет. И това, което ние решихме, че ние ще направим днес, не е само затвори главата за миналата седмица материал, където ние се фокусирахме върху сървъра страничен уеб програмиране с PHP и SQL, някои неща база данни. Ние ще говорим за малко днес сигурност и след това преход към страна на клиента програмиране език известен като JavaScript. Но първо, някои изкупление. Може би си спомняте, че на Сряда, тръгнах да напише уеб сайт, който се на входа на потребителя от HTML форма, че след това се съхраняват че имената потребителски входни, телефон номера, както и мобилен телефон превозвачи в базата данни. И тогава имах малко команда Онлайн сценарий, написан на PHP че е трябвало да превъртите през редовете в базата данни и изпраща текстови съобщения. Въпреки няколко, няколко опита, ние не се получи, че работната до края. Така прекарах цялата тази седмица работа по този код, за да ни минало точката там, където бяхме, при което всички Аз имам до края на сряда е това текстово съобщение от Марго като се борех, последвано от текстово съобщение от друг съученик, Имаш ли Давид. Следван от този, чудесно окуражаващо. Продължила много показателен. Аз почти го докато then-- и това е бележката ние приключи в сряда. И тогава всъщност може би любимата ми, Миг по-късно, това влезе. Damn живея поток. Така че днес, ние се определи това с бърз погледнете какво съм направил, тъй като. Така че всичко на този кодекс е достъпно онлайн от миналата седмица, седмица и осем, изходния код. И вие ще видите, че аз отидох чрез, и аз всъщност почистват нещата малко. I въвежда няколко други функции на една SQL база данни. Например, вместо просто се уверете, носител на Var Чар както аз мисля, че направих в движение миналата седмица. I а я определя като това, което се нарича ENUM. А някои от вас може би са виждали това както ние проучени C. Enum е всъщност функция на C, където можете да изброявам цял куп константи и да ги възлагат автоматични ценности, като една, две, три, четири без да твърди кодови номера. Така SQL поддържа същата, при което ако имате поле за база данни, която само вие искат да вземат на един от крайните ценности, вие можете буквално да го определят както направих аз там за четири популярните мобилни телефони американските превозвачи. Така че аз направих това. И аз направих няколко промени като добре, като най-важните от които е да се работи, защото имейл изземване, че тази програма се позовава на която обикновено се нарича имейл до SMS шлюз, който е само на един луксозен начин на казвайки, че Verizon, и AT & T, и други хора да подкрепят сървър, при което, ако получи имейл, той я преобразува в SMS и изпраща текстово съобщение на нечий телефон. Така че, ако аз направих това правилно, тук е нова и подобрена форма че ще говори с Новият и подобрен код, който можете да играете с онлайн. И се надяваме, че ще ми телефон сигнал в един момент. Така че, на първо място, аз отивам да напишете името си. Второ, аз не отивам за да направите това и този път. Отивам да се Огледайте Element. И това е само една малко нещо, така че аз не правя създадете часа на пост-продукция работи както направих аз за последен път. Там сега е моят телефонен номер. Ще изберете Verizon. И тук, нека се обърнем към този микрофон тук и да се стреми към това на телефона ми тук. Отивам да кликнете регистър, които трябва да се надяваме, го постави в базата данни. Сега отивам да отидете на програма за команден ред, който изземване се нарича точка наклонена черта текст, и стискайте палци. Ето ни. [Phone несъстоятелност] [Аплодисменти] DAVID Malan: Така че по-забавно, отколкото this-- това е забавно, разбира се, ако съм в това. Но това е по-забавно, помислих си аз, ако ние създадена една от тези филмови моменти където като нещо наистина лошо се е случило в света, и като всички хора НСА-те години мобилни телефони започват да бипка с текстови съобщения ги предупреди за този факт. Така че аз смятахме, че ще се опита да пресъздаде същото тук, при което не се използва база данни, Аз вместо предварително написа програма, която изглежда по този начин. Това е index.php-- и сложих този код онлайн като well-- че очевидно просто прави form.php, използване на парадигмата стил MVC, че ние говорим за по-подробно в проблем набор седем. Тази форма е доста проста. Тя ще представи на файл, наречен here.php по пощата. И това е очевидно ще да попитам за име и телефонен номер, и след това чрез така наречените Изберете меню, това е ще ви дам най-малко четири популярните мобилни телефони американските превозвачи, и след това да ви позволи ефективно да вземат посещаемост, като кликнете тук. И тук, междувременно, ще се назаем някои от цифрите от последното време. А ако просто обезмаслено това, ще видите, че има цял куп проверка за грешки. Но красотата в края е, че ние не пишат на база данни днес. Ние сме го поддържа прост и просто изпраща надяваме текстово съобщение чрез функцията I пише през последните няколко дни разговор Текст, който е във функциите. PHP, който отново е на разположение онлайн. Така че, ако искате да участвате в това. Ние няма да се съхранява нищо. Отидете на този адрес тук, в реално време. Не го представя, просто все още, но нека да видим дали можем да имаме една от тях филм моменти, когато мобилен телефон на всички започва да издава звукови сигнали, да се надяваме само след като тази година за разлика от 2011 г. когато това отиде ужасно проваля. И след като отидете на този адрес, трябва да видите супер проста форма че ако има име, мобилен телефон номер, и носител мобилен телефон, че съвпада с този списък, отидете напред и да попълните формуляра. Но не се удари представя, просто все още. Формата ще изглежда по този начин. Давай напред и да напишете Вашето име, телефонен номер. ООП, някой ще ходи напред на кривата. Това е ОК. Добре, всички се попълва формуляра. Това би трябвало да работи по телефон, също, ако искате. Добре, на вашите марки, се определят, отидете. Хит тук. Какво? Не. Кълна се в Бога, аз тествани това няколко пъти днес. Ти го имаш? [Вмъкване VOICES] DAVID Malan: OK, ръководство за грешка може би. Това е два. Той е работил за двама на няколко стотин, три, четири. Добре, това е добре. Четири от пет за коректност какво ще кажеш. И така, какво точно се е случило? Така че, вероятно, без да виждат вашето екрани, защо да го имат errored? Това е вероятно, че ние бяхме просто се опитва да направи твърде много връзки на поща на сървъра Харвард всички в веднъж от същия IP адрес. Аз съм просто се познае, тъй като не съм разполагат с лукса на тестване този код, с някои 300 души по-рано но сега осъзнавам, че че най-малко трябва да са придобили свърши работата този път. Добре, така че защо е всичко това на по-уместен за това, което се случва? Ами първо, бързо няколко съобщения. Така един, ако искате да се присъедините към Chang и Ник, а други по обяд в петък, направя RSVP в обичайното URL там. Ако си мислиш за концентриране или прави средно по CS, независимо дали сте второкурсник или първокурсник, или дори младши или старши в този момент и все още може да се провира в курсовете, осъзнават, че инженерната училище набира безплатно Бен и Сладолед и съвети Джери тази сряда малко след клас в 4:00 часа в сградата CS в Maxwell Дворкин. Ако това е твърде бързо на екрана, просто отидете да cs50.harvard.edu за линк към Facebook събитието където можете да видите повече подробности. В същото време, аз мислех, че ще се коригира едно друго нещо, което goofed в сряда. Оказва се, че Марк ID на Facebook не е три. Беше четири. Оказва се, че той е по-тест сметки, отколкото си спомням. Но какво е това чувствах като възможност да направите, е да спра с URL като този. Така се оказва, че Facebook има API, Application Programming Interface, което е механизъм, при който ви може да поиска данни програмно на Facebook и да се върнат машина ясна информация, а не уеб страници но само сурови текст, нещо нарича JavaScript Object Notation. И всъщност, ако посетите този URL, и увеличавате, по подразбиране, това е Марко публично достъпна информация. И интересен детайл тук е само, че си ID е наистина номер четири, която аз осъзна, веднага след като го направих това. Можете да направите това сами, ако знаете Вашия Facebook потребителско име, ако имате такъв. Просто въведете до върха там. И нищо от това не е лично. Аз просто правя това, дори в режим инкогнито. Така че аз не съм дори се идентифицирали. И вие виждате, че аз очевидно е потребителски номер 6454 на Facebook, които не е Жалко, тези дни. Така или иначе, вие също ще видите допълнителна информация там. И полезен аспект за това е, че сте би могъл да напише свой собствен софтуер, който някак интегрира данни, като този в собствената си кандидатура. Можете да овласти потребителите към влезете във вашия сайт, не използват свои собствени потребителско име и парола, но може би си Facebook вход и да получите информация, дори за своите приятели, ако те одобряват такава, или нещо подобно. Така се отбележи, че CS50 също има някои от своите собствени API, един за курс на стоките данни, някои от тях за Авантюра менюта в заведения за хранене зали, всички от сгради и места на територията на колежа имаме API за толкова добре че вие ​​може да задава въпроси по същия начин и да получите обратно данни текстова, че можете да интегрирате в PHP или JavaScript, или дори, макар и по-рядко, а C базирани окончателен проект. Всъщност напред за финала проект са няколко важни събития. Имаш ли имейл от нас на другия ден. Осъзнайте, че предложението се дължи това идва понеделник. Това не е непременно задължителен, но е нужно, за да получите вашите преподавателски събратя одобрение, преди да направи всички промени след това. И тогава напред сме редица други важни събития. Така че, за да ви дразни, също с някои възможности, ние имаме един куп тези оттенък крушки. И някои от вас, момчета, сега има някои от тях във вашата стая в общежитието, както добре. И те също имат API. Така спомням тези двоични крушки седмици Преди това Дан Брадли и Ансел Дъф е създадена за нас. Те използват софтуер интерфейс тази крушка, която в момента е включен в електричество и след това чрез безжична е свързан с малко нещо нарича мост тук, като малко рутер собственост за това конкретно устройство. Но се оказва, ако знам как да изпрати HTTP съобщения, както всички ние сега правим, Мога да изпратите съобщение като това, за да тази крушка, за да го включите или изключите или направите произволен брой други операции по нея. Забележете, че това не е се, това не е пост. Има още една, наречена пут. Има действително няколко други такива глаголи. Но забележете, че има път там, Слаш API, наклонена черта нов разработчик, Слаш светлина, наклонена черта един, наклонена черта състояние. Това е очевидно само път, че компанията, Philips, решава, че трябва да се удари с искане за HTTP ако искате да промените държавата на луковицата, използвайки HTTP 1.1. Тогава забеляза празния ред. И тогава най-накрая това, което изглежда като вид на масив от някакъв вид, това отново ще се нарича JavaScript Object Notation или Джейсън. И това, което виждате тук, е, че има три двойки ключови стойности. Една от основните е призован. И стойността му явно ще бъде вярно. Яркостта е 128, което е някакъв вид Int. И след време на прехода е нула, което е очевидно колко време ще предприеме, за да се превърне това нещо на. Така че точно сега тази крушка е изключен. Но ако го направя точно this-- нека отида на малко мамят лист че Дан създадена през advance-- и аз отивам да вървим напред и да копирате следната команда. Curl, както някои от вас може да се възприема по CS50 Обсъдете е програма, като Telnet, като че можете да се симулира HTTP заявки, специално поставя. Мога да изпратите тези данни, специално това, което току-що видях преди малко специфично до този URL тук. И тогава Curl ще се справи Всички необходими заглавията и разбор там на. Така че всичко, което трябва да направите е да копирате този в терминален прозорец и след това натиснете Enter. И крушката продължава. И всичко това се случва чрез моя компютър безжично някак си надолу към моста, който След това се говори за тази крушка. Мога да направя нещо друго. Мога да направя това нещо отида червено например. Аз например може да се направи това нещо отидете зелено. Аз мога да го пусна в синьо. И забележи във всяка от тях случаи, всички, че аз съм се променя е т.нар оттенък стойност всъщност го дават малко цвят. Така че нека да поставите този в, както добре. Сега е синьо. И вие можете да направите дори по-красиви неща where-- нека да отидем зелено. И аз може да направи това на Разбира се, с моя собствен код. Но дори самото API поддържа фънки операции като тази, която сега ще се занимавам ни за следващите 30 секунди. Така че това е един вкус на това, което може направя с API, това с участието на крушки. Имайте предвид, че CS50 има няколко двойки на Google Glass, ако искате искали да се справи с нещо заедно тези линии, Arduino Unos, които са миниатюрни компютри, по същество, по малко платка че можете да се свържете проводници и други неща да и действително контрол Вашата реалния свят среда. И след това има няколко на нови играчки, които имаме. Това буквално току-що пристигна в ден по пощата, на Myo лента за ръка. А аз си мислех, че това е начин да се да ви вълнува за проекти които можете да използвате с този хардуер ще да се играе този кратък клип които те използват, за да дразни хората че ние сега живеем в бъдеще. [За възпроизвеждане на музика] DAVID Malan: Така само за няколко седмици, също може да се окаже, че готино по време на панаира CS50. Друго устройство, което ние има един куп, че ние сме щастливи да заема в продължение на проекти се нарича контролер на движение. Това е малко по USB устройство да се свържете с компютър, който ви позволява да си взаимодействат с вашия лаптоп, Mac или PC, като че ли имаше като Xbox Kinect и всъщност правят физически движения много като виждаме в тази визия за бъдещето. [За възпроизвеждане на музика] DAVID Malan: Така че, дори ако имате никаква представа как нещо подобно би могло да бъде измислена или работа на ниво хардуер, без значение. Дори и само след няколко месеца на CS50, и разбиране на програмирането по-общо, и уеб програмиране повече наскоро, а след това и API, и HTTP, ще имате достъп чрез софтуерни APIs ако искам да заеме едно от тези устройства, за да всъщност говори с него и не трябва да се тревожи за базовия изпълнението информация, която е напълно в съответствие с тази представа за наслояване абстракция, че ние сме из целия семестър. Така и през уикенда, Видях няколко парчета на новини. Отиди на първо място, отидете на семинари, ако биха искали да научат нещо повече на произволен брой теми. Вижте адреса там. И това е изпратено до ми от Chang, които знаете, кой печат нашата армия на слонове. И това е заглавие, както следва. Аз съм ужасена от новия си телевизор. Защо съм уплашена, за да се превърне това нещо на и искате да бъде прекалено. Така че сега ние сме в насочи в семестъра, твърде, където дори и ако имате най-малкото за разбирателство относно начина на функциониране на мрежата, и HTTP, и сигурност, неща като това трябва да започне да хване окото си. Но също така, ще разберем дали тези неща са или не са действителните заплахи. Така че взех няколко извадки от тази статия тук. А историята е следната. Сега съм собственик на нова Smart TV, която обещава да достави на живо мултимедийно съдържание, игри, приложения, социални медии и интернет браузване, о, и телевизия също. Единственият проблем е, че аз съм сега Страхувам се да го използвате, казва авторът. Може би е също, ако сте прочели политика на 46-страница на личния живот за вашия телевизор. Количеството данни, този нещо, което събира е зашеметяващ. Тя записва къде, кога, как и за колко време можете да използвате телевизора. Той определя проследяване бисквитки както говорихме, и маяци, предназначени за откриване, когато имате разглежда конкретно съдържание или даден имейл съобщение Ако искате да проверите електронната поща на вашия телевизор. Тя записва приложенията ви използвате, уебсайтовете, които посещавате, и как си взаимодействат със съдържание, прави всичко това чрез вашата смарт TV. Той също така, creepier yet-- това е моят addition-- е с вградена камера със система за разпознаване на лицето. Целта е да се осигури жест за контрол на телевизора и ви позволяват да влезете в персонална сметка с помощта на лицето си. В посока нагоре, образите са записан на телевизора вместо качени на корпоративния сървър. В посока надолу, в интернет връзка прави цялата телевизора уязвими за хакери, които са демонстрирали способността си да вземе пълен контрол на машината. По-тревожно е, че като че ли това не беше достатъчно умен, е микрофона. Телевизорът разполага с глас функция за разпознаване която позволява на зрителите да контролират екрана с гласови команди. Но услугата идва с доста зловещо предупреждение. Моля, имайте предвид, че ако Вашите изречени думи включват лична или друга поверителна информация, тази информация ще бъде сред данните заловените и предадени на трета страна. Разбра ли? Не казвайте, лична или чувствителна неща в предната част на вашия телевизор. Така че това е всъщност истински. И това е трудно да не се видим, ако отидете на Best Buy или други подобни за телевизори тези дни. Те всички са умни по някакъв начин. И те са все умен и creepier. И те просто събиране на данни по начини, които сме говорили за и след това да го качите чрез HTTP или някой друг протокол към някои сървър. Така че това беше по-забавно статия в тази онлайн сайт тук, което говори за специално за бъг или погрешно код че всъщност можем да връзвам в дискусия миналата седмица. Така че това заглавие е толкова следва, историята отива тук, Джош Breckman работил за компания, която се приземи договор да разработи за управление на съдържание система или CMS, тъй като те се наричат, за доста голям сайт на правителството. Голяма част от проекта участват разработване на система за управление на съдържанието така че служителите ще бъдат може да се изгради и поддържа непрестанно променящия съдържание на сайта им. Нещата излязоха доста добре за няколко дни след това ще живее. Но на шестия ден, нещата не отиде толкова добре. Всички на съдържание в уебсайт напълно изчезна. И всички страници са довели до по подразбиране, Моля, въведете съдържанието на уеб страница. Опа. Джош се нарича, за да разследва и забелязах, че един особено неприятен външен IP адрес е имал отишъл в и заличава всички съдържанието на системата. IP адресът не принадлежат за някои отвъдморски хакер наведе за унищожаване на полезни правителствена информация. Той решил да googlebot.com, Собствен уеб пълзи паяк на Google. Опа. След малко на научните изследвания и кодиране наоколо, за да се намери noncorrupt архивиране, Джош намери проблема. Потребителят е копиран и поставили някои съдържание от един страница към друга, включително за редактиране на хипервръзка за редактиране на съдържанието на страницата. Обикновено това не би било въпрос, тъй като е извън потребителят би Трябва да въведете име и парола, но системата за удостоверяване на CMS, за влизане в системата, не се вземат под внимание сложна хакерска техники на Google Spider. Опа. Както се оказва, Google Spider не използва бисквитки, което означава, че тя може да лесно заобикаляне на проверка за е влязъл в бисквитка набор, че е невярна. Той също така не се обърне внимание на JavaScript, което би трябвало нормално подкани и пренасочване на потребителите които не са влезли вътре. Това обаче, не следват всеки препратка на всяка страница я намери, включително тези с Изтрий Page в заглавието. Опа. И така, какво означава това в повече се технически, но сравнително достъпни условия? Това просто означава, че през сайта им, те трябваше URL адреси не за разлика от това, че можете да видите в проблем определя седем. Спомнете си в проблем определя седем или знаете проблем зададете седем че сте се справи, наред с други неща, да продаде акции от името на потребителите. Но прилагането на тази функция чрез за да получите чрез хипервръзки в потребителското интерфейс, вероятно не най-умната идея защото, ако вашият сайт е по някакъв начин достъпни или от човек кой щракнете върху около или купи бот като Google или на Spider тъй като те се наричат, че е просто пълзи в интернет се опитва да индексира интернет като търсачка, те биха могли много лесно удари чрез получите този вид на URL. И това е функционално еквивалентни на, в този случай, продажба на всички акции на Google. Сега, честно казано, това е напълно тъпото че ССФ употребяван JavaScript и бисквитки за изпълнение на своята система за вход и не прави това от страна на сървъра, като вие правите и воля в PSet 7-- има login.php file-- винаги, винаги, Винаги сигурност трябва да бъде извършва на сървъра страна, не от страна на клиента, защото, както този статия предлага и може да се виж в някакъв момент, това е тривиално за употреба, добро или лошо, просто да изключите JavaScript да не говорим за бисквитки. Така че това е ежедневната си WTF. Има и още един, който е просто вид на страшно, така че аз ще го спомена, ако само като урок живот. Всеки път, когато използвате приложение нарича като Snapchat или други подобни който казва, че тези снимки траят само за пет секунди, десет секунди или какво ли не. Те са мимолетни Това е абсолютно не е така. Както няма начин, дигитално, да прилагат някаква форма на видео, изображение или текстово споделяне на такава че получателят на другия край не може по някакъв начин да запишете данните. В най-наивен начин, някой може да вземе телефона си. И те имат втори прозорец 10 докато гледа към някаква моментна просто да си вземе някои друг телефон и да го снимам, очевидно. Така че може да се запази нещо дигитално по този начин. Някои от вас знаят как да се скрийншотове на вашия телефон. В действителност, ако не знаете това, осъзнават, че най-малко Snapchat, и аз мисля, че друг приложения, тези дни, най-малко Вас, ако кажа, получател трябва действително взел снимка на вашия имидж. Но още по-лошо, това е snappening, като някой го е измислил наскоро, където някои 100000 щракне е бил освободен в това, което се нарича торент файл на различни сайтове в крайна сметка. И това се съдържа цял куп на частни съобщения и мнения. Оказва се, че повечето от тях са доброкачествени, така че не това, което може да се очаква. Но тъй като хората са имали използва интернет страница, от трета страна, влезете с тяхната Snapchat потребителско име и парола и след това спестяване на всичките си щракне В този сайт на трета страна. И това е, че трета страна уеб сайт, който е опростен, който просто означаваше някой измисли как за да получите всички 100 000 плюс на тези снимки в собствената си твърд диск за последващо споделяне. Честно казано, тук също е вид от тъпото че Snapchat се осъществява по такъв начин, че трета страна може да се справи на пресичане данните и че това не е свързано с вашата собствено приложение, което работи по телефона. Но тук също осъзнават, че те неща, които не трябва да ви хванат неподготвени, или поне не би трябвало бъде урок живот тук. Ако искате техническата информация, отидете на този адрес има това е в днешните пързалки. Добре, всички въпроси, свързани с днешните житейски уроци в CS? Завъртете, че на разстояние. Каквото и да е? Каквото и да е? Имам много хора проверка тяхната Snapchat или нещо сега. Добре, така че SQL, Structured Query Language. Нека да приключим. И също така, макар и ние просто чесане повърхността на тази език, ние ще ви дадем достатъчно на езика под формата на PSet 7 така че да може да се справи с някои доста често срещани функционалност. Но разбирам, че има няколко неща, които не изискват от вас, но те ще бъдат важно дойде окончателните проекти и със сигурност дойде правене на действителен сайтове с реални потребители е това дизайнерско решение. Оказва се, че в база данни MySQL, можете има гроздове на избор като типовете данни за вашите колони и други неща, но вие също трябва изборът на т.нар съхранение двигател на всички ваши данни, вида на файловата система, ако сте запознати, за всичките си данни. В какъв формат е, че в крайна сметка се съхраняват в? И най-често, може би, е MyISAM и InnoDB, технически термини че ние ще се грижим за само доколкото има един и не е нужно следната функция. Да предположим, че имате малко общежитието хладилник. И предполагам, че вие ​​и вашият съквартирант, които споделят този хладилник, са много любители на думата мляко. И това е, в действителност, начина, по който история е казал за мен път назад в деня, когато взех курс нарича CS 161 операционни системи, които подобно изследва тази тема. Така че имаш този хладилник. Ти си от мляко. И ти се върне у дома, си съквартирант в все още в клас или каквото и да, и решите, аз ще изляза и да получите малко мляко. Така че затвори хладилника, затвор стая в общежитието, прекоси улицата до CVS или където и да получите в линия, за да си купи мляко. В същото време, вашият съквартирант се прибере вкъщи от клас, получава в стая в общежитието, отваря хладилника, и осъзнава, ooph, ние сме на мляко. Така че той или тя се затваря хладилник и след това се случва за да отидете на друга CVS, което се случва, да бъде един блок далеч от другите CVS на площада, и получава в съответствие там, за да получите някои мляко. Сега, разбира се, на няколко минути по-късно, двамата се върна, и най-лошото от всичко е възможно резултати се е случило. И двамата имате мляко. И наистина не като мляко, което много. Така че един от тях е просто ще се вкисне в някакъв момент. Така че сега имате прекомерно количество на мляко в хладилника всичко, защото защо? [Недоловим] DAVID Malan: Да, не сте някак си комуникират един с друг че сте били получаване на мляко. Така че в най-простите начини в човешкия свят, как може да се избегне тази глупава сценарий да се случи такова че ти само се свърши с една. Ги текст, да добро. Но как иначе? Post-той отбелязва. DAVID Malan: A Post-то бележка. Всяка форма на комуникация който казва съквартиранта не трябва да излизат в хладилника за мляко. Отивам да презапасявам на моята собствена. Така че някак си трябва да заключите този ресурс. Така че ние можем да направим this-- можем вид рушат историята и да се превърне в история CS при което мисля за това като просто като променлива, която се съхранява някаква стойност. И точно сега, на стойност на мляко е нула, които не искате вашият съквартирант да инспектира тази променлива и след това да се вземе решение него или себе си въз основа на състоянието на тази променлива Ако сте в процес на промяна на състоянието на тази променлива. Така че една от линиите на SQL, че ние ви дам в PSet 7 спецификация е този тук. И ние не прекарват огромна период от време да говорим за това. Но се оказва, че ако се опитвате да си купи акции в CS50 финанси че вече имате някои акции на, вие Искам да бъда в състояние да направи редица на нещата веднага заедно. Искате да бъдете в състояние да ефективно, на високо ниво, проверите всичко е наред, ако искам да купуват повече акции на Free, стотинка състав ние, говорим в спецификацията, Искам първо да проверите колко акции имам. И предполагам, че е пет. И предполагам, че искате да купи 10 повече, в крайна сметка Искам да има 15 акции на фондовата. Така че аз трябва да задам два въпроса. Какво е състоянието на променливата? Какво е състоянието на ред? Колко акции мога в момента да има? След това можете да отидете напред и да го актуализира. Така че това е аналог на мляко в която да проверите ред, и след това искате да го актуализира защото, ако искате да си купите 10 акции, вие не искате да се промени ред 10, можете искате да го смените с 5 плюс 10 или, разбира се, 15. Тази линия на код гарантира, че тези два концептуални идеи случи заедно или не. Никой не, включително и някои друг потребител кой сте влезли в същия уебсайт, може по някакъв начин да прекъсне проверката на реда и актуализиране на реда, на изберете и актуализацията, ако щете. И синтаксис не е супер очевидно, но тази линия, дълго се е, гарантира, че тези две операции проверка на променливата или проверете ред и актуализиране на реда се случи с атомна. О, ето ни отново. Текстово съобщение на телефона си. Така че нека да направи това малко по-конкретен. Да предположим, че вие ​​не сте прилагане хладилник, и не сте прилагане PSet 7, но действително банка, или банкомат, за Automated Teller Машина, с което по някакъв начин Искам да бъда в състояние да се даде възможност на на потребителите да прехвърлят пари от една сметка в друга. OK, виси. Отивам да изключите това сега, благодаря ви. Така че ние искаме да се движат пари от един номер на сметка в различна степен номер, специално $ 100. Така че това е един вид произволно Например, при вас, банкомат, може да искате да изпълните две SQL запитвания, изважда от един акаунт, и се добавя към друга сметка. Но вие искате да се гарантира, че тези две линии, както се случи или не на всички. Вие не искате нещо Първи прекъсва. Вие не се направят някои умен лошо момче някак си стоеше в банка на Америка с две банкомати в предната на него и някак си нещо пишете в команди в същото време, надявам се опитва да удържи 200 щатски долара, вместо от $ 100 и само с $ 100 кредитира. С една дума, вие искате това да се се държи точно така, както вие очаквате. И начина, по който правим това в SQL база данни е го увийте в това, което е нарича транзакция. Буквално в SQL, можете да се обадите на CS50 функция заявка с цитат цитата старт транзакция. След това можете да се изпълни произволен брой на следващите SQL заявки, но никой от тях не се вземат ефект върху базата данни докато ти се обадя заявка цитирам цитата ангажират, ако отново чрез PHP. И по този начин, можете да се гарантира, че дори ако имате 1000 потребители всички удря си база данни в същото време, SQL ще обещая, че тези две заявки ще бъдат изпълнява една след друга страна. Така че не се окажете с повече от мляко или грешна сума, в крайна сметка, на пари. Така че имайте това предвид, не толкова за PSet 7 но за крайните проекти ако сте в действителност се опитва да се движат данни около през маси, колкото биха могли тук. Но може би още по-лесно и по- Очевидно, за да се разбере с един пример е този тук. И някой ни имейл за това просто на другия ден когато видя нещо подобно онлайн. Така че, доколкото ми е известно, системата за закрепване не е уязвима от тази атака. И аз нямам идея, ако дори употреби на SQL база данни под предния капак. Но нека да го използвате за името на дискусия. Тук е на екрана, че Харвард хора са склонни за да видите, когато влезете в системата със своето Harvard ID номер и им щифт. И предполагам, че системата за щифта изпълнява в PHP и с MySQL база данни, кодът, че някой преди да са написани години може да изглежда така. Първо, обяви променлива, наречена потребителско име. И просто се, че от на супер-POST. Тогава можете да получите друга променлива наречен парола и направи същото. И след това просто да се изпълни този дълъг заявка тук, изберете звезда от потребители, когато те потребителско име равнява на такъв и такъв и парола равнява на такъв и такъв. Забележете, че къдрава скоби Ползвал съм тук Просто исках да PHP, отидете напред и заместител стойността на тези две променливи точно там. Те не са строго необходими, но те са склонни да се избегнат грешки, фините синтаксис. Така че, това изглежда напълно вярна на пръв поглед. И това е така. Може да се приложи щифт система по този начин. Но да предположим, че е супер умен и зловреден студент въвеждане на това като своя ПИН. Така че аз съм отстранен куршума признаци тук в макет нагоре, и аз съм всъщност разкри това, което той или тя може да пишете. И това е малко странно. Но това, което изскача при вас в потенциално тревожен за въвеждане на потребителя, дори и ако вие нямате представа какво на SQL инжекция атаки означава. Защо това изглежда малко съмнително? Какво е това? [Недоловим] DAVID Malan: или е малко подозрително. В действителност, това е ключова дума от SQL. Така че това не предвещава нищо добро. Фактът, че има всички тези единични кавички there-- в действителност, един от най-лесните начини да се прекъсне някои бази данни е чрез въвеждане на име като O'Reilly че има апостроф в него защото, ако човекът, който е написал кода зад кулисите не взема под внимание факта, че има може да бъде единични кавички в потребителя вход, и той или тя използва единични кавички в кода си, лоши неща могат да се случат. Всъщност, още по-лошо, помислете за това. Ако отново това е кода че някой в ​​Харвард години Преди пише за щифт система, забележете, това, което е за да се заместен за потребителско име и парола ако видовете потребителски отново skroob като потребителското си име и след един, два, три, четири, пет, цитат или цитирам цитата един равни цитирам един. И забележи какво е ключов тук е потребител не започна своята парола или си значка с един цитат. И те не са го завърши с един цитат, защото той или тя предполага, че ако програмист не е толкова остър, те ще имат тези, единични кавички в кода си. Така че тук е кодът. И на заместване Сега може да се случи това. И аз съм подчерта какво потребителят е въвел вътре. Така че, преди, след. И забележи това, което е меко казано тревожна сега за дясната половина на този SQL код? Това е малко по-сложно, разбира се, от заявките, които сме виждали. Но това не може да да бъде нещо добро, ако сте казвайки изберете звезда, която е изберете всичко от трапезата на потребителя където потребителско име е равно skroob и парола се равнява на една, две, три, четири, пет или един се равнява на една. Какво е логично Изводът на последната клауза вероятно? Това е просто винаги е вярно. И тъй като ние сме нещо като предположил или измисли от опити и грешки че програмист, който написах този код не е направил предвиждане на човек или лош човек пишете в единични кавички, както и, можем да синтактично завършите заявката за SQL с нещо безсмислено но нещо, което е синтактично неправилен че винаги се оценява да е вярно. Така че, ако този код се използва, за да отговори въпросът вярно или невярно трябва този потребител да бъде позволено да премине, за Отговорът винаги е очевидно става за да е истина, защото това винаги се случва за да изберете нещо от базата данни защото един разбира се винаги се равнява на една. И така, какво е решението? Ами в PSet 7, ние всъщност избегне това всички заедно. Ние ви даваме функция заявка и ние Препоръчвам ви да използвате въпросителни знаци като заместители, подобно в дух на ФОРМАТ е% S, но това, което е ключово за въпросителни знаци тук е, ако действително прочетете functions.php, където ни функция заявка се изпълнява, тези въпросителни знаци са избягали, при което нищо потенциално опасно като един цитат е включен в избягал апостроф. Така че това е, което е наистина се случва, ако използвате функция заявка CS50 или произволен брой безплатни библиотеки трети страни, които направи същото. Няма значение в този случай, в зелено, ако потребителят е въвел в един цитат защото заявката функция, която писахме е Ще добавим наклонени черти преди всяко такова опасно цитат. Така че това не е в Всъщност, щеше да бъде легален. Това е като да пишете в един луд търси парола, която е, разбира се, не става да бъде действителната парола skroob години. Така Takeaway за CS50 е един, абсолютно винаги използвам нещо като функция заявка CS50 е или основната библиотека, което се случва, да се нарича ЗНП. Но никога, никога, никога не правя код като този без да избягат или търкане тъй като те казват, че си входове. И вие ще в някакъв момент вероятно попаднете на някой сайт като този. В действителност, тя изглежда да е случаят като в летища и хотели в места когато имат свободен Wi-Fi достъп, която трябва да влезете, за да, тези сайтове са винаги ужасно изпълнена. И така, един вид забавление у дома упражнения, не за злонамерени цели или повече на забавление на пътя упражнение, е просто да напишете апостроф, един цитат, във формата на някой сайт и да видим какво ще стане. И ако сървъра катастрофи или дава ти някакво съобщение за грешка, тя може да бъде много добре, че някой не е разгадана това. И тогава трябва да се сигнализира правилното органи и да продължат по-нататък. Така че сега вие трябва да се надяваме, разберем малко по-маниак хумор тук. [Смях] DAVID Malan: Вие знаете, че сте маниак. За следващите години, ще си спомнят които Масички Боби е поради тази карикатура тук. Така че имайте това предвид, тъй като ние превключване на контекста за последен път днес JavaScript. Прекарахме относително малко време на синтаксиса на PHP защото това е действително супер подобни на C. И достатъчно добре, JavaScript твърде е супер подобна на синтаксиса на C както ще видим в само за миг и както ще видим по-късно тази седмица в частност. Какво можете да правите с този език, обаче, е още по-мощен, особено с APIs. Но първо бърза обиколка. Така един, в JavaScript, има не основна функция, което е хубаво. Както и с PHP, можете просто да пишете код. Условия изглеждат по този начин. И булеви изрази мощ изглежда така или така. Съществуват ключове, и те може да изглежда така. Четири линии изглеждат по този начин. Докато линии изглеждат по този начин. Направете догдето изглежда така. И тогава масиви изглеждат като това, много подобен на PHP. Но забележете, че в JavaScript вас декларира променлива не с един долар подпише, а не с тип данни, но буквално като казва Var за променлива преди него. Тя също е свободно въвели с това, че има видове, но не изрично ги декларира. И тогава низ, за Например, може да изглежда по този начин, че низ се нарича и в този случай. И тогава един обект. И това ще видим по-скоро. И един обект е може би един от Най-често се наблюдава структури от данни в JavaScript базирани програма, защото тя позволява можете да асоциирате произволна двойки ключови стойности само като асоциативни масиви в PHP и точно като своя собствена хеш таблица или да опитате като реализирахме няколко седмици назад. Така че нека да видим какво всъщност можем да направим с JavaScript. И по-специално, това е пране списък от функции че браузърите са, че ни позволи да се свържете JavaScript в един сайт по следния начин. JavaScript често се използва като от страна на клиента скриптов език. Това не е компилиран. Тя също се интерпретира. Но за разлика от PHP, който се провежда на сървъра, в уеб сървър, или дълбоко вътре в клиенти, JavaScript се различава с това, че обикновено работи в браузъра. Така всеки JavaScript код, който започнете да пишете за PSet 8 или своя окончателен проект, или в реалния свят обикновено се случва да се записват на сървъра, абсолютно в точка HTML или точка JS за JavaScript файл. Но браузърът ще да изтеглите, че JavaScript код към вашата собствена инстанция на Chrome, или IE или Firefox, или нещо такова. И кодът е всъщност ще получите изпълнява вътре в собствения си браузър. Само за да стане това по-реално, нека да видим това в конкретна форма. Ние нямаме представа какво прави този код без наистина да чете през него. Но позволете ми да отида да Facebook.com без да влезете. Позволете ми да отида да се запознаят Element и да отидете, нека да кажем, Network и се презарежда страницата. И ние ще see-- нека смени Презареди Page, за да получите всички искания за ново. И много първи досие, което виждам е CSS, CSS. Тук е първият JavaScript файла, и аз имам няма представа какво прави това, но тук е част от кода на JavaScript който задвижва Facebook. Тя дори не е чак толкова разкривайки Увеличаване. Тя все още е точно толкова безсмислено. Но вие ще видите дори по-долу, има дори повече от тези на JavaScript файлове. Опа. Това е пинг. Нека слезем малко Освен това, по-нататък, по-нататък. Има едно. Има едно. Има едно. Така че, въпреки че Facebook, зад сцени, е написано в участие в PHP и собствен Facebook версията от него, има огромно количество JavaScript. В действителност, всеки от изброените в чата, което правите на Facebook, някоя от актуализациите на инлайн Timeline които се случват в реално време, всичко това се задвижва от JavaScript. Така ли? АУДИТОРИЯ: Аз не съм сигурен, ако това е Facebook, но си помислих, че Facebook разработена тяхната собствена вътрешна език код? DAVID Malan: Те направиха. Така че това е защо аз казвам на вариацията на PHP, наречена Hip Hop, че те действително допълнителни функции за такъв, че когато Mark първо изпълнява Facebook, тя е написана в PHP. И това нещо е останало подобно на предния край език че те използват по-голямата част на техните кодиращи, но не е на език, който е везни особено добре за милиарди на хора. И така, те са добавили свой собствен подобрения зад кулисите. И те използвате произволен брой на други езици за различни части от тяхната инфраструктура. Така че, да, това е вариация на това, което ние днес познаваме като PHP. Така че нека да разгледаме в няколко примера за това, как можем да използваме JavaScript тук. В днешния код, имаме куп файлове, първата от които, нека наречен DOM нула. Така DOM нула изглежда по следния начин. Позволете ми да отида в тази директория и да се отворят domzero.html, на върха на която има вид док декларация, заявявайки, тук идва HTML 5. А сега ето един HTML таг. Тук е маркер на главата. А ето и какво ново днес. Сега имаме таг скрипт вътре в главата на страницата. И това очевидно прави много малко, но известие че съм определил скрипт, с JavaScript. И като настрана, тъй като това е често срещано погрешно схващане, JavaScript няма абсолютно нищо общо с Java, езика че някои от вас може би са научили в АРС. Тя беше по-скоро маркетинг нещо от всичко, езда на coattails на Java години. Но JavaScript, няма нищо общо с Java, точно по същия начин, както и дразнещо, объркващо име. Така че тук е как да декларира функция в JavaScript, буквално се каже, функция, след името на функцията, тогава всеки аргументи, че може да предприеме, точно като в PHP. Оказва се, че в JavaScript, един от най- досадни функции, които съществуват, е предупреждение. Това е малко прозорче, което ще се появи и ще ви предупреди до известна част от информацията. Това е като цяло гледат накриво. Но ние ще го използваме като нашата първо упражнение тук. Обърнете внимание на няколко особености на JavaScript. Единични кавички и двойни кавички всъщност не е от значение. Единични кавички и двойно котировки могат да бъдат разменени, докато в C, трябва да се използват двойни кавички за стрингове, а вие имате две единични цитира за символа. В света на JavaScript, много хора, повечето хора използвайте единични кавички около струни Просто защото това е нещо, стилистични. Но това, което е оператор плюс тук, което не сме виждали преди? АУДИТОРИЯ: Concatenation. DAVID Malan: Concatenation. Така C дори не трябва това. PHP е операторът на точка, който прави това. JavaScript е операторът на плюс, които объркващо е точно като Java. Сега това, което се случва тук? Така че тук е мястото, където основен разбиране на тази снимка ние повърна няколко Преди дни влезе в игра. Помниш ли, когато имахме един прост версия на HTML page-- той просто каза, здравей свят. И тогава ние нарисува дърво надясно, което имаше куп правоъгълници и линии свързването им като родословно дърво. Така че това е така наречената DOM или Object Model Document. И се оказва, че можете да получите достъп правоъгълници в това дърво с синтаксис като следното. Можете буквално да се каже, документ, който е специален глобална променлива в JavaScript програма, която има функция свързани с него, че можете да получите достъп подобно на структура, но вие просто кажа точка и след това името на функцията, получите елемент от ID. Елементът Искам да е очевидно цитирам цитата име. И след това искам да получа неговата стойност. Сега сме се пред себе си. Аз дори не съм сигурен какво всичко това е на път. Нека бързо напред към HTML за страницата, която е супер проста. Забележете, че съм определено Форма тук. Забележете, съм го получил уникален ID, въпреки че не съм използвал този атрибут преди. Но това съществува в HTML. Може еднозначно да идентифицира някои парче на HTML с идентификатор по този начин. Забележете сега this-- Оказва се, HTML подкрепя, на този списък пране преди малко, цяла куп товарачи събития. И това събитие манипулатор казва на представи. На представянето на потребител на това форма, обадете се на следния код. И кода, който ще да се нарича нито екзекутиран е точно това, на гръцки функция, последвано от връщане невярно. Всичко останало трябва да е доста познато. Ето един принос от тип текст, чиято ID, в този случай, ще бъде името. Ние не разполагаме с реален атрибут име това time-- и бутон представи. Така получената страница изглежда така. И в резултат на поведение, ще видите, изглежда по този начин. Страницата ИТ местните домакини казва, здравей Дейвид, едва ли е естетичен начин да се поздравят потребител. Но какво всъщност се случва? Е, помислете какво е това. Това е текстово поле. И в съответствие с HTML тук, съм го дал уникален идентификатор наречен цитат цитата име. Междувременно, аз съм казвал, когато потребителят подава тази форма чрез натискане на Enter или щракнете върху Submit бутон, обадете се на функция, наречена Greet и след това се връща False. Нека разгледаме тези в обратна посока. Забележете, когато кликнете върху Изпращане, за URL на тази страница не се променя. Иконата на браузъра не започва върти. Аз не ходя никъде, и това е буквално, защото казах върне False. Назад Фалшиви къси съединения или спирки поведението по подразбиране на форма. Така че след това ни оставя с този един последен въпрос. Какво Greet направя? Е, очевидно Поздравете призовава функция, наречена Alert, преминава в една дълго аргумент, че е резултат от слепване заедно букет от поднизове, здравей запетая пространство, след това каквото и да се връща. Така документ е като глобален променлива, че корен на дървото, свикването на специална функция, в противен случай сега е известен като метод. Функцията, която е вътрешността на променлива нарича метод вместо функция. Така че елемент от ID. Какво елемент, което правите искате да получите от своя ID? Цитат цитата име и След това специално стойност. Така че с други думи, този код просто намира текстовото поле, чиято ID е името и след това получава своята стойност. Така че, ако аз трябваше да се промени това и да кажа, Дейвин вместо на Давид, и кликнете върху Изпращане, сега ние има поздрав за Дейвин. Добре, така че всичко, фин и добър. Но нека да видим дали можем да направим това малко по-чист, тъй като само писането на код, като това е като цяло ще се гледат накриво. Това ще изглежда по-страшно. Но това, което е първият разлика, че ви се отбележи, в тази версия освен назове смяна на DOM един? Какво структурно изглежда различно за това в сравнение с другите? Така ли? АУДИТОРИЯ: Дали под формата на началото на скрипта сега? DAVID Malan: Да, формата е на върха на сценария за някои любопитни причина. Така че това е първото нещо, че скача в мен. И за щастие най-малко, тази част е идентична. Така че единственото нещо, което изглежда да бъде различен е това. Така че тук е това, което е чист около JavaScript 2. И това го прави трудно да се разбере на пръв поглед, особено за крайните проекти, ако което търсите в примерен код онлайн, но тя се свежда до някои основни синтактични функции. Тук отново е, че глобална променлива документ. Тук отново е този метод или функция който казва получите елемент от ID. Този път искам да получите ID нарича демо. Къде е това? Това е очевидно полето Оттук самата форма. И сега забелязвам, че очевидно, ако се върна този възел от дървото, което представлява формата себе си, не текстово поле, Оказва се, че формата, която възел или правоъгълник от дървото, е това, което ние ще се обадя на един имот, много, много, много подобен в дух на структура в C. Това е просто член на данни вътре в този правоъгълник. Така че аз имам формата тук, и аз съм поставяне, или аз съм възлагане, за да си по Пуснете манипулатор или по-скоро На Предложи имот следната функция. И това е, от момента, най-лудите нещо, което до този момент синтактично. Оказва се, че в JavaScript и в PHP, и честно казано, за този въпрос в C, въпреки че ние не го направите, можете да добави безименен, анонимен или AKA ламбда функции, които нямат име но въпреки това може да се нарече. Така че това, което правя тук, е, че съм възлагане На този Предложи имот, който е вътре в този възел на моя DOM дърво, функция, функция показалка, ако щете. Тази функция не е име, но това не го прави значение, защото ние ще видим в момент, как да го нарека. Когато тази функция се нарича, този код получава екзекутиран, а след това невярно се връща точно както преди. Но забележете какво съм направил. В този момент в история, имам форма. Той има уникален идентификатор, наречен демо. Първа тук, имам таг скрипт който изпълнява следния код. Той се свързва с този възел в на дървото, за да го по Пуснете имот тази функция тук. И само от природата на това как браузъри работят, когато сега кликнете върху Изпращане или натиснете Enter, тази функция ще се нарича. Тя не се нуждае от име, защото който по дяволите му пука как се нарича. Единственият път, когато го е някога ще получите наречен е, когато се представя под формата. Няма нужда за мен, човешкото разработчика, всъщност го наричат ​​никъде другаде. Сега просто като закачка, като че ли това не са били против достатъчно огъване, ние дори може да направи това изглежда по-загадъчен използване супер популярната библиотека наречена JQuery. В действителност JQuery и JavaScript често се вмества. И това, което ние ще направим в сряда е начало използването на този език и тези библиотеки за изграждане на все по асинхронен и динамични приложения като картата получаване приложения, приложения който се актуализира на интернет страницата в реално време, подобно на Facebook или Gchat направи, и вече не се ограничава само до удря Подайте от GET или просто пост сам. Така че ще се видим в сряда. [За възпроизвеждане на музика]