[Музика, яка грає] DAVID Маланій: Це CS 50, і це початок тижня дев'ять. І те, що ми думали, що ми робимо сьогодні, це не тільки закрити главу про минулого тижня Матеріал, де ми зосередилися на сервері сторона веб-програмування з PHP і SQL, деякі бази даних матеріал. Ми будемо говорити про щось на зразок сьогодні безпека, а потім Перехід до програмування на стороні клієнта мова відома як JavaScript. Але по-перше, деякі викуп. Ви можете згадати, що на Середа, я відправився написати сайт, який узяв на вході користувача за допомогою HTML-форм, що потім зберігаються що імена користувача введення, телефон номера, і телефон носіїв в базі даних. А потім у мене було небагато команду рядок сценарію написав в PHP , Який повинен був повторювати більше рядків в базі даних і відправити текстові повідомлення. Незважаючи на кілька, декілька спроб, ми не змусили це працювати до кінця. Так я провів цього весь тиждень працює на цей код, щоб отримати нас мимо точки де ми зупинилися, в результаті чого всі Я отримав до кінця середи було це текст повідомлення від Марго, як я боровся, потім текстове повідомлення від іншого однокласник, Ви повинні цю Давида. Слідом за цим, дивно обнадіює. Продовжував іти, дуже відрадно. Я майже не отримав його до then-- і це примітка, ми закінчили в середу. І тоді насправді, можливо, мій улюблений, За мить, це сталося в. Чорт пряма трансляція. Отже, сьогодні ми це виправити за швидким подивитися на те, що я зробив з тих пір. Так весь цей код доступний онлайн з минулого тижня, тижні вісім, Вихідний код. І ви побачите, що я пройшов через, і я насправді очистити речі небагато. Я представив пару з другом особливості базі даних SQL. Наприклад, замість того, просто зробити носій вар гольца як я думаю, що я зробив на льоту минулого тижня. Я замість визначив його як те, що називається перерахування. І деякі з вас, можливо, бачили це як ми досліджували С. Enum насправді Особливістю С, де ви можете перерахувати цілу купу констант і призначити їх автоматичне значення, як один, два, три, чотири без жорстких кодовими номерами. Так SQL підтримує те ж саме, в якому, якщо у вас є поле бази даних, тільки ви хочу взяти на одній з кінцевих значення, ви можете буквально вказати його як я зробив там протягом чотирьох популярні мобільників американські оператори. Так що я зробив це. І я зробив ряд змін, як добре, найголовніше з яких був Віртуальний роботи, бо відкликання, що ця програма спиралася на яких як правило, називають електронній пошті, щоб SMS шлюз, який є просто химерний спосіб сказати, що Verizon, і AT & T, і інші люди підтримують сервер, в результаті чого, якщо він отримує по електронній пошті, він перетворює його в SMS і посилає текст Повідомлення на інший телефон. Так що, якщо я зробив це правильно, ось новий і покращений вигляд що збирається поговорити з Новий і поліпшений код, який Ви можете грати з онлайн. І це буде, сподіваюся, зробити мій телефон сигнал в хвилину. Отже, спочатку я збираюся ввести в моє ім'я. По-друге, я не збираюся зробити це цього разу. Я збираюся зробити Огляньте елемент. І це всього лише дрібниця, так що я не створити годин після виробництва працювати, як я зробив минулого разу. Там зараз знаходиться мій номер телефону. Я вибрати Verizon. І ось, давайте звернемося на цій мікрофоном тут, і мета ця в моєму телефоні тут. Я збираюся натисніть Реєстрація, які, будемо сподіватися, покласти його в базу даних. Тепер я збираюся поїхати в Програма командного рядка, які Нагадаємо називався точка слеш Текст і схрестіть пальці. Тут ми йдемо. [PHONE вм'ятини] [Оплески] DAVID Маланій: Так веселіше, ніж this-- це цікаво, звичайно, якби я потрапити в нього. Але це більш цікаво, я думав, якщо ми створений один з тих моментів в кіно де якось насправді погано, що сталося у світі, і, як і всі АНБ Народної телефонів почати пищати за допомогою текстових повідомлень готовність їх до цього факту. Так я думав, що ми спробуємо відтворити те ж саме тут, чого не використовуючи базу даних, Я замість заздалегідь написав програму, яка виглядає наступним чином. Це index.php-- і я поклав цей код на сайті як well-- що, мабуть просто надає form.php, використовуючи стиль парадигму MVC, що ми говорити про більш докладно в проблемній набору сім. Це форма досить проста. Це збирається представити Файл називається here.php поштою. І це, мабуть збирається просити для імені, і номер телефону, а потім за допомогою так званих Виберіть меню, це збираюся дати вам щонайменше чотири популярні мобільників американські оператори, а потім дозволяють ефективно взяти участь, натиснувши тут. І тут, між тим, збирається запозичувати частина коду з минулого разу. І якщо ви просто побіжно це, Ви побачите, що є ціла купа перевірки помилок. Але краса в кінці, що ми не пишемо в базу даних сьогодні. Ми тримаємо його простим і просто відправці, ми сподіваємося, Текст повідомлення через функції I написав протягом останніх декількох днів викликом Текст, який знаходиться у функції. PHP, що знову-таки доступні в Інтернеті. Так що, якщо ви хочете взяти участь в цьому. Ми не збираємося бути зберігання нічого. Перейти до наступного адресою тут в режимі реального часу. Не пишіть тільки поки, але давайте зможемо ми мати один з цих фільмів моменти, коли телефон кожного починає пищати, сподіваюся, просто один раз в цьому році, на відміну від 2011 де це пішло жахливо криво. І як тільки ви йдете за цією адресою, Ви повинні побачити супер просту форму що якщо у вас є ім'я, стільниковий телефон число, і перевізник телефон, що збігається зі списком там, підіть вперед і заповнити форму. Але не вдарив уявити тільки поки. Форма буде виглядати ось так. Йдемо далі і ввести в Ваше ім'я, номер телефону. Oop, хтось збирається на випередження. Це нормально. ОК, все це заповнив форму. Це повинно працювати на телефон теж, якщо хочете. Гаразд, на старт, увага, марш. Хіт Тут. Що? Ні. Клянуся Богом, я тестував це кілька разів сьогодні. Ви отримали це? [Вставляючи ГОЛОСУ] DAVID Маланій: ОК, помилка користувача, можливо. Це два. Він працював для двох з кілька сотень, три, чотири. Добре, що це добре. Чотири з п'яти для Правильність, як о. Так що ж сталося? Так, імовірно, не бачачи ваш екрани, тому, можливо, це вже з помилкою? Це, напевно, що ми були просто намагається зробити занадто багато підключень на поштовий сервер Гарвардського все в один раз з того ж IP-адреси. Я просто припускаю, що, так як я не зробив є розкіш тестування цей код з деякими 300 людей заздалегідь але зараз розумію, що що принаймні повинна отримали роботу на цей раз. Гаразд, так чому ж все це більш доречні в тому, що відбувається? Ну по-перше, швидко Пару оголошень. Так що, якщо ви хочете приєднатися Чанг, і Нік, і інші на обід в п'ятницю, зробити RSVP в звичайне URL там. Якщо ви думаєте про концентруючись або робити вторинний в CS, будь ти на другому курсі, або першокурсник, або навіть молодшого або старшого в цій точці і ще можна вичавити в курсах, розуміють, що в інженерній школі збирає для вільного Бен і Морозиво та поради Джеррі в середу незабаром після класу в 4:00 вечора в будівлі CS на Максвелла Дворкін. Якщо це занадто швидко на екрані, просто піти в cs50.harvard.edu для посилання на заході Facebook де можна побачити більш детальну інформацію. Між тим, я думав, що виправити ще одна річ, я потрапив в халепу в середу. Виявляється, що ID-Марко на Facebook, не було три роки. Це було чотири роки. Виявляється, він був більше тест рахунки, ніж я пам'ятаю. Але те, що це було схоже на можливість зробити, це підтягнути URL зразок цього. Ось і виходить, що Facebook має API, інтерфейс прикладного програмування, яка являє собою механізм, в якому ви може запитувати дані програмно на Facebook і отримати назад машину читабельною, що не веб-сторінки але тільки простий текст, щось називається JavaScript Object Notation. І справді, якщо я відвідую цей URL, і збільшити, за замовчуванням, це Марк публічно доступна інформація. І цікава деталь от тільки, що його ID Дійсно, номер чотири, який я зрозумів, як тільки я зробив це. Ви можете зробити це самостійно, якщо ви знаєте, Ваше ім'я користувача Facebook, якщо у вас є. Просто введіть його верхню є. І все це не є приватним. Я просто роблю це навіть в режимі інкогніто. Так що я навіть не увійшли в систему. І ви бачите, що я мабуть, був номер користувача 6454 на Facebook, що не занадто погано в ці дні. Так чи інакше, ви також побачите Додаткова інформація є. І корисний аспект того, що це ти може написати власну програму, що якось об'єднує дані, як це Ваше додаток. Ви можете розширити можливості користувачів в увійти в свій веб-сайт, не використовуючи свої власні користувальницькі логін і пароль, але, може бути, їх Facebook Увійти і отримати інформацію навіть про своїх друзів, якщо вони схвалити такі, або аналогічний. Так, зверніть увагу, що CS50, занадто, є деякі власні API ,, один для даних каталогу Звичайно, деякі для меню обійми в їдальні зали, все будівлі та місця на території кампуса нас є API для а що ви можете запросити же і отримати назад текстова інформація, ви можете інтегрувати в PHP, або JavaScript, або навіть, хоча рідше, З заснована остаточний проект. Дійсно вперед у фінал Проект кілька етапів. Ви отримали від нас листа на днях. Зрозумійте, що пропозиції це через майбутній понеділок. Це не обов'язково обов'язковим, але ви дійсно повинні отримати свої навчальні хлопці твердження, перш ніж зробити будь-які зміни після цього. І тоді вперед є Ряд інших етапів. Таким чином, щоб дражнити тебе, з деякими можливостями, у нас є купа ці відтінок лампочки. І деякі з вас, хлопці, тепер є деякі з них у вашій кімнаті в гуртожитку, а також. І вони теж мають API. Так згадую ті двійкові цибулини тижні назад, що Ден Бредлі і Ансель Дафф створив для нас. Вони використовували програмний інтерфейс для це лампочка, яка на даний момент підключений до електрики а потім за допомогою бездротового підключений до невеликої речі називається міст сюди, як маленький маршрутизатор пропрієтарних в цьому конкретному пристрої. Але, виявляється, якщо я знаю, як відправити HTTP повідомлення, як ми всі тепер робити, Я можу відправити повідомлення, як це це лампочка, щоб включити його або вимкнути або зробити будь-яку кількість інші операції по ньому. Зверніть увагу, що це не отримати, це не пост. Там ще один називається пут. Там насправді кілька інших таких дієслів. Але зверніть увагу, що є шлях там, слеш API, слеш нового розробника, слеш світло, слеш один, слеш стан. Це, мабуть просто Шлях, що компанія, Philips, вирішив ви повинні вдарити з проханням HTTP якщо ви хочете, щоб змінити стан колби з використанням HTTP 1.1. Тоді зверніть увагу на порожню рядок. А потім, нарешті, те, що виглядає як вид на масив якийсь, Це знову-таки називатиметься JavaScript Object Notation, або Джейсон. І те, що ви бачите тут є те, що Є три пари ключ-значення. Один ключ називається на. І його значення мабуть, буде вірно. Яскравість становить 128, який це свого роду междунар. А потім час переходу нулю, що, мабуть як довго він збирається прийняти, щоб перетворити цю річ на. Так що зараз це лампочка не горить. Але якби я робити те, this-- нехай мені піти в невеликий шпаргалку що Ден створена в advance-- і я збираюся йти вперед і скопіювати наступна команда. Curl, як деякі з вас можливо, почерпнуті на CS50 Обговорити це утиліта, як Telnet такий що ви можете моделювати HTTP запити, спеціально ставить. Я можу відправити ці дані, що конкретно ми просто побачив хвилину назад спеціально за наступною адресою тут. А потім Curl збирається звертатися всі необхідні заголовки і розбір там з. Так що все що мені потрібно зробити, це скопіювати це в вікно терміналу, а потім натисніть Ввод. І лампочка триває. І це все відбувається через мій комп'ютер по бездротовій мережі якось вниз до мосту, який Потім розмова на цю лампочку. Я можу зробити щось ще. Я можу зробити цю річ перейти червоний наприклад. Я можу, наприклад, зробити ця річ піти зелений. Я можу зробити його синім. І зауважте, в кожному з них випадки, все, що я міняю є так звана значення відтінку для насправді дати йому трохи кольору. Отже, дозвольте мені вставити цей, як добре. Тепер він блакитний. І ви можете зробити навіть любитель речі where-- підемо на зелений. І я міг би зробити це з Звичайно, з моєю коду. Але навіть сам API підтримує різні операції як це, які будуть тепер турбувати нам протягом наступних 30 секунд. Так ось один смак того, що ви могли б зробити з API, це один участю лампочки. Зверніть увагу, що CS50 має кілька пари Google Glass, якби ти хотіли торкнутися щось разом ці рядки, Arduino Unos, які є крихітні комп'ютери, по суті, на невеликій друкарській платі що ви можете підключити дроти та інші речі щоб і насправді контроль Ваш реальний світ середу. А ще є пара з нових іграшок, які у нас є. Це один буквально щойно прибув Днями поштою, Міо пов'язки. І я подумав, що це спосіб вам раді про проекти що ви могли б використати з це обладнання буде бути грати в цю короткий кліп що вони використовують, щоб дражнити людей що ми зараз живемо в майбутньому. [Музика, яка грає] DAVID Маланій: Так протягом декількох тижнів, ви теж може бути, що здорово в CS50 ярмарку. Ще один пристрій, що ми є купа, що ми радий борг для проектів називається контролер руху. Це невеликий пристрій USB підключенні до комп'ютера, дозволяє вам взаємодіяти з Ваш ноутбук, Mac або PC, начебто ви були, як Xbox Kinect і насправді зробити фізичні руху набагато як ми бачимо, в цьому бачення майбутнього. [Музика, яка грає] DAVID Маланій: Так що навіть якщо у вас є не знаю, як щось подібне могло бути винайдено або робота на апаратному рівні, незалежно від того ,. Навіть після того, як кілька місяців CS50, і розуміння програмування в більш загальному, і веб-програмування більш Недавно, а потім і API-інтерфейси, і HTTP, Ви будете мати доступ через програмні інтерфейси API, якщо вас хочу взяти один з них Пристрої насправді поговорити з ним і не доведеться турбуватися про Розташована основу реалізація Деталі, які повністю відповідно до цієї поняття верств абстракція, що ми бачив протягом семестру. Так само в минулі вихідні, бачив пару шматочків новин. Перейти спочатку перейдіть на семінарах, якщо вас хотілося б дізнатися щось більше на будь-яку кількість запитань. Дивіться URL там. І цей був відправлений мені Чангом, який ви знаєте, хто друку нашу армію слонів. І це був заголовок таким чином. Я в жаху від мого нового телевізора. Чому я боюся, щоб перетворити це річ, і ви б теж. Так що ми зараз в вказати в семестр, теж, де, навіть якщо у вас є найменшого розуміння про те, як працює веб, і HTTP, і безпеки, такі речі, як це повинні почати, кидаються в очі. Але також, ви зрозумієте, чи є ці речі чи ні реальні загрози. Так що я взяв кілька витягів з цієї статті тут. А історія така. Я зараз власник Новий Smart TV, яка обіцяє доставити потокове мультимедійний контент, ігри, додатки, соціальні медіа, та Інтернет перегляд, ой, і телебачення теж. Єдина проблема полягає в тому, що я зараз боюся його використовувати, вважає автор. Ви б теж, якщо ви прочитали 46 сторінка політика конфіденційності для телевізора. Кількість даних цієї річ збирає приголомшує. Він реєструє, де, коли, як, і як довго ви плануєте використовувати телевізор. Він встановлює відстеження печиво, як ми вже обговорювали, і маяки розроблений щоб визначити, коли у вас є розглядається зокрема вміст або конкретне повідомлення по електронній пошті якщо ви хочете, щоб перевірити електронну пошту на екрані телевізора. Він записує програми, ви використовувати, веб-сайти, які ви відвідуєте, і як ви взаємодієте з вмістом, робити все, що через ваш смарт-ТВ. Він також, моторошним yet-- це моя addition-- має вбудовану камеру з розпізнавання осіб. Мета полягає в тому, щоб забезпечити контроль жест для телевізора і дозволить вам увійти в персоналізовані рахунки, використовуючи ваше обличчя. На верху, образи зберігається на екрані телевізора, а не завантажено до корпоративного сервера. З іншого боку, інтернет- Підключення робить весь телевізор уразливі для хакерів, які продемонстрували здатність щоб отримати повний контроль над машиною. Більше занепокоєння, начебто це не було досить розумні, це мікрофон. Телевізор відрізняється голос Функція розпізнавання що дозволяє глядачам управляти екран за допомогою голосових команд. Але обслуговування поставляється з а зловісне попередження. Пам'ятайте, що якщо Ваші вимовлені слова відносяться особисті або іншої конфіденційної Інформація, що інформація буде серед даних, захоплених і передається третій особі. Є що? Не сказати, особистий або чутливої матеріал перед вашим телевізором. Так що це насправді по-справжньому. І важко не побачити, якщо вас перейти до Best Buy і т.п. для телевізорів в ці дні. Вони все розумні в деякому роді. І вони отримують розумніші і моторошним. І вони просто збір даних таким чином, що ми говорили про а потім завантажити його через HTTP або деякі інші протокол в якийсь сервер. Так що це було забавною статті в цій онлайн-сайт тут, які говорили про Зокрема помилка або помиляюся код що ми можемо насправді зв'язати в дискусії минулого тижня. Так цей заголовок був, як випливає, історія йде тут, Джош Breckman працював Компанія, яка приземлилася контракт розробити управління контентом Система, або CMS, як вони називаються, для досить великого сайті уряду. Велика частина проекту бере участь розробка системи управління контентом так що співробітники будуть можливість створювати і підтримувати постійно змінюється Зміст для свого сайту. Справи пішли дуже добре для через кілька днів після житиме. Але на шостий день, справи пішли не так добре. Весь зміст по Сайт повністю зник. І всі сторінки привів до дефолту, введіть контенту веб-сторінки. Упс. Джош був покликаний, щоб досліджувати і помітив що один особливо клопітно Зовнішній IP адреса був увійшов і видаляються всі Вміст у системі. IP-адреса не належить в якійсь зарубіжній хакерської зігнутою на знищення корисними Уряд інформація. Це рішення про googlebot.com, Власний веб-повзе павук Google ,. Упс. Після невеликого дослідження і дертися навколо, щоб знайти noncorrupt резервного копіювання, Джош знайшов проблему. Користувач скопіював і вставив деякий контент з одного сторінки на іншу, в тому числі Змінити гіперпосилання редагувати вміст сторінки. Як правило, це не буде Питання так зовнішнього користувача буде необхідно ввести ім'я та пароль, але система аутентифікації CMS, Увійти система, не враховувати складний взлом методи Google Паук. Упс. Як з'ясовується, Google Павук не використовувати печиво, а це значить, що він може легко обійти перевірку на реєструється на печива набір хибними. Він також не звернути увагу на JavaScript, який буде нормально підкажіть і перенаправляти користувачів які не ввійшли в систему. Вона проте слідувати кожен гіперпосилання на кожній сторінці він знаходить, в тому числі з Видалити сторінку в назві. Упс. Так що ж це означає в більш технічні, але досить доступні умови? Це просто означає, що протягом усього їхнього веб-сайті, вони мали URL, не в відміну від цього, що Ви могли б бачити в проблему встановити сім. Нагадаємо, в завдання встановити сім або знати проблеми встановіть сім що ви кинули виклик, серед іншого, продавати акції від імені користувачів. Але реалізації цього функцію по шляху з отримуєте через гіперпосилання у вашому користувач Інтерфейс, ймовірно, не найрозумніший ідея бо якщо ваш сайт якимось чином доступні або людиною хто натиснувши навколо або купити бот, як Google, або павук як вони називаються, що це просто сканування Інтернету, намагаючись індексу Веб в якості пошукової системи, вони могли дуже легко ударив через отримати цей вид URL. І це функціонально еквівалентно, в даному випадку, продаж всіх акцій Google. Тепер, чесно кажучи, це повністю ослиний, що CMS б JavaScript і печиво реалізувати свою систему входу і не робить, що на стороні сервера, а Ви, хлопці, і буде в Pset 7-- є login.php file-- завжди, завжди, завжди безпека повинна бути зроблено на стороні сервера, не на боці клієнта, тому що, як це Стаття передбачає і ви могли б себе см в якийсь момент, це тривіально для користувача, добре це чи погано, щоб просто вимкнути JavaScript не кажучи вже про печиво. Так що це ваша щоденна WTF. Там ще один, який це просто якась страшна, так що я буду говорити про це, якщо тільки як урок життя. Всякий раз, коли ви використовуєте додаток називається як Snapchat і т.п. що говорить ці фотографії тільки протягом п'ять секунд, десять секунд, або ще багато чого. Вони ефемерні Тобто абсолютно не так. Як немає ніякого способу, цифровий, для реалізації тій чи іншій формі відео, або зображення, або текстова обміну, таких що одержувач на іншому кінці не може якимось чином зберегти дані. У найбільш наївним чином, хто- може прийняти на свій телефон. І вони мають друге вікно 10 в той час як, дивлячись на деякі оснащенні просто взяти якийсь інший телефон і сфотографувати його, очевидно. Таким чином, ви можете зберегти щось в цифровому таким чином. Деякі з вас знають, як взяти скріншоти на вашому телефоні. Насправді, якщо ви не знаєте, це, зрозуміти, що, принаймні Snapchat, і я думаю, що інші додатки в ці дні, принаймні, сказати вам, якщо одержувач має насправді прийняті скріншот вашого образу. Але що ще гірше, це було snappening, як хтось придумав його недавно, де деякі 100000 знімки були звільнені в те, що називається торрент-файл на різних веб-сайтах, в кінцевому рахунку. І ці містили цілий букет особистих повідомлень і постів. Виявляється більшість з них доброякісні, так не то, що ви могли б очікувати. Але тому, що люди були використовувати веб-сайт третьої сторони, вхід з їх Snapchat ім'я користувача і пароль, а потім збереження всіх своїх знімків на цьому сайті третьої сторони. І це було те, що третя сторона сайт, який був зламаний, який просто мав на увазі когось зрозумів, як щоб отримати всі 100 000 плюс цих зображень в їх власному жорсткому диску для подальшого розподілу. Чесно кажучи, тут теж, це свого роду з ослиний, що Snapchat реалізована таким чином, що третя сторона може сортувати перехоплення дані і що він не прив'язаний до вашого власний додаток працює на телефоні. Але й тут, розуміють, що вони речі не повинні зловити вас зненацька, або, принаймні, повинно бути уроком життя тут. Якщо ви хотіли би технічним Деталі, піти в той URL є це в сьогоднішніх слайдів. Гаразд, будь-які питання по сьогоднішні уроки життя в CS? Поверніть, що від. Все, що завгодно? Все, що завгодно? У мене є багато людей, що зареєструвалися їх Snapchat або щось зараз. Гаразд, так SQL, Structured Query Language. Давайте обернути це. А також, навіть при тому, ми тільки подряпини Поверхня цього мову, ми дамо вам достатньо мови у вигляді Pset 7 так що ви можете вирішити деякі досить часто функціональність. Але розумію, що є пара речі, які ми не вимагають від вас, але вони збираються бути важливо прийти остаточні проекти і, звичайно, приходять робити фактична сайти з реальних користувачів це дизайнерське рішення. Виходить, що в база даних MySQL, ви є грона вибору, як типи даних для ваших колонок та інші речі, але ви також повинні Вибір так званого зберігання Двигун для всіх ваших даних, роду файлової системі, якщо ви знайомі, для всіх ваших даних. Який формат буде в кінцевому підсумку це зберігається в? І найпоширенішим, мабуть, був MyISAM і InnoDB, технічні терміни що ми будемо дбати про тільки до такої міри, що один має і не треба наступна особливість. Припустимо, що у вас є трохи гуртожитки холодильник. І припустимо, що ви і ваші сусід по кімнаті, хто поділяє цю холодильник, дійсно любив скажімо молока. І це, по суті, як історія була розказана мені шлях назад в той день, коли я взяв курс називається CS 161 Операційні системи, які Аналогічно розглядається темою. Отже, ви отримали цей холодильник. Ти з молока. І ви приходите додому, ваша сусідка-х ще в класі або щось, і ви вирішили, що я збираюся вийти і отримати трохи молока. Таким чином, ви закрити холодильник, блокування кімнати в гуртожитку, піти через вулицю в CVS або там, де і отримати в черзі, щоб купити трохи молока. Між тим, ваш сусід по кімнаті повернеться додому від класу, потрапляє в кімнаті гуртожитку, відкриває холодильник, також розуміє, ooph, ми з молока. Таким чином, він чи вона закривається холодильник, а потім відбувається щоб перейти на інший CVS, які, трапляється, в одному кварталі від інших CVS на площі, і отримує відповідно туди, щоб отримати трохи молока. Зараз, звичайно, кілька хвилин пізніше, ви обидва отримаєте назад, і найгірший з усіх можливих Результати трапилося. У вас обох молоко. І ви дійсно не як молоко, що багато. Так один з них є просто збирається псуватися в якийсь момент. Так що тепер у вас є надмірна кількість молока в холодильнику все тому, що, чому? [Нерозбірливо] DAVID Маланій: Так, ви не зробили якось спілкуватися один з одним що ви отримували молоко. Таким чином, в найпростіших способи в людському світі, як Ви могли б уникнути цього нерозумно Сценарій не відбувалося таких що ви тільки в кінцевому підсумку з одного. Текст їх, да ладно. Але як інакше? Після він зазначає. DAVID Маланій: пост це до відома. Будь-яка форма спілкування що говорить ваш сусід по кімнаті не йдуть в холодильник для молока. Я збираюся піти поповнити самостійно. Таким чином, ви якось потрібно для блокування цього ресурсу. Таким чином, ми можемо зробити this-- ми можемо вид зруйнувати історію і перетворитися в історії CS в результаті чого думати про це як раз як Змінна, яка зберігає якусь цінність. І прямо зараз, цінність молока дорівнює нулю, які ви не хочете, щоб ваші сусід по кімнаті, щоб оглянути цю змінну а потім прийняти рішення його чи себе залежно від стану цієї змінної якщо ви перебуваєте в процесі зміни стану цієї змінної. Так одним з напрямків SQL, що ми дати вам в Pset 7 специфікації це один тут. І ми не витрачаємо величезну Кількість часу говорити про це. Але, виявляється, якщо ви намагаєтеся купити деякий запас в CS50 фінансів що у вас вже є деякі акції, вам хочу бути в змозі зробити ряд речей миттєво разом. Ви хочете, щоб мати можливість ефективно, на високому рівні, перевірити все гаразд, якщо я хочу щоб купити більше акцій Free, дрібні акції, ми говорити в специфікації, Я хочу, щоб першої перевірки скільки акцій у мене є. І гадаю, що це п'ять. І припустимо, що я хочу, щоб купити більше 10, я в кінцевому підсумку хочу мати 15 акціями. Так що у мене два питання. Що держава змінної? Що стан підряд? Скільки акцій я можу собі мати? Тоді ви хочете, щоб йти вперед і оновлювати його. Так ось аналог молоко в тому, що ви перевірити рядок, а потім ви хочете оновити його тому що, якщо ви хочете купити 10 акцій, Ви не хочете, щоб змінити рядок 10, ви хочете змінити його на 5 плюс 10 або, звичайно, 15. Цей рядок коду гарантує, що ці два концептуальні ідеї відбудеться разом чи ні взагалі. Ніхто, в тому числі якийсь інший користувач хто увійшов в ту ж веб-сайті, може якось перервати перевірка рядка і оновлення рядка, вибрати і оновлення, якщо хочете. І синтаксис не супер очевидно, але це один рядок, довго це, гарантує, що ці дві операції перевірити змінну або перевірити рядок і оновити ряд трапитися атомно. О, тут ми йдемо знову. Текстове повідомлення на моєму телефоні. Так давайте зробимо це трохи більш конкретними. Припустимо, що ви не реалізації холодильник, і ви не реалізації Pset 7, але фактична банк, або ATM, Automated Teller Машина, в якому ви якимось чином хочу, щоб мати можливість для розширення можливостей користувачам передавати гроші з одного рахунку на інший. ОК, тримайся. Я збираюся відключити це зараз, спасибі. Тому ми хочемо, щоб перевести гроші з одного номера рахунка в іншого облікового запису число, зокрема, $ 100. Так що це свого роду довільне приклад, в якому ви, банкомат, можливо, захочете виконати два SQL запити, відняти з одного облікового запису, і додати в іншого облікового запису. Але ви хочете, щоб переконатися, що ці дві лінії і відбудеться або не на всіх. Ви щось не хочу отримання переривається. Ви не одні розумні поганий хлопець якось стояв у Банку Америки з двома банкоматів в передній з нього і якось роду набравши в команди, в той же час, сподіваюся, намагаючись утримати $ 200 замість $ 100 і тільки маючи $ 100 кредитується. Коротше кажучи, ви хочете, щоб це поводяться саме так, як ви очікуєте. І те, як ви робите це в SQL база даних Ви оберніть його в те, що називається угода. Буквально в SQL, ви можете зателефонувати CS50-х Функція запиту цитуючи кінець цитати початку Угода. Тоді ви можете виконати будь-яку кількість з подальших запитів SQL, але жоден з них не приймати впливає на базі до виклику запиту цитата кінець цитати скоїти, якщо ще раз, використовуючи PHP. І таким чином, ви можете бути впевнені, що навіть якщо у вас є 1000 користувачів все потрапивши бази даних водночас, SQL- обіцяю, що це два запиту буде реалізований один за іншим. Таким чином, ви не в кінцевому підсумку з надлишком молоко або неправильний розмір, в підсумку, грошей. Так що майте це на увазі, не стільки для Pset 7 але для остаточних проектів якщо ви насправді намагаються переміщувати дані за таблицями, як ви могли б тут. Але, мабуть, ще більш простий і більш Очевидно, щоб зрозуміти, з прикладу це один тут. А хтось по електронній пошті нам про це лише днями коли він побачив щось подібне в Інтернеті. Так, наскільки мені відомо, в контактному системи не схильні цій атаці. І я поняття не маю, якщо він навіть використовує база даних SQL під капотом. Але давайте використовувати його для заради обговорення. Ось екран, що Гарвардський люди, як правило, щоб побачити при вході в систему з Гарвардський ідентифікаційний номер та їх контактний. І гадаю, що штифт система були реалізовані в PHP і з MySQL бази даних, код, який хто- можливо, написані років тому може виглядати наступним чином. По-перше, оголосити Змінна називається ім'я користувача. І просто отримати, що з POST суперглобального. Тоді отримаєте ще одну змінну називається пароль і зробити те ж саме. А потім просто виконати це довго запит тут, виберіть зірка з користувачів, де Ім'я користувача дорівнює такий- і пароль дорівнює такій-то. Зверніть увагу, що кучеряве брекети я використовував тут просто маю на увазі, щоб PHP, йдуть вперед і замінити значення цих двох Змінні прямо там. Вони не обов'язково, але вони, як правило, щоб уникнути тонкі синтаксичні помилки. Так це виглядає повністю правильно на перший погляд. І це. Ви могли б реалізувати Система контактний таким чином. Але припустимо, що супер розумний і злий студент вхід це як свого пальця. Так я видалив кулю знаки тут, в макеті, і я насправді показав, те, що він або вона може бути набравши. І це трохи дивно. Але те, що вискакує в Вас на потенційно неспокій про вхід користувача, навіть якщо ви поняття не маєте, що Напад ін'єкції SQL означає. Чому це виглядає трохи підозріло? Що це? [Нерозбірливо] DAVID Маланій: або трохи підозрілим. Насправді, це ключове слово з SQL. Так що не обіцяє нічого хорошого. Справа в тому, що є всі ці одиничні лапки there-- насправді, один з найпростіших способи зламати деякі бази даних це, набравши в імені, як O'Reilly що має апостроф в нього тому що, якщо людина, яка написала код за лаштунками не брати до уваги, що може бути одинарні лапки в користувача вхід, і він чи вона використовує одинарні лапки в своєму коді, погані речі можуть трапитися. Насправді, що ще гірше, розглянути це питання. Якби це було знову код що хтось в Гарварді років тому написав для штифта Система, зверніть увагу, що це збирається отримати заміщених ім'я користувача і пароль Якщо користувач знову skroob як їх ім'я користувача а потім один, два, три, чотири, п'ять, цитата або цитата кінець цитати одного рівних процитувати один. І зверніть увагу, що ключ Тут користувач не почав свій пароль або їх контактний цитуючи. І вони не закінчилися його з цитати, тому що він або вона за умови, що, якщо програміст не був таким гострим, вони матимуть ті, одинарні лапки в своєму коді. Так ось код. І заміна, що може зараз статися це. І я підкреслив, що користувач ввів в. Тому, перш ніж, після. І зверніть увагу, що м'яко занепокоєння зараз про правій половині цього SQL коду? Це трохи більш складним, за загальним визнанням, ніж запитів ми бачили. Але це не може бути добре, якщо ви кажучи виберіть зірку, яка виберіть все зі столу користувача де ім'я користувача дорівнює skroob і пароль дорівнює один, два, три, чотири, п'ять або один дорівнює один. Що логічний наслідок цього останнього пункту імовірно? Це просто завжди вірно. І тому, що ми щось здогадався або з'ясували методом проб і помилок що програміст, який написав цей код не зробив передбачити людську або погана людина набравши в одинарні лапки, а, ми можемо синтаксично завершити SQL-запит з чимось безглуздий але щось, що синтаксично невірно що завжди правдивий. Так що, якщо цей код використовується для відповіді питання істинними або помилковими повинні цей користувач буде дозволено пройти, Відповідь завжди, мабуть, збирається щоб бути правдою, тому що це завжди буде вибрати щось з бази даних бо один, звичайно, завжди дорівнює одиниці. Так в чому ж рішення? Ну в Pset 7, ми насправді Щоб уникнути цього всі разом. Ми даємо вам функцію запиту, і ми рекомендуємо вам використовувати знаки питання як заповнювачі, аналогічні по духу PRINTF у% х, але те, що ключ про знаків питання от якщо ви насправді прочитати functions.php, де наш Функція запиту буде реалізований, ці знаки питання спасшиеся, чого-небудь потенційно небезпечним як апостроф включений в сбежавшего однією цитатою. Так що це те, що насправді відбувається, якщо вас використовувати функцію запиту CS50 або будь-яку кількість з сторонніх безкоштовних бібліотек, які зробити те ж саме. Не має значення, в даному випадку, в зелений, якщо користувач ввів в однією цитатою бо в запиті функція, яку ми написали, збираємося додати зворотну косу риску перед будь-яка така небезпечна цитата. Так що це не так, в Справа в тому, буде законним. Це як набравши в божевільний дивиться пароль це, звичайно, не збираюся бути актуальною пароль skroob ігрова. Так винос для CS50 є одним, абсолютно завжди використовувати щось як функції запиту CS50 в або основна бібліотека, які, трапляється, називають PDO. Але ніколи, ніколи, ніколи не такий код без втечі або очищення як говориться ваші входи. І ви в якийсь момент, ймовірно, попадаються якомусь сайті, як це. Насправді, це, здається, справа як в аеропортах і готелях місць де у них є безкоштовний Wi-Fi Доступ що у вас є, щоб увійти в, ці веб-сайти завжди жахливо реалізований. І так-то весело будинку вправи, не в зловмисних цілях або більше із задоволення на дорозі вправи, це просто наберіть апостроф, апостроф, у формі на якомусь сайті і подивитися, що відбувається. І якщо сервер виходить з ладу або дає Ви якийсь повідомлення про помилку, дуже може бути, що хтось не чекав цього. І тоді ви повинні попередити належне Влади і не перейти далі. Так що тепер ви, хлопці, повинні, ми сподіваємося, зрозуміти трохи більше виродка гумор тут. [Сміх] DAVID Маланій: Ви знаєте, ви виродок. Протягом наступних декількох років, ви будете пам'ятати хто мало Боббі Столи є через це мультфільму тут. Так що майте це на увазі, як ми перемикання контексту в останній раз сьогодні в JavaScript. Ми провели досить мало Час від синтаксису PHP бо це насправді супер схожий на C. І досить добре, JavaScript занадто супер схожий на синтаксис мови C а також ми побачимо в тільки на мить, і як ми будемо см в кінці цього тижня, зокрема. Що ви можете зробити з цією мовою, хоча, тим потужнішим, особливо з API. Але спочатку короткий тур. Так що, в JavaScript, є ні Основна функція, яка хороша. Як з PHP, ви можете просто написати код. Умови виглядати наступним чином. І логічні вирази може виглядати так або так. Існують перемикачі, і вони може виглядати наступним чином. Чотири петлі виглядати наступним чином. Тоді як петлі виглядати наступним чином. У whiles виглядати наступним чином. А потім масиви схожі це, дуже схожа на РНР. Але зауважимо, що в JavaScript тебе оголосити змінну нема з доларом підписати, ні з типом даних, але буквально кажучи вар для змінної перед нею. Це занадто вільно набрали в тому, що він має види, але ви явно не оголошувати їх. І тоді рядок, для Примірник, може виглядати як це, що рядок називають и в цьому випадку. І потім об'єкт. І це ми побачимо більше найближчим часом. І об'єкт, мабуть, один з Найбільш часто зустрічаються структури даних в JavaScript на основі Програма так як він дозволяє пов'язати довільне пар ключ-значення тільки як асоціативні масиви в PHP і так само, як свій власний хеш-таблиці або спробувати як ми впровадили кілька тижнів тому. Так що давайте насправді побачити, що ми можемо зробити за допомогою JavaScript. І, зокрема, це довгий список функцій що браузери мають, що дозволяють підключити JavaScript в веб-сайт таким чином. JavaScript часто використовується як на стороні клієнта скриптова мова. Це не складено. Це теж інтерпретується. Але на відміну від PHP, який працює вже на сервері, на веб-сервері, або глибоко всередині Клієнти, JavaScript відрізняється тим, що вона як правило, проходить в браузері. Таким чином, будь-який код JavaScript ви почати писати для Pset 8 або вашого остаточного проекту, або в реальному світі, як правило, відбувається бути збережений на сервері, абсолютно в дот HTML або точкою JS для файлу JavaScript. Але браузер збирається завантажити що JavaScript Код для вашого власного примірника Chrome, або IE, або Firefox, або щось. І код насправді відбувається, щоб отримати виконується всередині вашого власного браузера. Просто, щоб зробити це більш реально, давайте подивимося це в конкретній формі. Ми поняття не маємо, що робить цей код насправді не читав через нього. Але дозвольте мені перейти до Facebook.com без реєстрації. Дозвольте мені піти в Огляньте елемент і йти, скажімо, мережі і перезавантажте сторінку. І ми будемо see-- дозвольте мені перейти Оновити Сторінка, щоб отримати всі запити на новий. І найперший Файл я бачу, CSS, CSS. Ось перший JavaScript-файл, і у мене є ніяка ідея, що це робить, але тут деякі з коду JavaScript що призводить Facebook. Це навіть не дійсно, що виявлення, щоб збільшити. Це як і раніше так само, як безглуздо. Але ви побачите, навіть внизу, є ще більше з цих файлів JavaScript. Упс. Ось пінг. Підемо трохи Крім того, додатково, в подальшому. Там один. Там один. Там один. Таким чином, навіть при тому, що Facebook, за сцени, написано в частині в PHP і Facebook, власну версію його, є величезна кількість JavaScript. Насправді, будь-який з в чаті ви робите на Facebook, будь-яке з оновлень вбудованого дати життя що відбувається в реальному часі, все, що приводиться в рух JavaScript. Да? АУДИТОРІЯ: Я не впевнений, якщо це Facebook, але я думав, що Facebook розробив їх власний внутрішній код мови? DAVID Маланій: Вони зробили. Так ось чому я говорю, дисперсію PHP називається хіп-хоп, що вони насправді додаткові функції для таких, що при Марк вперше реалізована Facebook, вона була написана в PHP. І щось залишилося роду переднього кінця мові що вони використовують для набагато їх кодування, але це ні мову це ваги особливо добре для мільярдів людей. І таким чином, вони додали свої власні Поліпшення за лаштунками. І вони використовувати будь-яку кількість інших мовах для різних шматків їх інфраструктури. Так що, так, це дисперсія те, що ми тепер знаємо, як PHP. Отже, давайте поглянемо на пару прикладів про те, як ми могли б використовувати JavaScript тут. У сучасному вихідного коду, у нас є купа файлів, перший з яких, давайте називається DOM нулю. Так DOM нуль виглядає наступним чином. Відпусти мене в цей каталог і відкрити domzero.html, верхня з яких має тип DOC Декларація, кажучи тут приходить HTML 5. А тепер ось HTML тегів. Ось глава тег. А от що нового сьогодні. Тепер у нас є тег сценарію всередині глави сторінці. І це, мабуть робить дуже мало, але сповіщення що я визначив Сценарій, JavaScript. І, як в сторону, так як це Широко поширене оману ,, JavaScript не має абсолютно нічого робити з Java, мові що деякі з вас, можливо, дізналися в АСУ ТП. Це було більше маркетингу річ, ніж що-небудь, їзда на фалди Java років тому. Але наявність нічого не робити з Java, просто так же, і прикро, змішання імені. Так от як ви оголошуєте функцію в JavaScript, буквально сказати, функцію, то ім'я функції, то будь аргументи він може вжити, точно так само як в PHP. Виявляється в JavaScript, одним з найбільш дратівливі функції, які існують в оповіщення. Це невелике вікно, що спливе і попередити вас в якійсь частині інформації. Це правило, з несхваленням. Але ми будемо використовувати його як нашого Перша вправа тут. Зверніть увагу на деякі особливості JavaScript. Одиночні і подвійні лапки насправді не має ніякого значення. Одиничні лапки і подвійні Котирування можуть бути взаємозамінними, в той час як в C, ви повинні використовувати подвійні лапки для рядків, і у вас є два один котирування для символів. Світ JavaScript, багато людей, більшість людей використовувати одинарні лапки рядків просто тому, що це стилістичне річ. Але те, що оператор плюс тут, які ми раніше не бачили? АУДИТОРІЯ: Зчеплення. DAVID Маланій: Зчеплення. Так C навіть не в цьому. PHP має оператора точки, який робить це. JavaScript має оператор плюс, який змішання є так само, як Java. Тепер те, що тут відбувається? Так ось, де базовий розуміння цієї картини ми підкинув пару днів тому вступає в гру. Пам'ятаєте, коли у нас був простий версія HTML page-- він просто сказав, привіт світ. А потім ми малювали дерево праворуч, який була купа прямокутників і ліній з'єднуючи їх, як родоводу. Так ось так зване DOM або об'єктної моделі документів. І виходить, що ви можете отримати доступ до прямокутники в цьому дереві з синтаксисом як в наступному. Ви в буквальному сенсі говорять документ, який є спеціальна глобальна змінна в JavaScript програма, яка має функцію пов'язано з тим, що ви можете отримати доступ до схоже на структуру, але ви просто кажуть точку, а потім ім'я функції, отримати елемент по ID. Елемент я хочу отримати це мабуть, цитую кінець цитати ім'я. А потім я хочу, щоб отримати його значення. Тепер ми забігаємо вперед. Я навіть не впевнений, що Все це о. Давайте перенесемося в HTML на сторінка, яка є супер просто. Зверніть увагу, що я визначив утворюють тут. Зверніть увагу, що я дав йому унікальний ID, навіть якщо ми не використали цей атрибут колись. Але це існує в HTML. Ви можете однозначно ідентифікувати деякий шматок з HTML з ідентифікатором, як це. Тепер зверніть увагу this-- виявляється HTML підтримує, в цьому списку білизни Хвилину тому, в цілому купа обробників подій. І це оброблювач подій говорить про уявити. На представленні користувача цього форма, називають наступний код. І код, який збирається назвати або виконані саме це, грецький Функція слідують повернутися помилковим. Решта має бути досить знайомі. Тут введення тексту типу, чиї ID, в цьому випадку, буде ім'я. У нас немає фактичного ім'я атрибута це time-- і кнопку натиснути кнопку. Так в результаті сторінка виглядає наступним чином. І в результаті поведінки, Ви побачите, виглядає наступним чином. На сторінці Місцевий господарі каже, привіт Девід, навряд чи естетично спосіб вітати користувача. Але що відбувається насправді? Ну, подумайте, що це. Це текстове поле. І відповідно до HTML тут, я дав його Унікальний ідентифікатор називається цитата кінець цитати ім'я. Між тим, я вже говорив, коли користувач відправляє цю форму натиснувши Enter або натиснувши Відправити Кнопка, викликати функцію під назвою Вітайте а потім повернутися False. Давайте розглянемо ті в зворотному напрямку. Зверніть увагу, коли я натисніть Відправити, Адреса цієї сторінки не змінюється. Значок браузера не починають крутитися. Я нікуди не ходив, і це буквально, бо я сказав, повернутися False. Повернутися хибним коротких замикань або зупинки поведінка за умовчанням в формі. Так що тоді у нас залишається це один останнє питання. Що Вітайте робити? Ну, Вітайте видимо, викликає функцію під назвою Оповіщення, проходить в одному довго аргумент, що це результатом з'єднання разом купа подстрок, привіт кома простір, потім все це повертається. Так документ як глобальна Змінна для цього кореня цього дерева, виклику спеціальної функції, в іншому випадку тепер відоме як метод. Функція це всередині змінна називається функцією метод замість. Так що елемент по ID. Що елементом зробити вас хочете отримати його ID? Цитувати кінець цитати ім'я та Потім спеціально цінуємо. Отже, іншими словами, що код просто знаходить текстове поле, ID є ім'я а потім отримує своє значення. Так що, якби я це змінити і сказати Девін замість Давида, і натисніть Додати, зараз ми є вітання для Девін. Гаразд, так що все прекрасно і чудово. Але давайте подивимося, якщо ми можемо зробити це трохи чистіше, так як тільки написання коду, як це як правило, буде з несхваленням. Це буде виглядати страшніше. Але те, що перший Різниця, що ви звернете увагу, тут В цьому варіанті, крім назвати зміни в DOM один? Що структурно виглядає по-іншому Про це в порівнянні з іншого? Да? АУДИТОРІЯ: Чи є форма на Верхня частина сценарію зараз? DAVID Маланій: Так, форма знаходиться на вершині сценарію для якоїсь дивної причини. Так що перше, що що вискакує на мене, теж. І, на щастя, принаймні, Ця частина ідентична. Отже єдине, що здається відрізнятиметься це. Так от те, що охайно про JavaScript 2. І це робить його важко зрозуміти на перший погляд, особливо для кінцевих проектів, якщо Ви дивіться на зразок коду на сайті, але це зводиться до деяким Основні синтаксичні особливості. Тут знову-таки, що Глобальна змінна документ. Тут знову-таки, що метод або функція що говорить отримати елемент по ID. На цей раз я хочу отримати ідентифікатор, званий демо. Де це? Це, мабуть право тут, сама форма. А тепер зверніть увагу, що, мабуть, якби я повернутися до цього вузла в дереві, що являє собою форму Сам, не текстове поле, Виявляється, що форма, що вузол або прямокутник з дерева, Тобто те, що ми називаємо властивість, дуже, дуже, дуже схожі по духу структурі в С. Це просто член дані всередині цього прямокутника. Так що я отримав форму тут, і я є, або я задаю, щоб його на Відправити оброблювач вірніше На Розмістити нерухомість Наступна функція. І це, безумовно, сама божевільна річ досі синтаксично. Виявляється в JavaScript і в PHP, і, чесно кажучи вже на те пішло в C, навіть якщо ми цього не роблять, ви можете додати безіменний, анонімний або AKA лямбда Функції, які не мають імені але може бути викликаний тим не менш. Так, що я роблю тут я задаю це на Запропонувати об'єкт нерухомості, який знаходиться всередині цього вузла мого DOM дерева, Функція, покажчик на функцію, якщо хочете. ніщо функція не має назвати, але це не значення, тому що ми будемо бачити в хвилину, як це назвати. Коли ця функція викликається, цей код запускається на виконання, то повертається брехня, як і колись. Але зверніть увагу, що я зробив. На даний момент в Історія, у мене є форма. У цього є унікальний ідентифікатор, званий демо. Тут, внизу, у мене є тег сценарію який виконує наступний код. Він прикріплюється до цього вузла в дерево, щоб він знаходиться на Відправити нерухомість ця функція тут. І тільки за характером, як браузери працюють, коли я тепер натисніть кнопку Надіслати або натисніть Enter, що функція буде додзвонилися. Це не потрібно ім'я, бо хто чорта піклується, як це називається. Єдиний раз, коли він коли-небудь, щоб отримати називається те, коли я відправити форму. Там немає необхідності для мене, людина-розробник, насправді назвати це де-небудь ще. Тепер же, як задирака, наче що не заперечували, вигин достатньо, ми можемо навіть зробити це виглядають більш загадковим допомогою супер популярної бібліотеки називається JQuery. Насправді JQuery і JavaScript нерідко об'єднуються. І що ми будемо робити в середу є початок за допомогою цієї мови і ці бібліотеки побудувати більш асинхронний і динамічні додатки як карта стає додатки, додатки що оновлювати веб-сторінку в режимі реального Час, як і Facebook або Gchat зробити, і більше не обмежуємося потрапивши Відправити по GET або просто пост поодинці. Так що я буду бачити вас в середу. [Музика, яка грає]