[За възпроизвеждане на музика] DAVID Malan: Това е CS50, и Това е началото на седмица осем. И ние сме толкова развълнувани да приветстваме обратно, голяма изненада, собствена Ramon CS50 е Галван, изгряваща старши, който е бил прекарва последните няколко месеца От юли в LA, в Холивуд, буквално работи по чисто нов телевизор шоу, наречено Colony, създателят на които е всъщност самият той Harvard стипца. И така, ние сме много развълнувани да видим това дебют в мрежата САЩ през януари тази година. Така че очаквайте, че, както и за повече Ramon за идните седмици. Знайте сега, че краят е близо. И какво означава това е, че там не е всичко, което е останало много от CS50, тъжно да се каже. Ние имаме само три проблем набори left-- има проблем зададете six-- което е в ръцете си сега, или скоро ще бъдат, поради по-късно тази week-- има за цел да се преодолее нашите светове на командния ред, където ние сме прекарали по-голямата част от времето си, използвайки C, и в света на уеб програмиране. Е, вие ще видите много идеи назаем от работата на командния ред, но също така много нови и интересни идеи които също ще бъде уместен за мобилни приложения и технологии, за по-общо, с която можете момчета са всички познати днес на лаптопи и телефони и други подобни. Така че не ще приложат уеб страница или уеб сайт само по себе си, но действителен уеб сървър. Ще напиша останалата част на уеб сървър написан на C, чиято цел в живота е да приема HTTP заявки, тези виртуални пликове пазим говорим за това и всъщност отговори или с някои статични content-- като точка HTML файл, или една точка JPEG или всеки друг брой файлове, или дори файл PHP с което вашия уеб сървър ще се тълкува, че PHP код и изплюе резултатите. Сега, ние сме ви предоставили доста рамка за наистина it-- дистрибуция код за проблем определя шест е с дължина над 1000 линии, а много от които е коментари, за да бъдат fair-- но това е наистина означаваше да бъде възможност да си цапаме ръцете гмуркане в доста голям проект че ние сме много специално издълбани парчета за вас, така че наистина, когато излезете CS50 и влиза в реалния свят на програмиране и искам да се бъркам в произволен брой проекти, вие ще имате много по-голям комфорт свалянето някакъв източник код, някои отворен код проектира в интернет, и гмуркане в и вземане промени, които ви е удобно. Проблем определя седем ще бъде около да създавате свои собствени уеб-базирано приложение който взема динамичен вход и дава динамичен продукцията под формата на etrade.com-подобен сайт. И проблем зададете осем ще се фокусира върху все още друг език, известен като JavaScript. В същото време, на финала Проектът е на хоризонта. Така нареченото предварително предложението се дължи на една седмица от днес. Pre-proposal-- на спецификацията, който е на website-- CS50 е е доста случайни възможност за можете да изпратите един доста кратък и ясен имейл на учението колега само за да го запознае или й на какво си мислиш, да него или нея се използва като трибуна. И да има здрав разум check-- дали сте мислене около отхапваща твърде много или може би твърде малко, или може би имате каквато и никаква идея и искате да проведете разговор. След това е предложение, и доклад за състоянието, т.нар CS50 Hackathon тук Cambridge за Харвард и Йейл студенти приличат. Крайният проекта изпълнението е след това право. И тогава един CS50 справедлива тук, в Кеймбридж, както и друга в Ню Хейвън. Така че предложението, да погледнем уебсайта за тези подробности. Но по-вълнуващо, също е възможност да се изцапаш ръцете, и вашите умове, отворени за цяло куп теми и инструменти и техники, които са спомагателни към основната учебна програма на курса, но все пак свързана. И също така прекрасен трамплин към прави наистина готино окончателните проекти, които надхвърлят материал ние сме обхванати официално в проблем определя или в лекция. Така че отидете на уеб сайта CS50 за целият списък на семинари. Ако не сте регистрирали все още, това е добре. Давай напред и да се запишете още и ние ще последващи действия, с живо линк за стрийминг, деня и часа, е на сайта. И всичко ще бъде записани и пуснати онлайн ако не може да направи определени дни и часове. Що се отнася до това, което предстои thereafter-- добре, Разбира се, там е CS50 Hackathon. Тази снимка, изземване, от нула седмица взето около 4 AM една вечер през последните години. Панаирът на CS50, което отново ще се проведе в двата града. И след това, само за да се устроя семена, въпреки че ние все още има един месец плюс ляво на семестъра, ако искате да се присъедините към собственото преподаване на CS50 персонала, и искате да започнете мислене за да стане CA, или преподаване колеги, знам, че ние ще започнем да говорим повече за това по-късно този семестър. Но тук е на снимката повечето от тазгодишното издание на отбора. И така, PHP-- и аз бях толкова тъжен миналата седмица, че [? Allyse?] Любезно Отидох в усилията за получаване на нас тези прекрасни подпори че аз не се окажете с помощта, така че наистина просто изглеждаше доста глупаво че имахме една лопата седя тук всички ден миналата сряда, и малко лъжица. Но това беше моят метафоричен начин да се опитва да рисува на снимката, защо ние сме в преход от C до език като PHP. И същото може да се каже за всеки брой languages-- Java, Python, Ruby или букети от others-- но докато в C, например, за написването на програмата в C може обикновено да бъде като като лъжица като този и изкопаване на дупка в земята, в пясъка или калта. PHP позволява да направите много по- по-големи хапки от проблема, писането далеч по-малко код с помощта на много по-малък инструмент, защото има толкова много по- функционалност сглобени инча Сега, ако бяхме наистина драматична, щяхме да имаме нещо да лопата тук, но така да бъде. Междувременно, от друга метафора измислихме е, разбира се, бихте могли да използва нещо като гаечен ключ да чука в нещо като пирон. Но, разбира се, правото инструмент за използване върви да бъде не толкова език, наречен C-- и сега аз просто раздразнен [? Sanders,?], Вероятно, ние ще предупредим later-- така правилният инструмент да се използва често Няма да бъде този инструмент най-ниската степен. И наистина, C не е език, който повечето от вас са някога ще се използват, или задължително трябва да използвате отново. И в действителност, малко secret-- единственият път Аз използвам C себе си е доста много между Септември и декември на всяка есен семестър. И това е, защото ние я използват като възможност да преподават основите на програмиране, а с него и компютъра научни основи, данни конструкции, алгоритми и like-- но много бързо ще ви виж сега, че синтаксисът и идеите залегнали C са толкова прекрасно прехвърля на по-модерно високи нива езици, като PHP и Python и Perl и Java и Objective-C-- всъщност, не толкова Objective-C-- но Swift, тези по-нови езици, че много от вас ще След това се бъркам с вас крайния проект. Така че, без повече приказки, нека действително използвате PHP за решаване на някои проблеми. Спомнете си, че в началото на деня, последно седмица, ние просто използва CS50 IDE, написахме финичък малка програма че току-що каза, "Здравей, свят". И тогава аз го записва в файл, наречен hello.php. И тогава аз се завтече тази команда. И защо? На английски език, какво става тук? Какво правех, когато Тичах тази команда? Да? АУДИТОРИЯ: Има някаква функция PHP гласи, че това, което се разбира, че in--. DAVID Malan: Добре, има някаква функция PHP-- и ми позволи да бъде по-конкретен, има една програма, наречена PHP, а.к.а. Преводач, който разбира съдържанието на hello.php, и да го интерпретира отгоре отдолу, отляво надясно, и прави това, което казват тези команди. Командите в hello.php, разбира се, е просто източник code-- функции и променливи и примки и подобни, които самите ние са започнах да пиша в PHP. Но за разлика от C, което е компилиран език, PHP можете просто да го напиша, и да го ползвате. Можете да пропуснете, че посредник стъпка от го превръщат в нули и единици, и след това да го използвате. И така, какво е наобратно на това? Защо сме прескочите стъпка? Защо по-модерни езици са склонни да пропуснете тази стъпка? Каква беше ползата? Или просто интуитивно? Дори Не сме писмено много PHP преди, това, което е от полза, за да не съставяне на кода си мислиш? Не? Не извърши? Надраскване главата си? Да. АУДИТОРИЯ: Повече динамична. DAVID Malan: Повече динамичен? За какво говориш? АУДИТОРИЯ: [недоловим] DAVID Malan: OK, добре, така че в зависимост от входа, не е нужно да го компилирате всеки път. И това наистина е толкова просто, колкото това, което that-- е точката на продължаващото за съставяне на кода си? Това е само една стъпка, която е making-- това е изискваща, през последните няколко седмици, два пъти повече стъпки като само с тичане програма. Той е бил полезен в виждайки, че сте виж някои съобщения за грешки и т.н., но това е все още само едно досадно стъпка. И така програмисти реализираните с течение на времето, защо да не направим ние започнете да пишете езици, които не го правят нужда от това доста механично стъпало, така че може просто да напише кода си и да го ползвате. Но каква е цената че видяхме ние платихме миналата седмица, с един конкретен пример? Да? Speed. Така [? какво е?] преводачи малко по-бавно, в които са нули и единици приятно и бързо за компютър да се разбере, понеже Intel CPU, или каквото и да е, само разбира какво се случва на тези модели на битове. Като има предвид, преводач е програма, която наистина трябва да прочете източник Ascii код, който си написал, и да го конвертирате, така да се каже, или разбера как го преобразува в крайна сметка да нули и единици. Така че просто отнема малко малко на хитовия спектакъл. Така че това е малко на компромис. Сега, ако правим това тук, нека отидете напред и да направим един пример, както следва. Ако отида в тук, нов файл, аз ще съм да запазите това отново е hello.php. И сега аз ще отида напред и да каже, "печат Hello World" - и припомни, че мога да използвам за печат, аз не правя трябва да се използва за печат-F. И сега тук, ако го направя PHP на hello.php, huh-- I не изглежда да са го тълкува. Какво съм направил погрешно? АУДИТОРИЯ: Ъгловите гривните. DAVID Malan: Да, имате нужда този ъгъл скоба до върха. Така че това е вид досадно, но свикнете с него бързо. Ако имам да пиша PHP код, I по принцип трябва да кажете на програмата, или кажете на преводача, хей PHP, тук идва някои PHP код. И тогава за добра мярка, бих затворите това не с това, а по-скоро с ъгъл само въпросителен знак скоба, така че сега тук, ако аз тичам това отново, сега Аз получите желания резултат. Сега нека да направим лека оптимизация, Просто така, че сте го виждали преди. Това е вид досадно, че аз трябва да тичам PHP пространство hello.php, защото в миналото I може просто да напишете дот наклонена черта име на програма, която е един вид приятно. Това е вид на по-добро потребителско изживяване. Така се оказва, можете да направите това в PHP с following-- I можете да използвате тази доста загадъчен заклинание в горната тук, което обикновено се нарича жилище, при което това е рязък символ, така да се каже, че това е взрив или удивителен знак. И това вече е пътят към една програма на типичната система Linux, че се нарича среда, или Околна среда. И това line-- дълга история short-- линия една просто казва, хей компютър, намери ПОЗ преводач за мен в околната среда, го намерите в паметта си, така да се каже. И това, което сега е хубаво, е че ако сляза тук, Мога да направя точка наклонена черта Здравейте дот PHP, or-- хмм. Разрешението е отказано. Е, вие ще видите дори повече от това с проблем определя седем, ако все още не сте, с разрешения. Оказва се, че имам нужда да изпълните тази команда Наречен [? chamod?] за промяна mode-- плюс х hello.php. Имам нужда [недоловим] този един допълнителен стъпка, която се казваше моя компютър, направи hello.php изпълним. И сега гледайте какво happens-- дот Слаш hello.php, той просто работи. Не трябва да се уточни преводачът вече. И аз може да го направи още по-красива, Все още, ако преименувате това нещо. Ако аз hello.php движат само Hello-- така забележите в горния ляв ъгъл, името на програмата е Наистина сега просто Hello. Сега не мога да го правят да изглежда като програма на С, Въпреки че това е написано в PHP-- или откровено произволен брой на други езици. Така че пределната аксесоар, не функционална разлика. Но това е само малко любопитство сега, така че можете да се пишат програми на всеки език, а потребителят не Трябва да знаете, или пука какви са тези. Е, нека да разгледаме по- непреодолими например сега че съм я прати в аванс. И това се нарича quote.php. И това е на разположение онлайн. И забележете, че това е доста short-- но това е една програма, която е командния ред Ще погледнем нагоре цените на акциите за мен, което всъщност ще да бъде уместен за проблем определя седем. Така че нека да видим какво правя. На самия връх Нося отворена скоба въпросителен знак PHP. Тогава аз имам тази линия, с което съм изискваща файл, наречен functions.php-- ние ще видим повече за това след малко, но това е като C е версия на остър включват, където искате да отидете включва друг файл. PHP призовава го изисква, въпреки че има и включва функция. И се оказва, че е function.php Просто нещо, което аз написах преди клас. Сложих го в същата директория, защото Исках да фактор някои код че ние може да искате да използвате на друго място. В същото време, можете вероятно заключим, какво се случва тук. Това е малко по-различна от C-- но това, което мога да кажа от гарантира правилното използване? Превод на по-технически. При какви обстоятелства съм отказване на програмата, или да излизате? Да? АУДИТОРИЯ: Когато не разполагате две командния ред аргументи. DAVID Malan: Когато аз нямам да командва аргументи линия. И не забравяйте, че един от тези, аргументи е самото име на програмата. И вторият ще бъде друга дума пиша след напомнянето. Така че точно като C, това е моят начин на проверка, е оказал съдействие на потребителя и стартирате програмата, както възнамерявах? Сега, има нещо малко по-различна с C-- на първо място ние получите този знак за долар, и това, което прави един долар подпише обозначи в PHP? Само една променлива. Това е all-- само една променлива, последвано от каквото си искате действително да го наричат. Забележете, че има нещо липсва от моя PHP програма, точно като него липсваше последния седмица, в сравнение с С, което е това? А видове, но и нещо друго. Не е нещо function-- основна функция. Няма по-основна функция. Ти просто започнете да пишете кода си без да се налага да се притеснявате за доста произволно конвенция на именуване някои подразбиране Основната функция. Така арг C е просто наистина глобална променлива че преводачът прави достъпна за мен. Сега, това е интересно. Така че гледам неща. Dollar знак е на склад ляво, това е променлива ми. От дясната страна, там е очевидно функция в PHP призова за справка, че Аз съм минаваща последната ми командния ред аргумент to-- каквото и думата е. И ние ще видим как това работи в един миг. И тогава накрая аз съм докладване цената. Аз съм един отпечатване дял на такъв и такъв. И не забравяйте, това е най- начин в PHP-- начин в PHP-- където не е нужно да правите на знака за долар S вече. Можете да използвате само фигурни скоби и да се включат в някоя променлива. Не е нужно да се притеснявате за използвайки ФОРМАТ по същия начин. И като се отмени, когато поставите променлива вътре в двойни кавички, като този, използвате фантазия техника нарича променлива интерполация. Това просто означава, включете променливата тук. И като настрана, някои от вас, които идват от други програмни среди, не можете да използвате апострофи около струни за да направите това. Трябва да използвате двойни кавички за променлива интерполация да работят. В противен случай ще буквално виж тези фигурни скоби. Така че накрая, нека да вървим напред и да стартирате тази. Позволете ми да направя моя терминал малко по-голям. Нека да вървим напред и да тичам вътрешността на моя цитат директория. [? CDsource?] [? AM?] [? цитат?] PHP цитат дот PHP, и аз отивам да търсите за нещо като GOOG, който е негов символ махало, и една акция от новата си име, Alphabet Inc, струва $ 717, считано от днес. Добре, ако искаме да тичам това отново, всеки, имам друг на акция те искат да гледам? Microsoft мисля, че е този, MSFT-- $ 53. Мисля, че Yahoo е може би това. И Facebook е, че. И така, какво е тази програма правите? Магията изглежда се вгражда в тази справка функция. Така че нека да хвърлим един бърз поглед. Оказва се, че не идва с PHP, тя е в functions.php. И ние няма да мине през това в големи подробности, но забележете оперативна дума тук е че по линия на шест functions.php-- Аз буквално казват функция. I посочва името на моята функция. Тогава аз зададени всеки доводи, и параметри, Искам тази функция да не take-- видове. И тогава аз го приложат. И аз ще махам с ръка при изпълнението, тъй като това е доста напреднала полето сега, но ние ще го видим отново в действителност за една седмица в проблем определя седем. Но мога да се почисти тази линия, също. Аз също се включват в днешния код версия на цитата, който е без точков PHP файл. Защото това, което е вероятно най- Начало на програмата, наречена просто цитирам? Това т.нар shebang-- на доста загадъчен заклинание която казва намерите PHP и след това го изпълни на моя код тук. Добре, така че носи ни, където сме спрели Последният time-- макар и с някои по-съвременни примери. Всякакви въпроси до този момент за PHP или какво правим? No-- оправи. Да? АУДИТОРИЯ: Вътре в HTML файлове, да направя you-- [? нали?] [? просто го наричаме?] а [недоловим] PHP файл? DAVID Malan: Добър въпрос. В уеб контекст, който сме буквално да прехвърлите да, не използвате т.нар вертеп в горната част, защото уеб server-- често програма, наречена Apache или Microsoft IIS, Internet Information Server, или произволен брой други уеб сървър софтуер, знае, че когато го вижда файл дот PHP, че тя би трябвало да работи на преводача върху него. Той не гледа, че на първа линия. Така че този първи трик линия е само когато сте написването на командния ред programs-- които ние няма да правим супер често, но това е нашият начин за преминаване С нашите примери до сега нашата PHP. Така че нека наистина се преодолее този свят от света на команди в интернет като направите следното. Нека да вървим напред и да изготви тук само за миг. Така че, ако имаме уеб сървър, или по-скоро ако имаме лаптопа си тук, която ще направи по този начин. И тук имаме интернет в някаква форма. И тогава насам, ние имаме сървър в building-- това е начинът, по интернет works-- и тук е сървър с някои светлини може би. Какво всъщност се случва между тези две връзки? Така че в тази сграда е уеб сървър. Това е просто един компютър че е тичане някои операционната system-- може би свободния софтуер, наречен Apache, които CS50 IDE работи. Така че всъщност можете да мисля, че на тази сграда като сградата, в които CSt0 IDE се съхранява. Това е, когато всичко, което трябва сметки, където всички вас имате собствен уеб сървър бягане, всички от вас имат свои собствени уникални URL адреси, като сме започнали да обсъждат, и ще видите още в P. определя шест. Тук е моят лаптоп някъде другаде в интернет. И така, когато посетите даден URL, който принадлежи за мен, че интернет трафик ще към сървъра, на сървъра получател на HTTP request-- като получите index.html и това е отговори на този уеб страница. Така че това е обща парадигма. Като има предвид всичко до сега днес, всичко се случва само в пределите на тази сграда. Бях с моя лаптоп, но Бях свързан с CS50 IDE, така че всички от тези програми тичах е вътре в този сървър, само себе си. Но сега, нека да започнем повторно използване на PHP да напише някои реални програми, които се сервират с уеб сървър. И за да направите това, аз отивам да отидете в цял куп примери че се въведе тази идея тук. Така че това е един вид един луксозен начин на описване на парадигмата на програмиране. И всъщност, като излезете CS50 или работи по окончателните проекти, или отнеме известно следвайте на класа, вие ще започнете да се види, че world-- особено израснал с езици като C които са супер ниска level-- осъзнават, че има по-добър начини за писане на софтуер. Има някои модели можете да следвате, някои начини за организиране на вашите файлове и начини за именуване на вашите функции, така че дълга история кратко, света е дошъл с цял куп акроними и имена за начини за програмиране. Това са само техники може да се използват. И един от тях се нарича MVC, за Model View Controller. И това е само, за сега, прекалено сложно начин да се каже как трябва да изложи сайт на PHP-базирани, в нашия случай. Как да организирате файловете, как да организирате вашата логика, по начин, който го прави по-лесно да се напиши по-сложни уебсайтове? И наистина, ние бързо ще стигнем до там с р-зададете седем. Така че в света на MVC, ти започваш за да видите, че нашата код може по принцип да се характеризира като образец код, или код контролер, или вижте код. И аз отивам да тя свръхопростяването като follows-- контролера е мозъците на вашата програма, това е, когато всички от интересна логика случва. Така че всичко, което сме били писмено до този момент в клас, е нещо като контролер code-- това е контролирането вашата програма, вашите примки, си условия, вашите функции и променливи и всичко това. Прегледи, сега, ще бъде малко по- по-очевидна в света на интернет. A мнение е естетиката на вашия сайт. Това е това, което потребителят sees-- изображенията, на HTML таблици, на HTML тагове, както и всички на това, всички от пухкав естетиката неща, които не е толкова трудно да пиша, но е само това, което генерира, е т.нар гледката, естетиката. И модел, в крайна сметка, ще да бъде на база данни, която stuff-- ние ще започнем да се гмурне в цялата колкото повече тази сряда. Така контролер е логиката, мнение е естетическата неща, и модел ще бъде, където ние съхраняваме нашите реални данни. Така че нека да погледнем на това по-конкретно със следния пример. Отивам да отидат в моята директория тук на днешния източник code-- всички от които е на разположение онлайн. И аз ще отида в версия нула. И тук is-- нека да го наречем на Версия за нула на уебсайта CS50 е. Няма много тук изобщо. Това е много проста уеб страница, която е вероятно използва това, което току-що HTML tags-- Предполагам, че от последните примери? Какво е това? H1-- вероятно за този голям смели заглавието, това лого до върха, CS50. И какво друго е в играта? Да? АУДИТОРИЯ: неподреден списък. DAVID Malan: неподреден list-- така че UL маркер и може би няколко LI тагове. И ако не си спомняте това, честно казано не е от значение. Това са пухкави вид подробности по изпълнението на HTML че можете бързо да погледнете нагоре и отново сте на път. Ние ще се съсредоточи повече върху програмирането идеи, които са най-сочни парчета. Така че нека просто да хвърлите бърз погледнете на HTML-- и наистина ако се отворят източника на оглед тук, Мда, Това е точно това, което става тук. Има един таг UL. Загнездена вътрешността на който е да LI тагове. И тогава аз назаем URL на действителния конспекта тук. И тогава в lectures.php е очевидно друга динамично генерирани страница че ще трябва, нека да see-- ах, през първите две седмици на лекция. Така нула седмица и една седмица нека Посетете this-- ако видите изходния код на страницата също супер проста. Те са водещи до две страници наречено week0.php и week1.php. Така че, помисли сега какво се случва. Когато кликнете върху week0.php, моя лаптоп прави искане за week0.php. Уеб сървъра, a.k.a., CS50 IDE, се получава, че виртуалната плик. Тя видя съобщение подобни, се week0.php. След това тя се интерпретира файл, отгоре до долу, от ляво на right-- файла наречено week0.php-- и изплю резултатите. Така че във вътрешността на този файл, week0.php, трябва да бъде Логиката на контролер, който генерира този HTML, и скоро ще видите, че. Но за сега, нека да кликнете върху нула седмица и сега имаме сряда и петък, и сега имаме слайдовете бавно от нула седмици. И вие може да си припомни това от обратния път, когато. Така че това е всичко, този сайт се прави. Така че нека да разгледаме как се прави това. Отивам да се върна в изходния код тук, в CS50 IDE, и аз отивам да се отворят index.php. В горната част на този файл е един куп коментари. И след това в средата на този файл, той, Оказва се, не е PHP код, каквато. Защото, ако не са в някое от отворена скоба въпросителен знак PHP тагове, вие сте свободни да съм сложил HTML. Защото това, което ПОЗ преводач, е трябвало да се направи, е, когато го прочете това file-- отгоре надолу, наляво, за да right-- интерпретира само код го вижда между тези ъглови скоби въпросителен знак. И нещо друго, което не го прави признае като PHP, той просто изплюва. И HTML е между вещите тя просто ще изплюе. Така че този файл може да има е наречен index.html, но аз съм именуване всичко дот PHP като трамплин. Lectures.php-- аналогично underwhelming, това е просто някакъв HTML. Week0.php, по подобен начин само някои HTML. Но сега нека да сложи на пословичната инженеринг шапка, и помисли как можем да подобрим това. Не е трудно да се направи това, но аз натура на децентрализиране на копиране и поставяне. И всъщност, ако правя два седмици, вие знам какво вероятно ще правиш? Отивам да отидете на week1.php, аз съм Ще подчертая всичко. Отивам да го копирате, поставете го в нов файл, наречен week2.php, ощипвам някои от тях, както и да бъде на пътя ми. Така че на базата на това, което сме вижда в C вече, това не се чувства добре, да се надяваме. Copy, паста рядко правилното решение. И така, какво можем да започнем да направим, за да подобрим това? Къде са възможностите за по-добър дизайн? По времето, когато стигнем до седмица осем, че ще ходи да бъде много досадно ако искам да се промени шрифта на всеки един от страниците си, или ако искам за промяна на структурата на оформлението. Е, къде е възможност за по-добър дизайн? Ами, нека да помисли за това, което е споделяни между всички тези файлове. Ето една седмица, ето седмица нула, ето lectures.php, ето index.php-- това, което е едно и също и това, което е различно, грубо казано, Във всеки от тези файлове? Да? АУДИТОРИЯ: [недоловим] DAVID Malan: OK, добре. Така че има един модел, със сигурност, при която всеки път, когато изберете лекция I, Аз трябва да се генерира много подобен изглеждаща страница. И така може би мога да се наберат факта, че наистина, ние умишлено числено индексира нашата lectures-- ако мога да сложа още по- думи в отговор на въпроса си. И това, което е единственото нещо, наистина, че се променя между седмица one-- и нека да превъртите надолу, така че това е приблизително в същия place-- така че тук е нула седмица приблизително в горната част. Ето една седмица, седмица нула, една седмица нула седмица. OK, буквално, ако знаете нито една програма не каквато, сега това е точно като модел за съвпадение на играта. Така че това, което е по-различно? Да? АУДИТОРИЯ: [недоловим] DAVID Malan: Добре, така че титлата се променя, все така леко. Нулева върви, разбира се, до един. Същото нещо се случва в тага H1. И ние съвсем не го виждам толкова лесно, защото адресите са малко дълги. Но тези URL адреси се променят леко. Но това, което не се променя е, смея да каже, повечето от съдържанието на page-- на HTML тагове е същото, на главата е една и съща, титлата е почти същата, тялото е същото, и почти всичко останало е същата, с изключение на тези малки ощипвам. Така че как можем да отида за факторинг някои от това? Ами нека да предложи точно че в следващата версия. Така че тук, в една версия, имам точните същите файлове, плюс няколко други. Ето index.php-- и дори ако никога не сте виждали преди PHP, аз какво правя вероятно да се реши този problem-- въз основа на това, което виждате тук? Да, е, че лек ангажимент? Не? Да, давайте. АУДИТОРИЯ: [недоловим] DAVID Malan: Да. АУДИТОРИЯ: [недоловим] DAVID Malan: Имам нужда от теб, за да говори малко по-силно. АУДИТОРИЯ: [недоловим] DAVID Malan: OK, добре. И аз think-- беше Трудно е да се you-- но чувам мисля, че това, което става е, че най- маркерите, които са били чести до върха, и таговете, които бяха често на дъно, вече са отчетени навън, или свежда до какви файлове? Header.php и footer.php-- и отиваме да се направят някои ощипвам да отговори на загрижеността ви просто повдигнат въпрос за промяна на номера, за Например, ако аз ви чул правилно. Но това изглежда е същността на това. Ако е имало огромно количество съкращения в горната част на страницата, и огромно количество излишък на дъното, нека буквално маркирайте и нарязани, че съдържанието се, сложете го в отделна file-- точно като идеята за CSS, където ние отразено от много сходни естетика, пуснати то в отделна точка PHP файл, използвате изискват mechanism-- които е като C остър include-- които по същество е като да кажеш, отидете вземете съдържанието на header.php, и копирайте ги тук. Но какво означава това е, че в момента в index.php, имам тези две линии. В lectures.php, аз също имат тези две линии. В week0.php, аз също имат тези две линии. Така че сега, ако искам да се промени Заглавието на всички от моите страници, или I искате да промените фундаменталната структура, Мога да го промените сега само едно място, или две places-- горния и долния, съответно. Сега отправна кодът е да погледнем малко по-загадъчен, нали? Но ако мислите, че за това, което страницата е doing-- ако аз съм с искане week0.php, точно като за съставянето над here--, когато се иска week0.php, какво означава това? Буквално, този файл е поискано от браузъра. Мрежата server-- a.k.a. CS50 ID-- грабва този файл, week0.php, и чете тя горе до долу, от ляво на дясно. На първа линия, тя веднага се сблъсква отворена скоба въпросителен знак PHP, изисква удар с глава на дот PHP и т.н. какво PHP интерпретатора does--, който е вграден в интернет сървър, защото ние предварително конфигурирано то за you-- той автоматично отива в header.php, копия на съдържанието пасти ги тук. Но след срещите преводачески въпросителен знак в близост скоба, така че е направено всичко, мисля. Сега тя просто сляпо плюе посочени линии два през седем, защото това е просто сурова HTML. Взима да се подредят осем, а не, че същата магия again-- отваряне на досието, заграбването на съдържанието, и изисква от тях или да ги поставите Добре тогава, или там. Но аз просто намекна за бъг. Това е частична крачка назад, защото ако погледнем в header.php, Аз бях вид нарязани корнер. Каква функция съм се откажат, за за да получат това спорно по-добър дизайн? Да? АУДИТОРИЯ: [недоловим] DAVID Malan: Да, аз вид на подстрижете nontrivial корнер. Можете посочи, че това, което се променя е заглавието, броят в заглавието, и броя на H1. Така че моето решение е, OK, нека просто преименуване на страницата, и не се занимава с този проблем, каквато. Така че това е частичен стъпка назад със сигурност. Но какво да се отбележи тук е, че това, което съм направил е отразено в противен случай цялата общата неща. И в footer.php, забележите I заложен всички от които, макар и по-малка, Общата неща. Така че аз трябва да по някакъв начин сега е в състояние да предприеме още една крачка напред, и да определи че въпросите заглавие. Така че нека да го направя. Позволете ми да отида в моята втора версия тук, които, отново, има същите файлове с изключение на едно ново попълнение. И това е малко по- многословен, но нека да видим дали можем може да дразни, освен това, което става тук. Така че вместо да изискват header.php и footer.php, Аз като че ли се само една изискваща file-- нарича, разбира се, helpers.php. И нека да предвидят сега, това, което е вътре в helpers.php е просто един куп функции че съм написал, точно както преди. Но аз го нарича helpers.php. Сега изглежда, в Онлайн три и 10, аз съм наричайки две functions-- направи удар с глава, направи долния. Тези, не идват с PHP, аз написах тези себе си. И аз ги поставя в helpers.php. Сега, ние виждал само този синтаксис веднъж, и това беше супер кратко. Но това е очевидно аргумент да направи удар с глава, функцията. Защо ли това? Ами тук е близо скоба, тук е отворена скоба. И разбира се, точно както в C, нещо между тези скоби е input-- или аргумент на функцията. Какъв е типът данни на този аргумент, въз основа на това, което съм подчертано? Какво правят тези квадратни скоби посочва, базирани на миналата седмица? Да, това е един array-- специално асоциативен масив. И този синтаксис несъмнено е малко по-фънки, но това е просто преминаване в една двойка ключове стойност. Ключът е, цитирам цитата заглавието, а стойността е CS50. Ако бяхме направили това в C, тя вместо това могъщество изглежда по-скоро това, просто цитирам цитата CS50-- или действително би било къдрава скоби, или нещо подобно, че в C, когато ключът е нула, и стойността е CS50. Но отново, в PHP, въпреки че синтаксис е, отново, малко странно, тя ви позволява да премине в думи, вместо номера да се сдружават с ключове ценности. И така, какво означава всичко това? Ако аз отида в helpers.php, нека да погледнем на тази функция. renderHeader.php, скоро renderHeader е моята функция, и знам, че защото виждам функцията ключовата дума тук. Това е ново от него C-- очевидно приема аргумент, наречен data-- но бих могъл да нарече това нищо, но аз го нарича данни, само за да бъде малко clean-- и просто да вземе предположение, особено ако сте се програмира по някакъв друг висше ниво на езика и преди, нещо, горе C, концептуално. Какво прави равен отворена скоба квадратна скоба вероятно означава? Или какво може да означава това? Ние не сме виждали това в C. Да? Един празен масив. По-специално, това означава, че ако потребителят не поставя renderHeader с аргумент, аз съм все още продължава да има аргумент, наречен данни, но стойността му по подразбиране е щеше да бъде празен масив. Така че това е просто едно хубаво удобство. Не е нужно да се крещи на потребителя, или казват, че използват моя функция погрешно. Мога само да дава на потребителя по подразбиране стойност, ако не се интересува особено. Сега тази функция, аз съм ще махне ръцете ми в. Но този екстракт функция позволява нас, за да премине тези променливи в данните в header.php по следния начин. И това е последното парче, Мисля, от фънки синтаксис. Тук е моята нова версия от него header.php-- използва, за да се каже, буквално, отворена скоба заглавието CS50, и това беше всичко. И едно и също нещо за H1. Сега тя очевидно казва нещо доста фънки. И нека да опрости това за момент, както следва. Това е, което съм промених заглавието да бъде. Въпреки това, той става все по-малко грозно постоянно отворени скоби с PHP, и след това да използвате функцията за печат. Оказва се, че PHP е с стенограмите нотация за това, което е просто знак за равенство, която е технически по- функция, наречена ехо вместо печат, но това е едно и също нещо, ефективно. Това просто изглежда по-добре. Това е просто една синтактична захар, ако щете, който прави моя код изглежда малко по-добре. Но се оказва, и ние ще видим това отново не след дълго, ние трябва да наричаме това дразнещо дълго функция, наречена HTML специални символи в PHP, защото се оказва, има някои суровини че потребителят може да ни даде, или, че потребителите могат да ни дадат, които се случва да пробие нашия сайт. Но ще видим, че през следващата седмица с JavaScript. Но за сега, просто знам, че този файл, headers.php, просто отнема титлата, че Минах през това направи уверите, че е безопасно да се инжектира в уеб страница, и то я изплюва като титлата си и като ми H1. Така че, ако аз отида в тази версия сега, забележите, че има лекции заглавието му обратно, нула седмица има заглавието му назад и наистина, аз съм генериране на HTML е идентично с това, което моята първа версия was-- с изключение на моя празно, защото аз бях започнал форматиране кода ми малко по-различно. Но аз съм генерира всички кода ми пука за. Така че нека да спрем за само за момент и да видим ако има някакви въпроси или объркване съм създал. Добре, така че нека да се обърне малко по-трудно тук да се види дали има по- възможност за подобрение. Helpers.php също имаше тази функция, наречена renderFooter. И това, което е забележително за renderHeader и renderFooter? И отново, за днешните цели, знаете че функцията екстракт е просто моят начин на преминаващите доводи в header.php и footer.php. Съжаляваме? АУДИТОРИЯ: [недоловим] DAVID Malan: Да, аз само променила изискват ред. Така буквално, че съм извършил греха на копиране и поставяне, за пореден път. Това не е огромен брой на линиите, но дойде on-- ако аз съм копирате и поставите всичко само за да се промени една малка дума, и една малка дума, че Alan точки изход е Footer тук, в сравнение заглавна тук. В противен случай, всичко е идентични, с изключение на, разбира се, Имената на функциите му. И така, какво можем да направим по-добре? Ами нека да отворят тази версия тук, при което в helpers.php, защо не мога просто да се малко по-умен за това? Напиши малко по-сложно код, но наричаме го направи? Така че това, което са ми коренно се промени? Той приема аргумент now-- два аргумента, данните все още. И тогава какво е първото име вероятно се използва за, въз основа на това, което четете тук? Дори и някои от синтаксиса е все още нов. Какво е знак за долар шаблон? Съжаляваме? АУДИТОРИЯ: колонтитулите. DAVID Malan: колонтитулите. Така че очевидно, аз реших, че ако единственото нещо, което се променя е това, което аз искам шаблон да print-- и чрез шаблон Искам да кажа, че това е проект за код, който аз искам да изход, но искам да включите в някои values-- така че ако това е само глава или долен колонтитул, защо не съм задаване на параметри че и позивна на аргумент долар шаблон? И тогава този фънки синтаксис ми позволява да се създаде път в променлива тук. Така знак за долар път е променлива. Какво прави този синтаксис направите, ако сте запознати? Да? АУДИТОРИЯ: [недоловим] DAVID Malan: Точно така. Ако шаблон е, цитирам цитата, глава, или ако е шаблон, цитат цитата, долния, че има линия че съм подчерта, линия осем, просто като това име, като с глава, и слепване на дот PHP. Така че ние не разполагаме с този оператор в C. Тази точка е с оператор нещо невероятно в PHP-- ако сте запознат с JavaScript или Java, можете да използвате плюса подпише, за да се направи конкатенация. В C, това е болка в neck-- и аз съм толкова съжалявам, в р-зададете шест, започваш да трябва да направите, this-- това е болка в областта на шията да свързвам струни. Защо? Ами, защото ако имаш низ, който е толкова дълго, и друг низ, който е толкова дълго, не може просто да ги включите заедно. Какво трябва да направите, вместо в C? Да? АУДИТОРИЯ: [недоловим] DAVID Malan: Трябва да се изчистване памет, или да използвате масив на стека. И вие всъщност трябва да направи този масив достатъчно голям за да се побере това, плюс това, плюс наклонената черта нула. След това ги свързвам заедно с използване на разбърква котка или ръчно с по линия, или произволен брой техники. И ние ще ви покажем няколко в р-зададете шест. Това е болка в областта на шията. И това е наистина това, което искам да кажа за това сравнение this-- като C в сравнение с PHP. Вие просто се толкова много повече функционалност безплатно, така че можете да се съсредоточите, в идеалния случай, веселбата част от кодиране, на проект, който искате да се реши, а не дреболии ниско ниво. Така че това просто генерира header.php или footer.php въз основа на които една аз наричам. И наистина, ако отида в index.php, известие всичко, което е changed-- Вместо наричайки направи удар с глава или да направи футър, Обаждам се оказва, следвана от името на шаблона, че искам да направя. И вие ще видите това, също в проблем определя седем, чрез което да ви позволи да използвате същата функция, за да направи букети и букети от различни уеб страници. Така че, вместо да живеят твърде много повече на тези details-- които ще видите отново в проблем набор seven-- нека погледнем сега в началото на разтвор за по-интересен проблем. До този момент, ние сме нищо направено има записани данни. Всъщност, единственият път, който някога сме спасени нещо, което сме правили в този клас е, когато имахме един много прост демо известно време обратно, при която ние използвахме файл IO в C, и мисля, че аз напечатани в Мое име, и Име на Хана, а името на Мария, или може би името на Анди, и тогава ние спаси CSV file-- разделени със запетая стойности файл. И ние използвахме fopen-- Мисля ние използвахме fprintf доколкото си спомням, и ние запазена файл. Сега, това е най-простата форма на база данни. Ако искате да направите уеб сайт за Програмни Фрош УИ, като първокурсници да се регистрирате за спорт, можете идеално искам да направя нещо с тези данни. Миналата седмица направихме нищо с data-- ние току-що каза, сте се регистрирали, не съвсем. Или може би аз емайл на Проктър и това беше всичко. Но би било хубаво, ако можех дам, че Проктър файл CSV, като файл Excel. Или още по-добре, че ще било хубаво, ако можех постави имена на тези потребители и общежитието имена и всичко това в база данни, която просто живее вечно, докато не решите да изтриете данните. Базата данни, която позволява мен, да намират информация. И наистина, това е, което е база данни. Ние Ви представим днес, и следващата седмица, също технология наречено SQL-- на Structured Query Език, който е друг език. Това е по същество една програмиране език, но за бази данни. И на база данни за сега, просто мисля за като супер фантазия версия на Microsoft Excel или Google Spreadsheets, или Apple Numbers. Това е като цяло програма, която позволява можете да съхраните цял куп данни в редове и колони, доста като може би в Excel. Но това, което е хубаво, особено ако ние не сме супер запознат с Excel, какво SQL ви позволява да направите, е заявка за това информация от написването реда код когато можете, дори ако вашият база данни има един милион реда в нея, можете да намерите неща, супер бързо. В действителност, е особено Excel зле големи масиви от данни. И в действителност, до няколко Преди години, се оказа, Excel ще позволи само да съхранявате до 65,535 редици data-- които звучи като много, но в време бях аспирант и си спомням препъване това, защото аз се генерира CSV файлове за изследванията ми и аз Исках да ги анализира бързо само с отваряне в Excel. Разбира се, компютъра ми просто се разби, защото имах повече от 65,000 редове. Но къде са 65,535 идват от? Какво правеше Microsoft, вероятно? Ако сте добре с правомощията си на две? Да, те са били с помощта на 16-битов стойност да представлява номера на реда. И два до 16 е 65,536-- минус едно, защото ако индекс нула означава, че е бил Най брой редове мога да имам. И това е просто решение за дизайн. Чрез спестяване на 16 бита, те ме ограничава до 16,000 редове, вместо 4 милиарда които съм могъл да има идеално. Но за сега, ние ще представим това повече в уеб контекст. И това, което е хубаво за SQL е, че дори макар че той е доста мощен и доста сложна, тя наистина се свежда до четири основни операции, четири ключови функции, ако will-- изберете, за извличане на данни, търсене за данни; изтриване или изтриване на данни; вмъкнете за добавяне на редове в базата данни; и актуализиране. Така че, ако някога сте се използва Google Електронни таблици, Apple, Microsoft Numbers Excel, вие сте изпълнени, Най-вероятно всички на тези операции като човек от само с помощта на клавиатурата и mouse-- вкарване на данни, с помощта на очите си за да изберете или да потърсите информация, или актуализирани данни или изтриване на данни. И така, какво означава това? Е, предварително инсталиран в CS50 IDE е една програма, наречена MySQL. Това е безплатна, с отворен код база данни, която е супер популярен. Facebook, например, го използва за тази ден, наред с други инструменти, които те използват. И много много популярни уеб сайтове използват тя в голямата си част, защото е бърз, и тъй като това е безплатно. Въпреки че със сигурност съществуват алтернативи. И някои от вас може би бъркам с алтернативи за окончателните проекти. Това е снимка, междувременно, на уеб-базиран инструмент, наречен PhpMyAdmin. Това е съвпадение, че този уеб-базиран инструмент също е написан на език, PHP, но това, което е писано да се направи е да ни даде на уеб-базиран интерфейс към база данни. Тъй като обикновено е MySQL нещо, исторически вас, ще си взаимодействат с единствената с команден ред. И би било супер досадно и тайнствена да има да въведете текстови команди, за да изберете данни, вмъкнете данните, и изтриване на данни. Така че някои хора в интернет пише уеб-базирана програма че просто нека да управлявате данните в нашата база данни. Това е като двойно кликване върху Excel, и използвате уеб-базирана версия него. И това, което ще използвате този за в крайна сметка през следващата седмица, а не в р-зададете шест, но е да се изгради нещо наречено CS50 финансите, което ще има база данни от Потребителите, с потребителски имена и пароли, долара възлиза че те имат в банковите си сметки. Това ще бъде нещо, което се използва за съхранение символите и количествата на запасите, които потребителите Купих си, използвайки виртуална долара, които ще дадат на тях. И това ще позволи на потребителите да се регистрирате за вашия сайт, така че дори приятелите си могат да настройват към вашия уеб сайт и действително да се регистрирате, влезете в системата, и си поиграете и се опитват да се намери виновен в кода си, и се опитайте да намерите грешки в своя уебсайт. И те просто ще се регистрират от самите добавяйки, ефективно, чрез код пишете на вашата база данни. Например, това е бърз скрийншот на каква база данни може да изглежда така. Това е от един от миналогодишните solutions-- това е като мини Excel файл, съхраняван в нашата база данни, съхранявана в този софтуер, наречен MySQL. От лявата страна, аз съм явно дал на всеки потребител с уникален номер. Във втората колона, дадох всеки потребител name-- моята собствена между тях. И на дясната страна, Аз съм ги дал хашиш. Сега това е всъщност парола, но това не е обикновен текстов парола. Това е криптирана парола, ако щете, или парола хашиш. Което ще се върнем, за да не след дълго. Но ако сте чели една статия за това как паролата си в някакъв банка или някои уебсайт може да са били изложени на риск, като цяло той може да означава едно от следните две неща. Така че това е само един откъс от шест потребители. Всички вие сега мога да проумея изложени чрез хакване или напукване какви пароли нашите шест хората са. Но ако някога сте придобили сигнал или извинение от компания или уеб сайт поговорка, Съжалявам, хакер разби в нашата база данни, вероятно ще трябва да смените парола, какво може да означава това? Е, едно, би могло да означава компанията е била по-глупаво, и е съхраняване парола в колона като тази, некриптиран. Което означава, че противникът, който е откраднал базата данни, буквално знае си потребителско име и парола. Това е най-лошия възможен сценарий. И както ще видите в р-сет седем, така че лесно да се избегне. Няма абсолютно никакво извинение за това форма на глупостта в днешния интернет. Two-- и ние ще намерим някои статии да свидетелства фактът, че това все още се случва, nonetheless-- две, може би противникът открадна тази версия на базата данни. Което е още един вид лошо, защото сега те знаят, че аз имам шест клиенти, Знам имената на потребителите на тези шестима клиенти, и знам, че кодираната версии, или хешираното версии, на пароли тези шест клиентите. Но всеки от вас, които биха могли са направили [? Hacker 2?] където можете напукани пароли, или е взела Един поглед към тази версия на проблема набор, защо е все още малко тревожен ако противникът знае вашия хеш пароли? АУДИТОРИЯ: Защото те биха могли въведете цялата речника в хеш функция. И ако вашата парола е речник Думата, [? те могат просто match--?] DAVID Malan: Точно така, противникът може просто да пишат код, като някои от вас направил за [? Hacker?] 2, чрез която можете обхождане всички думи в речника, или всички възможни комбинации на чрез Z и един през nine-- което звучи като много, и това е. Но за компютър, това е дяволски много бързо. И в действителност, това е точка на [? Hacker 2,?] Беше да вземат неща, които буквално изглежда по този начин, и обратно инженерство какво всъщност беше. Така че ние ще разгледаме как можем съхраняването това по-ефективно. Оказа се, за щастие в MySQL, там ще бъде типове данни. И един от най-забавните части за дизайна на базата данни, за да бъдем честни, е действително да реши за себе си как трябва да сте представител на данните? Ако сте представител на телефонен номер, както е пад, като голям брой, или дълго? Или искаш да всъщност го направя като последователност от символи? И не може да има много нетривиални въздействия от тази. В действителност, един от най- Най-ранните, забавни истории уместен е, когато Mark Zuckerberg строеше Facebook, той е написан в, и все още до голяма степен е написано на PHP. И един от най-големите предизвикателства те се сблъскват в началото на деня беше мащабиране. Когато те държат добавяне училище след училище след училище, доколкото ми е известно, един от оригинални решения е по същество да копирате и поставите някои от базите данни, и някои от кода, така че е Harvard тичане на своя собствен сървър, и MIT е действал на своя собствен сървър. И затова, за някои от вас, които биха могли да се припомни, не можеш да имаш приятели в други мрежи. Вие вероятно нямате приятели MIT или Харвард преди 10 години, или така, но вие не може да обхване мрежи за частично тази причина. И един от най-големите предизвикателства за Марк и за компании като Facebook е всъщност работа стотици и хиляди и милиони на заявки в секунда. Така че нещата ще започнем Говорим за тази седмица са наистина ще да е уместна написването добър софтуер и популярно успешните инструменти, които може да се справи много потребители. Така че ние ще говорим за неща, като индексиране и търсене, но и че е за днес. Ние ще ви видя повече в сряда. [MUSIC - "Зайнфелд" ТЕМА] DAVID Malan: Можете да него, и се изважда от него. И не е нужно да си с някои предварително определена сума на паметта. Е, това, което е, че ще се обади? SPEAKER 1: Е, какво се случва? SPEAKER 2: Какво искаш да кажеш? Той изнасяше лекция. DAVID Malan: И ние можем да използваме по- функция, наречена изчистване да memory-- SPEAKER 1: Защо да не се движат в ръцете му? SPEAKER 2: Ами that's-- знаете ли, това е нормално. Това е точно като той има само големи колбаси висят там. SPEAKER 1: Това е нормално? SPEAKER 2: Да, аз мисля, че ние Просто се предположи той случайно заменя дезодорант си с лепило.