[Powered by Google Translate] [Tydzień 9]
[David J. Malan - Harvard University]
[To jest CS50. - CS50.TV]
Dobrze. Witamy z powrotem. To CS50, i jest to początek 9 tygodniu.
Dziś skupia się w szczególności na projektowaniu, nie jest już w związku z C
ale w kontekście PHP i trochę SQL i trochę JavaScriptu,
szczególnie w kierunku końca zarówno Pset 7, a także Twój projekt końcowy.
W rzeczywistości, jeśli jesteś w tym momencie w końcowym projekcie
gdzie przypuszczalnie z jakąś godzinę temu You przynajmniej zaczął zastanowić
do ostatecznego projektu i myślisz chcesz współpracować z 1 lub 2 kolegów,
jeśli masz problemy z podłączeniem z kolegów powiedział,
prosimy o wypełnienie formularza na cs50.net/partners/form.
To po prostu pyta, kim jesteś, jaki rodzaj projektu myślisz o,
gdzie mieszkasz tylko ze względów logistycznych.
A potem, jeśli chcesz mieć na oku w ciągu najbliższych tygodni lub tak adres URL arkusza tam,
następnie można zobaczyć tylko do odczytu wersji Google doc
, w którym mamy do gromadzenia takich informacji.
Więc jeśli chcesz pracować z kimś, na wszelkie sposoby tutaj, aby dotrzeć do ludzi,
za pośrednictwem tego mechanizmu.
Ale większość ludzi zrobić solówkę pracy. To jest całkowicie w porządku.
Więc nie czuję, że jest to w żaden sposób obowiązkowe.
W piątek, że to tylko ja i kilku z zespołu tu,
pusty teatr dla większości.
Były 3 turystów siedzi tam, więc to było trochę niewygodne.
O czym rozmawialiśmy było baz i rozmawialiśmy o Pset 7 trochę.
A jeśli tak się nie stało, aby złapać, że na film jeszcze, że jest w porządku.
Postaram się ustalić żadnych warunków, że będziemy inaczej bierze za pewnik
na podstawie wykładu piątek.
>> Ale dzisiaj mamy zamiar spróbować dostać się do punktu
o nie tylko jest w stanie zrobić coś takiego Pset 7
ale tak naprawdę zrozumieć, co się dzieje pod maską,
zwłaszcza niektóre z abstrakcji, że wprowadzone w pliku functions.php
aby wasze życie trochę łatwiejsze, ale tak, że w końcu zrozumieć
tak, że gdy kółka spaść w ciągu kilku tygodni można jeszcze przeżyć
w rzeczywistym świecie i robić te rzeczy bez CS50 ram pod Ciebie.
To $ _SESSION, dla tych z Was, którzy znają
lub którzy już złapali film w piątek, co to SESJA zróbmy
w PHP na bazie aplikacji sieci web?
To superglobalna zmienne, co oznacza, że ​​jest w duchu podobnym do GET i POST
i kilka innych, ale co to za rzecz przydatna?
>> Co to jest SESJA służy? Tak. [Uczeń] zalogowaniu
Przepraszam? [Uczeń] zalogowaniu zalogowaniu Rzeczywiście.
W Pset 7 używamy tego superglobalna SESSION ułatwić zalogowaniu
A co o tym miło superglobalną jest to, że tablica asocjacyjna.
Asocjacyjna, odzyskanie, jest tylko tablica ale których indeksów nie muszą już być liczbami
jak 012. Numery mogą być lub mogą być one nawet łańcuchy.
I tak, jeśli już zanurkował Pset 7 jeszcze, może pamiętacie, że jesteśmy przechowywania klucza o nazwie ID
wewnątrz tej tablicy asocjacyjnej, której wartość jest czymś w 123 -
co aktualnie zalogowany ID użytkownika jest.
Motywacją jest to, że nawet po użytkownik odwiedził localhost
czy moja strona bardziej ogólnie, a potem już zalogowany,
nawet jeśli nie kliknij link lub powrót na mojej stronie internetowej na 5 minut
lub nawet godzin lub nawet dni, ale zostawić ich okno przeglądarki otwarte,
za pośrednictwem tej superglobalną Pamiętam, że jesteś zalogowany
>> Innymi słowy, nie pozwala mi nieco długoterminowego przechowywania i ma nic o użytkownika.
A może myślisz o tym naprawdę jako wcielenie koszyku.
Miejsca takie jak Amazon, oczywiście pozwala umieścić rzeczy w koszyku,
ale HTTP, protokół, który zasila w sieci, jest bezpaństwowcem
w tym sensie, że po odwiedzeniu strony internetowej,
w przeważającej części nie masz jakieś stałe połączenie sieciowe
pomiędzy przeglądarką a serwerem.
Jak tylko pobrałeś HTML i JPEG oraz GIF i wszystko,
zasilania odchodzi i trzeba tylko kopię HTML i etażerka z serwera.
Ale jeśli serwer chce pamiętać coś o tobie,
ciężar jest na serwerze, aby faktycznie rejestruje te informacje.
I tak programista, który ma kontrolę nad serwerem
można umieścić prawie wszystko chcesz wewnątrz tego superglobalnej asocjacyjnej
i będzie tam następnym razem użytkownik wraca,
czy jest to minuta, a nawet dni później, chyba, że ​​ich zamknięcie okna przeglądarki,
w którym SESJA punkt znika.
Więc to efemeryczna przechowywania, to nie-trwałe, a to oznaczało, odejść
jak tylko użytkownik zamyka przeglądarkę - nie tylko, że karta, często cała przeglądarki
co skutecznie logowania użytkownika z.
Więc jak to jest rzeczą faktycznie realizowane?
Rzućmy okiem na prostym przykładzie przyjrzeliśmy się w piątek.
Dla tych, którzy znają, to było tak proste, jak to.
Jest to strona internetowa, której jedynym celem w życiu jest mi powiedzieć,
ile razy ja odwiedziłem tę stronę.
To jest pierwszy raz tutaj w poniedziałek, że byłem, więc to mówi 0 razy.
>> Ale jeśli zacznę przeładunku tę stronę, to mówi 1 godzinę, 2, 3, 4, 5,
i będzie to w końcu po prostu zachować na zliczanie w górę, w górę, w górę, w górę, w górę
za każdym razem, tak naprawdę kliknij Odśwież na nim.
Więc jak to działa? Pozwól mi wejść do środka tego pliku o nazwie counter.php.
Górna część to wszystko jest niebieskie komentarzy, ale interesujący jest tutaj.
W linii 13 nazywamy to session_start funkcyjnego
i to jest dosłownie wszystko, co musisz zrobić, jeśli chcesz mieć dostęp
do tego specjalny superglobalna nazwie $ _SESSION.
To sprawia, że ​​jest to możliwe, a my zobaczymy za chwilę, jak to wszystko jest możliwe.
W linii 16 zawiadomienia, co robię.
Jeśli klucz, zwana przeciw - innymi słowy, wartość wskaźnika - "przeciw"
istnieje wewnątrz tej tablicy nazywa SESJA, to co robię z nim w linii poniżej?
Co to jest linia 18 robi?
>> [Niesłyszalne odpowiedź uczeń] Co to jest? [Uczeń] Przechowywanie wartości. Good.
To przechowywania wartości, które jest teraz w sesji w nowej zmiennej lokalnej czasowym,
$ Licznik wszystkimi małymi literami.
Zauważ, że PHP jest już trochę leniwy tutaj.
Zauważ, że nie ma żadnej wzmianki na int lub float lub ciąg lub coś podobnego
ponieważ PHP jest słabo maszynie, której nie trzeba określić typ zmiennej,
w tym przypadku tutaj nie byli nawet oświadczył jeszcze.
Jestem deklarowania wewnątrz tych klamrach i w przeciwieństwie do C, to jest rzeczywiście w porządku.
Bez względu na to, jak głęboko zagnieżdżone deklarację zmiennej w PHP -
wewnątrz nawiasem klamrowym, wewnątrz nawiasem klamrowym i podobne -
będzie w tym momencie w czasie istnieje dla pozostałej części programu,
na lepsze lub na gorsze.
Więc natychmiast staje się globalnym jak najszybciej zdefiniować jako robimy tutaj.
>> W przeciwnym razie, jeśli nie okaże się, że jest coś w superglobalną sesji,
Jestem widocznie inicjowania tej zmiennej licznik na 0,
w ten sposób po prostu zakładając użytkownik nigdy nie było tu wcześniej.
I wtedy to oczywiście jest zwiększany licznik jak?
Ja aktualizację wartości, które jest w środku tej tablicy asocjacyjnej
ustawiając go równa co obecnie jest licznik + 1.
Gdybym przewiń tutaj do kodu HTML strony, to jest rzeczywiście bardzo proste.
Wszystko co mam w ciele tej stronie jest "Ty odwiedziły tę witrynę to i tak razy."
I to jest konstruktem PHP.
Jeśli tak <? =, Jest to równoważne skutecznie co działa?
To naprawdę odpowiednikiem czegoś printf, które widzieliśmy wiele razy w C,
choć jak wiadomo już od specyfikacji w Pset 7,
druku jest także funkcja, która wypisuje tylko coś, to w rzeczywistości nie używać kodów formatu,
i rzeczywiście można powiedzieć, echo, jak również.
Wszyscy są bardzo nieznacznie różnić nawet netto jest ostatecznie sam.
Więc to użycie znaku równości jest tylko rodzajem eleganckiej drodze robi
bardziej zwięźle niż można byłoby w stanie.
Więc to wszystko, ta strona jest. Wypisze wartość licznika.
Jak to wszystko właściwie się dzieje?
Możesz przypomnieć sobie tydzień temu zaczęliśmy szukać pod maską
w jaki sposób strona internetowa działa przy użyciu tej karty inspektora.
>> Chrome ma to zarówno w wersji MAC, wersji systemu Windows, a nawet wersja Linux,
i Firefox i IE mają podobne mechanizmy w której masz ten wbudowany debugger
wewnątrz przeglądarki.
Rzućmy okiem na następujące.
Mamy całą masę kart tutaj, i przypominają, że od lewej jeden jest Elements,
i nie ważne jak godawful HTML i JavaScript to na stronie,
Przypomnijmy, że w karcie Elementy rzeczywiście można poruszać HTML hierarchicznie
i ładne i starannie.
Więc jeśli próbujesz dowiedzieć ze strony internetowej jak Google czy Facebook
czy naprawdę każda strona internetowa, uświadomić sobie, że jesteś prawdopodobnie lepiej
patrząc na kod źródłowy w ten sposób, w przeciwieństwie do oglądania surowych źródło,
co może być bałagan, jak widzieliśmy, zwłaszcza na stronie Google.
Więc jeśli zamiast kliknąć na zakładce Sieci tutaj
Zobaczmy, co się dzieje, gdy odwiedzam tę stronę.
Pozwól mi najpierw wyczyścić pamięć podręczną.
Mam zamiar iść do Ustawienia w Chrome, a następnie przejść do historii
a następnie wyczyść wszystkie dane przeglądarki.
Może zostać użyty do w ten sposób do innych celów, [śmiech]
ale kiedy przychodzi do stron internetowych rozwijających się, to faktycznie przydatne -
Jeśli śmiejesz wiesz. [Śmiech]
Jest to rzeczywiście bardzo przydatne przy tworzeniu stron internetowych, ponieważ w rzeczywistości jest to
takie rzeczy jak ciasteczka i rzeczy jak buforowane pliki HTML, pliki buforowane JavaScript
może faktycznie stać się duży ból głowy, bo jeśli z jakiegokolwiek powodu
Przeglądarka postanawia buforować jakiś plik, a jednak po dokonaniu zmian w tym pliku na serwerze
ale przeglądarka nie bardzo zrozumiał, że plik został zmieniony
i dlatego nie faktycznie ponownie pobrać go nawet po kliknięciu przycisku Odśwież,
jeden z najbardziej Surefire sposobów, aby tylko mieć pewność, że usterka nie jest z kodem,
to z zachowaniem przeglądarce jest iść tu w swojej przeglądarce
i po prostu wyczyścić całą historię tak, że nie ma nieporozumień.
>> A jeśli naprawdę chcesz być paranoikiem, zamknij przeglądarkę, uruchom ją ponownie,
i upewnij się, wszystko działa zgodnie z oczekiwaniami.
Tak w skrócie, cache rozliczeniowa jest dobre, gdy robi rozwoju.
Więc tutaj mamy zakładkę Network.
I poprzednio odwiedził miejsce 9 razy, ale pozwól mi iść do przodu i kliknąć Wczytaj ponownie.
I jestem z powrotem w dół do 0.
Miejmy rzeczywiście zobaczyć, jak to jest, że ta superglobalna SESJA jest stosowane.
Mam zamiar kliknąć na 1 żądania HTTP, które zostały dokonane,
i okno debugowania pozwala mi zajrzeć do tego.
Tutaj widzę tylko odpowiedzi z serwera, który nie jest ciekawy.
Widziałem to na wiele sposobów.
Ale to, co jest technicznie interesujące są nagłówki.
Gdybym przewiń tutaj i skupić się na nagłówkach żądań i kliknij polecenie Pokaż źródło,
co mam zamiar zobaczyć to dosłownie żądania HTTP
że po prostu poszedł z mojej przeglądarki do serwera,
GET jest operacyjny słowo, a następnie / counter.php będące nazwa pliku,
HTTP/1.1 prostu wersja HTTP, że moja przeglądarka korzysta.
Linia ta tutaj jest trochę przypomnienia z przeglądarki do serwera, co nazwa serwera jest
że chce porozmawiać.
A potem reszta to jest czasami ciekawe, ale nie istotne teraz.
>> To jest po prostu swego rodzaju ciekawostka.
Cryptic chociaż napis jest, za każdym razem przeglądarka odwiedza stronę internetową
jest informowanie serwera jakiej przeglądarki używasz
i jaki system operacyjny używasz i jakie wersji.
Więc jeśli kiedykolwiek zastanawialiście się, jak strony internetowe, takie jak CNN i etażerka
wiedzieć, jakie są procenty użytkowników komputerów Mac w sieci Web, użytkowników komputerów PC,
Użytkownicy IE, użytkownicy Chrome i podobne, to dlatego wszystkie nasze przeglądarek
mówią każdą stronę tam, czym jesteśmy.
Nie musi ona zawierać dane osobowe,
ale ma poinformować serwer, co adres IP jest i jaka przeglądarka i system operacyjny, którego używasz.
Więc to, gdzie ta informacja jest.
Ale co ciekawsze teraz, jeśli chodzi o tych sesjach jest nagłówek odpowiedzi.
Pozwól mi zobaczyć kliknij źródło obok odpowiedzi.
Co ciekawe, o to kilka rzeczy.
1, wróciliśmy kod stanu 200.
Nigdy nie widzimy ten kod stanu, ponieważ to oznacza, że ​​wszystko jest dobrze.
Oznacza to dosłownie w porządku w przeciwieństwie do czegoś innego.
Co znajduje się numer czasami widzimy, że to źle? [Uczeń] 404.
404, nie znaleziono pliku, 403 ty mogą być przeszkodą na już
co jest zabronione, co oznacza, że ​​zapomniałeś coś chmod, najbardziej prawdopodobne.
I jest kilka innych.
>> Tu, to jest trochę szalony.
I tak naprawdę napisał ten plik kilka minut temu, wklejając go w gedit.
Dlaczego ta strona wygasa w 1981 zanim naprawdę WWW?
Co się tam dzieje?
>> [Niesłyszalne odpowiedź uczeń] datownik. Ale dlaczego?
To nieco arbitralny, ale jest rzeczywiście przydatne.
Co to mówi do mojej przeglądarce jest to plik PHP właśnie zwróciła już minął.
W rzeczywistości, to ważność 30 lat temu.
Ale co to tak naprawdę oznacza?
To oznacza tylko następnym razem użytkownik odwiedza tę stronę,
czy to poprzez przeładunek lub wpisać adres URL w pasku adresu
upewnij się, idź i pobrać nową kopię.
Jest to swego rodzaju przykład krach cache,
głupie słowo, które oznacza po prostu stara się zniechęcić przeglądarek
z faktycznie HTML buforowania, które zostało wysłane z serwera
tak, aby przypadkowo nie przeładować, a następnie sprawdzić tę wersję pliku.
Ty naprawdę chcesz, aby serwer wysłać nową kopię.
Tak więc fakt, że to po prostu oznacza, że ​​1981 to właśnie urządzenie wybiera
jako arbitralnej daty w przeszłości.
Ale prawdziwy soczysty linia jest teraz ten.
Jeszcze przed 50 pewnie masz jakieś pojęcie o ciasteczkach.
W tej chwili, szczególnie wśród tych mniej wygodne lub pomiędzy,
co to jest plik cookie w zrozumienie teraz
nawet jeśli mamy zamiar uczynić rozumienie bardziej techniczny?
Co jest cookie? Tak.
[Uczeń] Informacja o użytkowniku, jak wtedy, gdy pisałem swoją nazwę użytkownika lub coś.
>> Good. To informacje o użytkowniku, czy są już wpisane w nazwie użytkownika już.
Cookies to sposób w którym serwery mogą pamiętać coś o użytkowniku.
I co tak naprawdę jest plik cookie jest plikiem tekstowym lub niektórych sekwencji bajtów
który jest obsadzony przez serwer wewnątrz przeglądarki,
i wewnątrz tego pliku lub wśród tych bajtów jest jakiś identyfikator.
Może to dosłownie nazwa użytkownika, ale częściej jest to coś więcej, tajemniczy przystojny
jak to coś tutaj - bo8dal3ct i tak dalej - to naprawdę duży ciąg alfanumeryczny
, który jest tak naprawdę ma być unikalny identyfikator dla Ciebie.
Można też pomyśleć o tym jako rodzaj wirtualnego stempla ręcznego.
Jeśli pójdziesz do jakiegoś klubu lub parku rozrywki, aby pamiętać, że już faktycznie zapłacona
i poszedł w, umieścić czerwoną naklejkę w ręce pewnego rodzaju,
i przypomina ludziom przy kasie że już zapłaconej
i można przyjść i odejść, jak chcesz.
Cookies są trochę w duchu podobnym do tego.
Po raz pierwszy odwiedził tej strony, jak właśnie to zrobiłem po usunięciu pamięć podręczną,
serwer WWW, urządzenie w tym przypadku, należy umieścić pieczątkę na ręce
którego nazwisko PHPSESSID, session ID,
którego wartość jest to naprawdę długi ciąg alfanumeryczny.
>> Tak się to teraz jakby zdobi na mojej dłoni, tak aby następnym razem przeładować
lub ręcznie, odwiedź ten adres URL w przeglądarce
moja przeglądarka z definicji HTTP zaprezentuje piętno ręki
znowu i znowu i znowu.
Więc nawet jeśli serwer nie musi wiedzieć, kim jestem,
oni przynajmniej wiedzą, że jestem sam użytkownik lub przynajmniej bardziej konkretnie, sama przeglądarka.
I tak to jest w końcu jak superglobalna SESJA jest zaimplementowana.
Serwer nie ma pojęcia, kim jesteś, kiedy ponownie witrynę dla sekund lub po raz trzeci
chyba że przedstawi ten znaczek ręki.
I jak najszybciej przedstawić tę pieczęć rąk,
Serwer WWW w istocie idzie do małego bazie własnej
i sprawdza, w porządku, ja właśnie widział znaczek ręki o bo8dal3ct użytkownika i tak dalej.
Pozwól mi zobaczyć, jakie informacje programista przechowywane
wewnątrz superglobalną o tym użytkownika,
i pozwól mi się upewnić, że dane są ponownie wewnątrz superglobalnej SESJI
tak, że programista może ponownie uzyskać dostęp do tych danych
nawet jeśli był ustawiony kilka minut lub godzin temu.
Więc innymi słowy, pliki cookie, które dostał złą reputację na jakiś czas
z powodu niepewności w przeglądarkach i mogą naprawdę naruszać naszą prywatność, a wszystko to,
rzeczywiście mają wielkie narzędzia bo bez nich
chcesz być stale logowania do każdej odwiedzanej stronie Facebook
Gmail email lub co czytasz, jeśli przeglądarka nie ma jakiś sposób na zapamiętywanie
że już potwierdzona.
>> Więc w ten sposób pliki cookie są wysyłane tam iz powrotem po drugiej stronie drutu.
Kolejną ciekawostką na temat cookies, szczególnie tutaj, jest to, że jest całkowicie w postaci zwykłego tekstu.
Nie ma szyfrowania tutaj dzieje, co,
i rzeczywiście używam HTTP w tej chwili.
Jednym z naszych ulubionych momentów w CS50, który jest teraz 2 lata temu,
została na czas narzędzie o nazwie Firesheep wyszedł.
To było wolne oprogramowanie, które zostało dokonane przez badacza bezpieczeństwa
jako pobudkę dla społeczności powiedzieć jak potwornie realizowane
niektóre mechanizmy uwierzytelniania w sieci były.
Więc przez jakiś czas, Facebook był niemal w całości przez HTTP, nie HTTPS.
I nawet jeśli nie masz pojęcia, jak działa crypto, S jest bezpieczne
więc to oznacza, że ​​jest co najmniej niektóre szyfrowanie zaangażowany.
Facebook nie używany do szyfrowania nazw użytkowników i haseł,
ale jak tylko Sprawdziliśmy wyśmiewa lub wiadomości lub swojego kanału wiadomości,
Wszystko to było szyfrowane.
Tak było aż do Gmail tylko rok lub 2 temu.
Za każdym razem, że jesteś zalogowany, tak, kiedyś bezpieczne szyfrowanie
ale potem nie. I dlaczego może być tego przyczyna?
Dlaczego po prostu nie używać kryptografii cały czas w przypadkach użycia takich jak to?
Co to jest? Myślę, że coś słyszałem. [Uczeń] Speed.
Prędkość, prawda? Istnieją sposoby, żeby to ominąć.
Ale jeśli po prostu rodzaj myśleć logicznie, jeśli zaszyfrować coś
musisz zrobić przynajmniej trochę więcej pracy.
W Pset 2 kiedy realizowane Cezara lub Vigenère nawet crack,
tylko drukowanie ciąg jest stosunkowo łatwe.
Szyfrowanie, a następnie wypisujemy napis minimalnie wymaga nieco więcej pracy.
>> Dla super popularnych stron internetowych takich jak Google i Facebook,
jeśli musisz wykonać więcej pracy dla każdego użytkownika, dla każdej strony odwiedzają,
że po prostu wymaga więcej czasu procesora.
A jeśli potrzebujesz więcej czasu procesora, może być konieczne więcej serwerów,
co oznacza, że ​​może być potrzebne więcej pieniędzy.
I tak przez wiele lat to po prostu naprawdę nie było najlepsze praktyki.
Ludzie będą używać szyfrowania SSL tylko wtedy, gdy potrzebne.
Okazało się jednak, i jak ten facet z Firesheep wykonane super jasne,
kiedy wy, którzy są obecnie na Facebooku już teraz -
Z ciekawości, zobaczymy, czy będziesz FESS up.
Jeśli jesteś na Facebooku już teraz w niektórych karcie, nawet jeśli nie jest przywrócony,
Twój URL HTTP lub HTTPS?
[Wiele studentów] S. S? [Śmiech]
Okay. Wszelkie HTTP? Tylko 1? Okay.
Tak więc każdy z nas może wykraść tego faceta konta Facebook teraz.
W większości stało się domyślnie włączona, co najmniej w niektórych stron.
I długą historię, jeśli ruch internetowy nie jest szyfrowane,
nie tylko HTML tam iz powrotem w poprzek WiFis niekodowane,
więc nie takie rzeczy jak ciasteczka tam iz powrotem w całym powietrzu
bez żadnego szyfrowania.
Więc jeśli masz tylko trochę doświadczonych programowania lub odrobinę Googling umiejętności
znaleźć darmowe oprogramowanie, które wykonuje to, wszystko co musisz zrobić, to siedzieć w Starbucks
lub siedzieć na lotnisku, gdzie jest ogólnie niezaszyfrowane WiFi
i po prostu uważać na słowa kluczowe, jak Set-Cookie: PHPSESSID lub
ponieważ jeśli masz techniczną doświadczonych tylko oglądać WiFi
dla wszystkich bitów w ciągu przepływu powietrza w tym modelu,
można zatem powiedzieć, że facet PHPSESSID bywa bo8dal i tak dalej.
A potem jeszcze raz, jeśli jesteś wystarczająco technicznie doświadczonych lub mieć odpowiednie narzędzie,
możesz po prostu zmienić konfigurację swojej przeglądarki, aby rozpocząć przedstawianie że znaczek ręki
na Facebook.com, a Facebook jest tylko zamiar założyć, że jesteś, że facet
bo wszyscy wiedzą, że nie jest to, kim jesteś, ale to masz ten niepowtarzalny identyfikator.
Więc jeśli kraść to unikatowy identyfikator i przedstawić go do serwera, jako swoją własną,
są one po prostu się pokazać, że osoby kanał wiadomości
lub taka osoba w wiadomości lub wyśmiewa.
>> I chciałbym Google teraz jak włączyć HTTPS dla Facebook może.
Ale to naprawdę jest tak proste.
I tak Facebook i Google oraz jak zdobyć w tym naprawdę dobra,
ale miej oko tym bardziej jakichkolwiek odwiedzanych witryn, które nie używają protokołu HTTP
i mieć jakiś poufnych informacji na ich temat,
czy to finansowe lub osobiste lub podobne.
Jeśli nie korzystasz z tego, całkiem prawdopodobnie może ciasteczka lubi bardzo łatwo skradzione
i kute, a to jest dokładnie to, co Firesheep zrobił.
Nie trzeba być programistą.
Wszystko, co musiałem zrobić, to być połączenie z Internetem, pobrać darmowe narzędzie,
i co by to zrobić, to zalogować się i wtedy byłoby pokazać nazwy Facebook
każdy z w Sanders, w tej konkretnej demonstracji, wokół ciebie
i wszystko, co musiałem zrobić, to kliknąć na ich nazwę i oprogramowanie automatyzacji procesu
z wąchania to ciasteczko, przedstawiając go na Facebook, jak własne,
i, voila, jesteś zalogowany
Więc to jest jedna z tych "nie rób tego" oficjalnie.
Jeśli masz własną sieć domową i chcesz majsterkować, przez wszystkich środków,
ale sobie z tego nie przekroczyć linię na środowisku akademickim.
>> Ale cel tutaj jest naprawdę nie podkreślić, jak to zrobić
ale w jaki sposób bronić się przed tego typu rzeczami.
A rozwiązanie trywialne tutaj, choć sama w sobie jest błędna,
jest naprawdę zmniejszyć użycie wszelkich witryn, które nie są przy użyciu protokołu HTTPS stale.
Więc witryn, takich jak Facebook i Google coraz częściej mają pola wyboru
gdzie można wybrać się na tego typu rzeczy,
i banki miały to od lat z podobnych przyczyn.
Więc po prostu trochę czynnik strachu, jeśli możemy. Ale to wszystko w pigułce.
W ten sposób serwer pamięta, kim jesteś.
I tak szybko jak mogą pamiętać, kim jesteś, może pamiętasz coś o tobie
że programista przechowywane wewnątrz tej specjalnej superglobalną nazwie $ _SESSION.
A dla Pset 7 używamy go trywialnie tylko pamiętać int,
czyli unikalny identyfikator użytkownika, który zalogował się,
tak, że wiemy, że było tam wcześniej.
Wszelkie pytania, a następnie na sesji lub ciasteczka lub podobnych?
Firesheep nie działa tak dobrze już,
i trzeba przełączyć komputer w specjalnym trybie promiscuous
więc jesteś rzeczywiście słuchając ruchu oprócz siebie.
Więc jeśli jesteś obecnie pobieranie Firesheep, sobie sprawę, że nie jest tak łatwo
jak to było kiedyś udowodnić.
Dobrze. I nie rób tego w Sanders. Czy to w domu.
Baz danych.
Jedną z rzeczy, które zrobiliśmy w Pset 7 bardzo świadomie
została dajemy tabeli bazy danych próbek dla użytkowników ma pewne identyfikatory użytkowników,
niektóre nazwy użytkowników i niektóre zaszyfrowane hasła nim.
A jak zobaczysz, jeśli jeszcze go nie masz, będziesz musiał zmienić tabelę trochę.
Będziesz musiał dodać trochę cache dla każdego z użytkowników w tej tabeli,
i będziesz musiał dodać kolejną tabelę historię, stół, portfele
czy może nazwać to coś innego.
Ale jeśli chodzi o myślenie o tym, jak to zrobić, niech otworzy tego narzędzia
którego użyliśmy w piątek, ale jeśli znają, urządzenie dostarczane jest narzędzie
nazywa phpMyAdmin który przypadkowo napisana w PHP,
ale jego celem w życiu, po zalogowaniu się tutaj jako jharvard z purpury,
jest mi przyjazny dla użytkownika sposób wyświetlania i zmiany mojej bazy danych.
>> Bazy danych, który używam na urządzenie nazywa MySQL.
Jest to bardzo popularny, i to za darmo bazy danych open source, że to cudownie łatwy w użyciu,
zwłaszcza z przodu kończy się w ten sposób.
Co to narzędzie pozwala mi robić, na przykład, jest rozejrzyj tabelach.
Pozwólcie mi iść do przodu i robić.
W piątek utworzona tabela o nazwie studenci to było super proste.
Miał 3 kolumny - id, nazwa, i e-mail - i ręcznie dodaje kilka wierszy
jak Dawid i Mike w tym konkretnym przykładzie.
Zróbmy to nieco dalej i załóżmy, że chcemy pamiętać więcej
niż tylko imię i e-mail o użytkownika.
Pozwól mi się tutaj, kliknij Structure na szczycie.
I znowu, pset poprowadzi Cię przez odpowiednie kroki tutaj,
więc nie martw się, jeśli niektóre to trochę szybko.
Wtedy będę kliknij tutaj.
Mam zamiar dodać liczbę kolumn po email
bo chcę dodać coś takiego domu.
Zapomniałem nagrać studenta dom.
Let Me Kliknij Dalej, a teraz mamy tego formularza, który niestety jest trochę szeroki, od lewej do prawej,
ale mam zamiar zadzwonić do nazwy tego domu w terenie,
a następnie wpisz teraz mam do wyboru.
Więc niech mają krótką pogawędkę na temat różnych typów w MySQL
ponieważ podczas gdy PHP jest słabo wpisane i to jakby gra szybko i luźne z typów,
w bazie danych, zwłaszcza, że ​​to bardzo ważne, aby faktycznie korzystać pisania na swoją korzyść
ponieważ jedna z tych rzeczy, MySQL i innych silników baz danych może zrobić dla Ciebie
jest zapewnienie, że nie należy umieszczać fałszywych danych do bazy danych.
To jest coś w rodzaju wolnego sprawdzania błędów dostępne.
>> Do domu mamy oczywiście nie ma to być int, który jest 32-bitowa wartość w MySQL.
Mieliśmy rozmawiać krótko w piątek o varchar, co oznacza zmiennej długości char.
Co to jest? To pozwala określić, że chcesz, że jest to ciąg jakiejś.
Tak naprawdę nie wiemy z góry, jak długo to jest,
więc będziemy arbitralnie powiedzieć nazwa dom może być 255 znaków,
ale można iść z 32, 64 - dowolną liczbę naprawdę.
Ale zaletą korzystania z varchar na polu o nazwie char jest co?
Tylko intuicyjnie jeśli przewiń tu zauważyć że char i jest varchar.
VARCHAR jest zmienna długość char; char jest stała długość char.
Tak więc wyłącznie na podstawie tej definicji, co jest zaletą czy wadą każdego z nich?
Innymi słowy, kto troszczy się o różnicy, ani dlaczego powinno Cię to obchodzić?
>> Tak. [Uczeń] Varchar ma większą elastyczność, ale zajmuje więcej pamięci.
Good. Varchar zajmuje więcej - Zobaczmy. Nie jestem pewien, czy słyszałem, że prawo.
Można powiedzieć, że po raz kolejny?
[Uczeń] powiedziałem varchar prawdopodobnie ma większą elastyczność, ale to zajmuje więcej pamięci.
Ciekawe. Okay. Varchar prawdopodobnie daje większą elastyczność, ale zajmuje więcej pamięci.
Ten ostatni nie jest zawsze prawdziwe.
To zależy od kontekstu, ale wróćmy do tego.
>> [Niesłyszalne odpowiedź uczeń] Dokładnie.
To rzeczywiście jest tak, że char zazwyczaj więcej pamięci
ponieważ char, jak w C, jest jak łańcuch, to jest tablica znaków.
Więc jeśli mówisz char pole długości 255,
Baza jest dosłownie dać ci 255 znaków.
I jeśli dom kończy się Mather i 6 znaków razem,
marnujesz ponad 200 znaków.
>> Więc varchar skutecznie wykorzystuje tylko tyle znaków, jak to jest konieczne
do maksymalnej wartości.
Ale cena, jaką płacisz jest faktycznie wydajność, potencjalnie.
Jeśli wiesz z góry, że wszystkie ciągi będą 8 znaków -
Na przykład załóżmy, że wymagają haseł o długości 8 -
Minusem korzystania char pole przy okazji, choć nie często,
jest określenie, stałą długość za coś jak hasło
bo teraz baza danych może być jeszcze mądrzejszy.
Jeśli wie, że każdy char pole, każdy ciąg w kolumnie jest tej samej długości,
wrócisz z funkcji losowego dostępu.
Można skakać wśród różnych dziedzin char w tabeli bazy danych
bo myślę o bazie danych, wierszach i kolumnach.
Tak więc, jeśli każdy z tych łańcuchów jest tej samej długości,
wiesz, że pierwszy z nich jest w bajcie 0, następny jest w bajcie 8
i 16 i 24 i tak dalej.
Więc jeśli wszystkie struny są tej samej długości, można skakać znacznie wydajniej.
Tak, że może być korzyści w zakresie wydajności,
ale zazwyczaj nie masz na luksus wiedząc z góry,
tak varchar jest droga.
Oto kolejny szczegół, że nawet Facebook wpadł ostatecznie.
Ints są świetne, a my jakby ich używać domyślnie czasu chcemy liczbę,
ale to tylko 32 bity.
>> I mimo, że Facebook nie dość mają 4 miliardy użytkowników teraz,
tam na pewno niektórzy ludzie, z wielu kont
lub rachunków, które zostały otwarte, a następnie zamknięte,
i tak samo uważam Facebook kilka lat temu mieliśmy do przejścia z int
aby, jak to trafnie określił, bigint, która znajduje się zaledwie 64 bity zamiast.
Więc to też jest decyzja projektowa.
Użytkownik będzie niezwykle szczęśliwy, jeśli projekt końcowy okazuje starcie,
ma 4 mld euro i 1 użytkownicy, lub dać,
w takim przypadku za pomocą wskazówki może być trochę krótkowzroczne.
Ale w rzeczywistości, tabela użytkowników jest chyba w porządku z wskazówki.
Ale na coś takiego Pset 7, jak tabeli historii,
możesz mieć tysiące, miliony użytkowników, jeśli przekształci się etrade.com.
Tak więc mając na uwadze, że nie może mieć więcej niż 4 miliardy użytkowników,
tych użytkowników, masz może mieć ponad 4 miliardów transakcji w czasie -
kupuje i sprzedaje i rzeczy w ich historii.
Więc jeśli nie przewidujemy - znowu są to dobre mają problemy, jeśli masz tyle danych -
jeśli nie przewidujemy danych przekraczające rozmiar int,
dzieje z czymś bigint jest kierunek nie tyle często przyjmowane przez projektantów
bo rysunek osób, które nie będzie to problem,
ale to jest łatwo wybrać coś większego niż to.
Decimal używamy w Pset 7, która określa stałą precyzję
dzięki czemu można uniknąć problemów z udziałem pływaków i dwuosobowymi oraz rzeczywistymi i podobne.
>> I jest jeszcze kilka innych pól tutaj. Będziemy machać ręce na nich w pewnym stopniu.
Ale daty, godziny wszyscy mają wymaganego formatu w MySQL,
i zaletą przechowywania dat jako daty, a nie varchars
Oznacza to, że baza danych może faktycznie sformatować je w różnych formatach,
czy format Amerykański lub europejski format lub jak - jednak chcesz -
znacznie skuteczniej, niż gdyby tylko niektóre generic varchar.
I jest jeszcze inny binary, varbinary, bąble.
Są to duże obiekty binarne, a można również przechowywać dane binarne
geometrycznych oraz danych w bazie danych.
Ale dla nas my zazwyczaj dbają o wskazówki i varchars i jak.
Chodźmy dokończyć ten przykład z domu.
Dom zamierzam arbitralnie powiedzieć będzie 255 znakow.
Następnie wartość domyślna moglibyśmy to zrobić.
Moglibyśmy domyślnie wprawiła wszystkich w Mather House, na przykład.
W ten sposób możemy określić, że baza danych
Należy zapewnić, że ktoś zawsze wartość. Ale zostawię to będzie.
W rzeczywistości, dla ludzi, którzy mieszkają poza kampusem, a nie w domu,
Może faktycznie chcę wskazać, że domyślna wartość domu jest NULL,
i wtedy trzeba sprawdzić to pole i powiedzieć bazy jest w porządku jeśli użytkownik dom jest NULL.
>> Ponownie, jest to kolejny mechanizm obronny można umieścić w miejscu
więc nawet nie mam go umieścić w kodzie PHP niekoniecznie.
Baza gwarantuje, że rzeczy są lub nie są NULL.
I wtedy wreszcie, Atrybuty.
Żaden z nich są naprawdę istotne.
Binary, unsigned - żaden z nich nie są istotne do varchar.
Index.
Czy ktoś wie, czy zapamiętać lub masz przypuszczenia co do tego, czym jest indeks
na coś takiego domu?
To też jest rzeczywiście ważne i stosunkowo łatwa decyzja design.
Dla tych, którzy jeszcze tego nie widział, w piątek, rozmawialiśmy krótko o kluczy podstawowych.
W tabeli bazy danych, klucz podstawowy jest polem lub kolumna
, który jednoznacznie identyfikuje wiersze tabeli.
Więc w obecnej tabeli mamy identyfikatory, mamy nazwiska i e-maile.
Które z nich jest najlepszym kandydatem jest kluczem głównym,
którego zadaniem jest identyfikowanie wiersze?
Prawdopodobnie ID.
Zapewne, możemy również użyć, co jednak?
Być może można wykorzystać wiadomość, ponieważ w teorii to wyjątkowy
chyba że ludzie dzielą kont pocztowych.
Ale rzeczywistość jest taka, że ​​jeśli używasz numeryczny identyfikator, jak 1234,
to tylko 32 bity, a adres e-mail może być to wiele bajtów lub to wiele bajtów.
Tak pod względem wydajności dla niepowtarzalnych identyfikatorów,
to wydaje się być po prostu dobra praktyka w obsłudze int
nawet jeśli masz jakieś kandydata ciąg że można zapewne wykorzystać.
>> Na coś takiego domu, to nie powinno być kluczem podstawowym
bo wtedy tylko 1 osoba może żyć w Mather i 1 osoba w Currier i jak.
Podobnie, nie powinny być unikalne.
Różnica pomiędzy podstawowym i jest unikalny w naszym przypadku tabeli
ID będzie głównym, ale e-mail nie jest pierwotny, ze względów właśnie mowa -
wydajność - ale w dalszym ciągu powinno być unikatowe.
Więc nadal można wymuszać unikatowość bez dokonywania roszczenia
, że jest to super ważne pierwotne pole.
Ale to jest bardzo pomocne: Index.
Jeśli wiesz z góry za ostatecznego projektu, na Pset 7, lub w ogóle,
że ten dom, pole to będzie coś, czego szukać na wielu
używając wybierz słowo kluczowe lub coś innego,
następnie można prewencyjnie powiedzieć bazę do pracy jej magii
i upewnić się, że tworzy w pamięci żadnych wymyślnych struktur danych konieczne
aby przyspieszyć wyszukiwanie na podstawie domu.
Być może będzie to użycie tabeli mieszania, może będzie używać połączonej listy.
W rzeczywistości, to ma tendencję do korzystania z drzewa, często struktura zwana B-tree -
nie drzewo binarne, ale B-tree - co jest bardzo szeroki, drzewo
, które można zobaczyć w klasie jak CS124, dane klasy struktur.
Ale w skrócie, nie musisz się martwić, że podczas korzystania z inteligentnego oprogramowania bazy danych.
Można tylko powiedzieć to, "Index to pole, więc można szukać na nim bardziej efektywnie."
>> Jeśli pozostawisz to off i spróbować poszukać dla siebie w bazie danych, która mieszka w Mather,
będzie sprowadzać się do liniowego wyszukiwania.
A jeśli masz 6.000 undergrads wszystkich żywych w pewnym domu,
masz zamiar przeszukać całą tabelę znaleźć Matherites,
natomiast jeśli powiesz Index, miejmy nadzieję, że będzie coś blisko logarytmicznej wyszukiwanie
znaleźć te rodzaje studentów.
To jest po prostu bezpłatna funkcja włączyć,
nawet jeśli nie pochodzi w cenie pewnej ilości przestrzeni.
Wreszcie, auto-increment, pole to AI,
co oznacza po prostu, czy jest to int i nie chcesz, aby zwiększyć dbać samemu
za każdym razem jest nowy użytkownik, sprawdzić, że
i każdy użytkownik, który pobiera automatycznie dodaje się nowy identyfikator.
Załóżmy, kliknij przycisk Zapisz, a teraz niech się przyczepić z tym wzorem.
Jeśli pójdę do przeglądania, można zauważyć, że zarówno Mike i mój dom jest NULL.
Mogę użyć phpMyAdmina edytować ręcznie.
Mogę iść w tutaj i wpisz w Mather, a następnie naciśnij klawisz Enter,
i teraz zauważyć tabela jest inna.
Zauważmy jednak mogłem zrobić coś innego, jak również.
ID Dawida to 1, więc phpMyAdmin ponownie jest tylko narzędziem administracyjnym;
to nie jest coś, użytkownicy są coraz zamiar zobaczyć jest.
Więc jeśli zamiast kliknąć zakładkę SQL do góry -
i znowu, pset 7 wprowadzi Cię w kilka z tych pytań -
Można ręcznie wykonać polecenia SQL zorganizowany Query Language
Użytkownikom UPDATE SET dom = 'Pfoho' WHERE id = 1.
Te zapytania SQL są ładnie tyle, całkiem czytelny, od lewej do prawej.
Aktualizacja tabeli użytkowników, w polu o nazwie dom Pfoho
gdzie identyfikator użytkownika jest 1.
Czy mogę to zrobić nawet jeżeli email = "malan@harvard.edu".
Tak długo, jak jednoznacznie identyfikuje mnie, że będzie działać, jak również.
Ale ID jest wyższa wydajność, więc zróbmy to.
Załóżmy, kliknij przycisk Przejdź. Okay, lecture.users nie istnieje. Jaki jest mój błąd?
Co znajduje się w tabeli w rzeczywistości nazywa się tutaj?
To się nazywa uczniów tylko dlatego, że to, co zrobiliśmy tutaj w lewym górnym rogu.
Nazywa się studenci, nie użytkowników. Więc kliknij przycisk Idź teraz.
1 wiersz dotyczy. Zapytanie trwało 0.01 sekund.
Jeśli kliknę Znajdź teraz, teraz Malan życie w Pfoho.
Więc to jest inny smak SQL, ale pset Cię przez nieco więcej o tym.
>> Jest głupia decyzja ja już tutaj.
Uważam, że ten projekt bazy danych jest nieefektywne
bo im więcej osób dodać do tabeli Studenci,
więcej z nas zaczynam dodając więcej TF zaczynam dodawanie,
mamy zamiar rozpocząć, aby zobaczyć co zwolnień w tej tabeli?
>> Tak. [Uczeń] Widząc, że jest to w studentów, używamy tego samego [niesłyszalne]
Samo - Prawo, dokładnie.
Tak więc, jeśli 400 osób mieszka w Mather, lub dać,
ostatecznie tabela ta będzie mieć 400 wierszy, które mówią "Mather, Mather," ""
"Mather," "Mather," "Mather."
Tracimy wszystkie z tych bajtów, a tam kilka bram tam.
1, jest szalona sprawa róg, gdzie jeśli ktoś płaci dużo pieniędzy
i zmienia nazwę Mather, teraz musimy zmienić naszą całą tabelę bazy danych.
To nie stanie się często, choć Pfoho kiedyś nazywano North House 15 lat temu,
tak to się dzieje. Ale to nie wszystko, co atrakcyjne.
Bardziej przekonujące niż przypadku narożnego podobnego z konieczności aktualizacji danych w dużych ilościach
dla bazy danych jest dlaczego przechowywanie Mather znowu i znowu i znowu i znowu?
To dużo znaków, 6 znaków.
Czy nie możemy zrobić jeszcze lepiej, zwłaszcza dla Pforzheimer?
Oczywiście możemy zrobić lepiej, że wiele znaków.
Dlaczego po prostu nie kojarzy unikalny identyfikator z każdego domu
i sklep, który dla każdego użytkownika? Warto więc spróbować.
Zamiast po prostu skorzystać z tabeli Studenci, pozwól mi iść do mojej bazy danych wykład tu w lewym górnym rogu.
Zauważcie mówi Utwórz tabelę.
Pozwól mi utworzyć nową tabelę o nazwie domy.
Liczba kolumn będzie 2. Enter.
Teraz mam 2 pola.
Mam zamiar zadzwonić to imię, i to będzie varchar długości 255,
>> ale to dość arbitralne. Powiem tu umownie.
Więc umieścić identyfikator tutaj. Dajmy każdy dom unikatowy identyfikator.
Dajmy każdy dom nazwę.
Miejmy określić, że identyfikator będzie unsigned tylko umownie używać tylko liczby dodatnie.
Idziemy do przodu i dać ten automatycznego przyrostu pole do teraz.
A czy trzeba coś jeszcze?
Idziemy dalej i kliknij przycisk Zapisz.
Teraz mam drugą tabelę.
Zauważ, jak na bok to lekko tajemnicze polecenia SQL
że trzeba było wpisywać ręcznie, jeśli nie za pomocą narzędzia administracyjnego jak phpMyAdmin.
Tak więc kolejny powód, dla którego go używać.
To cudownie przydatne rodzaj pedagogicznie, bo można kliknąć ok.
i dowiedzieć się, jak to wszystko działa tylko przez kopiowanie i wklejanie co phpMyAdmin zrobiłem.
Ale polecenie CREATE TABLE, co było po prostu wykonane, i tu jest mój stół.
Pozwól mi iść dalej teraz i używać surowego SQL zamiast oversimplify klikając kartę Wstawianie.
Pozwól mi zrobić INSERT INTO domów
i mam zamiar powiedzieć nazwę domu będzie miał wartość 'Mather'.
To jest to. Ta składnia jest nieco bardziej tajemnicze.
Jest to nazwa pola, które chcemy wstawić.
Są to wartości, które chcemy wstawić do tych pól. Niech kliknij mnie.
1 dodaje się wiersz trwało 0.02 sekund. Let Me Kliknij Znajdź teraz.
>> Zauważ, jeśli kliknę Przeglądaj, tam Mather, którego ID jest przez automatyzację numer 1.
Pozwól mi zrobić kolejne. Pozwól mi iść do zakładki SQL.
INSERT INTO domów. Nazwę domu będzie mieć wartość Pfoho i tak dalej.
Idź. I mogę robić to ponownie i ponownie i ponownie.
Albo jeśli się nudzić pomocą phpMyAdmin, możesz po prostu użyć karty Wstawianie
i nie trzeba wpisywać surowego SQL.
Można po prostu uderzyć go szybciej, wpisując na przykład, Kurier, Enter,
i teraz, jeśli klikamy Przeglądaj, tam Currier z identyfikatorem 3.
Więc to jest to, co mamy na myśli przez auto-przyrostu.
Ale teraz mamy naprawić coś w studentów.
Wśród studentów, co powinno typ danych pola domu teraz?
Powinno być int, prawda?
Tak więc celem jest czynnik poza, inaczej znany jako normalizacja, tabele
tak, że nie przechowujemy informacji nadmiarowo w żadnym z moich tabel.
I znowu droga byliśmy tu powie Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, które jest bardzo zbędne
w odniesieniu do tych znaków marnotrawstwa.
Więc pozwól mi iść do przodu i to zmienić struktury kliknięcie,
i pozwól mi iść dalej i sprawdzić boiska domu, kliknij przycisk Zmień,
i teraz mam zamiar to zmienić być int.
255 nie jest już istotne.
Pozwól mi iść dalej i powiedzieć, że to w porządku, jeśli to nadal NULL. Zapisz.
Teraz studenci tabeli została zmieniona pomyślnie,
i zauważyć ponownie dom jest int.
Tak na marginesie, ignorować liczby w nawiasach, jeśli chodzi o wskazówki.
>> To ze względu na dziedzictwo.
Powrót w dzień, kiedy nie ma GUI, zamiast tego mieliśmy środowisko linii poleceń,
na 10 i 11 określone ile znaków należy pokazać
w oknie terminala, aby faktycznie wyświetlić pola.
To nie ma nic wspólnego z długością bitową rzeczywistej dziedzinie, więc musimy po prostu zignorować, że do teraz.
Teraz muszę iść do tej tabeli.
A jeśli David mieszka w Mather, dom nie powinien być 0,
stanowiąca wartość int domyślna najbliżej NULL.
Powinien żyć w domu 1.
Miejmy arbitralnie powiedzieć, że życie Mike Pfoho, więc numer domu 2.
Teraz moja tabela wygląda nieco bardziej tajemnicze.
Ale pod uwagę skuteczność.
Obecnie używam tylko 32 bitów do identyfikacji domu
co oznacza, że ​​jest tylko 1 kanoniczna definicja mojego domu Mather i Pfoho
i to jest w tabeli domów.
Więc jeśli chcę teraz wrócić do tych tabel, myśleć o tym w ten sposób.
Tutaj mam tabelę studentów, a na prawej stronie nie ma tych numerów, 1 i 2.
1 jest Mather, 2 jest Pfoho.
Mamy te same numery w tej drugiej tabeli, które nazywa się domy,
1, 2 i 3 w tym 3 domów.
Co mamy teraz zrobić jest mieć możliwość w kodzie PHP i SQL,
do rodzaju wrócić do tych tabel, gdzie, jeśli są to uczniowie i są to domy,
chcemy się jakoś połączyć je tak, że 1 linie się z 1,
2 linii z 2 i tak, że możemy dowiedzieć się, gdzie David
i gdzie Mike i gdzie wszyscy mieszka.
Aby to zrobić możemy wykonać zapytanie SQL jak poniżej.
SELECT * FROM studenci DOŁĄCZ domy ON -
A teraz jakie pola chcemy dołączyć na?
Więc students.house = houses.id.
>> Trochę tajemnicze, ale ta część oznacza dosłownie utworzyć nową tabelę tymczasową
to wynikiem łączenia studentów i domów.
I w jaki sposób chcesz połączyć czubki palców tutaj?
Ustaw "Field House równa domów" przez studentów polu ID.
I jeśli teraz kliknij przycisk Idź, mam dokładnie to, czego mam nadzieję.
David jest w Mather, Mike jest Pfoho, a ja także zobaczyć unikalne identyfikatory.
Ale chodzi o to teraz mam pełną tabelę.
I tak na wynos tutaj Pset 7 lub naprawdę do ostatecznego projektu:
Jeśli okaże się, że jesteś przechowywania dowolnej informacji nadmiarowo,
czy to jest dom, może to miasto, stan i ZIP
gdzie zazwyczaj pocztowy, ale nie zawsze są stosowane jako unikalny identyfikator,
przechodzą przez wykonywania psychicznie, a następnie coś jak phpMyAdmin
faktoringu, że wspólnych danych, ponieważ zwłaszcza Twoja strona ma więcej dobrze wykorzystane
bardziej popularne, jest to, jak się upewnić, że wszystko jest super szybki,
dając bazę jak wielu wskazówek co do wyjątkowości, jak to możliwe.
To było dużo.
Masz pytanie? Dobrze. Zróbmy sobie 5-minutową przerwę, tam i przegrupować.
Dobrze.
Oto przykład, który był używany kilka lat temu, kiedy wziąłem CS161,
która działa klasa systemów na uczelni
który znany jest niesamowite, ale szalona ilość pracy,
i koncentruje się tak naprawdę na niektórych niskopoziomowych problemów, które pojawiają się w systemach operacyjnych
oraz także w świecie baz danych.
>> Historia, która została opowiedziana przez mojego profesora, Margo Seltzer, że rok był następujący.
Załóżmy, że masz trochę lodówkę akademiku dla ciebie i twój współlokator
i oboje bardzo lubię mleko.
Więc wróciłem do domu z klasy jednego dnia, twój współlokator nie jest jeszcze tam,
otwierasz lodówkę, i uświadomić sobie, "O cholera, jesteśmy z mleka".
Więc zamknij lodówkę, można przejść przez ulicę do CVS
i uzyskać w liniach coraz długich kupić trochę mleka w CVS.
Tymczasem twój współlokator wraca z jego klasy,
wchodzi do pokoju, otwiera lodówkę naprawdę chce mleko,
otwiera lodówkę i "Cholera, bez mleka."
Więc on zamyka lodówkę, podchodzi do drzwi, i idzie do ABP
lub w innym miejscu niż CVS, gdzie nie będziemy wpadać na siebie
iść po mleko.
Oczywiście kilka minut później, oboje wrócić do domu
i teraz masz dwa razy tyle mleka, ile tak naprawdę chciał.
I jest mleko, teraz pójdzie źle, bo lubisz mleka
ale nie lubię mleka, więc teraz masz za dużo mleka, więc to będzie się psuć.
To jest straszne, straszne sytuacja.
Co mogło rozwiązać tej sytuacji, jeśli były pierwszy dom współlokator? Tak.
[Uczeń] Trzeba pozostawić notatkę. [Śmiech]
Good. Trzeba pozostawić notatkę.
Trzeba położyć karteczek Post-it lub jak mówią, "Gone na mleko"
i twój współlokator koncepcyjnie zostałby zablokowany faktycznie robi.
Albo można iść 1 krok dalej.
Można dosłownie zamknąć lodówkę z pewnego rodzaju kłódki,
a teraz twój współlokator będzie dosłownie zostać zablokowane z lodówki.
Jeśli mamy generalizować powrotem do programowania,
można niemal myśleć o lodówce jako pewnego rodzaju zmienną lub struct,
jakimś pojemniku do informacji.
Problemem jest to, że zasadniczo zarówno z was mogli sprawdzić
lub odczytać stan tej struktury danych,
ale postrzegali ją w różnych czasach i jeszcze oboje podjęli decyzję
w oparciu o stan świata w tych różnych momentach w czasie.
Więc gdybyś zamknął lodówkę, to masz przynajmniej unikać współlokatora
z był w stanie sprawdzić, które stanu świata
więc on nie mógł się z tym rozstrzygnięciem.
Więc baz danych, jak się okazuje, problem ten stale.
>> Zobaczmy, czy uda nam się skonstruować scenariusz.
Załóżmy, że jesteś rodzaju złego faceta, a ty idź do Bank of America
lub w jednym z innych miejsc na placu, które mają dwoje obok bankomatów siebie,
i jakoś zorientowali się, jak powielić karty bankomatowej - nie wszystko, co trudne.
To tylko pasek magnetyczny.
A więc to, co chcesz, aby spróbować zrobić, to grać w tę grę
w którym można umieścić 1 kartę do 1 maszyny, kolejną kartę w innym komputerze
i zasadniczo spróbować wypłacić pieniądze jednocześnie,
bo wyobraź sobie, że historia toczy się dalej w następujący sposób.
Maszyna po lewej ma karty i kodu PIN,
a potem mówi: "Daj mi 100 $."
ATM jest zaprogramowany, aby najpierw zrobić select na bazie danych lub jej równowartość -
niezależnie od bazy danych jest za pomocą - zobaczyć czy to użytkownik ma co najmniej 100 dolarów w jego lub jej konta?
Jeśli tak, to wypluć 100 $ i odejmij $ 100 od ich wagi.
Ale oczywiście, jeśli istnieje wiele komputerów tutaj lub wiele sposobów kontroli
stan tego świata, bank vault, aby zobaczyć, ile masz pieniędzy,
Przypuszczam, że tylko przez przypadek maszynę na lewo i prawo
zarówno zadać to pytanie mniej więcej w tym samym momencie w czasie.
>> A to z pewnością może się zdarzyć. Bankomaty są komputery te dni.
Więc jeśli maszyna po lewej mówi: "Tak, masz co najmniej 100 zł,"
Tymczasem maszyna na prawo mówi: "Tak, masz co najmniej 100 zł,"
następnie obie postępować, aby zakończyć swoje programy i faktycznie wypluć 100 dolarów
i powiedzieć: "Poprzednio miał 200 $."
"Pozwól mi zaktualizować zmienną być teraz 100 dolarów pozostaną na koncie."
Ale jeśli obaj sprawdzili stan konta i okazało się, że jest to 200 dolarów
i jak z nich następnie do matematyki i powiedzieć 200 - 100,
Maszyny mają potencjalnie wypluć dwa 100 dolarów rachunki w każdej maszyny,
ale oni tylko zaktualizowane saldo konta kwoty do 100 zł.
Innymi słowy, masz wykupione 200 dolarów, ale dlatego, że sprawdził stan świata
jednocześnie, a następnie podjął decyzję w oparciu o tę wartość,
mogą one nie do matematyki ostatecznie prawidłowo.
Tak więc w sytuacji, w banku też naprawdę chcesz mieć jakieś blokady
tak, aby jak najszybciej po sprawdzeniu stanu jakiejś zmiennej
To naprawdę ważne, jak salda konta,
Nie pozwól nikomu podejmowanie decyzji na podstawie, że aż skończysz robi swoje,
gdzie w tym przypadku jesteś ATM na lewo.
Blokowanie wszystkich innych obecnie.
Rzeczywiście można osiągnąć ten efekt w kilka różnych sposobów.
>> Najprostszym sposobem w MySQL to linia SQL, które daliśmy wam
w specyfikacji zestaw problemów, które wygląda dokładnie tak, jak to.
Wstaw do tabeli - cokolwiek to się nazywa - id, symbol, oraz akcji, liczba akcji,
następujące wartości, na przykład.
Jeśli nie masz jeszcze przeczytać specyfikację, to jest przykładów angażowania jak go o
zakupu 10 akcji tej grosza dla prezydenta Skroob,
ID użytkownika, którego akurat jest liczba 7?
To mówi INSERT INTO tabeli dodaje id, symbol i liczba akcji
7, "DVN.V ', i 10.
Ale - ale, ale, ale - druga linia jest ważna.
ON Duplicate key akcji Update = akcja + VALUES (akcji).
Tak całkowicie tajemnicze wyglądające na pierwszy rzut oka.
Ale fakt, że to zapytanie SQL, choć okłady na 2 linie,
jest 1 długi zapytanie, to znaczy, że to atomic
w tym sensie, że zapytanie zostanie albo wykonywany razem albo wcale.
Iz definicji MySQL, to w jaki sposób realizowane tego zapytania.
To jest z definicji w podręczniku gwarantowanej wykonać wszystkie na raz lub w ogóle.
Motywacja jest następujące.
Jeśli w tym przypadku staramy się kupić 10 akcji na magazynie,
to rodzaj tej samej historii, jak mleko, to rodzaj tej samej historii, jak ATM.
>> Jeśli popełnisz błąd, nie używania tej składni
ale zamiast tego wybierając z bazy danych, aby zobaczyć, jak wiele akcji tego grosza
zgadza Prezes Skroob mają, i załóżmy, że ma 10 akcji,
a następnie kilka sekund później podzielone następnie zrobić UPDATE,
który jest inny rachunek w SQL, które mówi śmiało dodać jeszcze 10 akcji
do jego obecnego 10, tak aby idealnie suma wynosi 20,
Problem jest, bo w dzisiejszych systemów baz danych i dlatego, że w dzisiejszych komputerach
masz wielu procesorów wielordzeniowych -
innymi słowy, komputery można dosłownie robić wiele rzeczy na raz -
nie ma gwarancji, że SELECT a UPDATE w tym przypadku
będą się z powrotem do tyłu.
Tak zły scenariusz byłby zrobić SELECT
zobaczyć, jak wiele akcji tego ręki grosza nie Skroob mają
a potem po prostu przez przypadek inny zapytanie do bazy danych jest wykonywane -
może jego Skroob w innym oknie przeglądarki próbuje kupić 10 akcji
w innym oknie w ogóle, podobnie jak w bankomacie -
i załóżmy, że inna kwerenda pobiera między SELECT i UPDATE.
To może być tak, że teraz traci Skroob pewną liczbę akcji
ponieważ inny proces sprawdzania stanu swojego świata,
lub dostaje więcej akcji, niż powinien.
Nie pójdziemy do konkretów, co dokładnie te poszczególne linie historia byłaby,
ale chodzi o to, czy trzeba sprawdzić wartości zmiennych, a następnie podjąć decyzję,
jeśli istnieje ryzyko ktoś robi coś w między tymi 2 oświadczeń,
co może się zdarzyć w systemach wieloprocesorowych, w wielordzeniowych układów,
komputery z możliwością zrobienia wiele rzeczy na raz, złe rzeczy mogą się zdarzyć
takie jak rachunki bankowe zostały nieprawidłowo obciążony, kupując dwa razy tyle mleka,
lub w tym przypadku nieprawidłowa liczba akcji.
Ale jest łatwiejszy sposób, aby o tym pomyśleć.
>> Okazuje się, że SQL wspiera również, jeśli w konfiguracji tabeli poprawnie,
coś takiego jak transakcje, które Uważam faktycznie nawet łatwiej zrozumieć
niż to, ale to nie 1-liner jest, więc jest to rzeczywiście nieco bardziej zaangażowane.
Jest dosłownie oświadczenie w SQL nazywa TRANSAKCJI START.
Podobnie jak tam SELECT, UPDATE, INSERT, DELETE i JOIN i grono innych,
są słowa kluczowe, takie jak start transakcji.
I co wtedy zrobić w kontekście Pset 7 -
nie masz to zrobić dla Pset 7, to wyraźnie zaprzeczył, że nie jest to konieczne,
ale na końcowych projektów mogą być przydatne -
Jeśli wywołanie zapytania transakcji Start, a następnie kolejne zapytanie
i następnie kolejne zapytanie, a następnie kolejny, kolejny i kolejny,
te pytania nie będą faktycznie wykonywane do czasu wywołania SQL COMMIT
w tym momencie, czy to 2 oświadczenia lub 20 oświadczenia, będą one realizowane na raz,
co oznacza, że ​​nikt inny nie może przypadkowo kupić zbyt dużo mleka lub debetową za dużo pieniędzy
lub kupić zbyt wiele akcji, ponieważ wszystkie Twoje pytania wykona
z powrotem do tyłu do tyłu do tyłu.
I to jest bardzo ważne, zwłaszcza, gdy robisz coś takiego.
To jest przykład, który mówi arbitralne Odświeżmy rachunku bankowego
przez ustawienie równowagi równą salda - $ 1000, gdzie numer konta jest 2.
A potem drugie oświadczenie jest teraz niech zdeponować że 1000 dolarów
na cudze konto bankowe, którego numer konta jest 1.
>> Innymi słowy, jest to doskonały przykład, w którym chcesz się upewnić,
że obie te wypowiedzi się lub w ogóle nie
bo inaczej klient będzie ululać
i masz zamiar wziąć swoje pieniądze i nie złożenia go w innym miejscu,
lub bank będzie ululać gdzie idziesz wpłacić pieniądze
ale faktycznie nie odjąć go od konta użytkownika.
Więc chcesz obaj wykonać razem.
Dlatego wchodzi w transakcjach światowych.
Więc to jest coś, aby utrzymać się w głębi swojego umysłu,
nie tyle dla celów tylko projektu końcowego,
ale jeśli chcesz zabrać ostateczny projekt gdzieś,
jeśli chcesz uruchomić jakieś towarzystwo wokół niego,
jeśli chcesz rozwiązać jakiejś grupy studenckiego problemu na kampusie
i rzeczywiście żywą, aktywną stronę internetową, są rodzajem subtelnych błędów, które mogą się pojawić
jeśli nie dość, że przez to, co może się zdarzyć, jeśli 2 osoby
Próbujesz uzyskać dostęp do witryny internetowej w dosłownie w tym samym momencie w czasie,
przy czym ich pytania mogłyby się przeplatają.
>> Przygotuj się na JavaScripcie, teaser tego rozporządzenia?
To nasz ostatni język na semestr. Dobrze.
Na szczęście, JavaScript wygląda bardzo, bardzo, bardzo podobne do tych 2 języków, C i PHP,
zrobiliśmy do tej pory.
Nie ma skryptu Pset 7, ale to bardzo przydatne narzędzie
gdy chodzi o robienie webowych finałowych projektów czy naprawdę tylko web programowanie bardziej ogólnie.
Więc szybki przegląd coś zwane DOM.
Tutaj jest super proste Strona internetowa, która tak naprawdę mówi hello, world
zarówno w tytule, w organizmie.
Jak sugeruje wgłębienie jest od pewnego czasu,
rzeczywiście istnieje hierarchia do stron internetowych.
Mogę narysować ten sam fragment kodu HTML, jak drzewo,
Wracając myślami do naszych dyskusji struktur danych w C, jak następuje.
Mam jakiś specjalny węzeł główny zwany węzeł dokumentu,
i zobaczymy analog tego w JavaScript w chwilę.
Pierwsze dziecko i tylko dziecko, które w tym przypadku jest znacznik HTML.
Nie ma bezpośredniego odwzorowanie doctype.
To jest coś specjalnego, więc należy po prostu zignorować, jeśli chodzi o tego DOM,
to drzewo Document Object Model.
Zauważ, że tag HTML, którym się kiedykolwiek przedstawiono arbitralnie jako prostokąt,
ma 2 dzieci: głowy i ciała.
>> Te, które są podobnie rysowane jako prostokąty.
Jest istotne, że głowica jest obrazowo w lewo ciała.
To oznacza, że ​​szef jest na pierwszym miejscu w drzewie.
Więc jest rzeczywiście zamawiania do drzewa podczas rysowania to tak,
choć kształty i etażerka są arbitralne.
Szef tymczasem ma pojedyncze dziecko nazwie title,
i tytuł faktycznie ma swoje własne dziecko, co jest "hello, world",
która świadomie czerpał jako elipsę tutaj, aby to niewiele różni się od prostokąta.
Prostokąty te są elementami, natomiast cześć, świat jest naprawdę węzłem tekstowym.
Więc to jest węzeł w drzewie, ale to inny typ węzła
więc dobył go dowolnie inaczej.
Podobnie ma ciało mieć dziecko o nazwie hello, world, jak również,
tak różne węzeł chociaż jest to przypadkiem ten sam tekst,
ale muszę wyciągnąć go za pomocą tego samego kształtu. Więc kogo to obchodzi?
No, co jest miłe o HTML jest to, że ma tego hierarchiczny charakter.
A co jest miły o JavaScript i zwłaszcza bibliotek, które są łatwo dostępne
i popularnych takich jak jQuery, można przemieszczać się po strukturze drzewa tak zadziwiająco łatwe.
Każda z tych rzeczy zrobiliśmy w C z wskaźnikami i drzew przecinające i rekurencji na węzłach
lewej do prawej dziecko dziecko, nagle możemy sortować z za oczywiste
jako niezwykle pouczające, jeśli nie nieco frustrujące
ale nie tak skuteczny sposób, aby przejść o programowaniu.
I tak z tych wyższych poziomów języków jak JavaScript
będziemy w stanie poruszać się to drzewo bardziej intuicyjnie.
>> I rzeczywiście składnia będzie dość znajomo.
Jeśli nigdy wcześniej nie widziałem JavaScript wcześniej, jest to naprawdę miłe odniesienie
z Mozilla ludzie, ludzie, którzy uczynić Firefoksa
więc nie krępuj się przeglądać że w Twojej wygody.
Co można znaleźć - i te slajdy są identyczne co kiedyś inny dzień -
podobnie, główny ma.
Więc kiedy piszesz program w JavaScript, nie ma podstawowych funkcji.
Po prostu zacząć pisać kod.
Jednak zasadnicza różnica między JavaScript i C oraz PHP
jest to, że podczas gdy C i PHP dotąd zostały wykonane po stronie serwera
przez urządzenie w tym przypadku, lub bardziej ogólnie przez serwer,
JavaScript przez projekt jest zazwyczaj wykonywany przez przeglądarkę.
Innymi słowy, można pisać kod JavaScript, jak mamy zamiar,
na serwerze w urządzeniu, ale zawierają go między HTML, wśród swojego CSS,
wśród waszych GIF i PNG i Twoich firmy JPEG
tak, że gdy użytkownik odwiedza Twoją stronę, jeśli używasz JavaScript,
że kod JavaScript pochodzi z serwera do przeglądarki,
i jest to przeglądarka, która faktycznie wykonuje go.
Więc to ma znaczące konsekwencje dla nieruchomości nawet intelektualnego.
To trochę głupie, by nawet myśleć o ochronę IP, jeśli chodzi o kod JavaScript
ponieważ z natury języka pobiera wykonywane zazwyczaj stronę przeglądarki.
>> Możesz rozwodnić go, co oznacza, że ​​można sprawić wrażenie szalone i brzydkie
bez spacji, straszne nazwy zmiennych, aby utrudnić ludziom kradzieży IP,
jednak jest to, że klucz jest wykonywany stronę przeglądarki.
Nawet jak na bok JavaScript mogą być używane po stronie serwera,
Najczęstszym przypadkiem użycia teraz jest jeszcze na przeglądarce.
A oto jak to wygląda. Oto if-else if-else skonstruować tak jak C, podobnie jak PHP.
Oto wyrażenie logiczne, kiedy "lub" 2 rzeczy razem.
Oto kiedy "i" 2 rzeczy razem.
Oto instrukcja switch, który jest podobny do PHP
tym, że można włączyć różne rodzaje wartości.
Pętle również mieć pętli tutaj, które są zbudowane identycznie do tego, co widzieliśmy wcześniej.
Choć pętle; mamy zrobić, gdy pętle.
Zmienne, zawsze tak nieco inaczej.
Zdajesz deklarować zmienne jak zrobić w PHP i C,
ale podobnie jest JavaScript słabo wpisane.
Nie podasz int lub float lub ciąg lub coś podobnego zazwyczaj.
Można określić, var.
Nie musisz określić var, ale to ma znaczenie, czy nie.
Zazwyczaj jeśli pominie var, przypadkowo utworzyć zmienną globalną zamiast lokalnego.
Więc pozwól mi zaproponować, że prawie zawsze po prostu powiedzieć, var, a następnie nazwa zmiennej.
To nie jest typ, to tylko var dla zmiennej.
To byłoby na przykład, czy jest to 123 lub "hello, world".
Tablice są obecne i składniowo podobny do PHP.
Powiem var numerów, a następnie użyć nawiasów kwadratowych ponownie zadeklarować zmienną
którego typ jest tablicą, która ma te konkretne numery w nim oddzielone przecinkami.
A potem w końcu, to jest tylko jeden, który naprawdę wygląda inaczej.
Przypomnijmy, że w PHP nie wdrożyliśmy tablicy asocjacyjnej dla studenta
jak Zamyla że może wyglądać tak, gdzie zmienna nazywa się student.
Nawiasy kwadratowe oznaczają tu przychodzi tablicą.
>> Fakt, że nie używam, ale ciągi liczbowe indeksy - id, house, a nazwa -
Oznacza to, że jest to tablica asocjacyjna
i te strzały z znak równości i wspornik kątowy
Oznacza to, że klucz jest "id", wartość 1;
kluczem jest "dom", wartość jest Winthrop House;
kluczem jest "imię", wartość jest Zamyla Chan.
Więc nie ma 3 przyciski wewnątrz tej tablicy asocjacyjnej, z których każdy ma swoją własną wartość.
Widzieliśmy, że w Pset 7, lub wkrótce będą, w JavaScript samej idei,
ale to będzie wyglądać.
Więc var student - nie znak dolara i brak wzmianki o rodzaju nadal jednak var -
taniej, a następnie otworzyć nawiasy klamrowe w JavaScript, ponieważ gdy masz par kluczy wartości,
chcesz użyć czegoś, co nazywa przedmiot.
A ci z was, którzy nie podejmują APC lub jak może przypomnieć obiektów z Java
lub podobnych językach.
JavaScript nie jest Java, po pierwsze.
To było celowe roku decyzja projektowa temu strącać coś innego, co było popularne,
jego nazwa, choć nie ma ona związek z podstawową Java sama.
JavaScript posiada obiekty i ich tworzenia w drodze notacji nawias klamrowy.
Obiekty w JavaScript są prawie równoważne asocjacyjnych w PHP
, jeśli chodzi o przechowywanie danych wewnątrz nich.
>> Ale jeszcze mocniej w JavaScript można skojarzyć funkcje bardzo łatwo
wewnątrz obiektu, i choć można to zrobić w innych językach,
jest to dość powszechny paradygmat, jak zobaczymy.
W skrócie, to obiekt reprezentuje student, który jest szczególnie Zamyla,
jest podobny koncepcyjnie, tylko różnią się składniowo od tego.
Miejmy faktycznie używać JavaScript w pliku.
Okazuje się, że jest tag script.
Widzieliśmy tagu styl i widzieliśmy inne znaczniki HTML.
Tag script rzeczywiście będzie zawierać jakiś kod JavaScript.
Pozwól mi iść do urządzenia, gdzie mamy jakiś kod źródłowy gotowych.
I nie napisali go jeszcze na stronie internetowej, ale zrobię, że po klasie.
Otwórzmy się ten jeden, blink.html.
Powrót w 1990, nie było dosłownie HTML tag zwany tag blink,
i był to jeden z tagów najbardziej cudownie nadużywany w Internecie
której chcesz odwiedzić jakąś stronę internetową 1990 styl i zacząć widzieć tekst miga ci jak to,
wyniki tagu Marquis, który tekst będzie tak.
Jeden z niewielu razy, gdy świat został faktycznie uzgodnionych na standardzie www,
wszyscy na całym pokładzie zginęło tag blink kilka lat temu.
Ale możemy wskrzesić go z JavaScript jako demonstracja siły trzeba
kiedy można napisać program wewnątrz strony.
Zacznijmy pominąć nowej rzeczy i skupić się tylko na stare.
>> Oto stare rzeczy w tym przykładzie.
Mam tag HTML, znacznik głowę, a do tagu tytułu.
Następnie mam tag ciała tutaj z div, który jest po prostu wycofanie prostokątny podział strony
że dałem unikatowy identyfikator arbitralnie o "pozdrowienie", aby,
tak więc mam sposób jednoznacznie odnosi się do niego, że ma kilka bardzo prosty tekst:
hello, world.
Teraz pozwól mi przejść do początku tej sprawy i zobaczyć co nowego.
Pierwszą rzeczą, która nowego doładowania jest znacznik script,
i wewnątrz ogłoszeniu tagu skrypt mam zadeklarowanych funkcji.
Aby zadeklarować funkcję w javascript, całkiem podobny do PHP,
dosłownie napisać funkcję następnie nazwę funkcji, nawiasów
a może jakieś argumenty, jeśli następuje dowolny.
Wtedy ja mam nawias klamrowy, jak zwykle, i teraz mamy trochę lekko nowy kod,
ale zobaczymy, co to oznacza.
Więc var div, oznacza to po prostu daj mi zmienną div.
Mógłbym nazwał foo, ale chciałem go nazwać div
z powodów, które będą jasne, w sekundy.
Potem okazuje się, w JavaScript - jest to kod JavaScript, osadzone w mojej stronie internetowej -
istnieje specjalna zmienna globalna z rodzaju zwanych dokumentów.
JavaScript jest w rzeczywistości, obiektowy język programowania.
Nie będziemy wchodzić w szczegóły, w 50, co oznacza,
ale teraz wiem, że obiekt jest bardzo podobne struktury.
Jak widzieliśmy w drodze powrotnej, gdy w jednym z najwcześniejszych problemu ustawia
gdzie umieścić wiele informacji w struct,
Podobnie jest udokumentować specjalny struct, że pochodzi z przeglądarki
pochodzi z dowolnej strony internetowej. To nie jest coś stworzyłem jest.
Wewnątrz tej struktury dokumentu, choć, trzeba nie tylko dane
ale trzeba także funkcje.
>> I za każdym razem masz funkcji wewnątrz struktury, wewnątrz obiektu,
to się nazywa metoda. Ale to jest to samo.
Metoda jest funkcją, która właśnie tak dzieje się wewnątrz czegoś innego.
Więc to oznacza, że ​​ta specjalna zmienna globalna o nazwie dokumentu
ma funkcji o nazwie getElementById że dosłownie nie robi.
Będzie Ci elementu z DOM, Document Object drzewo Model,
którego ID jest w tym pozdrowieniu przypadku.
Innymi słowy, cały ten czas spędziliśmy na strukturach danych wchodzi w grę tutaj.
Ten obraz z DOM, że mieliśmy przed chwilą,
choć strona jest trochę inaczej, gdybym miał div na tym zdjęciu,
co document.getElementById wróci do mnie skutecznie być wskaźnikiem
prostokąta w drzewie, odniesienie do prostokąta w drzewie.
Więc to, co to znaczy naprawdę zadzwonić pod jeden z tych funkcji.
W tym przypadku znowu to div. To nie ciało lub tytuł jest.
Zobaczmy więc, co mam wtedy zrobić z tym div teraz, że mam to w środku tej zmiennej div nazwie.
Okazuje się z JavaScriptem masz zdolności do dostrojenia CSS swojej strony dynamicznie.
Do tej pory, wszystkie CSS zrobiliśmy, chociaż ograniczony, jest w atrybuty stylu,
lub gdzie indziej nie stawiamy CSS?
I rodzaju odpadami tego. W stylu w znacznik początku pliku.
Lub trzecie miejsce jest w?
>> Zewnętrzny plik, coś. Css.
To są 3 miejsca, zrobiliśmy CSS dotąd
ale Połów mamy stałe zakodowany wszystko.
Zdecydowałeś jak wskoczyła Pset 7, zdecydowaliśmy przed pouczać co nasz CSS będzie.
Ale jeśli chcesz zmienić swój CSS, rzeczywiście można to zrobić
skoro masz rzeczywistego języka programowania.
CSS, HTML - nie języków programowania. JavaScript jest.
Tak więc okazuje się, że tak szybko, jak masz jeden z tych prostokątów z drzewa
nazywany DOM, sam ma pewne dane znajdujące się wewnątrz niej.
Więc div, że właśnie złapał z drzewa ma co będziemy nazywać obiekt wewnątrz niego
nazywa styl i właściwość stylu sama właściwość o nazwie widoczność.
Chciałbym wiedzieć, to tylko patrząc przez użytkownika CSS obsługi.
Okazuje się, że jest widoczność właściwości CSS, że robi to, co mówi.
To sprawia, że ​​coś widoczny, lub nie widoczne.
A jak to zrobić to jest.
Pytam programowo jeśli widoczność tego div jest ukryty,
co mam zmienić go? Widoczne.
Else if widoczność tej stronie nie jest ukryty, logicznie Mam go ukryć.
Nie mam pojęcia, dlaczego to jest widoczne i ukryte i nie widoczne i niewidoczne.
To była słaba projektu decyzji w drodze.
Ale to są rzeczywiście przeciwieństwa w CSS: widoczne i ukryte.
Wszystko to nie jest to znaczy zmienić CSS z mojego archiwum i wyłącza się i wyłącza
dla danej div.
Ale znowu, jest to funkcja o nazwie blink. Kiedy funkcja blink nazywa?
Okazuje się, że jest jeszcze jeden specjalny zmienną globalną o nazwie okno,
w duchu podobnym do dokumentu, ale zważywszy, że dokument odnosi się do strony internetowej,
jak drzewo DOM, HTML wysłano z serwera,
Okno oznacza chrom wokół niego, pasek adresu, pasek tytułu,
i wszystkie z tych rzeczy wokół swojej strony internetowej.
>> I okazuje się, że obiekt ma specjalne okno wewnątrz jego funkcja nazywa setInterval
że robi to, co mówi.
Będzie ustawiony interwał - w tym przypadku co 500 milisekund -
i zgadywać, co się zrobi to co 500 milisekund?
To będzie wykonać ten blink funkcji.
A co jest miłe jest to, że mogliśmy zrobić to w C mimo że nigdy nie zrobił.
C ma coś, co nazywa wskaźników funkcji, gdzie można przekazać funkcji wokół
jako argumenty.
Podobnie w JavaScript można przekazać nazwę funkcji do innej funkcji.
I zauważyć, co robię. Nie zrobię tego.
Jeśli mogę umieścić nawiasy po mgnieniu oznaczałoby to wywołać funkcję migania.
Gdybym je pominąć, to znaczy o to funkcja blink
tak że setInterval może nazwać to co 500 milisekund.
Więc wynik końcowy, okropna choć jest to, że jeśli pójdę na localhost i przejdź do blink.html,
Mam teraz takiej sytuacji ponownie.
I jeśli faktycznie Sprawdzić element, zobaczmy czy możemy to zobaczyć.
Pozwól Sprawdzić element, pozwól mi przewijać tylko trochę,
pozwól mi wybrać elementy tutaj i zwróć uwagę DOM wnętrze inspektora Chrome.
To dosłownie zmienia iz powrotem co 500 milisekund.
Jeśli idziemy do naszego znajomego Nate,
Jeśli kiedykolwiek zastanawialiście się, jak to działa, podobny pomysł z przerwą,
ale Nate jest faktycznie poczyniła bardzo efektywne wykorzystanie koloru w tym konkretnym przypadku.
Więc co jeszcze możemy rzeczywiście z tym zrobić?
Otwórzmy się inny przykład i spróbować czegoś
to programowo jeszcze bardziej użyteczne niż co mrugnięcie rzeczy.
Pozwól mi iść do naszego katalogu formularzy dzisiaj i idź do form0.
To był najbrzydszy możliwą formą, że mogę wymyślić,
i pozwól mi pokazać, jak to wygląda w przeglądarce.
>> Pozwólcie mi iść do localhost / formy, a to jest form0.
To jest super brzydka formularz HTML, który ma kilka pól na e-mail, na hasło,
hasło, a następnie trochę pole do wyrażenia zgody na niektóre warunki.
Połów jest, jeśli mogę odwiedzić ten formularz i nie chcę dać ci mój adres e-mail,
Nie chcę się zgodzić na warunkach może, mogę kliknąć Rejestracja
i pozwala mi przejść tak.
Dzieje się tak do przedłożenia głupiego pliku PHP o nazwie dump.php.
Wszystko robi to wydrukować zawartość $ _GET tylko do celów diagnostycznych.
To było to, co zostało napisane przez użytkownika tylko teraz.
Ale załóżmy, że rzeczywiście chcesz sprawdzić użytkownika złożenia formularza.
Pozwólcie mi iść do wersji 1.
To form1.html. Wygląda estetycznie tak źle, ale zauważ, jak wyobraźnia jest.
Jeśli kliknę Rejestracja bez współpracy, mam krzyknął.
"Musisz podać swój adres e-mail."
Dobrze. Więc pozwól mi spróbować. Więc malan@harvard.edu. Nie potrzebne jest hasło.
Zarejestruj. "Musisz podać hasło." Dobrze.
Tak będzie podać hasło szkarłatu. Zarejestruj.
"Hasła nie zgadzają się." Muszę teraz wpisać crimson tutaj.
I przypadkowo sprawdziła tego. Zarejestruj.
"Musisz zgodzić się na warunki". Dobrze. Zgadzam się tam. Zarejestruj.
I teraz pokazuje mi wyjście diagnostyczne tam.
>> Więc co się stało?
Mieliśmy tę umiejętność, aby zatwierdzić formularz zgłoszenia.
W rzeczywistości, jeśli nie nurkowania w Pset 7, jest tam funkcja apologize
które sprawia, że ​​bardzo łatwo krzyczeć na użytkownika z komunikatem na ekranie.
Używam nieco inny mechanizm, alert funkcji,
która nie jest funkcją, która jest uśmiechnął się, ponieważ to sprawia, że ​​bardzo brzydkie wiadomości użytkownika jest.
Ale zobaczmy, co tu robię.
To form1.html, a zauważysz, że mam trochę dość znajomą składnię:
tag ciało, tag formularza, atrybut action, atrybut metody.
Zauważmy jednak, dałem moim formularzu unikatowy identyfikator dla wygody.
To mam e pole, którego typ jest tekst,
Pole hasła, którego typ jest hasło, którego pole jest typu potwierdzenie hasła,
a następnie pole, którego nazwa jest umowa tutaj, typ jest pole wyboru.
A potem mam przycisk Submit.
Zauważmy jednak, na górze, co jeszcze mam.
Po pierwsze, nie jest jeszcze wykorzystanie skryptu znacznika.
Jeśli masz jakiś kod JavaScript w innym pliku, podobnie jak w CSS można go zawierać.
A ty wiesz, że w źródle skryptu, a następnie zauważ łączę najwyraźniej
do googleapis.com na ścieżkę bardzo długi ale którego nazwa pliku kończy się jquery.min
do minimum. js.
jQuery jest bardzo popularne biblioteki JavaScript, który po prostu sprawia, JavaScript
jeszcze bardziej przyjazny dla użytkownika w obsłudze.
To faktycznie stał się de facto standardem.
Więc nawet jeśli to, co masz zamiar zobaczyć nie jest czystym JavaScript per se,
jest to biblioteka na górze JavaScript podobnie jak CS50 biblioteki jest warstwa
na szczycie niskiego poziomu kodu C; rzeczywistość jest prawie każdy w Internecie używa.
Więc to nie są kółka. To jest po prostu najlepiej ćwiczyć te dni.
Zauważcie, poniżej jest mój własny tag script, i zauważyć, co zrobiłem tutaj.
Okazuje się, że jQuery robi coś trochę fantazji.
JavaScript ma znaki dolara, ale to bez znaczenia.
>> Oni są jak litery A, B lub C.
jQuery po prostu przyjęła Konwencję lub rodzaj określone roszczenia na fakt,
że $ będzie ich specjalny symbol.
Tak szybko, jak załadować ten globalny plik JavaScript tu z tagu skryptu,
masz dostęp do specjalnej zmiennej globalnej, która jest o nazwie $.
Jest bardziej poprawnie nazywa jQuery, ale to nie wygląda aż tak sexy jak $.
Ale $ nie ma specjalnego znaczenia. W PHP miał specjalne znaczenie.
Miałeś go przed zmiennej.
To jest po prostu sexy rzeczą, że miały one na.
Co się tutaj dzieje?
Wskazówka olewam do jQuery funkcji mój zmienną globalną dokument
a potem dzwonię. gotowy.
Co w zasadzie nie jest jQuery pozwala na trochę wanilii rzeczy JavaScript
jak obiektu dokumentu, obiekt okna,
i jeśli przekażemy go do jQuery funkcji -
i znowu, było jasne, że jest to funkcja o nazwie jQuery -
co robi jest powraca do Ciebie specjalną wersję dokumentu
, że ma więcej funkcji związanych z nim.
Surowego JavaScript więc nie oczekuje funkcja
ale jeśli przejdą dokumentu jQuery funkcji najpierw
powraca do Ciebie specjalną wersję obiektu dokumentu
który ma więcej fantazyjnych możliwości.
I dlatego ludzie lubią. To właśnie sprawia, że ​​rzeczy łatwiej zrobić, jak mamy zamiar zobaczyć.
Więc co to linia kodu oznacza?
Ten wiersz kodu oznacza tutaj, gdy dokument jest gotowy -
Innymi słowy, gdy przeglądarka przeczytaniu tego górnego pliku do dołu -
śmiało wykonać następujące funkcje.
Co jest naprawdę ciekawe w JavaScript - PHP i ma to, jak również -
to funkcje anonimowe.
W JavaScript można deklarować funkcje, które nie mają nazwy, ale mają ciała.
Zauważ, co się tutaj dzieje.
>> Ta funkcja nazywa się gotowy, a to po prostu oznacza, wykonaj następujące czynności
gdy cała strona jest gotowa, kiedy wszystko było odczytywane z serwera.
Co chcesz zrobić? Chcę wykonać kawałek kodu.
Zauważ, że nie chcemy, aby wykonać ten kod od razu.
Jeśli pominąć to, oznaczałoby to natychmiastowe rozpoczęcie wykonywania tych linii kodu.
Ale fakt, że mówię nie, nie, nie, zawinąć to w anonimowej funkcji, podobnie jak to
środki nie wykonać go jeszcze; nazwać ostatecznie.
Przekonaliśmy się o tym przed chwilą w naszym poprzednim przykładzie formularza.
Jaką funkcję nie wzywamy ostatecznie 500 milisekund później? Migać.
Tak więc sam pomysł.
Ponownie, nawet jeśli wygląda to trochę dziwnie, po prostu wziąć teraz na wierze
że zadeklarować funkcja anonimowa to się nazywa w końcu,
po prostu napisać function () {
Więc jaki kod mamy zamiar wykonać w końcu? Następujące.
To też wygląda trochę nowy, ale oznacza to, tu jest jQuery funkcja,
i to teraz jest skrót.
Ten fragment HTML na dole ekranu ma oczywiście pewne reprezentacji drzewa.
To nie jest to. Ta strona jest bardziej interesujące niż to Hello, World przykład.
Ale jest pewne drzewo, które odpowiada tej HTML.
Byłoby ból w szyi, aby wdrożyć jakieś funkcji rekurencyjnej
zacząć od korzenia, a następnie znaleźć węzeł, którego ID jest rejestracja.
Więc co sprawia, że ​​bardzo proste jQuery dla nas jest dosłownie to.
Idź przed siebie i po mnie cokolwiek div lub formularza cokolwiek, cokolwiek element HTML
ma identyfikator rejestracji.
Jest to równoważne document.getElementById ("rejestracja").
>> Dlaczego ludzie jak jQuery?
Bo to jest krótsza pisać. Ale to wszystko jest. To ten sam pomysł.
Daj mi znak, którego ID jest rejestracja.
A kiedy to tag, który okazuje się być forma, zostanie złożony,
śmiało wykonać ten kod.
Weźmy spojrzeć teraz, w jaki sposób robimy walidacji formularza.
Składnia jest wprawdzie cryptic na początku, ale to, co się dzieje?
Jeśli ta linia kodu jest prawdziwe, będę krzyczeć na użytkownika w celu zapewnienia swojego adresu email.
Więc co to jest linia kodu?
$ Oznacza jQuery. Teraz to zauważyć.
To jest trochę jak CSS.
Jeśli zanurkował CSS jeszcze, będziesz wiedzieć, że oznacza to element, którego ID jest rejestracja.
Przestrzeń oznacza znaleźć dziecko lub potomek rejestracji, którego nazwa jest wejście.
A potem to coś w nawiasach kwadratowych jest trochę filtr.
I nawet jeśli wygląda to tajemniczy, oznacza to po prostu przejść do formularza, którego ID jest rejestracja,
idź do wewnątrz elementu wejściowego to, którego nazwa jest email,
a następnie uzyskać jej wartość, bez względu na jej wartość bywa -
asdf jeśli to wszystko, co maszynowo lub malan@harvard.edu jeśli to, co wpisałem.
Więc jeśli wartość pola formularza email == nic, krzyczeć na użytkownika.
Inaczej, jeżeli wartość w polu hasła == nic krzyczeć na użytkownika.
>> Inaczej, jeżeli wartość w polu hasła nie równa wartości polu potwierdzenia
który był inny element formularza, krzyczeć na użytkownika.
I wtedy wreszcie - i ten też ma jakąś nową składnię własnej,
ale raz widziałem go, to przynajmniej trochę bardziej rozsądne -
else if formularz, którego ID jest rejestracja ma element wejściowy, którego nazwa jest porozumienie
i to jest zaznaczone, należy iść dalej i krzyczeć na użytkownika.
Więc całkowicie przyznać jest to całkowicie przytłaczające na pierwszy rzut oka.
Jest wiele nowych składni. Ale wszystkie jQuery następuje tego rodzaju wzorów.
I szczerze mówiąc, nawet nie wiem, to istnieje jeszcze kilka minut temu.
I Googled "Jak sprawdzić, czy pole wyboru jest zaznaczone w jQuery?"
i to jest składnia, bo jest różnych sposobów jej
z rzeczywistym surowego kodu JavaScript.
Tak bardzo pierwsza strona Set Problem 7 podkreśla
pset 7 jest bardzo dużo ćwiczeń w czasie uruchamiania się
gdzie zamieściliśmy, miejmy nadzieję, ramy koncepcyjne, z którym do rozwiązania PSET.
>> Ale, jak to często bywa w przypadku projektowania stron internetowych, to do ciebie naprawdę Kapsa,
zawierają fragmenty kodu i przykłady z sieci tak długo, jak ich cytować
na warunkach w tym pierwszym arkuszu,
i uświadomić sobie, że uczenie się języka HTML, CSS, JavaScript, a nawet SQL
naprawdę ma być at-home to ćwiczenie jak zaczniemy przyjmować te kółka off.
I uświadomić sobie też jest tak wiele innych rzeczy można zrobić za pomocą przeglądarki.
Wewnątrz większości z tych elementów są inne rzeczy, zwane obsługi zdarzeń.
I mimo, że tylko spojrzał na nich nazywa onsubmit i onReady,
można robić takie rzeczy jak onkeydown, onKeyUp,
jak wtedy, gdy użytkownik wciśnie klawisz, można słuchać za to i górę.
Gmail ma skrótów klawiaturowych.
Jak Google wdrożenia skrótów klawiaturowych jak C do komponowania?
Słuchają na imprezy, jak nazywa się je, podobnie jak onkeypress lub onKeyUp i onkeydown.
Jeśli kiedykolwiek krążył myszkę niektórych opcji menu
i nagle, voila, pojawi się menu lub grafika zmienia kolor,
jak oni to robią?
Zamiast słuchać onReady lub onsubmit, można słuchać onmouseover i onmouseout.
>> Tak w skrócie, z tymi podstawami bardzo proste, że mamy zaczęły zarysować powierzchnię dziś
a my dalej do nurkowania w środę, trzeba w coraz większym stopniu
moc do realizacji różnego rodzaju rzeczy, które już znasz.
Więc kończy, i będziemy kontynuować to w środę.
>> [CS50.TV]