[Powered by Google Translate] [Week 9]
[David J. Malan - Harvard University]
[Ez CS50. - CS50.TV]
Rendben van. Üdv újra. Ez CS50, és ez a kezdete hét 9.
Ma különösen a következőkre irányul design, már nem összefüggésében C
de a kontextusában PHP és egy kis SQL és egy kis JavaScript,
különösen a vége felé mind Pset 7 és a végleges projekt.
Valójában, ha ezen a ponton a projekt végső
ahol feltehetően egy órával ezelőtt, vagy ha Ön legalább kezdett, hogy néhány gondolat
a projekt végső és gondol szeretne együttműködni 1 vagy 2 osztálytársak,
ha sikerül összekötő említett osztálytársakkal,
bátran töltse ki a formanyomtatványt cs50.net/partners/form.
Ez csak megkérdezi, hogy ki vagy, hogy milyen projekt gondolkodik,
hol laksz csak logisztikai okokból.
És akkor, ha azt szeretnénk, hogy tartsa a szemét a következő héten, vagy úgy a táblázatkezelő URL ott,
akkor majd megjelenik egy csak olvasható változata a Google doc
ahol vagyunk információ begyűjtésére.
Tehát, ha szeretne dolgozni valakivel, minden eszközzel bátran, hogy elérje az embereket
keresztül, hogy a mechanizmus.
De a többség az emberek munkát egyedül. Ez teljesen rendben van.
Tehát nem érzem, hogy ez bármilyen módon kötelező.
Pénteken csak én és néhány a csapat itt,
üres színház a legtöbb.
Voltak 3 turisták ült ott, úgy, hogy egy kicsit kínos.
Mi beszéltünk volt, adatbázisok és beszélgettünk Pset 7 egy kicsit.
És ha nem történt meg elkapni, hogy a videó csak még, ez rendben van.
Megpróbálom meghatározni azokat a kifejezéseket, hogy mi egyébként magától értetődőnek
alapuló pénteki előadás.
>> De ma megpróbálom rávenni, hogy a pont
hogy nem csak, hogy képes ilyet Pset 7
de tényleg megértését, mi történik a motorháztető alatt,
különösen néhány olyan absztrakciók, hogy bevezetett a functions.php fájlban
hogy életetek egy kicsit könnyebb, de úgy, hogy végül megértsék
hogy amikor a képzés kerekek jön le néhány hét alatt még mindig életben
a világban, és nem ez a cucc nélkül CS50 keret alatt van.
Ez a $ _SESSION, azok számára, akik ismerik
vagy aki már fogott a videó pénteken, mit SESSION tegyünk
egy PHP-alapú webes alkalmazás?
Ez egy szuperglobális változó, amely azt jelenti, hogy hasonló szellemben a GET és POST
és néhány más, de mi ez a dolog hasznos?
>> Milyen SESSION esetén alkalmazható? Igen. [Hallgató] bejelentkezés
Tessék? [Hallgató] bejelentkezés bejelentkezés Valóban.
A Pset 7 mi ezt SESSION szuperglobális megkönnyítése bejelentkezés
És mi a szép ebben szuperglobális, hogy ez egy asszociatív tömb.
Egy asszociatív tömb, visszahívás, csupán egy tömb, de amelynek indexei már nem kell számot
mint a 012. Lehetnek számokat vagy lehetnek akár szálakat.
És ha már lebukott Pset 7 mégis, akkor emlékszem, hogy tárolja a kulcsot nevű azonosító
belsejében asszociatív tömb, amelynek értéke valami hasonló 123 -
függetlenül a jelenleg bejelentkezett felhasználó azonosítója.
A motiváció az, hogy még akkor is, ha a felhasználó által meglátogatott localhost
vagy honlapom általában, és akkor már bejelentkezett,
még akkor is, ha azok nem kattintson egy linkre, vagy térjen vissza a honlapomon 5 percig
vagy akár egy órát, vagy akár egy nap, de elhagyja a böngésző ablak nyitva,
ezen keresztül szuperglobális is emlékszem, hogy azokat bejelentkezett
>> Más szavakkal, lehetővé teszi, hogy a hosszú távú tárolására kissé bármit szeretnék egy felhasználó.
És azt lehet gondolni, hogy tényleg, mint a megtestesülése a bevásárló kosárba.
Helyek, mint az Amazon nyilvánvalóan segítségével tegyük a dolgokat egy bevásárlókocsi,
de a HTTP, a protokoll, hogy a hatáskörök az interneten, a hontalan
abban az értelemben, hogy amikor meglátogat egy honlapot,
a legtöbb nem rendelkezik valamilyen állandó hálózati kapcsolattal
a böngésző és a szerver.
Amint már letöltötte a HTML és a JPEG és a GIF-ek, meg minden,
A kapcsolat megy el, és csak egy példányt a HTML és miegymás a szerverről.
De ha a szerver akar emlékezni valamit rólad,
a teher a szerver, hogy ténylegesen rögzíti ezt az információt.
És így a programozó, aki ellenőrzése alatt a kiszolgáló
nem tud a legtöbb, amit akarsz belsejében szuperglobális asszociatív tömb
és ott lesz a következő alkalommal a felhasználó jön vissza,
hogy ez percig, vagy akár nap múlva, hacsak nem zárja be a böngészőablakot,
ekkor SESSION eltűnik.
Szóval ez efemer tárolás, ez nem tartós, és ez azt jelentette, hogy menjen el
amint a felhasználó bezárja a böngésző - nem csak, hogy a lapon, és gyakran az egész böngésző,
ezáltal hatékonyan fakitermelés a felhasználó ki.
Hogy van ez a dolog, amit ténylegesen végrehajtsák?
Vessünk egy gyors pillantást egy egyszerű példát néztük pénteken.
Azok számára ismeretlen volt olyan egyszerű, mint ez.
Ez egy olyan weboldal, amelynek egyetlen célja az életben, hogy elmondja nekem
hányszor jártam ezen az oldalon.
Ez az első alkalom, hogy itt hétfőn jártam, tehát azt mondja 0 alkalommal.
>> De ha elkezdek újratöltése ezen az oldalon, azt mondja 1 alkalommal, 2, 3, 4, 5,
és ez végül csak tartani a számlálás fel, fel, fel, fel, fel
Minden egyes alkalommal, amikor ténylegesen kattintson újratöltése rajta.
Hogy ez a munka? Hadd menjek belül a fájl neve counter.php.
A felső része ez az egész kék, megjegyzés, de az érdekes része itt van.
On line 13 hívjuk ezt a funkciót session_start,
és ez szó szerint csak annyit kell tennie, ha azt szeretné, hogy a hozzáférési
Ennek a különleges szuperglobális $ _SESSION nevezett.
Ez teszi minden lehetséges, és majd meglátjuk, egy pillanat, hogy ez minden lehetséges.
Összhangban 16 értesítésben, hogy mit csinálok.
Ha a kulcs, az úgynevezett számláló - más szóval, az index érték - "számláló"
létezik belsejében nevű tömböt SESSION, akkor mit csinálok vele a sorral lejjebb?
Mit 18. sor csinál?
>> [Hallhatatlan diák válasza] Mi ez? [Hallgató] tárolása az értéket. Jó.
Ez tárolja az értéket, ami a SESSION most egy új helyi ideiglenes változó,
$ Számláló csupa kisbetűvel.
Figyeljük meg, hogy a PHP már egy kicsit lusta itt.
Figyeljük nincs semmilyen említést int vagy float vagy string vagy ilyesmi
mert a PHP gyengén gépelt, ahol nem kell meghatározni a változó típusát,
és ebben az esetben van, amit nem is kijelentette, hogy még.
Én kimondó belül e kapcsos zárójelek és ellentétben a C, ez valójában rendben.
Nem számít, milyen mélyen beágyazott a változó nyilatkozat PHP -
belül kapcsos zárójel, belül kapcsos zárójel és hasonlók -
akkor ebben a pillanatban időben léteznek a hátralévő a program,
jobb vagy rosszabb.
Így azonnal globálissá válik, amint meg azt csinálunk itt.
>> Egyébként, ha nem találom, hogy van valami a SESSION szuperglobális,
Én nyilvánvalóan inicializálás ezt a változót számláló 0-ra,
ezzel csak feltételezve, hogy a felhasználó még soha nem volt itt korábban.
És akkor ez a tanfolyam növelésével a számláló hogyan?
Én frissítéséről érték van benne e asszociatív tömb
azáltal, hogy egyenlő bármi ellen jelenleg + 1.
Ha lapozzunk le ide, hogy a HTML az oldal, ez valóban nagyon egyszerű.
Csak annyit, hogy a szervezetben az ezen az oldalon: "Ön felkereste ezt a webhelyet, így-és-ez alkalommal."
És ez egy PHP konstrukció.
Ha ezt: <? =, Ez egyenértékű azzal, amit ténylegesen funkció?
Ez tényleg megfelel valami hasonló printf, amit láttam sokszor C,
de mint Ön is tudja már a specifikáció Pset 7,
print is függvénye, hogy csak kiírja valamit, valójában nem használható formában kódok,
és akkor tulajdonképpen mondani echo is.
Mindannyian alig észrevehetően eltérő bár a nettó hatás végső soron ugyanaz.
Szóval ez a használat az egyenlőségjel csak egyfajta elegáns módja, hogy
több tömören, mint egyébként képes.
Szóval ez az egész oldalon nem. Ez kiírja a számláló értéke.
Hogy ez az egész valójában történik?
Talán emlékeznek egy hét múlva ezelőtt elkezdtem keresni a motorháztető alatt
hogy milyen a weboldal működik használatával Inspector lapon.
>> Chrome van ez mind a Mac verzió, a Windows verzió, és még a Linux változat,
és a Firefox és az IE hasonló mechanizmusokat, amelyek által van ez a beépített debugger
belül a böngészőt.
Vessünk egy pillantást a következő.
Van egy csomó tabok itt, és emlékeztetnek arra, hogy a bal oldali egyik Elements,
és nem számít, mennyire godawful a HTML és JavaScript van egy oldal,
Emlékeztetek arra, hogy az Elements fülön ténylegesen navigálni a HTML hierarchikusan
és szép és szépen.
Szóval, ha akarsz tanulni a honlapon, mint a Google vagy a Facebook
vagy tényleg olyan website, rájönnek, hogy akkor valószínűleg jobb
nézi a forráskódot ezzel szemben megtekinti a nyers forrás,
amely lehet a rendetlenség, mint láttuk, különösen a Google honlapján.
Szóval, ha ehelyett kattintson a Network fülre itt,
lássuk, mi történik, amikor el erre az oldalra.
Először is hadd törölje a cache.
Fogok belemenni Beállítások Chrome, és aztán megy History
majd az Összes törlése böngészési adatokat.
Lehet használni ezt más célokra, [nevetés]
de amikor a fejlődő honlapok, ez valóban hasznos -
ha nevetsz tudod. [Nevetés]
Ez tényleg nagyon hasznos lehet, ha a fejlődő honlapok, mert a valóság
dolgok, mint a sütik és a dolgok, mint a tárolt HTML fájlok, JavaScript fájlok gyorsítótárban
ténylegesen válhat egy nagy fejfájást, mert ha bármilyen okból
A böngésző úgy dönt, hogy néhány cache fájlt, és mégis, amit tett módosításokat, hogy a fájl a szerveren
de a böngésző nem igazán felismerte, hogy a fájl változott
és ezért valójában nem újra letölteni akkor is, ha rákattint a Reload gombra,
az egyik surefire módja csak győződjön meg róla, hogy a hiba nem az Ön kódot,
ez a viselkedés a böngésző, hogy megy itt az Ön böngészőjében
és csak törölje a teljes történetét, így nincs zavar.
>> És ha igazán akar lenni paranoid, lépjen ki a böngésző, indítsa újra azt,
majd győződjön meg arról, hogy minden megfelelően működik.
Tehát röviden, a gyorsítótár ürítése jó, ha csinál fejlődését.
Tehát itt van a Network fülre.
Én korábban már járt a helyszínen 9-szer, de hadd menjen előre, és most kattintson a Reload.
És én vissza 0-ra.
Nézzük valóban látni, hogy van ez, hogy a SESSION szuperglobális hajtják végre.
Megyek, hogy kattintson az 1 HTTP kérés, hogy történt,
és ez a hibakereső ablakban nézzem belül ezt.
Itt látom, csak a választ a szerver, ami nem érdekes.
Láttam ezt a tetszőleges számú módon.
De mi technikailag érdekes a fejléceket.
Ha lapozzunk le ide, és elsősorban a kérés fejlécet, és kattintson view source,
mit fogok látni, hogy szó szerint a HTTP-kérelem
hogy csak ment a böngésző, hogy a szerver,
GET, hogy az operatív szó, majd a / counter.php hogy a fájl nevét,
HTTP/1.1 csak, hogy a változat, hogy az én HTTP böngésző segítségével.
Ez a vonal itt egy kis emlékeztető a böngésző a szerver, mi a neve a szerver
, hogy beszélni akar.
És akkor a többi ezt néha érdekes, de nem lényeges most.
>> Ez csak egyfajta kíváncsiság.
Cryptic bár ez húr, bármikor a böngésző meglátogat egy weboldalt
akkor tájékoztatja a szerver, amit Ön által használt böngésző
és milyen operációs rendszert, amit használ, és milyen verziót cikke.
Szóval, ha valaha is azon, hogyan weboldalak, mint a CNN és ​​miegymás
tudom, mi a százalékok a Mac-felhasználók a weben, PC felhasználók számára,
IE felhasználóknak, Chrome felhasználók és hasonlók, ez azért van, mert minden a mi böngésző
azt mondják minden egyes weboldal odakint, amik vagyunk.
Ez nem feltétlenül tartalmaz személyazonosításra alkalmas adatokat,
de ez nem mond a szerver milyen IP-címe, és milyen böngészőt és operációs rendszer használ.
Szóval, ez az, ahol ez az információ.
De mi még érdekesebb most, amikor ezek a megbeszélések a válasz fejlécében.
Hadd kattintson többet forrás mellett választ.
Milyen érdekes, itt van egy pár dolgot.
1, akkor jöttem vissza a status kód 200.
Mi soha nem látni ezt a helyzetet kódot, mert azt jelenti, hogy minden rendben van.
Ez azt jelenti, szó szerint rendben szemben valami mást.
Mi több, néha látni, hogy ez rossz? [Hallgató] 404.
404, a fájl nem található, 403 lehet, botladozó után már,
ami tilos, ami azt jelenti, hogy elfelejtett chmod valamit, valószínűleg.
És van egy csomó más.
>> Itt lent, ez egy kicsit őrült.
Én tényleg csak írtam ezt a fájlt, néhány perccel ezelőtt a beilleszteni gedit.
Miért ezt az oldalt lejár 1981-ben, mielőtt valóban volt egy Web?
Mi folyik ott?
>> [Hallhatatlan diák válaszidő] Az időbélyeg. De miért?
Ez kissé önkényes, de ez tényleg hasznos.
Mi ez azt mondja, hogy a böngésző ez a PHP fájlt, amit csak kért már lejárt.
Tény, hogy 30 évvel ezelőtt lejárt.
De mit jelent ez valójában?
Ez csak azt jelenti, a következő alkalommal, amikor a felhasználó meglátogatja ezt az oldalt,
akár ismételt berakás vagy beírja az URL-t a címsorba,
győződjön meg róla, menj és hozz egy új másolatát.
Ez egyfajta példája cache busting,
egy hülye szó, csak azt próbálja kedvét böngészők
származó ténylegesen cache HTML, hogy a már küldött a kiszolgáló
úgy, hogy nem véletlenül sújtotta reload majd látni ugyanazt a verzióját a fájlt.
Te tényleg akarjuk, hogy a szerver küld egy új példányt.
Így a tény, hogy 1981-es csak azt jelenti, hogy az, amit a készülék választja
mint egy önkényes időpont a múltban.
De az igazi szaftos vonal most ez.
Még mielőtt 50 akkor valószínűleg halványan ismerős cookie-kat.
Ahogy a most, különösen a kevésbé kényelmes, vagy a kettő között,
ami egy cookie-t a megértést most
noha vagyunk arról, hogy a megértés több technikai?
Mi az a cookie? Igen.
[Hallgató] Információk a felhasználó számára, mint ha már írva a felhasználói nevet, vagy valami.
>> Jó. Ez az információ a felhasználó számára, függetlenül attól, hogy írtad a saját felhasználói nevét már.
A cookie-k olyan módon, amellyel szerverrel tud emlékezni valamit a felhasználó.
És mi a cookie valójában egy szöveges fájl, vagy valamilyen bájtok sorozata
ez által ültetett a szerver belül Ön böngészőjében,
és belül, hogy a fájl vagy azok közül bytes valamiféle azonosító.
Talán ez a szó szoros értelmében a felhasználó nevét, de gyakrabban ez valami rejtélyes külsejű
mint ez a dolog itt - bo8dal3ct és így tovább - ez igazán nagy alfanumerikus karakterlánc
ez tényleg csak azt jelentette, hogy egy egyedi azonosítót az Ön számára.
Vagy lehet gondolni rá, mint egyfajta virtuális kéz bélyegző.
Ha megy valami klubban vagy egy vidámpark, hogy ne feledje, hogy amit ténylegesen kifizetett
és ment be, raktak egy kis piros matrica a kezed valamilyen,
és emlékezteti az emberek a pultnál, hogy a már kifizetett
és akkor jön és megy, ahogy tetszik.
A cookie-k egy kicsit hasonló szellemben erre.
Amikor először jártam ezen a honlapon, mint én csináltam törlése után a cache,
a web szerver, a készülék ebben az esetben, hogy egy bélyeg a kezem
akinek a neve PHPSESSID, session ID,
amelynek értéke a nagyon hosszú alfanumerikus karakterlánc.
>> Szóval ez most valami emblazoned a kezem, hogy a következő alkalommal, amikor megüt újra
vagy manuálisan látogasson el ezt az URL a böngészőben,
a böngésző definíció szerint a HTTP fog bemutatni a pecsét
újra és újra és újra.
Így annak ellenére, hogy a kiszolgáló nem feltétlenül tudja, hogy ki vagyok,
ők legalább tudják, hogy én vagyok az ugyanaz a felhasználó, vagy legalábbis, pontosabban az azonos böngészőt.
És ez végül is hogyan SESSION szuperglobális végrehajtását.
A szerver nem tudja, hogy ki vagy, ha újra egy honlapot a második vagy a harmadik alkalommal
kivéve, ha ezt az pecsét.
És amint bemutatja, hogy a kéz bélyeg,
a web szerver lényegében bemegy egy kis adatbázis saját
és ellenőrzéseket, oké, én most láttam a pecsét, a felhasználó bo8dal3ct és így tovább.
Hadd lássam milyen információt a programozó tárolt
belül a szuperglobális erről a felhasználót
aztán hadd győződjön meg arról, hogy az adatok ismét belsejében SESSION szuperglobális
annak érdekében, hogy a programozó újra elérheti, hogy az adatokat
még ha úgy is meg néhány perc vagy óra.
Más szóval, a cookie-kat, amely kapott egy rossz rap egy ideig
mert a bizonytalanság a böngészők és azok valóban megsértik a magánélet és mindezt
valójában nagyszerű segédprogramot, mert ezek nélkül
akkor folyamatosan lehet bejelentkezni minden Facebook meglátogatott oldal
vagy minden Gmail e-mailt olvasni, ha a böngésző nem volt valamilyen módon az emlékezés
hogy a már hitelesített.
>> Tehát ily módon cookie-kat küldeni oda-vissza az egész vezetéket.
Másik érdekessége a cookie-kat, különösen itt, az, hogy ez teljesen kikerültek.
Nincs titkosítás folyik itt egyáltalán,
és valóban én vagyok a HTTP abban a pillanatban.
Az egyik kedvencünk pillanatok CS50, amely jelenleg 2 évvel ezelőtt,
volt, körülbelül abban az időben egy szerszám hívott Firesheep jött ki.
Ez egy szabad szoftver, hogy történt egy biztonsági kutató
mint egy ébresztő a közösség azt mondani, hogy mennyire atrociously végre
egyes hitelesítési mechanizmusok a világhálón voltak.
Így egy ideig, a Facebook már majdnem teljesen HTTP, HTTPS nincs.
És akkor is, ha fogalma sincs, hogyan működik a crypto, S biztonságos
így ez azt jelenti, hogy ez legalább néhány titkosítási szó.
Facebook nem titkosítására használt felhasználói nevek és jelszavak,
de amint néztél meg pokes vagy az üzeneteket, vagy a news feed,
minden, amit nem titkosított.
Így volt Gmail, amíg csak egy évvel vagy 2 napja.
Minden alkalommal, amikor bejelentkezett, igen, ők használják a biztonságos titkosítás,
de ezt követően nem. És miért lenne az?
Miért nem csak használja kriptográfia minden alkalommal használati esetek, mint ez?
Mi ez? Azt hiszem, hallottam valamit. [Hallgató] Speed.
Speed, ugye? Vannak módszerek körül ez.
De ha csak ilyen belegondolsz logikusan, ha titkosítani valamit,
meg kell csinálni, legalább egy kicsit több munka.
A Pset 2 Amikor végre Caesar vagy Vigenère sőt Crack,
Csak nyomtatás egy string viszonylag egyszerű.
Titkosítása, majd a nyomtatás egy string minimálisan igényel egy kicsit több munkával.
>> A szuper népszerű weboldalak, mint a Google és a Facebook,
ha kell több munkát minden egyes felhasználó minden egyes weboldalt látogatnak,
hogy csak úgy több CPU időt.
És ha kell több CPU időt, akkor szükség lehet több kiszolgálót,
ami azt jelenti, amire szüksége lehet több pénzt.
És sok évig ez így tényleg nem volt a legjobb gyakorlatot.
Az emberek SSL titkosítás csak akkor, ha szükséges.
De kiderült, és ahogy ez a fickó a Firesheep készült szuper világos,
amikor a srácok, akik jelenleg a Facebook most -
Elfogyott a kíváncsiság, lássuk akkor fess fel.
Ha a Facebook-on most néhány lapon, még ha ez nem előtérbe,
Az Ön URL HTTP vagy HTTPS?
[Több diák] S. S? [Nevetés]
Oké. Bármely HTTP? Csak 1? Oké.
Szóval mindannyian csapkod a fickó Facebook fiókot most.
Az esetek többségében ez vált be van kapcsolva alapértelmezés szerint legalábbis bizonyos weboldalak.
És a hosszú történet rövid, ha a web forgalom nincs titkosítva,
nem csak a HTML megy oda-vissza az egész WiFis titkosított,
úgyhogy ne dolgokat, mint a cookie-kat menjen vissza oda az egész légi
anélkül, hogy bármilyen titkosítást.
Tehát, ha csak egy kicsit a programozás értő, vagy egy kicsit Googling készségek
találni ingyenes szoftver, amely működik ez, csak annyit kell tennie, hogy ülni Starbucks
vagy üljön a repülőtéren, ahol az általánosan titkosítatlan WiFi
és csak nézni a kulcsszavak, mint a Set-Cookie: vagy PHPSESSID
mert ha megvan a műszaki hozzáértés, hogy csak nézni a WiFi
az összes a bitek áramló levegő ezt a mintát,
akkor majd azt mondják, hogy a srác PHPSESSID történetesen bo8dal és így tovább.
És aztán újra, ha te elég technikailag hozzáértés, vagy a megfelelő eszközt,
akkor majd csak állítanod a saját böngészőjében kezdeni bemutatására, hogy a pecsét
A Facebook.com, és a Facebook csak megy azt feltételezni, hogy te vagy az a srác
mert tudják, hogy nem az, akinek te vagy, hanem, hogy van ez az egyedülálló azonosítót.
Tehát, ha lopni, hogy egyedi azonosítót, és azt bemutatja a web szerver, mint a saját,
ők csak megy, hogy mutassa meg, hogy a személy hírcsatorna
vagy az adott személy üzeneteket vagy pokes.
>> És szeretném Google most hogyan aktiválhatja HTTPS for Facebook talán.
De ez tényleg ilyen egyszerű.
És így a Facebook és a Google-on és a hasonló ütött nagyon jó ebben,
de tartsd szem ki annál minden meglátogatott webhelyek, amelyek nem használják a HTTP
és valamilyen érzékeny információk rájuk,
legyen az pénzügyi vagy személyi vagy a hasonlók.
Ha nem használja ezt, akkor nagy valószínűséggel a cookie-kat, mint ez is nagyon könnyen lopott
majd kovácsolt, és ez pontosan Firesheep tette.
Nem kell, hogy programozó.
Csak annyit kellett tennie, hogy rendelkezik internetkapcsolattal, töltse le ezt az ingyenes eszközt,
és mit fog tenni a te bejelentkezel, és akkor ez megmutatja a Facebook nevek
A mindenki Sanders, ebben a különleges bemutató, körül
és csak annyit kellett tennem, hogy kattintson a nevüket és a szoftver automatikus a folyamat
A szippantás, hogy a cookie-k, bemutatva, hogy a Facebook, mint a saját,
és íme, te léptél be
Szóval ez egy másik ilyen "ne tedd ezt" hivatalosan.
Ha van saját otthoni hálózatot, és azt szeretnénk, hogy bütykölni, minden eszközzel,
de észre ezt nem átlépni a vonalat egy egyetemi környezetben.
>> De a cél itt az, tényleg hangsúlyozni nem, hogyan kell ezt csinálni
de hogyan kell megvédeni ezeket a dolgokat.
És a triviális megoldás van, annak ellenére, hogy maga is hibás,
az, hogy valóban csökkenteni használatát a webhelyek nem használ HTTPS folyamatosan.
Szóval oldalak, mint a Facebook és a Google egyre inkább jelölőnégyzetek
ahol úgy döntenek, hogy ez a fajta dolog,
és a bankok is volt ez évek hasonló okok miatt.
Szóval egy kicsit a félelem faktor, ha tudunk. De ennyi dióhéjban.
Így a szerver emlékszik, hogy ki vagy.
És amint tudnak emlékezni, hogy ki vagy, akkor emlékszem semmire rólad
hogy a programozó tárolt e különös szuperglobális $ _SESSION nevezett.
És Pset 7 mi használjuk triviálisan csak emlékezni egy int,
nevezetesen az egyedi azonosítója a felhasználó, aki bejelentkezett,
annak érdekében, hogy tudjuk, hogy már ott korábban.
Van még kérdése majd az üléseken vagy a cookie-k vagy hasonló?
Firesheep nem működik olyan jól, már,
és van, hogy a számítógépet egy speciális vegyes üzemmódban
szóval tényleg figyel forgalom mellett magatoknak.
Tehát, ha éppen le Firesheep, észre, ez nem annyira egyszerű
mint valaha volt bizonyítani.
Rendben van. És ne csináld a Sanders. Csináld otthon.
Adatbázisok.
Az egyik dolog, amit tett Pset 7 nagyon tudatosan
volt, kapsz egy mintát adatbázis tábla felhasználók számára, hogy van néhány felhasználói azonosítók,
néhány felhasználó nevét, és néhány titkosított jelszavakat benne.
És látni fogod, ha még nem tette meg, akkor kell majd változtatni a táblázat egy kicsit.
Fogsz kell adnod pár cache az egyes felhasználók, hogy a táblázatban,
és te lesz, hogy újabb történelmet asztal, a portfóliók asztal,
vagy talán nevezzük valami mást.
De szempontjából gondolkodni, hogyan kell ezt csinálni, hadd megnyitni ezt az eszközt
amire pénteken, de ha ismeretlen, a készülék jön egy eszközzel
nevű phpMyAdmin amely véletlenül PHP-ben íródott,
de a célja az életben, miután jelentkezzen be itt jharvard a bíbor,
hogy adjon nekem egy felhasználóbarát módon megtekintésének és a változó az adatbázis.
>> Az adatbázis futok be a készüléket hívják MySQL.
Ez nagyon népszerű, és ez egy ingyenes, nyílt forráskódú adatbázis, ami csodálatosan könnyen kezelhető,
különösen az első véget ér, mint ez.
Mi ez az eszköz lehetővé teszi, hogy tegyek, például, nem piszkálni körül táblázatokat.
Hadd menjek előre, és ezt.
Pénteken hoztunk létre egy táblázatot nevű tanulóknak, hogy szuper volt egyszerű.
Ez volt 3 oszlop - id, név és e-mail - és kézzel ki egy pár sort
mint David és Mike ebben a konkrét példában.
Nézzük ezt egy kicsit tovább, és tegyük fel, hogy szeretnénk emlékezni látna
mint név és e-mail egy felhasználó.
Hadd kattintson Structure ide a tetején.
Továbbá, a Pset végigvezeti a szükséges lépéseket itt,
úgyhogy ne aggódj, ha néhány ilyen egy kicsit gyors.
Akkor fogok kattintson ide.
Megyek hozzá néhány oszlopok száma után email
mert azt akarom, hogy adjunk valamit, mint ház.
Elfelejtettem felvenni egy diák házában.
Hadd kattintson az Indítás gombra, és most már ebben a formában sajnos egy kicsit széles balról jobbra,
de fogom hívni a nevét e téren ház,
, majd az I. típusú most már választani.
Szóval vessünk egy rövid beszélgetés, ami a különböző típusú MySQL
mert mivel a PHP gyengén gépelt, és ez a fajta játszik a gyors és laza típusú,
egy adatbázisban, különösen ez szuper fontos, hogy ténylegesen használni gépelés az előnyt
mert az egyik dolog, MySQL és egyéb adatbázis motorok tehet Önért
van arról, hogy nem teszel hamis adatokat az adatbázisban.
Ez a fajta szabad hibaellenőrzés áll az Ön rendelkezésére.
>> A ház már nyilvánvalóan nem akarjuk, hogy legyen egy int, amely egy 32-bites értéket MySQL.
Mi nem beszélünk röviden pénteken mintegy varchar, amely áll a változó hosszúságú karakter.
Mi ez? Ez lehetővé teszi, hogy meghatározza, hogy szeretné, hogy ez egy string valami.
Nem igazán tudom előre, hogy mennyi ideig van,
úgyhogy önkényesen mondjuk egy ház neve lehet 255 karakter,
de mehet a 32, 64 - tetszőleges számú igazán.
De az előnye egy varchar egy mező nevű char mi?
Csak ösztönösen ha lapozás után itt, észre van char és varchar van.
Varchar változó hosszúságú char, char egy fix hosszúságú kar.
Így kizárólag a ennek a meghatározásnak, mi az előnye és hátránya az egyes ezek?
Más szóval, aki törődik a különbséget, vagy miért érdekel?
>> Igen. [Hallgató] Varchar rugalmasabban, de több memóriát.
Jó. Varchar veszi fel többet - Lássuk csak. Nem vagyok biztos benne, hogy hallottam ezt a jogot.
Tudsz mondani, hogy még egyszer?
[Hallgató] mondtam varchar talán több rugalmasságot, de több memóriát.
Érdekes. Oké. Varchar talán így több rugalmasságot, de több memóriát.
Az utóbbi nem feltétlenül igaz.
Attól függ, hogy a kontextus, de térjünk vissza erre.
>> [Hallhatatlan diák választ] Pontosan.
Ez valójában a helyzet, hogy char általában használ több memóriát
mivel a char, mint a C-ben, olyan, mint egy húr, ez egy sor karakter.
Tehát, ha mondjuk egy char területen hossz 255,
Az adatbázis a szó szoros értelmében fog adni 255 karakter.
És ha a ház végül is Mather és 6 karakter összesen,
te pazarlás több mint 200 karakter.
>> Tehát egy varchar hatékonyan csak használ annyi karaktert, amennyi szükséges
maximum összeget.
De az ár, amit fizetni valójában teljesítmény, potenciálisan.
Ha tudod előre, hogy az összes húrok lesznek 8 karakter -
Például, tegyük fel, hogy szükséges jelszavak hossza 8 -
a fejjel használatának char mezőben alkalommal, bár nem gyakran,
hogy adjon meg egy fix hosszúságú valami, mint egy jelszó
mert most az adatbázis lehet még okosabb.
Ha tudja, hogy minden karakter a területen, minden karakterláncot egy oszlop azonos hosszúságú,
kap vissza a szolgáltatás a véletlen hozzáférés.
Ugrálhat körül a különböző char mezőket az adatbázis tábla
azért, mert úgy gondolja, az adatbázis a sorok és oszlopok.
Tehát, ha mindenki a húrok az azonos hosszúságú,
tudja, hogy az első ember a byte 0, a következő egy van byte 8
majd a 16 és majd 24 és így tovább.
Tehát, ha minden sztring azonos hosszúságú, akkor ugrálhatunk sokkal hatékonyabban.
Szóval hogy lehet előny a teljesítmény,
de jellemzően nem rendelkezik a luxust, hogy tudjuk előre,
így a varchar az út.
Itt egy újabb részlet, hogy még a Facebook ütközött végül.
Ints nagy, és egyfajta használni őket alapértelmezés szerint bármikor szeretnénk egy számot,
de ez csak 32 bit.
>> És bár a Facebook nem egészen van 4 milliárd felhasználó most,
van néhány ember biztosan ott több beszámoló
vagy számlákon, amelyeket kinyitja, majd becsukja,
és így Facebook maga azt hiszem, néhány évvel ezelőtt el kellett átmenet int
az, ahogy találóan nevezik, bigint, ami csak 64 bit helyett.
Szóval ez is egy tervezési döntés.
Ön lenne hihetetlenül szerencsés, ha a projekt végső fordul indításakor,
már 4 milliárd 1 gyűjti a felhasználók, ide vagy oda,
ebben az esetben a ints lehet egy kicsit rövidlátó.
De a valóságban, a felhasználók tábla valószínűleg rendben ints.
De valami hasonló Pset 7, mint a történelem asztal,
lehet, hogy több ezer, több millió felhasználó, ha fejlődni etrade.com.
Szóval, mivel lehet, hogy nem több, mint 4 milliárd felhasználó
azok a felhasználók te is előfordulhat, hogy több mint 4 milliárd tranzakció idővel -
vásárol és ad el, és a dolgok a saját történetében.
Szóval, ha nem előre - ismét, ezek jó probléma van, ha ez a sok adat -
ha nem előre adatait meghaladó nagyságú int,
megy valami hasonló bigint egy irányban nem elég gyakran elfogadott tervezők
mert az emberek a szám, hogy ez nem lesz probléma,
de ez a könnyű választani valami nagyobb, mint ezt.
Decimális mi használ Pset 7, amely meghatározza fix precíziós
így elkerülni a problémákat érintő úszók, valamint két-és valós számok és hasonlók.
>> És akkor ott van valami más területen van. Majd hullám kezünket őket bizonyos mértékig.
De időpontok, a menetrendek mindegyike egy meghatározott formátumban MySQL,
és az az előnye, tároló dátumok dátumokat, és nem varchars
azt jelenti, hogy az adatbázis valóban újraformázhatja őket különböző formátumok,
hogy az Egyesült Államok formátumot vagy európai formátum vagy hasonló - de azt szeretné, hogy -
sokkal hatékonyabban, mintha csak néhány általános varchar.
És akkor ott van egy másik BINARY, VARBINARY festékfoltok.
Ezek nagy bináris objektumok, és akkor is tárolni bináris adatok
valamint geometriai adatokat egy adatbázisban.
De nekünk mi általában érdekel ints és varchars és hasonlók.
Fejezzük be ezt a példát házat.
House fogok önkényesen mondani, lesz 255 karakter.
Aztán alapértelmezett érték tudnánk csinálni.
Tudnánk alapértelmezés szerint be mindenki Mather House, például.
Így tudtuk meg, hogy az adatbázis
biztosítania kell, hogy valaki mindig van értéke. De hagyom, hogy az legyen.
Tény, hogy az emberek, akik élnek campus, és nincs abban a házban,
talán tényleg szeretnénk megadni, hogy az alapértelmezett értéke ház NULL,
és akkor ellenőriznie kell ezt az opciót, és mondd el az adatbázis nem baj, ha a felhasználó ház NULL.
>> Ismét, ez egy másik védekező mechanizmus lehet bevezetni
így nem is kell, hogy tegye a PHP kód feltétlenül.
Az adatbázis biztosítja majd, hogy a dolgok vagy nem NULL.
Aztán végül, Tulajdonságok.
Ezek egyike sem igazán fontos.
Binary, unsigned - ezek egyike sem releváns a varchar.
Index.
Tudja valaki, vagy emlékszik, vagy egy tipp, hogy mi egy index
valami hasonló házat?
Ez is tulajdonképpen egy fontos és viszonylag könnyen tervezési döntés.
Azok számára, akik még nem látták, pénteken beszéltünk röviden elsődleges kulcsokat.
Egy adatbázis tábla egy elsődleges kulcs mező vagy oszlop
amely egyedileg azonosítja sorok a táblázatban.
Tehát az aktuális tábla van azonosítók, van neve és e-maileket.
Melyik ezek a legjobb jelöltet, hogy egy elsődleges kulcsot,
amelynek feladata, hogy egyértelmű azonosítására sorok?
Valószínűleg ID.
Vitathatatlan, hogy mi is lehet használni, mi igaz?
Talán jól jönne-mailt, mert elméletileg ez egyedülálló
kivéve, ha az emberek megosztása e-mail fiókok.
De a valóság az, hogy ha egy numerikus azonosító, mint a 1234,
ez csak 32 bites, míg az e-mail címet lehet ez a sok bájt vagy ennyi bájt.
Tehát a hatékonyság szempontjából egyedi azonosítók,
Úgy látszik, hogy jó gyakorlat csak használni int
még ha van néhány húr jelölt, hogy meg tudná vitathatatlanul használni.
>> Valami hasonló ház, ez nem lehet elsődleges kulcs
mert akkor csak 1 személy lehet élni Mather és 1 fő Currier és hasonlók.
Hasonlóképpen, ez nem egyedi.
A különbség a primer és egyedi, hogy abban az esetben, a jelenlegi asztal,
ID lesz az elsődleges, de az e-mail nem elsősorban az az oka, hogy az előbb említett -
teljesítmény - de ez még mindig egyedi.
Így akkor is érvényesíteni egyediségét anélkül, hogy a követelés
hogy ez egy szuper fontos elsődleges mező.
De ez egy nagyon hasznos: Index.
Ha tudod előre a végső projekt, Pset 7, vagy általában,
hogy ez a terület a ház lesz valami, amit keresni egy csomó
a select kulcsszót vagy valami mást,
akkor megelőző jellegű mondani az adatbázis munka a mágia
és győződjön meg arról, hogy létrehoz a memóriában bármilyen tetszetős adatszerkezetek szükséges
hogy felgyorsítsák keresések alapján házban.
Lehet, hogy fogja használni a hash tábla, talán ez fogja használni a linkelt listát.
A valóságban, hajlamos arra, hogy egy fa használ, gyakran egy úgynevezett B-fa -
nem egy bináris fa hanem egy B-fa - ami egy nagyon széles fa
hogy lehet látni egy osztály, mint a CS124, az adatszerkezetek osztály.
De rövid, akkor nem kell aggódni, hogy ha az intelligens adatbázis-kezelő szoftverek.
Akkor mondd azt, "Index ezen a területen, így tudok keresni rajta hatékonyabb."
>> Ha ezt ki, és próbálja meg keresni mindenki számára az adatbázisban, aki él Mather,
akkor száll át a lineáris keresés.
És ha megvan 6.000 undergrads minden élő egyes házban,
fogsz keresni az egész táblázatot, hogy megtalálja a Matherites,
mivel ha azt mondod, Index, remélhetőleg lesz valami közel logaritmikus keresés
hogy megtaláljuk azokat a típusú versenyző.
Ez csak egy ingyenes szolgáltatás bekapcsolásához,
annak ellenére, hogy nem jön áron némi helyet.
Végül, auto-növekmény, ez AI területen,
ami csak azt jelenti, ha ez egy int, és nem akarod, hogy érdekel, hogy megnöveljük magad
minden alkalommal, amikor van egy új felhasználót, ellenőrizze, hogy a
és minden felhasználó kap ki automatikusan kap egy új azonosítót.
Nézzük kattintson a Mentés gombra, és most nézzük talált hibát a design.
Ha elmegyek a People, azt tapasztaljuk, hogy mind a Mike és az én házam NULL.
Tudom használni phpMyAdmin szerkeszteni ezt a kézzel.
Tudok menni ide, és írja be Mather, majd nyomja meg az Enter billentyűt,
és most észre a tábla különböző.
De észre tudtam csinálni valami mást is.
Dávid ID 1, így phpMyAdmin ismét csak egy adminisztratív eszköz;
ez nem valami, amit a felhasználók valaha is látni.
Szóval, ha ahelyett, kattintson az SQL fülre up top -
és újra Pset 7 fog bevezetni, ha több ilyen lekérdezések -
Én kézzel hajtja végre az SQL strukturált lekérdezési nyelv parancs
UPDATE SET felhasználó house = 'Pfoho' WHERE id = 1.
Ezek az SQL lekérdezések, szépen elég, elég olvasható balról jobbra.
Frissítse a felhasználók tábla, állítsa a mező nevű ház Pfoho
ha a felhasználó azonosítója 1 lehet.
Vagy akár nem, ha email = 'malan@harvard.edu ".
Amíg amely egyedileg azonosítja nekem, hogy működne is.
De ID jellemzően magasabb teljesítményt, úgyhogy csináljuk ezt.
Akkor kattintson a Go. Oké, lecture.users nem létezik. Mi a hiba?
Mi van a táblázat ténylegesen lehívott itt?
Úgy hívják a diákok csak azért, mert ez az, amit tettünk fel itt a bal felső sarokban.
Úgy hívják a diákok, nem felhasználók. Akkor kattintson a Mehet gombra most.
1 sor érintett. Lekérdezés 0,01 másodpercig tartott.
Ha a Tallózás gombra kattintva most, most Malan él Pfoho.
Szóval ez egy másik íze SQL, de a Pset végigvezeti egy kicsit erre.
>> Van egy hülye döntés, amit már itt.
Azt állítják, hogy ez az adatbázis tervezés nem hatékony
mert több ember hozzáteszem, hogy a diákok asztalra,
A többen kezdek hozzá, annál több a TFS kezdek hozzá,
fogunk kezdeni, hogy milyen elbocsátások a táblázatban?
>> Igen. [Hallgató] Látván, hogy ez a diákok, mi ugyanazt a [hallható]
Ugyanez - Igen, pontosan.
Tehát, ha 400 ember él Mather, ide vagy oda,
végül is ez a táblázat megy, hogy 400 sorok azt mondják: "Mather", "Mather,"
"Mather," "Mather," "Mather."
Mi pazarlás mindezen bájt, és van egy pár elvitelre ott.
1, ott van az őrült sarokban ha ha valaki fizet egy csomó pénzt
és átnevezi Mather, most meg kell változtatni az egész adatbázis tábla.
Ez nem fog megtörténni gyakran, bár Pfoho hívták North House 15 évvel ezelőtt,
így történik. De ez még nem minden, ami lenyűgöző.
Több, mint egy sarokba kényszerítő hasonló esetben, hogy az igénylő frissíteni az adatokat ömlesztve
Egy adatbázis miért tárolására Mather újra és újra és újra és újra?
Ez egy csomó karakter, 6 karakter.
Nem csinálhatnánk még jobban, mint, hogy különösen a Pforzheimer?
Biztosan tehetünk jobban, hogy sok karaktert.
Miért nem csak társítani egy egyedi azonosítót minden ház
és tárolja, hogy minden egyes felhasználó? Akkor próbáljuk meg.
Ahelyett, hogy csak használja a diákok tábla, hadd menjen fel Előadásomban adatbázishoz ide a bal felső sarokban.
Értesítés itt azt mondja Tábla létrehozása.
Hadd hozzon létre egy új táblát nevezett házak.
Az oszlopok száma lesz 2. Az Enter billentyűt.
Most van 2 mezőket.
Fogom hívni ezt a nevet, és ez lesz a varchar hosszúságú 255,
>> de ez elég önkényes. Hadd tegyem ezt le itt egyezmény.
Tehát vessen ID ide. Adjunk minden ház egy egyedi azonosítót.
Adjunk minden ház egy nevet.
Nézzük meg, hogy az azonosító lesz unsigned csak a konvenció, hogy csak a pozitív számok.
Menjünk előre, és hogy ez egy automatikus növekmény mező most.
És mi is kell valami mást?
Menjünk előre, és kattintson a Mentés gombra.
Most van egy másik asztal.
Hirdetmény mint félre ez a kissé rejtélyes SQL parancs
hogy kellett volna, hogy írja kézzel, ha nem használ felügyeleti eszköz, mint a phpMyAdmin.
Tehát még egy ok, amiért használja.
Ez csodálatosan hasznos egyfajta pedagógiai mert akkor kattintson körül
és kitaláljuk, hogyan működnek a dolgok mellett csak a másolás és beillesztés, mit phpMyAdmin tett.
De a CREATE TABLE parancs, amit éppen végre, és itt van az asztalon.
Hadd menjek előre, és már a nyers SQL helyett leegyszerűsíti kattintson a Beszúrás fülre.
Hadd ne INSERT INTO házak,
és meg fogom mondani a nevét a ház megy, hogy egy érték "Mather".
Ennyi. Ez a szintaxis egy kicsit rejtélyes.
Ez a név a mezőket szeretnénk beszúrni.
Ezek az értékek szeretnénk illeszteni ezeket a mezőket. Hadd kattintson az Indítás gombra.
1 sor egészül 0.02 másodpercig tartott. Engedjék meg, kattintson a Tallózás gombra most.
>> Figyeljük meg, ha én kattintson a Tallózás gombra, van Mather, melynek azonosító az automatizálás az 1-es szám.
Hadd tegyek egy másikat. Hadd menjek be a SQL fülre.
INSERT INTO házak. A név a ház megy, hogy egy érték Pfoho és így tovább.
Go. És tudom tartani ezt újra és újra és újra.
Vagy ha unatkozni a phpMyAdmin, akkor csak használja a Beszúrás lap
és nem kell, hogy írja a nyers SQL.
Tudod csak bumm ki gyorsabban a gépelés, például Currier, az Enter,
és most ha kattintson a Tallózás gombra, ott Currier azonosítóval a 3.
Szóval ez az, amit értünk auto-növekmény.
De most meg kell hozni valamit a diákok.
A tanulóktól, hogy mit kellene az adatok típusát a ház mező most?
Meg kell int, ugye?
Tehát a cél itt az, hogy végre vennünk, más néven normalizálni, a táblázatok
azért, hogy ne információk tárolása redundáns minden az én táblázatokban.
Továbbá, az út voltunk itt fog mondani Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, ami nagyon felesleges
szempontjából a pazarlás a karakter.
Szóval hadd menjen előre, és változtatni kattintva Structure,
és hadd menjen előre, és ellenőrizze le a ház területén, kattintson a Módosítás gombra,
és most fogom megváltoztatni ezt, hogy egy int.
255 nem releváns.
Hadd menjek előre, és azt mondják, hogy rendben van, ha ez még mindig NULL. Mentés.
Most tábla diákok megváltozott sikeresen
, és vegyük észre ismét ház egy int.
Mint félretéve, figyelmen kívül hagyja a zárójelben, amikor a ints.
>> Ez az örökség miatt.
Vissza a nap, amikor nem volt GUI, akkor inkább már egy parancssori környezet,
A 10 és 11, illetve meghatározott hány karaktert kell mutatnia
a terminál ablakban, hogy ténylegesen mezőket.
Ennek semmi köze a bithosszúságú a tényleges terület, úgyhogy csak figyelmen kívül hagyja, hogy a most.
Most el kell mennem ebbe a táblázatban.
És ha Dávid lakik Mather, a ház nem lehet 0,
amely egy alapértelmezett int érték legközelebb NULL.
Azt kell élni ház 1.
Tegyük fel önkényesen azt, hogy Mike él Pfoho, így house 2-es szám.
Most úgy néz ki, az én asztalomnál egy kicsit rejtélyes.
De úgy a hatékonyságot.
Én most már csak 32 bites azonosítani a házat,
ami azt jelenti, hogy csak 1 kanonikus meghatározását házam Mather és Pfoho
és ez a házakban táblázatban.
Tehát, ha azt akarom, hogy most újra csatlakozni ezeket a táblákat, gondolom így.
Itt van a diákok asztal, és a jobb oldalon van ezeket a számokat, 1 és 2.
Az 1-Mather, a 2 Pfoho.
Van ugyanezek a számok a másik tábla, amely az úgynevezett házak,
Az 1. és a 2. és 3. a 3 ház.
Amit most akarok, megvan a képessége a kódot, PHP és SQL,
rendezni az csatlakozzon ezek a táblák, ahol, ha ezek a diákok és ezek a házak,
azt akarjuk, hogy valahogy egyesíteni őket, hogy 1 vonalba 1,
2 sor up 2, és annak érdekében, hogy kitaláljuk, hol David
és ahol Mike, és ahol mindenki más él.
Ehhez hajthat végre egy SQL lekérdezést, mint a következő.
SELECT * FROM diákok JOIN házak ON -
És most milyen mezőket akarunk csatlakozni itt?
Szóval students.house = houses.id.
>> Egy kicsit rejtélyes, de ez a rész szó szerint azt jelenti hozzon létre egy új ideiglenes táblát
ez az eredménye összekötő diákok és házak.
És hogyan szeretné egyesíteni a tippeket az ujjaim itt?
Állítsa be a tanulók háza mező megegyezik a házak "ID mezőbe.
És ha most kattintson az Indítás gombra, kapok vissza pontosan, amit remélt.
David van Mather, Mike van Pfoho, és azt is látni az egyedi azonosítókat.
De a lényeg most már egy teljes táblázatot.
És így az elvitelre itt Pset 7 vagy valóban a végső projekt:
Ha úgy találja, hogy te vagy tárolása bármilyen információ, redundáns,
hogy ez a ház, lehet, hogy a város, az állam, és a ZIP
ahol ZIP általában, de nem mindig lehet használni, mint egy egyedi azonosítót,
nem megy át a testmozgás szellemileg, majd valami hasonlót phpMyAdmin
A faktoring arra, hogy a közös adatokat, mert különösen az Ön weboldalára kap több jól használható
egyre népszerűbb, ez hogyan győződjön meg arról, hogy minden szuper gyors,
azáltal, hogy az adatbázis sok tippeket, hogy az egyediség, amennyire csak lehetséges.
Ez volt egy csomó.
Van még kérdése? Rendben van. Vessünk egy 5-perces szünet van, és átcsoportosítani.
Rendben van.
Az alábbi példa is használt néhány évvel ezelőtt, amikor vettem CS161,
amely az operációs rendszerek osztályt a főiskolán
ami ismert, hogy csodálatos, de egy őrült mennyiségű munkát,
és ez elsősorban tényleg néhány alacsony szintű felmerülő problémákra operációs rendszerek
és még a világon az adatbázisok.
>> A történet, hogy azt mondták az én tanár, Margo Seltzer, ebben az évben a következő volt.
Tegyük fel, hogy van egy kis kollégiumi hűtőszekrény az Ön és a szobatársam
és mind a ketten igazán szeret tejet.
Szóval gyere haza osztály egy nap a szobatársa még nem ott,
kinyitja a hűtőt, és rájössz, "Oh átkozott, elfogyott a tej."
Szóval te becsukod a hűtőt, sétálsz az utcán, hogy CVS
és kap az egyre inkább hosszú sorokban, hogy vásároljon néhány tejet CVS.
Eközben, a szobatársam jön haza a saját osztály,
jön be a szobába, kinyitja a hűtőt igazán akar egy kis tejet,
Megnyílik a hűtőt, és "A fenébe, nem tej."
Szóval ő bezárja a hűtő, kisétál az ajtón, és megy ABP
vagy valahol más, mint a CVS, ahol te nem fog bump egymás
menni egy kis tejet.
Persze, néhány perccel később, mindketten haza
és most már kétszer annyi tejet, mint te valójában akart.
És mivel a tej, most ez fog menni rossz, mert szereted a tejet
de nem igazán, mint a tej, így most már túl sok tejet, így megy savanyú.
Ez egy rettenetes, szörnyű helyzetet.
Mit lehetett volna oldani ezt a kínos, ha te voltál az első szobatársa haza? Igen.
[Hallgató] Meg kellett volna hagyni egy üzenetet. [Nevetés]
Jó. Meg kellett volna hagyni egy üzenetet.
Meg kellett volna tenni a Post-it hang vagy hasonló mondás: "Elfújta a tej"
, majd a szobatársam fogalmilag volna zárva a ténylegesen csinálja.
Vagy elmehet 1 lépés tovább.
Lehet szó zárja le a hűtőszekrény valamilyen lakat,
és most a szobatársam szó szerint zárva ki a hűtőszekrény.
Ha általánosítani vissza a programozás,
akkor szinte véleményed a hűtő valamiféle változó vagy a struct,
valamilyen konténer információkat.
A probléma alapvetően az, hogy mind a ketten hagytuk, hogy ellenőrizze
vagy olvassa el az állam az adatok struktúrája,
de megtekintette különböző időpontokban és mégis mind a ketten döntött
alapján az állam a világ e különböző időpontokban.
Tehát már akkor zárva a hűtő, akkor lett volna, legalább kerülni a szobatársad
honnan volt képes ellenőrizni az állam a világ,
így ő nem tudta volna, hogy az ugyanazon határozat.
Szóval adatbázisok, mint kiderült, ez a probléma folyamatosan.
>> Lássuk, tudunk építeni egy forgatókönyv.
Tegyük fel, hogy te valami rossz ember, és megy a Bank of America
vagy egy a másik hely a négyzet, amelyek egy pár ATM egymás mellett,
és valahogy rájött, hogyan kell másolni egy ATM kártya - nem is olyan nehéz.
Ez csak egy mágneskártya.
És mit akarsz próbálni tennie játszani ezt a játékot
ahol raksz 1 kártyát 1 gép, egy másik kártyát a másik gépet,
és lényegében szeretné kipróbálni, hogy pénzt egyszerre,
mert elképzelhető, hogy a történet így szól.
A gép bal oldalán veszi a kártyát és a PIN-kód
és akkor azt mondja: "Adj nekem 100 dollárt."
Az ATM van programozva, hogy először nem a select saját adatbázis vagy az azzal egyenértékű -
bármilyen adatbázis ez használatával -, hogy nem a felhasználó legalább 100 $ saját fiókot?
Ha igen, akkor köpje ki a $ 100 és $ 100 kivonni a saját egyensúlyát.
Persze ha van több gép van, vagy több módon az ellenőrző
az állam, hogy a világ, a bank boltozat, hogy mennyi pénz van,
Tegyük fel, hogy csak véletlenül a készülék a bal és a jobb
Mindkét kérni ebben a kérdésben nagyjából azonos időpontban.
>> És ez minden bizonnyal megtörténhet. ATM számítógépek ezekben a napokban.
Tehát, ha a gép a baloldali azt mondja: "Igen, van legalább 100 $,"
közben a készülék a jobb oldalon azt mondja: "Igen, van legalább 100 $,"
majd mindketten folytassa befejezzék a programokat és ténylegesen köpje ki a 100 dolláros
és azt mondják: "Korábban már 200 dollárt."
"Hadd frissíti a változó most már $ 100 marad a fiókban."
De ha mindkettő ellenőrizte a fizetési mérleg és megállapította, hogy 200 dollár
és mindketten majd tegye a matematika és mondjuk 200-100,
a gépek potenciálisan kiköp két $ 100 váltók minden gép,
de már csak frissítette összeg egyenlege hogy 100 dollárt.
Más szóval, ha már kivették $ 200, hanem azért, mert ellenőrzik az állam a világ
egyszerre, majd döntött alapuló érték,
lehet, hogy nem a matek végül helyesen.
Tehát a bank helyzetben is szeretné, hogy valamilyen lockout
annak érdekében, hogy amint már ellenőrizte az állam egyes változó
ez nagyon fontos, mint a fizetési mérleg,
ne engedd senkinek alapján hoznak döntéseket, hogy amíg kész csinál a dolog,
amennyiben ebben az esetben, ha az ATM-et, a bal oldalon.
Lock mindenki mást ki.
Tudod valójában elérni ezt a hatást egy pár különböző módon.
>> A legegyszerűbb módja a MySQL egy sor SQL, amit adtam neked
a probléma halmaz kikötésével, hogy úgy néz ki, mint ez.
Helyezze be a táblázatba - bármi is hívják - egy id, egy szimbólum, és egy részvény, egy bizonyos számú részvényt,
a következő értékeket, például.
Ha még nem olvassa a specifikációt még, ez egy részt vettek például hogyan megy a
Önnek 10 shares e penny stock elnöknek Skroob,
amelynek felhasználói azonosító történik, hogy a 7-es szám?
Ez azt mondja, INSERT INTO táblázat a következő szám, jelkép, és részvények számát
7, "DVN.V ', és 10.
De - de, de, de - a második sor a fontos.
A pótkulcsot UPDATE részvények = részvények + VALUES (részvény).
Szóval teljesen rejtélyes kinézetű első pillantásra.
De az a tény, hogy ezt az SQL lekérdezést, annak ellenére, hogy becsomagolja rá 2 soros,
jelentése 1 hosszú lekérdezés, ez azt jelenti, hogy atom-
abban az értelemben, hogy ez a lekérdezés vagy hajtják végre együtt, vagy egyáltalán nem.
És meghatározása MySQL, ez hogyan hajtotta végre ezt a lekérdezést.
Ez a meghatározás a kézi garantált, hogy végre egyszerre, vagy egyáltalán nem.
A motiváció Ennek a következő.
Ha ebben az esetben próbál vásárolni 10 shares raktáron,
ez a fajta ugyanaz a történet, mint a tej, ez a fajta ugyanaz a történet, mint az ATM.
>> Ha a hibát, hogy nem használja ezt a szintaxist
hanem kiválasztja az adatbázisból, hogy hány részvények e penny stock
nincs elnök Skroob van, és tegyük fel, hogy már 10 részvény,
, majd néhány pillanattal később aztán csinál egy UPDATE nyilatkozatot,
ami egy másik állítás, amely azt mondja SQL megy előre, és adjunk hozzá további 10 részvény
hogy a jelenlegi 10, így ideális esetben a teljes 20,
a probléma, mert a mai adatbázis-rendszerek, és mert a mai számítógépek
Van több processzor, több mag -
más szóval, számítógépek szó csinál több dolgot egyszerre -
nincs garancia arra, hogy a SELECT és az UPDATE ebben az esetben
fognak történni háttal.
Tehát a rossz forgatókönyv lenne, ha nem a SELECT
hogy hány osztja e penny stock Skroob nem rendelkezik,
és aztán csak véletlenül egy másik adatbázis-lekérdezés végrehajtásakor -
talán a Skroob másik böngészőablakban próbál vásárolni 10 shares
egy másik ablakban teljesen, ugyanúgy, mint az ATM -
és tegyük fel, hogy egy másik lekérdezés jelentkeznek között SELECT és UPDATE.
Ez lehet a helyzet, hogy most már Skroob veszít részvények számát
mert egy másik folyamat ellenőrzésére az állam az ő világában,
vagy ő többet kap részvényeket, mint ahogy kellett volna.
Nem fogunk belemenni adatokat pontosan mik ezek a különös történet vonalak lenne,
de a lényeg az, ha van, hogy ellenőrizze a változók értéket, majd döntést,
ha van egy veszélye valaki csinál valamit közötti 2 nyilatkozatok
mivel megtörténhet többprocesszoros rendszerekben, a többmagos rendszerek,
számítógépek a lehetőségtől, hogy tegyen több dolgot egyszerre, rossz dolgok történhetnek
például bankszámlákról történő terhelése helytelen Önnek kétszer annyi tejet,
vagy ebben az esetben rossz részvények száma.
De van egy egyszerűbb módja annak, hogy gondolkozzon el ezen.
>> Kiderül, hogy az SQL is támogatja, ha úgy konfigurálja a táblázat helyesen
valami úgynevezett ügyletekre vonatkozik, amelyek azt állítják, valójában még könnyebb megérteni
mint ez, de ez nem egy 1-bélés, tehát ez valójában egy kicsit szó.
Van szó egy nyilatkozatot, az úgynevezett SQL START tranzakció.
Csakúgy, mint ott SELECT, UPDATE, INSERT, DELETE, és csatlakozz, és egy csomó más,
vannak olyan kulcsszavak, mint a START TRANSACTION.
És amit majd tegye összefüggésben Pset 7 -
Nem kell ezt a Pset 7; ez kifejezetten tiltakozott, hogy az nem szükséges,
de végső projektek lehet hasznos -
ha a hívás egy lekérdezést a START ÜGYLET majd egy másik lekérdezés
majd egy másik lekérdezést, majd egy másik, egy másik, és egy másik,
ezek lekérdezések ténylegesen nem hajtható végre, amíg meg nem hívja az SQL COMMIT
ezen a ponton, hogy ez 2 nyilatkozatok vagy 20 nyilatkozatot, akkor végre kell hajtani az összes egyszerre,
ami azt jelenti, senki más nem tudja véletlenül túl sokat vásárol belőle tejet vagy betéti túl sok pénzt
vagy vásárolni túl sok részvényeit, mert az összes lekérdezést hajt végre
háttal hátra hátra.
És ez szuper fontos, különösen, ha csinálsz valamit, mint ez.
Ez egy tetszőleges példa, hogy azt mondja menjünk frissíti a bankszámla
azáltal, hogy egyensúlyt egyenlő egyenleg - $ 1000, ahol a számla száma 2 lehet.
És akkor a második kijelentés most nézzük, hogy letétbe helyezi 1000 $
be valaki másé bankszámla, amelynek számlaszám 1 lehet.
>> Más szóval, ez egy tökéletes példa arra, ahol szeretnénk, hogy győződjön meg arról,
, hogy mindkét nyilatkozatok történik, vagy egyáltalán nem
mert különben az ügyfél megy kap csavarva
és te fog tartani a pénzt, és nem helyezi letétbe, hogy máshol,
vagy a bank megy kap csavarva hová mész befizetni a pénzt
de valójában nem vonjuk ki a felhasználói fiókot.
Szóval azt akarod, mindketten közösen hajt végre.
Így belép a világba ügyletek.
Szóval ez valami tartani a hátsó fejedben,
nem annyira céljából csak a végleges projekt,
de ha azt szeretnénk, hogy a projekt végső valahol,
ha szeretné indítani néhány cég körül,
ha szeretné megoldani néhány diák csoport problémája az egyetemen
és valóban van egy élő, aktív a honlapon, ezek a fajta finom hibák léphetnek fel
Ha nem egészen gondolja végig, mi történik, ha 2 fő
próbálja elérni a weboldalán szó ugyanabban a pillanatban
amelyben ezek lekérdezések egyébként kap összefüggenek.
>> Készen áll néhány JavaScript, a teaser ezek?
Ez az utolsó nyelvet a félévben. Rendben van.
Szerencsére, JavaScript néz ki, nagyon, nagyon, nagyon hasonlít a 2 nyelv, C és PHP,
tettünk eddig.
Nincs JavaScript Pset 7, de ez egy hihetetlenül hasznos eszköz
amikor csinál web-alapú végső projektek vagy tényleg csak webes programozás általában.
Tehát egy gyors áttekintést valami úgynevezett DOM.
Itt van egy szuper egyszerű weboldal, amely valójában csak azt mondja, hello, világ
mind a címben és a szervezetben.
Mivel a behúzás már utal egy ideje,
valóban létezik egy hierarchia weboldalakat.
Tudtam felhívni ugyanezen kódrészletet a HTML, mint egy fa,
gondolt vissza a viták adatszerkezetek C-ben, az alábbiak szerint.
Van néhány különleges gyökér csomópont az úgynevezett dokumentum csomópont,
és meglátjuk, analóg erről JavaScript mindössze egy pillanatra.
Az első gyermek és egyetlen gyermeke, hogy ebben az esetben a HTML-tag.
Nincs közvetlen leképezés a doctype.
Ez egy különleges dolog, ezért meg kell csak figyelmen kívül hagyja, hogy amikor ezt a DOM,
ez a Document Object Model fa.
Figyeljük meg, hogy a HTML tag, amit már ábrázolták önkényesen egy téglalap,
van 2 gyermek: fej és a test.
>> Ezek hasonló módon megrajzolt téglalapok.
Az értelmes, hogy a piktogramokat ábrázoló fej balra test.
A következmény az, hogy a feje előbb a fán.
Tehát ez valójában egy megrendelés egy fa, ha döntetlen, mint ez,
annak ellenére, hogy a formák és miegymás önkényesek.
Head időközben már egyetlen gyermek nevű cím,
és a cím valójában saját gyermeke, amely a "hello, world"
amit szándékosan rajzoltam, mint egy ovális ide, hogy kissé eltér a téglalapot.
Ezeket a téglalapokat elemei, mivel hello, világ valójában egy szöveges csomópont.
Szóval ez egy csomópont a fa, de ez egy más típusú csomópont
így rajzoltam önkényesen másképp.
Hasonlóképpen nincs test egy gyerek nevű hello, world is,
annyira más node annak ellenére, hogy véletlenül ugyanazt a szöveget,
de már húzott használatával ugyanolyan alakú. Szóval, kit érdekel?
Nos, mi a jó a HTML, hogy nem ezt a hierarchikus jellegű.
És mi a szép, és különösen arról, JavaScript könyvtárak szabadon álló
és népszerű, mint a jQuery segítségével navigálhat a fa szerkezetét, így hihetetlenül egyszerű.
Bármelyik cucc tettük C mutatók és mozgási fák és a rekurzív csomópontok
balra gyermek jobbra gyermek, hirtelen mi is egyfajta magától értetődőnek
mint elképesztően tanulságos, ha nem egy kicsit frusztráló
de közel sem olyan hatékony módja annak, hogy megy a programozás.
És így e magasabb szintű nyelvek, mint a JavaScript
leszünk képesek navigálni a fa sokkal ösztönösen.
>> És valóban, a szintaxis lesz elég ismerős.
Ha még soha nem látott JavaScript előtt, ez egy nagyon szép referencia
A Mozilla emberek, az emberek, akik a Firefox,
úgyhogy ne nyugodtan böngészhet, hogy az Ön kényelmét.
Mit talál -, és ezek a diák azonos amit mi a minap -
hasonlóképpen, fő eltűnt.
Tehát, ha írunk egy programot a JavaScript nincs fő funkciója.
Csak írásához kódot.
De a fő különbséget a JavaScript és a C és a PHP
az, hogy míg a C és a PHP eddig végrehajtották szerver oldalon
A készülék ebben az esetben, vagy általában egy szerver,
JavaScript by design általában végre egy böngésző.
Más szóval, lehet írni JavaScript kódot, ahogy mindjárt,
a szerveren a készülék, de magában körében a HTML, a CSS között,
között, a GIF és a PNG és a JPEG
úgy, hogy amikor a felhasználó meglátogatja a weboldalt, ha a JavaScript,
hogy a JavaScript kód jön szerver böngésző,
és ez a böngésző, hogy valóban végrehajtja.
Szóval ez van értelmes hatással még szellemi tulajdon.
Elég buta, hogy még gondolni védelmére IP, amikor a JavaScript-kód
mert a természet a nyelv nem lesz végrehajtva általában böngésző oldalon.
>> Akkor összezavar ez, ami azt jelenti, hogy úgy tűnjön, őrült és csúnya
nélküli szóköz, borzalmas változó nevét, hogy megnehezíti az emberek számára, hogy ellopja az IP,
de a legfontosabb az, hogy végre böngésző oldalon.
Annak ellenére, hogy mint egy területpihentetés JavaScript használható szerver oldalon,
A leggyakoribb használata esetén most még a böngészőben.
És itt van az, aminek látszik. Itt van egy if-else if-else konstrukció, mint a C, mint a PHP.
Itt van egy logikai kifejezés, ha "vagy" 2 dolgot együtt.
Itt van, ha "és" 2 dolgot együtt.
Itt van egy switch, ami hasonló a PHP
, hogy lehet váltani a különböző típusú értékeket.
Loops hasonlóképpen van a hurkok itt, melyek felépítése azonos azzal, amit láttunk korábban.
Míg a hurkokat, megvan csinálni, miközben hurkok.
Változók, mindig így kissé eltérő.
Ugye állapítsa változók, mint te a PHP és a C,
de hasonlóan a JavaScript gyengén gépelt.
Nem adja meg int vagy float vagy string vagy ilyesmi általában.
Megadhatja var.
Önnek nem kell megadnia var, de hatással van, ha nem.
Általában, ha kihagyja var, véletlenül létrehoz egy globális változó helyett a helyi.
Hadd javaslom, hogy szinte mindig csak annyit var, majd a változó nevét.
Ez nem a típus, csak var változó.
Ez lehet például, hogy ez 123 vagy "hello, world".
Tömbök vannak jelen, és szintaktikailag hasonló PHP.
Azt mondom var számok és aztán használja szögletes zárójelben ismét nyilvánítja változó
amelynek típusa tömb, amely ezeket a konkrét számokat nem vesszővel elválasztva.
És végül, ez az egyetlen, ami igazán máshogy néz ki.
Emlékezzünk vissza, hogy a PHP-ben mi volna végre egy asszociatív tömböt egy diák
mint Zamyla, hogy így fog kinézni, ha a változó nevű diák.
A szögletes zárójelek jelent itt jön egy tömbben.
>> Az a tény, hogy nem vagyok a numerikus indexek, de húrok - id, house, és név -
azt jelenti, hogy ez egy asszociatív tömb,
és ezek a nyilak az egyenlőségjel és a szögletes zárójel
azt jelenti, hogy a kulcs az "id", az értéke 1;
a legfontosabb a "ház", az érték Winthrop House;
a kulcs a "neve", az érték Zamyla Chan.
Szóval van 3 gomb belsejében asszociatív tömb, amelyek mindegyikének megvan a maga értéke.
Láttuk, hogy a Pset 7, vagy hamarosan lesz, JavaScript ugyanezen ötlet,
de ez fog kinézni, mint ez.
Szóval var diák - nem dollár jele és nem említi típusú, de még mindig var -
megegyezik majd nyissa kapcsos zárójelek mert JavaScript ha van kulcs érték párokat,
ténylegesen használ valami úgynevezett objektum.
És azok, akik ezt megteszik APC-k vagy hasonló lehet felidézni objektumok Java
vagy hasonló nyelven.
JavaScript nem Java először.
Ez egy tudatos tervezési döntés évvel ezelőtt, hogy leüt valami mást, ami népszerű volt,
a nevét, annak ellenére, hogy nincs kapcsolatban alapvető JAVA magát.
JavaScript objektumok, és hozza létre őket útján a kapcsos zárójel jelölést.
Objektumok JavaScript elég sok azonos asszociatív tömbök a PHP
amikor az adatok tárolására bennük.
>> De még erőteljesebben a JavaScript lehet társítani nagyon könnyen funkciók
belsejében egy tárgy, és bár akkor ezt más nyelveken,
ez elég gyakori paradigma, mint látni fogjuk.
Röviden, az objektum jelent egy diák, aki különösen Zamyla,
és ez hasonló fogalmi, csak szintaktikailag ettől eltérő.
Nézzünk ténylegesen használni JavaScript fájlban.
Kiderült, hogy van egy script tag.
Láttuk a stílus címke és láttunk más HTML címkék.
A script tag ténylegesen tartalmaz majd néhány JavaScript kódot.
Hadd menjek be a készüléket, ha van néhány forráskódot előre készült.
Még nem írt, hogy még a honlapon, de én megteszem, hogy miután osztály.
Nyissuk ki ezt, blink.html.
Vissza a 1990-es években volt a szó szoros értelmében egy HTML tag úgynevezett blink tag,
és ez volt az egyik legcsodálatosabb indokolatlanul tag az interneten
amely azt látogasson el néhány 1990-es évek stílusát web oldalt, és újra látni szöveg villogni tetszik ez,
eredményeit az márki címke, amely szöveg megy így.
Az egyik a néhány alkalommal, amikor a világ ténylegesen megállapodott a web standard,
mindenki az egész fórumon megölte a blink tag néhány évvel ezelőtt.
De mi feltámasztani azt JavaScript egy bemutatót a hatalom van
ha lehet írni egy programot, belsejében egy internetes oldalon.
Gyártási ugorjuk át az új cucc, és összpontosítani a régi.
>> Itt a régi cucc ebben a példában.
Van egy HTML tag, a fej címke, és a cím tag.
Aztán van egy body tag van egy div, ami visszahívás csak egy téglalap alakú részlege az oldal
hogy adtam egy egyedi azonosító, önkényesen az "üdvözlés" a,
csak így van egy módja annak, egyedi utalva rá, hogy van néhány nagyon egyszerű szöveg lép:
hello, világ.
Most hadd felfelé a tetejére ezt a fájlt, és meglátjuk, mi újság van.
Az első dolog, ami az új top up a script tag,
és azon belül a script tag nyilatkozat, amit bejelentett a funkciót.
Ahhoz, hogy állapítsa meg a funkció JavaScript, meglehetősen hasonló a PHP,
szó szerint írja függvény, akkor a nevét, a funkció, zárójel,
és talán néhány érvet, ha tart ilyen.
Aztán van a kapcsos zárójel a szokásos módon, és most van néhány kissé új kódot,
de lássuk, mit jelent ez.
Szóval var div, ez csak annyit jelent, adj egy változó nevezett div.
Tudtam volna nevezték foo, de szerettem volna, hogy legyen az úgynevezett div
okokból, hogy lesz nyilvánvaló a második.
Aztán kiderül, a JavaScript - és ez a JavaScript kódot tartalmazó my web page -
van egy speciális globális változó a fajta nevű dokumentum.
JavaScript valójában egy objektum-orientált nyelv.
Nem fogunk belemenni a részletekbe, 50, hogy mit jelent,
de most már tudom, hogy egy objektum nagyjából, mint egy struct.
Mint láttuk vissza, amikor az egyik legkorábbi probléma készletek
ahol egy csomó információt egy struct,
hasonlóképpen van dokumentálja egy speciális struct, hogy jön a böngésző,
jön bármilyen weboldalról. Ez nem olyasmi, amit létre.
Belül a dokumentum szerkezetét, mégis, akkor nem csak az adatok
de akkor is van funkciókkal.
>> És minden alkalommal, amikor egy függvény belsejében egy olyan struktúra, belsejében egy tárgy,
ezt hívják a módszert. De ez ugyanaz a dolog.
A módszer egy olyan funkció, hogy csak azért történik, hogy belül valami más.
Tehát ez azt jelenti, hogy ez a különleges globális változót nevezett dokumentum
van egy nevezett funkció getElementById, hogy szó szerint ezt csinálja.
Ez neked egy elemet a DOM Document Object Model, fa,
akinek ID ebben az esetben üdvözlést.
Más szavakkal, minden alkalommal, amikor fordított adatszerkezetek kerül szóba itt.
Ez a kép a DOM, hogy mi volt egy perce
annak ellenére, hogy az oldal egy kicsit más, ha lenne egy div ezen a képen,
milyen document.getElementById visszatér hozzám hatékonyan egy mutató
A téglalap a fa, a hivatkozás a téglalap a fán.
Szóval ez mit is jelent valójában hívni egy ilyen funkciókat.
Ebben az esetben is ez egy div. Ez nem egy szervezet vagy egy címet.
Akkor lássuk, mit tegye ezzel div most, hogy van ez belül ez a változó nevű div.
Kiderült, hogy a JavaScript megvan a képessége, hogy csípés a CSS az oldal dinamikusan.
Eddig az összes CSS tettünk korlátozottan ugyan, de ez a stílus jellemzőket,
vagy ha máshol nem tesszük CSS?
Valahogy megromlott, hogy az egyik. A stílus címke a tetején a fájlt.
Vagy harmadik helyen már?
>> Egy külső fájl valamit. Css.
Tehát ezek a 3 helyen tettünk CSS eddig,
de a fogás most már nehéz kódolni az egészet.
Úgy döntött, ahogy a galamb Pset 7, úgy döntöttünk, mielőtt előadást mi a CSS lenne.
De ha meg akarja változtatni a CSS-t, akkor tényleg csinálni
ha egyszer már a tényleges programozási nyelv.
CSS, HTML - nem programozási nyelv. A JavaScript.
Így kiderül, hogy amint egy ilyen téglalap a fáról
úgynevezett DOM, saját maga néhány adat benne.
Szóval a div, hogy én csak megragadta a fa van, mi fogunk hívni egy ingatlan belsejébe
nevezett stílus, és a stílus területén maga tulajdonság nevű láthatóságát.
Azt tudom, ezt csak keresi fel a CSS felhasználói kézikönyv.
Kiderült, hogy van egy láthatósági CSS tulajdonság, hogy azt teszi, amit mond.
Ez teszi valami látható vagy nem látható, vagy nem látható.
És hogyan teszel, hogy ez.
Azt kérdeztem algoritmikusan ha a láthatóságát ennek div rejtve van,
mit tudom megváltoztatni azt? Látható.
Különben, ha a láthatóságát ezen az oldalon nem rejtett, logikusan tudom tenni rejtett.
Fogalmam sincs, hogy miért ez a látható és rejtett, nem látható és láthatatlan.
Ez volt a rossz tervezési döntés az út mentén.
De ezek valóban ellentétes a CSS: látható és rejtett.
Mindez azonban nem azt jelenti, hogy változtatni a CSS az én fájlt be és ki, be-és kikapcsolása
az adott div.
De ismétlem, ez egy függvény neve villog. Mikor a blink nevezett funkció?
Kiderült, hogy van egy másik speciális globális változó nevű ablak,
hasonló szellemben a dokumentumban, de mivel a dokumentum hivatkozik a web oldalon,
mint a DOM fa, a HTML-t küldött a szerver,
ablak utal, hogy a króm körül, a címsorba, a címsor,
és minden ilyesmi körül a web oldalon.
>> És kiderül, hogy az ablak objektumnak van egy speciális funkciója belsejében felhívta setInterval
hogy azt teszi, amit mond.
Ez beállítani egy intervallum - ebben az esetben minden 500 milliszekundum -
és az, hogy egy találgatás, mi is fog tenni minden 500 milliszekundum?
Ez lesz végrehajtani ezt a funkciót villog.
És milyen szép itt, hogy mi lehetett volna ezt a C-ben annak ellenére, hogy soha nem volt.
C rendelkezik egy úgynevezett függvénymutatók ahol átadhatók funkciókat körül
argumentumként.
Hasonlóképpen JavaScript tudja átadni a függvény nevét egy másik funkció.
És észre, mit csinálok. Én ezt nem csinálom.
Ha tettem után zárójelben villog, ez azt jelentené, hívja a blink funkciót.
Ha kihagyja őket, azt jelenti, hogy itt a blink funkció
hogy a setInterval nevezhetjük minden 500 milliszekundum.
Tehát a végeredmény, kegyetlen bár az, hogy ha bemegy localhost és menjen blink.html,
Most van ez történik újra és újra.
És ha én tényleg Ellenőrizzük Element, lássuk, ha látjuk ezt.
Hadd Ellenőrizzük Element, hadd lapozzunk lefelé egy kicsit,
én döntöm el Elements ide, és vegyük észre a DOM belsejében Chrome ellenőr.
Ez szó szerint változik oda-vissza minden 500 milliszekundum.
Ha elmegyünk a barátunk Nate,
ha valaha is azon, hogy ez hogyan működik, hasonló ötlet egy intervallumot,
de Nate valójában, hogy nagyon hatékony a színes ebben a konkrét esetben van.
Szóval, mi többet tudunk ténylegesen ezzel?
Nyissuk fel egy másik példát, és próbálj ki valami
ez programból még hasznosabb, mint a dolgok villog.
Hadd menjek a mi formák könyvtárba ma bemegy form0.
Ez volt a legrondább lehetséges formája, hogy én is felér,
és hadd mutassam meg, hogy néz ki a böngészőben.
>> Hadd menjek be localhost / formák, és ez form0.
Ez egy szuper csúnya HTML formában, hogy van egy néhány területen az e-mail, a jelszót,
jelszót, majd egy kis négyzetet, hogy egyezzen bele bizonyos feltételeket.
A fogást, ha meglátogatom ezt az űrlapot, és nem akarom, hogy az Ön e-mail címemet,
Nem akarom, hogy fogadja el a feltételeket talán tudom kattintson a Regisztrálás
és ez lehetővé teszi, engem egyébként.
Ez történik, hogy nyújtson be egy hülye PHP nevű fájlt dump.php.
Csak annyit tesz, nyomtassa ki a tartalmát a $ _GET csak diagnosztikai célokra.
Ez volt, amit nyújtott be a felhasználó által éppen most.
De tegyük fel, hogy valóban szeretnénk érvényesíteni a felhasználó beadvány formájában.
Hadd menjek be 1-es verzióját.
Ez form1.html. Úgy néz ki, esztétikailag ugyanolyan rossz, hanem észre, mennyire divatos is.
Ha kattint Regisztráció nélkül együttműködő, kapok kiabáltam.
"Meg kell adnia e-mail címét."
Rendben van. Akkor hadd próbáljam meg azt. Szóval malan@harvard.edu. Nekem nem kell a jelszót.
Regisztráció. "Meg kell adnia egy jelszót." Rendben van.
Szóval nyújt jelszót bíbor. Regisztráció.
"A jelszavak nem egyeznek." Meg kell most írja be a vörös itt.
Véletlenül ellenőrizni ezt. Regisztráció.
"El kell fogadnia a feltételeket." Rendben van. Egyetért ott. Regisztráció.
És most azt mutatja nekem a diagnosztikai kimenet ott.
>> Szóval, mi történt?
Már volt ez a képessége, hogy érvényesítse űrlapot beküldeni.
Sőt, ha nem belevetik magukat Pset 7, van egy elnézést funkció
teszi, hogy elég könnyű kiabálni a felhasználót egy üzenet jelenik meg a képernyőn.
Én egy kicsit más mechanizmus, a riasztási funkció,
amely nem egy függvény, ami rámosolygott, mivel ez teszi nagyon csúnya felhasználói üzeneteket.
De nézzük, hogy mit csinálok itt.
Ez form1.html, és észreveszi, hogy van néhány nagyon ismerős szintaxist:
body tag, form tag, akció attribútum, módszer attribútum.
De észre adtam a forma egy egyedi azonosító, az egyszerűség kedvéért.
Aztán kaptam egy e-mailt, amelynek mező típusa szöveg,
a jelszó mező, amelynek típusa jelszót megerősítés mezőt, amelynek típusa jelszó,
majd egy jelölőnégyzetet, amelynek neve megegyezés ide, írja be a jelölőnégyzetet.
És aztán van egy submit gomb.
De észre a tetején, amit több van.
Először is, van egy másik használata a script tag.
Ha van valamilyen JavaScript kódot a másik fájl, mint a CSS felveheti azt.
És te, hogy a script forrását, aztán észre én csatlakozó látszólag
hogy googleapis.com egy nagyon hosszú út, de akiknek a fájl neve végződik jquery.min
minimális. js.
jQuery egy szuper népszerű JavaScript könyvtár, hogy csak teszi a JavaScript
Annál is inkább felhasználóbarát használni.
Ez gyakorlatilag vált de facto szabvánnyá.
Tehát annak ellenére, hogy mit fogsz látni, hogy nem tiszta a JavaScript programot önmagában,
ez egy könyvtár tetején JavaScript ugyanúgy, mint a CS50 könyvtár egy réteg
tetején alacsony szintű C kód, a valóságban szinte mindenki az interneten, azt használja.
Tehát ezek nem képzési kerekek. Ez csak a legjobb gyakorlat ezekben a napokban.
Most már észre, alatta az én saját script tag, és észre mit tettem ide.
Kiderül, hogy jQuery csinál egy kicsit díszes.
JavaScript dollár jelek, de értelmetlen.
>> Olyanok, mint a betű A vagy B vagy C
jQuery egyszerűen elfogadta az egyezmény vagy a fajta igényt arra a tényre,
hogy a $ lesz, a speciális szimbólum.
Szóval, amint betölti a globális JavaScript fájlt ide a script tag,
van hozzáférése egy speciális globális változó, hogy hívják $.
Ez pontosabban jQuery hívják, de ez nem úgy néz ki majdnem olyan szexi, mint $.
De a $ nincs speciális jelentése van. A PHP volt speciális jelentése van.
Meg kellett volna ez előtt egy változó.
Ez csak egy szexi dolog, hogy vette.
Mi folyik itt?
Figyeljük meg vagyok halad a jQuery függvény my globális változó dokumentum
majd hívom. kész.
Mit jQuery lényegében jelent ez lehetővé teszi, hogy néhány vanília JavaScript dolgot
mint például a dokumentum objektum, az ablak objektumnak,
és ha azt át szándékozik a jQuery funkció -
és újra, hogy világos legyen, ez egy függvény neve jQuery -
mit csinál ez visszatér egy speciális változata a dokumentum
amely több funkció társul hozzá.
Tehát nyers JavaScript nincs kész funkció,
de ha át dokumentumot a jQuery függvény első,
visszatér egy speciális változata a dokumentum objektum
hogy több képzelet jellegét.
És ez az, amiért az emberek tetszik. Ez csak megkönnyíti a dolgokat csinálni, ahogy mindjárt látni.
Szóval, mit jelent ez kódsort jelent?
Ez a vonal a kód itt azt jelenti, ha a dokumentum készen áll -
Más szóval, ha a böngésző történik olvassa ezt a fájlt felső lefelé -
megy előre, és hajtsa végre a következő funkciót.
Ami igazán érdekes a JavaScript - és a PHP van ez is -
anonim függvények.
A JavaScript segítségével állapítsa funkciók nincs neve, de van egy test.
Figyeljük meg, mi történik itt.
>> Ez a funkció az úgynevezett kész, és ez csak azt jelenti, végezze el az alábbi
amikor az egész weblap kész, amikor ez mind olvasni a szerverről.
Mit akarsz tenni? Azt akarom, hogy végre egy darab kódot.
Figyeljük meg, hogy nem akarjuk, hogy végre ezt a kódot azonnal.
Ha kimaradt ez, ez azt jelentené, hogy azonnal kezdjék meg a végrehajtó ezeket a sorokat a kódot.
De az a tény, hogy én mondom, nem, nem, nem, csomagolja ezt egy névtelen függvényt, mint ez
eszközökkel nem hajtják végre, hogy még, hívja végül.
Láttuk ezt egy pillanattal ezelőtt előző formában példa.
Mit funkció nem nevezünk végül, 500 milliszekundum később? Blink.
Így ugyanazt a gondolatot.
Ismét, még akkor is, ha ez úgy néz ki, egy kicsit furcsa, csak hogy most a hit
hogy a közös piaccal összeegyeztethetőnek nyilvánítja egy névtelen függvényt hívják végül
egyszerűen levelet function () {
Szóval mit kód fogunk végrehajtani végül? A következő.
Ez is úgy néz ki, egy kicsit új, de ez azt jelenti, itt a jQuery funkció
és ez most egy parancsikont.
Ez a kódrészletet a HTML alján a képernyő természetesen van néhány fa képviselet.
Ez nem ezt. Ez az oldal sokkal érdekesebb, mint ez hello, világ példa.
De van néhány fa, amely megfelel az e HTML.
Ez lenne a fájdalom a nyak kelljen végrehajtani valamilyen rekurzív függvény
kezdeni a gyökér csomópontot, majd keresse meg a csomópontot, amelynek azonosítója regisztráció.
Szóval mi jQuery teszi szuper könnyű számunkra szó ez.
Menj előre, és hozz nekem bármit div, vagy bármilyen formában, bármilyen HTML elem
van egy azonosítója regisztráció.
Ez megfelel document.getElementById ("év").
>> Miért hasonló emberek jQuery?
Mert rövidebb beírni. De ez minden. Ez ugyanaz a gondolat.
Szerezd meg a címkét, amelynek azonosítója regisztráció.
És amikor ez tag, amely történetesen egy űrlapot, benyújtják,
megy előre, és hajtsa végre ezt a kódot.
Szóval vessünk egy pillantást most hogyan csinálunk űrlap érvényesítését.
A szintaxis ugyan rejtélyes először, de mi folyik itt?
Ha ezt a kódsort igaz, fogom kiabálni a felhasználót, hogy a saját e-mail címét.
Tehát mi is ebben a sorban a kód?
$ Olyan jQuery. Most már észre ezt.
Ez a fajta, mint a CSS.
Ha már lebukott CSS még, akkor tudja, hogy ez azt jelenti, az elem, amelynek azonosítója regisztráció.
A tér olyan talál egy gyermek vagy egy leszármazottja év akinek a neve bemenet.
És akkor ez a dolog a szögletes zárójelben egy kis szűrőt.
És még ha ez úgy néz ki rejtélyes, ez csak azt jelenti, megy a forma, amelynek azonosító nyilvántartásba vételét,
megy az input elem belsejében, hogy akinek a neve e-mail,
majd kap értékét, bármi értéke történik, hogy -
asdf ha ez minden, amit írógéppel vagy malan@harvard.edu ha ez az, amit beírt.
Szóval, ha az érték az űrlap email mező == semmit, kiabálni a felhasználót.
Különben, ha az érték a jelszó mező == semmit, kiabálni a felhasználót.
>> Különben, ha az érték a jelszó mező nem egyenlő az érték a jóváhagyási mezőbe,
amely a más formában elem, kiabálni a felhasználót.
És végül - és ezt is van néhány új szintaxisa a saját,
de ha egyszer láttam, ez legalább egy kicsit ésszerű -
else if az űrlap, amelynek azonosítója év van egy input elem, akinek a neve megegyezés
és ez be van jelölve, megy előre, és kiabálni a felhasználót.
Szóval teljesen elismerem ez teljesen elsöprő első pillantásra.
Ez egy csomó új szintaxist. De minden jQuery követi az ilyen jellegű minták.
És őszintén szólva, én nem is tudom, ez létezett, amíg néhány perccel ezelőtt.
Én googled "Hogyan ellenőrizheti, hogy egy jelölőnégyzet be van jelölve a jQuery?"
és ez a szintaxis, mert nincs különböző módon csinálja
a tényleges nyers JavaScript kódot.
Szóval, az első lapja Probléma Set 7 hangsúlyozza,
Pset 7 nagyon sok olyan gyakorlat bootstrapping magad
ahol általunk biztosított, remélhetőleg, a fogalmi keret, amellyel kezelni a Pset.
>> De ahogy az gyakran előfordul a web design, ez rajtad múlik, hogy tényleg piszkálni körül,
bele kódrészletek és példák a webről, amíg te idézni őket
a per a feltételeket, hogy az első lemez,
és rájön, hogy a tanulás a HTML, CSS, JavaScript és még SQL
valóban azt jelentette, hogy ezt otthon edzés kezdjük, hogy e képzési kerekekkel.
És észre is van olyan sok más dolog, amit tehetünk a böngészőben.
Belül a legtöbb ilyen elemek vannak más dolgok úgynevezett eseménykezelőt.
És bár mi csak néztem is nevezett onSubmit és onready,
meg tudod csinálni dolgokat, mint onkeydown, onkeyup,
mint amikor a felhasználó megérinti a gombot, akkor figyelj arra és a gomb felfelé.
Gmail billentyűparancsokat.
Hogyan Google végre billentyűparancsokat, mint a C-komponálni?
Ők hallgatni az eseményeket, ahogy ők nevezik, mint onkeypress vagy onkeyup és onkeydown.
Ha valaha is lebegett a kurzort az egyes menüpontot
és hirtelen, íme, egy menü jelenik meg, vagy a grafika színe megváltozik,
hogyan csinálják ezt?
Ahelyett, hogy figyelj a onready vagy onSubmit, akkor figyelj a onmouseover vagy onMouseOut.
>> Így rövid, ezekkel nagyon egyszerű alapokat, hogy már elkezdték karcolja meg a felületét a mai
és mi merüljön tovább szerdán, van, egyre inkább
teljesítmény végrehajtásához a fajta dolog, hogy te már ismert.
Szóval vége van, és mi folytatjuk ezt szerdán.
>> [CS50.TV]