HANNAH Blumberg: Witam wszystkich. Mamy zamiar zacząć tylko kilka minut wcześnie ponieważ mamy dużo materiału do przejść. Jestem Hannah. Jestem TF. Maria będzie łączenia nam w zaledwie kilka minut. Uczy odcinek tuż przed. Uczę prawej części po, więc jedziemy aby go do półtorej godziny. Więc jak zobaczysz tu mamy dość kilka tematów musimy przejść, więc będziemy jechać trochę szybko. Ale jeśli w dowolnym momencie możemy powiedzieć coś zbyt szybko lub nie rozumiesz, nie krępuj się przerywać pytaniami. Chcemy być w stanie zrobić to przeglądu sesji jako użyteczne dla was wszystkich jak to możliwe. Niesamowite. Warto więc przejść w prawo z niektóre tematy, które faktycznie bardzo, bardzo krótko, pokryte dla Quiz 0 w opinii sesji quizu 0. Więc zaczynając od połączonych listach. Więc po prostu upewnij się, że niektóre Podstawowa wiedza na temat powiązanych list i są wygodne robi niektóre z podstawowych operacji. Więc po prostu przeglądać, związane Listy są lepsze od tablic ponieważ mogą one rozwijać się dynamicznie. Mamy więc tę ogromną przewagę. Widzieliśmy je używany w tabelach z cebulą, kiedy nie wiem dokładnie ile rzeczy, które będziesz chciał wstawić do naszej struktury danych. Niestety, mamy kawałki połączony lista całej pamięci, więc nie będzie konieczności w stanie zrobić stały dostęp czasowy do każdego elementu w połączonej listy. W celu znalezienia dany element, możemy mają do iteracji wszystkie sposób od początku. Tak więc należy pamiętać, że większość podstawowe operacje są omega 1. Tak więc wkładka jest po prostu zajmie 1. Usuń zajmie n Ponieważ trzeba iść znaleźć go z listy. Wyszukiwarka może potrwać i, co gorsza, n. Nie możemy zrobić coś takiego binarne wyszukiwania na połączonej listy Ponieważ nie możemy po prostu losowo wskoczyć do środka. Chłodny. Niesamowite. Trochę stosy. To znów pojawił się na quizie 0, więc Ciebie powinno być super wygodne z nim. Ale na stosach, prosimy pamiętać, stos tac. I to będzie pierwsza w, wytrzyma. Więc stos rzeczy w stosie, po czym jeśli chcemy, aby wziąć coś off-- które nazywamy pstrykaliśmy stack-- możemy puścić na szczyt. A jeśli chcemy umieścić coś w stosie, nazywamy go naciska. Więc to zawsze będzie dorastania od dołu jak stosu tacek. Niesamowite. Widzieliśmy stosy realizowane z obu połączonych list i tablic. Jeśli realizacji z tablicami, chcesz aby upewnić się, aby śledzić zarówno wielkość i pojemność. Tak więc rozmiar będzie obecny ilość rzeczy w swoim stosie, podczas gdy zdolność jest całkowita liczba rzeczy, które można zapisać w stosie. Chłodny. Bardzo podobnie, mamy kolejki. W tym przypadku, zamiast myśleć o stos tac, myśleć o linię. To będzie pierwsze weszło, pierwsze wyszło. Więc jeśli jesteś w kolejce do coś w sklepie, mamy nadzieję, że osoba, najpierw w Linia będzie pierwszym pomógł. Zamiast mówić, naciśnij i pop jak my na stosie, po prostu powiedzieć, Kolejkuj i rozkolejkowania. I znowu, jeśli jesteś realizacji to z tablicy, musimy śledzić stanowi nie tylko rozmiar i pojemność, ale także głowy, które będzie przednia naszej kolejki. Chłodny. Wszelkie pytania dotyczące któregokolwiek z tego? Niesamowite. Przesuwanie w prawo wzdłuż. OK, tabele mieszania. Oto, gdzie zaczyna uzyskać naprawdę ciekawe. Więc tabeli mieszania jest wdrożenie z tablicy asocjacyjnej. Więc w zasadzie to, co się stało Mamy wszystko jest ten wkład, i dajemy go do hash Funkcja, która mówi, OK, to jest, gdy w tablica mieszająca należy. Więc najprostszej funkcji skrótu że widzieliśmy się tylko powiedzieć, OK, załóżmy, że chcemy umieścić struny w naszej tabeli mieszania. I bardzo prosty pomysł może być powiedzieć, OK, niech po prostu posortować przez pierwsza litera słowa. Więc można zobaczyć tutaj, bierzemy banana, umieścić go za pośrednictwem funkcji mieszającej, i mówi, hej, powinny iść w indeksie 1. Możemy więc w zasadzie myśleć o hash Stół jako kilka różnych wiadrach. I każdy z tych wiader będzie trzymać głowę połączonej listy. I w tej połączonej listy jest, gdzie się da faktycznie wprowadzone różne fragmenty danych. Więc nurkowania trochę więcej w funkcji skrótu, oto przykład po prostu opisane gdzie tylko powiedzieć, OK, weź pierwszą literę słowa i jesteśmy zamiar uporządkować je do wiader. Więc zapewne, że nie będzie 26 wiadra, po jednym dla każdej litery alfabetu. Dlaczego nie jest to wielka funkcja skrótu? Co sprawia, że ​​to nie idealne? Tak. PUBLICZNOŚCI: Zamierzasz mieć kolizji. HANNAH Blumberg: Tak, dokładnie. Będziesz mieć kolizji. Więc to jest jedna rzecz. I porozmawiamy o tym, jak możemy naprawić kolizji w ciągu sekundy. Kolejny problem z tym szczególności funkcja skrótu jest to, że nasza inna wiadra będą z dość drastycznie różne rozmiary. Wiemy, że jest dużo więcej słów, które zaczynają się od X, więc będziemy mieć bardzo niesymetryczne wiadra w naszej tabeli mieszania. Chłodny. Więc tak, wróćmy do punkt kolizji. Co zrobimy, jeśli nie ma kolizji? Mamy kilka różnych opcji. Tak jeden, więc przypuszczam, że próbujemy umieścić jagody na naszej tablicy mieszającej. I widzimy, oh, my chcemy umieścić go w indeksie 1, ale banan już tam mieszka. Co zrobimy? Mamy dwie główne opcje. Numer jeden to możemy powiedzieć, OK, nie ma miejsca w indeksie 1, ale niech po prostu zachować patrząc przez dopóki możemy znaleźć inną otwartą miejsce. Będziemy więc powiedzieć, OK, postawmy go w miejscu 3. To jedna z opcji. To się nazywa liniowa sondowania. I druga opcja jest mówiąc: OK, dobrze, niech po prostu zrobić każdy z tych wiader być szefowie połączonych listach. I to jest OK, jeśli jest więcej niż jednej rzeczy w wiadrze. Jesteśmy po prostu się dołączyć go do przodu. Więc tutaj można zobaczyć, OK, kiedy włożona jagody, mamy po prostu wziął banan, rodzaj pchnął go na trochę i rzucił berry tam. I to jest również całkowicie w porządku. To się nazywa oddzielne łańcuchowym. Możesz myśleć o tym, jak coś w rodzaju tablica głowic połączonych listach. Wszelkie pytania dotyczące hash tabele, funkcje hash? Niesamowite. Drzewa i prób. Tak więc drzewo jest każdy rodzaj struktury danych w których istnieje jakiś hierarchii lub jakimś z rankingu do różnych obiektów. A to stanie się bardzo jasne, kiedy widzimy przykład. I widzieliśmy prób, wraz z tabel hash, w pset5-- które znów całkowicie uczciwa gra za to quiz-- jako kolejny danych struktury, które możemy przechowywać różne rzeczy. W przypadku słownika możemy przechowywać kilka słów. Warto więc spojrzeć na niektóre drzewa. To jest to przykład drzewa. Ma coś w rodzaju struktury, że struktury hierarchicznej, gdzie można zobaczyć, że Ten węzeł 1 na górze ma jakieś rangi powyżej 2 i 3, które znajdują się powyżej 4, 5 i 6 oraz 7, które znajdują się powyżej 8 i 9. Więc to wszystko rozumiemy przez drzewo, więc może po prostu rodzaj Picture to w głowie. Teraz mamy kilka bardziej wyspecjalizowanych drzew. Tak więc jednym z przykładów jest drzewo binarne. A binarne drzewo, ponownie, tylko będzie struktura danych z pewnego rodzaju hierarchii, ale każdy z węzłów może mieć co najwyżej dwoje dzieci. To miejsce, gdzie binarny słowo pochodzi od. To jest to przykład binarnego drzewa. Tak, że to mniejszy kategoria drzew. Teraz przejdźmy jeszcze bardziej konkretne i mówić o binarnym trees-- wyszukiwania binarnego drzew, a. Więc pomysł jest nie tylko każdy węzeł posiada co najwyżej dwoje dzieci, ale wszystkie dzieci do lewa będą mniejsze i wszystkie dzieci do prawo będą większe. Więc zawiadomienia w właśnie nasze drzewo binarne, nie żadnego związku między numerami. Ale w poszukiwaniu binarnego drzewo, widzimy, OK, tutaj jest 44. A każdy numer z lewej 44 jest mniejsze i wszystko w prawo jest większa. I że posiada na każdym poziom drzewa. Więc, jest mniejsza niż 22 i jest większe niż 22. I to jest binarne drzewo poszukiwań. Dlaczego uważamy, że to się nazywa binarne drzewo wyszukiwania? Jaki algorytm to przypomina? PUBLICZNOŚCI: Binary wyszukiwania. HANNAH Blumberg: Binary wyszukiwania. Bo jeśli szukasz szczególności liczba w tym drzewie, w każdym punkcie, wystarczy zapukać od połowy drzewa, co jest dobre. I tak, że zamierza dać nam coś że wygląda trochę jak wyszukiwania binarnego. Jakiekolwiek pytania? Wszystko w porządku, super. Dobra, stara. Ulubiona wszystkich. Więc to jest przykład, który widzieliśmy kilka w klasie. I znowu, jest to tylko kolejny sposób możemy przechowywać dane. W przypadku słownika znowu jest to po prostu będzie struny. Zobaczmy więc, co to właściwie wygląda na nieco niższym poziomie. Warto więc spojrzeć w jednym z węzłów w trie. I widzimy, OK, nie będzie być logiczna i węzeł, wskaźnik do węzła. I widzimy, że Boolean nazywa is_word. Tak w zasadzie, to będzie odpowiadać do tych małych trójkątów, które mówi, jeśli dotarłeś tutaj, znalazłeś całe słowo. Wiemy, że "Turinga" ponad Powyżej znajduje się pełna słowo, podczas gdy po prostu T-U-R nie jest słowem dlatego, że nie widzę, że trochę delta. A że trochę trójkąt, znowu, odpowiada tym is_word, to Boolean is_word. A potem mamy tablicę dzieci. Więc na każdym poziomie, można mają szczególną węzła i że punkty węzła do Tablica całego alfabetu. Więc widać, znowu, w tym picture-- jestem zamierza utrzymać skoki z powrotem i forth-- że matryca na początku ma kilka różnych węzły pochodzące poza nim. Ma 26 lub 27, jeśli chcesz zawierać dodatkowy znak. A to daje nam sposób przechowywania naszych danych w taki sposób, że można go znaleźć na że można patrzeć super szybko. Jaki jest czas wyszukiwania dla trie? PUBLICZNOŚCI: [niesłyszalne]. HANNAH Blumberg: Tak. W teorii jest to stała czasowa. To będzie tylko być wielkości słowo, które chcesz wyszukać. Nawet jeśli dodamy zillion więcej słów do naszej trie, to nie będzie na nas dłużej, aby określić, czy dane słowo jest w trie. Więc to jest naprawdę miłe. PUBLICZNOŚCI: Czy ty zainicjować tej tablicy? Przegapiłeś punkt lub dwa. Można po prostu mówić o że na sekundę? HANNAH Blumberg: Oczywiście, absolutnie. Dobre pytanie. Pytanie było, że mają tablicę, która jest będziemy mieć gwiazdę węzła jako przeciwieństwie do właśnie węzła, prawda? Chłodny. Więc o czym mówimy jest nasza tablica jest po prostu będzie wskaźniki do innych tablic. Więc to essentially-- to rodzaj czuje się jak w połączonej listy w ten sposób przy czym każdy z tych dzieci prostu wskazać następnego węzła. A sposób, że właściwie określić, hej, OK, mamy powtórzyć przez cały słowem, jest to słowo w słowniku, po prostu sprawdzić to is_word. Świetne pytanie. Tak. PUBLICZNOŚCI: OK. Więc co było środowisko wykonawcze dla trie? HANNAH Blumberg: Jasne. Więc runtime dla trie dla wyszukiwanie będzie stała czasowa. Więc to tylko będzie to liczba liter w słowie. To nie jest zależne od Wielkość słownika lub wielkość struktury danych. Więc tutaj jest nieco prostszy przykład. W tym przypadku, można zobaczyć, że nietoperz słowo jest w słowniku i masz zoom, ale nie ma czegoś takiego jak zoo. Jak robimy zoo? Jak dodamy do zoo do naszego słownik, do naszego trie? Tak. PUBLICZNOŚCI: Sprawdź is_word odnosi się do [niesłyszalne]. HANNAH Blumberg: Dobra. Więc chcemy powiedzieć, Z-O-O, a następnie my chcą sprawdzić się, że pole wyboru, jak również. Świetny. Porównajmy bardzo krótko stara porównaniu tabel hash. Próby są naprawdę świetne ponieważ, jak powiedział, zapewniają stałą wyszukiwanie w czasie. Ale ogromna wada to są one naszego wspólnego. Można odnieść wrażenie, nawet patrząc na to, że zajmie ogromna ilość pamięci. Więc oni będą się znacznie większe niż tabele z cebulą, ale zamierzamy dać nam o wiele krótszy czas sprawdzania adresów. Więc to rodzaj twój kompromis, co cię obchodzi, czy to prędkość lub pamięci. Wszelkie pytania dotyczące któregokolwiek z tym, wszystkich struktur C danych. Pięknie. OK. Mamy zamiar przenieść się do nieco Trochę tworzenie stron internetowych z Marią. MARIA ZLATKOVA: Lovely. OK. HANNAH Blumberg: Możesz używać laptopa. MARIA ZLATKOVA: Nicea. Ok fajnie. Jak przejść teraz do sieci rozwój, rozmawialiśmy trochę o zmianie uprawnień plików i katalogów tak, że mogą być dostępne do innych użytkowników, w świecie i tak, że możemy zobaczyć, jak w zasadzie można je przekazać nam kiedy rozwijają rzeczy jak strony internetowe że mamy w większości robi. Więc widzieliśmy polecenia chmod, który jest zmiana trybu, w zasadzie. To polecenie Linux i zmienia uprawnienia dostępu obiektów systemu plików. I obiekt system plików jest tylko katalog, plik, coś, co można zmienić uprawnienia. Tak więc, aby zobaczyć uprawnienia do plików, wpisujemy polecenie ls, listy -l. I kiedy wpisać, że mamy zazwyczaj zobaczyć uprawnienia które wyglądają trochę jak ten przed nazwą katalogu. Tak d odnosi się do katalogu. A potem mamy trzy triady, że w zasadzie odnoszą się do uprawnień albo użytkownik, grupa, lub świat. Rodzaje uprawnień, które możemy mają dla tych trzech grup ludzi są albo r do odczytu, w dla Napisać, a x do wykonania. A może mamy tych, dla grupa i świata, jak również. Najtrudniejszą rzeczą jest to, że czasami kiedy wpisz polecenie chmod, chcemy wpisać jakiś numer które składa się z trzech bitów. Tak więc możemy zrobić, jak 777 i że w zasadzie skierowana do wartości dodanej każdego z tych triad ponieważ r odsyła do 4, w będzie odnosi się do 2, a x odsyła 1, Tak więc, gdy dodaje się do góry, a każdy z numerów przyjdzie do wielu skumulowanej do łącznej wartości pomiędzy 0 i 7. Więc możemy także 0 przez nie uprawnień w ogóle. I że w zasadzie dać nam uprawnienia zarówno dla użytkownika, grupa, świat. Wszelkie pytania na ten temat do tej pory? PUBLICZNOŚCI: Powiedziałeś przeczytać było 4? MARIA ZLATKOVA: Tak. PUBLICZNOŚCI: [niesłyszalne]. HANNAH Blumberg: Tak. PUBLICZNOŚCI: A potem przez dodanie wszystkich tych, inni wskazują numer. MARIA ZLATKOVA: Tak. Tak. Są to wielkie pytania. Piękny. Następnie, wskoczył do HTML i nieco więcej na temat tworzenia stron WWW. Więc HTML po prostu oznacza, Hipertekstowy język znaczników. I to jest znaczników języka, który jest standardem który jest używany do tworzenia stron internetowych. To się nazywa język znaczników bo to nie jest faktycznie skompilowany. To nie powiedzieć, jak jakiś kod powinien być wykonane lub coś podobnego. To po prostu wyznacza i opisuje, jak internetowy Strona należy skonfigurować z każdym z jego elementami i jak powinny one wyglądać dla użytkownika. Niektóre z tych tagów HTML, które Podszedłem są następujące. Wszystkie nasze dokumenty HTML Zaczęło się html DOCTYPE. Wtedy zawsze mamy tag HTML. Mamy głowę i ciało. I to jest ważne, że HTML ma ten rodzaj zagnieżdżonej struktury dlatego, że jest bardzo jasne. I to staje się jasne, kiedy Należy otworzyć i rzeczywiście bliskie tagi. I zawsze trzeba zamknąć tagi że mamy otwarte. A tutaj mamy kilka typów rzeczy przed nami, że chcemy mieć. Mamy więc, na przykład, tytuł CS50. I wtedy rzeczywiście można połączyć arkusz stylów która określa, w jaki sposób projektować naszą stronę internetową. To CSS. Mamy zamiar przejść nad nim w Następne kilka slajdów, jak również. W organizmie, ustawiamy niektóre klasy i identyfikatory. I jako przypomnienie, znowu, Identyfikatory są unikalne i zajęcia może być przypisany do wielu produktów. A to po prostu oznacza, że możemy użyć klasy i identyfikatory w ramach drugiej structures-- tak, na Przykładem, w plikach CSS lub stylu sheets-- odnosi się do określonych elementów i w zasadzie powiedzieć, że chcemy styl lub zaprojektować jakiś element w jakiś szczególny sposób. A my się do nich przez ich numery ID i klasy. I możemy również odnieść się do różne rzeczy by tagów oraz, Identyfikatory i klasy, ale po prostu dać nam trochę wszechstronność i co konkretnie mamy Aby odnieść się do. Więc to tylko przykład. Możemy ponownie, w ramach plik CSS, gdzie chcemy zdefiniować niektóre style-- tak, kolorów, czcionek, i takie that-- możemy zdefiniować styl dla ciała. Tak by ją zdefiniować na cały znacznik ciała. Ale możemy również zdefiniować styl na #title. I znowu, hashtag odnosi się do naszego ID i kropka odnosi się do naszej klasy. A następnie na .info, że Można również ustawić kilka atrybutów. I znowu, kiedy wrócimy, mieliśmy klasa nazywa informacji i nasz tytuł ID. I widzimy, że mamy na myśli im przez #title i .info. PUBLICZNOŚCI: Czy można powiedzieć, hashtag [? Adoptuj mnie? ?] MARIA ZLATKOVA: Słucham? PUBLICZNOŚCI: Czy można powiedzieć, hashtag [? Adoptuj mnie? ?] MARIA ZLATKOVA: Hashtag Oznacza ID, aby #title odnosi się do dowolnych elementów mają ten numer identyfikacyjny zwany tytuł. A następnie dot odnosi się do klasy. Więc .info odnosi się do tego elementu ponieważ ma informacji klasy. Tak. PUBLICZNOŚCI: Dlaczego odróżnić je w HTML? Dlaczego mówisz, że pewne rzeczy są Identyfikatory i pewne rzeczy są klasy? MARIA ZLATKOVA: To tylko do you-- HANNAH Blumberg: Powtórz pytanie. MARIA ZLATKOVA: Oh, przepraszam. Dlaczego wyróżnić pewne elementy jako identyfikatorów i innych elementów jak klasy? To tylko dlatego, że jest bardzo często wybór projektu. To daje dużo Wszechstronność w byciu w stanie powiedzieć, że chcą tego konkretnego elementu mieć ten identyfikator, ponieważ chcą zrobić wiele rzeczy z nim, a ja tylko Aby zdefiniować styl, pewien styl lub kolor, co do tej pozycji. A sposób, aby to zrobić tylko nadając mu identyfikator. A jeśli chcę mieć kilka różnych przedmiotów o to, że zamiast dzieje i ustawienie their-- zamiast robić to przez tag, ponieważ tag będzie ustawienie urządzenia na cały znacznik za każdym razem, że używany jest znacznik, można ustawić klasę do wielu elementów. A potem po prostu dostęp do tej klasy i powiedzieć: Chcę styl tej klasy w ten sposób. I znowu, klasa może być wiele różnych przedmiotów oraz identyfikator musi być unikatowa. Wielkie pytania. Jakieś inne pytania? OK, super. Ponownie, jest to, jak te przełączniki są wymienione w CSS, z hashtag, z kropką lub bez niczego dla przypisanie stylu jakiś znacznik, jak ciała. I tu mamy ogólny Składnia, jak to zrobić. Aby powtórzyć niektóre najlepsze Praktyki dla HTML i CSS, musimy znowu zamknąć wszystkie tagi HTML, które otwierane. A co ci poleca zrobić dla swoich ostatnich projektów, jak również dla CS50 Finansów, jest, aby się, że wszystkie HTML sprawdza. I to się robi z W3 Validator. A potem, co zrobiliśmy i co to polecam oddziela styl, więc CSS od znaczniki HTML. Więc wszystko, co odnosi się do tego, jak Twoja strona będzie wizualnie wyglądają i jak to będzie być modyfikowane powinien przejść do dokumentu CSS. I wówczas znaczników mówiąc jak rzeczy są w stosunku do siebie, jest HTML i że powinien wejść do środka swoich dokumentów HTML. Jakiekolwiek pytania? Mhm. PUBLICZNOŚCI: Co dokładnie się dzieje z walidacji na stronę gdy jesteśmy walidacji HTML [niesłyszalne] stworzył? MARIA ZLATKOVA: Tak what-- że ty. Więc co dokładnie się dzieje na walidacji strona i dlaczego musimy to zrobić? Zasadniczo musimy zrobić ponieważ wiele razy, przeglądarka, jeśli nie zamknąć tag czy coś takiego, Twoja przeglądarka jest nadal będzie renderowanie strony i może nadal działać, ale to jest najlepsze praktyki, aby upewnić się, że ty znowu zamknął wszystkie swoje znaczniki, się, że wszystkie elementy są sposób, w jaki powinny być, a przede wszystkim, że to przez konwencje, które są ustawione. To znowu tylko rzeczy, które powinieneś uczyć się robić, w przeciwieństwie do konieczności sloppier kod i takie tam. Tak. Przepraszam. Myślałam, że podniesienie ręki. PUBLICZNOŚCI: Nie, ja po prostu [niesłyszalne]. MARIA ZLATKOVA: OK. PUBLICZNOŚCI: Dziękuję. MARIA ZLATKOVA: Oczywiście, dziękuję. Więc jeszcze raz, dzieje się, w jaki sposób Informacja jest przekazywana i modele komunikacji do przesyłania informacji. TCP / IP. Transmisja TCP oznacza po prostu, Protokół kontroli i IP odnosi się do protokołu internetowego. A to po prostu odnosi się do dane sposób dostawy. Jeśli mamy jakieś dane, które musi dostarczane you-- tak można złożyć wniosek o określonym serwerze. Na przykład, kiedy próby uzyskania dostępu cs50.net, my się z prośbą do serwer CS50 i zobaczyć, że chcemy uzyskać tego rodzaju informacje. A następnie w oparciu o ten protokół w jaki sposób ta informacja nie została wydana, serwer podaje informacje Wróć do nas klient. I wtedy jesteśmy w stanie zobaczyć informacje o stronie a następnie użyć go. Więc Hypertext Transfer Protocol Jest to kolejny protokół lub ustawić konwencji, która określa, jak przeglądarka i serwer WWW powinny komunikować. I oddanie to wszystko razem HTTP ponownie tylko określa, jak zdefiniowano to hipertekst przez HTML, które już go pracy, jak powinno być dostarczone do Ciebie i w jaki sposób dane, które są dostarczane do Ciebie dostaje się do Ciebie. I dlatego, jeśli faceci pamiętam z klasy, mieliśmy dużo wniosków i mieliśmy dużo składni dla tych wniosków, z którymi jesteśmy pójdzie na teraz. Więc jeszcze raz, gdy wyślemy żądanie do serwera, musimy zdefiniować kilka rzeczy. Więc musimy znaleźć typ wniosku, że mamy do ustawiania. I znów mamy, na przykład, GET jest jeden rodzaj metody że mamy w naszej prośby. A następnie HTTP / 1.1 jest po prostu Protokół, który używamy obecnie. Przez większość czasu, to chodzi do protokołu, że używasz. Więc jeśli masz pytanie jak to na quiz. To konwencje że mamy do tej pory. Backslash odnosi się do jakiego rodzaju rzeczy jesteśmy prośbą. Następnie gospodarz jest, na przykład, w tym Sprawa, staramy się iść do google.com. Więc to jest wartość dla hosta. Ten typ żądania które mogą być przesłane. A potem to rodzaj odpowiedzi, które mogłyby być przesyłane powtórnie, w oparciu o ten protokół, to znowu, HTTP / 1.1. Więc to jeszcze wersja HTTP. 200 OK jest tylko kod statusu. I to OK, to tylko zdanie na podstawie tego kodu statusu. A potem Content-Type odnosi się do typu że wraca do ciebie, że jest dla tej strony internetowej, które otrzymują i że swojej przeglądarce może spowodować później. I to jest text / html. PUBLICZNOŚCI: Co 1,1 oznacza? MARIA ZLATKOVA: To tylko Wersja of-- och, co to 1.1 oznacza? To jest tylko wersja HTTP wersja protokołu, że używasz. Świetne pytanie. Inne pytania? PUBLICZNOŚCI: Czy możesz podsumować Content-Type bardzo szybko? MARIA ZLATKOVA: Tak, że co serwer. typ information-- co jest Typ zawartości było pytania. Więc to był rodzaj informacje, że wrócisz z serwera, rodzaju Dane że przeglądarka może wtedy czynią, że używasz. PUBLICZNOŚCI: Czy to, co to Protokół mówi ci to zrobić? MARIA ZLATKOVA: Słucham? PUBLICZNOŚCI: Czy to co mówi protokół? MARIA ZLATKOVA: The protocol-- PUBLICZNOŚCI: --what Content-Type jest lub what-- MARIA ZLATKOVA: Protokół oparty jest on-- co to jest protokół z informacją? To tak, jak że tej informacji został dostarczony na podstawie na jaki rodzaj protokołu Czy te informacje dostał dostarczany z powrotem do Ciebie. Czy to ma sens rodzaju? HANNAH Blumberg: Ty można myśleć o protokół jak A-- Myślę profesorze Malan opisałem w klasie, jak trochę jak A-- to jak odpowiednik ludzkiej uzgadniania. Powiedzieć, jak, hej, jestem wniosek i wiedzieć, jak radzić sobie HTTP wersji 1.1. A następnie serwer mówi: oh, OK, ja-- a zarówno istnieć. Wiem też, jak radzić sobie z HTTP / 1.1. I mam zamiar dać kopii pewne treści. W tym przypadku, to będzie być typu text / html. Więc to trochę tylko sposób z nich communicating-- MARIA ZLATKOVA: To jest po prostu potwierdzający, że jesteś zarówno po to samo Protokół oraz, że zarówno klient i server-- tak Twoja przeglądarka i server-- rodzaj wiedzieć, co masz mówisz i masz Konwencja o przejściu w danych. PUBLICZNOŚCI: Więc Content-Type part-- tekst Content-Type / html-- to wyodrębnioną częścią tej samej wiadomości? Czy jest to część, powiedzmy, 200? Czy powiedzieć im, że 200 lub jest-- MARIA ZLATKOVA: 200 mówi, że wszystko poszło OK. A następnie wpisz treść jest coś w rodzaju Odrębną część tej samej wiadomości, i mówi rzeczy, które ja Zwrot ma tego typu text / html. To tylko daje więcej informacji. Mają coś do dodania? OK. Wszelkie inne pytania w tej sprawie? Niesamowite. Więc niektóre inne stany HTTP, że możemy uzyskać dodatkowo do 200 OK, te, które widzieliśmy może prawdopodobnie o wiele są 403 i 404. Więc 404, jeśli starali się Dostęp coś, co nie istnieje. Tak na przykład w telefonie Psets CS50 Finanse, jeśli zostały renderowania quote.html i nie masz tego pliku, ale zamiast tego trzeba było quote.php, że spowodowałoby 404 Not Found ponieważ plik może nie istnieć. Przez 403 zakazane, które odnosi się do uprawnień. Więc jeśli jakiś plik nie jest czytelny przez świecie, można dostać 403 wrócił. Jeszcze inni, że może get-- 301, przeniósł się na stałe; 302, Znalezione; 304, modyfikacja; 400 Nieprawidłowe żądanie; a następnie Internal Server Error dla 500 i 503, Usługa niedostępna. Tak. PUBLICZNOŚCI: Czy możemy spodziewać się zapamiętać wszystkie te stany? MARIA ZLATKOVA: Musiałbym je na ściągawki. [ŚMIECH] PUBLICZNOŚCI: Czy możemy spodziewać się wiedzieć, co wyzwala każdy z nich? MARIA ZLATKOVA: Czy oni są? HANNAH Blumberg: Dla tych, że mamy uruchomić into-- więc pytanie was-- MARIA ZLATKOVA: Czy są oczekiwano wiedzieć, co każdy z tych statusu Kody mogą być wywołane? Więc dla tych, które używaliśmy i wpadł, powiedziałbym, że tak. Więc my na pewno widziałem 200 OK i wykładał ją w psets. Widzieliśmy, 403, 404. Dla innych z nich? HANNAH Blumberg: chciałbym powiedzieć, 500 wydaje uczciwej gry. MARIA ZLATKOVA: 500, tak. HANNAH Blumberg: Tak. Wystarczy ogólny sens z tego, co je powoduje. A także po prostu przez nich nazwy, możesz rodzaju jak zrobić zgaduje jako do tego, co w rzeczywistości spowodowane ich. Na przykład, przenieść się na stałe, prawdopodobnie plik został przeniesiony na stałe. PUBLICZNOŚCI: Ale na poprzedni egzamin, nie było tak jak można się spodziewać nam odpowiedzieć, że? HANNAH Blumberg: Tak był wart zero punktów. Pytanie na 418 na imbryku jest technicznie statusu HTTP, ale warto było zero punktów. Oczywiście, nie jesteś oczekuje się, że ich znam. PUBLICZNOŚCI: Czy jest prawdziwa? HANNAH Blumberg: To jest prawdziwy jeden, ale to nic nie znaczy. To tylko żart. Ludzie internetowe są śmieszne. MARIA ZLATKOVA: Wielkie pytania, chłopaki. Jakieś inne pytania? PUBLICZNOŚCI: Co to jest wewnętrzny błąd serwera? MARIA ZLATKOVA: Wewnętrzny błąd serwera tylko Oznacza to, że byliście w stanie komunikować z serwerem z jakiegoś powodu. Więc to nie jest koniecznie coś, co ma robić z klientem, czy coś takiego. Nie wiem, od konkretnego przykładu że posunęliśmy się do wyjaśnienia, ale tak. HANNAH Blumberg: Jasne. Tak na przykład, jak niech powiedzieć, że pracujesz na mashup oraz serwer Google poszedł na pewne Powodem, przerwy w dostawie prądu, powiedzmy. To byłby wewnętrzny serwer Błąd lub jakiś of-- wam podoba nie otrzymasz odpowiedzi z powrotem. MARIA ZLATKOVA: Tak. To właśnie wtedy, gdy jesteś w stanie komunikować z serwerem, z jakiegoś powodu, ponieważ od leci w dół lub w jakiś inny powód. Więc skoków do PHP. PHP, w przeciwieństwie do HTML, jest język programowania. I zaczęliśmy go używać, bo to bardzo przydatne do tworzenia stron WWW. Po raz pierwszy użył go w CS50 Finansów. I to w zasadzie pomaga nam przynieść razem te znaczniki, projekt, i jak właściwie korzystać z informacji aby wyświetlić rzeczy na stronie internetowej. Tak samo PHP PHP oznacza Hypertext Preprocessor, więc jest to rekurencyjny backnorym sama. I otwarcie znaczniki PHP możemy lewa i prawej strzałki z znaki zapytania i php. Tak więc widzieliśmy już kilka niego. Teraz jesteśmy po prostu się przejść kilka podstawowych rzeczy o nim. Więc z PHP, zmiennej nazwy zaczynają się znakiem dolara. Nie określić, znowu, zmienna typu już. Tak jak zrobiliśmy to z C, nie musimy tego robić. Możemy zrobić kilka różnych rzeczy ze zmiennymi. Możemy umieścić je razem poprzez ich złączenie z notacji z kropkami, które nie mogliśmy zrobić w C ponownie. Znowu mamy nieco większą wszechstronność PHP w zakresie zmiennych. Ponownie, nie mamy głównego funkcji. I PHP jest interpretowany w przeciwieństwie do skompilowany, Tak po prostu, jak uczynił dla plików C, nie musimy tego robić dla PHP. Ale raczej sposób, w języku prowadzony jest sama w sobie jest interpretowane. A potem luźno wpisane oznacza po prostu, że my nie muszą określić zmienną rodzaj i typy zmiennych są rozumiane w czasie wykonywania. PUBLICZNOŚCI: Ale co prawda na myśli dot konkatenacji? MARIA ZLATKOVA: Jasne. Gdy chcemy, aby to together-- więc jeśli mieliśmy trochę zmienną, miał wartość 3 i mieliśmy kolejny zmienna, która miała wartość ciągu, możemy umieścić zmienne razem stawiając kropkę pomiędzy nimi i ich łączenie. Albo możemy stworzyć Zmienna o nazwie name i umieścić go razem przez złączenie dwóch ciągów. Więc jeśli mieliśmy łańcuch w podwójne cytaty i stawiamy kropkę po nim, a następnie mieliśmy kolejny ciąg, który by utworzyć ciąg całkowicie. PUBLICZNOŚCI: OK. MARIA ŁOTWA: Czy to jasne? PUBLICZNOŚCI: Tak. MARIA ZLATKOVA: OK. Tak. PUBLICZNOŚCI: Kiedy mówisz interpretować, a nie skompilowany, mówisz, że nie muszą być tak dokładnie, kiedy chodzi o PHP w porównaniu do C? MARIA ZLATKOVA: Kiedy mówimy, interpretować w przeciwieństwie do skompilowany, Co mamy na myśli? To oznacza, że ​​nie musimy pliki wykonywalne uruchomić PHP. Oznacza to, że działa on jak to idzie. Czy to ma sens? Nieco więcej. HANNAH Blumberg: Więc można myśleć o tłumacza w innym programie, który jest odpowiedzialny na wyjście linia po linii przez PHP i rzeczywiście je wykonuje, w przeciwieństwie do kompilacji to wszystko na binarny. To tak naprawdę nie znaczy nic o tym, jak specyficzne musimy być. Wciąż musimy być precyzyjne, a nie zapomnieć średnik, i upewnić się, masz swój znak dolara, i tym podobne rzeczy. Dobre pytanie. MARIA ZLATKOVA: Tak. Tak więc linia po linii, jak zamiast z plików C, musimy mieć cały finał zanim rzeczywiście możemy go uruchomić. To jest główna różnica. Ale znowu, nie możemy naprawdę być mniej szczegółowe. Więc tablice w PHP reprezentacji obecnie uporządkowaną map. Tak więc wartości tablice stowarzyszonych do kluczy. Dwa sposoby zadeklarować tablica, na podstawie tej składni, możemy być bardziej wyraźne mówiąc, mamy tablicę i mamy ten klucz1 który mapuje się to wartosc1, klucz2 które odwzorowuje wartość2. Albo może po prostu utworzyć tablicę która zawiera sama wartości a następnie klawisze są rozumiane w ten sposób. Wszelkie pytania w tej sprawie? WIDOWNI: co by klucze znajdować się w drugim przykładzie? 0, 1, 2, 3? MARIA ZLATKOVA: Na przykład, to tylko klawisze to nie koniecznie robić różnicę. Oni po prostu określić, jak można używać wartości w jej wnętrzu. Więc jeśli mieliśmy foreach pętli w PHP, który będzie pozwalają nam przejść przez wszystkie wartości, możemy przejść przez wszystkie wartości, nawet jeśli mieliśmy albo nie zdefiniowano Klucz w ramach konkretnego witryny poprzednia składnia. Więc nawet z tego rodzaju tablicy, mogliśmy nadal mają pętli foreach który przechodzi przez każdy wartości w kluczu tablicy. Więc składni foreach pętli, zaczynamy z tablicą. Ta zmienna $ arr jest nasza rzeczywista tablica że określona w poprzednim szkiełku jako wartości, która dosłownie idzie przez każdy z wartościami niezależnie od tego, czy mieliśmy klucz czy nie. I wtedy możemy coś zrobić z wartość wewnątrz pętli foreach. Więc znowu, gdybyśmy mieli tablicę jak ten tutaj created-- więc mamy klucz foo i wartości bar, klucz baz i wartość qux-- możemy mieć pętli foreach, że przechodzi tablicy jako wartości klucza a następnie zrobić coś z klucza i / lub wartości. Ale niekoniecznie zawsze mają mieć pętle foreach, że przechodzi tablicy jako klucz mapie do wartości. Możemy przejść przez Tablica foreach pętli jako wartość. HANNAH Blumberg: I ​​myślę, że to-- było twoje pytanie, co jest wskaźniku domyślnym? PUBLICZNOŚCI: Kinda. MARIA ZLATKOVA: Och. HANNAH Blumberg: Tak, tak. Więc w zasadzie, jeśli nie podasz klucz, to będzie 01. MARIA ZLATKOVA: Tak. Podobnie jak w C, to do zera indeksowane jeśli nie podasz klucz. PUBLICZNOŚCI: Niestety. Możesz spróbować mówić trochę głośniej? Mam trochę Kłopot wszystko słuchu. MARIA ZLATKOVA: Tak mi przykro. Oczywiście. Więc chcesz mnie iść na to jeszcze raz? Albo jest this-- PUBLICZNOŚCI: Więc na poprzedniej slide-- jeśli może po prostu wrócić na jedną sekundę. MARIA ZLATKOVA: Oczywiście, przepraszam. PUBLICZNOŚCI: Więc drugi Tablica tutaj nie wydają się mieć wartość, aby wprowadzić, raczej [? związek przyczynowy. ?] MARIA ZLATKOVA: Racja, racja. PUBLICZNOŚCI: Więc jak to działa kiedy mówisz, że to wszystko lub nic. Dla mnie to wygląda za [? foo?] już. MARIA ZLATKOVA: Tak, tak. Ponownie więc, że jest to nakazał mapa w tym sensie, że są zrozumiałe Na przykład, wskaźniki Stąd można rozumieć jako 0, 1, 2, 3. Ponownie, to o tych, Indeksy jest naszym odpowiednikiem posiadania kluczy zamieniane następnie na wartości. Więc jeśli nasz klucz był 0-- przykro. HANNAH Blumberg: Nie, Jest kredy tutaj. To rzeczywiście bardzo miłe. MARIA ZLATKOVA: To świetnie. OK. Więc jeszcze raz, $ arr 0 byłoby klucz do wartości 1. 0 będzie kluczem do wartości 1. PUBLICZNOŚCI: Przykro mi. Jest to niewidoczne. HANNAH Blumberg: Dobra, nieważne. Kreda to zły pomysł. Biorę ją z powrotem. Można myśleć o klawiszach jako 0 mapy do wartości 1. MARIA ZLATKOVA: Tak. Tak to jest 0, to 1, 2, 3. Te mogą być klucze. Można myśleć o nich as-- tak. Więc zamiast wyraźne klawisze, są rodzaj rozumieć jako indeksy zaczynają się od 0. Kreda nie pomogło. Tak. PUBLICZNOŚCI: Dla pętli foreach, jeśli chcemy, aby zobaczyć, jak wartości, to by po prostu automatycznie indeksu do 0? MARIA ZLATKOVA: Tak. By przejść przez każdą z tych wartości. PUBLICZNOŚCI: [niesłyszalne], jak 0 lub nie, że po prostu nie 0? MARIA ZLATKOVA: Trzeba powiedzieć, jak znak dolara, a następnie niektóre nazwy zmiennej, wartość. PUBLICZNOŚCI: [niesłyszalne]. MARIA ZLATKOVA: Słucham? PUBLICZNOŚCI: Przepraszam, jestem po prostu staramy się pamiętać. Jak to zrobisz, jeśli może to zrobić automatyczne indeksowanie jest tylko 0? MARIA ZLATKOVA: Więc jak to robisz jeśli nie ma konkretnych nazwisk kluczowych? PUBLICZNOŚCI: Tak. MARIA ZLATKOVA: Ty po prostu define-- po prostu powiedzieć sobie, jak pewnego imienia. Więc w swoim psets, chłopaki mogą pamiętaj foreach $ wiersz jako $ wiersze, stworzyliśmy Nas to $ wiersz mówiący chcemy przejść przez rząd jako $ rzędach. Nawet jeśli nie mamy to wyraźne $ wiersze zdefiniowane, możemy tylko iść i powiedzieć, może to być nasz klucz, i po prostu przejść przez każdy z tych wartości. PUBLICZNOŚCI: Tak jest wartość nowej zmiennej tworzymy przechowywać [niesłyszalne]? MARIA ZLATKOVA: Więc to nie jest natury nową zmienną. Jest to zmienna, która odnosi się do Wewnątrz matrycy do każdego z nich. HANNAH Blumberg: Jest nowa nazwa zmiennej. MARIA ZLATKOVA: Tak, jest to nowa nazwa zmiennej, ale to nie jest inherently-- tak. To tylko nowa zmienna że można to zrobić. Tak, jak to zrobiliśmy $ row jako $ wiersze, wiersze był nową nazwę zmiennej, że może stworzyć w naszej pętli foreach. To nie musi preegzystował wcześniej. PUBLICZNOŚCI: Czy można przejść przez logika dla każdego, korzystając tam przykład? MARIA ZLATKOVA: Mhm. Przepraszam. Oto przykład. Pewnie. Tak więc dla każdego array-- tak to znaczy iść do tej tablicy jako klucz value--, że będzie przejść tej tablicy i najpierw pójść i dostać foo, Kluczem foo i bar wartość. A następnie na drugi iteracji pętli for to będzie przejść i podjąć klucz baz, a wartość qux. A potem można zrobić coś z jeden z nich lub oba z nich. PUBLICZNOŚCI: Więc idea odgrywają kluczową punkcie z wartością, co masz na końcu dostępu? MARIA ZLATKOVA: Jaka jest idea posiadania kluczowym wskazujące na wartość? To jest po prostu inna konwencja, inny sposób przechodzi tablicy i jest w stanie uzyskać dostęp albo klucza lub wartości lub obu i używać ich. PUBLICZNOŚCI: Jaka jest rola nakazać foreach przebiega? Więc jeśli były, aby dodać elementy do tablicy później będzie ci się pierwsi zwany w tablicy foreach, czy to będzie później? MARIA ZLATKOVA: Więc to, co jest porządek, że foreach pętla przechodzi tablicy w? Przechodzi przez pierwszy Element do ostatniego elementu ostatniego dodanego pierwiastka. Jeśli dodać elementy później, oni by być accessed-- pierwsze elementy będą dostępne jako pierwszy Elementy macierzy, i chcesz przejść przez każdy z elementy jak swego rodzaju ordered-- nie uporządkowany, ale sposób, że zostały one wprowadzone do tablicy. PUBLICZNOŚCI: Więc nowe elementy dodaje się później? Więc oni added-- oni być Te ostatnie w [? iteracja. ?] MARIA ZLATKOVA: Nowe elementy can-- w zasadzie, gdy dodawane są nowe elementy, są dodane do końca tablicy? PUBLICZNOŚCI: Tak. MARIA ZLATKOVA: Wierzę, że tak. Tak. A potem z pętli foreach, po dodaniu nowych elementów i można przejść przez nich, nowe elementy będzie być accessed-- nowego elementu, jeśli jest to dodana ostatnia, byłoby uzyskać ostatni. PUBLICZNOŚCI: możesz po prostu dać przykład czegoś, co by [niesłyszalne] coś z wartości jak [niesłyszalne] lub wartości, jak, jak chcesz sformatować, że? MARIA ZLATKOVA: Jasne. Mogę dać przykład tego, co zrobimy z wartością? Więc co wy może znać jest, że posunęliśmy się za pośrednictwem tablicy i zasadniczo drukowane Każdy z elementów, Na przykład, stanowiąca część uporządkowany lub coś. Czy to ma sens, czy też chcemy to-- PUBLICZNOŚCI: Czy możemy drukować te wartości się? MARIA ZLATKOVA: Tak, możemy wydrukować a następnie w zasadzie $ value ponieważ w że konkretna wartość, bylibyśmy drukowanie wartości wewnątrz niego. Więc jeśli byliśmy na naszej pierwszej iteracji o tym, a my drukowane $ wartość, będziemy drukowania bar. PUBLICZNOŚCI: Czy istnieją także pętli w PHP lub tylko foreach pętli? MARIA ZLATKOVA: Jest także dla pętli w PHP. A ich logika jest głównie samo, jak to, co już kiedyś. PUBLICZNOŚCI: Więc jego wartość jest null. MARIA ZLATKOVA: To jak to samo. Tak. PUBLICZNOŚCI: jestem po prostu zapytać. Więc kiedy zadeklarować tablica, nie trzeba powiedzieć jaki rozmiar to będzie być, co oznacza, że ​​można po prostu dodawać i zabrać elementy [niesłyszalne]. MARIA ZLATKOVA: Tak. Tak. Dokładnie. Kiedy zadeklarować tablicę, my nie trzeba powiedzieć, jaki rozmiar jest to, więc można po prostu dodać elementy na to także później. Więcej pytań? Więc przynosząc PHP i HTML razem, co mamy seen-- dobrze, Na przykład, w tym przykładzie mamy formularz HTML, który ma pole wprowadzania. A pole wejściowe jest tylko nazwa a następnie ma przycisk Prześlij. A kiedy naciśniesz Wyślij Przycisk w naszym pliku hello.php, ponieważ metoda formy jest uzyskać, możemy uzyskać dostęp to, co jest w nazwie przez to uzyskać zmienną globalną, że jest-- składnię to $ _GET. I wtedy możemy uzyskać dostęp bez względu na wejściowe użytkownika wewnątrz tej formie do nazwy przez podanie nazwy tej dziedzinie. Wszelkie inne pytania lub którykolwiek pytania dotyczące tego konkretnego przykładu? PUBLICZNOŚCI: Gdzie jest PHP? MARIA ZLATKOVA: Tutaj. Więc to jest nasz tag otwarcia dla PHP. PUBLICZNOŚCI: Och, dobrze. MARIA ZLATKOVA: Tak. HANNAH Blumberg? O: = jest skrótem bo to jest PHP i tylko echo. PUBLICZNOŚCI: Och. MARIA ZLATKOVA: Tak, przepraszam. Powinienem był się, że jasne. HANNAH Blumberg: Drukuj. MARIA ZLATKOVA: To tylko funkcja która pozwala nam coś wydrukować. Świetne pytanie. Więc going-- tak. PUBLICZNOŚCI: Czy nie będzie dość nieco kodowania strony PHP i HTML na quizie 1? MARIA ZLATKOVA: Nie może być sporo interpretacji PHP i HTML, niekoniecznie jak ogromne ilości kodowania, choć może trzeba napisać Pętla foreach, choć pętli for. Każda z pętli, które omówić jest uczciwa gra. I to głównie ona. HANNAH Blumberg: Chciałbym być przygotowany. W ten sam sposób, że poprosił cię Napisać kilka funkcji C na quizie 0, Byłbym gotów zrobić sama w PHP i JavaScript. MARIA ZLATKOVA: Tak. HANNAH Blumberg: Powiedziałbym little-- jak nie jesteśmy będzie Ci napisać ogromny HTML Strona tylko dlatego, że jest trochę nudne, ale może mieć części. To całkowicie uczciwa gra. Jak małe stronie HTML, całkowicie uczciwe. PUBLICZNOŚCI: OK. Jak o języku JavaScript, jak również? HANNAH Blumberg: Tak. JavaScript jest uczciwa gra. MARIA ZLATKOVA: Tak. To całkowicie uczciwa gra. HANNAH Blumberg: Dostaniemy do tego, w takich jak 10 minut. MARIA ZLATKOVA: SQL, znowu, Structured Query Language. To w zasadzie pozwala nam na zarządzanie danymi w zarządzania relacyjnymi bazami danych system. To właśnie w zasadzie oznacza, że mamy gdzieś do przechowywania niektóre dane, które mogą chcemy stosowania w stronę lub w innej formie. A potem mamy pytania, aby uzyskać Informacje z naszej bazy danych, lub wstawić informacje w nich. Wiele wspólnego ones-- UPDATE INSERT, SELECT i DELETE. Więc do aktualizacji, to jest składnia do aktualizacji danych w bazie danych. Aktualizacja tej tabeli o nazwie stół, mówiąc, SET, możemy ustawić niektóre wartości w ogóle wiersze do równego coś innego. Tak więc możemy również określić niektóre specyficzne wpisy, które chcemy zmienić i że może być przy użyciu WHERE. I możemy określić, że chcemy jedynie zmodyfikować niektóre wiersze, gdzie dom dla, jeśli mieliśmy stolik studentów a wszyscy studenci mieli dom, więc chcemy zmienić tylko niektóre wartości gdzie dom równa kuriera, na przykład. Dla INSERT, możemy włożyć pewne wartości do tabeli. Więc INSERT INTO tabela, i wartości, a następnie w nawiasach, określamy wartości, które chcesz wstawić. Więc INSERT INTO tabela, col1 i kol2 wartość jest wart1 i wart2. Więc to wstawia w zasadzie nowy wiersz do tabeli zawierającej wartości 1 i 2 w kolumnach 1 i 2. A potem mamy zamiar iść na szybkie przykładem tego, jak to wygląda jak w naszej bazie danych trochę. Ale to, że ostateczna zapytania myślę, że będziemy przejść, SELECT, po prostu pozwala nam do wyboru danych z tabeli aby ewentualnie użyć go później. A sposób, w jaki to jest to wystarczy zapisać go w jakiejś zmiennej. A potem możemy ewentualnie użyć go ponownie. Więc SELECT gwiazda oznacza zaznacz wszystko. To tylko skrót do wyboru wszystkich. FROM tabela WHERE, szukamy dla niektórych szczególnych warunkach, więc gdzie kolumna jest równa coś, na przykład. Jeśli chcieliśmy zaznacz wszystko ze stołu, to po prostu wybiera wszystkie kolumny i wszystkie wiersze z tabeli. A następnie DELETE FROM tabela GDZIE kol równa się coś, to po prostu usuwa niektóre wiersz z naszego stołu gdzie mamy pewne określone warunki. W tym przypadku warunki są kolumny wynosi coś. Więc po prostu szybkie przykładem. Jeśli mamy ten stół tutaj, a my włóż ją do tabeli, wartości te, że będzie wstawić nowy wiersz. I gdybyśmy mieli automatycznego przyrostu, to będzie po prostu zwiększyć naszą ID od 0 do 1 do 2. Jeśli wybraliśmy wszystkim od studentów, to po prostu zwraca wszystkie pola i wszystkie wiersze. W przypadku, gdy rok jest większa niż lub równą 2016, że po prostu wrócić Hannah i ja. A potem, jeśli tylko wybrane rok id i rok od studentów gdzie dom jest Cabot House, które by znów powrócić Hannah i ja. Następnie, jeśli usunięte z uczniami gdzie nazwa jest równa Rob, że będzie usunąć cały wiersz. A potem, jeśli ustawić nazwa, studenci UPDATE SET Nazwa równa Daven GDZIE dom jest równa Cabot House, który zamierza przejść do te wiersze, a następnie zaktualizować nazwę. A potem kilka typów danych SQL są CHAR, VARCHAR, INT, i pływak. Są to uczciwa gra. Chciałbym tam jeszcze raz i upewnij się, że wiesz, i mieć je na ściągawki, co każdy z tych znaków stosowano w co użyto je na psets, i upewnij się, że znasz i komfortowo mając do wyboru z różnych typów danych w swojej pset. Tak. PUBLICZNOŚCI: Co było, że tabela przechowywane? Tak, gdzie jest przechowywany w tej tabeli? MARIA ZLATKOVA: Cóż, teraz, to nie jest zapisywane. W każdym razie, gdzie jest przechowywany w tej tabeli? Ale to może być przechowywane w bazie danych SQL. PUBLICZNOŚCI: A gdzie jest baza danych SQL? W komputerze, w Internecie gdzieś serwer? MARIA ZLATKOVA: To może być wiele różnych rzeczy. HANNAH Blumberg: Mamy połączony z SQL tabele głównie z phpMyAdmin. Więc możemy poprosić serwer zapisać je dla nas. Możemy przechowywać je na własnym komputerze. MARIA ZLATKOVA: To zależy od tego, jak chcesz to zrobić dla siebie. Ale zostaliśmy przechowywania im, jak wspomniano Hannah, na phpMyAdmin, który jest w trybie online. A potem, jak nam się wykorzystać PHP i SQL, możemy go zapisać do jakiejś zmiennej co my zapytaliśmy o. Jeśli więc wybrać wszystkie z historii gdzie user_id równa ID sesji, które wybrać wszystkie wiersze dla określonej osoby jest zalogowany z historii Stół i sortować je w rzędy. Fajna jest, aby wiedzieć że funkcja zapytania CS50 jest chroni przed tagów SQL injection. To po prostu oznacza, że ​​pilnuje wejście, które jest wpisana jest poprawna oraz że osoba, która wchodzi wejście nie próbuje wprowadzić niektóre złośliwe Kod albo spadek nasze stoły lub usunąć wszystko wewnątrz naszej bazie danych. Szybki przegląd z Model Model-View Controller, to tylko sposób organizacji i myślenie o kodzie. To kolejny paradygmat projektowania. Co oznacza, że ​​jest to, że can-- i jest to dobra praktyka w celu oddzielenia różnych elementów naszego kodu i co kontroli w tych trzech paradygmatów. Tak więc nasz widok jest najczęściej nasze szablony, nasz układ, sposób które możemy ustawić w jaki sposób nasz kod wygląda. To głównie nasze pliki CSS i sposób że zdefiniowany projekt naszego kodu, gruntownie. Nasz kontroler jest głównie to, co robiliśmy z plikami PHP. Więc jeszcze raz, praca z informacje, które mamy i określenie, w jaki sposób Informacje te są wykorzystywane, a następnie przepuszczanie tej informacji albo na widoku lub modelu. I model, tak, że mamy było korzystać, jest była nasza baza danych, więc gdzie nasze informacje przechowywane, więc ma gdzieś żyć, a każdy z kod, który odnosi się do sposobu że mamy takich informacji lub sposób, że aktualizacji tych informacji. Tak więc w modelu MVC, HTTP żądania są wysyłane do serwera WWW. Następnie interpretuje kontrolera żądanie od użytkownika a następnie sprawdza poprawność danych wprowadzanych przez użytkownika. Jest to opcja, że ​​mamy kontroler komunikacji z modelem, więc coś jak naszej bazie danych lub jakieś inne funkcjonalności który przekazuje informacje. I w końcu, sterownik przekazuje informacje na widzenia tak, że może być wydane i że może widoczne dla każdej osoby dostęp do strony internetowej. Jakiekolwiek pytania? Niesamowite. Więc jeszcze raz, model, jego funkcją znowu jest trwałe przechowywanie informacji, zarządzania i organizowania danych. I co widzieliśmy tak daleko jest baza danych MySQL oraz pliki danych, które mogą wykorzystać. Zobacz, prezentacja informacji użytkownik, interfejs użytkownika, czy interfejs użytkownika. A przykładem tego jest HTML. I wtedy możemy mieć minimalny PHP. Więc dla pętli, które wykonuje iteracje na danych, które są drukowane jest częścią widzenia, jako w przeciwieństwie do kontrolera. I wtedy wielu z naszych plików PHP należą do kategorii kontrolera. To po prostu obsługuje żądania użytkowników i pobiera informacje z modelu. Skoki do dokumentu Object Model, to tylko odnosi się do sposobu HTML organizowane są dokumenty. I są zorganizowane w drzewo struktura, która ma hierarchii. Więc jeśli mamy dostęp do [niesłyszalne] przedstawieniem dokumentu możemy pracować z dokumentem, jak możemy manipulować obiektami w zasadzie. I na to, że trochę wyraźniejsze, kiedy mamy wiele z naszych różne znaczniki odpowiedzieć do różnych tras w naszym drzewie. A następnie w tym przykładzie mają początkowy węzeł dokumentu. Mamy więc nasz węzeł HTML które dzieli się na głowę i ciało. Głowica posiada tytuł, a następnie tytuł zawiera Witaj, świecie. A nasz organizm po prostu zawiera Witaj, świecie, jak również. Więc wszelkie pytania dotyczące któregokolwiek z rzeczy, które objęte do tej pory? A jeśli nie, Hannah będzie przejąć z JavaScript. Niesamowite. HANNAH Blumberg: OK, fajnie. Jeśli coś wyjdzie z PHP i HTML, lub któregokolwiek z tych rzeczy Maria pokryte, zawsze możemy wstrzymać. Robimy lepiej Czas znowu, tak niesamowite. I po prostu wrócić bardzo szybko, z tym, jeśli spojrzeć na każdy minionego roku egzamin, to pojawia się either-- tutaj jest niektóre HTML, aby ten schemat. Albo tu jest ten schemat, że niektóre HTML, więc na pewno praktyka, że. A potem to gwarantowany Pytanie, które można dostać w prawo. Chłodny. Więc porozmawiajmy o JavaScript i jak to jest trochę różni się od języków takich jak PHP i C, te dwa języki, które widzieliśmy wcześniej. Więc numer jeden, to luźno wpisane. To jest jak PHP, ale w przeciwieństwie do C Jest to język interpretowany. Ponownie, to jak PHP, w przeciwieństwie do C, a to ma pozwolić nam go use-- działa bardzo dobrze z stron internetowych. To będzie pozwalają manipulować treść i jak to wygląda i co robi. Jedziemy zobaczyć trochę Ajax. To pozwala nam komunikować asynchronicznie z różnych serwerów i uzyskać informacje. I to jest rzecz, która naprawdę oddziela JavaScript z PHP i C jest to, że po stronie klienta. Zarówno PHP i C zazwyczaj po stronie serwera. W przeważającej części, a prawie w całości, co widzieliśmy, przynajmniej w ta klasa, JavaScript działa na stronie klienta, co oznacza, że przeglądarka jest rzeczywiście odpowiedzialny za uruchomienie go. A to oznacza, że ​​nie potrzebne do interakcji z serwerem. Więc to oznacza, że ​​może być dużo szybciej bo to właściwie tylko to Chrome, to Safari, to Firefox, cokolwiek wam używać właściwie prowadzeniu JavaScript. PUBLICZNOŚCI: Co asynchroniczny oznacza? HANNAH Blumberg: Ach, co nie asynchronicznie na myśli? Świetne pytanie. Asynchronicznie means-- dobrze, treść, w której używamy jest, OK, Tworzymy strony WWW i musimy uzyskać pewne informacje. Tak więc na przykładzie mashup, niektóre informacje, które mogą chcemy to tytuły artykułów. Teraz could-- jedną opcję jest zrobić to synchronicznie a to oznacza, LET'S stop, przejdź się artykuł, uzyskać artykułu plecy, a następnie render, ale to będzie bardzo powolny. To byłoby złe doświadczenia użytkownika dlatego, że po prostu siedzieć nie czekając na coś odpowiedzieć. Asynchronicznie oznacza będziemy nadal będzie o naszej działalności, renderowania strony, oraz wyślemy wyłączyć żądanie To trochę będzie stało się w tle. Myślę, że używamy przykład w Rob wykład dzwoni i mówi, hej, możesz to patrzeć dla mnie i wrócić do mnie, a nie tylko mnie czeka na telefon. Więc asynchronicznie Oznacza to się dzieje w tle od nas równolegle. Świetne pytanie. Cokolwiek innego? Świetny. Będziemy skakać o wiele więcej do asynchronicznych wywołań z Ajaxem. PUBLICZNOŚCI: Czy JavaScript-- gdzie robi spaść z Model-View-Controller? HANNAH Blumberg: Świetne pytanie. Gdzie upadek JavaScript z Model-View-Controller? Hm. Myślę, że może to fall-- więc zwykle nie lubię squish go na które Paradygmat, ale myślę, powiedziałbym, OK, więc JavaScript faktycznie się dzieje, aby umożliwić nas do zbierania danych, interpretacji danych, faktycznie znaczące rzeczy z danymi. W ten sposób, jest bardzo podobny do sterowania. Ale to również będzie pozwalają nam wyświetlić rzeczy i rzeczy drukowania. W ten sposób, to bardzo podobny widok. Tak. Więc to jest trochę jak PHP w gdzie to niby być zarówno. Dobre pytanie. Cokolwiek innego? Wszystko w porządku, niesamowite. Przesuwanie w prawo wzdłuż. Warto więc zobaczyć przykład w jaki sposób możemy wykorzystać JavaScript w jednym z naszych programów internetowych. Więc uważam, że to index.html z gronem HTML. I co chcę cię skupić się na ten znacznik jest skrypt. I to mówi, OK, chcę, aby uruchomić niektóre JavaScript i tutaj jest, gdzie mieszka. Żyje w hello.js. I bardzo podobnie jak CSS, mogliśmy umieścić JavaScript w HTML. Dlaczego może chcemy, aby oddzielić ją? Tak. PUBLICZNOŚCI: Łatwiejszy przepisać? HANNAH Blumberg: Tak. Jest to łatwiejsze w użyciu w całej różne strony internetowe. To sprawia, że ​​coś czystsze. To jest po prostu dobra praktyka. Niesamowite. Dobra odpowiedź. Więc dobrze, więc to będzie być naszym index.html. A potem tu jest nasz malutkie plik JavaScript. A wszystko to mówi jest czujny Witaj, świecie. Więc co się dzieje, kiedy Ta strona renders-- więc jeśli pójdziesz do jakiejkolwiek strony internetowej to jest-- wszystko, co się wydarzy jest to powiedzieć, OK, jestem zamierza uruchomić ten kod JavaScript. A ten kod JavaScript po prostu mówi alert Witaj, świecie. Więc mam zamiar się tego przyjazny mały pop-up. Chłodny? To trochę jak nasz pierwszy JavaScript programu, nasz Witaj, świecie. Przyjrzyjmy się nieco więcej o tym, co składnia JavaScript wygląda. A konkretnie, porównajmy go do C i PHP, które widzieliśmy wcześniej. W JavaScript, będziemy mieć var nazwa zmiennej, a następnie jego rzeczywista wartość. A my nie określić typ, po prostu jak w PHP, ale bardzo w przeciwieństwie do C Tak na przykład, jeśli chcemy przechowywać wartość 50, w C, to musimy powiedzieć, hej, C, chcę liczbę całkowitą, Mam zamiar to nazwać i, a jej wartość to 50. W PHP, to jest trochę łatwiej. Mówimy, hej, chcę zmienną nazywa ja, a jej wartość wynosi 50. Bardzo podobnie, w JavaScript, mamy powiedzieć, hej, chcę zmienną i, jego wartość wynosi 50. Każdy kolejny raz, że używam Ja nie muszę pisać var. To tylko ja od tego momentu. W ten sam sposób, w C, gdzie raz mówimy, int i, po prostu użyć i. Chłodny? W porządku. Przechodząc do pętli, Na szczęście, te prawie wyglądają exactly-- Myślę, że są dokładnie tak samo jak to, co pętle będą wyglądać w coś jak C, gdzie w pętli będzie miał trzy parts-- inicjalizacji, stan i aktualizacji. Pętla natomiast, że wygląda dokładnie to samo. My po prostu dać mu warunek. I robić podczas pętli, ponownie, dokładnie tak samo. Dajemy to warunek. Powiedzmy, że chciałem do iteracji over-- Chciałem coś zrobić pięć razy. W C, możemy napisać dla init i jest równa 0. i jest mniejsza niż 5, i ++. Jedyna różnica, w JavaScript, zamiast mówić int i jest równa 0, mówimy var i jest równa 0. Pięknie. To jedyna różnica. Wszelkie pytania dotyczące któregokolwiek z tego? Tak. PUBLICZNOŚCI: Więc w PHP, to jest to samo rzeczą, z wyjątkiem, ale jak zmienna? Albo było to, że na przykład var? HANNAH Blumberg: Tak. Więc w PHP, to będzie na znak dolara. Więc to będzie $ i równych 0, $ i jest mniejsza niż 5, $ i ++. Świetne pytanie. Teraz porozmawiajmy o deklaracje funkcji. W C, gdy uznany za Funkcja, daliśmy mu nazwę i daliśmy kilka parametrów. I na początku pisaliśmy typ. W JavaScript, wszystko, musisz zrobić, to napisać funkcja słowo kluczowe mówi, hej, JavaScript, Mam zamiar zdefiniować funkcję. W tym przypadku, że ma nazwę sumy. I trwa dwa argumenty, X i Y. Zauważ, że nie dbamy o rodzajach xi y. I podobnie jak C, mamy ten powrót słów kluczowych, więc możemy zrobić coś jak powrotnej xi y. A teraz, kiedy już napisane ten pierwszy Funkcja, możemy użyć sumę wszędzie. I to jest całkowicie w porządku. One naprawdę fajne rzeczy na temat JavaScript, który jest bardzo w przeciwieństwie do C jest to, że funkcje mogą być traktowane jako wartości. Tak więc możemy zrobić coś takiego tutaj gdzie przypuszczam, że obejmuje to up-- I pokryta sumę var part-- i po prostu powiedział: Funkcja xy wynosi powrotu X plus Y. To, co można nazwać anonimowa funkcja. Jest to funkcja, bez nazwy. Podczas gdy funkcja ta mówi Suma, bla, bla, bla, to byłoby po prostu powiedzieć funkcji. Ale teraz, mimo że mam to anonimowa funkcja, że funkcja jest naprawdę wartość. Możemy traktować jak wartość. Tak więc możemy zapisać go w zmiennej o to samo sposób możemy przechowywać 50 w zmiennej. Można więc powiedzieć, OK, chcę Zmienna, nazywa się sumą, i to jest ta funkcja. Tak więc te dwie rzeczy są rzeczywiście zamiar zrobić dokładnie to samo, ale składnia jest trochę inna i rodzaj notatki zabawy. Tak. PUBLICZNOŚCI: Tak można nazwać funkcja, która była anonimowa, mówiąc: wsporniki suma 2, 5? HANNAH Blumberg: Tak. Można nazwać to anonimowy funkcjonują w ten sam sposób. Zrobiłbyś sumę (2, 5) ;. To byłoby całkowicie w porządku. Jeśli nie zrobiłem suma var równa funkcja, jeśli po prostu usunięte this-- Wiem, że to na mojej ręce, ale udawać, że usunięte this-- następnie że funkcja jest rodzajem prostu zniknął. Nigdy nie można użyć go ponownie, ponieważ nie masz nazwy dla niego. Trudno odnieść się do czegoś nie wiem jak to nazwać. Dobre pytanie. Tak. PUBLICZNOŚCI: Czy można odwołać sumę w innych miejsc o wartości X i Y? HANNAH Blumberg: Czy możesz Kwota referencyjna w innych miejscach przy wartości X i Y? Nie jestem do końca pewien, co masz na myśli. PUBLICZNOŚCI: Więc obok pół-anonimowe Funkcja ta suma jest równa tej funkcja anonimowa, więc suma jest Teraz zmienna, że ​​can-- HANNAH Blumberg: Racja. Więc suma jest zmienna, ale actually-- więc suma jest zmienną, której wartość jest funkcja. Więc jest to funkcja, która jest rodzajem dziwna rzecz, owinąć wokół twojej głowie ponieważ graliśmy z C i nie można tego zrobić w C. Ale teraz możemy nazwać zsumować sam sposób moglibyśmy nazwać sumę tutaj. PUBLICZNOŚCI: OK. HANNAH Blumberg: Tak. Dobre pytanie. Tak. PUBLICZNOŚCI: Tak więc nie używać Prototypy w PHP lub JavaScript? HANNAH Blumberg: Nie, nie trzeba używać prototypów, szczególnie w JavaScript. Tak jeden praktyką złą rzeczą, że jestem powie, że nie należy robić to nie trzeba pisać var ​​i = 50. Możesz po prostu zacząć robić i = 50. I byłoby po prostu zrobić i zmienną globalną. To bardzo zła praktyka nie mów nigdy jawnie var i, ale to jest coś, co możesz zrobić. Tłumacz nie jest będzie krzyczeć na ciebie. JavaScript jest dość podobny, możesz robić co chcesz. Przepraszam. Nie ma dwóch. W pomarańczowe spodnie. Śmiało. PUBLICZNOŚCI: Nie, ty pierwszy. PUBLICZNOŚCI: Nie, po prostu mówiąc: Ja nie mam ręki do góry. OK. Więc jeśli były zadzwonić za pierwszym razem, teraz podsumować, nazywamy go w ten sam sposób, x, y, jak za każdym razem? HANNAH Blumberg: Tak. Więc te dwa zasadniczo zrobić to samo. PUBLICZNOŚCI: A co jest zaletą z wykorzystaniem jednego lub drugiego? HANNAH Blumberg: Nie zaletą z użyciem jednego lub drugiego. Chciałem tylko pokazać dwa różne elementami składni. Wiele razy, gdy anonimowy funkcje mają jakiś cel jeśli argument jest do drugiego Funkcja ta powinna być funkcją. I zobaczymy, że w tylko druga z Ajax. Więc jeśli to nie miało sensu, przechowywać go w tył głowy. To miejsce, gdzie anonimowy Funkcja może być przydatna bo to nie jest naprawdę warto nadając jej nazwę, ponieważ jesteśmy tylko zamiar go użyć tylko raz. Tak. PUBLICZNOŚCI: Jeśli x i y zmiana później na, podsumuje zmienić, jak również? HANNAH Blumberg: Jeśli x i y zmiany później, podsumuje zmienić, jak również? Więc to jest właściwie, myśli coś, co jest, znowu, po prostu czuje się bardzo różne z C. Nie jest to wartość. To nie jest 5. To jest po prostu sama funkcja. Więc jak tylko dać to parametry, Pokochasz więc właściwie obliczyć wartość. MARIA ZLATKOVA: A potem można wywołać funkcję i używać go dostać jakąś wartość. HANNAH Blumberg: Racja. Dokładnie. Tak. PUBLICZNOŚCI: Tak, jeśli tylko przechowywać go w zmiennej, jak var x równa się sumie dwóch values-- HANNAH Blumberg: Tak. Więc może po prostu zrobić sumę var jest równa sumie dwóch wartości. Tak. Jakieś inne pytania? Tak. PUBLICZNOŚCI: Ale czy to mylić sumy i sumy? Podobnie jak w przypadku zadzwonić do zmiennej kwoty, nazwałbyś sumę funkcji? HANNAH Blumberg: Mm. Mm. Jeżeli zrobiłeś coś jak, suma równa suma 2, 5? PUBLICZNOŚCI: Tak. HANNAH Blumberg: Wierzę, że by nadpisać wartość sumy. Tak więc kolejny ciekawy rzeczą JavaScript jest to, że pojedyncza zmienna może mieć na kilka różnych typów. Zła praktyka. Nie powinno się coś zrobić jak to, co właśnie powiedział. Ale w C, jeśli i jest ustawiony równa liczbie całkowitej, wiemy, że nigdy nie jest stanie się ciąg. To nie jest w JavaScript. Tak, dobre pytanie. Cokolwiek innego? W porządku. Robi wszystko na czas. Utrzymanie dzieje. W porządku. Jeśli spojrzymy na tablicy w JavaScript, tutaj szybkie przykładem tablicy ciągów. I tablice mogą rozwijać się dynamicznie. Oni nie mają stałym rozmiarze w ten sam sposób że robią w C. Możemy uzyskać dostęp do elementy z zaledwie nawiasach kwadratowych. To wygląda trochę jak PHP i wiele jak C, w której można powiedzieć, w tym przypadku, gdybym chciał słowo JavaScript, chciałbym nie arr nawiasów kwadratowych z 0, 1, 2. A potem, jeśli pamiętać w C kiedy chciał, aby uzyskać długość tablicy, to było naprawdę denerwujące. Ale w JavaScript, super łatwy. Wszystko co robimy, .length. Daje jej długości. To jest. PUBLICZNOŚCI: To proste. HANNAH Blumberg: Tak, sprawia, Twoje życie o wiele łatwiejsze. OK, nie object-- tam. Obiekty w dotyku JavaScript dużo jak elemencie w C i tablice asocjacyjne w PHP. Więc to, co widziałem Wiele jest JSON, które oznacza JavaScript Object Notation. I to w zasadzie sposobem od ukształtowania naszych danych. Zobaczmy więc, przykład, chyba najprostszy. Tak oto przykład obiektu która przechowuje klasę, CS50. I kiedy mówię klasy, mam na myśli oczywiście, Nie like-- tak, kurs, CS50. I zobaczysz, że wszystko w obiekcie będzie zawierał w nawiasy. I zaczynamy kojarzyć nazwy pól lub klawisze z różnymi wartościami. Więc można rozpocząć, aby zobaczyć, jak ten rodzaj czuje się jak tablicy asocjacyjnej w PHP. Tak więc mamy zamiar powiązać pole lub nazwa klawisza, oczywiście z ciągiem, CS50. My będziemy mieć instruktora. My będziemy mieć TFS. My będziemy mieć wiele psets i będziemy mieć nagrane. I jedna fajna rzecz, którą należy wszystkie te rzeczy mają różne typy, i to jest całkowicie w porządku. Jest dobrze do obiektu, w istocie to zapewne spodziewać dla obiektu mieć połączenie strun oraz liczby i Boolean i tablice i co tam jeszcze może chcą mieć wewnątrz obiektu. I pamiętać, że te będą nazwy lub klucze, a następnie po prostu ustawić go na równi z odrobiną okrężnicy. PUBLICZNOŚCI: Co dokładnie JSON na myśli? HANNAH Blumberg: Co JSON dokładnie ma na myśli? JSON po prostu oznacza JavaScript Object Notation. To tylko sposób formatowania. Tak. Jest to sposób formatowania nasze dane. W C, to konstrukcjom. W PHP, to tablic asocjacyjnych. W JavaScript, mamy obiektów. PUBLICZNOŚCI: Tak CS50 to obiekt? HANNAH Blumberg: CS50 jest obiekt w tym przypadku. Teraz, w jaki sposób właściwie dostęp te pola lub zmienić te pola. Na przykład, załóżmy, że zdecydowaliśmy, że chciałeś jeden mniej pset w tym semestrze. Zamiast dziewięciu, jesteśmy po prostu będzie musiał osiem. Jak to zmienić? Och, niewłaściwy sposób. Istnieją dwa sposoby, że możemy to zrobić. Numer jeden jest z kropką Zapis i numer dwa jest w notacji kwadratowego uchwytu. Tak więc, na przykład, jeśli I chciał zmienić lub dostęp pole psets w naszym obiekcie CS50, co bym zrobił to CS50.psets, więc nazwa obiektu kropką nazwa pola lub przycisku. Bardzo podobnie, to jest dokładnie to, równoznaczne zrobić CS50, a następnie w nawiasach kwadratowych, psets. Chłodny? Tak. PUBLICZNOŚCI: Więc to jest JSON technicznie JavaScript nadal, chociaż w psets mamy oddzielenia go [niesłyszalne]? HANNAH Blumberg: Jasne. Więc pytanie brzmi, są JavaScript i JSON odpowiednik? Więc JSON jest zapis, w zasadzie sposób, w jaki możemy napisać obiekt z JavaScript. Więc oni nie są dokładnie takie same. Powiedziałbym JavaScript, istnieje obiekty w JavaScript. JSON bierze te obiekty i drukuje je i wyświetla je lub przechowuje je w miły sposób. Więc nie jest to JSON programowania język sposób, że JavaScript jest. To tylko zapis na nasze obiekty w JavaScript. Tak. PUBLICZNOŚCI: Więc co dokładnie [Niesłyszalne] zakończyć? HANNAH Blumberg: Jasne. Więc to naprawdę nic nie robi. Jest to po prostu sposób, aby uzyskać dostęp. Więc powiedzmy, że chcemy zmienić liczba zestawów problemów z dziewięciu do ośmiu. Co możemy zrobić, to zrobić coś jak CS50.psets = 8 ;. Tak, wielkie pytanie. To jest po prostu pokazać, składni. Faktycznie nie robić nic pożytecznego. Jakiekolwiek pytania? Przesuwanie w prawo wzdłuż. Więc spójrzmy na szybki przykład jak JavaScript działa, bo powiedziałem ci go robi te wszystkie fajne rzeczy i pozwala nam na zmianę stron internetowych. Miejmy rzeczywiście zobaczyć go w akcji. Więc weź, na przykład, plik HTML. I co chcę skupić się na to ten konkretny znak, który znajduje się przycisk o id search_button. To właśnie na tej stronie. Więc teraz zobaczmy, co możemy rzeczywiście zrobić. Cóż, przypuszczam, kiedy Kliknięcie tego przycisku, chcemy dokonać alert-- kliknąłeś przycisk. Zobaczmy, jak możemy to zrobić. Więc window.onload-- nie jest to coś że widziałeś w klasie, więc Nie trzeba znać go do quizu. Ale to w zasadzie mówi, OK, połączenie tej funkcji, gdy ładunki okno. Więc to tylko rodzaj kodu instalacyjnego. Nie martw się tak bardzo o tym. Co chcę skupić się na to tutaj. Mówimy var Searchbutton równa document.getElementById search_button. Tak jak można się domyślać, co to robi, to mówi, OK, znajdź element z ID search_button. A teraz mamy, że właściwy element i jestem będzie przechowywać go w Zmienna Searchbutton. A teraz możemy właściwie wykorzystać ten element i zmienić go lub dostępu do jej wartości, Rzeczy jak te. Możemy zacząć się zaangażować się na stronie internetowej. Więc mówię: OK, teraz, że mam ten przycisk, po jego kliknięciu, Nazywamy to anonimową funkcję. Tak to jest, gdy anonimowy funkcje stają się przydatne. A co robi funkcja zrobić? Cóż, to po prostu nazywa to funkcją ostrzegania i mówi, kliknąłeś przycisk Szukaj. Więc co się stanie, jeśli pójdę tam, gdzie mieszka w tym HTML i kliknij przycisk, Wezmę ochotę trochę alert które mówi, że klikniesz przycisk. Więc rzeczy, aby skupić się na here-- document.getElementById dostaje szczególności HTML element o określonym ID. A teraz możemy ustawić co powinno się zdarzyć, gdy że dany element jest kliknięty. PUBLICZNOŚCI: Musimy umieścić wszystkie, że? HANNAH Blumberg: Słucham? PUBLICZNOŚCI: Czy musimy fizycznie zakodować wszystko to? HANNAH Blumberg: Czy musimy fizycznie zakodować wszystko to? Tak. Czy nie jest to trochę denerwujące? Jest dużo kodu. PUBLICZNOŚCI: Można importować coś. HANNAH Blumberg: Racja. Możemy użyć czegoś. A w szczególności do: och, to mówią mi, że muszę nauczyć sekcji. W szczególności, niech korzystania z biblioteki jQuery, dlatego, że było naprawdę długo i naprawdę denerwujące i chcę, aby być w stanie je uprościć i sprawiają, że krótsze i łatwiejsze do napisania. Więc jQuery jest biblioteką JavaScript. Więc JavaScript jest programowanie język; jQuery jest biblioteką. A to sprawia, że ​​kilka rzeczy łatwiejszych. To sprawia, że ​​zmienia się i dzieje w dokument HTML jest znacznie łatwiejsze. To sprawia, że ​​wydarzenia obsługi łatwiejsze. To sprawia, że ​​animacji łatwiejsze a to sprawia, Ajax łatwiejsze. Warto więc przejść do dwóch te rzeczy w tej chwili. Przepraszam. Zanim to zrobimy, niektóre Podstawowa składnia. To jest to, co najbardziej zwraca się do biblioteki jQuery wyglądać. Używamy tego dolara sign-- śladu połączenia PHP, tylko inconvenient-- nazwa Przełącznik, kropka, a następnie działanie. Zobaczmy więc, niektóre konkretne przykłady, które. Więc to rzeczywiście jest takie samo Kod z zjeżdżalnią zdarzeń. Więc tak długo, brzydkie rzeczy staje się to o wiele ładniejsze, mniejsze rzeczy. Więc spróbujmy podzielenie go. Mówi to, OK, jQuery-- ten dolar sign-- jQuery, znajdź mi okno. Więc to jest przełącznik. Po załadowaniu wywołać tę funkcję. Więc to wszystko w środku. OK. Jak na razie dobrze? W porządku. Teraz, jQuery, znajdź mnie na Rzecz z ID search_button. A co na niego kliknie, wywołać tę funkcję. I wtedy ta funkcja dokładnie taki sam. Wystarczy zrobić trochę ostrzegania, kliknąłeś przycisk Szukaj. Więc to jest naprawdę miłe. To naprawdę skrapla się i upraszcza nasz kod. Skąd wiem, że to ID search_button i nie podoba klasy search_button? PUBLICZNOŚCI: Hashtag? HANNAH Blumberg: Tak. Ten symbol krzyżyka, to tak jak CSS. Więc pamiętaj, CSS, kiedy chciał wybrać coś przez ID, wykorzystano znak funta. I kiedy chcieliśmy, aby wybrać coś na klasy, używamy kropki. Świetny. Mieć sens? Więc jQuery ma po prostu uczynić nasze życie łatwiejszym. Tak. PUBLICZNOŚCI: Więc jestem trochę zdezorientowany do tego, jak działa funkcja anonimowa. Czy można nazwać ten Anonymouse Funkcja, funkcjonować? Jak to się nazywa? HANNAH Blumberg: Jasne. Tak więc funkcja jest tylko słowo kluczowe mówi, jestem o zdefiniować funkcję. PUBLICZNOŚCI: Och, OK. HANNAH Blumberg: OK? A potem przekazać go jako Argument to-- rzućmy ta wewnętrzna jedno- z funkcją click. Więc tak, więc tej funkcji, to anonimowa funkcja, staje się prawdziwym argumentem. Więc pamiętaj w JavaScript, mamy można traktować jako wartości funkcji. PUBLICZNOŚCI: Och, OK. HANNAH Blumberg: Tak. Lubię to "och". Miły. Inne pytania? Czas? MARIA ZLATKOVA: Dobra. Dobry. HANNAH Blumberg: Awesome. Niektóre szybkie przydatne jQuery. Nie zamierzam iść przez wszystkie z nich. Prowadnice zostanie się online, trochę później, więc można sprawdzić to się trochę później. Ale w zasadzie, ogólne wzór posiada w których możemy powiedzieć, OK, hej, jQuery, tu jest mój selekcyjny i to tu jest akcja. I można robić takie rzeczy jak dostęp do Wartość forma, dostęp niektóre HTML, kontrola tego, co się dzieje, gdy użytkownik złoży formularz, takie rzeczy. Tak. PUBLICZNOŚCI: Więc w egzamin, będziemy potrzebować dowiedzieć się sporo od dokumentacja jQuery. Tak więc biorąc pod uwagę, że kopiuj / wklej w jQuery Dokumentacja do naszej ściągawki, gdzie jest linia wyciągnąć? Podobnie jak, ile potrzebujemy wiedzieć? HANNAH Blumberg: Świetne pytanie. Pytanie brzmi zasadniczo skoro Ciebie nie może uzyskać dostęp do dokumentacji jQuery podczas testu, ile należy wiedzieć? Nie można oczekiwać, aby przyjść z jakimś losowym funkcji Oczekujemy, że do Google. Rzeczy, które są uczciwa gra to chciałbym powiedzieć tylko rodzaj ogólnej składni, jest możliwość wyboru przez ID i przez class-- tak jak CSS. A następnie rzeczywiste funkcje samym sobą, będziemy prawdopodobnie powiedzieć. Tak. PUBLICZNOŚCI: Więc kiedy wybrać przez klasy oznaczałoby kropkę. HANNAH Blumberg: Tak, dokładnie. Dobry. Po wybraniu przez klasy, to będzie być kropka zamiast krzyżyka. Tak. PUBLICZNOŚCI: Mógłbyś przejść różnicy między wybraniu przez ID i klasy? HANNAH Blumberg: Jasne. Różnica pomiędzy wybierania ID oraz wybranie przez klasy. Tak jak Maria powiedział Trochę wcześniej, może być tylko jeden element HTML z danym ID, podczas gdy klasie pozwala nam grupy banda różnych elementów razem, więc rzeczy, które są związane, ale nie dokładnie takie same. Czy to odpowiedź na pytanie? Niesamowite. Tak. PUBLICZNOŚCI: Co zrobić, jeśli masz wiele rzeczy, które są w tej samej klasie? HANNAH Blumberg: Co się dzieje jeśli masz wiele rzeczy, które są tej samej klasy? Tak więc, na przykład, gdy jesteśmy tylko przy użyciu czystego JavaScript, chcemy zrobić coś takiego document.getElementsByClass. I co wtedy, że faktycznie robi to zwraca tablicę elementów. I trzeba albo iteracyjnego je lub znaleźć których jeden chcesz. To nie da Ci pojedynczy element. To się daje szereg elementów. Świetne pytanie. Cokolwiek innego? Niesamowite. Więc myślę, że jeśli jesteś zaznajomiony z dowolny jQuery obejrzałeś w pset, powinno być dobrze iść. Pytanie? O nie. Naprawdę muszę nauczyć. Zrelaksować się. Będzie dobrze. Będę tam dostać. Porozmawiajmy o Ajax. Więc Ajax będzie A-- dobrze, zacznijmy od tego, co to oznacza. To skrót. To oznacza Asynchronous JavaScript i XML. I XML jest w zasadzie będzie [Niesłyszalne] w rodzaju naszych danych. Ale nie faktycznie wykorzystane XML. Zamiast tego, po prostu używać JSON. Tak w zasadzie, to niektóre data-- asynchroniczny, JavaScript, oraz dane, w tym przypadku, JSON. A naszym celem, jak wspomniano nieco wcześniej, jest w stanie dokonać wniosek, nie, że wniosek nie jego rzecz, w tło, ale nadal robić co byliśmy zamierza zrobić. I wtedy, gdy informacje te są gotowy, to my go włączyć. Zobaczmy więc, co to faktycznie wygląda. A to, powinno być trochę zna z pset8, ten po prostu zagrał. Więc tu jest ważne jQuery Funkcja, które może Chcesz wiedzieć about-- tym znakiem dolara. Tak mówi funkcji jQuery, .getJSON. A co ta funkcja nie jest to trwa URL i trochę parameters-- więc myślę, że w przypadku z pset8, to było jak, URL był articles.php i Parametry było go = jakiś kod pocztowy. I mówi, OK, może złożyć do ten adres URL z podanymi parametrami. I to właśnie się dzieje. Po jej zakończeniu, to albo zamiar ukończyć czy to się nie uda. Tak więc jest to odpowiednik połączenia Rob i poprosić go, aby coś zrobić. A potem, kiedy oddzwania, jest albo powie skończę i nie udało mi się. Tak więc w przypadku, gdy jesteś zrobione, można powiedzieć, OK, skończę. A następnie wywołać tę funkcję. W tym przypadku, to będzie Funkcja, która ma pewne informacje. Ten, zwykle dbają o to dane, dane, które były faktycznie zwrócone w wyniku dzwoniąc .getJSON. I można coś z tym zrobić. Tak więc w przypadku pset8, my wyświetlane jako listy. Fail będzie funkcją które nazywa się, jeżeli wniosek nie z jakiegokolwiek powodu. I w przypadku pset8, po prostu console.log go. Wszelkie pytania na ten temat? Tak. PUBLICZNOŚCI: Czy możemy po prostu użyć funkcji theta zamiast funkcji, textStatus, jqHXR. HANNAH Blumberg: Jasne. Więc tak, myślę, że w pset, po prostu zobaczył danych funkcji. Więc to tylko the-- tak, OK. To, co widzieliśmy w pset. To jest całkowicie w porządku. Są to tylko jeśli chcesz wyciągnąć więcej informacji, to są rzeczy, które można uzyskać od .getJSON. Dobre pytanie. Cokolwiek innego? Tak. PUBLICZNOŚCI: Tak .getJSON jest Ajax? HANNAH Blumberg: OK. Jest to więc rodzaj skomplikowanej części. Jest to funkcja, która pozwala jQuery można zrobić połączeń asynchronicznych. A te asynchroniczne wywołania, to co my na myśli, jak Ajax. Tak. To zajęło mi bardzo dużo czasu rozerwać, kiedy byłem studentem. PUBLICZNOŚCI: Czy możesz powiedzieć, że jeszcze raz? HANNAH Blumberg: Tak. Mogę powiedzieć, że jeszcze raz? Ta funkcja .getJSON, jest to funkcja jQuery. I to się dzieje, aby asynchroniczne wywołanie. I te asynchroniczne wywołania, mamy odnosił się do tych, jak Ajax. Jakieś inne pytania? Mamy tylko kilka pozostawionych minut. I Maria ma zamiar wrap z bezpieczeństwem a następnie jedziemy do prawie zrobione. MARIA ZLATKOVA: Awesome, OK. Więc to jest-- prostu potrwać kilka sekund patrzeć na to. I nie jest to coś naprawdę super. A może ktoś mi powiedzieć dlaczego? Co dzieje się w foo i może mogłem potencjalnie spowodować coś złego, i co to się nazywa? Tak. PUBLICZNOŚCI: Jeśli argument, że to uchwalona w więcej niż 12 znaków, może przepełnić. MARIA ZLATKOVA: Racja. Doskonały. Jak to jest nazywane? Po prostu o tym wspomniałem. PUBLICZNOŚCI: Przepełnienie bufora. MARIA ZLATKOVA: Tak, buffer overflow. Więc to jest coś, czego patrz jak przepełnienia bufora. I widzimy, że wnętrze foo, mamy zdefiniowane naszego bufora, C, o wielkości 12. Jednak w głównym, nie robimy sprawdź w jakikolwiek sposób w ogóle czy argv1-- tak, że był drugi argument. Nie sprawdzamy, czy Rozmiar tego jest właściwe. Więc jeśli mieliśmy szczególnie szkodliwy użytkownik którzy umieścić w jakimś argumentem, który był dłużej niż 12, a następnie potencjalnie poza granice, które Argument, miał jakiś kod wykonywalny że próbuje zrobić coś złego z tym; to ten, co by się stało, unieważnia powrót adres funkcji foo, powodując funkcji, kiedy powrót do wykonania tego kodu. A potem złych rzeczy może się zdarzyć. Czy to ma sens dla każdego? I jak możemy chronić się przed tym? Jakieś sugestie? Zasadniczo, wewnątrz potencjalnie bla, jak możemy sprawdzić, czy że to nie może się zdarzyć? PUBLICZNOŚCI: Jeśli rozmiar 12 jest przekroczony, będzie można przydzielić więcej pamięci? MARIA ZLATKOVA: Sugestia jest przydzielenie Dodatkowa pamięć o rozmiarze przekroczona. Faktycznie, możemy zrobić coś dużo prostsze niż to, jak również. Możemy po prostu długość ciągu argumentu, że jest wpisany, sprawdzić, czy to jest mniej lub równa 12-- co jest, co chcemy, być, bo nie chcemy to przekracza granice naszego bufora. A jeśli nie, to może pracować z argumentem. A jeśli tak, to rzeczywiście chcą do Yello potencjalnie użytkownika. Ale jest to w jaki sposób to zrobić. Tak. PUBLICZNOŚCI: Mógłbyś wyjaśnić memcpy bardzo szybko? MARIA ZLATKOVA: Oh, przepraszam. Tak. Memcpy trwa co jest-- przykro, OK. Memcpy bierze to, co jest w barze, co jest przekazywane na foo jako argumentu wiersza poleceń. Więc to zajmie argv1. Argv1 nazywa bar tutaj. Więc to zajmie bar i to będzie skopiować go do c. PUBLICZNOŚCI: OK. MARIA ZLATKOVA: I to będzie copy-- trzeci argument po prostu odnosi się na ile to będzie skopiować do c. PUBLICZNOŚCI: Ach. Więc Ten jest kopiowanie wszystko to potem. MARIA ZLATKOVA: Tak, to kopiując wszystko. Tak. Po pierwsze, upewnij się, że bar nie jest równa null, ponieważ jest to wskaźnik. Następnie otrzymujemy ciąg długości paska. Dbamy o to, że jest to mniejsze niż lub równe do 12. A potem, ponieważ mamy upewnić się, możemy w rzeczywistości memcpy i mieć pewność, że to jest OK. Jakiekolwiek pytania? Świetny. Mam dwóch prawdziwych lub fałszywych pytania. Może ktoś mi powiedzieć od razu czy są one prawdziwe czy fałszywe? Tak, to jest fałszywe. Dokładnie. Obie z nich są fałszywe. Tak więc za pomocą pojedynczego hasła nigdy nie jest naprawdę dobry pomysł bo jeśli ktoś wie Twoje hasło, mogą po prostu dostęp do wszystkich innych kont. A następnie ikony zrobić nic w celu zapewnienia bezpieczeństwa. Zazwyczaj powinniśmy szukać HTTPS Zamiast HTTP a URL. I niektóre inne rodzaje Ataki, które już wspomnieliśmy, Dawid wspomniał w wykład, ataki SQL injection. Widzieliśmy już, że jeśli don't-- Funkcja zapytania CS50 zapewnia, że ​​SQL ataki wtrysku nie może wystąpić. Ale jeśli nie używali CS50, cytat, koniec cytatu "w kwerendzie" trzeba by upewnić się, że Wejście użytkownik nie jest w rzeczywistości niektóre SQL zapytań, które będą powodować wszystkie nasze stoły są porzucane lub coś złego stanie z naszej bazy danych. Sesja porwanie jest inny rodzaj ataku że dzieje się, gdy złe osoba korzysta z sesji jakiegoś ofiary ID, aby uzyskać dostęp do informacji logowania. Tak bardzo trywialne przykładem jest jak, jeśli mamy z publicznego komputera, to złe osoba loguje się, a następnie mają cookie, które są zapisane. I ciasteczka nie zmieniają się na sesji. Wtedy jesteśmy ofiarą iść a następnie zalogować się na stronie. Ciasteczka nie zmieniają dla danej sesji. A potem ofiara loguje się na stronie internetowej, a następnie odchodzi. I wtedy osoba, która sięga może wówczas nadal korzystać z ich ID sesji aby uzyskać dostęp do swoich danych. Więc to jest jeden z przykładów Jak to się mogło stać. I wtedy nie będę się zbytnio o określonym kodzie lub cokolwiek tak, że może spowodować to, ale o jakiś pomysł, co zmienne są zaangażowane w to. A potem manipulowanie nagłówek Dane inny rodzaj ataku że ma Dawid mówił o. A to po prostu odnosi się do co może się zdarzyć, gdy odpowiedź, HTTP Odpowiedź wewnątrz naszego nagłówka nie jest odkażane prawidłowo. I każdy z fields-- na przykład, Jeśli ktoś zastąpienie jednego nagłówka Wartości zawierają nic poza co powinni contain-- i faktycznie zawierać, na przykład, 200 OK, kod stanu, potem potencjalnie może zrobić złośliwy rzeczy, gdy nie mają. Ale nie przejmuj się wiele o określonym kodzie które mogą powodować, właśnie rodzaj zrozumienia wysokiego szczebla takie rzeczy. Myślę, że to wszystko jest że mamy do pokrycia. Niesamowity. Ktoś ma jakieś pytania na temat dowolny z rzeczy, które pokryte? Tak. PUBLICZNOŚCI: Więc jeden rodzaj Więcej pytanie logistyczne. Czy treść jest głównie koncentruje na rzeczy, po quizie 1? MARIA ZLATKOVA: Tak Pytanie brzmi, jest zawartość koncentruje się głównie na rzeczy po quizie 1? Tak koncentruje się na po Test 1, z wyjątkiem że musimy skupić się na rzeczy, w pset5 i wiele struktur danych że objęte. I nie możemy powiedzieć, że można pominąć niczego przed że dlatego, że opiera się na nim również. Tak więc skupić się na tym, a także materiały pset5 jak w tym związane listy, stosy, kolejki i wszystko że Hannah podszedł. HANNAH Blumberg: Racja. Tak, poszliśmy nad całą C rzeczy na samym początku bardzo szybko. Ale upewnij recenzję tego. Wróć i oglądać recenzję Quiz 0. Kilka notki więcej logistyczne, tylko, gdy mamy swoją uwagę. Będziemy mieć dyżury zarówno w poniedziałek i wtorek w nocy. Oni będzie w MD 119. Wszystko to jest na stronie, tak jeśli nie słyszę, nie ma obaw. MARIA ZLATKOVA: 08:30 do 11:00. HANNAH Blumberg: Tak, 8:30 do 11:00. Będziemy tam. Będziemy tam, aby odpowiedzieć na pytania. To całkiem zimny i zabawy. Możecie zadać pytanie że masz na quizie 1. A Quiz 1 jest Środa, więc powodzenia. Jeśli masz jakieś pytania, może przyszedł porozmawiać z nas tu jeden-na-jeden. Chłodny. Dziękuję bardzo. MARIA ZLATKOVA: Wielkie dzięki, chłopaki. PUBLICZNOŚCI: Strzelec. [OKLASKI]