HANNAH Blumberg: Здраво на сите. Ние си оди за да започнете само неколку минути порано бидејќи имаме многу скапо на материјал за да поминете. Јас сум Хана. Јас сум ТФ. Марија се случува да се приклучи ни во само неколку минути. Таа учи делот непосредно пред. Јас ги учат секција право после, па ние ќе за да го задржи до час и половина. Така како што ќе видите тука, имаме доста на неколку прашања што треба да се добие преку, па ние ќе се случува малку брзо. Но, ако во секој момент да се каже нешто пребрзо или што не го разбирате, се чувствуваат слободни да се прекине со прашања. Ние сакаме да бидеме во можност да се направи ова погледни сесија како корисни за сите вас што е можно. Страшни. Па ајде скок право со некои теми дека ние всушност многу, многу кратко покриени за квиз 0 во разгледување седница на квизот 0. Па почнуваат со поврзани листи. Па само да бидете сигурни дека имате некои основни познавања за поврзани листи и да се чувствуваш добро некои од основните операции. Па само да ги видиш, поврзани листи се подобри од низи бидејќи тие може да расте динамично. Па ние имаме таа огромна предност. Видовме ги користат во хаш маси кога ние не знам точно колку работите што се случува да сакаат да се вметне во нашата структура на податоци. За жал, имаме парчиња поврзаните листа целиот меморија, така што ќе не мора да биде можност да се направи постојан пристап време со некој елемент во поврзани листа. Со цел да се најде одреден елемент, ние мора да iterate сите пат од почеток. Значи имајте на ум дека повеќето од основни операции се омега на 1. Па вметнете е само ќе биде на 1. Бришење се случува да се н бидејќи ние мора да одат да го најдете од листата. Пребарување и може да трае, во најлош случај, n. Ние не може да се направи нешто како бинарни пребарување на поврзани листа Бидејќи ние не може само случајно се фрламе на средината на теренот. Кул. Страшни. А малку на купчиња. Оваа, пак, дојдоа на квизот 0, така да треба да биде супер удобно со него. Но за Купишта, бараме од вас да се сетам на магацинот на коцки. И тоа се случува да се биде прв во, трае надвор. Па ние магацинот работите во магацинот, а потоа ако ние се обидуваме да се земе нешто off-- кој ние го нарекуваме пукање надвор на stack-- доаѓаме од врвот. И ако сакаме да се стави нешто во магацинот, ние ја нарекуваме туркање. Па тоа е секогаш се случува да се растат од дното како магацинот на коцки. Страшни. Сме виделе спроведува Купишта со двете поврзани листи и низи. Ако сте за спроведување со низи, сакаш да бидете сигурни дека да ги пратите на како и големината и капацитетот. Па големината ќе биде во тековната број на работи во вашиот магацинот, со оглед на капацитетот е вкупниот број на работи што можете да ги вметнува во магацинот. Кул. Многу слично на тоа, имаме редици. Во овој случај, наместо да се размислува за тоа магацинот на коцки, се мисли на линија. Ова ќе биде прв, а прв. Значи, ако сте спремат за нешто во продавница, ние се надеваме дека лицето на прво место во линија се случува да им се помогне во прв план. Наместо да се каже притисни и поп како што го правиме за магацинот, ние само велат Стави во ред и dequeue. И повторно, ако сте спроведување на ова со низа, ние треба да ги пратите не само на големината и капацитет, но исто така и на главата, која ќе биде на насловната на нашата листа на чекање. Кул. Било какви прашања во врска со било што од тоа? Страшни. Движат право заедно. Добро, хаш маси. Тука е местото каде што почнува да се се навистина интересни. Па хаш табелата е една имплементација на асоцијативна низа. Значи, во основа она што се случи е ги имаме сите овие податоци, и ние ја даде на хаш функција која вели, Добро, ова е местото каде што во хаш табелата припаѓа. Па наједноставниот хаш функција дека ние сме виделе се само велејќи, Добро, да претпоставиме дека сакате да се стави стрингови во нашата хаш табелата. И навистина едноставна идеја може да биде да се каже, во ред, ајде да се најде од страна на првата буква од зборот. За да можете да ја видите тука, ние се банана, ние го стави преку хеш функција, а таа вели, еј, што треба да оди на индекс 1. Значи ние во суштина може да мислам на хаш маса како еден куп на различни кофи. И секоја од овие корпи се случува да се одржи на чело на поврзани листа. И во таа поврзана листа е секаде каде што можеме всушност се стави различни парчиња на податоците. Па нуркање малку повеќе во хеш функција, еве на пример јас само опишани каде што ние едноставно се каже, Во ред, да ги преземе првото писмо на зборот и ние сме ќе го средиме во кофи. Па веројатно, ќе има 26 кофи, по еден за секоја буква од азбуката. Зошто не ја користите оваа одлична хеш функција? Она што го прави не-идеален? Је. ПУБЛИКАТА: Ти си оди да има судири. HANNAH Blumberg: Да, точно. Ви се случува да имаат судири. Значи, тоа е една работа. И ние ќе зборуваме за тоа како можеме да поправете судири во само една секунда. Друг проблем со ова Особено хеш функција е дека нашите различни кофи се случува да бидат на прилично драстично различни големини. Знаеме дека има едночудо повеќе зборови што почнуваат со A од Х, па ние ќе треба да имаат многу неурамнотежен кофи во нашата хаш табелата. Кул. Така да, ајде да се вратиме на точка на судири. Што ќе правиме ако има судир? Имаме неколку различни опции. Така еден, па претпоставувам дека ние се обидуваме да се стави Бери во нашата хаш табелата. И можеме да видиме, о, сакаме да го стави во индексот 1, но банана веќе живее таму. Што ќе правиме? Имаме две опции. Број еден е може да се каже, во ред, постои во индекс 1 нема простор, но ајде да ги бараме преку додека не може да се најде друг отворен самото место. Па ние ќе се каже, во ред, ајде да се стави во место 3. Тоа е една опција. Тоа се вика линеарни љубопитство. И втора опција е велејќи: Добро, добро, ајде да го прават секој од овие корпи да бидат шефови на поврзани листи. И тоа е во ред ако има повеќе од една работа во кофа. Ние сме само ќе ја додадете на предниот дел. Па тука може да се види, во ред, кога се вметнува Бери, ние само зеде банана, вид на се наметнува над малку и фрлиле Бери во таму. И тоа е, исто така, сосема во ред. Ова се нарекува одделни врзувањето. Можете да мислам на тоа како вид на како низа на глави за да поврзани листи. Било какви прашања во врска со хаш маси, хаш функции? Страшни. Дрвја и се обидува. Па дрво е било кој вид на структурата на податоци во кои има некој вид на хиерархија или некој вид на ранг на вашиот различни предмети. И ова ќе стане супер јасно кога ќе видите еден пример. И видовме обиди, заедно со хаш маси, во pset5-- која, пак, целосно фер игра за тоа како уште quiz-- податоци структури што можеме складирање на различни нешта. Во случај на речникот, ние се чуваат еден куп на зборови. Па ајде да ги разгледаме во некои дрвја. Значи ова е пример за едно дрво. Таа има еден вид на структура, дека хиерархиска структура, каде што може да се види дека 1 на овој јазол на врвот има некој вид на ранг погоре 2 и 3, кои се над 4, 5 и 6 и 7, кои се над 8 и 9. Значи тоа е сите ние подразбираме под дрво, за да можете само вид на Слика ова во вашата глава. Сега, ние имаме неколку повеќе специјализирани дрвја. Па еден пример е бинарно дрво. И бинарно дрво е, повторно, само ќе биде структура на податоци со некој вид на хиерархија, но секој од јазлите може да има најмногу две деца. Тоа е каде што зборот бинарни доаѓа. Значи ова е пример за бинарно дрво. Значи тоа е помал категорија на дрвјата. Сега ајде да се добие дури и повеќе специфични и зборува за бинарни trees-- бинарни пребарување дрва, наместо. Па тука е идејата не само што секој јазол да има најмногу две деца, но сите деца на лево се случува да бидат помали и сите деца на право се случува да биде поголем. Па известување во само нашите бинарно дрво, има постои врска помеѓу броеви. Но, во нашето бинарни пребарување дрво, можеме да видиме, во ред, еве 44. И секој број од лево на 44 е помали и се што е на правото е поголем. И која го има на секој ниво на дрвото. Па еве, ова е помал од 22 и ова е поголем од 22. И тоа е бинарни пребарување дрво. Зошто мислиме дека се вика бинарно дрво за пребарување? Она што го прави тоа алгоритам да ве потсетам на? ПУБЛИКАТА: Бинарни пребарување. HANNAH Blumberg: Бинарни пребарување. Затоа што ако сте во потрага по определен број на ова дрво, во секој момент, вие само може да затропа надвор половина на дрвото, што е одлично. И така што ќе ни даде нешто дека многу личи на бинарни пребарување. Некакви прашања? Добро, кул. Во ред, се обидува. Омилен на сите. Значи ова е пример за тоа дека видовме еден куп во класата. И повторно, ова е само уште начин на кој може да се сместат податоци. Во случај на речникот, повторно, ова е само ќе бидат жици. Да видиме што тоа всушност личи на малку пониско ниво. Па ајде да ги разгледаме во еден јазол во Trie. И можеме да видиме, во ред, таму ќе да биде Булова и еден јазол, покажувач на еден јазол. И можеме да видиме дека Рационален број се нарекува is_word. Значи во суштина, тоа е ќе одговараат за овие мали триаголници кои вели дека, ако сте добиле тука, си нашол целиот збор. Знаеме дека "Тјуринг" над Еве ја комплетната збор, со оглед на тоа само на Т-У-R не е збор затоа што ние не се види дека малку делта. И овие мали делта, повторно, одговара на овој is_word, оваа Булова is_word. И тогаш имаме низа на децата. Така што во секое ниво, имаат посебен јазол, и на тој јазол поени до Низа на целата азбука. Па можете да видите, повторно, во овој picture-- сум случува да се задржи скокање назад и forth-- дека таа низа на врвот има еден куп на различни јазли кои доаѓаат надвор од неа. Таа има 26 или 27 ако сакате да се вклучат дополнителни карактер. И ова ни дава начин за чување на нашите податоци на начин на кој може да се гледа на дека можете да се погледне до супер брз. Што е време на пребарување за Trie? ПУБЛИКАТА: [Беззвучен]. HANNAH Blumberg: Да. Во теорија, тоа е постојана време. Тоа е само ќе биде со големина на зборот што сакате да се погледне нагоре. Дури и ако се додаде зилион повеќе зборови за нашите Trie, тоа не се случува да ни потрае било подолго за да се утврди ако даден збор е во Trie. Значи тоа е навистина убаво. ПУБЛИКАТА: Дали ви се само иницијализира таа низа? Што го пропушти точка или два. Можете ли да зборуваме за дека за втор? HANNAH Blumberg: Секако, апсолутно. Добро прашање. Прашањето беше, ние имаат низа тоа е ќе мора јазол ѕвезда за разлика од само јазол, нели? Кул. Па еве што му велиме е нашата низа е само ќе биде покажувачи на други низи. Па тоа е тоа essentially-- вид на се чувствува како поврзани листа на овој начин каде што секоја од овие деца само точка на следниот јазол. И начинот на кој што ние всушност се утврди, еј, во ред, ние сме повтори преку целата збор, е овој збор во речникот, ние само провери овој is_word. Големо прашање. Је. ПУБЛИКАТА: Во ред. Значи она што беше на траење за Trie? HANNAH Blumberg: Секако. Па на траење за Trie за пребарување ќе биде постојана време. Па тоа е само ќе биде бројот на букви во зборот. Тоа не е зависна од големина на речникот или од големината на податоците структура. Значи тука е малку поедноставно пример. Во овој случај, можете да видите дека зборот палка е во речникот и имаш зум, но вие немаат нешто како зоолошката градина. Како би се направи зоолошката градина? Како да ја додадете на нашите зоолошката градина речникот, на нашите Trie? Је. ПУБЛИКАТА: Направете is_word важи и за [Беззвучен]. HANNAH Blumberg: Добро. Па ние би рекол Z-О-О, и тогаш ние би сакате да се провери надвор тоа поле, како и. Одлично. Ајде спореди многу кратко обидува наспроти хаш маси. Обиди се навистина големи бидејќи, како што рече, тие ги обезбедуваат постојана работно време пребарување. Но огромен недостаток е тие се humongous. Може да се добијат смисла, дури и од страна гледајќи во неа, дека тоа се случува да се земе огромна сума на меморија. Па тие се случува да биде многу поголеми од хаш маси, но тие се случува да се даде ни многу побрзо пати пребарување. Значи, тоа е вид на вашиот Губитокот, она што се грижат за, дали тоа е брзината или меморија. Било какви прашања во врска со било што, сите структури на C податоци. Убава. ВО РЕД. Ние ќе треба да се движи кон малку малку на веб развој со Марија. МАРИЈА Златкова: Прекрасна. ВО РЕД. HANNAH Blumberg: Можете да го користам мојот лаптоп. МАРИЈА Златкова: Ница. Добро, кул. Како што се движат сега да се веб- развој, малку поразговаравме за промена на дозволите на датотеки и директориуми така што тие можат да бидат достапни до други корисници, за светот, и така што можеме да видиме како во основа можеме да ги пренесе кога ќе се развие нешто како веб-сајтови дека ние сме главно правеле. Па видовме командата chmod, која е промената на владата, во основа. Тоа е команда Линукс и таа се менува дозволи за пристап на датотечниот систем на објекти. И фајл системот објект е само една листа, датотека, нешто што може да промена на дозволите на. Па да се види пермисии, ние, напишете ја командата ls, листа, -l. И кога ќе напишеш дека, ние обично се види некои дозволи кои изгледаат како вид на оваа пред името на директориумот. Значи г однесува директориум. А потоа имаме три тријади, која во основа се однесуваат на дозволите на било кој корисник, група, или во светот. Видовите на дозволи што можеме има за овие три групи на луѓе се или r за читање, w за пишувам, и X за да се изврши. И ние може да има и оние за групата и светот, како и. На слабо нешто е тоа што понекогаш кога ќе напишете командата chmod, ние би тип некои број кој се состои од три бита. Па ние може да го направи како 777 и дека во основа се однесуваа на додадена вредност на секоја од овие тријади бидејќи R ќе ги проследи до 4, w би се однесуваат на 2, x и ќе се однесуваат на 1, така што кога се додава нагоре, секоја од броеви ќе дојде до кумулативен број на кумулативна вредност помеѓу 0 и 7. Па ние би можеле, исто така, 0 без дозвола на сите. И дека во основа ќе ни даде дозволите за или на корисникот, групата, или во светот. Било какви прашања во врска со ова до сега? ПУБЛИКАТА: Рековте прочитав беше 4? МАРИЈА Златкова: Да. ПУБЛИКАТА: [Беззвучен]. HANNAH Blumberg: То. ПУБЛИКАТА: А потоа, со додавање на сите оние другите ќе укажуваат на вашиот број. МАРИЈА Златкова: Да. Је. Овие се големи прашања. Убава. Следниот, ние скокна во HTML и на малку повеќе за веб развој. HTML така само значи HyperText Markup Language. А тоа е маркап јазик, кој е стандард кој се користи за да се создаде веб-страници. Таа се вика маркап јазик затоа што тоа не е всушност состави. Тоа не се каже како некои законик треба да се изврши или нешто слично. Тоа едноставно е дефинирано, опишува како веб- страница треба да се постави со секој од своите елементи и како тие треба да се погледне за корисникот. Некои од HTML тагови кои ги отиде се следниве. Сите наши HTML документи започна со DOCTYPE HTML. Тогаш ние секогаш имаат HTML таг. Имаме главата и телото. И важно е дека HTML има овој вид на вгнездените структура бидејќи тоа е многу јасно. И тогаш станува многу јасно кога ќе треба да се отвори, а всушност се блиски тагови. А ние секогаш треба да се затвори тагови кои ние сме отворени. И тука имаме некој од видовите на работи пред кои сакаме да ги имаме. Значи ние треба, на пример, насловот на CS50. А потоа ние всушност може да се поврзе на стилот на состојба кој го дефинира како ние стил веб-сајт. Дека е CSS. Ние ќе треба да одат преку него во следните неколку слајдови како и. Во рамките на телото, ги поставивме некои класи и лични карти. И како потсетување, повторно, Лични карти се единствени и класи можат да бидат доделени на повеќе објекти. И тоа само значи дека можеме да го користиме класи и лични карти во рамките на други structures-- така, за На пример, во рамките на CSS фајлови или стил sheets-- да се однесуваат на специфични елементи и во основа да се каже дека ние сакаме да стил или дизајн некој елемент на некој посебен начин. А ние се однесуваат на нив од страна на нивните лични карти и класи. И ние исто така може да се однесува на различни нешта со тагови, како и, но личните карти и класи само да ни даде некои флексибилност и што конкретно ние сакаат да се однесуваат. Па само еден пример. Можеме, пак, во рамките на датотека CSS, каде што сакаат да се дефинираат некои style-- така бои, фонтови, и работи како that-- можеме се дефинира стилот по телото. Така што би го дефинирало за целото телото таг. Но, тогаш ние исто така може да се дефинира стил за #title. И повторно, хаштагот се однесува на нашата Проект и точка се однесува на нашата класа. А потоа и за .info, ние може исто така да го поставите на некои атрибути. И повторно, кога ќе се вратам, имавме класа наречена информации и нашиот проект со наслов. И ние може да се види дека ние се однесуваат до нив од страна #title и .info. ПУБЛИКАТА: Дали би рекле хаштаг [? усвои мене? ?] МАРИЈА Златкова: Жал ми е? ПУБЛИКАТА: Дали би рекле хаштаг [? усвои мене? ?] МАРИЈА Златкова: Хаштаг значи проект, па #title се однесува на она што елементи има овој проект наречен титула. А потоа и точка се однесува на класа. Па .info се однесува овој елемент поради тоа што има информации од класата. Да. ПУБЛИКАТА: Зошто го правите да ги разликуваат во HTML? Зошто ви кажам некои работи се Лични карти и некои работи се класа? МАРИЈА Златкова: Тоа е само до you-- HANNAH Blumberg: Повторување на прашањето. МАРИЈА Златкова: Ох, извинете. Зошто ни се прави разлика одредени елементи како лични карти и други елементи како класи? Тоа е само затоа што тоа е навистина често избор за дизајнирање. Тоа ви дава многу флексибилност во се во можност да се каже сакам оваа специфична точка да се има овој проект, бидејќи тие сакаат да се направи многу работи со него, а јас само сакате да се дефинира стил, одреден стил или боја што и за таа ставка. И начинот на кој се прави тоа е само давање на тоа за лична идентификација. А потоа ако сакам да имам неколку различни предмети ја презеде дека, наместо случува и поставување their-- наместо тоа го правам со таг, бидејќи таг ќе поставени на мобилен за целиот таг за секој пат кога се користи таа ознака, можете да го поставите на класа на повеќе објекти. А потоа само пристап до таа класа и да каже Сакам да стил на оваа класа на тој начин. И повторно, класа може да да се повеќе различни елементи и проект треба да биде уникатен. Големи прашања. Било какви други прашања? Добро, неверојатна. Повторно, ова е како овие селектори се референцирани во CSS, со хаштагот, со точка, или без ништо за доделување на стилот на некоја ознака, како тело. И тука имаме општата Синтаксата како тоа се прави. Да се ​​повтори некои од најдобрите практики за HTML и CSS, ние треба да се, повторно, затворете ги сите HTML тагови кои ги отворите. И она што ние ви препорачува направи за вашиот конечниот проекти, како и за CS50 финансии, е да се направи сигурни дека сите на вашиот HTML потврдува. И тоа е направено со W3 Валидаторна. А потоа она што го правевме и Што ви препорачуваме прави се одвојува стил, па СЅЅ од Селектирај HTML. Па ако нешто се однесува на тоа како вашата страница ќе изгледа визуелно и како тоа се случува да биде изменета треба да оди во некој документ CSS. А потоа вашата Селектирај велејќи како работите се во однос на секој друг е HTML, и дека треба да се оди во внатрешноста на HTML документи. Некакви прашања? Мхм. ПУБЛИКАТА: што точно се случува на со валидација на страницата кога сме оценување на HTML дека [Беззвучен] создал? МАРИЈА Златкова: Значи what-- што мислите. Значи, што точно се случува на со валидација страница и зошто не ни треба да го направите тоа? Во суштина, ние треба да го направи тоа бидејќи многу пати, вашиот интернет пребарувач, ако не се затвори таг или нешто слично, Вашиот интернет пребарувач се уште ќе донесе својата страница и се уште може да функционира, но тоа е најдобрата практика за да бидете сигурни дека сте, пак, ги затвори сите ваши тагови, дека сите ваши елементи се начинот на кој тие треба да биде, и во основа тоа е тоа од страна на конвенции кои се претходно наместени. Тоа е тоа, повторно, само нешто што треба да биде учење да се прави, што е спротивно на се има sloppier код и работи како што. Је. Извини. Мислев дека се подигање на раката. ПУБЛИКАТА: Не, јас бев само [Беззвучен]. МАРИЈА Златкова: Во ред. ПУБЛИКАТА: Ви благодарам. МАРИЈА Златкова: Се разбира, ви благодарам. Значи, повторно, се случува во тоа како информациите се пренесуваат и комуникациски модели за пренос на информации. TCP / IP. TCP само значи Пренос Протокол за контрола и IP се однесува на интернет протокол. И дека само се однесува на начинот на кој податоците се доставени. Ако имаме некои податоци кои треба да се достави до you-- така ќе се направи барање за одреден сервер. На пример, кога ние се обидат да пристапат cs50.net, ние се направи барање за на CS50 сервер и ние се види дека ние сакаме да се добие овој вид на информации. А потоа се базира на овој протокол за тоа како е дадено на оваа информација, серверот дава информации назад кон нас, на клиентот. А потоа ние сме во можност да ја видите информации за оваа страница а потоа го користат. Па тогаш Хипертекст Протокол за пренос е само уште еден протокол или сет на конвенции кои се дефинира како веб прелистувачот и веб серверот треба да се комуницира. И ставање сето ова заедно, HTTP, повторно, само да се дефинира како што е дефинирано овој хипертекст од страна на HTML дека ние сме биле тоа работа, како тоа треба да бидат доставени до вас и како што само податоци кои се доставени до вас добива за вас. И затоа, ако вие момци се сеќавам од една класа, имавме многу барања и имавме многу синтакса за овие барања, дека ние сме ќе одиме во текот моментов. Значи, повторно, кога ги испраќаме на барање до сервер, ние треба да се дефинираат неколку работи. Значи ние треба да се најде тип на барање, дека ние сме поставување. И повторно, имаме, на пример, ГЕТ е еден вид на метод кои ги имаме во нашето барање. А потоа HTTP / 1.1 е само протокол кој ние сме со користење моментов. Поголемиот дел од времето, тоа ќе според протоколот, дека ние сме со користење на. Значи, ако имате прашање како што на вашиот квиз. Тоа е конвенции дека имаме досега. Обратна коса црта се однесува на она што вид на работи на кои сме се бара. Тогаш, нашиот домаќин е, на пример, во овој случај, ние се обидуваме да се оди на google.com. Значи ова е вредност за домаќин. Ова е еден вид на барање кои би можеле да бидат испратени. А потоа еден вид на одговор кој би можел да бидат испратени, пак, врз основа на овој протокол, е повторно, HTTP / 1.1. Значи тоа е HTTP верзија повторно. 200 Во ред е само код на статусот. И дека во ред е само фраза врз основа на тој статус код. А потоа и на Content-Type се однесува на видот дека се враќа за вас дека е за таа веб страница, која ќе примите и дека вашиот интернет пребарувач може да го направи подоцна. А тоа е text / html. ПУБЛИКАТА: Што значи 1,1 значи? МАРИЈА Златкова: Тоа е само Верзија of-- ох, што значи 1,1 значи? Тоа е само верзија на HTTP верзија на протокол кој ние сме со користење. Големо прашање. Други прашања? ПУБЛИКАТА: Дали би можеле да ги сумира Content-Type вистински брз? МАРИЈА Златкова: Значи тоа е она што на серверот. од видот на information-- она ​​што е Вид на содржината беше на прашањата. Така што беше од типот на информации што ќе се вратам од серверот, од типот на податоците кои операторите на прелистувачот може да потоа направат што го користите. ПУБЛИКАТА: Дали е тоа она што овој протокол е ти го кажувам за да направам? МАРИЈА Златкова: Жал ми е? ПУБЛИКАТА: Дали е тоа она што го изјавуваат протоколот? МАРИЈА Златкова: На protocol-- ПУБЛИКАТА: --what на Content-Type е или what-- МАРИЈА Златкова: Протоколот се базира on-- она ​​што е протоколот ти го кажувам? Тоа е само начинот на кој дека оваа информација беше доставен до вас врз основа на она што вид на протокол беше доби оваа информација доставени назад кон вас. Дали тоа има смисла вид? HANNAH Blumberg: Можете можат да мислат на протокол како a-- Мислам дека професорот MALAN го опиша во класа, како вид на како a-- тоа е како еквивалент на човечки ракување. Каже, како, еј, јас сум барање и јас знаете како да се справи со HTTP на верзија 1.1. И тогаш серверот вели: О, во ред, I-- и едните и другите. Јас, исто така знаат како да се справи со HTTP / 1.1. А јас ќе одам да се даде ви се врати некоја содржина. Во овој случај, тоа се случува да биде од типот text / html. Така, тоа е вид на само начин од нив за communicating-- МАРИЈА Златкова: Тоа е само се потврдува дека сте и следење на истите протокол и дека двете клиентот и server-- така вашиот интернет пребарувач и server-- вид знаете што сте зборува за и имаат Конвенцијата за полагање на податоци. ПУБЛИКАТА: Значи Content-Type part-- на текст Content-Type / html-- тоа е посебен дел од истата порака? Или тоа е дел од, да речеме, 200? Дали 200 им каже дека или is-- МАРИЈА Златкова: 200 вели дека сето тоа отиде во ред. И тогаш типот на содржина е вид на посебен дел од истата порака, и велејќи дека она што можам се вратиле има овој вид на text / html. Тоа е само давање на повеќе информации. Имаат нешто да додадете? ВО РЕД. Било други прашања во врска со ова? Страшни. Па некои други HTTP-статуси кои би можеле да добиете во прилог на 200 во ред, оние што ги имавме досега можеби можеби многу се 403 и 404. Па 404, ако се обидува да пристап до нешто што не постои. Така на пример, во вашата CS50 финансии psets, ако биле рендерирање quote.html а вие не мора оваа датотека, но наместо тоа, сте имале quote.php, дека ќе резултира со 404 Не е пронајдено затоа што на датотеката не може да постои. За 403 забрането, дека се однесува на дозволи. Па ако некои датотека не може да се чита од страна на свет, може да добие 403 вратени. Некои други кои можеби get-- 301 Преместена Трајно; 302, е пронајдено; 304, се менуваат; 400, Бад барање; а потоа внатрешна Грешка на серверот за 500 и 503, Сервисот е недостапен. Да. ПУБЛИКАТА: Дали ќе се очекува да запаметат сите оние статуси? МАРИЈА Златкова: Ќе морам нив на вашиот измамник лист. [Смеа] ПУБЛИКАТА: Дали сме се очекува да знаеш што предизвикува секој од нив? МАРИЈА Златкова: тие? HANNAH Blumberg: За оние кои ги имаме кандидира into-- така што прашање was-- МАРИЈА Златкова: Дали тие се очекува да знаете што секој еден од овие статус шифри може да бидат предизвикани од страна? Така и за оние кои ние сме се користи и се стрча во, би рекол, да. Значи ние сме дефинитивно видел 200 OK и предавања во psets. Ние сме виделе 403, 404. За други лица? HANNAH Blumberg: Јас би велат 500 чини фер игра. МАРИЈА Златкова: 500, да. HANNAH Blumberg: Да. Само да има општа смисла на она што ги предизвикува. И исто така, само од страна на овие имиња, можете вид на како да се направи образовани погоди како за тоа што всушност ги предизвикале. На пример, постојано се движи, веројатно датотеката била преместена трајно. ПУБЛИКАТА: Но, по претходно испит, имаше толку како да ти се очекуваат од нас да одговориме на ова? HANNAH Blumberg: Тоа беше во вредност од нула поени. На прашањето за 418 на чајник е технички статусот HTTP, но вредеше нула поени. Очигледно, вие не сте очекува да ги знаете. ПУБЛИКАТА: Дали е реално една? HANNAH Blumberg: Тоа е реална еден, но тоа не значи ништо. Тоа е само шега. Интернет луѓе се смешни. МАРИЈА Златкова: Велика прашања, момци. Било какви други прашања? ПУБЛИКАТА: Што е внатрешна грешка на серверот? МАРИЈА Златкова: Внатрешните грешка на серверот само значи дека сте биле не можејќи да комуницира со серверот поради некоја причина. Па тоа не е нужно нешто што мора да се направи со клиентот или нешто слично. Не знам на која било специфична пример дека ние сме се качил над да се објасни, но да. HANNAH Blumberg: Секако. Така на пример, како ајде велат дека се работи на микс и серверот на Google отиде надолу за некои причина, на прекинување моќ, да речеме. Тоа би било внатрешниот сервер грешка или некој вид of-- ви се допаѓа нема да добиете одговор назад. МАРИЈА Златкова: Да. Тоа е само кога сте не можејќи да комуницира со серверот поради некоја причина, бидејќи на тоа оди надолу или од други причини. Па скокање во PHP. PHP, за разлика од HTML, што е програмски јазик. И почнавме да го користат тоа, бидејќи тоа е многу корисни за веб развој. Ние прв пат го употребил во CS50 финансии. А во основа тоа ни помага да се донесе заедно оваа Селектирај, дизајнот, и како ние всушност ги користат информациите за прикажување на работите на веб-страница. Па PHP себе значи PHP Хипертекст препроцесори, па тоа е рекурзивен backnorym од себе. И отворање на тагови за PHP ние лево и десно стрелките со прашалници и PHP. Па веќе видовме еден куп на него. Сега, ние сме само ќе одиме во текот некои основни работи за тоа. Па со PHP, променливата имиња се започне со знак за долар. Ние не се определи, повторно, променлива напишете повеќе. Исто како што направивме со Ц, ние не треба да го направат тоа. Ние може да го направи еден куп на различни работи со променливи. Можеме да ги стави заедно од нив concatenating со точка нотација, што ние не може да го направи во С повторно. Повторно, имаме малку повеќе флексибилност со PHP во однос на променливи. Повторно, ние не го имаат главната функција. И PHP се толкува што е спротивно на состави, Па колку што направи за C датотеки, ние не треба да го стори тоа за PHP. Туку начинот на кој јазик се води само по себе, тоа се толкува. А потоа лабаво отчукува само значи дека ние не мора да се определи на променлива Вид и видовите променлива се подразбираат време на извршувањето. ПУБЛИКАТА: Но, тоа што го направи значи од точка сплет? МАРИЈА Златкова: Секако. Кога сакаме да се стави работите together-- па ако имавме некои променливи кои имаше вредност од 3 и да се случи уште едно променлива која имаше вредноста на стрингот, ние би можеле да се стави на променливи заедно со ставање на точка во меѓу нив и ги concatenating. Или би можеле да се создаде променлива наречена име и го стави заедно со concatenating две жици. Значи, ако ние имавме низа во двојен цитати и ќе стави точка по него, и тогаш имавме друга низа, дека ќе создаде стринг заедно. ПУБЛИКАТА: Во ред. МАРИЈА Латвија: Дали тоа беше јасно? ПУБЛИКАТА: Да. МАРИЈА Златкова: Во ред. Да. ПУБЛИКАТА: Кога ќе се каже толкува наместо состави, зборуваш ти не треба да биде како специфични кога станува збор за PHP наспроти Ц? МАРИЈА Златкова: Кога велиме толкува како што се противат да се состави, што значи тоа? Па тоа значи дека ние не треба извршна датотека да се кандидира на PHP. Тоа значи дека тоа работи како тоа оди. Дали тоа има смисла? А малку повеќе. HANNAH Blumberg: Значи вие може да се мисли на преведувач како уште една програма која е одговорна за одење линија по линија преку PHP а всушност негово извршување, што е спротивно за сето тоа се сведува на составувањето на бинарни. Тоа всушност не значи ништо за тоа како одредени ние треба да бидеме. Ние се уште треба да бидат прецизни, и не заборавите запирка, и бидете сигурни дека имате знакот за долар, и работи како што. Добро прашање. МАРИЈА Златкова: Да. Така ред по ред, како наспроти со C датотеки, ние треба да се направи целата финалето пред ние всушност може да го работи. Тоа е и главната разлика. Но, повторно, не можеме, навистина да биде помалку специфични. Па низи во PHP претставуваат всушност нареди карта. Па низи соработник вредности за клучеви. На два начина да се изјаснат за низа, врз основа на оваа синтакса, можеме да бидеме поексплицитни во велејќи имаме низа и ние имаме овој key1 која карти да оваа value1, value2 key2 која мапи. Или само можеме да се создаде низа што содржи самата вредности а потоа и на копчињата се Разбирливо на некој начин. Било какви прашања во врска со ова? ПУБЛИКАТА: Што би ги копчињата биде во втората пример? 0, 1, 2, 3? МАРИЈА Златкова: На пример, тоа е само клучеви во оваа не мора направи разлика. Тие само може да се дефинира како користите вредности во него. Значи, ако ние имавме foreach јамка во PHP, кои би ни овозможи да одат низ сите вредности, можеме да одат низ сите вредности, дури и ако имавме или не е дефинирано некој клуч во рамките на сајтот претходната синтакса. Па дури и со овој вид на низа, ние се уште може да имаат foreach јамка што оди преку секој на вредностите во клучот во низа. Па на синтаксата на foreach јамка, да започнеме со ред. Оваа променлива $ ТП е нашето вистинско низа дека ние што е дефинирано во претходниот слајд како вредност која буквално оди преку секој од вредности, оглед на тоа дали имавме клуч или не. И тогаш може да се направи нешто со вредноста во внатрешноста на јамка foreach. Значи, повторно, ако имавме низа како овој овде created-- па ние имаме клучот на foo вредност бар, клучот на Баз и вредноста на qux-- можеме да имаме foreach јамка што минува низ низа како клучна вредност а потоа направи нешто со клучот и / или вредност. Но, ние не мора секогаш да се направи мора да имаат foreach јамки кои минува низ низа како клучни картата за да вредност. Ние може да оди преку foreach јамка низа како вредност. HANNAH Blumberg: И јас мислам to-- беше вашето прашање, што е имплицитна индекс? ПУБЛИКАТА: Kinda. МАРИЈА Златкова: О. HANNAH Blumberg: Да, да. Значи, во основа, ако не се определи клуч, тоа се случува да биде 01. МАРИЈА Златкова: Да. Исто како и со Ц, тоа е нула индексирани ако не се определи клуч. ПУБЛИКАТА: Жал ми е. Би можеле да се обидете зборување малку погласно? Имам малку проблеми со слухот сè. МАРИЈА Златкова: Жал ми е. Да, се разбира. Значи сакаш да ме да се оди во текот на овој повторно? Или е this-- ПУБЛИКАТА: Значи во однос на претходната slide-- ако може само да се вратиме за една секунда. МАРИЈА Златкова: Се разбира, жал. ПУБЛИКАТА: Значи второто Низа тука не се чини дека имаат вредност на клуч, на некој начин [? причинско-последичните односи. ?] МАРИЈА Златкова: Точно, во право. ПУБЛИКАТА: Па како ли тоа работа кога ќе се каже тоа е за сите или никој. За мене, тоа изгледа како a [? foo?] веќе. МАРИЈА Златкова: Да, да. Значи, повторно, ова е нареди карта во оваа смисла, дека таму се разбрани, на пример, индексите тука може да се сфаќа како 0, 1, 2, 3. Повторно, тоа е оние кои имаат индекси е нашиот еквивалент на постоење на копчињата мапирани вредности. Значи, ако нашите клучни 0-- беше жал. HANNAH Blumberg: Не, има е креда до тука. Тоа е всушност навистина убаво. МАРИЈА Златкова: Тоа е одлично. ВО РЕД. Значи, повторно, 0 $ ТП ќе биде клучот за вредноста 1. 0 ќе бидат клучот за вредноста 1. ПУБЛИКАТА: Жал ми е. Тоа е невидлив. HANNAH Blumberg: Добро, е важно. Креда е лоша идеја. Јас му го одземе. Можеш да мислиш за клучеви како 0 карти да се на вредност 1. МАРИЈА Златкова: Да. Па ова е 0, ова е 1, 2, 3. Овие можат да бидат вашите клучеви. Можете да мислам на нив as-- је. Значи наместо експлицитни копчиња, тие се вид подразбира како индекси со почеток во 0. Креда не помогна. Је. ПУБЛИКАТА: За јамка foreach, ако сакаме да ги видите како вредност, тоа само би автоматски индекс на 0? МАРИЈА Златкова: Да. Тоа ќе поминат низ секоја од вредностите. ПУБЛИКАТА: [Беззвучен] како 0 или дека само ќе го направи 0? МАРИЈА Златкова: Вие ќе треба да се каже како знак за долар, а потоа некои променлива име, вредност. ПУБЛИКАТА: [Беззвучен]. МАРИЈА Златкова: Жал ми е? ПУБЛИКАТА: Жал ми е, јас сум само се обидува да се сети. Како би го направил тоа ако може да го направи тоа автоматски индексирање е само 0 од? МАРИЈА Златкова: Па, како ќе го направи тоа ако не имаат специфични клучни имиња? ПУБЛИКАТА: Да. МАРИЈА Златкова: Вие само ќе define-- само да кажам себе си како некои име. Значи во вашиот psets, вие момци би можеле се сеќавам foreach $ ред, како и $ редови, ние потполно се создаде оваа $ ред велејќи ние сакаме да се оди преку ред, како и $ редови. Иако немавме ова експлицитна $ редови дефинирано, ние само може да оди и да велат дека ова може да биде нашиот клуч, и само да поминат низ секоја од вредностите. ПУБЛИКАТА: Така е со вредност нова променлива ние сме создавање за да ја запази [Беззвучен]? МАРИЈА Златкова: Па тоа не е инхерентно нова променлива. Тоа е променлива која се однесува на во внатрешноста на низата на секој од нив. HANNAH Blumberg: Тоа е нова променлива име. МАРИЈА Златкова: Да, тоа е нова променлива име, но тој не го inherently-- је. Тоа е само нова променлива дека можете да го направите тоа. Па само како ние го сторивме $ ред како $ редови, редови беше нова променлива со името што го може да се создаде во нашите foreach јамка. Тоа не мора да preexist пред тоа. ПУБЛИКАТА: Дали би можеле да поминат низ логика за секој, со користење на пример таму? МАРИЈА Златкова: Мм. Извини. Еве на пример. Сигурен. Па за секоја array-- така тоа значи дека оди во оваа низа како клучни value-- што се случува да поминат низ оваа низа и прв оди и да добијат foo, на Клучот foo и бар на вредноста. А потоа на вториот повторување на за телефонска линија, тоа се случува да одат преку и да ги преземат клучните Баз и qux вредноста. И тогаш може да се направи нешто со еден од нив или двајцата. ПУБЛИКАТА: Значи идејата зад имаат клучна точка на вредноста, она што ќе се заокружи пристап? МАРИЈА Златкова: Која е идејата да има клучна посочувајќи да вредност? Тоа е само уште конвенцијата, друго начин на одење низ низа и да бидат во можност да пристапите или клуч или вредност, или и двете и да ги искористиме. ПУБЛИКАТА: Која е улогата на наложи foreach работи во? Значи, ако веќе треба да се додаде елементи на низата подоцна, тие ќе бидат први foreach нарекува во низа, или тоа ќе биде подоцна? МАРИЈА Златкова: Значи она што е редоследот дека foreach јамка оди преку низа во? Тоа оди преку првата елемент на последниот елемент, до последниот додаде елемент. Ако додадете елементи подоцна, тие ќе се accessed-- првите елементи би да се пристапи како прв елементи на низата, а потоа ќе поминат низ секоја од елементите што е вид на ordered-- не подредена, но начинот на кој тие се ставени во низата. ПУБЛИКАТА: Значи нови елементи се додадени подоцна? Па тие се added-- тие ќе бидат последни во [? повторување. ?] МАРИЈА Златкова: Нови елементи can-- Во суштина, кога се додаваат нови елементи, тие се додава на крајот на низата? ПУБЛИКАТА: Да. МАРИЈА Златкова: Јас верувам дека е така. Да. А потоа со вашиот foreach циклусот, откако сте додале нови елементи и да одите преку нив, новите елементи би биде accessed-- новиот елемент, ако тоа е додаден, тоа ќе се пристапи последен. ПУБЛИКАТА: Можете ли само им даде пример на нешто што ќе [Беззвучен] со нешто со вредноста како [Беззвучен] или вредност, како тоа, како што би формат, кој? МАРИЈА Златкова: Секако. Може ли да се даде пример на она што ние би го направил со вредност? Значи она што вие момци може да биде запознаен со е дека ние сме го преживеале низа и во основа печатени секој од елементите, на пример, како дел од подредена листа или пак нешто што. Дали тоа има смисла или не сакаме to-- ПУБЛИКАТА: Можеме ли да се печати овие вредности надвор? МАРИЈА Златкова: Да, ние би можеле да се печати а потоа и во основа $ вредност, бидејќи во таа специфична вредност, ние би биле печатење на вредноста во него. Значи, ако бевме на нашиот прв повторување од неа и испечативме $ вредност, ќе биде печатење бар. ПУБЛИКАТА: Дали постојат исто така и за јамки во PHP или само foreach јамки? МАРИЈА Златкова: Има исто така за петелки во PHP. И нивната логика е најчесто исто како она што сте биле навикнати. ПУБЛИКАТА: Значи, неговата вредност е нула. МАРИЈА Златкова: Тоа е како исти. Је. ПУБЛИКАТА: Јас сум само ќе прашам. Па кога ќе се изјаснат за низа, вие не треба да да се каже она што големина тоа се случува да биде, што значи дека може да се само додадете и да однесе елементи [Беззвучен]. МАРИЈА Златкова: То. Да. Токму така. Кога ќе се изјаснат за низа, ние не треба да се каже она што големина е тоа, па ние може само да додадете елементи врз него подоцна. Уште прашања? Така доведување PHP и HTML заедно, она што сме го seen-- добро, на пример, во овој пример, ние имаме HTML форма која има поле за внесување. И полето за внесување е само името и тогаш тоа има копчето Submit. И кога ќе притиснете на Достават копче, во нашата hello.php датотека, бидејќи методот за форма е добијат, ние може да пристапите до што и да е во името со овој добијат глобалната променлива дека is-- синтаксата за тоа е $ _GET. И потоа можеме да пристапите без оглед на корисникот влез во внатрешноста на таа форма за името со впишување на името на тоа поле. Какви други прашања или било прашања во врска со овој специфичен пример? ПУБЛИКАТА: Каде е PHP? МАРИЈА Златкова: тука. Значи ова е нашата отворањето таг за PHP. ПУБЛИКАТА: Ох, во право. МАРИЈА Златкова: Да. HANNAH Blumberg: На = е стенографија за ова е PHP и само ехо. ПУБЛИКАТА: О. МАРИЈА Златкова: Да, ми е жал. Јас треба да се направи тоа јасно. HANNAH Blumberg: Печати. МАРИЈА Златкова: Тоа е само во функција која ни овозможува да се печати нешто. Големо прашање. Па going-- да. ПУБЛИКАТА: Има ли ќе биде доста малку на страна кодирање на PHP и HTML на квизот 1? МАРИЈА Златкова: Не може да има фер износот на толкување на PHP и HTML, не мора како огромна количина на кодирање, иако можеби ќе треба да се напише foreach јамка, иако, за телефонска линија. Некој од јамки кои ги покрие тука е фер игра. И тоа е најчесто тоа. HANNAH Blumberg: Јас би се подготви. Во истиот начин на кој ние ќе ви побара да пишувам еден куп на C функции на квизот 0, Јас би бил подготвен да го стори истата во PHP и JavaScript. МАРИЈА Златкова: Да. HANNAH Blumberg: Јас би рекол на little-- како ние не сме случува да направи да се напише огромна HTML страница само затоа што тоа е малку досадни, но може да има делови. Тоа е сосема фер игра. Како мали HTML страница, целосно фер. ПУБЛИКАТА: Во ред. Како за во JavaScript, како? HANNAH Blumberg: Да. Фер игра го вклучите Javascript-е. МАРИЈА Златкова: Да. Кој е сосема фер игра. HANNAH Blumberg: Ние ќе добиете како и на оној во 10 минута. МАРИЈА Златкова: SQL, повторно, Структурно јазик за пребарување. Тоа во основа ни овозможува да управуваат со податоци во релациона база на податоци за управување со систем. Дека само во основа значи дека имаме некаде за чување на некои податоци што ние би сакале да користат во веб-сајт или во некоја друга форма. И тогаш имаме прашања за да се добие информации од нашата база на податоци, или да го внесете информации за нив. А многу од заедничките ones-- Ажурирање, Insert, изберете, и бришење. Така и за ажурирање, ова е синтакса за ажурирање на податоците во базата на податоци. Ажурирање на оваа табела се нарекува масата велејќи СЕТ, можеме да го поставите на некои вредности во сите редови на еднаков нешто друго. За да можеме да ги наведат и некои специфични записи во кои сакаме да ги менувате и кои можат да се користат каде. И ние може да се каже дека ние сакаме да се само промените некои редови каде што куќата за, ако имавме маса на студенти и сите студенти имаа куќа, па ние ќе се измени само некои вредности каде куќа еднаква курирска, на пример. За Insert, ние може да го вметнете одредени вредности во табелата. Па вметнете во табелата, а потоа и на вредности, а потоа и во загради, ние наведете кои вредности што сакате да ја внесете. Па вметнете во табелата, col1 и col2, вредноста е VAL1 и val2. Па оваа основа се внесува нов ред во маса содржи вредностите на 1 и 2 Во колоните 1 и 2. И тогаш ние ќе треба да се премине брз пример за тоа како тоа изгледа како во нашата база на податоци за малку. Но оваа последна пребарувањето што можам дека ние ќе треба да поминат, Изберете, тоа само ни овозможува за избор на податоци од табелата за да евентуално го користат потоа. И начинот на кој ќе го направите ова е дека ние само да го сместат во некоја променлива. А потоа ние веројатно може да ја користи повторно. Па изберете ѕвезда значи изберете сите. Тоа е само на стенографија За избирање на сите. ОД КАДЕ маса, ние сме во потрага за некои специфични услови, Значи, каде што е еднакво на колона нешто, на пример. Ако ние само сакав да изберете сите од маса, ова само избира сите колони и сите редови од табелата. А потоа избришете од маса Каде што полковникот еднаква на нешто, ова само ќе избрише некои ред, од нашата маса каде што имаме некои специфични услови. Во овој случај, условите се колона еднаква нешто. Значи само еден брз пример за тоа. Ако имаме оваа табела, токму тука и ние вметнете ја во табела, овие вредности, што ќе ја внесе нов ред. И дали сме се авто-прираст, ова ќе само подигање нашите ID 0-1 за да се 2. Ако сите ние избрани од страна на студентите, тоа само да ги враќа сите области и сите редови. Каде годинава е поголем од или еднакво на 2016 година, дека само ќе се врати Ана и јас. А потоа, ако ние само избраните година име и годината од страна на студентите каде што куќата е Кабот куќа, дека би, пак, да се вратите на Ана и јас. Тогаш ако се брише од студентите каде име е еднаква на Роб, кој би го избришете целиот ред. А потоа, ако ние се постави на име, студентите Ажурирање СЕТ име е еднаква на Daven КАДЕ куќа е еднаква Кабот куќа, што се случува да одат на овие редови, а потоа го ажурирате името. А потоа и неколку видови SQL податоци Char, VARCHAR, ИНТ, и плови. Овие се фер игра. Јас ќе одам повторно и бидете сигурни дека знаете и да ги имате на вашиот измамник лист, она што секој од тие ликови се користат за, она што што ги користат на вашиот psets, и бидете сигурни дека сте запознаени и удобно со обврската да се избере од различни типови на податоци во вашиот pset. Да. ПУБЛИКАТА: Кои беа складирани таа маса? Да, што ќе биде зачувана оваа табела? МАРИЈА Златкова: Па, токму сега, тоа не е се чуваат. Како и да е, што ќе биде зачувана оваа табела? Но, тоа може да се чуваат во SQL база на податоци. ПУБЛИКАТА: А каде е SQL база на податоци? Во компјутерот, онлајн некаде, на серверот? МАРИЈА Златкова: Тоа може да биде број на различни нешта. HANNAH Blumberg: Имаме interfaced со SQL маси претежно со phpMyAdmin. Па ние би можеле да побараат некој сервер да ги чува за нас. Ние би можеле да ги чувате на нашите сопствен компјутер. МАРИЈА Златкова: Тоа само зависи од како сакате да го направи тоа за себе. Но, ние сме биле за чување нив, како што е споменато Хана, на phpMyAdmin, кој е онлајн. А потоа и на начинот на кој ние ги користиме PHP и SQL, ние ја продавницата во некои променлива она што го достапен за. Значи, ако ја изберете сите од историјата каде user_id еднаква на Session ID, што ќе изберете сите редови за конкретниот човек кој е најавен од историјата маса и да ги сортира во редови. А кул е да знаете таа функција за пребарување е CS50 штити од SQL инјекција тагови. Тоа само значи дека тоа го прави сигурни влезниот дека е внесен е точна и дека лицето кое го влегува влезниот не се обидува да го внесете некои малициозен код или да се откажат од нашите маси или избришете сè во внатрешноста на нашата веб страница. Краток преглед на Модел погледнете контролорот модел, тоа е само начин на организирање и размислување за кодот. Тоа е, повторно, парадигма за дизајнирање. Што значи тоа е дека ние can-- и тоа е добра пракса да ги разделиме различните делови од нашиот код и она што тие контрола во овие три парадигми. Така, нашето мислење е најчесто нашите шаблони, нашиот распоред, начинот на кој дека ние се постави како ќе изгледа нашиот код. Тоа е главно нашата CSS фајлови и начинот на кој дека ние се дефинира на дизајнот на нашиот код, основа. Нашите контролер е најмногу што ние сме прави со PHP датотеки. Значи, повторно, во соработка со информациите што ги имаме и дефинирање како што информации ќе се користат, а потоа поминува таа информација или кон погледите или модел. И моделот, начинот на кој ние сме бил со користење на е е нашата база на податоци, Значи, каде што нашите информации чуваат, така што има некаде да живеат во, и некој од законик, што се однесува на начинот на кој дека ние се добие таа информација или начинот на кој ние се ажурира таа информација. Па во моделот MVC, HTTP барања се испратени до веб серверот. Потоа, го интерпретира на контролорот на барање од страна на корисникот а потоа ги верификува корисник влез. Тоа е опционални дека имаме контролорот комуницираат со модел, па нешто како нашата база на податоци или некои други функционалност кој релеи информации. А потоа конечно, контролорот ги пренесува податоците на погледот така што да може да биде изречена и дека може да да станат видливи за секое лице пристапува на веб-страница. Некакви прашања? Страшни. Значи, повторно, на моделот, неговата функција, повторно, е упорни складирање на информации, раководење и организирање на податоците. И она што сум го видел, така До каде е MySQL база на податоци и било какви датотеки со податоци, кој може да се користи. Поглед, презентација на информации, за да на корисникот, на графичката околина, или кориснички интерфејс. А пример за тоа е HTML. И тогаш би можеле да имаат минимални PHP. Па за телефонска линија која iterates повеќе податоци кои се отпечатени е дел од погледот, како спротивно на контролорот. А потоа и многу од нашите PHP датотеки спаѓаат во категоријата на контролорот. Тоа едноставно се справува со барањата на корисниците и зема информации од моделот. Скокање во документ Објект модел, тоа само се однесува на начинот на HTML документи кои се организирани. И тие се организирани во дрво структура која има хиерархија. Значи, ако имаме пристап до [Беззвучен] застапеност на документот, можеме да работиме со документот, како ние манипулираат со објектите во основа. И да се направи ова малку појасно, кога имаме многу од нашите различни тагови одговори за различни правци во нашата дрво. А потоа и за овој пример, ние имаат почнувајќи документ јазол. Имаме, тогаш, нашата HTML јазол што се дели на главата и телото. Главата има наслов и потоа наслов содржи Здраво, свет. И нашето тело содржи само Здраво, свет, како и. Така било прашања во врска со било кој од работи кои што се опфатени досега? А ако не, ќе Хана преземе со JavaScript. Страшни. HANNAH Blumberg: Добро, кул. Ако ништо друго доаѓа со PHP или HTML, или на било која работи Марија покриени, секогаш можеме да се откажеш. Ние сме прави подобро на време, повторно, толку страшни. И само да се вратиме навистина брзо на ова, ако се погледне во секој Изминатата година е испит, ова доаѓа до either-- тука е некои HTML, го прават овој дијаграм. Или еве овој дијаграм, направи некои HTML, па дефинитивно практикуваат тоа. И тогаш тоа е една гарантиран прашање што може да се добие право. Кул. Па ајде да разговараме за да вклучите и како тоа е малку различен од јазици како PHP и Ц, на два јазика видовме претходно. Значи број еден, тоа е лабаво отчукува. Тоа е како PHP, но за разлика од В. Тоа е препознаена јазик. Повторно, тоа е како PHP, за разлика од C. И ова ќе ни овозможи да го use-- работи навистина убаво со веб-страници. Тоа се случува да ни овозможи да се манипулира содржината и начинот на кој изгледа и она што го прави тоа. Ние ќе треба да се види малку за Ајакс. Тоа ни овозможува да комуницираат асинхроно со различни сервери и да добијат информации. И ова е нешто што навистина Го вклучите Javascript-се одделува од PHP и C е тоа што е клиент-страна. Двете PHP и C се обично од страна на серверот. Во најголем дел и речиси целосно она што ние сме виделе, барем во оваа класа, го вклучите Javascript- делува на клиентска страна, што значи дека прелистувачот е, всушност, одговорен за тоа трчање. А тоа значи дека ние не треба да комуницирате со серверот. Па тоа значи дека може да биде многу побрзо затоа што тоа е всушност само тоа е Хром, тоа е од Safari, тоа е Firefox, што и да користат всушност работи на вашиот вклучите Javascript-. ПУБЛИКАТА: Што значи асинхрони значи? HANNAH Blumberg: Ах, што се асинхроно значи? Големо прашање. Асинхроно means-- добро, содржината на кој ние ги користиме и да е, во ред, ние се создавање на веб-страница и ние треба да се добијат некои информации. Така и со примерот на микс, некои информации кои би можеле да сакате е статија наслови. Сега, ние could-- една опција е да го направи тоа синхроно а тоа значи ајде запре, одам да купам статијата, добиете статија назад, а потоа го направи, но тоа ќе биде навистина бавно. Што би било лоша корисник искуство затоа што само ќе се седи таму те чека нешто да се одговори. Асинхроно ние ќе значи продолжи да оди за нашиот бизнис, рендерирање на страницата, и ние ќе испраќам барање Тоа е вид на ќе се случи во позадина. Мислам дека ние ги користиме на пример во Предавањето на повикување Роб и велејќи: еј, може да се погледне на овој горе за мене и се вратам на мене, за разлика од само мене чекање на телефонот. Па асинхроно значи тоа се случува во позадина далеку од нас во паралела. Големо прашање. Нешто друго? Одлично. Ние ќе скокаат многу повеќе во асинхрони барања со Ајакс. ПУБЛИКАТА: Дали JavaScript-- каде што го прави да падне со модел-View-контролер? HANNAH Blumberg: Велики прашање. Каде да вклучите есен со модел-View-контролер? Хм. Претпоставувам дека тоа може fall-- па ние обично не сакал да го мачкам во таа парадигма, но претпоставувам дека јас би рекол, Добро, па го вклучите Javascript- всушност, се случува да се овозможи ни да собираат податоци, интерпретираат податоците, всушност се направи значајни работи со податоците. На тој начин, тоа е многу контрола-како. Но тоа е, исто така, ќе ни овозможи да се прикажување на работите и печатените работи. На тој начин, тоа е многу сличен поглед. Је. Така, тоа е вид на како PHP во каде што може да биде вид на двете. Добро прашање. Нешто друго? Добро, неверојатна. Движат право заедно. Да видиме еден пример за тоа како може да се користат JavaScript во еден од нашите веб-програми. Па јас ќе се разгледа ова index.html со еден куп на HTML. И она што го сакате се фокусираат на е оваа скрипта таг. И ова, вели, во ред, сакам да се кандидира на некои Го вклучите Javascript-и тука е местото каде што живее. Тој живее во hello.js. И многу многу како CSS, ние би можеле да Го вклучите Javascript-се стави во рамките на HTML. Зошто сакаме да го издвојат? Је. ПУБЛИКАТА: Полесно да се преработи? HANNAH Blumberg: Да. Тоа е полесно да се користи низ различни веб страници. Се држи работите почист. Тоа е само добра пракса. Страшни. Добар одговор. Па добро, така што ова ќе да биде наш index.html. А потоа надолу тука е нашата малечки датотека JavaScript. И сите што го кажува е алармирање Здраво, свет. Значи она што се случува е кога оваа страница renders-- па ако може да оди на без оглед на сајт оваа is-- сето тоа ќе се случи е што тоа се случува да се каже, во ред, јас сум случува да се кандидира овој код JavaScript. И ова JavaScript код само вели алармирање Здраво, свет. Па јас ќе одам да се добие овој пријателски малку pop-up. Кул? Тоа е вид на како нашата прва Го вклучите Javascript-програма, нашите Здраво, свет. Ајде да погледнеме малку повеќе за тоа што синтаксата на JavaScript изгледа. И посебно, да ја споредат со Ц и PHP, што ние не сум видел. Во JavaScript, ние ќе треба да имаат var, името на променливата, а потоа Крај на неговата вредност. И ние не наведете тип, само како во PHP, но многу разлика во В. Така на пример, ако сакавме за чување на вредноста од 50, во C, ние ќе треба да се каже, еј, Ц, сакам цел број, Одам да го наречеме i, а неговата вредност е 50. Во PHP, тоа е малку полесно. Ние се каже, еј, сакам променлива наречен i и неговата вредност е 50. Многу слично на тоа, во JavaScript, ние велат еј, сакам променлива наречена I, неговата вредност е 50. Секој подоцнежен момент дека јас го користам Јас, јас не треба да се напише var. Тоа е само ли од таа точка. На ист начин, во Ц, каде што еднаш велиме int i, ние само го користите i. Кул? Во ред. Премина на јамки, За среќа, овие речиси изгледа exactly-- Мислам дека тие се иста како што јамки се случува да се погледне како во нешто како С, каде што вашиот за јамка се случува да имаат три parts-- на иницијализација, услов, и ажурирање. Додека јамка, изгледа иста. Ние само го даде состојба. И направите додека јамка, повторно, токму истото. Ние постави услов даде. Да речеме дека јас сакав да iterate over-- Сакав да направам нешто за пет пати. Во C, ние би можеле да се напише за init з изнесува 0. i е помал од 5, i ++. Единствената разлика, во JavaScript, наместо да се каже int i еднакво на 0, велиме var i изнесува 0. Убава. Тоа е единствената разлика. Било какви прашања во врска со било што од тоа? Да. ПУБЛИКАТА: Значи во PHP, тоа е истиот нешто, освен, но како и променлива? Или беше тоа еден пример var? HANNAH Blumberg: Да. Па во PHP, тоа се случува да биде знак за долар. Значи тоа се случува да $ i еднаквите 0, $ i е помал од 5, $ i ++. Големо прашање. Сега ајде да зборуваме за декларации функција. Во C, кога ќе прогласи функцијата, што го даде името и ние ја даде некои параметри. И на почетокот, ние напиша на типот. Во JavaScript, сите ние треба да направите е да напишете функцијата за клучен збор, која вели, еј, JavaScript, Јас сум за да се дефинира функција. Во овој случај, тоа е името сума. И тоа трае два аргументи, x и y. Забележи дека ние не се грижат за типови на x и y. И исто како и Ц, имаме овој клучен збор се врати, па ние може да направи нешто како возврат x и y. А сега откако ќе го напишав овој прв функција, може да се користат сума насекаде. И тоа е сосема во ред. Една навистина кул работа во врска со Го вклучите Javascript-тоа е многу за разлика од C е дека функциите може да да се третира како вредности. За да можеме да се направи такво нешто овде каде што претпоставувам дека ја покриваат оваа up-- Јас прикривал var сума part-- и ние едноставно се рече функција xy еднаква плус враќање x y. Тоа е она што ќе се вика анонимен функција. Тоа е функција без име. При што оваа функција, вели сума, бла, бла, бла, ова само би рекол функција. Но сега иако имам овој анонимен функција, таа функција е навистина само еден вредност. Можеме да го третираат како вредност. За да можеме да го зачувате во променлива исто начин би можеле да се сместат 50 во променлива. Значи можеме да кажеме, во ред, сакам променлива, се вика збир, и тоа е на оваа функција. Па овие две работи се всушност случува да се направи иста работа, но синтаксата е малку различни и вид на забава белешка. Је. ПУБЛИКАТА: Па може да се јавите на функција која беше анонимна, велејќи: загради сума 2, 5? HANNAH Blumberg: Да. Можете да се јавите овој анонимен функција на ист начин. Што би го направил сума (2, 5) ;. Тоа би било сосема во ред. Ако јас не го стори var сума е еднаква на функција, ако јас само избришани this-- Знам дека е на мојата рака, но да се преправам дека избришан this-- потоа дека функцијата е вид на само нема. Никогаш не можете да го користите повторно, бидејќи немате име за него. Тешко е да се однесуваат на нешто вие не знаете што да се јавите. Добро прашање. Је. ПУБЛИКАТА: Можете ли да референца сума во други места со вредност на x плус y? HANNAH Blumberg: Можете ли да референтна сума во други места со вредноста на y x плус? Јас не сум сосема сигурен што мислиш. ПУБЛИКАТА: Значи твоето минато полу-анонимен функција е сума е еднаква на оваа анонимен функција, така што збирот е сега променлива која ви can-- HANNAH Blumberg: Добро. Па збирот е променлива, но тоа е actually-- па сумата е променлива чија вредност не е во функција. Па тоа е во функција, која е вид на нешто чудно да се заврши вашата глава околу бидејќи ние сме си игра со С и не можете да го направите тоа во В. Но сега можеме да го наречеме сумира ист начин можеме да го наречеме сума тука. ПУБЛИКАТА: Во ред. HANNAH Blumberg: Да. Добро прашање. Је. ПУБЛИКАТА: Па ние не го користат прототипови во PHP или JavaScript? HANNAH Blumberg: Не, ние не треба да се користи прототипови, особено во JavaScript. Значи една пракса нешто лошо што сум одам да се каже дека не треба да се направи е што не треба да се напише var i = 50. Вие само може да почнете да го правите i = 50. И само ќе го направи ли глобална променлива. Тоа е многу лоша практика да никогаш не велат дека експлицитно var i, но тоа е нешто што можете да направите. Толкувачот не е ќе се развикам. JavaScript е прилично слично, можете да го направите она што го сакате. Извини. Станува збор за два. Во портокалова панталони. Само напред. ПУБЛИКАТА: Не, ти оди прв. ПУБЛИКАТА: Не, јас бев само велејќи Немав рака нагоре. ВО РЕД. Значи, ако сте во ситуација да се јавите првиот пат, сега се сумира, ние ја нарекуваме, на ист начин, X, y, како секој пат? HANNAH Blumberg: Да. Па овие две суштински го прават истото. ПУБЛИКАТА: И, што е предност на користење на еден или на друг? HANNAH Blumberg: Нема предност на користење на еден или на друг. Само сакав да ви покажам две различни парчиња на синтаксата. А многу пати во која анонимни функции немаат намена е ако аргументот на друг функција треба да биде во функција. И ќе видиме дека во само една секунда со Ајакс. Значи, ако тоа не прави никаква смисла, чувајте го во задниот дел на главата. Тоа е каде што на анонимен Функцијата може да биде корисно бидејќи тоа не е навистина вреди да се што му дава име, бидејќи ние сме само случува да го користите еднаш. Је. ПУБЛИКАТА: Ако x и y се промени подоцна па натаму, ќе ги сумира промените, како? HANNAH Blumberg: Ако x и y промени подоцна, ќе ги сумира промените, како? Значи ова е всушност јас мислам дека нешто што е, повторно, тоа само се чувствува многу различно од С. Ова не е вредност. Тоа не е 5. Тоа е само на самата функција. Па веднаш штом ќе го даде параметри, тогаш вие всушност ќе се пресмета вредноста. МАРИЈА Златкова: И тогаш можете да се јавите на функцијата и го користат за да се добие некоја вредност. HANNAH Blumberg: Добро. Токму така. Је. ПУБЛИКАТА: Значи, ако сте само чувајте го во променлива, како var x е еднаква на збирот на два values-- HANNAH Blumberg: Да. Па може да се направи само var сума еднаква на збирот на две вредности. Је. Било какви други прашања? Је. ПУБЛИКАТА: Но, што би збуни сума и сумата? Како ако се јавите на вашиот променлива сума, ќе ти се јавам на функцијата сума? HANNAH Blumberg: мм. Мм. Ако сте направиле нешто како, сума еднаква на сумата 2, 5? ПУБЛИКАТА: Да. HANNAH Blumberg: Верувам дека ќе се пребрише вредноста на сумата. Значи уште една интересна работа во врска со вклучите Javascript- е во тоа што на една варијабла може да се земе на еден куп на различни видови. Лоша пракса. Вие не треба да се направи нешто како она што го рекол. Но во C, ако ми е поставена еднаква на цел број, ние знаеме дека тоа никогаш не е се случува да стане конец. Ова не е случај во JavaScript. Да, добро прашање. Нешто друго? Во ред. Правење на сите на време. Држејќи се. Во ред. Ако ги погледнеме во низа во JavaScript, еве брз пример на низа од жици. И низи може да порасне и динамично. Тие немаат фиксна големина на ист начин дека тие го прават во C. Ние може да пристапите до елементи со само квадратни загради. Дека многу личи на PHP и многу како C, каде што може да се каже, во овој случај, ако сакам зборот JavaScript, јас би се ARR квадратни загради со 0, 1, 2. А потоа, ако се сеќавате во C кога ние сакаше да се должината на низа, тоа го нервираше. Но во JavaScript, супер лесно. Сите што го правиме, .length. Тоа му дава на должини. Тоа е. ПУБЛИКАТА: Тоа е едноставно. HANNAH Blumberg: Да, го прави вашиот живот многу полесно. Добро, не object-- таму. Објекти во вклучите Javascript-се чувствуваат многу слични structs во C и асоцијативни низи во PHP. Значи она што видовме Многу е JSON, која се залага за да вклучите Објектно нотација. И тоа е во основа, на начин структурирање на нашите податоци. Да видиме еден пример, веројатно најлесниот. Па еве еден пример на објект дека магацини на класа, CS50. И кога велам класа, мислам секако, не like-- да, се разбира, CS50. И ќе видите дека се што е во објектот ќе бидат содржани во големите загради. И почнуваме да се дружат областа имиња или копчињата со различни вредности. Па можете да почнете да се види како овој вид на се чувствува како асоцијативна низа во PHP. Па ние ќе се дружат на поле или клучот за името, се разбира, со низа, CS50. Ние ќе треба да се има инструктор. Ние ќе треба да се има TFS. Ние ќе треба да имаат број на psets и ние ќе треба да се евидентираат. И една кул работа да се напомене е сите овие нешта имаат различни видови, и тоа е сосема во ред. Тоа е во ред за објект, всушност, тоа е веројатно очекува за објект да има комбинација на жици и бројки и Booleans и низи и што друго би можело да сакате да имате во вашиот објект. И да се напомене дека овие се случува да бидат имињата или копчињата, а потоа ние едноставно поставувате ова на еднакви со малку дебелото црево. ПУБЛИКАТА: Што точно значи JSON значи? HANNAH Blumberg: Што точно значи JSON значи? JSON само се залага за Го вклучите Javascript-Објектно нотација. Тоа е само еден начин на форматирање. Је. Тоа е начин на уредување на нашите податоци. Во C, тоа е structs. Во PHP, тоа е асоцијативни низи. Во JavaScript, имаме објекти. ПУБЛИКАТА: Значи CS50 е објект? HANNAH Blumberg: CS50 е објектот во овој случај. Сега, како што го правиме, всушност пристап овие области или промена на тие области. На пример, да претпоставиме дека одлучи дека си сакал еден помалку pset овој семестар. Наместо девет, ние сме само ќе има осум. Како ќе се промени тоа? Ох, погрешен начин. Постојат два начини на кои можеме да го направиме тоа. Број еден е со точка нотација и број два е со плоштадот заградата нотација. Така, на пример, ако јас сака да го измени или пристап поле psets во нашата CS50 објект, она што јас би го направил е CS50.psets, па името на објектот точка името на поле или клучот. Многу слично на тоа, тоа е точно еквивалентно да се направи CS50, а потоа во квадратни загради, psets. Кул? Је. ПУБЛИКАТА: Така е JSON Го вклучите Javascript-се уште технички, иако во psets ние тоа се издвојат [Беззвучен]? HANNAH Blumberg: Секако. Значи, прашањето е, дали Го вклучите Javascript-и JSON еквивалент? Па JSON е нотација, во основа начинот на кој ние се напише објект од JavaScript. Па тие не се сосема исти. Јас би рекол дека го вклучите Javascript-, има се објекти во JavaScript. JSON зема оние предмети и ги печати и ги прикажува или да ги чува во еден убав начин. JSON па не е програмирање јазикот на начинот на кој го вклучите Javascript-е. Тоа е само за нотација нашите објекти во JavaScript. Је. ПУБЛИКАТА: Значи, што точно [Беззвучен] заврши? HANNAH Blumberg: Секако. Така што ова, всушност, не прави ништо. Ова е само начин за пристап. Па да речеме ние сакавме да се промени бројот на проблемот сетови 9-8. Она што го правиме е да се направи нешто како CS50.psets = 8 ;. Да, големо прашање. Ова е само да ви покажеме синтакса. Всушност не се направи нешто корисно. Некакви прашања? Движат право заедно. Па да ги погледнеме во еден брз пример за тоа како Го вклучите Javascript-дела, бидејќи Ти кажав ли дека прави сите овие интересни нешта ни овозможува да се измени веб страни. Ајде да всушност го видите во акција. Затоа потрудете се, на пример, оваа HTML датотека. И нешто што сакам да се фокусираат на е ова особено ознака, што е едно копче, со ид search_button. Тоа е само на оваа страница. Па сега ајде да видиме што ние всушност може да се направи. Па, претпоставувам дека кога ќе кликнете на тоа копче, ние сакаме да се направи alert-- сте кликнале на копчето. Ајде да видиме како можеме да го направиме тоа. Window.onload-- па ова не е нешто дека сте виделе во класа, затоа не ќе треба да го знаете за квиз. Но ова во основа вели дека, во ред, повик оваа функција кога товари прозорец. Па тоа е само вид на подесување код. Не грижете се толку многу за тоа. Она што сакам да се фокусираат на е тука. Велиме var searchButton еднаква document.getElementByID search_button. Па како што претпоставувате Што тоа не е се вели, Добро, да најдеме елементот со проект search_button. И сега имаме дека вистински елемент и јас сум ќе се чува во променлива searchButton. И сега можеме да всушност ги користат тие елемент и тоа се промени, или да пристапите до своите вредности, работи како што. Ние, всушност, може да почне да се вклучат со веб-страница. Па еве јас се каже, во ред, сега дека имам тоа копче, кога е кликнато, го нарекуваме овој анонимен функција. Значи ова е местото каде што анонимни функции да станат корисни. И што функција да направам? Па, тоа само го нарекува овој алармирање функција и тој вели: сте кликнале на копчето за пребарување. Така што ќе се случи кога ќе отидам таму каде овој HTML живее и ќе кликнете на копчето, Јас ќе добиете фенси малку алармирање кој се вели дека ќе се кликне на копчето. Па на работи кои треба да се фокусира на here-- document.getElementByID добива одредена HTML елемент со дадениот проект. И сега ние може да се постави што ќе се случи кога тој одреден елемент е кликнато. ПУБЛИКАТА: Ние треба да се стави на сите дека во? HANNAH Blumberg: Жал ми е? ПУБЛИКАТА: Дали треба да физички кодот сите за тоа? HANNAH Blumberg: Дали ние треба да физички кодот сите за тоа? Да. Зар не е тоа вид на досадни? Ова е многу код. ПУБЛИКАТА: Можете да увезете нешто. HANNAH Blumberg: Добро. Можеме да го користите нешто. И во particular-- ох, тоа е да ми каже дека треба да учат секција. Особено, ајде ја користи библиотеката jQuery, затоа што тоа беше навистина долго и навистина досадно и јас сакам да бидам во можност да го поедностави и да ја направат пократки и полесно да се пишува. Па jQuery е библиотека го вклучите Javascript-. Па го вклучите Javascript-е програмирање јазик; jQuery е библиотека. И тоа го прави еден куп работи полесно. Тоа го прави се менува и ќе низ HTML-документот, многу полесно. Тоа го прави ракувањето настани полесно. Тоа го прави полесно анимација и тоа го прави Ајакс полесно. Значи, да се фрламе во две од тие работи во моментов. Извинете ме. Пред да се направи, некои основни синтакса. Тоа е она што најмногу ги повиците до jQuery библиотеката изгледа. Ние ги користиме овие доларот sign-- нема врска знак на PHP, само inconvenient-- името на селектор, точка, а потоа и акција. Да видиме некои конкретни примери за тоа. Така што ова, всушност, е иста кодот од слајд на настанот. Па ова долго, грда работа станува ова многу поубав, помали работа. Значи, да се обиде да се пробие оваа надолу. Ова се вели, во ред, овој jQuery-- долар sign-- jQuery, ме најдете на прозорецот. Значи тоа е на менувачот. Кога се отвора, јавете се на оваа функција. Значи, тоа е се што е внатре. ВО РЕД. Досега добро? Во ред. Сега, jQuery, најдете ме на работа со проект search_button. И она што е кликнато, повик оваа функција. А потоа и оваа функција е токму истото. Само да се направи малку на алармирање, сте кликнале на копчето за пребарување. Па тоа е навистина убаво. Тоа навистина се кондензира и поедноставува нашиот код. Како да не знам дека тоа е проект search_button а не како класа search_button? ПУБЛИКАТА: Хаштаг? HANNAH Blumberg: Да. Овој симбол хаш, тоа е исто како и CSS. Па се сеќавам, со CSS, кога ние сакав да изберете нешто од лична карта, ние се користи знакот фунтата. И кога сакавме да изберете нешто по класи, ние ги користиме на точка. Одлично. Има смисла? JQuery така би требало да само да се направи нашите животи полесно. Је. ПУБЛИКАТА: Значи јас сум малку збунет како за тоа како функционира анонимни функција. Дали ви се именува оваа anonymouse функција, да функционира? Како се вика? HANNAH Blumberg: Секако. Така функција е само една клучен збор, која вели, јас сум за да се дефинира функција. ПУБЛИКАТА: Ох, ОК. HANNAH Blumberg: во ред? А потоа можеме да им го давате како аргумент to-- ајде да ги оваа внатрешна one-- со функцијата на клик. Така да, па таа функција, овој анонимен функција, не стане вистинска аргумент. Па се сеќавам во JavaScript, ние може да се третираат како функции вредности. ПУБЛИКАТА: Ох, ОК. HANNAH Blumberg: Да. Ми се допаѓа тоа "О". Убаво. Други прашања? Време? МАРИЈА Златкова: Добро. Добро. HANNAH Blumberg: Прекрасно. Со неколку брзи корисно jQuery. Јас не одам за да се оди преку сите овие. Овие слајдови ќе биде до онлајн малку подоцна, па може да се провери тоа надвор малку подоцна. Но во основа, општо модел има каде што велат, Во ред, еј, jQuery, тука е мојата селектор, а потоа тука е акција. И можете да ги правите нештата како пристап вредноста на формата, пристап до некои HTML, контрола на она што се случува кога на корисникот поднесува форма, такви работи. Да. ПУБЛИКАТА: Значи во испит, ние се случува да треба да знаат доста од документацијата jQuery. Па со оглед дека ние копирај / вметни со jQuery документација за нашите измамник лист, каде е испуштена линијата? Како и колку ние треба да знаете? HANNAH Blumberg: Велики прашање. Прашањето е во основа со оглед на тоа што го не можат да пристап до документацијата jQuery за време на тестот, колку треба да ви знаеш? Ние не би се очекува да дојде со некои случајни функција дека ние би очекувале на Google. Работи кои се фер игра Јас би се велат дека само вид на општите синтаксата, да се биде во можност да изберете од лична карта и страна class-- па само како CSS. А потоа и на реалните функции себеси, ние најверојатно ќе ти кажам. Је. ПУБЛИКАТА: Значи, кога ќе одберете по класи би значело точка. HANNAH Blumberg: Да, точно. Добро. Кога ќе изберете по категорија, тоа се случува што треба да се точка наместо знакот фунтата. Да. ПУБЛИКАТА: Дали си одиме во текот на разликата помеѓу изборот на проект и по класа? HANNAH Blumberg: Секако. Разликата помеѓу избирање Проект и избор од класа. Па како некој вели Марија малку порано, има може да биде само една HTML елемент со даден проект, а класа, тоа ни овозможува да група еден куп на различни елементи заедно, така работи кои се поврзани, но не е иста. Дали тоа се одговори на прашањето? Страшни. Да. ПУБЛИКАТА: Што ако имате повеќе работи кои се во иста класа? HANNAH Blumberg: Што се случува ако имаш повеќе од работите кои се иста класа? Така, на пример, ако ние сме само со користење на чиста JavaScript, ние ќе се направи такво нешто document.getElementsByClass. А потоа она што всушност го прави тоа се враќа низа на елементи. И ќе мора или да iterate во текот нив или да се најде кој го барате. Тоа не се случува да се даде вие еден елемент. Тоа се случува да ви даде низа на елементи. Големо прашање. Нешто друго? Страшни. Па мислам дека ако сте запознаени со било jQuery можете да забележите во pset, треба да бидете добро да отидевме. Прашање? О не. Навистина треба да учат. Релаксираат. Тоа ќе биде добро. Јас ќе одам таму. Ајде да зборуваме за Ајакс. Па Ајакс ќе биде a-- добро, ајде да почнеме со она што го застапува. Тоа е кратенка. Таа се залага за Асинхронни JavaScript и XML. И XML е во основа ќе биде [Беззвучен] со еден вид на нашите податоци. Но не сме всушност се користи XML. Наместо тоа, ние само го користите JSON. Значи, во основа, тоа е некои data-- асинхрони, JavaScript, и податоци, во овој случај, JSON. И нашата цел, како што рековме малку порано, е да се биде во можност да се направи барање, го направи тоа барање својата работа во позадина, но продолжуваат стори се што ни беше намера да го направи тоа. И тогаш кога таа информација е подготвен, тогаш ние ќе го вклучат. Да видиме што е ова всушност изгледа како. И ова, треба да бидат малку запознаени од pset8, онаа што само ќе се пријави. Значи тука е валидна jQuery функција за да можеме да сакате да знаете about-- овој знак за долар. Тоа што го кажува jQuery функцијата, .getJson. И она што оваа функција го прави тоа е Потребно е рачно и некои parameters-- па мислам дека и во случај на pset8, тоа беше како, URL-то беше articles.php и параметри беше одат = некои поштенски код. И што вели, во ред, да поднесе барање до овој URL со дадените параметри. И дека едноставно се случува. Кога ќе заврши, тоа е или случува да успешно заврши или тоа нема да успее. Значи ова е еквивалент на повик Роб и побара од него да се направи нешто. И тогаш кога тој го нарекува назад, тој е или одам да се каже јас сум се направи или не успеав. Така што во случај кога сте направено, да се каже, во ред, јас сум готов. А потоа ќе се јавите на оваа функција. Во овој случај, тоа се случува да биде функција која ги зема некои информации. Онаа што вообичаено се грижиме само за податоци, податоците што ние, всушност, биле вратени како резултат на повик .getJSON. И може да се направи нешто со неа. Така што во случај на pset8, ние тоа го прикажуваат како листа. Fail се случува да биде во функција што се нарекува, ако барањето не за која било причина. И во случај на pset8, ние само го console.log. Било какви прашања во врска со тоа? Је. ПУБЛИКАТА: Можеме само да ја користите функцијата тета наместо функција, textStatus, jqHXR. HANNAH Blumberg: Секако. Така да, мислам дека во pset, ние само видов функција податоци. Па тоа е само the-- да, во ред. Тоа е она што го видовме во pset. Тоа е сосема во ред. Ова се само ако сакаше да се повлече од повеќе информации, овие се нештата кои можете да добиете од .getJSON. Добро прашање. Нешто друго? Је. ПУБЛИКАТА: Значи .getJSON е Ајакс? HANNAH Blumberg: Во ред. Значи ова е вид на слабо дел. Тоа е функција која им овозможува на jQuery можете да го направите асинхрони повици. И оние кои се асинхрони повици, тоа е она што ние сме биле викаат Ајакс. Је. Дека ми требаше навистина долго време да повлече, освен кога бев студент. ПУБЛИКАТА: Може да се каже дека повторно? HANNAH Blumberg: Да. Можам да кажам дека повторно? Оваа функција .getJSON, тоа е во функција jQuery. И тоа се случува да се направи асинхрони повик. И овие асинхрони повици, ние сме се однесува на оние што Ајакс. Било какви други прашања? Имаме само остави неколку минути. И Марија ќе заврши со безбедноста и тогаш ние ќе што треба да се работи само за направено. МАРИЈА Златкова: Прекрасно, ОК. Па ова is-- само да донесе по неколку на секунди за да се погледне во текот на оваа. И ова не е нешто навистина големо. И може некој да ми каже зошто? Она што се случува во foo и мај може да потенцијално резултира со нешто лошо, и она што се вика? Је. ПУБЛИКАТА: Ако аргументот дека е донесен во е повеќе од 12 карактери, тоа би можело да претекување. МАРИЈА Златкова: Добро. Совршен. Како се вика? Можете само да го споменува. ПУБЛИКАТА: Buffer overflow. МАРИЈА Златкова: То, buffer overflow. Така што ова е нешто што ние се однесуваат како buffer overflow. И гледаме дека во внатрешноста на foo, ние сме дефинирани нашите тампон, в, со големина од 12. Сепак, во главниот, ние не проверете на било кој начин на сите дали argv1--, така што беше на вториот аргумент. Ние не се провери дали големината на тоа што е соодветно. Значи, ако имавме особено злонамерен корисник кој се стави во некои аргумент кој беше повеќе од 12, а потоа и потенцијално надвор од границите на кои аргумент, имаше некои извршна код дека тој се обидува да направи нешто лошо со тоа; тогаш ова, што ќе се случи, ќе ги избегне враќање адреса на функцијата на foo, предизвикување на функцијата, за да кога враќајќи се изврши овој код. А потоа и лоши работи може да се случи. Дали ова има смисла на сите? И како можеме да се заштитат од ова? Секоја сугестија? Во суштина, во внатрешноста на потенцијално foo, како можеме да провери да бидете сигурни која што не може да се случи? ПУБЛИКАТА: Ако големината 12 е надмината, ќе одвои дополнителни меморија? МАРИЈА Златкова: предлог е, алоцирање дополнителна меморија на големината надмината. Всушност, може да се направи нешто многу поедноставно од тоа како добро. Ние може да се добие само должината на стрингот на аргументот дека се влегува, проверите дали тоа е помалку од или еднакво на 12-- што е она што го сакате да биде, бидејќи ние не сакаме тоа да се надмине границите на нашата тампон. А потоа ако не е така, ние можат да работат со аргумент. А потоа, ако тоа се случи, ние всушност сакаме да Yello потенцијално изложени на корисникот. Но, ова е како ние би го сториле тоа. Да. ПУБЛИКАТА: Може ли објасни memcpy вистински брз? МАРИЈА Златкова: Ох, извинете. Да. Memcpy зема она is-- жал, ОК. Memcpy зема она што е во бар, што и да е донесен врз foo како аргумент на командната линија. Па затоа се случува да се земе argv1. Argv1 се нарекува бар тука. Па затоа се случува да се земе бар и тоа се случува да го копирате во в. ПУБЛИКАТА: Во ред. МАРИЈА Златкова: И тоа се случува да се copy-- трет аргумент само се однесува до колку тоа се случува да го копирате во в. ПУБЛИКАТА: Ах. Па ова ми е копирање на сето тоа тогаш. МАРИЈА Златкова: Да, тоа е копирање на сето тоа. Да. Прво, ние се осигураме бар не е еднакви на нула, бидејќи тоа е покажувачот. Тогаш ќе го добиеме стринг должина на лентата. Ние бидете сигурни дека тоа е помалку од или еднакво на 12. А потоа, бидејќи ние сме се сигурни, ние всушност може memcpy и бидете сигурни дека тоа е во ред. Некакви прашања? Одлично. Имам две прашања точно или неточно. Може ли некој да ми каже веднаш ако тие се вистински или лажни? Да, тоа е неточно. Токму така. Двете од нив се лажни. Па со една единствена лозинка никогаш не е навистина добра идеја затоа што ако некој знае Вашата лозинка, тие може да пристап до сите ваши други сметки. А потоа и икони не прават ништо за да се обезбеди безбедност. Обично треба да се погледне за HTTPS наместо на HTTP и URL-то. И некои други видови на напади дека ние сме споменати, дека Дејвид е споменат во предавање, SQL инјекција напади. Ние веќе видовме дека ако ние don't-- на Функцијата за пребарување CS50 прави сигурни дека SQL инјекција напади не може да се случи. Но, ако не се со користење CS50, понуда, unquote "во барањето," ние ќе мора да бидете сигурни дека на корисник влез не е, всушност, некои SQL Барањето што ќе предизвика сите нашите маси треба да се намали или нешто лошо се случи со нашата база на податоци. Киднапирање сесија е друг тип на напад што се случува кога некои лоши лице користи сесија некои жртвата Проект за пристап до информацијата за најава. Толку многу тривијални пример за тоа е како и да имаме јавен компјутер, тогаш лош човек се најавува и потоа тие имаат досиеа кои се снимени. И колачиња не се менуваат за сесија. Тогаш сме ја жртвата оди во а потоа влезете во веб страната. Колачињата не се менуваат за одредена сесија. А потоа жртвата најавува во на веб страната, а потоа заминува. А потоа на лицето кое се навраќа тогаш се уште можат да ги користат нивните сесија проект да имаат пристап до своите информации. Значи тоа е еден пример на како што може да се случи. И тогаш јас не би се грижи премногу за специфичен код или нешто така што може да предизвика ова, но има некој вид на идеја што на променливи кои се вклучени во оваа се. А потоа и манипулирање со глава податоци е уште еден тип на напад кој има Давид зборуваше. И тоа само се однесува на она што може да се случи кога одговор, HTTP одговор во внатрешноста на нашата глава не се санирани правилно. И некој од fields-- на пример, ако некој го прекрива еден од глава вредности да содржи ништо повеќе од она што тие треба contain-- а всушност да содржи, на пример, 200 Добро код статусот, тогаш тие потенцијално би можеле да се направи малициозни работите, кога тие не би требало да. Но, јас не би се грижи премногу многу за специфичен код што може да предизвика ова, само вид на разбирање високо ниво на такви работи. Мислам дека ова е за сите дека ние треба да ги покрие. Неверојатен. Секој имате било какви прашања во врска со било кој од работите кои што се опфатени? Да. ПУБЛИКАТА: Значи еден вид на повеќе логистичка прашање. Е главно фокусирана на содржината за работи по 1 квиз? МАРИЈА Златкова: Значи Прашањето е, е содржината главно се фокусираше на работите по 1 квиз? Така што фокусот е на по квиз 1, со исклучок дека ние треба да се фокусира на работи во pset5 и многу структури на податоци кои ги покриваат. И не можеме да кажеме дека сме можеме да го игнорираме нешто пред дека поради тоа што се базира врз тоа како добро. Така се фокусира на тоа, плус pset5 материјал како вклучувајќи поврзани листи, Купишта, редици, и сè дека Хана помина. HANNAH Blumberg: Добро. Да, отидовме во текот на сите работи на С на самиот почеток многу брзо. Но, бидете сигурни дека за да ги видиш. Врати се назад и да се види квиз 0 преглед. Уште неколку логистички белешки, само додека имаме вашето внимание. Ние ќе се обидеме да се има на работното време и двете во понеделникот и вторникот навечер. Тие се случува да биде во MD 119. Ова е за сите на веб страната, па ако не тоа, не се грижи слушне. МАРИЈА Златкова: 8:30-11:00. HANNAH Blumberg: Да, 8:30-11:00. Ние ќе бидеме таму. Ние ќе бидеме таму за да се одговори на прашања. Тоа е прилично студ и забава. Вие момци можат да побарате било какви прашања кои ги имате на квиз 1. И квиз 1 е на Среда, па со среќа. Ако имате било какви прашања, можеби дојде да разговара со нас до тука еден-на-еден. Кул. Благодарам многу. МАРИЈА Златкова: Благодарение толку многу, момци. ПУБЛИКАТА: Yay. [Аплауз]