ДЕВІД Малан: Добре. Це CS50, і це кінець тижня дев'яти. Це був вихор над за останні кілька днів. І проблема встановити сім, якщо ви коліно глибоко в неї, зрозуміти, є досить трохи нового, що там всередині. Але давайте подивимося, якщо ми не можемо зібрати всі разом тут коротко до цього згортають в ще інший напрямок і бачення де ще ми можемо піти. Так до сих пір, ми говорили про HTML. Ми говорили про CSS. Ми говорили про PHP. Ви почали відчувати SQL. Сьогодні ми поговоримо трохи про JavaScript. Але як всі ці розрізнені мови поєднуються один з одним? Тому ми говорили минулого тижня про Поняття має сервер. Так що давайте просто намалювати цей прямокутник як веб-сервер тут. І веб-сервер служить, безумовно, файли. І деякі з цих файлів може бути HTML файли. Таким чином, одна з речей, які веб-сервер може виплюнути може бути файл, який ми просто малювати, як це містить деякий HTML. Так з точки зору непрофесіонала, що робить HTML дозволить вам зробити? Зали: добре виглядати. ДЕВІД Малан: Добре, зробити сторінку виглядати красиво, хоча я думаю, я довів що інакше. Так HTML браузер дозволяють викласти сторінок структурно, і це дозволяє роду естетично зверстати сторінку, розмічати статичного контенту, так що ви Потім можна переглянути за допомогою веб-браузера. Але це ключ. Це статичний контент. Ви пишете, ви збережете його, а потім ви вантажте його. І веб-сервер потім служить це до ваших відвідувачів. Але ми стилізувати речі, використовуючи різні мову в цілому. Ми почали використовувати атрибут стилю на певних тегів. І атрибут стилю покладемо речі, як розмір і колір шрифту. І ви, мабуть, відкрили для себе, або ви скоро для остаточного проекти потенційно, всі ж інші властивості, які можна використовувати в CSS. І так з точки зору непрофесіонала, що дійсно ж тоді CSS робити? Це всього лише приклади їх. Що це дозволити вам зробити це HTML здається, не від того, що ми бачили дотепер? АУДИТОРІЯ: Визначити стилі самостійно. ДЕВІД Малан: Визначити стилі самостійно. Так визначають речі, як класи, як ви напевно зустрічали, або однозначно ідентифікувати вузли в документі так що ви можете стилізувати їх. Але конкретніше, я б сказав, що CSS дійсно дозволяє робити речі останньої милі і дозволяє задати багато точніше естетика, в той час як HTML здебільшого дозволяє структурувати свої сторінки. І хоча є деякі замовчуванням, як ми побачили мітку для заголовок тег, який, грубо кажучи, зробив речі великий і жирний. Це досить загальне визначення тега - великий і жирний. Який розмір шрифту є те, що? Що це колір? Як сміливий це? І CSS дозволяє вам більш точно налаштовувати такі речі. Так само як розташування, так як деякі з вас бачили. І, чесно кажучи, CSS трохи безладна мовою. Це дуже потужний в тому, що ви можете зробити буквально будь-який веб-сайт, що ви бачив в Інтернеті сьогодні з ним, але це вид болю в області шиї. І деякі з вас вдарив головою проти стін уже просто зробити дурість як центру по меню Проблема встановити сім, якщо ви дійшли до що точка вже. Але зрозумійте, ті речі, легшає з часом. Ви починаєте помічати закономірності. І знову ж, Google буде вашим другом для різних способів, якими ви можете вирішити подібні проблеми. І я наважуся сказати, з CSS, і HTML більш зазвичай, ви можете вирішити проблеми в багато інших способів, кожен з яких міг би дуже добре бути правильним, ніж ви могли б в чимось на зразок C, навіть Тепер PHP або JavaScript. Є лише багато різних способи лежали речі. Але це почав отримувати брудний, ми сказали. Просто вид змішання ваш HTML і ваш CSS з атрибутом стилю було трохи недбалий. І таким чином ми замість сказав, свого роду абстрактно кажучи, що ви повинні принаймні, почати фактора з вашого CSS, ймовірно. Атрибути не ваш стиль, але принаймні використовувати тег стиль всередині того, що частина веб-сторінки? АУДИТОРІЯ: зав. ДЕВІД Малан: В голові. Досі у нас був тільки титул до там, але ви також можете додати стиль помітити, і ви можете покласти ваш CSS приблизно кажучи до верхньої частини сторінки. Але тоді ми взяли речі на один крок далі і ми врахували, що більше в окремий файл. І ось ці два файли були якось тепер пов'язані. І справді це було тег, який зробив це. І те, що був одним з всеосяжних Мотиви факторингу наш CSS тим більше? АУДИТОРІЯ: Повторне використання. ДЕВІД Малан: Повторне використання. Чи не так? Можливо, ви бачили в р-встановити сім уже що багато сторінок, покупка сторінка, сторінка продаж, Портфель сторінки, ймовірно структурована кілька аналогічно. Там в CS50 фінансів логотип у верхній якщо ви не вирішили змінити це. Там в підвал на Дно сторінок. І CSS дозволяє потім до фактору його це в окремий файл, так що якщо Ви хочете щось змінити у глобальному через весь сайт, ви можете дійсно просто змінити його в одному місці. Але є ціна, яку ви платите потенційно Маючи факторізовать CSS від мого HTML файлу в окремий подати на нього посилаються з тег, який ми бачили в понеділок. Що може недолік бути це? Згадуючи тиждень тому, коли ми говорити про HTTP і TCP / IP і як Інтернет працює. Щось тут? АУДИТОРІЯ: Це займає більше часу. ДЕВІД Малан: Це займає більше часу. Чому? АУДИТОРІЯ: [нерозбірливо]. ДЕВІД Малан: Так. Так що, можливо, займе трохи більше часу. Тому що, з CSS очевидно не в тому ж файлі. Так що тепер ви повинні зробити не один, але два запити. І кожен з цих запитів, як ми бачили в Chrome в так званій інспектора, і ми дивилися на вкладці мережі, кожен з цих файлів потрібно один HTTP Запит, який ми бачили бере деяку кількість часу. Тепер, може бути, це не так багато. Може бути, це всього в 20 мілісекунд. Може бути, це 200 мілісекунд. Але думати про сторінку, як Facebook, або CNN, або Google, які набагато більше, ніж прикладах, які ми подивився на досі. Ці сторінки можуть мати десятки файлів, кожен з яких може потребувати завантаження файлу. Так речі можуть потенційно починають сповільнюватися. І особливо в ці дні, коли всі ми є мобільні телефони в наших кишенях і низкоскоростном підключенні до Інтернету, маючи необхідність почекайте ще кілька мілісекунд, наскільки більше мілісекунд для додаткового файли можуть бути насправді повільно. Затримка це слово, яке описує вид чекає, що у вас є, що вам випробувати при очікуванні деякі частину інформації. Але є і позитивна сторона. Так що це не все начебто - насправді це трохи гойдалки тут. Нижня сторона зараз, але те, що браузери можуть зробити якщо вони розумні, щоб уникнути того, щоб просити ж styles.css подати знову може бути, щоб робити те, що? Кеш його. Так кешування - C-A-C-H-E - як правило, означає тут тільки, щоб зберегти файл, який ви просили в перший раз, і потім перевірити кеш для нього. Перевірте, що ти ніби контейнера для зберігання, і якщо у вас вже є копія styles.css, навіть якщо деякі інші сторінки в р-набору, або будь-якого веб-сайту, запросить його знову, тільки щоб надати Користувач в тому ж збережена копія. Не турбуйтеся вимагаючи його. Нижня сторона є, хоча, як деякі з вас вже спіткнувся в р-набору. Якщо ви вносите зміни на сервері і ви йдете назад в браузер, і ви перезавантажити, іноді браузер робить Ви ласку і не турбує повторно завантажуючи ваш styles.css файл тому що, давай, які шанси що ці стилі, які використовує Facebook збираємося змінити годину, щоб годину або з дня на день? Це досить низький. Вони можуть змінюватися з часом, але не з кожною хвилиною або по годинах. Так трюк, просто FYI, роблячи веб- розвиток, часто утримуючи перекласти ключ, наприклад, і потім натисніть перезавантажити у вашому браузері, і це буде зазвичай сказати перезавантаження браузера все, навіть якщо у вас вже є це в кеші. Отже, ще раз, плюси і мінуси, але всі вони в кінцевому рахунку, проектним рішенням. Так що тепер, ми не зробили всього закінчити історію тут. Якби я зараз повернутися назад і назад і назад і тому, ми почали впроваджувати не тільки HTML, але PHP. Так з точки зору непрофесіонала, що зовсім PHP давайте робити? АУДИТОРІЯ: [нерозбірливо]. ДЕВІД Малан: Що це? АУДИТОРІЯ: Назвіться логіку в код. ДЕВІД Малан: Так, ввести Логіка в код. Так що це правда мова програмування з петель, і змінні, а також Функції та умови, і все речі ми використовували шлях назад коли з нуля. І PHP, ми бачили, можуть бути використані або в командному рядку - це не повинен мати нічого спільного з Інтернету, хоча це дійсно його походження і те, що вона має тенденцію бути хорошим і сприяє - але ви можете використовувати PHP просто за своєю природою про те, що він має печатку () функція, а Е функція (), або відлуння () функцію. Там в пучки способів, якими Ви може друкувати текст з PHP. Таким чином, ви можете використовувати цю програмування мова для виведення точно про що ми говорили раніше. Ви можете динамічно генерувати ваш HTML. Може бути, не всі це. Може бути, вам жорсткі код речі, як заголовок, а в нижньому, і логотип, і ваші таблиці стилів, і все це. Але за те, як п-встановити сім, де ви маніпулюєте запасів і показуючи портфель користувача, який є збирається динамічно змінювати, можна , Звичайно, використовувати PHP і логіку, він дає Ви в якості мови програмування для Вихід динамічно підмножин сторінки. Тому, коли ви говорите про динамічних веб-сайтів, або веб-програмування, ось те, що ви насправді говоримо про. Використання мови як PHP, або речі називається Python, або Рубі або Java, або поки інші мови, запит до бази даних часто, або інший сервер, і потім динамічно виплюнути HTML. Тепер кінцевий результат, як осторонь, є що HTML більшості веб-сайтів, в тому числі ваш п-встановити сім, це, ймовірно, буде величезний безлад, якщо ви подивіться на джерело код в браузері. Це не має великого значення. На даний момент, коли ми дбаємо про стиль, ми піклуємося про речі, які ви пишете. Ми не дбатиме про речі що те, що ваші виходи код. Так що не турбуйтеся про відступу тут, якщо це PHP це насправді виведення речі. Зрештою, браузер не піклуватиметься, і людина не буде дивитися у джерела в будь-якому випадку. Ми співробітники, наприклад, були б бути дивлячись на ваш PHP. Отже, дозвольте мені дати швидкий приклад зараз про те, чому ще це може бути корисно. Так відверто, я не можу згадати останній раз я використав C, щоб вирішити проблему в реальний світ. Це було, ймовірно, в аспірантурі, коли Я повинен був використовувати мову, яка був досить низький рівень і дав мені можливість зробити щось дуже високу виконання, щоб дійсно зберегти як багато CPU цикли, як міг, в значній мірі тому що я використовував величезні масиви даних, і кожен цикл процесора враховуються. І, чесно кажучи, навіть у таких речах, як телефонів в ці дні і інші пристрої де ви не досить мати стільки пам'яті, і ви не досить мати в якості багато ресурсів процесора, використовуючи більш швидкі мови як і раніше привабливим. Але в реальному світі, коли ви просто хочете кинути якусь програму разом, щоб проаналізувати деякі дані, або ви зібрали ціла купа реєстрацій для деякі студент групи, і ви хочете, щоб дуже швидко автоматизувати відправки електронної пошти по одному, щоб кожен з тих, реєстрацій, ви збираєтеся досягти за мова більш високого рівня ніж С, так сказати. Щось на зразок PHP або Python, або Ruby, , Які існують або півдюжини інших в ці дні. Але ті три, ймовірно, наймодніший зараз. А що це означає, що ви можете відкрити до текстовим редактором, наприклад Gedit або Найбільш небудь ще, а потім просто почати написання коду, не турбуючись про компіляції, без того, щоб дійсно турбуватися про управління пам'яттю, маючи на увазі, що трохи неохайність, в кінцевому рахунку повернутися щоб вкусити вас, якщо набір даних отримує більше або проблема стає великою. Але що це означає для нам полягає в наступному. Дозвольте мені йти вперед і працювати правопису від проблеми встановити шість. Так що це мій синтаксичного дерева на основі реалізації що я використовував на великий дошка, на якій я виступав не дуже добре. Ми повернемося через тиждень і повернутися ті, хто в кінцевому підсумку на вершині велика дошка на нашій останній лекції. Але зараз, дозвольте мені йти вперед і просто запустити моє рішення в тексті, і ми зробимо все Біблія короля Джеймса, і тут ми йдемо. Отже, це все, мовляв, слова з помилками з Біблія короля Джеймса. І моя реалізація взяв півсекунди в цілому. Так що не так вже погано на цьому конкретний комп'ютер. Але подумайте, скільки Код я мав написати. Подумайте, скільки коду потрібно було писати. Подумайте, скільки годин ви провели в Д-зал або ваша гуртожитку або там, де насправді кодування до це рішення. Ну, якщо я насправді мають більш високий рівень мову, як PHP, взяти до відома що я можу зробити тут. Припустимо спочатку, що це замість ваш код розподіл. Цей файл називається орфографії. Вона доступна як частина сьогодні Код розподілу. І я збираюся махаю рукою не більше про деталі, але це насправді цікавий приклад того, як Ви могли б порт мову як С протягом до PHP. Я буквально відкрив два текстових вікна, один з моєю C версії speller.c, і я просто почав перекладати його в моєму попрямувати в PHP і набравши його за допомогою Найближчим еквівалентом функції. Таким чином, деякі з цих речей різні. Ми бачили востаннє, що PHP не використовує включити до абсолютно так само,. Він використовує вимагають звичайно, хоча включають існує. Визначити це мало чим відрізняється від # Визначити в C, але це як ми робимо константу. $ Агдс виявляється існує в PHP, таким чином, ми бачили, що раніше. Це всього лише змінні, все які починаються зі знака долара. Нагадаємо, це просто купа плаваючою точки. Так Коротше кажучи, ви завжди можете перегортати це, якщо цікаво, це майже лінійний для онлайн-перетворення З версія speller.c в PHP. А ви могли б зробити це знову для півдюжини інших мовах. Але що цікаво, це. Або те, що відверто зневіру це. Дозвольте мені йти вперед і ввести близько dictionary.php, і стверджують, що я збираюся йти вперед і повторно реалізувати Проблема встановити шість тут. Так що давайте пропонувати спочатку, що в цьому файл, який буде реалізований в PHP, тому дозвольте мені відкрити мої теги, як, що. Дозвольте мені дати собі глобальний змінна, $ Розмір отримує нуль. І я збираюся дати сам хеш-таблицю. Я буду використовувати хеш-таблицю для цієї речі. Як оголосити хеш-таблицю в PHP? Готово. ОК. Так відкриває дужка закриваюча дужка представляє що в PHP, як ми бачили? Масив, але масив, який міг бути асоціативним масивом. Асоціативний масив є структура даних, яка пов'язує ключі зі значеннями. Зараз у найпростіших чисельно індексований Масив ці клавіші, це те, що? Нуль, один, два, три, чи не так? Стара школа речі назад з С. Але вона може також бути рядками, як Фу, і бар, або Максвелл, чи чогось подібного рядок. Так що я можу використовувати, що через хвилину. Дозвольте мені йти вперед і оголосити функція, як - давайте зробимо навантаження () в першу чергу. Так функція навантаження (). І PHP трохи відрізняється тим, що ви буквально функцію типу, але ви не вводьте тип значення. Я збираюся йти вперед і сказати, що Функція завантаження () слід приймати в Аргумент $ словник, просто як C версії зробив. Я роблю, що з пам'яті. І я пропоную, щоб я збираюся зробити це. Я просто збираюся зробити Еогеасп. Я збираюся викликати функцію названу файл (), передавши в ім'я, що файл, який є змінною $ Словник як $ слова. А потім всередині мій цикл тут, я збираюся йти вперед і зберігати в моєму $ Таблиця, $ слово отримує правда. Готово. Ой, зачекайте. Готово. ОК. Тобто навантаження функція () кажуть у PHP. Тепер, чому це працює? І я почасти обману тут. Так, один, Еогеасп ми бачили стисло востаннє. Це просто означає, що ви можете перебрати масив, не турбуючи з г і п і плюс плюс, і все, що. Словник є, звичайно ж, ім'я файлу, щось на зразок великий або маленький, два словники, які ми використовували в минулий раз. Файл є функцією, яка відкриває текст файл, читає його в один рядок, і руки You Back величезний масив, кожен з елементів якого лінія з цього файлу. Так ось поєднання FOPEN, і FREAD, і час циклу, і FClose, і все це. Нарешті, як слово просто означає, що це змінна Я збираюся мати доступ до на кожній ітерації в цьому циклі. Коротше кажучи, цей лайнер в даному випадку означає відкрити файл, ім'я якого в словник, змінна, перебрати це рядок за рядком, і кожен раз, коли ви отримуєте лінія, зберігати в змінної називається словом, а потім зробити щось зі словом. Що я хочу зробити? Я хочу поставити слово в мою хеш-таблиці. Ну, я можу покласти щось в моєму хеш-таблицю, як і в С використовуючи квадратні дужки. Це ім'я для мого хеш-таблиці. Я збираюся індексу в цей хеш таблиця в цьому місці. Так що не дужки нулю, що не дужки один. Кронштейн цитатою кінець цитати щось, що б це ні слова. І так само, як ви, можливо, у вашому хеш робочий стіл синтаксичного дерева, ви просто магазин ефективно логічне, неявно або явно. Готово. Я зберігання значення вірно. Тепер є кілька речей, Я зрізати кути на тут. Технічно, це буде дратує нова лінія, / п, в кінці кожне з цих слів. Так що я, ймовірно, слід викликати функцію PHP називається відбивна (), який буде буквально рубати, що вимкнений. І я насправді потрібно зробити ще одну річ. Я, ймовірно, слід збільшити розмір по кожному ітерації, так що я відстеження в глобальному масштабі, що це таке. І, чесно кажучи, і це є одним з дурніші аспекти PHP, якщо ви за допомогою глобальної змінної, необхідно явно сказати, що ви. Так що я збираюся насправді ввести глобальний $ Розмір, глобальна $ таблиці, і тепер моя функція буде завершена. Так що не так просто, як раніше, але , Ймовірно, взяв менше часу, ніж C версія, може бути? ОК. Так що тепер давайте зробимо перевірку () функцію. Давайте подивимося, якщо це принаймні взяв годин поспіль, що він взяв нас в C. При цьому дозвольте мені йти вперед і оголосити перевірити, як функція. Приймає в аргумент слова, яка є буде виходити від правопису. І я просто хочу, щоб перевірити, Наступна змінна Исеть, настільний Кронштейн strtolower слова - давайте збалансувати всі мої дужках - потім повернутися вірно. Решта - це було дійсно важко частиною цієї програми. В іншому випадку, повернення помилковим. Готово. Це перевірка (). Тепер, чому це працює? Ну, той, який я пройшов у слові, який є рядком. Два, я перевіряю всередині хеша стіл, який називається $ таблиці. Я змушуючи його в нижній регістр по телефону функція дуже схожа ToLower () в С, але це робить ціле слово, не один символ. І якщо це встановлено, іншими словами існує являє собою набір значень, іншими словами, якщо це правда, то так, це слово. Тому що я поклав його туди з вантажем (). А якщо ні, я збираюся повернутися помилковим. Тепер інші легко. Розмір Функція (), як я можу це зробити? Я по суті зробити повернути $ розмір. Але я технічно потрібно зробити це дратує річ. А насправді до чують, я різав один кут занадто багато. Я дійсно потрібно зробити глобальну $ стіл. Але це, як мовиться, вивантажити). Вивантаження () є дивним. Функція вивантаження (). Як я хочу реалізувати вивантаження ()? Готово. ОК. Так вивантажити (), управління пам'яттю повністю піклуватися для вас в щось на зразок PHP і багато з мов високого рівня. Так що це дивно. Наприклад, чому, чорт візьми, ми провели минуле вісім плюс тижні на C письмовій формі мабуть, дуже повільно, насправді час споживають проблеми з десятків годин від того, працюють під нашими поясами? Ну, з одного боку, це може працювати нормально для невеликих програм. Це, звичайно, прискорило мій час розробки. Але давайте подивимося, що станеться в реальному світі. Відпусти мене в цей каталог у вікні терміналу. Там в орфографії. І зверніть увагу, як у бік, і ви, можливо, зіткнулися це в проблеми встановіть шість або проблема встановити сім. Ви не строго повинні кінець PHP файли з розширенням. PHP. Якщо поставити такий рядок цієї першої в на самий верх, це спеціальна лінія синтаксису, що по суті означає знайти програма під назвою PHP і використовувати його для інтерпретувати цей файл. Так що тепер ніхто не знає, що Я біжу програму PHP. Я можу запустити його як ніби це були щось складений у С. Але от у чому справа. Насправді, давайте зробимо це знову. Dropbox/pset6 /. Там в орфографії. Добре, 0.44 секунди. Це стали швидше на цей раз. Тепер давайте йти в PHP версії. Приємна несподіванка. Але подумайте, як багато часу Я врятував в робочий час. ОК. Так 3,59 секунди, що насправді звучить не точні небудь. Але це тому, коротше кажучи, коли ви друкуєте з величезної кількості матеріалу на екран, що Сам уповільнює роботу. Те, що це дійсно взяв у CPU Прилад був 3,59 секунд, в відміну від C, який відбувся 0,44 секунд останнього. Це по-справжньому порядку величини різні. То де ж ця ціна приходять? Чому це так набагато повільніше? Чому PHP виконувати так погано? Даніель? Зали: Ви дійсно не використовувати хеш-таблицю. DAVID мала: я дійсно не використовувати хеш-таблицю. Так що я ніби зробив. Так що це асоціативний масив. Швидше за все, якщо люди в PHP є дуже розумні, вони використовували під капот фактичним хеш-таблиці реалізовані в чомусь, як C або C + +. Але. Так. АУДИТОРІЯ: [нерозбірливо]. DAVID мала: Так. Таким чином, кожна з функцій я написав зараз - Насправді, ви можете сказати, що ще раз трохи голосніше? AUDIENCE: кожна з функцій, які Ви включили має набагато більше повної ємність, ніж - DAVID мала: Так от дуже вірно. Там дуже багато більше накладних витрат, що ми насправді не бачачи, зосередивши увагу тільки на dictionary.php, які я тільки що написав. З іншого боку, є цілий перекладача збирається у фоновому режимі. Справді, коли я запустив цю програму, вона ні запущено складений нулів і одиниць призначена для мого процесора Intel. Швидше, це була біжучий рядок за рядком PHP код, який виглядає точно так само як, ми ввели його. І так щоразу, коли ви використовуєте інтерпретується мовою, ви насправді заплатити цю ціну. Це займе деякий час, щоб прочитати Ваш файл зверху вниз, зліва праворуч, а потім виконувати кожен лінії знову і знову. Зараз в реальності, особливо в Інтернеті, ви можете прискорити цей процес за рахунок кешування результатів PHP код інтерпретується. І це має сенс в Інтернеті, тому що якщо у вас є не одна, як користувач мене сюди, але 1000 або 10000 користувачів, то можливо, вперше файлу Доступ воно повільно, але після цього це набагато швидше. Але і це, знову ж, компроміс. І за те, як дані досліджень встановлений, або навіть щось велике, як це, ваші користувачі в кінцевому підсумку починаєш відчувати, що спад. Коротше кажучи, що інтерпретуються мови є дуже в моді, дуже популярним, і чесно кажучи, ймовірно, мови, які ви повинна досягти, коли рішення проблем після CS50. Але розумієте, скільки ви насправді приймаємо як належне під капотом дійсно ці останні кілька тижнів у хеш таблиць і дерев, і намагається, , Які використовуються в кінцевому рахунку, насправді реалізації речі, як відкриває дужка, квадратна дужка, яку ми можемо зараз вдячністю сприймаємо як належне. Отже, давайте подивимося тепер на цьому веб-контексті. І я згадував минулого разу, що є купа суперглобальних в PHP, що насправді не відповідні в командному рядку. Вони більш актуальним у контексті використання PHP в веб-контексті. Так працює PHP на веб-сервері для того, для створення речі, як HTML. І ми глянув на $ _GET і $ _POST, ось де автоматично користувачів вхідного закінчується, якщо ви просто представити утворюють у файл з розширенням. PHP на веб- сервер, як прилад. Але давайте поглянемо на _COOKIE $ І $ _SESSION. З точки зору непрофесіонала, що таке куки, як ви розумієте, що в контексті використанні в Інтернеті? АУДИТОРІЯ: Файл на комп'ютері. DAVID мала: Так. Це файл на комп'ютері користувача посаджені який веб сайт вам доведеться побувати. Тому, коли ви йдете в Facebook, коли ви йдете до bankofamerica.com, коли ви йдете на google.com, коли ви йдете в практично будь сайт в світі в ці дні, в тому числі cs50.net, печиво посадили на вашому комп'ютері, який або значенням, що зберігається в пам'яті вашої Комп'ютер в пам'яті вашого браузера або Іноді дійсно файл, що зберігається на вашому жорсткому диску. І те, що зазвичай зберігається в цьому файлі не ім'я користувача, а не ваші пароль, як правило, не те, чутливим, якщо веб-сайт не так добре з їх безпеки, а швидше це великий унікальний ідентифікатор серед інші. Це велике випадкове число посадили на комп'ютері, але ви можете думати як роду віртуальний марку руку, як від клуб або деякі парк розваг, що дозволяє персоналу, власникам, що служби, щоб пам'ятати, хто ти є. Таким чином, якщо велика випадкове число, як 12345678, хоча це, очевидно, не надто випадковим, думаю, що в міру ручної штамп, що при відвідуванні facebook.com в перший раз, то вони штамп, який числа на вашій руці. А потім, тому що ви говорите HTTP, ви будучи браузером, і через Facebook Очевидно, говорить так само, як веб- сервер протоколу HTTP говорить, що в будь-який час ви згодом відвідати facebook.com, будь то друга пізніше, через годину, навіть наступного дня, поки ви явно не вихід із системи, яка ефективно як миття рук. HTTP говорить, що ви повинні представити свої ручної штамп кожен раз, коли ви повернутися до цього сайту. Що ж тоді Facebook, вони подивіться на це рукою печаткою та вони говорять, про, 123456789. Я не знаю, на перший погляд, що це Девід Малана в Кембриджі, Массачусетс, але вони можуть перевірити свої бази даних і кажуть, про, людина на комп'ютері якого ми посадили 123456789 Девід Малана з Кембриджу, Массачусетс. Покажемо, що користувач, то його профіль сторінку або його стрічці новин. Але є проблема тут, якщо це то, як веб-дійсно працює. Давайте поглянемо на простий приклад. Давайте насправді піти сказати facebook.com. Але перш ніж ми могли піти туди, нехай мене йти вперед і відкрити в Chrome Інспектор сюди. Дай мені подивитися на вкладці Мережа. А тепер давайте йти вперед і ввести в https://facebook.com. І я роблю це так, що ми не бачимо всіх цих редіректи і відходів раз, дивлячись через тех. Дозвольте мені натисніть Enter. Добре. Ми бачимо цілу купу запитів. Там приходить Facebook. Там ціла купа файлів. І тут, на мій згадці Затримка в останній раз, це багато HTTP-запитів. Але перший з них, ймовірно, найцікавіше. Так що давайте перейдіть вниз тут, і Я збільшення в секунду. Це буде свого роду безлад, але давайте подивимося. Facebook посилає нам ціла купа речей. Але агов, цікаво. Вони посадки не один, а чотири ручні штампи на мою руку тут. Set-Cookie, Set-Cookie, Set-Cookie, Set-Cookie. І є декілька особливостей тут. Всі вони згадати деякі вид закінчення. І, схоже, Facebook сподівається не пам'ятати мене до 2015 року. Так от, імовірно час, за яким Я повинен вийти або вони просто автоматично припускати, що я не повернеться. Так що насправді непоганий кількість часу. І є деякі інші речі тут відбувається. Це печиво, здається, насильно видалений кажучи він закінчився в 1970 році до появи печиво. Таким чином, браузер просто збираюся припустити Добре, це як промивання друк руки. Але тепер, коли мій браузер робить наступний запит - дозвольте мені йти вперед і робити це знову і перезавантаження. Тепер дозвольте мені поверніться до кращих запит і спуститися тут, просити заголовки. Зауважимо, що це. Так що тепер я в НЕ заголовків відповіді, але зверніть увагу, це говорить заголовки запитів. І зауважте, що мій браузер в рамках своє прохання після удару перезавантаження має відправлено принаймні наступні інформація. Чи не Set-Cookie, але печиво. Так що це лінія, заголовок HTTP так сказати, де мій браузер є свого роду з без мого відома він представляючи моя рука для огляду Facebook. Таким чином, ці печива може бути використовується, то для чого? Щоб пам'ятати, хто ти є, або згадати, як багато разів ви були там, або дійсно небудь. Так от counter.php. І дозвольте мені збільшити на шрифті. І кожен раз, коли я перезавантажити цю сторінку, повідомлення це згадуючи, скільки разів Я був там. Ну, це ще не все, що вражає. Давайте просто закрити цю вкладку, а тепер давайте повернемося до http://localhost/counter.php. О, це цікаво. Це досі пам'ятають, навіть хоча я закрив вкладку. І, чесно кажучи, якби я закрити браузер, в разі їх здійснення в правильному напрямку, я ще може пам'ятати, що цей користувач які він або вона був перший раз, і тільки один раз я йду в меню Chrome, який тут тут, і перейти до Історія, та натисніть Очистити дані переглядів, як деякі з вас, можливо, в останні, тільки тоді ваші печиво насправді бути видалені під час веб- розвиток. Так що, якщо ми йдемо - давайте закрити Gedit тут. І якщо ми йдемо зараз до цього файлу. Дозвольте мені йти в наш віртуальних доменів / локальний / громадськості, і зробимо counter.php. Зверніть увагу, що це досить проста програма. Це досить простий веб-сайт. Таким чином, верхня частина файлу знаходиться всього в коментарі. Але ось нова лінія, що ви можете вже бачили в р-встановити сім, session_start (). Це лінія PHP коду, який істотно повідомляє веб-серверу, роблять Обов'язково друк руки і зробити почитати ручні штампи. От і все, що лінія робить, і це робить все цього процесу для нас. Тоді зверніть увагу, я тільки що отримав дві гілки тут. Якщо ключ Лічильник всередині цього спеціальна глобальна змінна називається $ _SESSION Встановлено, - іншими словами, якщо є якась цінність там - давайте його і зберігати його в місцевий змінна з ім'ям $ лічильника. В іншому випадку, давайте призначимо $ лічильник значення за замовчуванням 0. Тепер ось один з аспектів PHP це і благословення і прокляття. PHP трохи неохайно. Так у той час як в С, що б Обсяг лічильника були або тут, або тут? Було б були обмежені тим фігурні дужки. Знаєте, що? У PHP, він існує навіть за межами тих, фігурні дужки, тут, і тут, і тут, і тут, і навіть внизу. Тому я кажу, що це благословення в тому сенсі, що ви не повинні думати, як складно, як ми зробили кілька тижнів тому. Але це також трохи про прокляття в тому, що незалежно від того, де ви використовуєте змінну в PHP, принаймні, в програмі, як це, це глобально доступною для Добре це чи погано. Таким чином, ви повинні мати на увазі, тепер, ваші змінні не можуть бути невизначеними. Ви, можливо, визначається їх в іншому місці. Але те, що я буду робити в кінцевому рахунку? Я збираюся зберігати всередині, що глобальне змінна як значення Лічильник ввести результат робить лічильник плюс 1. Так що це просто арифметика що робить прирощення цього лічильника. І те, що я зберігаю, що значення ще в тут це значить суттєво оновити базу даних, щоб пам'ятати, що користувач 123456789 був тут в два рази. І коли я зробити це знову наступного разу я перезавантажте сторінку, він збирається перевірити мій штамп руку і сказати, про, Користувач 123456789 має зараз був тут три рази. І так, що PHP і подібні мови роблять для нас вони з'ясовуючи , Як і де і як довго для зберігання значень в цей особливий суперглобального. І це суперглобальні наступного разу я відвідайте сторінку є свого роду магічним попередньо визначений, заповнені значеннями, що були там востаннє ви відвідували, чи було це секунду тому, в тиждень назад, або в 2013 році, і ми зараз говоримо про 2015. PHP та веб-сервер догляд взяття всього цього для вас. АУДИТОРІЯ: [нерозбірливо]. ДЕВІД Малан: Змінні в PHP є практично завжди глобальна якщо ви оголосити їх усередині функції, і тоді вони є локальними для тільки функція. Але тому, що я не написав будь функції, то тепер вони ефективно глобальна Протягом всієї моєї файлу тут. АУДИТОРІЯ: Чи є спосіб щоб зробити їх місцевий? ДЕВІД Малан: Чи є спосіб зробити їх місцевий? Тільки, обернувши їх у функції. Що в останній версії PHP, ви можете зробити це з анонімна функція. Але про це в контекст JavaScript. Але Коротка відповідь: ні. Скоріше так. Хороший. Добре питання вікторини. Добре. Таким чином, нарешті, сама сторінка насправді досить просто. Зверніть увагу, що, як тільки я виходу з режиму PHP, відгук що всі ці речі вниз нижче тільки збирається отримати плювати із сировини в браузер. Який прекрасний, тому що я хочу, щоб відправити користувач деякі HTML, але я хочу для динамічного оновлення, що HTML. І один із способів я можу зробити це, щоб розібратися дуже швидко впасти назад в PHP Режим, використання відкриває дужка знак питання Знак рівності, а потім вивести значення лічильника. Або, якщо це виглядає трохи загадково, це Знак рівності насправді лише деякі синтаксичний цукор для цього Е ($ лічильник). Але, відверто кажучи, це трохи некрасиво і трохи дратує, щоб надрукувати. Отже, PHP дуже красиво пропонує цю функцію де можна просто сказати, що це більш стисло таким же чином. Так що ж відбувається під капот? Давайте швидко подивимося на мережі Вкладка тут counter.php. І дозвольте мені йти вперед і першим давайте очистити куки. Давайте Очистити дані переглядів починаючи з початок часу. Тепер давайте повернемося сюди. Тепер давайте перезавантажте сторінку. І я повернувся в нулі. Тому що моя рука штамп був помитий, Зараз я отримати новий печиво. Дійсно, якщо би я подивитися на вкладці мережі та подивитися на заголовки відповіді, повідомлення що прилад посилає мене печиво, чиє ім'я кілька довільно, але вигляд розумно, PHPSESSID. І це мені це відправка дійсно великий випадкове число. Це не зовсім ряд. Це не зовсім шістнадцяткове. Це свого роду алфавітно-цифрова рядок але очевидно це випадковим чином. І це ручний штамп так говорити, що я маю на увазі. Тим часом, якщо я натисну перезавантаження, а потім подивитися на цій другій лінії для мого друга прохання, повідомлення зараз, що мій запит заголовки включають PHPSESSID одно це, НЕ Set-Cookie, а просто печиво. І ось презентація мого браузера моєї ручної штамп. Так що тепер в якості тізера, і ми поговоримо більш про це протягом тижня або близько того, але яким чином це робить вам уразливі, ваш акаунт Facebook уразливими, і іншої такої доводиться уразливі? АУДИТОРІЯ: Якщо хтось має свій печиво. ДЕВІД Малан: Так, якщо хтось має свій печиво. Я маю на увазі дійсно, так само, як деякі з вас можливо, спробували в подібному клубі або парк розваг, якщо ви спробуєте щось як це скопіювати штамп, хоча тому на руку іншої людини, і тоді він або вона представляє його як самостійно, якщо він насправді виглядає ідентичні, 123456789, то веб сервер, мабуть просто збираюся сподіваюсь, що цей користувач ви. І це дійсно фундаментальна загроза в будь-який час використовувати куки тому що, якщо хтось просто підробляє так, щоб розмовляємо Вашою печиво, з'ясовує, що це є, або дійсно копіюючи його дивлячись на комп'ютері і бути як, в порядку. Печиво Девіда JJ3JIK і так далі, а потім вони достатньо розумні, щоб знати як свого роду вручну відправити, що печиво з браузера або з Програма вони пишуть, вони могли повністю увійти в веб-сайт, як ви. Це не так складно прикидатися хтось ще, якщо ми не переглянути р-набір два, який ввів що? АУДИТОРІЯ: криптографія. ДЕВІД Малан: Трохи Трохи криптографії. Простий криптографія, принаймні стандартна версія, але крипто тим не менш. менше. Ось і виходить, якщо ви зашифрувати всі ці заголовки, використовуючи те, що ви може тепер знають більше знайоме як SSL, захищених сокетів, або https:// URL-адреси, то всі ці речі ми були глянувши насправді в зашифрованому вигляді, Це означає, що це, як ви не може прочитати ручну марку. Тільки facebook.com може або google.com, або в даному випадку, прилад може читав, що ручну марку. Трагічно, хоча, і знову ж, це занадто доречно з матеріалом NSA останнім часом, навіть SSL є крихким. І це насправді не так складно навіть зламати цей шифрування. Не стільки злому шифрування, але, обманюючи браузеру на дешифровки дані передчасно. Але знову ж, ми будемо дратувати вас с, що незабаром. А зараз просто боятися. Це трагічно роду правда. Добре. Отже, де ж це зараз нам дає? Ну, давайте зробимо це. Давайте йти вперед і приймати швидкий тизер, перш ніж ми зробити перерву. І я думаю, що ми затримуватися трохи довше сьогодні, але ми збираємося, щоб зануритися в щось новеньке і сексуальна, який буде підігріти апетит для ще більш. Так ось тізер. Так SQL, ми почали говорити про дуже коротко востаннє. Ви дійсно бруднити руки з деякими з нього в п-встановлений сім. І з точки зору непрофесіонала, що робить SQL - S-Q-L - для вас зробити? Що це таке? Так. АУДИТОРІЯ: давайте ви дані доступу. ДЕВІД Малан: Так. Це дозволить Вам отримати доступ до даних в базі даних. Мова структурованих запитів. І це, по суті мова програмування. Є особливості тим, щоб ми навіть не будемо використовувати в класі. Але ви може ефективно визначити функції. Вони називаються зберігається процедури в SQL. Але ми будемо тримати його досить проста і просто використовувати його для деяких основних операцій наприклад, вибрати дані, вставки даних, оновлення даних і видалення даних. І ви можете дійсно думаєте, бази даних, як бази даних SQL, як тільки будучи Microsoft Excel. Оскільки SQL відноситься до реляційної У базі, де ставлення просто означає таблиці. Рядки та стовпці. Так що ви можете покласти в електронну таблицю як це або Google Docs, ви могли б поставити в базу даних SQL , Оголосивши таблицю. Тепер, як ви насправді доступ що інформація? Ну, з командами або запити, як це. SELECT, INSERT, UPDATE і DELETE. І здебільшого, ті чотири тільки інгредієнти, які ви повинні будете зробити щось досить потужно в задачі встановити сім. Тепер повернемося в той же день, ви насправді взаємодіяти з базою даних в чорно-біле вікно терміналу в блимати швидке, як це. І база даних ми біжимо на Пристрій називається MySQL, який вільний і відкритий движок бази даних джерела. Якщо ви Google і читати Вікіпедію стаття, ви будете знати, що ім'я трохи переходу для деяких версії Linux. У базі Марія насправді розщедритися тому говорити про MySQL. Коротше кажучи, Oracle купив MySQL. Oracle велика компанія. Люди були стурбовані тим, що це було б вже не залишиться зовсім як з відкритим вихідним кодом, так що це просто копія MySQL це ще на волі, все ще відкритим вихідним кодом, і встановлений в Fedora Linux за замовчуванням. Але це вид болю в шия познайомитися з У базі таким чином. Таким чином, ми включити в CS50 приладу безкоштовний інструмент з відкритим вихідним кодом під назвою PhpMyAdmin. Просто збіг, що це написано в PHP. Там немає фундаментальних необхідно для PHP тут. Але це всього лише веб-інструмент, який ми завантажили безкоштовно, встановлюється в прилад, що дозволяє нам мати Графічний інтерфейс користувача, з яким досліджувати р-встановити сім базу даних з для створення нових баз даних, кажуть для вашого власного кінцевого проекту Якщо ви хочете як, і в кінцевому підсумку створити динамічних веб-сайтів, як CS50 фінансів які дозволяють запитувати дані і динамічно оновлювати дані. Ви не будете мати, щоб використовувати тільки простий текстовий файл або CSV. Ви можете використовувати смарт-базу даних Програма так що ви можете виконувати більш складні запити, ніж просто читання через всі лінійно. Так, наприклад, це те, що ми даємо Ви з коробки для р-встановити семи. Це таблиця з мабуть, принаймні три колони, одна з яких ім'я користувача, одним з яких є хеш, та іншої з яких є ID. Але найцікавіше, і просто дражнити одна думка тут, ім'я користувача Імовірно вже унікальний, чи не так? Я маю на увазі, більшість будь-який сайт, якщо у вас є ім'я користувача, є Не може бути двох Caesars. Там не може бути двох Malans. Там не може бути двох jharvards. Його унікальна. В іншому випадку, вони не знають, які jharvard є насправді. Так що може бути мотивацією для також мають третю колонку зліва там називається ID, який виглядає як число, це ж унікальним? Він відчуває себе трохи зайвим мені на перший погляд. Чому це може бути переконливим, щоб мати не тільки унікальні імена користувачів, а й унікальні номери? АУДИТОРІЯ: Вони могли б і той же пароль. ДЕВІД Малан: Люди можуть мати той же пароль, звичайно. Це може абсолютно трапитися. Але якщо у них є цей унікальний логін, я стверджують, що це дійсно не Незалежно від того, тому що якщо вони введуть в ім'я користувача, мені потрібно тільки перевірити їх пароль, їх хеш їх. Чому ще? АУДИТОРІЯ: Більш швидкий пошук. ДЕВІД Малан: Більш швидкий пошук. Чому? АУДИТОРІЯ: ID є лише одним. ДЕВІД Малан: ID просто один символ, або якщо бути більш точним, це число, так що, ймовірно 32 біта або щось в цьому роді. У той час як ім'я користувача, мабуть Джейсон До Hirschhorn в там начебто сміховинно довго, і він збирається взяти мене набагато більше часу в рядок порівняти H-I-R-S-C-H-H-O-R-N, і, можливо, / 0 або щось на зразок цього, для того, для пошуку Джейсона, а не просто кажучи, дайте мені користувача номер два. Це 32 біт. Це один INT, що ви повинні порівняти. І дійсно, саме тому бази даних , Як правило, призначити унікальні ідентифікатори, щоб рядків в них. Тепер те, що інші типи даних є крім INT і очевидно Рядки, як це? Ну, якщо бути більш правильним, Бази даних SQL, як MySQL, є текстові поля. І СИМВОЛ трохи оманливе жодного СИМВОЛ. Поле CHAR в базі даних MySQL є один або декілька символів, але це фіксоване число символів. Так, наприклад, якщо я йду до PHPMyAdmin, як ви, можливо, вже, або скоро проблема встановити сім, і я йду в моїй базі даних, і просто для задоволення, давайте створимо нову таблицю з ім'ям перевірити за допомогою всього двох колонок. Я потім натисніть кнопку Go. І це стане досить знайоме, тим більше, що ви возитися навколо на свій розсуд. Тут я міг би ввести ID для створення нова таблиця типу INT. Але тут я міг би ввести ім'я користувача для відтворити, що раніше таблицю. І зверніть увагу, у мене є цілий букет типів на вибір. І це теж, чому PHPMyAdmin почасти гарний. Це свого роду самонавчання в цьому вам може тільки частково точка та натисніть, і подивитися на випадаючих меню, і вивести з що те, що повноваження SQL, дає тобі. І справді, якщо я вибираю CHAR, я тоді повинні вказати довжину, або, як багато значень, скільки символів. Отже, дуже загальні цінності такі речі, як 255, але це трохи довго. Зазвичай це вісім ім'я користувача. Але це трохи невеликої ці дні. Так що це дизайнерське рішення. Це макс. 8 символів, 32, 255, 1000? Це дійсно залежить від вас. Але поле CHAR фіксоване число. Так що вибирайте дуже мало, і ти ніби різьбове, якщо ви хочете більш тривалий логін. Виберіть занадто багато, і те, що недолік? АУДИТОРІЯ: [нерозбірливо]. ДЕВІД Малан: Це марнотратно. Так само, як в C, якщо у вас є більше, шматок пам'яті, ніж потрібно, ви просто витрачати час і займають простір. Так як альтернатива, існує VARCHAR, який вирішує цю проблему, лікуванні довжину не у вигляді фіксованої довжини, а в якості максимальної довжини, і за допомогою змінна кількість символів, які потім прагне використовувати тільки стільки символів, як ви насправді потрібно. Це звучить ідеально. Чому б нам не позбутися Введіть дані CHAR тоді? Яка може бути недолік використовуючи VARCHARS, що звучить як це хороший виграш? Так? АУДИТОРІЯ: [нерозбірливо]. ДЕВІД Малан: Добре, добре. Так що, якщо всі ваші дані і те ж Довжина, в чому ж проблема? АУДИТОРІЯ: Тому що ви витрачаєте Дані по розповідаючи їм все. ДЕВІД Малан: Так що, якщо всі ваші дані є такої ж довжини, хоча, я б сказав, що завдання максимальну довжину на VARCHAR нічим не відрізняється від вказавши фіксовану довжину на Чарі, якщо Ви знаєте, що число заздалегідь. Але є насправді, і я буду свого роду витягти з цієї відповіді реальність що є ще більше, які могли б дратувати, особливо якщо ви зіткнутися ім'я людини, що це незвично довго, що ви цього не зробили передбачити. І це також трохи менш ефективним насправді пошук по типу VARCHAR як відміну від пошуку символи, особливо для довгих столів, які мають багато й багато даних. Так і тут, тематична знову немає очевидним вибором. Так що просто дати вам відчуття одного типи даних, які могли б представляти інтерес або для р-задати сім чи в майбутнє, є INT. Там в BIGINT, який , Як довго довго. Це, як правило, 64 біта. Там в десяткову, які ви побачите в Поставлена ​​задача, яка є набагато очищувач відповіддю на проблеми, ми зіткнувся з поплавком і плаваючі точка неточність. А тут ще DATETIME. Там в буквальному сенсі тип даних, який має щоб бути схожим на рік, місяць, день, і годину, хвилину і секунду. Але бази даних SQL також речі, які ми будемо називати індексів. І індекс є те, що ви вказати при створенні таблиці в зробити обшуки та інші операції більш ефективним. Зокрема, є те, що називається первинний індекс, що ви могли б заявляємо наступне. Ми зробили це для вас з Таблиця користувачів ми даємо вам. Але зверніть увагу, якби я вручну відтворювати таблиця тут користувачі даючи це ім'я користувачів. Я вже зазначено ID. Я вказав INT. Я вказав ім'я користувача з максимум 32 символів. Але якщо ми будемо продовжувати прокрутки в цьому досить широке вікно, зверніть увагу, що є купа інших речей, я можу вказати. Один з них, я можу вказати атрибути як, ви знаєте, що це INT повинен бути підписаний. Я не хочу негативні числа, так давайте зробимо це без підпису. Null не має відношення тут, тому що Я хочу, щоб кожен користувач мати унікальний номер. Я не хочу, щоб це було нульовим. Але це цікаво. Я можу вказати, що ID є або первинний ключ цієї бази даних, або це унікальний, чи це індексуються, або повний текст. Так що для сьогоднішніх цілей, довга історія Коротше кажучи, основним засобом, що це має бути як концептуально і технічно поле, яке ми використовуємо, щоб однозначно ідентифікації користувачів. Тому, коли ми дивимося користувачів, це свого роду обіцянки, щоб дивитися їх в основному що унікальний ідентифікатор. І ця база даних буде гарантувати, що якщо вам мати користувальницький номер 3, ви не можете фізично вставити іншого користувача з цим же номером 3. База даних буде просто відмовляються , Щоб зберегти зміни. Яка гарна річ, тому що ви можете захистити себе від себе. саме Крім того, для користувача. Таким чином, другий ряд, нагадаємо, це поле ім'я користувача. Таким чином, другий ряд тут ім'я користувача, як ми це робили в дальньому лівому куті є. Так що ще я міг би хотіти вказати? Я не маю права, відповідно до SQL, вказати два первинних ключів. Ви можете задати спільне ключ, де ви подивитися на обох полях, але вони не можуть індивідуально бути первинні ключі. Так ось може бути й мови. Так що може я хочу вибрати? Ну, УНІКАЛЬНИЙ схожий по духу первинний ключ, де ви вказати це поле повинно бути унікальним, але це не збирається бути тим, Я використовую весь час. І ми не збираємося використовувати цей все час з якої причини знову? Це повільніше потенційно, якщо це довга ім'я користувача. Це просто марна трата часу. ІНДЕКС, тим часом, вказує, що це не збирається бути унікальним, але я хотів би працювати свою магію під капот, щоб зробити це швидше для мене пошук по цій галузі. Так що це, ймовірно, не має відношення тут. Для імені користувача, я б стверджувати, що УНІКАЛЬНА хороший відповідь. Але припустимо, що ми зробили користувачам більш Цікаво, чим просто імена користувачів, хеши, та ідентифікаційні номери. Що робити, якщо ми дали людям повні імена? Що робити, якщо ми дали їм адреси та інші дані про них? Ну, якщо ви вказати, що стовпець в база даних індексується, це означає, що MySQL або Oracle, або як база даних ви використовуєте, повинні працювати своє чарівництво і використовувати якийсь химерної даних Структура як дерево, або вигляді дерева або хеш-таблиці, або щось, щоб гарантувати що при пошуку даних з використанням вибрати на цій конкретній області - як показати мені все, що живе на Оксфорд-стріт. Запит в цьому роді. Якщо ви вказали заздалегідь, що Ви хочете індекс для цієї області, результати будуть набагато, набагато швидше. Якщо ви не вкажете індекс, кращий Ви можете зробити це лінійний пошук, якщо це не сортуються. Але якщо ви вкажете INDEX, смарт- люди, які зробили базу даних - люди, як ви, які тепер знають, дерева і намагається і хеш-таблиці - автоматично побудувати таку даних структура в пам'яті, щоб переконатися, що ці результати набагато швидше. FULLTEXT поки що близькі за духом, але дозволяє зробити шаблон результати, як показати мені все, що живе в вулицях, які починаються з буква О за будь-якої причини. Ви можете зробити пошук підстановочні так. Або, що більш переконливі речі, як шоу мене всі, хто має слово - покажіть мені всіх, чиє ім'я починається з певної літери. Ви можете шукати за ключовими словами таким чином. Добре. Отже, можливості дизайну є потенційно. Є інші, які я буду махати руками в. Виходить, що ви можете мати різні механізми зберігання. І це ще таємницею, ніж нам потрібно звичайно для завдання встановити сім. За замовчуванням, ви, хлопці, за допомогою те, що називається InnoDB. Ви побачите згадки про це десь в Інтерфейс PhpMyAdmin найбільше ймовірно. Але знаю, що є інший дизайн рішення, які мають потенціал Інтерес приходять остаточні проекти, якщо ви робите щось веб-. Але давайте зробимо це. Давайте підемо далі і поставити це на екран як тизер історії за участю вас, сусід по кімнаті, і склянку молока. Давайте дві хвилини або так зламати тут. І якщо ви можете залишитися, давайте приходять назад, виглядають трохи більше на SQL, і потім трохи JavaScript з р-встановити вісім на увазі. Добре. Отже, давайте змусити вас задуматися про кут так, що можна дуже легко виникають в контексті з використанням бази даних, або чесно кажучи, навіть при використанні реального світу речей як банкомати, щоб отримати гроші. Отже, ось холодильник. Припустимо, у вас є один теж в Ваш гуртожитку або ваш будинок. І у вас є один сусід по кімнаті, і обидва ви дійсно любите молоко, наприклад. Таким чином, ви приходите додому з класом в один прекрасний день. Він або вона не повернутися. Ви відкриваєте холодильник. Ви дійсно хочете велику склянку молока. Там немає молока. Так що ж робити? Ви закрити холодильник. Ви хапаєте ключі. Ви виходите на площу. І ви отримаєте в черзі в CVS на тих, самостійно касові речі, які завжди зайняти більше часу, ніж насправді маючи касирів. У всякому разі. Отже, між тим, точка точка точка, ваш сусід приходить додому і він чи вона Аналогічно є пристрасне бажання за молоком. Таким чином, він чи вона відкриває холодильник, виглядає всередині, і чорт забирай. Ніяке молоко. Таким чином, він чи вона голови,, відбувається піти на іншу CVS, який був тільки квартал з деяких причин, і він чи вона отримує в черзі, щоб купити молока. Між тим, ви приходите додому, він або вона приходить додому, і що робити Ви в кінцевому рахунку є? Удвічі більше молока. Але ви дійсно не подобається молоко, що багато. Так що тепер у вас є стільки молока, що тепер один з них просто буде йти кислий в кінці кінців. Так що це дійсно погана проблема. Чи не так? Так що ж сталося? Так принципово, це свого роду з смішний приклад. Але під капотом, що ми мали відбудеться тут ви обидва перевірили стан деякої частини пам'яті, холодильник. Ви обоє перевірили стан деякої змінної. Ви обоє зробили висновок що ви тоді діяли на. Але, на жаль, в той час як ваш сусід по кімнаті був у магазині, стан, що змінна змінилася, він або вона повернулася і тепер хоче, щоб змінити стан, але це вже було змінено на нього або неї. І, звичайно, він або вона не буде мати пішов в магазин, якщо вони знали, що ви вже були в дорозі. Таким чином, в реальному світі, як ти міг уникнути цієї проблеми, якщо у вас є холодильник, у вас є сусід по кімнаті, і ви насправді любите молоко? АУДИТОРІЯ: Спілкування. DAVID мала: Спілкування. ОК. Але як ви могли б спілкуватися? АУДИТОРІЯ: залишити записку. DAVID мала: залиште записку, вірно? Завжди залишайте увагу, що при шанувальники шоу. Гаразд, так що завжди залишить записку, або мають воістину як замок або щось на холодильник, який тримає ваш сусід по кімнаті від перевірки стану цієї змінної. Тепер, чому це могло б бути доречні в Проблема набору семи або банкоматів. Ну, уявіть собі світ, в банкоматі, де Ви могли б бути в змозі піднятися в банкомат Машина тут, а інший банкомат тут. І це відбувається досить часто. А що у вас було дві карти банкомат, які можна отримати. І ви входите в обох машинах ефективно одночасно, ми сподіваємося, Хоча ніхто не дивиться. І тоді ви ввести свій PIN-код майже одночасно. І тоді ви робите запит балансу , Щоб побачити, скільки грошей у вас є. І скажемо, у вас є $ 100 у вашому обліковому записі. Так по суті одночасно, сказав один, нуль, нуль, введіть. І ви, сподіваємося повернути гроші. Але скільки грошей ви могли б повернутися? Зараз комп'ютери зрештою, особливо якщо вони говорять з сервери, не обов'язково робити речі в порядку, це очікується. Тому припустимо, що відбувається, через всі питання, швидкість мережі є є або CPU питання є, або нічого подібного, що, припустимо, що перший банкомат перевіряє свій баланс і бачить, о, у цієї людини є $ 100. Але потім відволікається, тому що, може бути, резервне копіювання відбувається, і тому сповільнюється. Або, може бути, під час перевірки, мережа зв'язки стали трохи повільніше, тому що це просто відбувається. Вони фізичних пристроїв. Таким чином, між тим, другий банкомат задавати те ж питання. Скільки грошей у Девіда є? $ 100 є відповіддю. Але оскільки перший банкомат ще Відправивши повідомлення відняти $ 100, як Банкомати оглянули сховищі банку, бачачи є $ 100 там, і тепер обидві машини є потенційно збирається виплюнути відповідь. Тепер, це дуже зручно для вас в деякому сенсі Якщо те, що банк робить в кінцевому рахунку, це змінити суму до мінус 100 за встановивши змінну, рівну вашої банківський рахунок дорівнює 0, на відміну робити мінус 100. Тепер в гіршому випадку для банку - або, в кращому для банку, тим часом, вони дають вам в $ 200, а Ваш банківський рахунок тепер показує негативну $ 100, що насправді не користь вам взагалі. Але справа в тому, що ця гонка стані протягом двох сусідів по кімнаті отриманні молоко, або протягом двох банкоматів намагаються отримати готівку і змінити стан сховища в той же час існує будь раз у вас є база даних. Зараз в проблемі задати сім, це питання виникає в тому сенсі, що якщо ви купуєте частка акцій Facebook, а потім протягом Наприклад, ви купити другу частку Facebook складі, вам необхідно зробити Рішення програміста. Для того, щоб вирішити, як оновити бази даних, напевно ви збираєтеся мають по одному рядку для цієї акції, і ця є одним із способів його реалізації. І ви будете мати одну акцію FB, яка є їх біржовий символ для цього ім'я користувача або цього користувача Ідентифікатор, унікальний ідентифікатор. Але та ж історія може статися тут. Якщо ви виберіть У SQL, як ви побачите У завдання, поставлене сім, коли ви бачите, О, Девід має одну акцію акцій Facebook. А тепер дозвольте мені змінити, щоб це було дві акції, тому, що він хоче купити Друга акція. Але припустимо, Девід фактично було два браузер відкритим, або припустити, що це спільний рахунок з двома подружжям, і обидва з них намагаються виконувати ту ж операцію, там теж існує потенціал для вирішення, яке буде зроблені на основі попередніх стан світу - рахунком одна акція - і як людина, або обох серверів, в даний час спробуйте сказати збільшувати його до двох акцій. Але в цьому випадку, ви, можливо, стягується мені гроші як для акцій, але збільшується тільки, що один раз. Коротше кажучи, основна проблема Тут, як і з жартом про відхід Зазначимо, або покласти замок на ній, якщо дві людини, або два потоки - згадайте подряпати - може перевірити стан деякої змінної , А потім спробувати змінити цю змінну, але ці дві речі не відбуваються в Водночас, але може бути перервано іншими речами відбувається, дані можуть потрапити в дуже дивний стан. І ви можете скористатися або ви можете страждати в сенсі грошей прикладу. Таким чином, у проблемі задати сім, ми даємо вам це один рядок коду, яка довгий Коротше кажучи, вирішує цю Проблема в MySQL. Це дуже довга інструкція, що не навіть розміщення на одній лінії на Екран тут гарантує, що ваші операції те, що називається атомарним. Все це відбувається відразу, або цього не відбувається взагалі. Це дуже довга фраза може не Частково справа переривається. І те, що він робить, це буквально що він говорить. Вставте в деякій таблиці наступним три поля цих конкретних значень, а на дублікат ключа, не робити вставки. Зробити оновлення. Так що це, як робити вибір і Вставте так, щоб говорити в той же час. І те, що це ключ, який, ймовірно, іменуються сюди? Виявляється, і ви побачите це в Проблема встановити сім у специфікації, так як ми оголосили там бути унікальний ключ На цій конкретній таблиці таким чином, щоб ви не можете мати кілька рядків для одного користувача з ж дрібні акції символ - в цьому прикладі тут, DVN.V є дурна дрібні акції, що ми см. в специфікації. Тому що ми оголосили, що це буде унікальний, що це означає, що якщо ви спробувати вставити дублікат рядки, ви замість збирається оновлювати його без хто-небудь ще, що має шанс змінити стан світу або. Коротше кажучи, це гарантує, речі атомна. У більш загальному, хоча, бази даних як MySQL - і вам не потрібно цю функцію для р-задати сім, але мати на увазі, для майбутнє - підтримує те, що називають угоди, де ви можете сказати, Почати транзакцію в буквальному сенсі. Після цього можна виконати дві заяви SQL. І SQL заяву, як ви побачите в р-встановити сім, виглядає трохи щось на зразок цього. Оновити таблицю з ім'ям облікового запису. Встановіть колонку балансу, рівний все стовпець баланс в даний час мінус 1000, де число, номер рахунку, як ідентифікатор користувача, дорівнює 2, а потім обновити рахунок точка точка точка. Так з точки зору непрофесіонала, те, що роблять ці два запити, здається, роблять в реальний світ почуття банкінгу? АУДИТОРІЯ: Перенесення до економії. ДЕВІД Малан: Абсолютно вірно. Переказ коштів від одного рахунку на інший. І це ще один приклад, де ви дійсно хочете, щоб ці дві речі трапитися або не відбутися. Ви не хочете, щоб щось отримати в середній з них і потенційно зіпсувати математика або зіпсувати, скільки у вас грошей, або скільки гроші у банку. Так в чому ж дійсно добре про угоди в MySQL є те, що і баз даних більш загальному сенсі, що вони і розумні люди, які реалізовані ці особливості з'ясувати, як зробити Переконайтеся, що обидві ці речі трапляються або немає взагалі. І якщо ви дійсно прагнуть зробити сайт, який використовується людьми на кампус, люди в реальному світі, роблячи щось в тому сенсі, запуску, ці види проектні рішення, які стають все так важливо. В іншому випадку, ви починаєте втрачати дані, втрачають користувачі, або в гіршому випадку, як ми бачили тут, потенційно втрачають гроші. Отже, ще раз, докладніше про це в задачі встановити сім, а також, можливо, для деяких Ви у фінальних проектів. Так давайте змінимо цю картину, ми повинні були дещо раніше, просто в ще один спосіб. Отже, дозвольте мені насправді побачити, якщо я можу - Ні, це не було. Там це. Так що це, де ми залишили в минулий раз. І виходить, що ми збираємося, щоб кинути ще одна річ в мікс тут - мова називається JavaScript. Так JavaScript насправді підходить в цій частині - і я не зовсім залишити достатньо місця, так що це не зараз в масштабі. ОК, це дійсно шкода. ОК, так що це JavaScript. Добре. Я дійсно робить йому ведмежу послугу. Добре. Так JavaScript є ще одним програмування мову, і наша остання, якщо це допомагає заспокоїти, що не набагато більше, з пожежних гідрантів тут. Так JavaScript також інтерпретується мову, а значить, ви не скомпілювати його в нулів і одиниць. Ви просто запустіть його. Але те, що принципово відрізняється з JavaScript звичайно є те, що ви НЕ запустити його на вашому веб-сервері. Це не стає працювати в Прилад по собі. Швидше, він отримує завантажений користувачем через HTTP в свій браузер - Chrome, Safari, Internet Explorer, Firefox, що завгодно, - і це браузер, який виконує цей конкретну мову програмування. Таким чином, щоб було ясно, PHP досі було виконується або в командному рядку в наш чорно-біле вікно, на сервері як прилад, комп'ютер як пристрої, або це було виконані на веб-сервері працює на комп'ютері. Але тема тут є те, що PHP досі був виконаний на стороні сервера, так користувач і браузер користувача ніколи не бачить лінію PHP коду. Справді, якщо ви коли-небудь відкрити браузер для ваш сайт або інший, і ви фактично бачити PHP код у вікні, хтось облажався. Тому що це не повинна бути відправлений в браузер безпосередньо. Це, як передбачається, яка буде виконана і повернувся в щось на зразок HTML. Але в JavaScript по суті навпаки. Це призначається, щоб бути запущений як правило, всередині з вікна браузера користувача. І які види сайтів використовують JavaScript, то в ці дні? Як буквально кожного популярного веб-сайту. Кожен веб-сайт, що ви, хлопці, ймовірно, використовувати щодня використовувати наявність для простий і навіть найсексуальніші особливості. Так щось на зразок Facebook Чат, якщо ви використовуєте це. Як це насправді працює? Ну досі, всі речі ми зроблено з HTML і PHP припускає, що Ви підтягнути URL, і ви потрапили Enter, і ви бачите HTML контент. І ви натиснете на посилання, яка змінює URL, змінює сторінку, і перезавантажується деякі новий зміст. Натисніть інший URL або відправити форму, ви отримати збитим на іншу сторінку і ви бачите нового вмісту. Але, використовуючи щось на зразок Facebook Chat, або Gchat або Google Maps, рідко робить вся сторінка оновити таким чином, що ви бачите білий екран на мить і то новий зміст. Швидше, веб-сторінки сьогодні динамічно отримання оновлюються знову і знову і знову все начебто із за лаштунками. І виходить, що, коли ви дійсно йдете в щось на зразок Facebook або Gchat, або Gmail, а поновлення сторінки автоматично без перезавантаження весь екран, що трапилося в тому, що Ваш браузер зробив вигляд таємно додаткові HTTP запити - задля цілих веб-сторінок, але тільки для маленькі порції даних, як миттєве повідомлення, що ваш друг тільки послав тебе, або оновлення статусу, що хтось просто послав тебе, або твіт що хтось тільки що відправив. Це просто зробити невеликі запити на Дані, а потім за допомогою Javascript, Цей мова програмування, щоб змінити те, що веб-сторінка виглядає без сервер допомагає без сервера генерації, що HTML. Коротше кажучи, JavaScript може бути використаний тоді щоб не тільки принести нові дані від сервер без перезавантаження ціле сторінки або відправці форми. Він також може бути використаний для зміни так званий DOM - Об'єктна модель документа - , Який є просто химерний спосіб для кажучи дерево HTML що ми бачили востаннє. Таким чином, щоб заспокоїти, JavaScript є синтаксично так схожий на C, а також. Там немає основною функцією. Ви просто почати писати код і він буде отримати виконаний, або тлумачити більш правильно. Умови буде виглядати наступним чином. Нічим не відрізняється від C або PHP з цього питання. Логічні вирази або-е вид разом буде виглядати наступним чином. ANDed разом виглядати наступним чином. Перемикачі буде виглядати наступним чином. Для петлі буде виглядати наступним чином. У той час як петлі будуть виглядати наступним чином. У а петлі буде виглядати наступним чином. Це нова. Так JavaScript не має Еогеасп побудувати як такої, але ця конструкція для змінної я в масиві, і я в цьому справа стає значення індексу. Так що це трохи відрізняється від тієї, Еогеасп, хоча нові версії JavaScript приходять поїсти всі час, так що навіть ці можливості мови розвиваються. І як у бік, JavaScript днями також можуть бути використані на сервері так само, як PHP з використанням бази під назвою Node.js. Один з CS50 в ТФ, Кевін, призвело семінар з Node.js, що доступно в cs50.net/seminars. Так що якщо вам цікаво, знають, що вам можете використовувати це на стороні сервера, як добре, але це досить недавня тенденція, але потужний в цьому. Це трохи інше. Це масив в JavaScript. І те, що здається вам різні в порівнянні з C або PHP? Є кілька простих історій ми можемо сказати тут. Чого не вистачає в порівнянні з PHP? АУДИТОРІЯ: [нерозбірливо]. ДЕВІД Малан: Да? На жаль, ще раз сказати? АУДИТОРІЯ: Чи не оголошуючи тип змінної. ДЕВІД Малан: Ми не оголосивши тип змінної. Тому насправді зовсім як PHP, ми не Вказуючи тип цієї змінної. Швидше, ми в більш загальному кажучи вар для змінної. У нас немає неприємність в PHP з знак долара, який в той час утомливо Тип, робить більш ясним, що щось змінна. У той час як тут, ми свого роду назад Підхід C шляхом просто дзвоню змінна по імені ми хочемо дати її, наприклад, номер. А також, як PHP, ми маємо квадратні дужки для значення всередині цього масиву. Так змінні в JavaScript також може виглядати наступним чином. Зверніть увагу, тут це рядок називається с, але так само у нас не зазначений що це рядок. Тут, хоча це функція, що не існують в точності так само, в PHP, але трохи аналогічно. Це об'єкт в JavaScript. І об'єкти є свого роду швейцарський армійський Ніж структури даних, в якому Ви їх можна використовувати для будь-якої кількості речей. Ось, наприклад, ми оголосивши змінна з ім'ям цитата. Тип цієї змінної є об'єктом. Ви можете думати про це як про C структури що має ключі і значення. Символ є одним з ключових. FB це значення, мабуть, Символ акції. Кома. Ціна є ще одним ключовим, і його значення мабуть, з плаваючою точкою, або число в цілому в JavaScript, з $ 49.26. Отже, PHP не має - ми не бачили в об'єктах PHP досить як це, але ми дійсно бачили, аналог, який був і що? АУДИТОРІЯ: [нерозбірливо]. ДЕВІД Малан: масиви Асоціативні. Так у той час як PHP має асоціативні масиви чиї синтаксис небудь злегка так різні - ми бачили квадратні дужки. Ми бачили дивні стрілки символів. JavaScript має об'єкти, але це в основному семантичне розходження і відрізняється синонімом зараз. Проте, як у бік, PHP також має об'єкти таким чином, що Java та інші мови мають об'єкти в об'єктно-орієнтоване програмування. Але ми будемо використовувати їх тільки для типів даних для тепер. Об'єкти і асоціативні масиви. Це можна було б зробити його трохи більш ясним. Ось чому об'єкт корисно. Коли ви хочете оголосити студента, як Zamyla, ми можемо насправді інкапсуляції так сказати всередині, що об'єкт за допомогою фігурних дужок, як до цілою купою ключів і значення в тут. У нас є ID, будинок, і ім'я Zamyla, слід крапка з комою в якості зазвичай в кінці. Тут, внизу теж це трохи різні, але і дуже потужний в ці дні. Ось масив, і я знаю, що, оскільки тобто квадратна дужка до верх і квадратна дужка в нижній частині. І це масив, які дані з введіть мабуть, в JavaScript? Це масив з нього виглядає як три об'єкта. І я знаю, що це тільки об'єктом через фігурні дужки. І зверніть увагу, є відкрита фігурна дужка, деякі речі, недалеко фігурна дужка, кома, потім ще кілька, кома, а потім ще трохи. Так от три аргументи розділені двома комами. Так що це масив з трьох об'єктів. І кожен з цих об'єктів мабуть, студент або співробітник деяких роду, кожен з ID, будинок, і ім'я. Але я назвав це щось називається JSON - JavaScript Object Notation. І це формат даних, який насправді настільки дуже популярні і в моді в ці дні, що, якщо ви пишете додаток, який використовує Facebook API, API Twitter, дійсно майже будь API там в ці дні, в тому числі деякі з власного CS50, тим Дані ви повернетеся не в стара школа формат CSV. Тому нагадаємо, що CSV супер просто. Він знаходиться всього в стовпці, розділені комами. Дані JSON дає вам більше метаданих. Він пов'язує ключ з кожного значення так вони не повинні просто припустити, що стовпець нульова одне значення, колонка один інший, колонка два це інше. Все в об'єкті JSON тут є свого роду з самоопісиваемимі, тому що кожен одне з імен в цьому файлі є буквально назвати перед ним, як лапках. Отже, давайте поглянемо на Кілька прикладів тут. Відпусти мене в прилад. І дозвольте мені перейти в наш віртуальний хост Каталог, в громадськості. І дозвольте мені перейти в JavaScript каталог. І давайте йти вперед і відкрити будинок-0.html, де DOM просто означає, об'єктна модель документа. Це дерево матеріал, до якого Я говорив раніше. І дозвольте мені запропонувати наступне. Ось веб-сторінка якого Тіло досить простий. Так тут внизу, помітити мене є форма. Ми бачили тих, перед. Він має два входи, один з яких має Ідентифікатор імені, один з яких має тип уявити, і перший своє тип тексту. Так що це насправді звучить досить просто. Ходімо звідси. Давайте повернемося на цю сторінку тут. Підемо в локальний, і йди в наш каталог JavaScript, і перейти до будинок-0, і тут ми маємо цю форму. Так ось, мабуть все це сторінка не містить. Він має поле імені з кнопку Надіслати. Але я не збираюся використовувати PHP тут. Я збираюся зробити сторону всі клієнта так сказати в JavaScript такий спосіб. Зверніть увагу, що я дійсно отримав ім'я Поле цього входу унікальний Ідентифікатор, який буде насправді врятувати мене якийсь час в один момент. І зауважте, я представив другий тег в голові моїй веб-сторінці,  тег. Так що це в цьому сенсі, що JavaScript є мова програмування на стороні клієнта. У цьому випадку, так само, як CSS, я поклав це прямо всередині мого HTML. Але зверніть увагу, я оголосив функцію що виглядає трохи як PHP синтаксично, але це насправді JavaScript, тому що знову ж, це на стороні клієнта в браузері. І зробити припущення, що це збирається зробити, хоча деякі з синтаксису тут є новим. АУДИТОРІЯ: привіт, хто б не. ДЕВІД Малан: Це буде привітатися щоб той, хто відвідує цю сторінку. Так як? Так помітити, виходить, в JavaScript є попередження () функцію. Це дуже роду сумно функція, насправді просто, як правило, дратувати користувачів. Це не той, який ви повинні дійсно використовувати зазвичай, але це швидкий і брудний спосіб роду друк щось до графічним інтерфейсом інтерфейс, як в браузері. Зауважте, що тут у мене є Рядок в одинарні лапки. Виявляється, що на відміну від C, JavaScript може насправді мають використанні одного цитує, і, чесно кажучи, це просто вид стилістичного конвенції між JavaScript програмісти використовувати одиночні лапки. PHP, вони насправді мають кілька інший сенс. Але зараз, просто знаю, що що це єдина причина. Конвенція в JavaScript, що часто використовувати одинарні лапки, але ми могли б використовувати подвійні лапки в обох місцях, а також. Так що це цікаво. Нагадаємо, в останній раз, що ми мали, що зображення на екрані, який привернув дерево де ви мали HTML вузол, і Головний вузол і вузол тіла, а потім деякий текст. Але був один спеціальний вузол в самий верх, що я назвав цей документ. Ну, виявляється, в JavaScript, будь раз, коли ви написати програму в JavaScript в браузері, у вас є доступ до спеціальна глобальна змінна. Подібні за духом суперглобальних РНР, цей називається в в нижньому регістрі документ. Це як структури, але ця структура також має функції всередині нього. Так C структура просто є дані зазвичай. Але об'єкт JavaScript, так як це технічно також має функції, інакше відомий як методи, всередині нього. І ви можете викликати функцію всередині цей об'єкт в буквальному сенсі робить свою Ім'я, точка, а потім назву функція, або знову метод. Це просто синонімом, дійсно. І що ця функція робити? Ви можете роду здогадатися з назви. Отримати елемент по ID. Так це буде пошук по веб-сторінку, пошук це дерево, шукаю що вузол, AKA елемент, має Унікальний ідентифікатор цитатою кінець цитати ім'ям. І що тоді я буду робити? Я збираюся отримати значення всередині що вузол в дереві, і я збираюся якось привітатися з таким ім'ям. Так зробити припущення, навіть якщо ми не маю бачив це все ж, те, що роблять плюс символи означають тут і тут, ймовірно,? АУДИТОРІЯ: Об'єднання. ДЕВІД Малан: Об'єднання. Так, і це лише роду проектним рішенням люди зробили років тому. У PHP, ви об'єднати речі з точками. У C, ви стрибаєте через кілька обручів і виклик такої функції як StrCopy () або Strcat () або інші подібні функції. Але в JavaScript, ви використовуєте плюси. Так що це просто об'єднання три струни - привіт, ім'я, а потім Знак оклику. Так що, коли і чому ця функція називається, хоча? Ну, взяти здогадатися з HTML в нижній частині. Чому вітати () називається, або коли? Мабуть, як краще, що я можу сказати, на уявити, коли ця форма видається, Я збираюся зробити все всередині цих лапок. І зокрема, я збираюся подзвонити вітати (), а потім повернутися помилковим. Ну, давайте подивимося, що чистий Ефект тут в першу чергу. Отже, дозвольте мені йти вперед і ввести в, скажімо, Лорен, Відправити. Здравствуйте Лорен. Давайте подивимося, якщо можливо це було просто пощастило реалізація. Нє-а. Так що це набравши з все ім'я я насправді поклав там. Але зверніть увагу, що не змінюється. URL-адресу і раніше будинок-0.html. Там немає register.php. Там немає другої файл. Там немає атрибут дії. Так що ж це повернення помилковим імовірно робиш? Чому я виклику вітати (), а потім повернення помилковим напевно? Що зазвичай відбувається, коли ви натискаєте Надіслати на формі, що навіть у нас є бачив минулого тижня? АУДИТОРІЯ: [нерозбірливо]. ДЕВІД Малан: Само десь, чи не так? Це виходить на якийсь URL призначення. Але я не хочу, щоб це відбулося тут. Я хочу, щоб мій веб-сторінки, щоб бути повністю динамічний, як Gmail, де, як тільки ви там, ви будете зупинятися там. URL-адреса не змінюється таким чином, що вказує вся сторінка перезарядки. Швидше, я просто хочу, щоб щось змінити як друк щось тут на екрані. Ну дозвольте мені очистити це до небагато. Дозвольте мені відкрити не Dom-0, але дозвольте мені відкрити Дом-2. Точно так само ви бачили деякі синтаксис тут. Виявляється, що ми тільки що зробив використовує сировину JavaScript. Так що це дійсно мова JavaScript. Деякі з вас можуть знати, з бібліотека називається JQuery. Так JQuery не те ж саме поняття, як JavaScript. Це просто бібліотека, яка дуже розумні хлопець написав і популяризував такі , Що майже кожна людина в світі в даний час використовує JQuery при використанні JavaScript. І на перший погляд, чесно кажучи, це виглядає трохи більш загадковим. Але ви знайдете, особливо якщо ви йдете там для вашого остаточного проекту з веб розвиток, ви побачите, що це очищає речі і економить вам досить кілька рядків коду. Так що давайте просто погляд на те, як ця форма працює. Зверніть увагу, що я видалити мабуть від мого HTML? Там немає на представити обробник так сказати. Там немає атрибута. Тому що ви знаєте, що Я дійсно не подобається? Я відчував, що ми падали до старих звичок там. Так само, як це починало відчувати себе неакуратно змішуватися як CSS з HTML, тому що ви начебто кидали різні мови по всьому місце, так само це почалося відчувати як поганій дорозі спуститися, де Я ставлю код JavaScript всередині мого HTML, а не факторингових його. Так от, урок тут. У Будинок-2.html, я факторингу його. І я трохи робити речі різному. На даний момент, я збираюся махнути руками на те, що це дійсно під капотом. Але тільки зараз припустити, що, що перший рядок коду в цій бібліотеці називається JQuery просто означає, коли Документ готовий, виконайте такі дії. Оскільки веб-сторінки може зайняти якийсь час для завантаження. Ви можете бути на повільному інтернеті з'єднання, і це могло б бути спінінг і спінінг, і, нарешті, він заряджений. Це рядок коду просто говорить дочекайтеся вся сторінка буде готова, документ готовий, перед виконанням цього коду. А тепер зверніть увагу, це, ймовірно, найкорисніший перший відняти у JQuery. Ця лінія тут дуже близькі за духом до цього набагато довше лінії тут. У той час як в сирому коду JavaScript, є існує глобальний об'єкт документа, є функція GetElementById (), люди, які написали JQuery спрощена, що просто сказати знак долара, а потім всередині дужки поставити дві цитати, а потім покласти символ решітка з подальшим унікальний ідентифікатор ви хочете захопити. Так це еквівалентно document.getElementById. Тим часом,. Уявити просто означає на уявлення якій би формі ви посилаючись на ліворуч, перейдіть вперед і виконати це. Але тепер це цікавість теж. Що дивно про те, що Я виділив тут? Мало того, що це частково синтаксично нова, є також щось безвісти зниклі. АУДИТОРІЯ: Це просто називається функція? Це не називається оповіщення? ДЕВІД Малан: Так. Ну, так оповіщення () не працює тут, щоб бути справедливим. Але немає жодної згадки про ім'я, як ви знаєте, Foo або щось тут. І справді, це одна з особливостей з JavaScript, що це досить могутній, але і зовсім нові. І PHP насправді має це також. Дозвольте мені йти вперед і робити щось дійсно швидко. Дозвольте мені йти вперед і поставити це тут. Дозвольте мені зробити це. Функція. Давайте назвемо цей обробник (). Функція обробника, так сказати. Те, що обробляє деякі операції. Дозвольте мені очистити моє відступ. І поставити це тут. І покласти, що тут. Так. ОК. Так що тепер у мене є функція під назвою обробник (), що я дійсно не знаю, що він робить ще. Це просто ще є таке. Упс. Взяв занадто багато. Давайте зробимо це. Добре. Вибачте. Добре. Дозвольте мені зробити це. ОК. Це виглядає красиво і прямо вперед зараз. Дозвольте мені зробити це. Зробіть це. І ОК. Так що тепер, давайте поставимо це тут. Немає більше програмування на льоту. ОК. Так що тепер, давайте повернемося до де почалася історія. Раніше я говорив, що ця лінія тут значить, коли документ готовий, йдуть вперед і робити це. Що я хочу зробити? Ну точно, я хочу піти вперед і робити наступне. Виконати цей рядок коду, і то те, що я хочу, щоб ти це називаємо це функціонувати при відправці форми. Тепер це те, що цікаво. Це саме по собі не є функцією. Зверніть увагу, я не поставивши дужки тут в звичайному порядку. Я буквально передаючи функцію з ім'ям обробник () в іншу функцію називається уявити () як аргумент як хоча це як змінну. І це одна з особливостей JavaScript, є самих функцій насправді просто об'єкти. Справді, вони насправді просто змінні якийсь. І якщо ім'я функції є обробник (), немає ніяких причин, я не можу передати його як аргумент тут. А це означає, коли форма з ID демо є представлені, викликати цю функцію. Але тепер, якщо я скасувати все це, чому тоді я, можливо, зробити це мить тому? Ну, це анонімна функція. Бо, чесно кажучи, я зрозумів, чому я турбує витрачати час декларування Функція називається обробник () тільки подзвонити це в одному і тільки в одному місці? Якщо мені не потрібно ім'я, і ​​я не потрібно назвати це більш ніж в одному місці, давайте просто реалізувати функцію там, де я потрібний. І так JavaScript і PHP підтримати те, що називаються анонімні функції, що дозвольте мені робити те, що тут. Але ми просто дряпати поверхню. Давайте дражнити з всього лише пару Остаточні тут приклади. Якщо я йду в quote.php. Зверніть увагу, що це насправді PHP Функція, програма PHP, що я написав що очікує параметр HTTP називається символ, і я можу передати в значення як FB. І якщо ми насправді подивитися на джерело Код, це запит безкоштовний сайт називається Yahoo Finance, як п-набір сім, і це повернення до мене щось в мабуть, Формат відомо, JSON - JavaScript Object Notation. Це просто об'єкт. Зверніть увагу на фігурні дужки, лапки, двокрапка, і коми. Тепер між тим, це досить прохолодно. Тому що я, ймовірно, може використовувати програмування мова для створення URL-адрес що виглядати наступним чином динамічно, чи не так? Я можу змінити це на Google і повернутися Google, ціна акцій $ 1,017.55. Отже, давайте подивимося, якщо ми не можемо використовувати це зараз. Пустіть мене до Ajax-0 тут, який виглядає наступним чином. Це просто сайт, який має форма з кнопкою. Дозвольте мені тут йти вперед і ввести YHOO для Yahoo, символ акції, натисніть Отримати Цитата, і тепер помітити я отримав попередження 32,86. Дозвольте мені насправді піти в незвичайному версії це сторінка, версія два, і ввести скажімо Microsoft, MSFT. Отримати спеціальна пропозиція. І тепер не помітити, не попередження. Зверніть увагу, де він говорить ціна повинні бути визначені? Існує простий з прикладів, які натякає на якому Gchat і Facebook Спілкуйся, і Gmail, і іншої такої сайти роблять насправді зміна веб-сторінки. Зауважимо, що це. Дозвольте мені перезавантажте сторінку. Дозвольте мені відкрити інспектор в Chrome. Відпусти мене до елементів Вкладка сюди. Тепер зверніть увагу, якщо я збільшення сюди і відкрити це, зауважте, що це мій HTML DOM - мій об'єктна модель документа. Це мій HTML. Але тепер помітити, навіть якщо це відбувається щоб бути трохи важко побачити його в обидва місцях одночасно, якщо я типу в FB тут, стежте за нижньою екрану тільки. Це насправді зміни мій HTML на льоту. І він робить це досить просто , Роблячи щось на зразок цього. Якщо я відкриваю Ajax-2, сповіщення реалізації щось так сексуально, як що, незважаючи на те, що це досить потворно, але так складні, як, що функціонально, вона має деякі HTML в нижній частині. Але зверніть увагу, я використав, щоб помітити. Ми не використовували це і раніше, але це як, але це не змусить все на новій лінії. Він просто робить прямокутну область на тому ж рядку, по суті. Зверніть увагу, що я дав йому ідентифікатор ціною. І виходить, за допомогою того ж JavaScript бібліотека, у мене є функція називається цитата (), який викликається щоразу, коли форми. І те, що я роблю це. Я оголошенні змінної в JavaScript називається URL, збереження значення quote.php? символ =. Іншими словами, я сам починаю підготувати запит HTTP, а потім Я об'єднання на що з плюсом будь-який елемент з ідентифікатором з символ, який сповіщення в тому, що текстове поле аж тут. Так само, як ми мали форми в минулому. А потім виявляється, в JQuery, якщо ви дзвоніть. Val (), яка викликає з вал Функція, значення функції, яка отримує що користувач ввів дюйма А потім все мережевого трафіку що відбувається, це. $. GetJSON. І як у бік, знак долара є просто скорочений запис. Це дійсно jQuery.getJSON. Змусити мене JSON з даної адреси, а коли Запит повертається, називають цю функції і передати в якості аргументу що повернувся з сервера. Отже, іншими словами, якщо я повернуся до браузер, і я повертаюся до quote.php, що мій браузер робить стає це шматок даних. І коли я йду на цю веб-сторінку тут, помітить, якщо ми замість цього перейти до мережі вкладку і очищати її, а потім введіть щось на зразок GOOG для Google і отримати Цитата, помітили сторінки не змінився. Але запит HTTP був зроблений і що повернулася сюди, якщо ми подивимося на відповідь цілу купу JSON що, нарешті, ми отримали доступ з ця проста лінія тут. Дані отримали те, що було з сервера. Ціна назву ключові мене хвилює. Так data.price дає мені, що. Тепер тим часом, і це є останнім прикладом. Ви можете зробити ще більше зі сторінкою. Один насправді, ну два. Ми можемо повернути тег, якщо ви пам'ятаєте про це. Ось JavaScript. Ми можемо зробити це. Дуже цікаво. Ми залишимо це в якості захоплюючим. Але більш збудливо, ви можете робити такі речі. Якщо я йду до геолокації-1, то виходить, Chrome, що знає, що ми знаходимося на Широта Довгота 42.37. -71,10. Так що є ще більш у вашому розпорядженні. Але про це наступного тижня. Побачимося в понеділок.