DAVID MALAN: Rendben. Ez CS50, és ez a A hét végén kilenc. Ez egy forgószél fölött az elmúlt napokban. És a probléma meg hét, ha térd mélyen bele, megérted, hogy elég bit Újdonság, hogy ott van. De nézzük, ha nem tudjuk rakni mindent együtt itt röviden addig veering ki még más irányba, és látta, Hol máshol mehetünk. Tehát eddig beszéltünk HTML. Már beszéltünk CSS. Már beszéltünk a PHP. Már kezdett megtapasztalni SQL. Ma fogunk beszélni egy kicsit a JavaScript. De hogyan mindezen különböző nyelvek illeszkednek egymáshoz? Így beszélgettünk múlt héten a fogalmát, amelynek a szerveren. Szóval csak felhívni a téglalap a web szerver itt. És egy webszerver szolgál biztosan fájlokat. És néhány ilyen fájl Lehet HTML fájlokat. Tehát az egyik dolog, hogy a webszerver akkor kiköp lehet egy fájlt akkor csak rajzolni ilyen tartalmaz néhány HTML. Így a laikus szempontból, milyen nem HTML segítségével csinálni? Közönség: Oldal néz. DAVID MALAN: OK, hogy egy oldalt néz, bár azt hiszem, már bizonyított amelyek egyébként. Tehát HTML nem enged feküdt ki oldalakat szerkezetileg, és lehetővé teszi, hogy egyfajta esztétikai jel egy oldalt, jelölje ki a statikus tartalmat, így Ezután nézd meg egy böngészőben. De ez a kulcs. Ez statikus tartalmat. Írsz, akkor mentse el, és akkor küldje. És a web szerver szolgálja majd fel, hogy a látogatók. De stilizál dolgok egy másik nyelv összesen. Kezdtük használni a style attribútum bizonyos címkéket. És a stílus attribútum nézzük meg dolgok, mint a betűk méretét és színét. És akkor már valószínűleg indult felfedezni, vagy hamarosan lesz a végső projektek lehetséges, de a többi tulajdonságokat, amelyek segítségével a CSS. És így a laikus szempontból, milyen Tényleg így lesz CSS csinálni? Ezek csak példák. Mit segítségével csinálni, hogy a HTML úgy tűnik, nem az, amit láttunk eddig? Közönség: Határozza stílusok egyedül. DAVID MALAN: Define stílusok egyedül. Így határozza meg a dolgokat, mint osztályok, mint te Lehet, hogy találkozott, vagy jellegzetesen azonosítja csomópontok egy dokumentummal, hogy lehet stilizál őket. De még pontosabban, azt mondanám, hogy a CSS valóban lehetővé teszi, hogy a dolgokat a utolsó mérföld, és lehetővé teszi, hogy meghatározza sokkal pontosabban az esztétika, míg HTML a legtöbb teszi a szerkezet az oldalakat. És bár van néhány alapértelmezett, mint láttuk, a tag egy cím tag, ami nagyjából a dolgokat nagy és merész. Ez egy elég általános definíció A tag - nagy és merész. Milyen betűméret ez? Milyen színű ez? Milyen merész ez? És CSS segítségével finomabban dallam ilyesmi. Csakúgy, mint az elrendezés, mint néhány láttátok. És őszintén szólva, egy kicsit CSS A rendetlen nyelvet. Ez nagyon erős, hogy tudod, hogy szó minden olyan webhelyet, hogy már látható az interneten ma, de ez egyfajta fájdalom a nyak. És néhányan felrobbant a fejed ellen a falak már csak azért, hogy valami buta, mint a központ menü probléma meg hét, ha már ütött, hogy Ezen a ponton már. De észre, ezek a dolgok könnyebb az idő múlásával. Elkezdi észrevenni mintákat. És ismét, a Google a barátod a különböző módszereket, amelyek segítségével megoldani az ilyen jellegű problémákat. És merem mondani, a CSS és HTML több általában meg lehet oldani problémákat több szempontból, amelyek közül mindegyik nagyon is lehet helyes, mint amit valami, mint a C, akár Most PHP vagy JavaScript. Már csak sok különböző módon feküdt a dolgokat. De ez kezdett el piszkos, azt mondta. Csak egyfajta keveredését a HTML és A CSS a stílus attribútum egy kicsit hanyag. És így ahelyett, hogy azt mondta, egyfajta absztrakt értelemben, hogy meg kell legalábbis kezd tényező ki a CSS valószínűleg. Nem a stílus jellemzőket, de legalább a stílus, amit belső tag része a weboldal? Közönség: Head. DAVID MALAN: a fejét. Eddig csak volt a cím fel ott van, de akkor is hozzá a stílus tag, és akkor tegye a CSS durván beszélő felé az oldal tetején. De aztán vette a dolgokat egy lépéssel tovább és tényezőként, hogy többet egy külön fájlban. És így a két fájlt is valahogy most kapcsolódik. És valóban ez volt a tag, hogy csináltam. És mi volt az egyik átfogó motivációk faktoring meg a CSS annál is inkább? Közönség: Újrafelhasználhatóság. DAVID MALAN: Újrafelhasználhatóság. Nem igaz? Lehet, hogy látta a p-set hét már hogy sok az oldal, a vásárlási oldal, az eladási oldal, a portfólió oldal, valószínűleg strukturált némileg hasonlóan. Van egy CS50 pénzügyi logót a tetején kivéve, ha már úgy döntött, hogy nem változtatja. Van egy lábléc a az oldal alján található. És CSS lehetővé teszi majd, hogy tényező, hogy ki azt egy külön fájlban, hogy ha meg akarja változtatni valamit globálisan között az egész oldalon, akkor az tényleg csak változtassa meg egy helyen. De van egy ár, amit fizetni esetleg azáltal, hogy faktorált ki az CSS az én HTML fájlt egy külön fájl hivatkozás azt a tag, amit látott hétfőn. Mi lehet a hátránya, hogy ez? Visszagondolva egy héttel ezelőtt, amikor mi vagyunk beszél a HTTP és TCP / IP és hogyan működik az internet. Valami itt? Közönség: Ez több időt vesz igénybe. DAVID MALAN: Ez több időt vesz igénybe. Miért? Közönség: [hallható]. DAVID MALAN: Igen. Tehát ez vitathatatlanul tart egy kicsit több időt. Mert az egyik, a CSS nyilvánvalóan nem ugyanaz a fájl. Tehát most van, hogy nem egy, hanem két kérelmet. És minden egyes ilyen kérelmek láttuk Chrome-ban az úgynevezett Inspector, és néztük a Network fülön, minden ezeket a fájlokat igényel egy HTTP- igény, amit láttunk tart bizonyos mennyiségű időt. Nos, lehet, hogy nem sok. Lehet, hogy csak 20 milliszekundum. Lehet, hogy 200 milliszekundum. De gondolj egy oldalt, mint a Facebook, vagy a CNN, vagy a Google, amelyek sokkal nagyobb, mint a példák már nézett eddig. Azok a lapok is több tucat kép, amelyek mindegyike lehet szükség letöltését egy fájlt. Tehát a dolgok esetleg elkezd lassulni. És különösen ezekben a napokban, amikor mindannyian a mobil telefon a zsebünkben, és Lassúbb internetkapcsolat, miután a várjon néhány milliszekundum, néhány több milliszekundum további fájlokat is lehet lassú. Lappangási idő az a szó, amely leírja a olyan várakozás, hogy van, hogy találkozhatnak vár néhány információt. De van egy fejjel. Tehát nem minden fajta a - ez valójában egy kicsit egy libikóka itt. Hátrány most, de mit böngészők tehet ha okosak elkerülése érdekében , hogy kérje az azonos styles.css fájlt újra lehet csinálni, mi? Cache is. Tehát cache - C-A-C-H-E - általában azt jelenti, itt, csak hogy megmentse a fájlt kérte az első alkalommal, és a majd ellenőrizze a gyorsítótár is. Ellenőrizze, te valami tároló, és ha már van egy másolatát styles.css, akkor is, ha egy másik oldalt a p-set, vagy minden olyan webhelyet, kéri újra, csak, hogy a felhasználó, aki ugyanazt a cache-elt példányt. Ne fáradj kérve. Hátrány még, bár, mint néhányan már megbotlott a p-set. Ha a változás a szerveren, és mész vissza a böngésző, és reload, néha a böngésző nem Ön egy szívességet, és nem zavar újra letöltését a styles.css fájl mert, ugyan már, mi az esélye hogy ezek a stílusok, hogy a Facebook használó fognak változni órára vagy nap mint nap? Ez elég alacsony. Lehet, hogy változnak az idők, de nem a pillanatban az óra. Tehát a trükk, csak hogy tudd, amikor egy cég fejlesztés, gyakran tartsuk lenyomva a shift billentyűkombináció például, majd kattintson a töltse be újra a böngészőt, és hogy általában elmondja a böngésző reload mindent, akkor is, ha már van azt a cache. Tehát még egyszer, upsides és hátrányai, de mindegyikük végül tervezési döntéseket. Tehát most már nem csak a véget a történet itt. Ha most menj vissza, és vissza, és vissza, és vissza kezdtük bevezetni nem csak HTML, de a PHP. Így a laikus szempontból, milyen nem PHP tegyünk? Közönség: [hallható]. DAVID MALAN: Mi ez? Közönség: bevezetése logika be a kódot. DAVID MALAN: Igen, be logika a kódot. Szóval ez egy igazi programozási nyelv hurkok, és a változók, és funkciók, és a feltételek, és az összes A dolgok már nem, vissza amikor óta semmiből. És a PHP, láttuk, lehet használni akár a parancssorban - a nem kell, hogy bármi köze az interneten, még akkor is, ha ez Tényleg eredete és mit inkább hogy jó, és elősegíti a - de a PHP pusztán a természet Az a tény, hogy van egy nyomtatási () funkció, és a printf () függvényt, vagy echo () függvényt. Van csokor módon nyomtathat szöveget PHP. Ezért, ha lehet ezt a programozási nyelv output pontosan amit beszéltünk korábban. A dinamikusan generálhatnak a HTML. Lehet, hogy nem az egészet. Lehet, hogy kemény kódot a dolgokat, mint a fejléc és a lábléc, és a logó, és a stíluslapok, és minden adott. De valami hasonló p-be hét, hová manipulálni a készletek és a bemutatja a felhasználó portfólió, amely fog változni, akkor biztosan használni a PHP és a logika ad Ön, mint egy programozási nyelv kimenet dinamikusan részhalmazok az oldal. Tehát, ha beszélni dinamikus weboldalak, vagy webes programozás, az amit valójában beszél. Egy nyelv, mint a PHP, vagy a dolgok nevezett Python vagy Ruby, vagy a Java, vagy még más nyelveken, a lekérdezés adatbázis gyakran, vagy egy másik szerverre, és majd dinamikusan kiköp HTML. Most a végeredmény, mint egy félre, nem hogy a HTML a legtöbb honlapok, beleértve a p-be a hét, valószínűleg lesz egy hatalmas rendetlenség, ha akkor nézd meg a forrást kód a böngészőben. Ez nem egy nagy dolog. Ezen a ponton, ha érdekel stílus, mi érdekel a dolog, hogy írsz. Mi nem érdekel a dolog hogy amit a kódot kimenettel. Szóval ne aggódj behúzás itt, ha ez a PHP, ami valójában kimenetre cucc. Végül is, a böngésző nem érdekel, és egy ember nem keres A forrás egyébként. Mi a személyzet, például, lenne nézi a PHP. Akkor hadd adjak egy gyors példa már miért más ez hasznos lehet. Szóval őszintén szólva, nem emlékszem az utolsó alkalommal használt C megoldani a problémát a valós világban. Valószínűleg a doktori iskolában, amikor Kellett használni a nyelvet, meglehetősen alacsony, és nekem adta a lehetőség arra, hogy valami nagyon nagy elvégzése, hogy valóban menteni sok CPU ciklus, ahogy csak tudtam, nagyrészt mert én voltam a nagy adathalmazok, , és minden CPU ciklus számít. És őszintén szólva, még a dolgok, mint a telefonok manapság, és más eszközök ahol nem elég annyi a memória, és nem nagyon vannak, mint sok CPU, a gyorsabb nyelvek még mindig vonzó. De a való világban, ha csak akar dobni egy program együtt elemezni néhány adatot, vagy a már összegyűjtött egy csomó regisztrációk Néhány diák csoport, és szeretné, hogy nagyon gyorsan automatizálni e-mail küldése egyenként minden egyike azoknak regisztrálók fogsz elérni a magasabb szintű nyelv mint a C úgy mondjam. Olyasmi, mint a PHP vagy Python vagy Ruby, vagy egy fél tucat másik, hogy létezik ezekben a napokban. De a három valószínűleg a legtöbb divatos most. És ez azt jelenti, hogy meg tudja nyitni egy szövegszerkesztő, mint a gedit vagy a legtöbb bármi más, és aztán csak elkezd kódot írni anélkül, hogy aggódnia a fordítás, anélkül, hogy igazán aggódni memória kezelése, szem előtt tartva azonban, hogy egy kicsit hanyagságot végül jön vissza harapni, ha az adathalmaz lesz vagy nagyobb a probléma lesz nagy. De mit jelent ez a mi a következő. Hadd menjek előre, és fuss helyesírás A probléma meg hat. Szóval ez az én trie-alapú megvalósítása , hogy én használt a nagy fórumon, ahol végeztem nem olyan jól. Majd jöjjön vissza egy hét múlva, és újra azok, akik nem a végén tetején nagy fedélzeten az utolsó előadás. De most, hadd menjen előre, és csak a futtatni a megoldás szöveges, és mi nem A King James Biblia, és most itt vagyunk. Tehát ezek mind az állítólag helytelenül írt szavakat ki King James Biblia. És a végrehajtás volt fél másodperc összesen. Tehát nem túl rossz ez adott számítógépen. De gondolj, hogy mennyi kódot kellett írni. Gondolom, hogy mennyi kódot kellett írni. Gondolja, hogy hány órát töltött a D-hall, vagy a kollégiumi vagy bárhol valóban kódolási fel, hogy a megoldást. Nos, ha valóban van egy magasabb szintű nyelv, mint a PHP, vegye tudomásul mit tehetek itt. Először is, tételezzük fel, hogy ez inkább az elosztás kódot. Ez a fájl neve helyesírás. Ez elérhető része a mai elosztás kódot. És fogok hullám kezem a legtöbb A részleteket, de ez valójában egy érdekes példa arra, hogy lehet, hogy port egy nyelvet , mint a C-PHP. Szó szerint nyitott két szöveges ablakok, az egyik az én C változat speller.c, és elkezdtem fordítja az én fej PHP, és írja ki a a legközelebbi egyenértékű funkciókat. Tehát ezeket a dolgokat más. Láttuk utolsó alkalom, hogy a PHP nem használja tartalmazzák egészen azonos módon. Használ igényelnek jellemzően, bár többek között létezik. Határozza meg egy kicsit eltér a # Define C-ben, de ez hogyan teszünk egy állandó. $ Argc kiderül, létezik a PHP-ben, így már láttam. Ezek csak változók, az összes kezdődő dollár jeleket. Emlékezzünk vissza, ez csak egy rakás lebegő pontokat. Tehát hosszú történet rövid, akkor szívesen flip ezt, ha kíváncsi, hogy ez majdnem egy vonal-for-átalakítás a vonal C változat speller.c a PHP. És akkor ezt újra fél tucat más nyelveken. De ami igazán érdekes ez. Vagy mi őszintén szomorú ez. Hadd menjek előre, és írja be a dictionary.php, és azt állítják, hogy én vagyok fog menni előre, és újra végrehajtani probléma meg hat itt. Szóval javaslom, először, hogy ebben a fájl, amelyet végre kell hajtani PHP, hadd nyissa meg a címkéket, mint ezt. Hadd adjak magamnak egy globális változó, $ méret lesz nulla. És fogok adni magamnak egy hash tábla. Fogom használni a hash tábla ezt a dolgot. Hogyan történik a hash tábla PHP-ben? Kész. OK. Tehát nyitó zárójel záró zárójel jelöli amit a PHP, ahogy láttuk? Egy tömb, hanem egy tömböt, amely egy asszociatív tömb. Egy asszociatív tömb egy adat struktúra, amely társult kulcsokat értékeket. Most a legegyszerűbb numerikusan indexelt tömb, azokat a kulcsokat is, mi? Nulla, egy, kettő, három, nem igaz? Old school cucc vissza C. De ez is is, vonósok, mint a foo és bar, vagy Maxwell, vagy az ilyen szöveg. Szóval kihasználhatják, hogy az csak egy pillanat. Hadd menjek előre, és kijelentik, a funkció, mint a - csináljuk load () először. Tehát load () függvényt. És a PHP egy kicsit különbözik, hogy szó szerint írja be a funkciót, de a ne írjon a visszatérési típus. Én megyek előre, és azt mondják, hogy a load () függvényt kell venni a érv $ szótár, csak mint a C változat volt. Csinálok, hogy a memóriából. Azt javaslom, hogy én vagyok fogja ezt. Én egyszerűen csak csinálni foreach. Én fogom hívni a függvényt hívott file (), átadva a nevét, hogy a fájl, amely a változó $ Szótár mint $ szót. Aztán belsejében a for ciklus itt vagyok fog menni előre, és tárolja a $ Tábla $ szó lesz igaz. Kész. Ó, várj. Kész. OK. Ez a load () függvényt mondjuk a PHP. Nos, miért működik ez? És én vagyok a fajta csalás van. Szóval, az egyik, foreach láttuk rövid utoljára. Ez csak azt jelenti, hogy képes végighaladni tömb, nem törődve az i és n és plus plus, és minden adott. Dictionary természetesen a fájl nevét, valami, mint a nagy vagy kicsi, a két szótárak használtuk utoljára. Fájl egy olyan funkció, amely megnyitja a szöveget fájlt, beolvassa azt soronként, és kezek biztonsági másolatot egy hatalmas tömb, egyes elemek, amelyeknek van egy sort a fájlból. Szóval ez a kombináció a fopen, és fread, és míg a hurok, és fclose, és minden adott. Végül, mint szó, csak azt jelenti, hogy ez a változó fogok férhetnek hozzá minden iterációs ebben a hurokban. Tehát röviden, ez egy óceánjáró itt azt jelenti, megnyitja a fájlt, amelynek neve a szótár, a változó, végighaladni azt sorról sorra, és minden alkalommal, amikor a vonal, tárolja változó nevű szót, majd tenni valamit a szót. Mit akarok? Azt szeretnénk, hogy a szót, a hash tábla. Nos, én nem tud valamit az én hash tábla, mint C-ben szögletes zárójelben. Ezt a nevet a hash tábla. Megyek index abba a hash táblázat ezen a helyen. Tehát nem zárójelbe nulla, nem zárójelbe egyet. Konzol idézet idézet vége valamit, bármi is legyen szó. És ahogy lehet, hogy a hash tábla munka trie, csak bolt gyakorlatilag egy logikai, implicit vagy explicit módon. Kész. Én tárolása az érték igaz. Most van egy pár dolog Én felületességet itt. Technikailag, ott lesz egy bosszantó új vonal, / n, a végén minden ilyen szavak. Szóval kéne hívni a PHP függvény úgynevezett chop (), amely a szó szoros értelmében, hogy vágja le. És valóban szükség van, hogy tegye egy másik dolog. Talán érdemes növelni méretét minden iteráció, úgyhogy nyomon követése világszerte, hogy mi az. És őszintén, és ez az egyik ostobább aspektusait PHP, ha egy globális változó, szükség van kifejezetten azt mondják, hogy te vagy. Így fogok valóban írja a globális $ Méret, globális $ asztal, és most a funkció teljes. Tehát nem olyan egyszerű, mint korábban, de talán kevesebb idő alatt, mint a C- verzió, talán? OK. És most lássuk a Check () függvényt. Nézzük meg, ez legalább vette a órákon át, hogy volt nekünk C. Tehát hadd menjen előre, és kijelentik, ellenőrizze függvényében. Vesz érvelés szó, ami fog jönni a helyesírás. És én csak megyek, hogy ellenőrizze, hogy a következő változót isset, asztal konzol strtolower szó - nézzük egyensúlyt minden az én zárójelek - majd vissza igaz. Else - ez tényleg kemény program keretében. Else vissza hamis. Kész. Ez az ellenőrzés (). Nos, miért is működik ez? Nos, az egyik én telt el egy szót, amely egy string. Kettő, én ellenőrzése belsejében a hash asztal, ki hívott $ asztalra. Én arra kényszerítve, hogy kisbetűs hívja funkció nagyon hasonló tolower ()-ben C, de ez nem az egész szót, nem egyetlen karaktert. És ha ez be van állítva, ott más szóval egy beállított értéket, más szóval, ha ez igaz, akkor igen, ez egy szó. Mert én tettem oda a load (). És ha nem, megyek vissza hamis. Most a többiek könnyű. Function size (), hogyan tudom ezt megtenni? Én alapvetően nem vissza $ méretét. De technikailag kell ezt a bosszantó dolgot. És valóban fel hallani, én vágás egyik sarkon túl sok. Tényleg kell tennie a globális $ asztalra. De, hogy azt mondta, kirak). Vegye () lenyűgöző. Function kirak (). Hogyan akarok végrehajtani kirak ()? Kész. OK. Tehát kirak (), a memória kezelése teljesen gondoskodott az Ön számára olyasmi, mint a PHP, és sok A magasabb szintű nyelven. Tehát ez csodálatos. Például, hogy miért a fenéért is töltötte az elmúlt nyolc plusz hét C írásban látszólag nagyon lassan, nagyon idő időigényes problémák tíz óra A munkát a mi övek? Nos, az egy dolog, ez a munka finom kis programok. Az biztos, hogy felgyorsult a fejlesztési időt. De nézzük meg, mi történik a valós világban. Hadd menjek ebbe a könyvtárba Egy terminál ablakban. Van helyesírás. És észre, félre, és lehet, hogy már találkozott ezzel a probléma meg hat vagy probléma meg hét. Nem feltétlenül kell végén PHP fájlok. php. Ha tesz egy sort, hogy az elsőt a csúcsra, ez egy speciális sor szintaxis, amely lényegében azt jelenti, meg A program neve PHP, és ez alapján értelmezik ezt a fájlt. Tehát most senki sem tudja igazán, hogy Futok egy PHP program. Tudok futni csak, mintha volt valami összeállított C. De itt van a dolog. Valójában, csináljuk újra. Dropbox/pset6 /. Van helyesírás. OK, 0,44 másodperccel. A felgyorsult ebben az időben. Most menjünk be a PHP verzió. Jó húzás. De hiszem, hogy mennyi idő Megmentettem az munkaidőben. OK. Így 3,59 másodperc, ami valójában nem hangzik pontos sem. De ez azért van, mert a hosszú történet rövid, amikor nyomtat ki egy hatalmas összeg dolog, hogy a képernyőn, hogy a maga is lassítja a dolgokat. Mi tényleg vette a CPU a készülék volt 3,59 másodperc, a ellentétben a C, amelyik 0,44 másodperc legutóbb. Ez valóban egy rendje nagysága eltérő. Szóval, hol van az ár jön? Miért van ez így sokkal lassabb? Miért PHP teljesítenek olyan rosszul? Danielle? Közönség: Ön nem igazán egy hash tábla. DAVID MALAN: Én nem igazán egy hash tábla. Szóval ilyen volt. Tehát ez egy asszociatív tömb. Valószínűleg, ha az emberek a PHP nagyon okos, használták alatta Hood tényleges hash tábla végre valami, mint a C vagy C + +. De. Igen. Közönség: [hallható]. DAVID MALAN: Igen. Így az egyes funkciók írtam már - valóban, meg tudja mondani, hogy még egyszer a kicsit hangosabban? Közönség: Minden egyes funkciók beleértve téged is sokkal több teljes kapacitás, mint - DAVID MALAN: Szóval ez nagyon igaz. Van egy sokkal fölött, hogy mi vagyunk Nem igazán látni koncentrálva csak dictionary.php, amit írtam. Ezzel szemben van egy egész tolmács megy a háttérben. Sőt, amikor futott a program, akkor nem futott össze nullák és egyesek tervezték, az én Intel CPU. Inkább ez fut soronként PHP kód, ami úgy néz ki, mint mi begépelte. És így, amikor használja a értelmezett nyelv, akkor Igazából fizetni ezt az árat. El fog tartani egy ideig, hogy olvassa el a fájl felülről lefelé, balról jobbra, majd végre az egyes sorban újra és újra. Most a valóságban, különösen az interneten, akkor valóban felgyorsítja ezt a folyamatot a gyorsítótár az eredményei PHP kódot értelmezik. És, hogy van értelme az interneten, mert a ha nem az egyik felhasználó, mint ide, de a 1000 vagy 10.000 felhasználó, akkor talán az első alkalom, hogy a fájl elérni, hogy ez lassú, de utána ez sokkal gyorsabb. De ez is megint egy kompromisszum. És valami, mint a kutatási adatok beállítása, vagy akár valami nagy, mint a ez, a felhasználók előbb-utóbb kezd érezni, hogy a lassulás. Tehát röviden, értelmezett nyelvek nagyon divatos, nagyon népszerű, és a őszintén szólva talán a nyelveket el kell érnie, ha problémák megoldására követően CS50. De észre, hogy mennyi te tényleg Ha igaz, a motorháztető alatt tényleg azok elmúlt hét hash asztalok, és fák, és megpróbálja, amelyeket végül is, hogy ténylegesen végre a dolgok, mint nyitó zárójel, szögletes zárójel, ami most már köszönettel vesznek. Szóval vessünk egy pillantást most ebben az internetes környezetben. És megemlítettem utolsó alkalom, hogy ott van egy csomó superglobals a PHP, hogy nem igazán releváns a parancssorban. Ők inkább relevánsak A PHP egy webes környezetben. Így a PHP a webszerveren, hogy létrehozni dolgokat, mint a HTML. És pillantott $ _GET és $ _POST, és ez az, ahol automatikusan a felhasználók input végül csak ha be alkotnak fájlba végződő. PHP a web szerver, mint a készülék. De nézzük röviden $ _COOKIE És a $ _SESSION. A laikus szempontból, mi az a süti, mint érti azt a keretében a web? Közönség: Fájl a számítógépen. DAVID MALAN: Igen. Ez egy fájlt a felhasználó számítógépén ültetett bármilyen website véletlenül meglátogatni. Tehát, ha megy a Facebook, ha megy a bankofamerica.com, ha megy a google.com, ha megy, hogy szinte minden honlap a világon ezekben a napokban, beleértve cs50.net, cookie ültetett a számítógépen, ami vagy a tárolt érték RAM a számítógép böngésző memóriájában, vagy a néha valóban egy tárolt fájl a merevlemezen. És mi általában tárolja a fájlban nem a felhasználó nevét, nem a jelszót, jellemzően nem valami érzékeny, kivéve, ha a weboldal nem annyira jó a biztonság, hanem ez egy nagy egyedi azonosító körében más dolog. Ez egy nagy véletlen számot ültetett a számítógépet, de lehet gondolni, mint egyfajta virtuális pecsét, mint a egy klub vagy valami vidámpark lehetővé teszi a személyzet, a tulajdonosok, hogy a szolgáltatást, hogy ne feledje, hogy ki vagy. Tehát, ha a nagy véletlen számot, mint 12345678, bár ez nyilvánvalóan Nem is véletlen, gondolom az, hogy mivel a pecsét, hogy amikor meglátogatja facebook.com az első alkalommal, akkor bélyegző ez a szám a kezét. És azért, mert beszél HTTP, akkor hogy egy böngésző, és mivel a Facebook nyilván beszél, ugyanaz, mint a web szerver, a protokoll HTTP szerint bármikor később látogat facebook.com, hogy ez egy másik később, egy órával később, még a következő napon, amíg még nem kifejezetten kijelentkezett, amely hatékonyan olyan, mint a kézmosás. HTTP azt mondja, be kell nyújtania a pecsét minden alkalommal, amikor visszatér a weboldalon. Mit Facebook akkor ez az, hogy nézd meg, hogy a pecsét és a azt mondják, ó, az 123456789. Nem tudom, első pillantásra, hogy ez a David Malan Cambridge-ben, Massachusetts, de lehet ellenőrizni a adatbázis, és azt mondják, ó, az a személy akinek a számítógépen telepítettünk 123456789 David Malan Cambridge, Massachusetts. Mutassuk meg, hogy a felhasználó, akkor a profilt oldalon vagy a News Feed. De van egy probléma, ha ez az, hogy a web valóban működik. Vessünk egy pillantást egy gyors példát. Nézzük valóban el kell mondanom facebook.com. De mielőtt tudnánk menni, legyen menjek előre, és nyisd ki a Chrome Felügyelő ide. Hadd nézzem meg a Hálózat fülre. És most menjünk előre, és írja be A https://facebook.com. És én ezzel, hogy, hogy nem látunk az összes ilyen átirányítások és a hulladék idő nézegette azokat. Hadd nyomd meg az Entert. Rendben van. Látunk egy csomó kéréseket. Jön a Facebook. Van egy csomó kép. És itt, egy az említése késleltetés utolsó alkalom, hogy ez sok HTTP kéréseket. De az első valószínűleg a legérdekesebb. Szóval lépjünk le itt, és Én nagyítás a második. Ez lesz az a fajta a rendetlenség, de lássuk. Facebook küld nekünk csomó dolgot. De hé, érdekes. Ők ültetés nem egy, hanem négy kézi bélyegzők rá a kezem itt. Set-Cookie, Set-Cookie, set-cookie-t, set-cookie-t. És van néhány funkciók itt. Mindegyik néhányat említsünk fajta lejárat. És úgy néz ki, mint a Facebook azt reméli, hogy emlékezzen rám 2015-ig. Szóval ez feltehetően az időt, amely Azt kell jelentkeznie, vagy fognak csak automatikusan feltételezik vagyok nem jön vissza. Tehát ez valójában egy tisztességes ideig. És vannak más dolog folyik itt. Ez a süti úgy tűnik, hogy erőszakkal törölte azzal lejárt 1970-ben mielőtt cookie-kat létezett. Így a böngésző csak megy feltételezni OK, ez olyan, mintha mosás a kezek bélyegző. De most, amikor a böngészője a későbbi kérelem - hadd menjen előre, és ezt újra és reload. Most hadd menjen vissza az első kérelmet, és lemegy itt kérhet fejlécet. Figyeljük meg ezt. Úgyhogy most alá nem válasz fejlécet, de észre azt mondja kérés fejlécet. És észre, hogy a böngésző részeként kérését, miután megütött reload van küldeni legalább az alábbi információt. Nem Set-Cookie, de a süti. Tehát ez az a vonal, a HTTP fejléc így beszélni, ahol a böngésző a sort Az nem az én tudva azt bemutató kezem Facebook ellenőrzés. Tehát ezek a cookie-k is használunk, akkor miért? Emlékezni, hogy ki vagy, és emlékszem, milyen hányszor voltál ott, vagy Tényleg semmit. Tehát itt van counter.php. És hadd ráközelít a font. És minden egyes alkalommal, amikor újra az oldalt, értesítés ez eszébe jutott, hogy hányszor Voltam ott. Nos, ez nem olyan látványos. Nézzük csak zárja be a fülön, és most térjünk vissza a http://localhost/counter.php. Ó, ez érdekes. Még mindig emlékezett, még bár zárt a fület. És őszintén szólva, ha a böngésző bezárásához ha végre a megfelelő módon, azt Még mindig emlékszem, hogy ez a felhasználó aki ő volt az első alkalom, és csak egyszer megyek a Chrome-menüt, amely ide itt van, és menj Előzmények, majd kattintson a Böngészési adatok törlése, mint néhány lehet, hogy a múlt, csak akkor lesz a cookie-kat valóban törlésre web fejlesztés. Tehát, ha megyünk - nézzük közelről gedit itt. És ha most elindulunk, hogy ezt a fájlt. Hadd menjek a mi vhostokat / localhost / public, hadd tegye counter.php. Vegyük észre, hogy ez egy nagyon egyszerű program. Ez egy nagyon egyszerű honlap. Tehát a tetején a fájl csak megjegyzéseket. De itt van egy új vonal, amit lehet láttuk már a p-be hét, session_start (). Ez egy sor PHP kód lényegében azt mondja, a webszerver, győződjön Ügyeljen arra, hogy bélyegző kezét, és Ügyeljünk arra, hogy kézzel bélyegek. Ez minden, ezt a vonalat nem, és azt nem minden, hogy a folyamat számunkra. Aztán észre, én csak most két ága van. Ha a számláló kulcs belülről a jelen speciális globális változó neve $ _SESSION Beállítva - más szóval, ha van valami értéke van - lássunk, és tárolja azt a helyi változó neve $ számlálót. Else, menjünk hozzá $ counter Az alapértelmezett 0 érték. Most itt van az egyik aspektusa a PHP, ami egyszerre áldás és átok. A PHP egy kicsit hanyag. Tehát míg a C-ben, mi lenne a hatálya számláló volna vagy itt, vagy itt? Az lett volna csak azoknak kapcsos zárójelek. Találd ki, mi? A PHP, létezik még azokon kívül kapcsos zárójelek között, itt, és itt, és itt, és itt, és még lent. Szóval azt mondom, ez egy áldás abban az értelemben, hogy nem kell gondolkodni, mint kemény, mint tettük hete. De ez is egy kicsit az átok, hogy nem számít, ha egy változó PHP, legalábbis a program, mint ez, ez a globálisan hozzáférhető jobb vagy rosszabb. Tehát meg kell szem előtt tartani, most, hogy a változó nem definiált. Lehet, hogy meghatározott mailt. De mit fogok csinálni végül? Fogom tárolni benne, hogy a globális mint a változó értéke Counter gombot az eredmény Ennek counter plusz 1. Szóval ez csak a számtani , hogy ez a incrementation, hogy a számláló. És az a tény, hogy én vagyok tárolja, hogy értéket vissza ide IS jelent lényegében frissíti az adatbázis ne feledjük, hogy a felhasználó 123456789 került Itt két alkalommal. És amikor újra meg újra a következő alkalommal, amikor töltse újra a lapot, ez lesz ellenőrizni kezem pecsét és azt mondják, ó, felhasználónak 123456789 mostanra már itt háromszor. És akkor mi van a PHP és a hasonló nyelveket tesznek számunkra ők kitalálni ki, hogyan és hol és mennyi ideig hogy tárolja az adatokat a speciális szuperglobális. És ez szuperglobális a következő alkalommal, látogassa meg az oldalt van valami varázslatosan előtti lakott, tele értékek ott voltak a legutóbbi alkalommal, amikor meglátogatott, hogy ez volt a második óra, egy hét ezelőtt vagy 2013-ban, és mi most beszélünk a 2015. PHP és a webszerver vigyázni az összes az Ön számára. Közönség: [hangtalan]. DAVID MALAN: Változók PHP lényegében mindig globális, ha róluk egy függvényen belül, és akkor azok helyi A funkció csak. Hanem azért, mert én már nem írt funkciók, ezek most gyakorlatilag globális végig az egész fájlt itt. Közönség: Van-e mód , hogy azok a helyi? DAVID MALAN: Van módja annak, hogy azok a helyi? Csak csomagolás őket funkciókat. Melyik a legfrissebb PHP, meg tudod csinálni ezt egy névtelen függvényt. De még az, hogy a összefüggésben JavaScript. De a rövid válasz: nem. A hosszabb válasz: igen. Szép. Jó kvíz kérdés. Rendben van. Így végül, az oldal maga valójában nagyon egyszerű. Figyeljük meg, hogy egyszer én kilépéshez PHP mód felidézni hogy ez a cucc le alatt csak megy, hogy nyárson ki nyers a böngésző. Ami jó, mert én akarok küldeni a felhasználó bizonyos HTML, de én nem akarom hogy dinamikusan frissíti a HTML. És az egyik mód arra, hogy ennek az, hogy rendezni nagyon gyorsan csökken vissza a PHP módban nyitó zárójel kérdőjel egyenlőségjel, majd a kimenetet az érték számláló. Vagy ha ez úgy néz ki, egy kicsit rejtélyes, ez egyenlőségjel valójában csak néhány szintaktikai cukor a printf ($ counter). De őszintén szólva, ez csak egy kicsit csúnya és egy kicsit bosszantó, hogy írja. Tehát PHP nagyon szépen kínálja ezt a szolgáltatást ahol csak annyit, hogy több tömören azonos módon. Szóval, mi folyik alatta a motorháztető alatt? Nézzük gyorsan nézd meg a hálózat tab itt counter.php. És hadd menjen előre, és az első hadd törölje a cookie-kat. Nézzük Böngészési adatok törlése óta az idők kezdete. Most menjünk vissza ide. Most újra az oldalt. És én vissza nullára. Mert a pecsét már mosott, Most egy új cookie-t. Valóban, ha megnézzük a hálózat fülre, és nézd meg válasz fejlécét, észre hogy a készülék küld nekem cookie akinek a neve kissé önkényesen, hanem egyfajta ésszerűen, PHPSESSID. És küldi nekem ez tényleg nagy véletlen számot. Ez nem elég sok. Ez nem egészen hexadecimális. Ez valamilyen alfanumerikus karakterlánc, de feltehetően ez véletlen. És ez a pecsét, így a beszélni, hogy én vagyok utalva. Közben, ha újra, majd kattintson a nézd meg ezt a második sorban a második kérelmet, értesítést most, hogy a kérelem fejlécek közé PHPSESSID értéke ennek nem set-cookie-t, de csak cookie-t. És ez a böngésző bemutatása A kezem bélyegző. Tehát most, mint egy teaser, és majd beszélgetünk erről egy hét múlva, de a milyen módon jelent ez neked sebezhető, a Facebook számla sérülékeny, és más hasonló számlák sebezhető? Közönség: Ha valaki a cookie-t. DAVID MALAN: Igen, ha valaki van a cookie. Úgy értem igazán, ugyanúgy, mint néhányan volna bíróság elé, mint egy klub, vagy egy vidámpark, ha megpróbálja valami így másolni a bélyegző, bár visszafelé egy másik ember kezét, és akkor ő mutatja be azt saját, ha tényleg nem néz ki azonos, 123456789, akkor a web szerver látszólag csak megy, bízom benne, hogy a felhasználó maga. És ez valóban egy alapvető fenyegetés minden alkalommal, amikor a sütiket mert ha valaki csak úgy hamisít Beszélünk az Ön cookie-t, kitalálja, hogy mit is, akár azzal, hogy valóban másolás nézi a számítógép és mivel, mint a, OK. Dávid cookie JJ3JIK és így tovább, és akkor ők okos ahhoz, hogy tudja, hogyan, hogy egyfajta manuális küldeni, hogy a süti a böngésző vagy a programot írnak, tudtak teljesen jelentkezzen be a honlapon, mint te. Ez nem olyan nehéz, hogy magát a valaki, hacsak nem újra p-set két, amely bevezette az mi? Közönség: Kriptográfia. DAVID MALAN: A kis kis kriptográfia. Egyszerű kriptográfia, legalábbis a standard változat, de a titkosítási mégis. kevesebb. Így kiderül, ha titkosítja az összes Ezek a fejlécek a valami, amit talán most többet tudni meghitten ismerem, mint az SSL, Secure Socket Layer vagy https:// URL, akkor az összes ilyen dolgot már pillantva valóban titkosított, ami azt jelenti, hogy olyan, mint te nem tudja olvasni a pecsét. Csak a facebook.com lehet, vagy google.com, vagy ebben az esetben a készülék olvastam, hogy a pecsét. Tragikus azonban, és ez szintén túl szükséges a NSA cucc a végén még SSL feltörhető. És ez tényleg nem olyan nehéz még feltörni, hogy a titkosítás. Nem annyira a repedés a titkosítás, hanem a megtévesztett böngésző dekódoláshoz Az adatok idő előtt. De ismétlem, majd ugratni azzal, hogy hamarosan. Egyelőre csak féljen. Ez tragikusan olyan igaz. Rendben van. Szóval, hol ezt most hagyni minket? Hát, ezt. Menjünk előre, és egy gyors teaser mielőtt egy kis szünetet. És azt hiszem, mi időzzön egy kicsit ma, de fogunk belevetik magukat valami új és szexi, ami fen az étvágyat még. Szóval ez a teaser. Tehát SQL, elkezdtünk beszélni még oly rövid ideig utoljára. Majd igazán piszkos a kezed ez néhány p-set hét. És a laikus szempontból, mit SQL - S-Q-L - érted? Mi ez? Igen. Közönség: Nézzük meg hozzáférési adatait. DAVID MALAN: Igen. Azt nézzük meg hozzáférési adatait egy adatbázisban. Structured Query Language. És ez lényegében egy programozási nyelv. Vannak olyan jellemzői is, hogy mi nem is használja az osztályban. De akkor hatékonyan határozzák funkciókat. Ők az úgynevezett tárolt eljárások SQL. De majd tartani meglehetősen egyszerű, és csak felhasználhatják azt a bizonyos alapvető műveleteket mint kiválasztásával adatok adatbevitel az adatok frissítése, és az adatok törlését. És akkor tényleg azt hiszed egy adatbázis, mint egy SQL adatbázis, mint csak hogy a Microsoft Excel. Mivel az SQL utal, hogy a relációs adatbázis, ahol a kapcsolatban csak azt jelenti, táblákat. Sorok és oszlopok. Tehát bármi, amit fel tud állítani egy táblázatot mint ez vagy a Google Docs, meg tudná tenni egy SQL adatbázis úgy nyilatkozott, egy asztal. Nos, mit valójában elérheti ezt az információt? Nos, parancsok vagy lekérdezések, mint ez. SELECT, INSERT, UPDATE, és DELETE. És a legtöbb esetben, ezek a Négy egyetlen összetevője akkor kell valami nagyon erős A probléma meg hét. Most vissza a nap, akkor valóban kölcsönhatásba egy adatbázist a fekete-fehér terminál ablak villogó prompt, mint ez. És az adatbázis kifutunk az készüléket MySQL nevezik, ami a szabad és nyílt forráskódú adatbázis-motor. Ha a Google, és olvasd el a Wikipedia cikket, akkor tudja, hogy a neve egy kis átmenet néhány Linux rendszerekkel. Maria adatbázis valójában egy villa úgy mondjam a MySQL. Hosszú történet rövid, az Oracle megvásárolta a MySQL. Az Oracle egy nagy cég. Az emberek már attól, hogy ez már nem is annyira a nyílt forráskódú, így ez csak a MySQL egy példányát, ami még szabad, még nyílt forráskódú, és a telepített Fedora Linux alapértelmezés szerint. De ez a fajta fájdalom a nyak megismerkedni a adatbázis ezen a módon. Tehát mi is a CS50 készülék egy ingyenes, nyílt forráskódú eszköz, úgynevezett phpMyAdmin. Csak véletlen, hogy ez PHP-ben íródott. Nincs alapvető szükség van a PHP itt. De ez csak egy web-alapú eszköz, hogy ingyenesen letölthető, telepíthető A készülék, amely lehetővé teszi számunkra, hogy egy grafikus felhasználói felület, amely hogy vizsgálja meg a p-be hét adatbázis amely az új adatbázisokat, azt mondják, a saját végső projekt, ha azt hasonlók, és végül létrehozni dinamikus weboldalak, mint a CS50 Finance amely lehetővé teszi adatok lekérdezéséhez és frissítése az adatok dinamikusan. Ugye nem kell majd használni csak egy egyszerű szöveges fájl vagy CSV. Tudod valójában egy okos adatbázist program, így végre több bonyolult lekérdezések csak olvasó át mindent lineárisan. Így például, ez az, amit adni ki a dobozból a p-be a hét. Ez egy asztal, látszólag legalább három oszlopot, amelyek közül az egyik felhasználónév, amelyek közül az egyik hash, és a másik, amely azonosítója. De az érdekes dolog, és csak a kötekedik ki egy gondolat itt, felhasználónév feltehetőleg már egyedi, nem igaz? Úgy értem, a legtöbb minden olyan webhelyet, ha van egy felhasználónevet, ott akkor ne két Caesars. Nem lehet két Malans. Nem lehet két jharvards. Egyedülálló. Ellenkező esetben nem tudjuk, melyik jharvard valójában. Akkor mi lehet a motiváció is miután egy harmadik oszlop a bal oldalon ott az úgynevezett ID, ami úgy néz ki, mint egy szám, ami hasonlóan egyedi? Úgy érzi, egy kicsit redundáns nekem első pillantásra. Miért lehet az, hogy vonzó, hogy a nem csak egyedi felhasználónevek, hanem az egyedi számokat? Közönség: Lehetett volna ugyanazt a jelszót. DAVID MALAN: Az emberek lehet, hogy ugyanazt a jelszót, persze. Ez lehet teljesen történhet. De ha ezt az egyedülálló felhasználóneveddel, azt azt állítják, hogy ez nem igazán számít, mert ha írja be a felhasználónév, én csak azt kell ellenőrizni, hogy jelszót, a hash tartalmazza. Mi másért? Közönség: gyorsabb keresést. DAVID MALAN: gyorsabb keresést. Miért? Közönség: ID csak egy. DAVID MALAN: ID csak egy karakter, vagy pontosabban, ez a szám, így valószínűleg 32 bit vagy valami ilyesmi. Mivel a felhasználóneveddel, látszólag Jason Hirschhorn ott van valami nevetségesen hosszú, és ez fog engem sokkal több időt a húr összehasonlítani H-I-R-S-C-H-H-O-R-N, és talán a / 0, vagy valami ilyesmi, annak érdekében, felnézni Jason, szemben a csak mondván, adja meg a felhasználó a kettes számú. Ez a 32 bit. Ez egy INT, amely meg kell összehasonlítani. És valóban, pontosan ezért adatbázisok általában rendelni egyedi azonosítókat sorok őket. Most mi más adattípusok vannak mellett INT és látszólag húrok, mint ez? Nos, hogy helyesebb, SQL adatbázisok, mint a MySQL, van CHAR mezők. És tulaj egy kicsit félrevezető nem egy CHAR. A CHAR területen egy MySQL adatbázis egy vagy több karakter, de ez egy meghatározott számú karaktert. Így például, ha én megyek át phpMyAdmin mint azt már, vagy hamarosan a probléma meg hét, és megyek az az adatbázis, és csak a móka kedvéért, hozzunk létre egy új tábla neve tesztelni mindössze két oszlopot. Én majd kattintson a Mehet gombra. És ez lesz meglehetősen ismerős, különösen akkor bütykölni körül a saját. Itt is írja ID létrehozása Új tábla típusú INT. De itt azt is írja felhasználónév újra a korábbi táblázat. És észre, van egy csomó A típusok közül lehet választani. És ez is az oka phpMyAdmin a fajta szép. Ez egyfajta ön-tanítás, hogy csak ilyen pontot, és kattintson, és nézd meg legördülő menük, és arra következtetni, hogy milyen hatásköre SQL ad. És valóban, ha úgy döntök, CHAR, én majd meg kell határozni a hosszát, vagy hogyan sok értéket, hogy hány karakter. Tehát nagyon közös értékek olyan dolgok, mint a 255, de ez egy kicsit hosszú. Általában nyolc a felhasználónevet. De ez egy kicsit kicsi ezekben a napokban. Tehát ez egy tervezési döntés. Ez max. 8 karakter, 32, 255, 1000? Ez tényleg rajtad múlik. De egy CHAR mező egy rögzített szám. Úgy döntenek, túl kevés, és te milyen csavarozott ha akarsz egy hosszabb felhasználónevet. Válassza ki a túl sok, és mi a hátránya? Közönség: [hallható]. DAVID MALAN: Ez pazarló. Csakúgy, mint a C, ha van egy nagyobb darab memória mint amennyire szüksége van, akkor csak időt és kiesik hely. Tehát, mint egy alternatív, létezik VARCHAR, amely megoldja ezt a problémát, kezelése hossza nem fix hosszúságú, de a maximális hosszát, és egy változó karaktereinek számát, ami aztán inkább csak annyi KARAKTEREK, mint te valóban szükség van. Ez jól hangzik. Miért nem megszabadulni a CHAR adattípus akkor? Mi lehet a hátránya a VARCHARs, ami úgy hangzik, mintha ez egy szép győzelem? Igen? Közönség: [hallható]. DAVID MALAN: OK, jó. Tehát, ha az összes adatot azonos hossza, mi az aggodalom? Közönség: Mert pazarlás adatok elmondja őket. DAVID MALAN: Tehát, ha az összes adat azonos hosszúságú, bár azt állítják, hogy megad egy maximális hosszúságú A VARCHAR nem különbözik megad egy fix hosszúságú CHAR esetén tudod, ez a szám előre. De valóban, én pedig valami kivonat, amely válasz a valóság hogy még mindig a max, ami bosszantó, különösen akkor, ha találkozik egy személy nevét, ami szokatlanul hosszú, hogy nem előre. És ez is egy kicsit kevésbé hatékony hogy ténylegesen keresni VARCHARs mint szemben a keresést karaktereket; különösen a hosszú asztal, amely sok- rengeteg adatot. Tehát itt is, tematikus ismét nincs nyilvánvaló választás. Szóval, csak hogy egyfajta más adattípusok, amelyek érdekesek lehetnek vagy p-set vagy hét A jövőben ott INT. Van BIGINT, amely olyan, mint a hosszú, hosszú. Úgy látszik, hogy a 64 bit. Van DECIMAL, amit majd látni a probléma halmaz, ami sokkal tisztább válasz a problémákra is felmerült úszó és lebegő pont pontatlanság. És akkor ott van DATETIME. Van szó adattípust, amely néz ki, mint egy év, egy hónap, egy nap, és egy óra, perc, másodperc. De az SQL adatbázisokat is dolgokat hívjuk indexek. És az index van valami, amit adja létrehozásakor az asztalra a keresések és egyéb műveletek hatékonyabb. Pontosabban, van valami neve Az elsődleges index, amit lehetett kijelentik az alábbiak szerint. Mi volt ez az Ön számára a felhasználók asztali adunk. De észre, ha én kézzel felüdítő A felhasználói tábla van adva ez a név a felhasználók. Már megadott azonosító. Én meg INT. Én meg felhasználónevet maximum 32 karakter. De ha folyamatosan görgetés ez a meglehetősen nagy ablak, észre van egy csomó más dolog, amit megadhat. Az egyik, hogy megadhatja attribútumok mint, tudod mit, ez a INT legyen előjel nélküli. Nem akarom, hogy a negatív számok, úgyhogy teszi aláíratlan. Null nem releváns itt, mert Azt akarom, hogy minden felhasználó egyedi számot. Én nem akarom, hogy null. De ez érdekes. Én is meghatározza, hogy azonosító vagy a elsődleges kulcs az adatbázisban, vagy ez a egyedi, vagy indexelt, vagy a teljes szöveget. Így a mai célokra, hosszú történet rövid, PRIMARY azt jelenti, hogy ez kell egyszerre elvi és gyakorlati területén, amit használunk, hogy egyedülálló módon azonosítja a felhasználót. Tehát, ha megnézzük a felhasználókat, hogy ez a fajta Az ígéret, hogy vizsgálja meg őket leginkább Ez az egyedi azonosító. És az adatbázis biztosítja, hogy ha egy felhasználói szám 3, akkor nem fizikailag be egy másik felhasználó azzal, hogy ugyanazt a 3-as. Az adatbázis csak megtagadja, a módosítások mentéséhez. Ami jó dolog, mert akkor védekezhet a magad. maga Alternatívaként a felhasználónevet. Tehát a második sorban, visszahívás, a felhasználónév mezőt. Tehát a második sorban itt a felhasználóneveddel, mint mi a bal szélen is. Szóval, mit is akarok adni? Nem vagyok szabad, szerint SQL, két megadott elsődleges kulcsokat. megadhat egy közös kulcsot, ahol nézd meg mindkét területen, de nem tudnak külön-külön lehet elsődleges kulcs. Szóval ez szóba sem jöhet. Szóval, ami akarok válasszam? Nos, EGYEDI hasonló szellemben a elsődleges kulcs ahol megadhatja ezt mező egyedi, de Nem lesz az egy Én használni az időt. És nem fogjuk használni ezt minden az idő, miért megint? Ez lassabb lehetséges, ha ez egy hosszú felhasználónevet. Ez csak időpocsékolás. INDEX eközben kimondja, hogy ez nem lesz egyedi, de szeretnék , hogy a munka a mágia alatt a Hood, hogy gyorsabban nekem keresni ezen a területen. Tehát ez valószínűleg nem releváns. A felhasználónév, azt állítják, hogy UNIQUE egy jó válasz. De tegyük fel, hogy mi történt a felhasználók nagyobb érdekesebb, mint felhasználónevek, hash és azonosító számokat. Mi lenne, ha adott az embereknek a teljes nevét? Mi van, ha nekik címek és egyéb adatokat róluk? Nos, ha meghatározza, hogy egy oszlopot a adatbázis indexelt, ami azt jelenti, hogy MySQL vagy az Oracle, vagy bármi adatbázis amit használ, meg kell trükközni és használja valamilyen divatos adatok szerkezet, mint egy fa, vagy egy trie vagy hash tábla, vagy valami, hogy garantálják hogy ha keres adatokat válassza ki az adott területen - mint mutasd meg mindenkinek, hogy él, az Oxford Street. A lekérdezés ilyesmi. Ha meg előre, hogy Ön is szeretne egy index a területen, a keresések lesz sokkal, sokkal gyorsabban. Ha nem ad meg egy indexet, a legjobb amit tehetünk, lineáris keresést, ha ez nincs rendezve. De ha adja INDEX, az intelligens emberek, akik az adatbázis - emberek, mint te, aki már tudjuk fák és országokban és hash táblák - automatikusan építeni egy ilyen adatok struktúra RAM, hogy megbizonyosodjon arról, hogy az ezek keresések sokkal gyorsabb. FULLTEXT közben hasonló szellemben, de lehetővé teszi, hogy helyettesítő keresések, mint mutasd meg mindenkinek, hogy él utcákon, hogy kezdődik a O betű bármilyen okból. Meg tudod csinálni helyettesítő karakterek ilyesmi. Vagy vonzóbb dolgok, mint a show- nekem mindenki, aki a szó - mutasd meg mindenkinek, akinek a neve kezdődik egy adott levelet. Kereshet kulcsszavak ezen a módon. Rendben van. Tehát, design lehetőségeket ott lehetséges. Vannak mások, hogy fogok hullám a kezét. Kiderül, hogy lehet különböző tárolási motorok. És ez több, titokzatos, mint amennyi szükséges természetesen a probléma meg hét. Alapértelmezésben srácok használ úgynevezett InnoDB. Majd meglátod említik ezt valahol phpMyAdmin felülete legvalószínűbb. De tudom, hogy vannak más tervezési határozatokat, amelyek potenciális érdeklődés jön a végső projekteket, amennyiben teszel valamit, web-alapú. De nézzük ezt. Menjünk előre, és hogy ezt a képernyőn, mint a teaser a történetet bele magát, a szobatársam, és egy pohár tejet. Vessünk egy két perces vagy úgy szünet itt. És ha maradok, hadd jöjjön vissza, egy kicsit többet SQL, és majd egy kis JavaScript p-be nyolc szem előtt tartva. Rendben van. Szóval, most, hogy gondolsz a sarok esetben, nagyon könnyen felmerülhet keretében egy adatbázis segítségével, vagy őszintén szólva, még a valós életben a dolgok mint ATM kap pénzt. Tehát itt van a hűtőszekrény. Tegyük fel, hogy van egy túl-ben a kollégiumi, vagy a ház. És van egy szobatársa, és mind a Tényleg szeretem a tejet például. Szóval jön haza osztály egy nap. Ő nincs még vissza. Kinyitod a hűtőt. Szeretné egy nagy pohár tejet. Nincs tej. Szóval, mit csinálsz? Bezárja a hűtőben. Fogd meg a kulcsokat. Menj ki a térre. És kapsz a sorban CVS azokon saját pénztár dolgokat, melyek mindig hosszabb időt vesz igénybe, mint a ténylegesen miután pénztárosok. Egyébként. Tehát, eközben pont pont pont, a szobatársa hazajön, és ő Hasonlóképpen van egy vágyódás A kis tejet. Így ő kinyitja a hűtőt, úgy néz ki belülről, és ó, a fenébe. Nincs tej. Így ő fejek ki, előfordul, hogy menjen a többi CVS, ami csak egy háztömbnyire valamilyen okból, és ő vagy ő lesz a sorban, hogy vásároljon néhány tejet. Közben, gyere haza, ő vagy jön haza, és mit akkor végül is? Kétszer annyi tejet. De nem igazán szeret tejet, hogy sok. Tehát most már annyi tejet, hogy most egyikük csak fog menni savanyú végül. Tehát ez egy nagyon rossz kérdés. Nem igaz? Szóval, mi történt? Tehát alapvetően ez a fajta Egy nevetséges példa. De a motorháztető alatt, amit már volt történik, itt mind a ketten ellenőrzött az állam néhány darab memória, a hűtőszekrény. Mindketten ellenőrizte az állam néhány változó. Mindketten felhívta a következtetésre hogy majd cselekedett. De sajnos, miközben a szobatársa volt a boltban, az állam, hogy a változó megváltozott, ő jött vissza és most meg akarja változtatni az állam, de ez már megváltozott az őt. És persze, ő nem lett volna elment a boltba, ha tudnák hogy már úton van. Így a valós világban, hogy tehetted elkerülni ezt a problémát, feltételezve, hogy van hűtőszekrény, van egy szobatársa, és hogy tényleg szeretem a tejet? Közönség: Kommunikáció. DAVID MALAN: Kommunikáció. OK. De hogyan lehet, hogy kommunikál? Közönség: Hagy egy megjegyzés. DAVID MALAN: Hagyjuk a figyelmét, nem igaz? Mindig hagy egy megjegyzés, a rajongók a show. Rendben, mindig hagy egy megjegyzést, vagy fel igazán, mint a lakat, vagy valami A hűtőszekrényben, hogy megtartja a szobatársa a ellenőrző állam a változó. Nos, miért lehet ez valaminek megfelelő probléma meg hét, vagy ATM-ek. Nos, képzeljük el egy olyan világot, ahol az ATM lehet, hogy menjen fel egy ATM gép itt, és egy másik ATM itt. És ez elég gyakran megtörténik. És tegyük fel, hogy két ATM-kártyák, ami lehetséges. És belép két gép hatékonyan egyszerre, remélhetőleg Bár senki sem néz. És akkor írja be a PIN-kódot nagyjából egyszerre. És akkor te az egyensúlyt lekérdezést , hogy mennyi készpénz van. És tegyük fel, hogy van 100 $ maradt a fiókjában. Tehát lényegében egyszerre, akkor mondjuk egy, nulla, nulla, írja. És remélhetőleg vissza egy kis pénzt. De, hogy mennyi pénzt lehet kapsz vissza? Most számítógépek a végén a nap, különösen, ha ők beszél kiszolgálók, nem feltétlenül a dolgok abban a sorrendben, ami várható. Tegyük fel, hogy mi történik, mert az bármilyen hálózati sebesség problémák vannak vagy, vagy CPU problémák vannak, vagy ilyesmi, tegyük fel, hogy a első ATM ellenőrzi az egyensúlyt és lát, ó, ez a személy 100 dollárt. De akkor lesz zavart, mert lehet, a biztonsági mentés történik, és így lassul. Vagy talán ellenőrzése közben, a hálózat kapcsolat egy kicsit lassabban, mert ez csak úgy megtörténik. Ők fizikai eszközök. Tehát Eközben a második ATM kéri ugyanezt a kérdést. Mennyi pénz nem David van? 100 $ a válasz. De mivel az első ATM még nem az üzenetet küldte kivonás $ 100, mind a ATM-ek már megvizsgálta a bank boltozat, látta ott 100 $ ott, és most mindkét gép potenciálisan az majd kiköp a választ. Nos, ez jó neked bizonyos értelemben ha az, amit a bank nem végül A változás az összeg mínusz 100- beállítottam egyenlő a bankszámla egyenlő 0, szemben csinál mínusz 100. Most a legrosszabb esetben a bank - vagy a legjobb a bank, időközben kapsz 200 $, és bankszámlaszám megjeleníti negatív $ 100, ami igazán nem javára van egyáltalán. De a lényeg az, hogy ez a faj feltétele két szobatárs egyre tej, vagy két ATM-ek próbálnak készpénzt és változtatni az állam a Vault ugyanabban az időben létezik semmilyen alkalommal, amikor egy adatbázis. Most meg hét probléma, ez a kérdés merül fel abban az értelemben, hogy ha veszel egy részesedése a Facebook állomány, majd a Például veszel egy második része Facebook állomány, meg kell, hogy a döntést, mint a programozó. Annak eldöntésére, hogy hogyan kell frissíteni a adatbázis esély fogsz Van egy sor ezen állomány, és ez a az egyik módja annak végrehajtására. És fogsz egy részét FB, amely a tőzsdei rövidítést Ennek felhasználónév vagy a felhasználó ID, az egyedi azonosító. De ugyanaz a történet megtörténhet itt. Ha a SELECT SQL, mint látni fogod A probléma meg hét, ha látod, ó, David van egy részvény A Facebook állomány. Hadd most változtatni, hogy ez két részvény, mert azt akarja, hogy vesz egy második részét. De tegyük fel, David tulajdonképpen két böngészőablakot nyitva, vagy tegyük fel, hogy ez egy közös számlára két házastárs, és mindkettő szeretné végrehajtani ugyanazt a műveletet, ott is, a fennáll a döntés, hogy alapján készült korábbi állapota a világ - a számla egy részvény - és a két ember, vagy mindkettő szerver, most próbálja mondani, megnöveljük a két részvény. De ebben az esetben, lehet, hogy feltöltött nekem pénzt mind a részvények, de növekszik, hogy csak egyszer. Tehát röviden, az alapvető probléma itt, mint a viccet hagyva megjegyezni, vagy amivel egy lakat azt, Ha két ember, vagy két szál - Szerintem vissza a semmiből - tudja ellenőrizni az állam néhány változó és próbálja megváltoztatni a változót, de ez a két dolog nem történik a időben, de lehet kapni megszakadt más dolog történik, az adatok kap egy nagyon furcsa állapot. És akkor előnyös, vagy szenved abban az értelemben, a pénz példa. Így probléma meg hét, adunk ez egy sor kód, amely hosszú történet rövid, megoldja ezt a probléma a MySQL. Ez nagyon hosszú utasítás, amely nem még elférjenek egyetlen vonal a képernyő itt biztosítja, hogy a működés az úgynevezett atom. Mindez történik egyszerre, vagy ez nem így történik minden. Ez a nagyon hosszú mondatok nem fognak megszakadni részben. És mit csinál a szó szoros mit mond. Helyezze a néhány tábla a következő három területen az adott értékek de ismétlődő kulcs, nem csinál egy betét. Csinálj egy update. Tehát ez olyan, mint csinál egy SELECT és INSERT úgymond egyszerre. És mi az a kulcs, amely valószínűleg előterjesztésétől itt? Kiderül, és látni fogod ezt probléma meg Hetes spec, mert már bejelenteni, hogy egy egyedi kulcs ezen a bizonyos asztalra, hogy nem lehet több sorban ugyanazon felhasználó a azonos penny állomány szimbólum - ebben a példában, DVN.V van egy buta penny állomány, hogy mi lásd a spec. Mert már kijelentette, hogy egyedi, Ez azt jelenti, hogy ha próbálja beilleszteni a kettős sorban, akkor inkább fogja frissíteni nélkül másnak az alkalom, hogy változtatni az állam a világ sem. Tehát röviden, ez biztosítja, dolgok atomi. Általánosabban azonban, adatbázisok mint a MySQL - és akkor nem kell ezt a funkciót a p-set hét, de tartsa szem előtt a A jövőben - támogatják az úgynevezett tranzakció, ahol lehet mondani START tranzakció szó. Ezután végre két SQL. És egy SQL utasítást, mint látni fogod A p-set hét, úgy néz ki, egy kicsit valami ilyesmi. Frissítés egy asztal nevű számlára. Egyensúlyának beállítása oszlop azonos bármilyen Az Egyenleg oszlopban jelenleg mínusz 1,000, ahol ez a szám, számlaszám, mint például a felhasználói azonosító, értéke 2, majd frissítse számla dot dot dot. Így a laikus szempontból, mit jelentenek ezek a két lekérdezések úgy tűnik, hogy ennek a valós értelemben vett banki? Közönség: átvitele a megtakarításokat. DAVID MALAN: Pontosan. Pénzeszközök átcsoportosítását egyik figyelembe a másik. És ez egy másik példa, ahol szeretné ezt a két dolgot történni vagy nem történik meg. Nem akarsz valamit, hogy a közepén, és potenciálisan összezavar a matematika, vagy összezavar mennyi pénz van, vagy mennyi pénzt a bank. Szóval, ami igazán szép a tranzakció A MySQL az, és adatbázisok általában az, hogy és okos emberek, akik már megvalósított ezeket a funkciókat kitalálni, hogyan lehet meg arról, hogy mind a két dolog történik vagy egyáltalán nem. És ha igazán törekvő, hogy egy weboldal, amely által használt emberek campus, az emberek a világban, ezzel valamit a startup értelemben ezek a fajta tervezési döntések lesz valaha is olyan fontos. Ellenkező esetben, ha elkezdi elveszíteni adatokat, elveszti felhasználók számára, vagy a legrosszabb esetben láttunk itt, esetleg pénzt veszít. Tehát még egyszer, erről bővebben a probléma meg hét, valamint talán néhány Ön a végső projektekben. Szóval változtatni azt a képet kellett Egy pillanattal ezelőtt csak egy újabb módja. Hadd valóban látni, ha tudok - Nem, hogy elment. Ott van. Szóval, ez az, ahol hagytuk utoljára. És kiderül, megyünk dobás még egy dolog, a mix itt - a nyelv a JavaScript. Így JavaScript valóban illik ebbe a darab - és én nem egészen elegendő helyet, így ez most nem a skála. OK, ez tényleg szánalmas. OK, hogy a JavaScript. Rendben van. Én igazán tesz egy rossz. Rendben van. Tehát egy másik JavaScript programozási nyelv, és az utolsó, ha ez segít megnyugtatni, hogy nem sokkal több A tűzcsap itt. Tehát JavaScript szintén értelmezett nyelv, ami azt jelenti, hogy nem fordítsd le a nullák és egyesek. Csak futtatni. De mi alapvetően különbözik a JavaScript általában az, hogy ne futtatni a webszervert. Nem kap fut a készülék önmagában. Inkább lesz letölthető a felhasználó HTTP be a böngésző - Chrome, Safari, Internet Explorer, Firefox, bármi - és ez a böngésző, amely végrehajtja a adott programozási nyelv. Tehát egyértelmű, PHP eddig volt végre akár a parancssorban A fekete és a fehér ablak, a szerveren mint a készülék, egy számítógép mint a készülék, vagy már által végrehajtott webszerver fut a számítógépen. De a téma az, hogy a PHP eddig végrehajtásra került szerver-oldali, így a felhasználó és a felhasználó böngészője soha nem látja egy sor PHP kódot. Sőt, ha valaha is nyit egy böngésző a honlapon, vagy egy másik, és valóban látni PHP kódot az ablakot, valaki elcseszte. Mert ez nem azt jelentette, hogy küldött a böngészőben. Állítólag végre kell hajtani, és megfordult valami, mint a HTML. De a JavaScript lényegében az ellenkezőjét. Ez azt jelentette, hogy futtatni általában belül A felhasználó böngésző ablakot. És milyen weboldalak használata JavaScript akkor ezekben a napokban? Mint a szó szoros értelmében minden népszerű weboldal. Minden honlap, hogy a srácok valószínűleg a naponta használja a JavaScript alkalmazást legegyszerűbb és még a legszexisebb funkciók. Tehát valami, mint a Facebook Chat ha már így. Hogyan, hogy valóban működik? Hát eddig, az összes cuccot voltunk kész HTML és PHP feltételezi, hogy a húzza fel egy URL-t, és nyomja meg az Enter, és látod, néhány HTML tartalmat. És rákattint a linkre, amely megváltoztatja a URL, megváltoztatja az oldalt, és újratölti néhány új tartalmat. Kattintson egy URL, vagy be egy űrlapot, akkor kap felvert egy másik oldalra, és látni néhány új tartalmat. De a valami, mint a Facebook Chat, vagy Gchat, vagy a Google Maps, ritkán nem az egész oldalt frissíteni, hogy látsz egy fehér képernyő egy pillanatra és majd az új tartalmat. Inkább weboldalak ma dinamikusan egyre frissíteni újra újra és újra minden fajta a színfalak mögött. És kiderül, hogy ha nem megy a valami, mint a Facebook, vagy a Gchat, vagy a Gmail, és az oldal frissítések automatikusan újratöltése nélkül egész képernyőt, mi történt, hogy a böngésző tett egyfajta titokban További HTTP kérések - nem a teljes weboldalakat, de csak kis mennyiségű adatot, mint például a azonnali üzenetet, hogy a barátja éppen küldött, vagy az állapot frissítés valaki csak küldte, vagy a tweet hogy valaki csak küldött. Ez csak azzal, hogy kis kérelmek adatokat, majd a JavaScript, ez programozási nyelv, a változás milyen Az internetes oldal úgy néz ki, mint anélkül, hogy a server segít, anélkül, hogy a szerver generál, hogy a HTML. Tehát röviden, JavaScript is kell használni, akkor nem csak letölteni az új adatokat a szerver újratöltése nélkül az egész oldalon vagy benyújtása formában. Azt is fel lehet használni, hogy a változás az úgynevezett DOM - Document Object Model - ami csak a képzelet utat mondván, a fa a HTML hogy láttuk utoljára. Tehát, hogy megnyugtassa, JavaScript szintaktikailag annyira hasonlít a C is. Nincs fő funkciója. Csak írjuk be a kódot és ez lesz végre, vagy értelmezhető megfelelően. Feltételek fog kinézni. Nem más, mint a C vagy a PHP, ami azt illeti. Logikai kifejezések or-ed együtt fog kinézni. Kapcsolatba kerülnek együtt nézni, mint ez. Kapcsolók fog kinézni. A hurkok fog kinézni. Bár a hurkok fog kinézni. Ne while fog kinézni. Ez az új. Tehát JavaScript még nem a foreach konstrukció önmagában, de ez a konstrukció az i változó a tömb, és én ebben a esetben válik index értéke. Tehát ez egy kicsit más, mint foreach, bár újabb verziói JavaScript jönnek ki minden alkalommal, így még e nyelvi funkciók fejlődnek. És mint félre, JavaScript ezekben a napokban is fel lehet használni a szerveren, mint PHP egy olyan kerettel nevű Node.js. Az egyik CS50 a TF, Kevin, vezetett a szeminárium Node.js ami elérhető cs50.net/seminars. Tehát, ha kíváncsi vagy, tudod, hogy Használhatja ezt a szerver oldalon is, de ez egy viszonylag új keletű trend, de erőteljes egyet, hogy a. Ez egy kicsit más. Ez egy tömb a JavaScript. És mi a sztrájk, mint a különböző szemben a C vagy PHP? Van néhány gyors történet meg tudjuk mondani itt. Mi hiányzik szemben PHP? Közönség: [hallható]. DAVID MALAN: Igen? Sajnálom, ismételje meg? Közönség: Nem kijelentve a változó típusa. DAVID MALAN: Mi nem nyilvánítja a változó típusa. Tehát tulajdonképpen nagyon, mint a PHP, nem vagyunk meghatározzák a fajta ezt a változót. Inkább mi több, általánosságban mondván var változó. Nincs PHP kellemetlen a dollár jelet, ami ugyan unalmas típusú, nem teszi világossá, hogy valami változó. Míg itt vagyunk, valami vissza C megközelítése mellett csak hívja a változó a neve akarunk hogy ez, mint a számok. És azt is, mint a PHP, mi szögletes zárójelben a értékek benne, hogy a tömb. Így változók JavaScript is így néz ki. Vegyük észre, itt egy string nevű s, de hasonlóképpen tettünk nincs megadva hogy ez a szöveg. Itt azonban az a jellemzője, hogy nem léteznek pontosan ugyanúgy a PHP, de egy kicsit hasonló. Ez egy objektum JavaScript. És tárgyak fajta a svájci hadsereg Kés egy adat struktúra, amit használja őket tetszőleges számú dolog. Itt például, mi kijelentve változó nevű árajánlatot. Az a fajta, amely változó egy objektum. Azt hiszem, hogy ez egy C struct amely a kulcsokat és értékeket. Symbol kulcsfontosságú. FB egy olyan érték, látszólag állomány szimbólum. Vessző. Az ár egy gombot, és értéke látszólag egy lebegőpontos, vagy a szám általában a JavaScript, a 49,26 $. Tehát a PHP nem rendelkezik - még nem láttam a PHP objektum elég mint ez, de nem látni egy analóg, ami volt? Közönség: [hallható]. DAVID MALAN: asszociatív tömbök. Tehát míg a PHP asszociatív tömbök melynek szintaxisa mindig kicsit olyan más - láttuk, a szögletes zárójelek. Láttuk a furcsa nyilak szimbólumok. JavaScript tárgyak, de ez többnyire szemantikai különbséget, és a különböző szinonimája most. Azonban, mint egy félre, PHP is tárgyak oly módon, hogy a Java és egyéb nyelvben tárgyak objektum-orientált programozás. De majd használni ezeket csak az adattípusok most. Objektumok és asszociatív tömbök. Ez lehet, hogy ez egy kicsit világos. Itt van, hogy miért egy tárgy hasznos. Ha azt szeretné, hogy állapítsa meg a diák, mint Zamyla, mi is valójában felölelik úgyszólván benne, hogy a objektumot zárójelek mint mielőtt egy egész kulcscsomót és értékek itt. Van egy azonosítót, egy házat, és egy nevet Zamyla, majd egy pontosvessző, mint szokásos a végén. Itt lent is, ez kissé különböző, de nagyon erős ezekben a napokban. Itt van egy sor, és tudom, hogy azért, mert van egy szögletes zárójel fel felső és egy szögletes zárójel az alján. És ez egy sor, amit az adatok írja látszólag JavaScript? Ez egy tömb úgy néz ki, mint a három tárgyat. És tudom, hogy egy tárgy csak mert a kapcsos zárójelek. És észre, ott nyitott zárójel, néhány dolgot, közel zárójel, vessző, majd egy kicsit, vessző, majd egy kicsit. Szóval ez a három érv elválasztott két vessző. Tehát ez egy sor három tárgyat. És minden egyes ilyen tárgyak úgy tűnik, hogy egy diák vagy a személyzet tagja valamilyen sort, mindegyik egy azonosítót, ház, és a nevét. De Hívtam ezt a valamit úgynevezett JSON - JavaScript Object Notation. És ez egy olyan adatformátum, amely ténylegesen olyan nagyon népszerű, és divatos manapság, hogy ha írsz egy alkalmazás, amely a Facebook API, a Twitter API, tényleg majdnem bármely API ott ezekben a napokban, CS50 köztük saját, a adatok vissza nem old school CSV formátumban. Mivel emlékeztetnek arra, hogy CSV szuper egyszerű. Ez csak oszlopok egymástól vesszővel. JSON adatokat ad további metaadatokat. Ez hozzárendel egy kulcs minden értéket, nem kell, hogy csak feltételezni, hogy A nulladik oszlop egy értéket, oszlop Egy másik, oszlop két másik. Mindent egy JSON objektum itt van valami Az ön-leíró, mert minden az egyik neve ebben a fájlban van szó neve előtt, hogy ez egy idézett szöveg. Szóval vessünk egy pillantást pár jó példa. Hadd menjek be a készüléket. És hadd menjen be a vhost könyvtár a nyilvánosság. És hadd menjen be a JavaScript könyvtár. És menjünk előre, és nyissa fel dom-0.html, ahol a DOM csak azt jelenti, Document Object Model. Ez a fa anyag, amely Utaltam korábban. És hadd az alábbiakat javasoljuk. Itt egy weboldal, melynek test nagyon egyszerű. Tehát itt az alján, észre, van egy űrlap. Már láttam ezeket korábban. Két bemenettel, melyek közül az egyik van egy ID neve, amelyek közül az egyik egy olyan típusú be, és az első ember típusa szöveget. Szóval ez tényleg úgy hangzik, nagyon egyszerű. Menjünk itt. Térjünk vissza erre az oldalra itt. Menjünk be localhost, és bemegy JavaScript könyvtár, és menj dom-0, és itt van ebben a formában. Szóval ez látszólag Minden ezen az oldalon nem. Ez egy név mező a Küldés gombot. De én nem fogom használni a PHP itt. Fogok tenni mindent kliens oldalon hogy úgy mondjam a JavaScript alábbiak szerint. Figyeljük meg, hogy én valóban kapta a nevét területén a bemenet egy egyedi azonosító, amely ténylegesen mentsen meg egy bizonyos időt egy pillanatra. És észre, amit be egy másik tag a fejét a weboldalamon, a  tag. Tehát ebben az értelemben, hogy a JavaScript a kliens-oldali programozási nyelv. Ebben az esetben, mint a CSS, tettem egyenesen belsejében a HTML. De észre én nyilvánította a funkciót úgy néz ki, egy kicsit, mint a PHP szintaktikailag, de ez valójában JavaScript, mert megint, ez kliens oldali a böngészőben. És akkor gondolom, hogy ez mit fog igen, még akkor is, ha néhány, a szintaxis itt az új. Közönség: Köszönj bárki. DAVID MALAN: Meg fog köszönni annak, aki meglátogatja ezt az oldalt. Igen, hogyan? Tehát észre, kiderül a JavaScript van egy alert () függvényt. Ez egy nagyon egyfajta szomorú funkció tényleg csak inkább bosszantani felhasználók számára. Ez nem az egyik akkor tényleg használni általában, de ez egy gyors és piszkos módon egyfajta nyomtatás valamit a grafikus felhasználói felület, mint egy böngésző. Figyeljük meg, hogy itt van egy karakterláncot aposztrófot. Kiderül, hogy ellentétben a C, JavaScript lehet ténylegesen használni egy idézi, és őszintén szólva ez csak egyfajta A stilisztikai egyezmény között JavaScript programozó egyszerű idézőjeleket. PHP, valójában valamivel mást jelent. De most, csak tudom, hogy ez az egyetlen oka. Az egyezmény a JavaScript gyakran a egyszerű idézőjeleket, de használjuk idézőjelek mindkét helyen is. Szóval ez érdekes. Emlékezzünk vissza, utoljára, hogy mi volt, hogy kép a képernyőn, hogy felhívta a fa ahol már a HTML csomópont, és a fej csomópont, és a test csomópont, majd néhány szöveget. De volt egy speciális csomópont a legtetején, hogy felhívtam a dokumentumot. Nos, kiderült a JavaScript, minden alkalommal, amikor írni egy programot JavaScript a böngészőben, van hozzáférése egy speciális globális változó. Hasonló szellemben a PHP szuperglobális, ezt hívják csupa kisbetűvel dokumentumot. Olyan, mint egy struct, de ez a struktúra feladatokat is ellát belsejébe. Tehát egy C struct csak meg az adatok általában. De egy JavaScript objektumot, mert ez Technikailag a feladatokat is ellát, más néven módszerekkel, belsejébe. És akkor hívja a függvényt belsejében ezt az objektumot a szó szoros értelmében végzi a név, pont, majd a nevét a funkciót, vagy újra módszer. Ez csak egy szinonimája, de tényleg. És mit jelent ez a funkció nem? Ön milyen kitalálni a neve. Get elemet azonosító. Tehát ez fog keresni a weblapon, keresni azt a fát, keres bármilyen csomópont, AKA elem, egy egyedi azonosítója idézet idézet vége nevét. És akkor mit fogok csinálni? Megyek, hogy az értéke belsejében a csomópont a fában, és meg fogom valahogy köszönni ezt a nevet. Tehát hogy a találgatás, bár most már nem látott még, mit a plusz jelek itt és itt talán? Közönség: Concatenate. DAVID MALAN: Concatenate. Igen, és ezek csak fajta tervezési döntések nép évvel ezelőtt. A PHP-ban összefűzi dolgok pöttyökkel. A C, akkor ugrik a több karika és A funkciók, mint a strcopy () vagy strcat (), vagy más hasonló funkciókat. De JavaScript, használja pluses. Tehát ez csak összefűző három húrok - hello, egy nevet, majd egy felkiáltójel. Szóval, mikor és miért van ez a funkció neve is? Nos, akkor gondolom a HTML az alján. Miért köszönt () nevű vagy mikor? Úgy látszik, amennyire én tudom, a be, amikor az űrlapot elküldték, Azt fogom tenni, amit a belül ilyen idézetek. És különösen, fogom hívni köszönt (), majd vissza hamis. Nos, lássuk, mi a net hatás itt először. Hadd megy előre, és írja be , mondjuk, Loren, elküldése. Helló Loren. Lássuk, lehet, hogy ez csak szerencsés végrehajtását. Nem. Szóval ez írja ki, amit név, amit ténylegesen oda. De vegyük észre, mi nem változik. Az URL-cím mindig dom-0.html. Nincs register.php. Nincs másik fájlt. Nincs művelet attribútum. Szóval mi ez a return false feltehetően csinálsz? Miért hívom üdvözlöm (), majd vissza hamis talán? Amit általában történik, ha rákattint Küldje el olyan formában, hogy még van látott az elmúlt héten? Közönség: [hangtalan]. DAVID MALAN: Magától valahol, nem igaz? Magától néhány cél URL. De nem akarom, hogy ez megtörténjen itt. Azt akarom, hogy a weboldal, hogy teljesen dinamikus, mint a Gmail, ahol ha egyszer már ott, maradj ott. Az URL nem változik oly módon, hogy jelzi, hogy a teljes oldal újratöltése. Inkább csak azt, hogy valamit változtatni mint a nyomtatás valamit itt a képernyőn. Hát hadd tisztítsa a egy kicsit. Hadd nyissam fel nem dom-0, de hadd nyit dom-2. Csak így már láttam néhány szintaxis itt. Kiderül, hogy amit most nem használ nyers JavaScript. Tehát ez valóban a nyelv JavaScript. Néhányan talán tudják a könyvtár nevű jQuery. Tehát jQuery nem ugyanaz dolog, mint a JavaScript. Ez csak egy könyvtár, egy nagyon okos férfi írta, és népszerűsítette az ilyen , hogy szinte mindenki a világ most használ, jQuery használatakor JavaScript. És első pillantásra, őszintén szólva, ez úgy néz ki, egy kicsit rejtélyes. De rájössz, különösen akkor, ha megy ott a végső projekt web fejlesztés, akkor rájössz, hogy ez tisztítja a dolgokat, és takarít meg elég néhány sornyi kódot. Úgyhogy csak pillantást, hogy milyen ebben a formában működik. Figyeljük meg, mi nem tudom eltávolítani látszólag az én HTML-t? Nincs a submit handler hogy úgy mondjam. Nincs attribútum. Mert tudod, milyen Én nem nagyon szeretem? Úgy éreztem, hogy hullottak a régi szokások is. Csakúgy, mint azt kezdte érezni hanyag összekeveredni a CSS-t és HTML, mert te olyan dobás különböző nyelven jelent meg a helyen, hasonlóan volt ez kezd érezni mint egy rossz út, hogy menjen le, ahol Teszlek JavaScript kódot belül az én HTML helyett faktoring ki. Szóval ez a tanulság. A dom-2.html vagyok faktoring ki. És én a dolgokat kissé másképp. Most, megyek hullám kezem , hogy mi ez a valóban a motorháztető alatt. De csak most fel, hogy az első sort ebben a könyvtárban úgynevezett jQuery éppen azt jelenti, ha a dokumentum elkészült, tegye a következőket. Mivel a weboldalak is eltarthat egy ideig betölteni. Lehet, hogy a lassú internet kapcsolat, és lehet, hogy forog és fonás, és végül van töltve. Ez a vonal a kód csak azt mondja várni az egész oldal készen áll, a dokumentum kész, végrehajtása előtt ezt a kódot. És most észre, ez valószínűleg a leghasznosabb első elvenni jQuery. Ez a vonal itt nagyon hasonló szellemben hogy ez sokkal hosszabb sort itt. Mivel nyers JavaScript kódot, ott létezik egy dokumentum teljes objektum egy függvényt nevű getElementById () az emberek, aki azt írta, jQuery egyszerűsített hogy csak mondani, dollár jelet, majd a belső zárójelben fel két idézet, majd hogy egy hash szimbólumot, majd a egyedi azonosítója, aki megragad. Tehát ez egyenértékű document.getElementById. Közben. Submit csak azt jelenti, a benyújtása bármilyen formában te utalva a bal oldalon, menj előre, és végre ezt. De ez most már a kíváncsiság is. Mi a furcsa, hogy mi Már kiemelt itt? Nem csak ez a fajta szintaktikai új, van még valami hiányzik. Közönség: Ez csak hívott függvény? Ez nem hívják figyelmeztetés? DAVID MALAN: Igen. Nos, alert () nem működik itt, hogy tisztességes. De nincs említés a név, mint tudod, foo vagy valamit itt. És valóban, ez az egyik jellemzője A JavaScript ez elég erős, de teljesen új. És a PHP valójában ezt is. Hadd menjek előre, és nem valami gyorsan. Hadd menjek előre, és hogy ezt itt. Hadd csináljam én. Funkció. Nevezzük ezt handler (). A függvény úgy mondjam. Valami, ami kezeli, működését. Hadd mossam le a behúzás. És hogy ezt itt. És tedd, hogy itt van. Aha. OK. Tehát most van egy függvényt nevű handler (), hogy én nem igazán tudom mit csinál még. Csak még a cucc. Hoppá. Tuk túl sok. Csináljuk ezt. Rendben van. Bocsánat. Rendben van. Hadd tegyem ezt. OK. Úgy néz ki, szép és egyenes elő most. Hadd tegyem ezt. Tedd ezt. És az OK gombra. Tehát most, tegyük ezt itt. Nincs több programozási menet közben. OK. Tehát most, menjünk vissza a , ahol a történet elkezdődött. Korábban azt mondtam, hogy ez a sor itt azt jelenti, ha a dokumentum elkészült, menjen előre, és erre a célra. Mit akarok? Hát konkrétan akarok menni előre, és tegye a következőket. Végre ezt a kódsort, majd mit akarok, hogy nem is hívja ezt a működik, ha az űrlap elküldése. Most ez az, ami érdekes. Ez nem maga a funkciót. Figyeljük meg, én nem hozta zárójel Itt a szokásos módon. Én szó szerint halad egy függvény neve handler () másik funkció nevezett be () az argumentumot bár ez olyan, mint egy változó. És ez az egyik jellemzője a JavaScript, a függvények önmagukban tényleg csak tárgyak. Sőt, ők tényleg csak változók valamilyen. És ha a neve a függvény handler (), nincs ok, amiért nem adja át az argumentumként itt. És ez azt jelenti, ha az űrlap Az ID a demo nyújtott be, ezt a funkciót. De most, ha kibont mindezt, akkor miért azt talán nem ez egy perce? Nos, ez egy névtelen függvény. Mert őszintén, rájöttem, miért vagyok a fáradságot, hogy vesztegeti az idejét nyilvánító nevű függvényt handler () csak a hívás ez az egyik, és csak egy helyen? Ha nem kell a nevét, és én nem kell hívni, hogy több helyen, nézzük csak végrehajtja a funkciót ott, ahol szükségem van rá. És így JavaScript és a PHP támogatást milyen az úgynevezett anonim funkciók engedje meg, hogy pontosan erre van. De mi csak vakarja a felületet. Nézzük kötekedik csak egy pár végső példák itt. Ha bemegy quote.php. Vegyük észre, hogy ez valójában egy PHP funkció, a PHP program, hogy én írtam , hogy arra számít, HTTP nevű paramétert szimbólum, és én is át a érték, mint a FB. És ha tényleg nézd meg a forrást kód, ez lekérdezése egy ingyenes weboldalon nevű Yahoo Finance, mint p-set hét, és ez vissza nekem valami látszólag a formátum ismert, JSON - JavaScript Object Notation. Ez csak egy tárgy. Figyeljük meg a kapcsos zárójelek, idézőjelek, a vastagbél, és a vessző. Most közben, ez elég jó. Mert valószínűleg használni egy programozási nyelv generálására URL hogy néz ki dinamikusan, ugye? Tudok változtatni ezt a Google és kap vissza a Google részvényárfolyam a $ 1,017.55. Tehát lássuk, ha nem tudjuk használni ezt most. Hadd menjen ajax-0 itt, ami úgy néz ki, mint a következő. Ez csak egy honlap, amely egy űrlapot egy gombot. Hadd itt megy előre, és írja be a YHOO a Yahoo részvényei szimbólum, kattintson a Get Idézet, és most észre kaptam figyelmeztetést a 32,86. Hadd valóban megy egy szakértő változata ezen az oldalon, verzió kettő, írja be mondjuk a Microsoft, MSFT. Get Idézet. És most veszi észre, nem állnak. Figyeld meg, amikor azt mondja ár meg kell határozni? Ott van a legegyszerűbb példa, hogy utal, amit Gchat, és a Facebook Chat, és a Gmail és más hasonló weboldalak csinálnak a valóban változik a weboldalt. Figyeljük meg ezt. Hadd töltse újra a lapot. Hadd nyissa meg a Chrome felügyelő. Hadd menjek, hogy az elemek fület itt. Most már észre, ha nagyítani ide, és nyissa ki, észre, hogy ez az én HTML DOM - a Document Object Model. Ez az én HTML. De most észre, annak ellenére, hogy a helyzet hogy egy kicsit nehéz, hogy azt a két helyen egyszerre, ha azt írja az FB itt, nézd meg az alján csak a képernyő. Ez ténylegesen változik a HTML menet közben. És ez ezt egyszerűen csinál valamit, mint ez. Ha nyit ajax-2, értesítés végrehajtási valami olyan szexi, mint , hogy annak ellenére, hogy elég csúnya, de olyan bonyolult, mint, hogy funkcionálisan, van néhány HTML az alján. De észre én is tag. Már nem használt ilyet, de ez mint egy, de ez nem kényszeríti Mindent rá egy új sort. Ez csak azért egy téglalap alakú terület ugyanabban a sorban lényegében. Figyeljük meg, hogy én adtam azonosító az ár. És kiderül, ugyanazzal a JavaScript könyvtár, van egy funkcióval úgynevezett quote (), hogy hívják, amikor Az űrlap elküldése. És mit csinálok ez. Én nyilvánító változó JavaScript úgynevezett url, megtakarítás az érték quote.php? szimbólum =. Más szóval, én magam is kezdem hogy készítsen egy HTTP kérést, majd a Én összefűző rá, hogy a plusz bármilyen elem az azonosító A szimbólum, amely észre, hogy text field itt lent. Tehát ugyanúgy, mint volt formában a múltban. És akkor kiderül a jQuery, ha hívni. val (), hogy hívja a val függvény egy értéket a funkció, hogy lesz amit a felhasználó gépelt be És akkor az összes hálózati forgalom hogy történik ez. $. GetJSON. És mint félre, dollár jel csak egy rövidített írásmódot. Ez tényleg jQuery.getJSON. Vigyél a JSON erről a címről, és mikor A kérés érkezik vissza, hívja ezt a funkciót, és adja át az érvelés bármi jött vissza a szerver. Más szóval, ha visszamegyek a a böngésző, és megyek vissza quote.php, amit a böngésző tesz, hogy ez a darab az adatok. És amikor elmegyek erre a weboldalra itt, észre, ha inkább megy a hálózat fülre, és törölje azt, majd írja be valami hasonló GOOG a Google és a Get Idézet észre a lap nem változott. De egy HTTP kérelmet, és mi jött vissza ide, ha megnézzük a válasz egy csomó JSON hogy elérhető végre a ezt az egyszerű vonal itt. Az adatok, mi ütött a szerverről. Az ár a neve kulcs érdekel. Tehát data.price ad nekem. Most időközben, és ez a az utolsó példa. Meg tudod csinálni még többet az oldalon. Egy valóban jól kettő. Mi hozhat vissza tag, ha emlékezni erre. Ez a JavaScript. Meg tudjuk csinálni. Nagyon izgalmas. Majd hagyjuk, hogy a Cliffhanger. De még izgalmasan, akkor a dolgok, mint ez. Ha elmegyek a térinformatikai-1, kiderül, hogy a Chrome tudja, hogy mi vagyunk szélességi hosszúsági 42,37. -71,10. Tehát van még több is az Ön rendelkezésére. De erről bővebben a jövő héten. Hétfőn találkozunk.