Ханна Блумберг: Привет всем. Ми збираємося почати всього пару хвилин раніше оскільки у нас є цілий багато матеріалу, щоб пройти. Я Ханна. Я TF. Марія збирається приєднатися нам всього пару хвилин. Розділ Вона викладає прямо перед. Я вчу розділ право після, так що ми збираємося тримати його в півтори години. Отже, як ви побачите тут, у нас є достатньо кілька тем, ми повинні пройти, таким чином, ми будемо йти трохи швидше. Але якщо в якийсь момент ми щось сказати занадто швидко або ви не розумієте, не соромтеся, щоб перервати з питаннями. Ми хочемо, щоб мати можливість зробити це огляд сесії в якості корисної для всіх вас як можна. Високий. Отже, давайте стрибати прямо в с деякі теми, які ми насправді дуже, дуже коротко розглянуті для Тест 0 в оглядовій сесії вікторини 0. Так, починаючи з пов'язаними списками. Так що переконайтеся, що у вас є деякі базові знання про пов'язаних списків і зручно робити деякі з основних операцій. Так що просто розглянути, пов'язані Списки краще, ніж масиви тому що вони можуть рости динамічно. Отже, ми маємо величезну перевагу, що. Ми бачили їх використовувати в хеш-таблиць, коли ми не знаю точно, скільки речі, які ми збираємося хочете вставити в нашій структурі даних. На жаль, у нас є шматки зв'язаний список всього пам'яті, таким чином, ми не обов'язково буде в змозі зробити постійний доступ часу до будь-якого елементу у зв'язаному списку. Для того, щоб знайти конкретний елемент, ми є для перебору всіх спосіб з самого початку. Так що майте на увазі, що більшість з Основні операції Омега 1. Так вставка тільки збирається взяти 1. Видалити збирається взяти п, так як ми повинні піти і знайти його в списку. І пошук може зайняти, в гіршому випадку, п. Ми не можемо зробити щось на зразок бінарний пошук на зв'язаний список Оскільки ми не можемо просто випадково перейти до середини. Прохолодний. Високий. Трохи стеків. Це, знову ж, прийшли на вікторині 0, так що ви повинні бути супер комфортно з ним. Але для стеків, ми просимо вас запам'ятати стек тарілок. І це буде перший в, останній з. Таким чином, ми стек речі в стеку, а потім якщо ми намагаємося взяти щось off-- які ми називаємо з'являються від stack-- ми відірватися від вершини. І якщо ми хочемо, щоб покласти щось в стеку, ми називаємо це штовхає. Таким чином, це завжди буде ростуть знизу, як стек лотків. Високий. Ми бачили стеки реалізовані з обох зв'язані списки і масиви. Якщо ви реалізуєте з масивами, ви хочете щоб переконатися, що стежити за І розмір, і пропускна здатність. Так розмір буде струм Кількість речей у вашому стеку, у той час як потужність складає загальна кількість речей, які ви можете зберігати в стеці. Прохолодний. Дуже точно так само, у нас є черги. У цьому випадку, замість того, щоб думати про стек тарілок, думаю лінії. Це буде перший в перший вийшов. Так що, якщо ви шикуються в чергу за то в магазині, ми сподіваємося, що людина вперше в Лінія буде допомогти в першу чергу. Замість того щоб сказати поштовх і поп, як ми робимо для стека, ми просто говоримо в чергу і виведення з. І знову ж, якщо ви реалізації цього з масивом, ми повинні стежити за не тільки розмір і потужність, але також керівник, який буде передня нашої черги. Прохолодний. Будь-які питання по кожній із, що? Високий. Рухаємося далі. ОК, хеш-таблиці. Ось де він починає отримати дійсно цікаво. Таким чином, хеш-таблиця один реалізація асоціативного масиву. Тому в основному те, що відбулося є у нас є все це вхід, і ми даємо його в хеш функція, що говорить, ОК, це десь в хеш-таблиця належить. Так найпростішому хеш-функції що ми бачили тільки говорять, ОК, припустимо, ми хочемо, щоб покласти рядки в нашій таблиці. хеш І дійсно проста ідея може бути, щоб сказати, добре, давайте просто Сортувати за Перша буква цього слова. Таким чином, ви можете бачити тут, ми беремо банан, покласти його через хеш-функції, і він каже, гей, що повинні піти на індекс 1. Таким чином, ми може істотно думати про хеш Таблиця в купу різних відра. І кожен з цих ковшів відбувається щоб тримати голову пов'язаного списку. І в цьому зв'язаний список, де ми можемо фактично поклав різні частини даних. Так дайвінг трохи більше в хеш-функции, ось приклад я просто описано, де ми просто говоримо, ОК, взяти перші букву слова, і ми збирається розбиратися у відрах. Так, імовірно, там буде 26 відра, по одному для кожної літери алфавіту. Чому це не велика хеш-функція? Що робить цей не-ідеал? Так. АУДИТОРІЯ: Ви збираєтеся мати зіткнень. Ханна Блумберг: Так, саме так. Ви будете мати зіткнень. Так ось одна річ. І ми будемо говорити про те, як ми можемо виправити зіткнень всього секунду. Ще одна проблема з цим Зокрема хеш-функція є те, що наша відрізняється Ковші буде досить різко різних розмірів. Ми знаємо, що є багато більше слів, які починаються з А, ніж X, таким чином, ми будемо мати дуже незбалансовані відра в нашій таблиці. хеш Прохолодний. Так що, так, давайте повернемося до точка зіткнення. Що нам робити, якщо є зіткнення? У нас є кілька різних варіантів. Таким чином, одна, тому припустимо, що ми намагаємося покласти ягоду в нашу хеш-таблиці. І ми бачимо, о, ми хочемо щоб покласти його в індекс 1, але банан вже живе там. Що ми будемо робити? У нас є два основних варіанти. Номер один, ми можемо говорити, ОК, немає ніякої кімнати в індексі 1, але давайте просто тримати дивлячись через поки ми не можемо знайти інший відкрите місце. Так ми будемо казати, добре, давайте покласти його в місці 3. Це один варіант. Це називається лінійне зондування. І другий варіант говорить, добре, добре, давайте просто зробити кожен з цих відер бути керівники пов'язаних списків. І це нормально, якщо є більше ніж однієї речі у відро. Ми просто збираємося додайте його на фронт. Тому тут можна побачити, добре, коли ми вставили ягоду, ми просто взяв банан, вид штовхнув його на трохи і кинув ягоду там. І це теж абсолютно нормально. Це називається окремий ланцюжка. Ви можете думати про це як щось на зразок масив з керівників в пов'язаних списках. Будь-які питання по хеш столи, хеш-функції? Високий. Дерева і намагається. Таким чином, дерево якої-небудь структури даних в якому є свого роду ієрархії або якийсь ранжирування ваших різних об'єктів. І це стане супер ясно, коли ми бачимо приклад. І ми побачили спроб, а з хеш-таблиць, в pset5-- які, знову ж, абсолютно справедлива гра для цього quiz-- як інший даних структури, які ми можемо зберігати різні речі. У разі словника, ми зберегли купу слів. Отже, давайте поглянемо на деякі дерева. Таким чином, це є прикладом дерева. Він має таку структуру, ієрархічної структури, яка, де ви можете побачити, що це 1 вузол у верхній є якась рангу вище 2 і 3, які перевищують 4, 5, і 6 і 7, які вище 8 і 9. Так що все, що ми розуміємо під дерево, так що ви можете просто вид зображення у вашій голові. Тепер у нас є кілька більш спеціалізовані дерева. Так одним із прикладів є бінарне дерево. І бінарне дерево, знову ж таки, буде структура даних з якоюсь Ієрархія, але кожен з вузлів може мати не більше двох дітей. Ось де слово походить від довічного. Таким чином, це приклад двійкового дерева. Так що це менше, категорія дерев. Тепер давайте ще більш конкретно і говорити про бінарної trees-- бінарного пошуку дерева, а. Так от ідея не тільки робить кожен вузол має не більше двох дітей, але всі діти в лівий будуть менше і всі діти в Праворуч буде більше. Так помітити в тільки наш бінарне дерево, є Немає зв'язку між числами. Але в нашому бінарного пошуку дерево, ми бачимо, ОК, ось 44. І кожен номер зліва 44 є менше, і всі вправо більше. І, що тримає на кожному рівень дерева. Таким чином, тут, це менше, ніж 22, і це більше, ніж 22. І це бінарне дерево пошуку. Чому ми думаємо, що називається бінарного дерева пошуку? Який алгоритм це вам нагадує? АУДИТОРІЯ: Двійковий пошук. Ханна Блумберг: Двійковий пошук. Тому що, якщо ви шукаєте Номер, в цьому дереві, в кожній точці, ви можете просто постукати від половини дерева, який є великим. І так, що відбувається, щоб дати нам щось що виглядає як бінарний пошук. Які-небудь питання? Гаразд, круто. Гаразд, намагається. Улюбленець. Так що це приклад того, що ми бачили купу в класі. І знову ж, це просто ще один так, що ми можемо зберігати дані. У разі словнику, знову ж, це просто буде струни. Отже, давайте подивимося, що це насправді Схоже, на дещо нижчому рівні. Отже, давайте поглянемо в одному вузлі в синтаксичного дерева. І ми бачимо, гаразд, там збирається бути логічне і вузол, покажчик на вузол. І ми бачимо, що Логічне називається is_word. Так по суті, це збирається відповідати в цих маленьких трикутників, які каже, якщо ви отримали тут, Ви знайшли повне слово. Ми знаємо, що "Турінг" над ось повний слово, в той час як тільки Т-У-Р не словом тому що ми не бачимо, що мало дельту. І, що мало дельта, знову ж, відповідає цьому is_word, цей логічний is_word. І тоді у нас є масив дітей. Таким чином, на кожному рівні, ви є конкретний вузол, і що вузол вказує на Масив весь алфавіт. Таким чином, ви можете бачити, знову ж таки, в цьому picture-- Я буде тримати стрибки назад і forth--, що цей масив у верхній має купу різних вузли, що надходять від нього. Він має 26 або 27, якщо ви хочете включити додатковий символ. І це дає нам спосіб зберігання наших даних таким чином, що можна подивитися на що ви можете подивитися супер швидко. Що таке час пошуку для синтаксичного дерева? АУДИТОРІЯ: [нерозбірливо]. Ханна Блумберг: Так. У теорії, це постійна часу. Це тільки збирається бути розмір Слово, яке ви хочете подивитися. Навіть якщо ми додамо Zillion більше слів у нашій синтаксичного дерева, він не збирається, щоб взяти нас більше, щоб визначити, якщо дане слово в синтаксичного дерева. Так що це дійсно приємно. АУДИТОРІЯ: чи тільки вам ініціалізувати цей масив? Ви пропустили точку або два. Ви можете просто поговорити про що на секунду? Ханна Блумберг: Звичайно, абсолютно. Гарне питання. Питання було, ми є масив, що це матиме вузол зірки, як на відміну від просто вузла, вірно? Прохолодний. Так ось те, що ми говоримо, це наш масив це просто буде покажчиками на інші масиви. Так що це essentially-- його вид відчуває, як зв'язаний список таким чином де кожен з цих дітей просто вказують на наступний вузол. І те, як ми насправді визначити, гей, добре, ми повторний через весь Слово, це слово в словнику, ми просто перевірити цю is_word. Велике питання. Так. АУДИТОРІЯ: ОК. Так що ж середу для синтаксичного дерева? Ханна Блумберг: Звичайно. Так під час виконання для синтаксичного дерева для пошук буде постійна часу. Так що це просто збирається бути кількість букв в слові. Це не залежить від Розмір словника або розмір структури даних. Так от трохи більш простий приклад. У цьому випадку, ви можете бачити, що слово кажан в словнику і у вас є зум, але ви не їсти щось на зразок зоопарку. Як би ми зробити зоопарк? Як додати зоопарк до нашого словник, на наш синтаксичного дерева? Так. АУДИТОРІЯ: Зробіть is_word вірно для [нерозбірливо]. Ханна Блумберг: Добре. Таким чином, ми б сказати, Z-O-O, а потім ми б хочете перевірити цю коробку від а. Відмінно. Давайте порівняємо дуже коротко намагається проти хеш-таблиці. Намагається дійсно здорово тому що, як ми вже говорили, вони забезпечують постійної часу пошуку. Але величезний мінус це вони величезний. Ви можете отримати почуття, навіть дивлячись на нього, що збирається взяти величезна кількість пам'яті. Так вони збираються бути набагато більше, ніж хеш-таблиці, але вони збираються, щоб дати нам набагато швидше раз підстановки. Так що начебто вашої компроміс, то, що ви дбаєте про, будь то швидкість або пам'ять. Будь-які питання по кожній із, що, всі структури даних C. Гарний. ДОБРЕ. Ми збираємося, щоб перейти на трохи трохи веб-розробки з Марією. МАРІЯ ZLATKOVA: Прекрасний. ДОБРЕ. Ханна Блумберг: Ви можете використовувати свій ноутбук. МАРІЯ ZLATKOVA: Ніцца. ОК здорово. Як ми рухаємося в даний час на веб розвитку, ми трохи поговорили про зміну прав доступу файлів і каталогів так що вони можуть бути доступні іншим користувачам, до світу, і так, що ми можемо побачити, як в основному ми можемо передати їх коли ми розробляємо такі речі, як веб-сайти що ми в основному робили. Таким чином, ми побачили команду CHMOD, що зміна режиму, в основному. Це команда Linux і він змінює права доступу об'єктів файлової системи. І об'єкт файлової системи просто каталог, файл, все, що ви можете змінити дозволу. Таким чином, щоб побачити права доступу до файлів, ми набираємо команду Ls, список -l. І коли ми вводимо, що ми зазвичай бачите деякі права які виглядають ніби як це перед ім'ям каталогу. Так г відноситься до каталогу. І тоді у нас є три тріади, що в основному см дозволів або користувач, група, чи світ. Типи дозволів, що ми можемо Тобто для цих трьох груп людей або R для читання, W для писати і виконувати на х. І ми можемо мати ті, для група і світ, а також. Складна річ, що іноді коли ми введіть команду CHMOD, ми повинні ввести деяку кількість яка складалася з трьох бітів. Таким чином, ми могли б зробити, як 777 і що в принципі послався на додану вартість кожного з цих тріад бо г буде ставитися до 4, ж б см 2, а х буде ставитися до 1, тому, коли підсумовуються, кожне з чисел зійде з загальним числом кумулятивного значення між 0 і 7. Таким чином, ми також могли б 0 для будь-яких дозволів на все. І, що б дати нам в основному дозволів для кожної користувача, група, чи світ. Будь-які питання з цього так далеко? АУДИТОРІЯ: Ви сказали, читав, було 4? МАРІЯ ZLATKOVA: Так. АУДИТОРІЯ: [нерозбірливо]. Ханна Блумберг: Так. АУДИТОРІЯ: А потім, додавши всі ті інші будуть вказувати номер. МАРІЯ ZLATKOVA: Так. Так. Ці великі питання. Прекрасний. Далі, ми стрибнули в HTML і а трохи більше про веб-розробці. Так просто означає, HTML Мова розмітки гіпертексту. І це розмітка мова, яка є стандартним що він використовується для створення веб-сторінок. Це називається мова розмітки бо це насправді не складено. Це не говорить, як якийсь код повинен бути виконані або що-небудь подібне. Це просто окреслює і описує, як веб- сторінка повинна бути створена з кожним з її елементів і як вони повинні виглядати для користувача. Деякі з HTML-теги, що ми підійшов є наступні. Всі наші HTML документів почав з DOCTYPE HTML. Тоді у нас завжди є HTML тег. У нас є голова і тіло. І важливо, що HTML-є це свого роду вкладеної структури тому що це дуже ясно. І тоді стає ясно, коли ми потрібно відкрити і насправді близькі міток. І ми завжди повинні закрити мітки, які ми відкрили. І тут у нас є деякі види речей вперед, які ми хочемо мати. Отже, ми маємо, наприклад, назва CS50. І тоді ми насправді можна пов'язати таблиці стилів який визначає, як ми стиль наш сайт. Це CSS. Ми збираємося йти по ньому в Наступна пара слайдів, а також. У тілі, ми ставимо деякі класи і ідентифікатори. І як нагадування, знову ж, Ідентифікатори унікальні і класи можуть бути віднесені до кількох пунктів. І, що просто означає, що ми можемо використовувати класи і ідентифікатори в іншій structures-- Так, Наприклад, в CSS файлів або стилю sheets-- звернутися до конкретних елементів і в основному говорять, що ми хочемо, щоб стиль або створити певний елемент в якійсь особливим чином. І ми говоримо їм їх ідентифікатори і класи. І ми можемо також звернутися до різні речі по тегам, а також, але ідентифікатори і класи просто дати нам деякі Універсальність і що конкретно ми хочу звернутися до. Так що приклад. Ми можемо, знову ж таки, в межах файл CSS, де ми хочу, щоб визначити деякі style-- так кольори, шрифти, тощо that-- ми можемо визначити стиль для тіла. Так що б визначити його на весь тега тіла. Але тоді ми можемо також визначити стиль для #title. І знову, хештегом відноситься до нашого ID і крапка ставиться до нашого класу. І тоді для .info, ми можна також встановити деякі атрибути. І знову, коли ми повернемося, у нас були Клас називається інформація і наше посвідчення назву. І ми бачимо, що ми називаємо їм #title і .info. АУДИТОРІЯ: Ви хочете сказати, хештегом [? прийняти мене? ?] МАРІЯ ZLATKOVA: Вибачте? АУДИТОРІЯ: Ви хочете сказати, хештегом [? прийняти мене? ?] МАРІЯ ZLATKOVA: хештегом означає ідентифікатор, так #title ставиться до того, що елементи Тобто цей ідентифікатор, званий титул. І тоді точка відноситься до класу. Так .info відноситься до цього елементу оскільки він має інформації про клас. Так. АУДИТОРІЯ: Чому вас виділити їх в HTML? Чому ви кажете, певні речі Ідентифікатори і деякі речі клас? МАРІЯ ZLATKOVA: Це просто до you-- Ханна Блумберг: Повторіть питання. МАРІЯ ZLATKOVA: О, вибачте. Чому ми виділяємо певні елементи як ідентифікатори та інші елементи як класи? Це тільки тому, що дійсно часто вибір дизайну. Це дає вам багато Універсальність в тому змозі сказати, що я хочу це певний елемент щоб цей ідентифікатор, тому що вони хочуть щоб зробити багато речей, з ним, і я тільки хочу, щоб визначити стиль, певний стиль або колір все для цього елемента. І те, як зробити, що просто даючи йому ID. І потім, якщо я хочу, щоб мати пара різних предметів маючи того, що замість відбувається і установка their-- а не робити це за допомогою тег, бо тег буде встановити осередок для всієї тега кожен раз використовується цей тег, Ви можете встановити клас декількох елементів. А потім просто відкрити цей клас і сказати, Я хочу, щоб розробити Такий клас шлях. І знову, клас може бути кілька різних предметів і ідентифікатор повинен бути унікальним. Великі питання. Будь-які інші питання? ОК, дивовижний. Знову ж, це, як ці селектори які посилаються на CSS, з хештегом, з точки, або без нічого для присвоєння стиль якийсь тег, як тіло. І тут у нас є спільне Синтаксис, як це робиться. Щоб повторити деякі краще практики для HTML і CSS, ми повинні, знову ж, закрити всі HTML-теги, які ми відкриваємо. І те, що ми рекомендували вам зробити для ваших кінцевих проектів, а також для CS50 фінансів, щоб зробити Переконайтеся, що всі ваші HTML перевіряє. І це буде зроблено з W3 валідатора. І тоді те, що ми зробили, і те, що ми рекомендуємо це робити відокремлює стиль, так CSS від розмітки HTML. Тому все, що відноситься до того, як Ваша сторінка буде виглядати візуально і як він збирається бути змінені повинен йти в CSS документа. І тоді ваша розмітка кажучи, як все у відношенні один одного, HTML і і що повинно пройти всередину Ваші HTML документи. Які-небудь питання? Ммм. АУДИТОРІЯ: Що саме відбувається на с перевірки сторінки коли ми підтвердження HTML-що [нерозбірливо] створив? МАРІЯ ZLATKOVA: Так что-- думаю, що ви. Так що ж відбувається на сторінці з перевіркою і чому ми повинні це робити? В принципі, ми повинні зробити що тому що багато разів, ваш браузер, якщо ви не встигли закрити тег або щось подібне, Ваш браузер як і раніше буде відобразити сторінку і, можливо, все ще працюють, але краще практика, щоб переконатися, що Ви, знову ж, закриті всі теги, що всі ваші елементи так, що вони повинні бути, і в основному, що це сама конвенцій, які збережені в пам'яті. Це, знову ж, тільки що ви повинні вчитися, щоб робити, на відміну від того sloppier код тощо. Так. Ой, вибачте. Я думав, ви були піднімаючи руку. АУДИТОРІЯ: Ні, я був просто [нерозбірливо]. МАРІЯ ZLATKOVA: ОК. АУДИТОРІЯ: Спасибо. МАРІЯ ZLATKOVA: Звичайно, спасибі. Отже, ще раз, відправляючись на те, як інформація передається і моделі комунікації для передачі інформації. TCP / IP. TCP просто означає передач Протокол управління та ІС відноситься до інтернет-протоколу. І тільки відноситься до спосіб дані передаються. Якщо у нас є деякі дані, які потрібно доставлений you-- так Ви робите запит на певний сервер. Наприклад, коли ми намагаються отримати доступ до cs50.net, ми робимо запит до CS50-сервер і ми бачити, що ми хочемо отримати це свого роду інформації. І потім на основі цього протоколу про те, як доставляється ця інформація, сервер дає інформацію назад до нас, клієнт. І тоді ми можемо дивитися інформація для цієї сторінки а потім використати його. Отже передачі гіпертексту це просто ще один протокол або набір конвенцій, визначає, як веб-браузер і веб-сервер повинні спілкуватися. І все це покласти разом, HTTP, знову ж таки, просто визначає, як визначив це гіпертекстова в HTML, що ми працювали його, як це повинно бути доставлені до вас і як це дані, які доставлені до вас стає для вас. І ось чому, якщо ви, хлопці, пам'ятайте, з класу, у нас було багато запитів і у нас було багато синтаксису для цих запитів, що ми збираюся перейти на прямо зараз. Отже, ще раз, коли ми відправляємо запит до сервера, ми повинні визначити пару речей. Таким чином, ми повинні знайти тип запиту, що ми встановлюємо. І знову, у нас є, наприклад, GET є одним з видів методу що ми маємо в нашій прохання. І тоді HTTP / 1.1 тільки протокол, який ми використовуємо в даний час. Велику частину часу, що відбувається протоколом, який ми використовуємо. Так що, якщо у вас є питання так на вікторині. Ось конвенції що у нас так далеко. Обернена коса риска відноситься до якоїсь з речей, які ми проханням. Потім господар являє собою, наприклад, в цьому так, що ми намагаємося йти в google.com. Так що це значення для господаря. Це тип запиту які можуть бути відправлені. І тоді тип відповіді, який міг направляється знову, грунтуючись на цьому протоколі, знову, HTTP / 1.1. Так що це HTTP-версія знову. 200 ОК це тільки код стану. І, що ОК це просто фраза на основі цього коду стану. І тоді Content-Type відноситься до типу що повертається до вас, що це для цієї веб-сторінці, що ви отримуєте і що у вашому браузері може надати згодом. І це текст / HTML. АУДИТОРІЯ: Що означає 1,1? МАРІЯ ZLATKOVA: Це просто Версія of-- ой, що ж 1.1 увазі? Це просто версії, HTTP версія протоколу, який ми використовуємо. Велике питання. Інші питання? АУДИТОРІЯ: Не могли б ви підвести підсумки Content-Type дуже швидко? МАРІЯ ZLATKOVA: Так що це те, що сервер. тип information--, що тип вмісту були питання. Так що був тип Інформація, яку Ви отримаєте назад з сервера, типу дані, які браузер може потім надати, що ви використовуєте. АУДИТОРІЯ: Це те, що це Протокол кажу вам робити? МАРІЯ ZLATKOVA: Вибачте? АУДИТОРІЯ: Це те, що кажуть, що протокол? МАРІЯ ZLATKOVA: The protocol-- АУДИТОРІЯ: --what Content-Type є або что-- МАРІЯ ZLATKOVA: Протокол заснований on-- що протокол кажу вам? Ось тільки шлях що цієї інформації був доставлений до вас на основі від того, яка з протоколу Чи є ця інформація отримала поставляється до вас. Чи має це сенс то? Ханна Блумберг: Ви може думати про протоколі а a-- Я думаю, професор Малан описав його в класі, ніби як a-- це як еквівалент людського квітірованія. Скажіть, як, гей, я запит, і я знає, як поводитися HTTP версії 1.1. І тоді сервер говорить, О, добре, я-- і обидва існують. Я також знаю, як мати справу з HTTP / 1.1. І я збираюся дати Ви підтримуєте деякий контент. У цьому випадку, це буде до типу тексту / HTML. Так що це свого роду просто спосіб з них для communicating-- МАРІЯ ZLATKOVA: Це просто підтверджують, що ви і слідуючи тій же Протокол і що обидва клієнт і так server-- Ваш браузер і server-- начебто знаю, що ти про що говорить і є Конвенція для проходження в даних. АУДИТОРІЯ: Так Content-Type пройшов проби Тип змісту тексту / html-- це окрема частина того ж повідомлення? Або це частина скажімо, 200? Чи говорить їм, що 200 або is-- МАРІЯ ZLATKOVA: 200 каже, що все це пройшло нормально. І тоді тип вмісту роду Окрема частина того ж повідомлення, і заявивши, що річ, яку я Повертається має цей тип тексту / HTML. Це просто давати більше інформації. Є що додати? ДОБРЕ. Будь-які інші питання з цього приводу? Високий. Таким чином, деякі інші HTTP статуси, які ми могли б отримати на додаток до 200 OK, ті, що ми бачили, може бути, коли- можливо, багато 403 і 404. Так 404, якщо ви намагаєтеся Доступ те, що не існує. Так, наприклад, у вашому CS50 Фінанси psets, якщо ви були рендеринга quote.html і ви не повинні файл, але замість цього ви були quote.php, що призведе до 404 Not Found бо файл не може існувати. Для 403 заборонено, що належить до повноважень. Так що, якщо який-небудь файл не доступний для читання Світ, ви можете отримати 403 повернувся. Деякі інші, які ви можете get-- 301, переїхав на постійне проживання; 302, Знайдено; 304, модифікований; 400, Bad Request; а потім Внутрішня помилка сервера для 500 і 503, Служба недоступна. Так. АУДИТОРІЯ: чи будемо ми очікувати запам'ятовувати всі ці статуси? МАРІЯ ZLATKOVA: Я б їм на шпаргалку. [Сміх] АУДИТОРІЯ: Ми, як очікується, знаю, що викликає кожен? МАРІЯ ZLATKOVA: Чи є вони? Ханна Блумберг: Для тих, які ми запустити into-- тому питання was-- МАРІЯ ZLATKOVA: Чи є вони, як очікується, знаю, що кожен з них статусу Коди можуть бути викликані? Таким чином, для тих, які ми використовували і побіг у, я б сказав, так. Таким чином, ми безумовно бачили 200 ОК та лекції його в psets. Ми бачили 403, 404. Для решти? Ханна Блумберг: Я б кажуть 500 здається чесної гри. МАРІЯ ZLATKOVA: 500, так. Ханна Блумберг: Так. Просто загальний зміст що викликає їх. А також просто це Імена, ви можете вид як зробити обґрунтоване припущення як до чого насправді викликало їх. Наприклад, рух постійно, ймовірно, файл був переміщений назавжди. АУДИТОРІЯ: Але на попередній іспит, було так як ви очікуєте, щоб ми відповісти? Ханна Блумберг: Це стоїть нуль очок. Питання про 418 на чайнику технічно статус HTTP, але це коштувало нуль очок. Очевидно, що ви не Очікується, знаю їх. АУДИТОРІЯ: Це справжній? Ханна Блумберг: Це справжній Один з них, але це нічого не значить. Це просто жарт. Інтернет люди веселі. МАРІЯ ZLATKOVA: Великі питання, хлопці. Будь-які інші питання? АУДИТОРІЯ: Що внутрішня помилка сервера? МАРІЯ ZLATKOVA: Внутрішня Помилка сервера тільки означає, що ви були не в змозі спілкуватися з сервером з деяких причин. Так що це не обов'язково те, що має відношення до з клієнтом або щось подібне. Я не знаю жодного конкретного прикладу що ми перейшли, щоб пояснити, але так. Ханна Блумберг: Звичайно. Так, наприклад, як давайте що ви працювали на колажів і сервер Google пішов на деякі Причина, відключення електрики, скажемо так. Це було б внутрішній сервер помилка або якийсь of-- подобається вам не хотів би отримати відповідь назад. МАРІЯ ZLATKOVA: Так. Це просто, коли ви не в змозі спілкуватися з сервером для якоїсь причини, бо з нього йде вниз або який-небудь іншої причини. Так стрибати в PHP. PHP, на відміну від HTML, є мова програмування. І ми почали використовувати його, тому що це дуже корисно для веб-розробки. Ми вперше використовував його в CS50 фінансів. І це в основному допомагає нам принести разом це розмітки, дизайн, і як ми насправді використовувати інформацію для відображення речі на веб-сторінці. Так PHP саме по собі означає PHP Препроцесор гіпертексту, так що це рекурсивна backnorym сам по собі. І відкриття теги для PHP ми ліва і права стрілки з питальними знаками і PHP. Таким чином, ми вже бачили купу нього. Тепер, ми тільки збираємося переходити деякі з основних речей, про нього. Так з PHP, змінної імена яких починаються з знаку долара. Ми не вказати, знову ж, змінна типу більше. Так само, як ми зробили з C, ми не повинні цього робити. Ми можемо зробити купу різних матеріал зі змінними. Ми можемо поставити їх разом шляхом об'єднання їх з точковою нотації, яка ми не могли б зробити в C знову. Знову ж таки, у нас є трохи більше гнучкості з PHP в умовах змінних. Знову ж таки, ми не маємо основну функцію. І PHP інтерпретується на відміну від компіляції Отже, як же зробити, ми для файлів C., ми не повинні робити, що для PHP. Але, швидше, так, що мова виконується сама по собі, вона інтерпретується. А потім слабо типізований просто означає, що ми не потрібно вказувати змінну тип і типи змінних розуміються під час виконання. АУДИТОРІЯ: Але те, що зробив тобі маю на увазі точка об'єднання? МАРІЯ ZLATKOVA: Звичайно. Коли ми хочемо навести together-- так що якщо у нас були деякі змінну, мав значення 3 і у нас був інший змінна, мав значення рядка, ми могли б змінні разом поставивши крапку між ними та об'єднання їх. Або ми могли б створити Мінлива називається ім'я і поклав його разом об'єднання двох рядків. Так що, якщо у нас був подвійний рядок у котирування і ставимо крапку після нього, і тоді ми мали інший рядок, що буде створити рядок в цілому. АУДИТОРІЯ: ОК. МАРІЯ ЛАТВІЯ: Був, що ясно? АУДИТОРІЯ: Так. МАРІЯ ZLATKOVA: ОК. Так. АУДИТОРІЯ: Коли ви говорите, інтерпретувати, що складено, Ви говорите про вас не повинні бути також конкретні, коли Що стосується PHP в порівнянні з C? МАРІЯ ZLATKOVA: Коли ми говоримо, інтерпретується як протилежність складений, що ми маємо на увазі? Так це означає, що ми не повинні виконувані файли для запуску PHP. Це означає, що він працює, як вона йде. Чи має це сенс? Трохи більше. Ханна Блумберг: Таким чином, ви може думати перекладача а іншою програмою, яка відповідає для переходу по рядках через PHP а насправді його виконання, на відміну до складання все це вниз в двійковий. Це насправді не означає нічого про те, як конкретні, ми повинні бути. Ми як і раніше повинні бути точними, і не забули коми, і переконайтеся, що у вас є знак долара, тощо. Гарне питання. МАРІЯ ZLATKOVA: Так. Так порядково, а на відміну від C з файлами, ми повинні зробити все фінал перш, ніж ми насправді можемо запустити його. Це головна відмінність. Але, знову ж, ми не можемо дійсно менш специфічні. Так масиви в PHP представляють насправді наказав карту. Так масиви асоційованих значень клавішах. Два способи оголосити Масив, на основі цього синтаксису, ми можемо бути більш явним кажучи у нас є масив і у нас є цей key1, який відображається це значення1, ключ2, який відображає значення2. Або ми можемо просто створити масив який містить сам значення і потім клавіші розуміти в дорозі. Будь-які питання з цього приводу? Аудиторія: що б ключі бути у другому прикладі? 0, 1, 2, 3? МАРІЯ ZLATKOVA: Наприклад, це просто ключі в це не обов'язково зробити різницю. Вони просто визначити, як ви можете використовувати значення всередині нього. Так що, якщо у нас був Еогеасп петля в PHP, що б дозволяють нам пройти через всі значення, ми можемо пройти через всі значення, навіть якщо б ми мали чи не визначили певний ключ в сайту попередня синтаксис. Таким чином, навіть з такого роду масиву, ми могли б ще є цикл по кожному елементу який проходить через кожен значень в ключі масиву. Так синтаксисі Еогеасп цикл, ми починаємо з масивом. Ця змінна $ обр наша поточна масив що ми визначили в попередньому слайді як значення, які буквально йде через кожне із значень, не зважаючи на погоду у нас був ключ чи ні. І тоді ми можемо зробити щось з значення всередині цикл по кожному елементу. Отже, ще раз, якби ми мали масив ось так от created-- тому у нас є ключ Foo і вартості бар, ключ Baz і вартість qux-- ми можемо мати цикл по кожному елементу, що проходить через масив визначенні ключа а потім зробити щось з ключем, і / або значення. Але ми не завжди обов'язково повинні мати Еогеасп петлі, що проходить через масив як ключовий карті до вартості. Ми можемо піти через Масив цикл по кожному елементу як значення. Ханна Блумберг: І я думаю, , Метою яких було на ваше запитання, то, що неявна індекс? АУДИТОРІЯ: Свого роду. МАРІЯ ZLATKOVA: Ой. Ханна Блумберг: Так, так. Так в основному, якщо ви не вкажете ключ, він буде 01. МАРІЯ ZLATKOVA: Так. Так само, як з C, це нуль індексується, якщо ви не вкажете ключ. АУДИТОРІЯ: Вибачте. Не могли б ви спробуйте говорити трохи голосніше? У мене трохи Біда слуху все. МАРІЯ ZLATKOVA: Мені так шкода. Так, звичайно. Так що ви хочете мені перейти на цей раз? Або this-- АУДИТОРІЯ: Так на попередній slide-- якщо ви могли б просто повернутися протягом однієї секунди. МАРІЯ ZLATKOVA: Звичайно, шкода. АУДИТОРІЯ: Таким чином, другий Масив тут не здається, мають значення для ключа, різновид [? причинно-наслідковий зв'язок. ?] МАРІЯ ZLATKOVA: Вірно, вірно. АУДИТОРІЯ: Так як це працює коли ви говорите, що це все або нічого. Для мене, який виглядає як а [? Foo?] Вже. МАРІЯ ZLATKOVA: Так, так. Отже, ще раз, це замовити карту в цьому сенсі що слід розуміти, Наприклад, покажчики Тут можна розуміти як 0, 1, 2, 3. Знову ж таки, це ті, що мають Індекси наш еквівалент мати ключі, відображені на цінностей. Так що, якщо наш ключ був 0-- вибачте. Ханна Блумберг: Ні, там крейда тут. Це насправді дуже приємно. МАРІЯ ZLATKOVA: Це здорово. ДОБРЕ. Отже, ще раз, $ обр 0 буде ключ до значення 1. 0 буде ключем до значення 1. АУДИТОРІЯ: Я перепрошую. Це невидима. Ханна Блумберг: Гаразд, по фігу. Мел була погана ідея. Беру свої слова назад. Ви можете думати про ключах а 0 відображається в значення 1. МАРІЯ ZLATKOVA: Так. Таким чином, це 0, це 1, 2, 3. Вони можуть бути ваші ключі. Ви можете думати про них as-- так. Таким чином, замість того, ключах, вони ніби як зрозумів, індекси, починаючи з 0. Мел не допоможе. Так. АУДИТОРІЯ: Для цикл по кожному елементу, якби ми хотіли, щоб переглянути, як цінність, це було б просто автоматично індекс 0? МАРІЯ ZLATKOVA: Так. Було б пройти кожне з значень. АУДИТОРІЯ: [нерозбірливо], як 0 або, що б просто зробити 0? МАРІЯ ZLATKOVA: Ви б сказати, як знак долара, а потім деякі ім'я змінної, значення. АУДИТОРІЯ: [нерозбірливо]. МАРІЯ ZLATKOVA: Вибачте? АУДИТОРІЯ: На жаль, я просто намагаюся згадати. Як би ви, що якщо ви можете зробити це автоматично індексації просто 0 з? МАРІЯ ZLATKOVA: Так як би ви зробити це якщо у вас не було конкретних імен ключів? АУДИТОРІЯ: Так. МАРІЯ ZLATKOVA: Ви б просто define-- просто сказати собі, як якийсь ім'я. Так що у вашому psets, ви, хлопці, могли б пам'ятайте Еогеасп $ ряд як $ рядків, ми створили цей OURSELF $ ряд кажучи ми хочемо, щоб пройти через ряд, як $ рядів. Навіть якщо у нас не було це явно $ ряди визначені, ми могли б просто піти і кажуть, що це може бути наш ключ, і просто пройти через кожне з значень. АУДИТОРІЯ: Так значення нової змінної ми створюємо для зберігання [нерозбірливо]? МАРІЯ ZLATKOVA: Так що це не по суті це нова змінна. Це змінна, яка відноситься до всередині масиву до кожного з них. Ханна Блумберг: Це нова змінна ім'я. МАРІЯ ZLATKOVA: Так, це нова змінна ім'я, але це не inherently-- так. Це просто нова змінна що ви можете зробити це. Отже, як ми зробили $ Гребти, як $ рядків, рядків був нову змінну ім'я, що ми може створити в нашій цикл по кожному елементу. Це не повинен існувати до до цього. АУДИТОРІЯ: Не могли б ви пройти через Логіка для кожного, використовуючи приклад є? МАРІЯ ZLATKOVA: Ммм. Ой, вибачте. Ось приклад. Звичайно. Таким чином, для кожного array-- так це означає, що піти на цей масив як ключ value--, що відбувається пройти через цей масив і спочатку піти і отримати Foo, то Ключ Foo і бар значення. І тоді на другому ітерація цикл, він збирається пройти і прийняти ключ Баз і значення QUX. І тоді ви можете зробити щось з будь-який з них або обидва з них. АУДИТОРІЯ: Так ідея мають ключові точки до значення, що ви в кінцевому підсумку доступу? МАРІЯ ZLATKOVA: Яка ідея мати ключ, який вказує на цінуєте? Це просто ще один конвенція, інший спосіб йти по масиву і бути в змозі отримати доступ до або ключ або значення або обидва, і використовувати їх. АУДИТОРІЯ: Яка роль для замовити що Еогеасп працює в? Так що, якщо ми повинні були додати елементи в масив пізніше, буде тих, бути першими називається в масиві Еогеасп, або це буде пізніше? МАРІЯ ZLATKOVA: Так що порядок, що Еогеасп цикл проходить через масив в? Він проходить через перший елемент останнього елемента, до останнього доданого елемента. Якщо ви додаєте елементи надалі, вони будуть бути accessed-- перші елементи будуть Доступ в якості першого Елементи масиву, і тоді ви б пройти через кожен з елементи якось в ordered-- НЕ наказав, але так, що вони були введені в масиві. АУДИТОРІЯ: Так нові елементи додані пізніше? Так вони added-- вони буду останні, в [? ітерації. ?] МАРІЯ ZLATKOVA: Нові елементи can-- в основному, коли нові елементи додаються, вони додаються в кінець масиву? АУДИТОРІЯ: Так. МАРІЯ ZLATKOVA: Я вірю в це. Так. А потім з цикл по кожному елементу, після того як ви додали нові елементи і ви йдете через них, нові елементи будуть бути accessed-- нового елемента, якщо це доданий останнім, він буде доступний в минулому. АУДИТОРІЯ: Чи можете ви просто дати приклад про щось, що б [нерозбірливо] з чимось зі значенням як [нерозбірливо] або вартості, подобається, як ви відформатувати це? МАРІЯ ZLATKOVA: Звичайно. Чи можу я дати приклад того, що ми хотіли б зробити з цінність? Так що ви, хлопці, можете бути знайомі з є те, що ми пішли через масив і в основному друкуються кожен з елементів, наприклад, як частина впорядкований список або щось, що. Чи має це сенс або ми хочемо, метою яких АУДИТОРІЯ: Чи можемо ми роздрукувати ці значення поза межами дому? МАРІЯ ZLATKOVA: Так, ми могли б друкувати і то в основному тому, що значення $ в що конкретне значення, ми б друк значення всередині нього. Так що, якщо ми були в нашій першій ітерації з нього, і ми надруковані $ значення, ми б друкувати бар. АУДИТОРІЯ: Є також для петлі в PHP або просто Foreach петлі? МАРІЯ ZLATKOVA: Там це Також для петель в PHP. І їх логіка в основному так само, як те, що ви були раніше. АУДИТОРІЯ: Таким чином, її значення дорівнює нулю. МАРІЯ ZLATKOVA: Це як те ж саме. Так. АУДИТОРІЯ: Я просто хочу, щоб запитати. Тому, коли ви оголошуєте Масив, вам не потрібно сказати, що розмір він збирається бути, що означає, що ви можете просто додати і забрати елементи [нерозбірливо]. МАРІЯ ZLATKOVA: Так. Так. Точно. Коли ми оголошуємо масив, ми не потрібно говорити, що розмір це, таким чином, ми можемо просто додати елементи на це пізніше. Ще питання? Так чого PHP і HTML разом, те, що ми seen-- добре, Наприклад, у цьому прикладі, ми маємо HTML-форма, яка має поле введення. І поле введення просто назва і то він має кнопку Надіслати. І при натисканні Відправити Кнопка, на наш hello.php файлу, оскільки метод для форми отримати, ми можемо отримати доступ все, що знаходиться на ім'я цим отримати глобальну змінну, яка is-- синтаксис це $ _GET. І тоді ми можемо отримати доступ незалежно від користувальницький введення в цій формі для імені вказавши ім'я цього поля. Будь-які інші питання або будь питання з цього конкретному прикладі? АУДИТОРІЯ: Де PHP? МАРІЯ ZLATKOVA: Тут. Так що це наш відкриваючого тега для PHP. АУДИТОРІЯ: Так, правильно. МАРІЯ ZLATKOVA: Так. Ханна Блумберг? В: = це скорочення для цього є PHP і просто луна. АУДИТОРІЯ: Ой. МАРІЯ ZLATKOVA: Так, вибачте. Я повинен був зробити, що ясно. Ханна Блумберг: Друк. МАРІЯ ZLATKOVA: Це просто функція що дозволяє надрукувати що-небудь. Велике питання. Так going-- так. АУДИТОРІЯ: Чи буде достатньо трохи ручного кодування РНР і HTML на вікторині 1? МАРІЯ ZLATKOVA: Там може бути неабияку кількість інтерпретації РНР і HTML, не обов'язково як величезна кількість кодування, якщо ви, можливо, доведеться написати цикл по кожному елементу, хоча, для петлі. Будь-який з петель, які ми покрив тут чесна гра. І це в основному це. Ханна Блумберг: Я був би готовий. Таким же чином, що ми просили вас написати купу функцій C на вікторині 0, Я би готовий зробити те ж саме в PHP і JavaScript. МАРІЯ ZLATKOVA: Так. Ханна Блумберг: Я б сказав, little-- як ми не зробить вас написати величезний HTML- сторінка просто, тому що це трохи втомлює, але ви, можливо, частини. Це абсолютно справедлива гра. Як невеликий HTML сторінки, повністю справедливим. АУДИТОРІЯ: ОК. Як щодо в JavaScript, а? Ханна Блумберг: Так. Справедлива гра в JavaScript. МАРІЯ ZLATKOVA: Так. Це повністю справедлива гра. Ханна Блумберг: Ми отримаємо до того, що в подібних 10 хвилин. МАРІЯ ZLATKOVA: SQL, знову ж таки, Мова Структурованих Запитів. Це в основному дозволяє управляти даними в реляційної бази даних управління Система. Це просто означає, в основному що у нас є десь зберігати деякі дані, які ми могли б використовувати в сайті або в іншому вигляді. І тоді у нас є запити, щоб отримати Інформація з нашої бази даних, або вставити в них інформацію. Багато спільного ones-- UPDATE, INSERT, SELECT і DELETE. Таким чином, для UPDATE, це синтаксис для відновлення даних у базі даних. Оновлення цієї таблиці під назвою Таблиця кажучи SET, ми можемо встановити деякі значення у всіх Рядки в рівній чогось ще. Таким чином, ми можемо також вказати деякі конкретні Записи, які ми хочемо змінити і що може бути за допомогою ДЕ. І ми можемо вказати, що ми хочемо, щоб змінити кілька рядків, де будинок для, якби ми мали таблицю студентів і всі студенти мали будинок, так що ми тільки змінити деякі значення де будинок дорівнює кур'єром, наприклад. Для INSERT, ми можемо вставити певні значення в таблицю. Так INSERT INTO таблиці, а потім значення, а потім в дужках ми вказуємо який цінує ви хочете вставити. Так INSERT в таблицю, col1 і col2, значення val1 і val2. Так що це вставляє в основному новий рядок в таблиця, що містить значення 1 і 2 під колонами 1 і 2. А потім ми збираємося перейти на швидкий приклад того, як це виглядає як у нашій базі даних небагато. Але цей останній запит, який я думаю, що ми збираємося перейти, ВИБІР, він просто дозволяє нам для вибору даних з таблиці щоб, можливо, використовувати його згодом. І те, як ми робимо це, ми просто зберігати його в який-небудь змінної. І тоді, можливо, ми можемо використовувати його знову. Так ВИБІР зірка означає вибрати все. Це просто скорочення для вибору всіх. ВІД стіл, де ми шукаємо для деяких конкретних умов, так де колонка дорівнює -то, наприклад. Якщо ми просто хотіли, щоб вибрати все з-за столу, це просто вибирає всі стовпці і всі рядки таблиці. І тоді видалити з таблиці ДЕ колонка дорівнює те, це тільки видаляє деякі гребти з нашого столу де у нас є деякі специфічні умови. У цьому випадку умови є колонки дорівнює дещо. Так що просто невеликий приклад цього. Якщо у нас є ця столик прямо тут, і ми вставте його в таблицю, ці значення, що б вставити новий рядок. І якби ми мали автоматичне прирощення, це буде просто збільшувати наш ID від 0 до 1 до 2. Якщо ми вибрали все зі студентів, його просто повертає всі поля і всі рядки. Де більше року ніж або дорівнює 2 016, що тільки повернеться Ханна і я. І потім, якщо ми тільки що вибрали рік ID і рік від студентів де будинок Кабот Будинок, який буде, знову ж, повернутися Ханна і я. Тоді, якщо ми видалили зі студентів де ім'я одно Роба, що б видалити весь рядок. І потім, якщо ми встановлюємо Ім'я, UPDATE студенти SET ім'я дорівнює Daven ДЕ будинок дорівнює Кабот Будинок, який збирається йти до ці рядки, а потім змінити ім'я. А потім кілька типів даних SQL є СИМВОЛ, VARCHAR, INT і FLOAT. Це чесна гра. Я б знову і переконайтеся, що ви знаєте, і мати їх на шпаргалці, що кожен з цих персонажів були використані для те, що Ви використовували їх на ваших psets, і переконайтеся, що ви знайомі і комфортно з того, щоб вибрати з різних типів даних у вашому PSET. Так. АУДИТОРІЯ: Що було те, що таблиця зберігається? Так, де ця таблиця зберігається? МАРІЯ ZLATKOVA: Ну, Прямо зараз, це не зберігається. У всякому разі, де ця таблиця зберігається? Але він може бути збережений в базі даних SQL в. АУДИТОРІЯ: А де це база даних SQL? У комп'ютері, в Інтернеті де сервер? МАРІЯ ZLATKOVA: Це може бути кількість різних речей. Ханна Блумберг: Ми сполучена з SQL таблиці в основному з PhpMyAdmin. Таким чином, ми могли б запитати сервер зберігати їх для нас. Ми могли б зберігати їх на власному комп'ютері. МАРІЯ ZLATKOVA: Це залежить тільки від як ви хочете, щоб зробити це для себе. Але ми були зберігання їм, як уже згадувалося Ханна, на PhpMyAdmin, який знаходиться в мережі. А потім, як ми використовуємо PHP і SQL, ми зберігаємо його в якійсь змінної те, що ми запитуються. Так що, якщо ми Виділити всі історії де user_id дорівнює ідентифікатор сесії, що б вибрати всі рядки для конкретної людини, яка реєструється в з історії стіл і сортувати їх у ряди. Крута річ, щоб знати, що функції запиту CS50 в захищає від тегів SQL-ін'єкції. Це просто означає, що він робить, що вхід, який введено правильно і що людина, яка вступає введення не намагається ввести деякі шкідливі код або видалити наші таблиці або видалити всі всередині нашій базі. Швидкий огляд Модель Модель View Controller, це просто спосіб організації і думати про коді. Це знову ж таки, дизайн парадигма. Те, що це означає, що ми can-- і це гарна практика для розділення різних частин наш код і те, що вони контролювати в цих трьох парадигм. Таким чином, наш погляд найбільш часто наші шаблони, наша розмітка, шлях що ми встановлюємо, як наш код виглядає. Це в основному наші CSS-файли і так що ми визначили дизайн нашого коду, в основному. Наш контролер в основному те, що ми робили з PHP файлів. Отже, ще раз, працюючи з Інформація, яку ми маємо і визначення, як, що інформація використовується, і передає цю інформацію або на представленні чи моделлю. І модель, так, що ми були використовуєте була наша база, так де наша інформація зберігатися таким чином, він має десь жити, і будь-який з код, який відноситься до способу що ми отримуємо цю інформацію або так, що ми оновлюємо цю інформацію. Таким чином, в моделі MVC, HTTP запити направляються на веб-сервері. Потім контролер інтерпретує запит від користувача і потім перевіряє дані, введені користувачем. Це необов'язково, що ми маємо контролер спілкуватися з моделлю, так щось як нашій базі або деякі інші функціональні що передає інформацію. І, нарешті, контролер передає інформацію на погляд таким чином, що він може бути надавали і що він може стають видимими будь-якій особі доступ до веб-сторінці. Які-небудь питання? Високий. Отже, ще раз, модель, його функція, знову ж, це постійного зберігання інформації, управління та організації даних. І те, що ми бачили до сих далеко база даних MySQL і різні файли даних, які можуть використовувати. Подивитися, презентація інформації користувач, користувальницький інтерфейс, або користувальницький інтерфейс. А прикладом є HTML. І тоді ми могли б мати мінімальний PHP. Таким чином, цикл, який перебирає в порівнянні з даними, які роздруковуються є частиною зору, як протилежність до контролера. І тоді багато хто з наших PHP файлів потрапляють в категорію контролера. Це просто обробляє запити користувачів і отримує інформацію від моделі. Стрибки у документ Модель об'єкта, це тільки ставиться до того, HTML документи організовані. І вони організовані у вигляді дерева Структура, що має ієрархію. Так що, якщо у нас є доступ до [нерозбірливо] уявлення документа, ми можемо працювати з документом, як ми маніпулювати об'єктами в принципі. І зробити це трохи ясніше, коли у нас є багато наших різні мітки відповісти до різних маршрутах в нашому дереві. І тоді для цього прикладу, ми є стартовий вузол документа. Отже, ми маємо, наш HTML-вузол що розпадається на голові та тілі. Керівник має назву, а потім Назва містить привіт, світ. І наше тіло містить тільки привіт, світ, а також. Так які-небудь питання по кожній із речі, які ми розглянули досі? А якщо ні, Ханна взяти на себе з JavaScript. Високий. Ханна Блумберг: ОК, круто. Якщо щось трапиться з PHP або HTML, або будь-який матеріал, Марія, покритої, ми завжди можемо призупинити. Ми робимо краще на знову, настільки дивовижним. І тільки, щоб повернутися дуже швидко, щоб це, якщо ви подивіться на кожен Іспит минулого року, це приходить either-- тут деякі HTML, щоб цю діаграму. Або ось ця схема, зробити деякі HTML, так виразно, що практика. І то це один гарантований Питання, яке ви можете отримати права. Прохолодний. Отже, давайте поговоримо про JavaScript і як це трохи відрізняється від мов, таких як PHP і З двох мовах, які ми бачили заздалегідь. Так номер один, це слабо типізований. Це, як PHP, але на відміну від С. Це інтерпретована мова. Знову ж, це, як PHP, на відміну від С і це збирається, щоб дозволити нам use-- його працює дуже добре з веб-сторінок. Це відбувається, щоб дозволити нам маніпулювати зміст і як він виглядає і що він робить. Ми збираємося, щоб побачити трохи Ajax. Це дозволяє нам спілкуватися асинхронно з різних серверів й одержати інформацію. І це те, що дійсно відокремлює від JavaScript PHP і C є те, що на стороні клієнта. Обидва PHP і С як правило, на стороні сервера. Здебільшого, і майже повністю, що ми бачили, принаймні, в цей клас, JavaScript діє на стороні клієнта, а це означає, що браузер насправді відповідальність за її запуску. А це означає, що ми не потрібно взаємодіяти з сервером. Так це означає, що може бути набагато швидше, бо це насправді просто це хром, це Safari, Firefox, це, все, що вам використовувати насправді працює ваш JavaScript. АУДИТОРІЯ: Що означає асинхронний? Ханна Блумберг: Ах, що зовсім асинхронно на увазі? Велике питання. Асинхронний означає: добре, утримання в яких ми використовуємо це, добре, ми створюють веб-сторінки і ми повинні отримати деяку інформацію. Так на прикладі колажів, деякі відомості, які ми могли б це заголовки статей. Тепер ми could-- один варіант , Щоб робити це синхронно і це означає, що давайте зупинити, йди статтю, отримати статтю спину, а потім надавати, але це було б дуже повільно. Це було б поганий досвід користувача тому що ви просто сидіти там чекає щось відповісти. Асинхронний означає, що ми Ми продовжуємо йти про нашому бізнесі, надання сторінку, і ми надішлемо запит від Це начебто збирається відбудеться у фоновому режимі. Я думаю, що ми використовуємо приклад в Лекція виклику Роба і кажуть, агов, ви можете шукати це на для мене, і повернутися до мене, на відміну від просто мене очікування на телефоні. Так асинхронно означає, що відбувається на тлі далеко від нас паралельно. Велике питання. Ще щось? Відмінно. Ми стрибати набагато більше в асинхронні запити з Ajax. АУДИТОРІЯ: Чи JavaScript-- де робить він впав з Model-View-Controller? Ханна Блумберг: Велике питання. Де падіння JavaScript з Model-View-Controller? Гектометри Я думаю, це може fall-- таким чином, ми зазвичай не хотів хлюпати його в тому, що парадигма, але я думаю, я б сказала, Отже, JavaScript насправді відбувається, щоб дозволити нам зібрати дані, інтерпретувати дані, насправді значущі речі з даними. Таким чином, це дуже управління, як. Але це також збирається дозволити нам відображати речі і друку речі. Таким чином, це дуже вид-як. Так. Так що це ніби як PHP в де він може бути вид обох. Гарне питання. Ще щось? Гаразд, дивним. Рухаємося далі. Отже, давайте подивимося приклад про те, як ми можемо використовувати JavaScript в одному з наших веб-програм. Так що я вважаю, що це index.html з купою HTML. І що я хочу, щоб ти зосередитися на це сценарій тегів. І це говорить, добре, я хочу, щоб запустити деякі JavaScript, і ось де вона живе. Він живе в hello.js. І дуже схоже CSS, ми могли б помістити JavaScript в HTML. Чому може ми хочемо, щоб відокремити його? Так. АУДИТОРІЯ: Легше переписати? Ханна Блумберг: Так. Це простіше у використанні по різні веб-сторінки. Це тримає речі чистіше. Це просто хороша практика. Високий. Гарна відповідь. Так добре, так що це буде щоб бути нашим index.html. А потім сюди це наша крихітний файл JavaScript. І все це говорить, оповіщення Привіт, світ. Так що ж відбувається, коли Ця сторінка renders-- так що якщо ви йдете в який-небудь веб-сайті це is-- все, що відбудеться це скаже, добре, я збирається запустити цей код JavaScript. І це JavaScript код просто говорить оповіщення Привіт, світ. Так що я збираюся отримати це доброзичливий трохи спливаюче. Прохолодний? Це ніби як наш перший JavaScript програма, наш Привіт, світ. Давайте подивимося трохи більше про те, що синтаксис JavaScript виглядає. І спеціально, давайте порівняємо його С і PHP, які ми бачили раніше. У JavaScript, ми будемо мати вар, ім'я змінної, а потім його фактичне значення. І ми не вказуємо тип, тільки як в PHP, але дуже на відміну від С. Так, наприклад, якщо ми хочемо для зберігання значення 50, в C, ми повинні були б сказати, агов, С, я хочу ціле, Я буду називати його я і його значення 50. У PHP, це трохи легше. Ми говоримо, гей, я хочу змінну називається я і його значення 50. Дуже точно так само, в JavaScript, ми привітатися, я хочу змінна називається I, його значення 50. Кожен наступний раз, коли я використовувати я, мені не потрібно, щоб написати вар. Це просто я з цього моменту. Таким же чином, в С, де коли ми говоримо, INT I, ми просто використовуємо I. Прохолодний? Добре. Переходячи до петель, На щастя, ці майже шукати exactly-- я думаю, що вони точно так само, як те, що петлі буде виглядати в щось на зразок C, де ваш цикл матиме три parts-- ініціалізацію, стан і оновлення. Деякий час циклу, він виглядає точно такий же. Ми просто дати йому стан. І в той час як петлі робити, знову, точно так само. Ми даємо цей стан. Скажімо, я хотів, щоб ітерації over-- Я хотів зробити щось в п'ять разів. У C, ми могли б написати для ініціалізації я дорівнює 0. я менше, ніж 5, я ++. Тільки різниця в JavaScript, замість того щоб сказати INT я дорівнює 0, ми говоримо, вар я дорівнює 0. Гарний. От і вся різниця. Будь-які питання по кожній із, що? Так. АУДИТОРІЯ: Таким чином, в PHP, це те ж саме що, за винятком, але, як змінної? Чи в тому, що в прикладі вар? Ханна Блумберг: Так. Таким чином, в PHP, це буде бути знак долара. Так це буде $ я рівних 0, $ я менше 5, $ я ++. Велике питання. Тепер давайте поговоримо про оголошення функцій. У C, коли ми оголошений Функція, ми дали йому ім'я і ми дали йому деякі параметри. І на початку, ми писали тип. У JavaScript, всі ми потрібно зробити, це написати функція ключове слово, говорить, гей, JavaScript, Я збираюся визначити функцію. У цьому випадку він має назву суму. І він приймає два аргументи х та у. Зверніть увагу, що ми не дбаємо про типи х та у. І так само, як C, у нас є це повернення ключове слово, так що ми можемо зробити щось як зворотний х та у. А тепер, коли ми написали цей перший Функція, ми можемо використовувати суму в будь-якому місці. І це абсолютно нормально. Один дійсно здорово річ про JavaScript, що дуже на відміну від C що функції можуть розглядатися як цінності. Таким чином, ми можемо зробити щось на зразок тут де я припускаю, що я це up-- покриття Я прикрили Вар суму пройшов проби, і ми тільки що сказали, Функція ху дорівнює зворотний х плюс у. Тобто те, що можна було б назвати анонімна функція. Це функція без імені. У той час як це говорить функції сума, бла, бла, бла, це просто сказати функції. Але тепер, навіть якщо у мене є це анонімна функція, що функція насправді просто значення. Ми можемо розглядати його як цінності. Таким чином, ми можемо зберегти його у змінній те ж саме як ми могли б зберігати 50 у змінній. Таким чином, ми можемо сказати, гаразд, я хочу Мінлива, це називається сума, і ця функція. Таким чином, ці дві речі насправді збирається зробити ту ж саму річ, але синтаксис трохи відрізняється і вид веселій ноті. Так. АУДИТОРІЯ: Таким чином, можна назвати функція, яка була анонімною, кажучи, сума кронштейни 2, 5? Ханна Блумберг: Так. Ви можете назвати це анонімний Функція таким же чином. Ви б суму (2, 5);. Це було б абсолютно нормально. Якщо я не зробив вар сума дорівнює Функція, якщо я просто видалив this-- я знаю, що це на моїй руці, але прикидатися, що я видалив this-- то що функція як би просто пішов. Ви ніколи не можете використовувати його знову, тому що Ви не мають для нього ім'я. Важко щось ставляться до Ви не знаєте, як назвати. Гарне питання. Так. АУДИТОРІЯ: Чи можете ви посилатися суму в інші місця зі значенням х плюс у? Ханна Блумберг: Чи можете ви посилання сума в інших місцях зі значенням х плюс у? Я не зовсім впевнений, що ви маєте на увазі. АУДИТОРІЯ: Так що ваші повз напів-анонімно Функція сума дорівнює цього анонімна функція, так сума Тепер змінна, що ви can-- Ханна Блумберг: Вірно. Так сума змінна, але це actually-- так сума є змінна, значення функції. Таким чином, це функція, яка є своєрідною дивна річ, щоб обернути навколо голови так як ми грали з С, і ви не можете зробити це на мові C. Але тепер ми можемо назвати підсумовувати Точно так само ми могли б назвати суму тут. АУДИТОРІЯ: ОК. Ханна Блумберг: Так. Гарне питання. Так. АУДИТОРІЯ: Таким чином, ми не використовувати прототипи в PHP або JavaScript? Ханна Блумберг: Ні, ми не потрібно використовувати прототипи, особливо в JavaScript. Таким чином, одна погана практика, що, що я хочу сказати, що ви не повинні робити вам не потрібно писати УАГ I = 50. Ви могли б просто почати робити I = 50. І буде просто зробити я глобальна змінна. Це дуже погана практика, щоб ніколи не кажи в явній вар я, але це щось можна зробити. Перекладач не збирається кричати на вас. JavaScript є досить, як, Ви можете робити те, що ви хочете. Ой, вибачте. Там два. У помаранчевих штанах. Ідіть вперед. АУДИТОРІЯ: Ні, ти перший. АУДИТОРІЯ: Ні, я просто говорю У мене не було мою руку вгору. ДОБРЕ. Так що, якщо ви були зателефонувати що перший раз, тепер підвести, ми називаємо його так само, як, х, у, як кожен раз? Ханна Блумберг: Так. Таким чином, ці два істотно зробити те ж саме. АУДИТОРІЯ: І чому перевага використання одного або іншого? Ханна Блумберг: Ні перевагою використання одного або іншого. Я просто хотів показати вам два різні частини синтаксису. Багато разів, коли анонімний Функції мають мету , Якщо аргумент на інший функція повинна бути функцією. І ми побачимо, що в тільки другий з Ajax. Так що, якщо не має ніякого сенсу, зберігати його в задній частині голови. Ось де анонімний Функція може бути корисна тому що це не дійсно варто даючи йому ім'я, так як ми просто збираєтеся використовувати його один раз. Так. АУДИТОРІЯ: Якщо х і у зміна пізніше від того, буде підвести змінити, а? Ханна Блумберг: Якщо х і у зміна пізніше, будуть підведені змінити, а? Так що це насправді я думаю, те, що це, знову ж, це просто відчуває себе дуже різні з C. Це не цінність. Це не 5. Це просто сама функція. Тому, як тільки ви дасте йому параметри, то ви насправді обчислити значення. МАРІЯ ZLATKOVA: А потім Ви можете викликати функцію і використовувати його, щоб отримати якусь цінність. Ханна Блумберг: Вірно. Точно. Так. АУДИТОРІЯ: Так що, якщо ви тільки що зберігати його в змінної, як вар х дорівнює сумі двох values-- Ханна Блумберг: Так. Таким чином, ви можете просто зробити УАГ суму дорівнює сумі двох значень. Так. Будь-які інші питання? Так. АУДИТОРІЯ: Але, що плутають суму і суму? Як, якщо ви телефонуєте вашої змінної суму, ви могли б назвати функцію суму? Ханна Блумберг: Мм. Мм. Якщо ви зробили щось як, сума дорівнює сума 2, 5? АУДИТОРІЯ: Так. Ханна Блумберг: Я вважаю, що буде перезаписувати значення суми. Так ще один цікавий річ JavaScript є те, що одна змінна може приймати на купу різних типів. Погана практика. Ви не повинні робити щось як те, що ви тільки що сказали. Але в C, якщо я встановлено одно цілому числу, ми знаємо, що це ніколи не стане рядком. Це не той випадок в JavaScript. Так, гарне питання. Ще щось? Добре. Роблячи все вчасно. Ведення збирається. Добре. Якщо ми подивимося на масив в JavaScript, ось Невеликий приклад з масиву рядків. І масиви можуть рости динамічно. Вони не мають фіксований розмір так само, як що вони роблять на C. Ми можемо отримати доступ до елементи за допомогою всього квадратних дужках. Це виглядає як PHP і багато як С, де ми можемо сказати, в цьому випадку, якби я хотів слово JavaScript, я б у обр квадратні дужки з 0, 1, 2. І потім, якщо ви пам'ятаєте, в C, коли ми хотів, щоб отримати довжину масиву, це було дійсно дратує. Але в JavaScript, дуже легко. Все, що ми робимо, .length. Дає йому довжини. Це воно. АУДИТОРІЯ: Це просто. Ханна Блумберг: Так, робить Ваше життя набагато простіше. ОК, що не object-- там. Об'єкти в JavaScript дотик багато, як в C структур і асоціативні масиви в PHP. Так що ми бачили Багато це JSON, який виступає за JavaScript Object Notation. І це в основному спосіб структурування наші дані. Отже, давайте подивимося приклад, ймовірно, найпростіший. Так ось приклад об'єкта що зберігає клас, CS50. І коли я кажу клас, я маю на увазі, звичайно, НЕ like-- да, курс, CS50. І ви побачите, що все в об'єкті міститиметься у фігурні дужки. І ми починаємо асоціювати імена полів або ключі з різними значеннями. Таким чином, ви можете почати бачити, як цей вид відчуває, як асоціативний масив в PHP. Отже, ми збираємося, щоб зв'язати поле або ім'я ключа, звичайно, з рядком, CS50. Ми збираємося, щоб мати інструктора. Ми збираємося, щоб мати ТФ. Ми збираємося, щоб мати ряд psets і ми збираємося, щоб записали. І один крута річ, щоб відзначити, все ці речі мають різні типи, і це абсолютно нормально. Це прекрасно для об'єкта, насправді, це, ймовірно, очікується об'єкта щоб мати комбінацію рядків і номери і Булеві масиви і і все інше, ви могли б хочете, щоб всередині об'єкта. І зверніть увагу, що вони збираються, щоб бути імена або ключі, а потім ми просто встановити його рівним з невеликим товстої кишки. АУДИТОРІЯ: Що саме це означає JSON? Ханна Блумберг: Що саме робить JSON на увазі? JSON просто стоїть для JavaScript Object Notation. Це просто спосіб форматування. Так. Це спосіб форматування наші дані. У C, це структур. У PHP, це асоціативні масиви. У JavaScript, у нас є об'єкти. АУДИТОРІЯ: Так CS50 це об'єкт? Ханна Блумберг: CS50 є об'єкт в даному випадку. Тепер, як ми насправді доступ ці поля або змінювати ці поля. Наприклад, припустимо, що ми вирішили, що Ви хотіли один менше PSET в цьому семестрі. Замість дев'яти, ми просто доведеться восьмій. Як би ми змінити це? О, неправильно. Є два способи, якими ми можемо зробити це. Номер один з точкою позначення і номер два це з квадратним позначення кронштейна. Так, наприклад, якщо я хотів, щоб змінити або доступ поле psets в нашій CS50 об'єкта, що я буду робити це CS50.psets, таким чином, назва об'єкта точки ім'я поля або ключа. Дуже точно так само, це саме те, еквівалентно, щоб зробити CS50, а потім в квадратні дужки, psets. Прохолодний? Так. АУДИТОРІЯ: Так JSON технічно JavaScript раніше, навіть якщо в psets ми відокремити його [нерозбірливо]? Ханна Блумберг: Звичайно. Таким чином, питання, є JavaScript і JSON еквівалентно? Так JSON є позначення, в основному так, що ми виписуємо об'єкт з JavaScript. Так що вони не зовсім те ж саме. Я б сказав, JavaScript, є об'єкти в JavaScript. JSON приймає ці об'єкти і друкує їх і відображає їх або зберігає їх у хороший спосіб. Так JSON НЕ програмування мову так, що JavaScript є. Це просто позначення наші об'єкти в JavaScript. Так. АУДИТОРІЯ: Так що ж [Нерозбірливо] завершити? Ханна Блумберг: Звичайно. Так це насправді нічого не робить. Це просто спосіб отримати доступ. Так що давайте говорити, що ми хотіли змінити кількість проблемних наборів з дев'яти до восьми. Що ми робимо це щось зробити як CS50.psets = 8;. Так, велике питання. Це просто, щоб показати вам синтаксис. Насправді не роблять нічого корисного. Які-небудь питання? Рухаємося далі. Отже, давайте подивимося на швидкий приклад того, як JavaScript працює, тому що я сказав вам це робить всі ці речі і класні дозволяє модифікувати веб-сторінок. Давайте реально побачити його в дії. Так що, наприклад, цей HTML-файл. І що я хочу, щоб ви зосередити увагу на це Цей конкретний тег, який являє собою кнопку, з ідентифікатором search_button. Це просто на сторінці. Так що тепер давайте подивимося, що ми можемо насправді. Ну, припустимо, коли Ви натисніть на цю кнопку, ми хочемо, щоб зробити alert-- Ви натиснули кнопку. Давайте подивимося, як ми можемо це зробити. Так window.onload-- це не те, що ви бачили в класі, тому не потрібно знати це для вікторини. Але це в основному говорить, добре, виклик ця функція, коли вікно навантаження. Так що це просто свого роду код установки. Не хвилюйтеся так багато про це. Те, що я хочу, щоб ви зосередити увагу на це тут. Ми говоримо вар searchButton дорівнює document.getElementById search_button. Отже, як ви вже могли здогадатися, що це робить це говорить, ОК, треба знайти елемент з ID search_button. І тепер у нас є, що поточна елемент, і я збирається зберігати його в Мінлива searchButton. І тепер ми можете використовувати цей елемент і змінити його, або отримати доступ до його цінності, такі речі, як, що. Ми можемо насправді почати взаємодіяти з веб-сторінки. Так от я кажу, добре, тепер у мене є що кнопка, коли вона натиснута, називають цю анонімну функцію. Так що це, де анонімний функції стають корисними. І що функція робити? Ну, це просто називає це попередження функція, і він каже, Ви натиснули кнопку Search. Так що ж станеться, якщо я йду туди, де Цей HTML-живе, і я натисніть кнопку, Я отримаю повідомлення, трохи фантазії що говорить, що ви натиснули кнопку. Таким чином, речі, щоб зосередитися на here-- document.getElementById отримує HTML зокрема елемент із заданим ідентифікатором. А тепер ми можемо встановити те, що має статися, коли що конкретний елемент кнопки. АУДИТОРІЯ: Ми повинні покласти все, що в? Ханна Блумберг: Вибачте? АУДИТОРІЯ: Чи є у нас фізично код все це? Ханна Блумберг: Чи є у нас в фізично код все це? Так. Хіба це не вид дратує? Це багато коду. АУДИТОРІЯ: Ви могли імпортувати щось. Ханна Блумберг: Вірно. Ми могли б використовувати щось. І в particular-- о, це каже, що мені треба вчити розділ. Зокрема, давайте використовувати бібліотеку JQuery, бо насправді довго і дійсно дратує і я хочу, щоб мати можливість спростити і зробити його коротше і легше писати. Так JQuery є бібліотека JavaScript. Так JavaScript є програмування мова; JQuery є бібліотека. І це робить купу речей легше. Це робить зміни і відбувається через HTML документ набагато простіше. Це робить обробку події простіше. Це робить анімацію простіше і це робить Ajax простіше. Отже, давайте стрибати в двох ці речі прямо зараз. Вибачте. Перш, ніж ми робимо, деякі основний синтаксис. Це те, що більшість викликів бібліотека JQuery виглядати. Ми використовуємо цю долара sign-- немає знак підключення до PHP, просто inconvenient-- ім'я Селектор, точка, а потім дію. Отже, давайте подивимося деякі конкретні приклади цього. Таким чином, це насправді те ж саме код з слайда подій. Так що це довго, потворна річ стає це набагато приємніше, менше річ. Так давайте спробуємо розірвати це вниз. Це говорить, добре, jQuery-- цей долар sign-- JQuery, знайти мені у вікно. Так от селектор. При завантаженні, викликати цю функцію. Так от все всередині. ДОБРЕ. Все йде нормально? Добре. Тепер, JQuery, знайти мене в що з ID search_button. І що вона натиснута, викликати цю функцію. А потім цієї функції точно так само. Просто зробити трохи оповіщення, Ви натиснули кнопку Search. Так що це дійсно приємно. Це дійсно конденсується і спрощує наш код. Як я знаю, що це ID search_button а не як клас search_button? АУДИТОРІЯ: хештегом? Ханна Блумберг: Так. Цей символ хеш, це просто, як CSS. Так що пам'ятайте, з CSS, коли ми хотів, щоб вибрати щось по ID, ми використовували знак #. І коли ми хотіли, щоб вибрати то по класу, ми використовуємо точку. Відмінно. Мати сенс? Так JQuery, як передбачається, просто зробити наше життя простіше. Так. АУДИТОРІЯ: Так що я трохи заплутався, про те, як анонімна функція працює. Є назвати вам цю Anonymouse функція, функція? Як це називається? Ханна Блумберг: Звичайно. Так функція просто ключове слово, каже, що я збираюся визначити функцію. АУДИТОРІЯ: О, добре. Ханна Блумберг: ОК? І тоді ми проходимо його в якості Аргумент, метою яких давайте це внутрішня одно-- функції миші. Так що, так, так що функції, це анонімна функція, стає фактичним аргументом. Так що пам'ятайте, в JavaScript, ми може відноситися до функції в якості значень. АУДИТОРІЯ: О, добре. Ханна Блумберг: Так. Мені подобається, що "ой". Ніцца. Інші питання? Час? МАРІЯ ZLATKOVA: Добре. Добре. Ханна Блумберг: Високий. Деякі швидко корисно JQuery. Я не збираюся йти через всіх з них. Ці слайди будуть до онлайн трохи пізніше, так що ви можете перевірити це з трохи пізніше. Але в принципі, загальне малюнок має, де ми говоримо, ОК, гей, JQuery, ось мій Селектор, а потім ось дію. І ви можете робити речі, як доступ в значення формі, доступ до деяких HTML, контроль, що відбувається, коли користувач відправляє форму, подібні речі. Так. АУДИТОРІЯ: Таким чином, в іспит, ми будемо повинні знати досить багато із документація JQuery. Тому, враховуючи, що ми копіювати / вставити JQuery Документація в нашу шпаргалку, де ж лінія, проведена? Як, скільки нам потрібно знати? Ханна Блумберг: Велике питання. Питання в тому, по суті, враховуючи, що ви не може отримати доступ до документації JQuery під час тесту, скільки ви повинні знати? Ми не очікуємо, щоб ви прийшли з якоюсь випадковою функції що можна було б очікувати вас Google. Речі, які є чесна гра, я б сказати тільки вид загального синтаксису, можливість вибору по ID і по class-- так само, як CSS. А потім фактичні функції сам собі, ми, швидше за все, вам сказати. Так. АУДИТОРІЯ: Отже, коли ви виберіть по класу означатиме точку. Ханна Блумберг: Так, саме так. Добре. При виборі по класу, це буде бути точка, а не знак фунта. Так. АУДИТОРІЯ: Хотіли б Ви перейти різниці між вибором по ID і класу? Ханна Блумберг: Звичайно. Різниця між вибору ID і вибору по класу. Так, як сказав Марії трохи раніше, може бути тільки один елемент HTML- із заданою ID, у той час як клас, це дозволяє нам групувати купу з різних елементів разом, так що речі, пов'язані, але не зовсім те ж саме. Чи означає це, відповісти на питання? Високий. Так. АУДИТОРІЯ: Що робити, якщо у вас є кілька речі, які в одному класі? Ханна Блумберг: Що відбувається якщо у вас є кілька речей, які те ж саме клас? Так, наприклад, якщо ми тільки за допомогою чистого JavaScript, ми хотіли б зробити щось на зразок document.getElementsByClass. А потім, що це насправді це повертає масив елементів. І ви повинні або перебрати їх або знайти, який ви хочете. Це не дасть Ви один елемент. Це дасть вам масив елементів. Велике питання. Ще щось? Високий. Так що я думаю, якщо ви знайомі з будь JQuery ви бачили в PSET, ви повинні бути добре йти. Питання? О ні. Мені дійсно потрібно вчити. Розслабтеся. Все буде в порядку. Я туди потрапити. Давайте поговоримо про Ajax. Так Аякс буде a-- добре, давайте почнемо з того, що це коштує. Це абревіатура. Це коштує для асинхронних JavaScript і XML-. І XML є в основному буде [Нерозбірливо] з типом наших даних. Але ми насправді не використовується XML. Замість цього, ми просто використовуємо JSON. Тому в основному, це деякі data-- асинхронний, JavaScript і дані, в цьому випадку, JSON. І наша мета, як ми вже згадували трохи раніше, є, щоб мати можливість зробити Запит, що запит вже робити його справу в тло, але як і раніше робити все, що ми маємо намір робити. А потім, коли ця інформація готові, то ми будемо включати його. Отже, давайте подивимося, що це насправді виглядає. І це, ви повинні бути трохи знайомі від pset8, той, який ви щойно виповнилося в. Так от дійсний JQuery функція, ми могли б хочете знати about-- цього знака долара. Так він говорить функція JQuery, .getJSON. І те, що ця функція робить його приймає URL і деякі parameters-- так що я думаю, у разі з pset8, як це було, URL-адресу було articles.php і Параметри було йти = деякий поштовий індекс. І це говорить, добре, зробіть запит на цю адресу із заданими параметрами. І, що просто трапляється. Коли він закінчує, це або збирається для успішного завершення або це буде провал. Так що це еквівалент виклику Роб і попросити його зробити щось. А потім, коли він передзвонює, він або хочу сказати, я зробив або я не зміг. Таким чином, у разі, коли ви знаходитесь зроблено, ви говорите, гаразд, я зробив. І тоді ви називаєте цю функцію. У цьому випадку, це буде функція, яка приймає інформацію. Той, який ми, як правило, піклуються про те, дані, дані, які ми насправді були повернуті в результаті виклику .getJSON. І ви можете зробити щось з ним. Таким чином, у разі pset8, ми презентували його у вигляді списку. Відмова буде функція що називається, якщо клопотання не з якої причини. І у випадку pset8, ми просто console.log його. Будь-які питання з цього приводу? Так. АУДИТОРІЯ: Чи можемо ми просто використовувати функцію тета замість функції, textStatus, jqHXR. Ханна Блумберг: Звичайно. Так що так, я думаю, що в PSET, ми тільки що бачили функцію даних. Так що це просто the-- так, добре. Це те, що ми бачили в PSET. Це абсолютно нормально. Такими є лише, якщо ви хочете витягнути більше інформації, це те, що ви могли б отримати від .getJSON. Гарне питання. Ще щось? Так. АУДИТОРІЯ: Так .getJSON є Аякс? Ханна Блумберг: ОК. Так що це свого роду хитрість. Це функція JQuery, який дозволяє Ви зробити асинхронних викликів. І ці асинхронні виклики, це те, що ми на увазі як Ajax. Так. Це зайняло у мене дуже багато часу, щоб розтягнути, коли я був студентом. АУДИТОРІЯ: Чи можете ви сказати, що знову? Ханна Блумберг: Так. Чи можу я сказати, що ще раз? Ця функція .getJSON, це функція JQuery. І це збирається зробити асинхронний виклик. І ці асинхронні виклики, ми посилався на ті, як Ajax. Будь-які інші питання? У нас є всього пара хвилин залишилося. І Марія збирається укутати безпеки а потім ми збираємося щоб бути майже закінчили. МАРІЯ ZLATKOVA: Високий, добре. Так що це просто is-- взяти пару секунд, щоб переглянути цей. І це не те, що дійсно здорово. А може хтось скажіть мені, чому? Що відбувається в Foo і може міг потенційно призвести до щось погане, і що, що називається? Так. АУДИТОРІЯ: Якщо аргумент, що це пройшов у більш ніж 12 символів, це може переповнити. МАРІЯ ZLATKOVA: Вірно. Ідеальний. Як це називається? Ви щойно згадали його. АУДИТОРІЯ: Переповнення буфера. МАРІЯ ZLATKOVA: Так, переповнення буфера. Так що це те, що ми називають переповненням буфера. І ми бачимо, що всередині Foo, ми визначили нашу буфера, с, з розміром від 12. Тим не менш, в основному, ми не перевірити в будь-якому випадку на всіх Чи так, що argv1-- був другим аргументом. Ми не перевіряємо, чи є Розмір доцільно. Так що, якщо ми мали особливо зловмисник які покласти в деяких аргументу, який був більше, ніж 12, і потім, можливо, за межі, які Аргумент, були деякі виконуваний код що він намагався зробити щось погане з цим; то це, що б сталося, буде превалювати повернення адреса функції Foo, викликаючи функцію, коли повернення виконати цей код. І тоді погані речі може статися. Чи має це сенс для всіх? І як ми можемо захистити проти цього? Будь-які пропозиції? В основному, всередині потенційно Foo, як ми можемо перевірити, щоб переконатися, що це не може статися? АУДИТОРІЯ: Якщо розмір 12 буде перевищений, Ви б виділити додаткову пам'ять? МАРІЯ ZLATKOVA: Пропозиція це, виділити додаткова пам'ять розміром перевищений. Насправді, ми можемо зробити щось набагато простіше, ніж, що, як добре. Ми можемо просто отримати довжину рядка аргументу, який вводиться, перевірити, якщо це менш або рівним 12-- що те, що ми хочемо його бути, тому що ми не хочемо, це вихід за межі нашого буфера. І потім, якщо це не так, ми може працювати з аргументом. І потім, якщо це відбудеться, ми насправді хочемо щоб Yello потенційно у користувача. Але це, як ми б цього робити. Так. АУДИТОРІЯ: Могли б ви пояснити тетсру дуже швидко? МАРІЯ ZLATKOVA: О, вибачте. Так. Тетсру приймає всі is-- вибачте, ОК. Тетсру приймає все, що в барі, все, що передається на Foo як аргумент командного рядка. Таким чином, це займе argv1. Argv1 називається бар тут. Таким чином, це займе бар і це буде скопіювати його в с. АУДИТОРІЯ: ОК. МАРІЯ ZLATKOVA: І він збирається copy-- третій аргумент просто відноситься про те, скільки це буде скопіювати в с. АУДИТОРІЯ: Ах. Так що це свого копіювання все це потім. МАРІЯ ZLATKOVA: Так, це копіювання всього цього. Так. По-перше, ми впевнені, бар не дорівнює нулю, тому що це покажчик. Тоді ми отримаємо довжину рядка бар. Ми впевнені, що це менше або дорівнює 12. А потім, тому що ми переконалися, ми можемо насправді тетсру і бути впевнені, що це нормально. Які-небудь питання? Відмінно. У мене є два істинним чи хибним питання. Може хто-небудь сказати мені відразу якщо вони істинними чи хибні? Так, це брехня. Точно. Обидва з них є помилковими. Таким чином, використання одного пароля ніколи не дійсно хороша ідея тому що, якщо хтось знає пароль, вони можуть просто доступ до всіх інших свої рахунки. А потім ікони нічого не робити для забезпечення безпеки. Ми повинні, як правило, шукають HTTPS замість HTTP і URL. І деякі інші види атак, які ми вже згадували, що Девід згадується в лекції, атаки SQL-ін'єкції. Ми вже бачили, що, якщо ми don't-- Функція CS50 запит гарантує, що SQL атаки ін'єкції не може статися. Але якщо ми не використовували CS50, цитата, кінець цитати "в запиті," ми повинні були б переконатися, що користувальницький введення насправді не деякі SQL запит, який буде викликати все Наші столи для впав або щось погане, щоб станеться з нашою базою даних. Угон сесії є ще один тип атаки що відбувається, коли деякі погано людина використовує сесії деяких жертви ID для доступу до реєстраційної інформації. Таким чином, дуже тривіальний приклад, який як якщо у нас є комп'ютер в громадському, то погана людина входить в, а потім вони мають печиво, збережені. І печиво не зміниться сесії. Тоді ми жертвою перейти в а потім зайти на сайт. Печиво не змінити протягом певного сеансу. І тоді жертва реєструє в сайт, а потім йде. І тоді людина, яка сходить може як і раніше використовувати їх ідентифікатор сеансу щоб отримати доступ до інформації. Так ось один з прикладів як це могло трапитися. І тоді я б не надто турбуватися про конкретну код або що-небудь так що може привести до цього, але мають якоюсь ідеєю, що в змінні, що беруть участь в цьому є. А потім маніпулювати заголовок дані ще один тип атаки що має Девід говорив о. І це якраз відноситься до те, що може статися, коли відповідь, то HTTP відповідь всередині нашого заголовка не продезінфікують належним чином. І будь-який з fields-- наприклад, якщо хтось переписує один із заголовку Значення містити щось більше, ніж що вони повинні contain-- і фактично містить, наприклад, 200 Код ОК-статус, то вони потенційно може зробити шкідливий речі, коли вони не повинні. Але я не хвилюйтеся б занадто багато про конкретну код які можуть призвести до цього, тільки вид розуміння на високому рівні такі речі. Я думаю, що це все що у нас є, щоб покрити. Дивовижний. Хто-небудь є які-небудь питання по будь з речей, які ми розповідали? Так. АУДИТОРІЯ: Так один вид більш матеріально питання. Чи є зміст основному зосереджені на речі після вікторини 1? МАРІЯ ZLATKOVA: Так Питання в тому, є вміст зосереджена головним чином на речі після вікторини 1? Таким чином, акцент робиться на після Тест 1, за винятком що ми повинні зосередитися на речах, в pset5 і багато структур даних що ми розглянули. І ми не можемо сказати, що ми може ігнорувати що-небудь до , Тому що це опирається на нього, а також. Так зосередитися на тому, що, плюс pset5 матеріал як у тому числі пов'язані списки, стеки, Черги, і всі що Ханна підійшла. Ханна Блумберг: Вірно. Так, ми пішли по всій C речі на самому початку дуже швидко. Але переконайтеся, що для розгляду цього. Поверніться назад і подивитися вікторини 0 відгук. Ще пара логістичні зазначає, просто в той час як у нас є Вашу увагу. Ми матимемо робочі години і в понеділок, і у вівторок ввечері. Вони збираються, щоб бути в MD 119. Це все на сайті, так що якщо ви не чуєте його, ні турбот. МАРІЯ ZLATKOVA: з 8:30 до 11:00. Ханна Блумберг: Так, з 8:30 до 11:00. Ми будемо там. Ми будемо там, щоб відповісти на питання. Це досить холод і веселощі. Ви, хлопці, можете задати будь-які питання що у вас на вікторину 1. І вікторини на 1 Середа, так що удачі. Якщо у вас є які-небудь питання, можливо, прийти поговорити з нами тут один на один. Прохолодний. Дуже дякую. МАРІЯ ZLATKOVA: спасибі, хлопці. АУДИТОРІЯ: Ура. [Оплески]