1 00:00:00,000 --> 00:00:12,040 >> [MUZYKA GRA] 2 00:00:12,040 --> 00:00:16,460 >> Głośnik 1: W porządku, to jest CS50, i jest rozpoczęcie od czwartego tygodnia 3 00:00:16,460 --> 00:00:20,420 i jak może słyszeliście lub przeczytać, że świat został kończąc. 4 00:00:20,420 --> 00:00:23,520 Dzieje na całym internecie został wiedzy i świadomości 5 00:00:23,520 --> 00:00:27,100 błędu w programie, a język programowania zwany Bash. 6 00:00:27,100 --> 00:00:32,729 Ten został cudownie markowe jak Shellshock lub drzwi Bash, 7 00:00:32,729 --> 00:00:35,485 ale jak te artykuły nie były rzadkością. 8 00:00:35,485 --> 00:00:38,807 I rzeczywiście, wiele z nich przyniesie wspomnienia Heartbleed, 9 00:00:38,807 --> 00:00:41,640 które można zauważyć w wcisnąć z powrotem w ostatni wiosny, które 10 00:00:41,640 --> 00:00:43,980 było podobnie dość dramatyczne. 11 00:00:43,980 --> 00:00:47,110 Teraz z tych z was tutaj dzisiaj, jak wielu z was, 12 00:00:47,110 --> 00:00:50,330 nawet jeśli nie rozumiem, co w tym wszystkim chodzi, słyszałem Shellshock? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Wszystko w porządku, i jak wielu z was mają komputery, które są narażone? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 OK, nie powinno być dużo, dużo więcej rąk się w tej chwili, ze względu na to zobaczymy. 17 00:01:00,250 --> 00:01:02,580 >> Rzućmy okiem na to, co jest dzieje się w mediach 18 00:01:02,580 --> 00:01:05,304 a następnie wyjaśnić to trochę tutaj dla nas technicznie. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> Głośnik 2: Eksperci mają ostrzegł, że poważna wada może 21 00:01:11,250 --> 00:01:15,650 około wpływać setki miliony użytkowników na świecie sieci web. 22 00:01:15,650 --> 00:01:20,600 Więc co dokładnie jest błąd, który był nazwany ShellShock i co to robi? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Cóż, ShellShock jest również znany jako Bash błąd, oprogramowanie to wykorzystuje. 25 00:01:28,910 --> 00:01:33,230 Hakerzy wykorzystują wirusa skanowanie podatne Systemy działające Linux i UNIX 26 00:01:33,230 --> 00:01:36,300 systemów operacyjnych, a następnie infekują je. 27 00:01:36,300 --> 00:01:38,730 Bash jest powłoką linii poleceń. 28 00:01:38,730 --> 00:01:43,460 Kwestia ta pozwala użytkownikom na polecenia uruchomienia Programy i funkcje oprogramowania 29 00:01:43,460 --> 00:01:45,250 wpisując w tekście. 30 00:01:45,250 --> 00:01:49,980 To zazwyczaj używane przez programistów, a nie powinien być otwarty na świat, 31 00:01:49,980 --> 00:01:51,590 choć ShellShock zmienia to. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Cóż, worringly, niektórzy analitycy ostrzegam to może być większym zagrożeniem, 34 00:01:57,910 --> 00:02:01,580 bo ShellShock umożliwia kompletne kontroli nad zainfekowanym komputerem, 35 00:02:01,580 --> 00:02:06,030 natomiast Heartbleed tylko dozwolone hakerzy szpiegować komputery. 36 00:02:06,030 --> 00:02:09,130 To jest tak poważna, że ​​to zostały ocenione na 10 z 10 37 00:02:09,130 --> 00:02:11,900 do nasilenia przez Narodowy Vulnerability Database. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 z wszystkich serwerów internetowych są ryzyka, w tym niektórych komputerach Mac. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Cóż, upewnij się, że łatać swoje systemy teraz. 42 00:02:25,600 --> 00:02:29,330 Każdy, kto organizuje funkcjonowanie strony internetowej przez system 43 00:02:29,330 --> 00:02:31,800 powinny podjąć działania jak najszybciej. 44 00:02:31,800 --> 00:02:35,390 Każdy, kto może sobie pozwolić na to powinno wyglądać ich stosowania monitoringu i internetowej 45 00:02:35,390 --> 00:02:37,355 zapory, aby zwrócić uwagę na wszelkie ataki. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 GŁOŚNIK 3: Najgorsze że może się zdarzyć, 48 00:02:41,770 --> 00:02:45,080 że ktoś mógłby napisać kod, który automatycznie go i skanować 49 00:02:45,080 --> 00:02:48,280 Internet i wpłynęłoby Wszystkie z tych komputerów. 50 00:02:48,280 --> 00:02:50,710 A raz tak, że dobrze, Najgorsze, co mogą zrobić, 51 00:02:50,710 --> 00:02:53,300 jest po prostu usunąć wszystko, lub zamknij miejsc w dół. 52 00:02:53,300 --> 00:02:55,360 Więc mogliśmy zobaczyć obrażenia z tego punktu widzenia, 53 00:02:55,360 --> 00:02:58,300 gdzie mamy złośliwych ludzi którzy po prostu decydują się spowodować chaos 54 00:02:58,300 --> 00:03:02,534 przez systemy obniżania lub usuwanie pliki i takie rzeczy. 55 00:03:02,534 --> 00:03:05,200 Głośnik 2: Niektórzy mówią, że jest to jeden z najbardziej trudne do zmierzenia 56 00:03:05,200 --> 00:03:08,080 błędy w latach, i to może potrwać kilka tygodni lub nawet 57 00:03:08,080 --> 00:03:10,820 miesięcy, aby określić jego ostateczny wpływ. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> Głośnik 1: Więc to wszystko jest prawdą, ale zabawne jest to, prawie wszystkie 60 00:03:15,560 --> 00:03:18,330 z obrazami po prostu zobaczył, z wyjątkiem być może klawiatury 61 00:03:18,330 --> 00:03:20,930 nie ma nic wspólnego z bug w ogóle. 62 00:03:20,930 --> 00:03:23,960 Serwery i przewody i tak dalej, To coś w rodzaju stycznie związanych, 63 00:03:23,960 --> 00:03:27,410 ale w centrum jest to faktycznie dość znać, co się tutaj dzieje. 64 00:03:27,410 --> 00:03:30,050 W rzeczywistości, pozwól mi pójść do nasze urządzenie CS50. 65 00:03:30,050 --> 00:03:32,910 Pozwólcie mi iść do przodu i zwiększyć okno terminalu tutaj. 66 00:03:32,910 --> 00:03:36,020 A wy zostały z wykorzystaniem tego, lub jego wersję wbudowanego, 67 00:03:36,020 --> 00:03:39,460 w gedit, aby pisać programy, typu polecenia, i tak dalej, 68 00:03:39,460 --> 00:03:43,690 , a w rzeczywistości jest to, ma było na tydzień, Bash, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 To Bourne-Again shell, który jest tylko fantazyjny sposób na powiedzenie, 70 00:03:46,890 --> 00:03:50,220 to program, który jest miganie szybkie, skuteczne, 71 00:03:50,220 --> 00:03:51,970 że siedzi tam czeka dla wejścia dla Ciebie. 72 00:03:51,970 --> 00:03:53,920 I to jest polecenie Interfejs wiersza, za pomocą którego 73 00:03:53,920 --> 00:03:57,650 wy zostały uruchomione polecenia i ostatecznie kompilacji i uruchamiania 74 00:03:57,650 --> 00:03:58,400 programy. 75 00:03:58,400 --> 00:04:01,320 >> Ale Bash jest także programowanie Język w następującym znaczeniu. 76 00:04:01,320 --> 00:04:05,460 Wiesz, że istnieją komendy, takie jak cd i ls oraz brzękiem i inni, 77 00:04:05,460 --> 00:04:09,580 ale można definiować własne komendy wdrażając je w bash. 78 00:04:09,580 --> 00:04:11,420 Teraz nie będziemy bardzo szczegółowe 79 00:04:11,420 --> 00:04:16,089 jak bash język programowania, ale wiadomo, na przykład, że w tym momencie, 80 00:04:16,089 --> 00:04:17,607 nie ma polecenia o nazwie "cześć". 81 00:04:17,607 --> 00:04:19,440 Więc można je znaleźć w jeden z tych pakietów. 82 00:04:19,440 --> 00:04:20,856 To nie jest zainstalowany na moim komputerze. 83 00:04:20,856 --> 00:04:21,870 Zapytaj administratora. 84 00:04:21,870 --> 00:04:26,030 Ale jeśli chcę tam być program zwany "cześć" w bash lub w moim wierszu, 85 00:04:26,030 --> 00:04:30,810 Faktycznie mogę użyć składni to zupełnie jak C. To nie jest to samo, 86 00:04:30,810 --> 00:04:35,020 ale wygląda bardzo podobne do funkcja, choć brakuje kilku szczegółów. 87 00:04:35,020 --> 00:04:38,090 Nic się nie dzieje, ale teraz, jeśli napiszę "witam" 88 00:04:38,090 --> 00:04:40,960 rzeczywiście można napisać Program, a nie w C, a nie w Javie, 89 00:04:40,960 --> 00:04:44,280 nie w innym programowania język, ale w samej Bash. 90 00:04:44,280 --> 00:04:47,630 >> Teraz kluczem jest to, że napisałem wymienić chciałem dać to nowe polecenie, 91 00:04:47,630 --> 00:04:50,820 i nawiasy są również symbolem tego jest funkcja. 92 00:04:50,820 --> 00:04:54,010 Tak na marginesie, można też zrobić zabawy rzeczy, w rzeczywistości, nawet w systemie Mac OS, 93 00:04:54,010 --> 00:04:55,620 to jest program o nazwie Terminal. 94 00:04:55,620 --> 00:04:58,800 Chodzi ktoś jest wbudowany w Komputer, który ma Mac w tym pokoju, 95 00:04:58,800 --> 00:05:03,640 i można zrobić podobnych rzeczy w Mac OS, ale można przejść więcej poza tym. 96 00:05:03,640 --> 00:05:07,110 I to jest trochę styczna, ale jest to rodzaj zabawy. 97 00:05:07,110 --> 00:05:09,715 Przypomniał mi dziś rano, kiedy myśli to przez, 98 00:05:09,715 --> 00:05:13,279 mały gry grałem z jednym z byłych TF CS50 za 99 00:05:13,279 --> 00:05:16,570 przy czym za każdym razem chciał odejść od Jego klawiatura z jego ekranie odblokowane, 100 00:05:16,570 --> 00:05:23,611 Chciałbym wykonać polecenie jak to-- "przywitać". 101 00:05:23,611 --> 00:05:26,610 I teraz za każdym razem wracał do jego Klawiatura po I wyczyszczone ekranu 102 00:05:26,610 --> 00:05:27,985 i chciał usiąść, spróbuj popracować, 103 00:05:27,985 --> 00:05:29,250 wyświetlić zawartość jego directory-- 104 00:05:29,250 --> 00:05:29,510 >> [AUDIO ODTWARZANIE] 105 00:05:29,510 --> 00:05:30,010 >> Halo. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 Witaj. 108 00:05:32,120 --> 00:05:35,030 >> 1 głośnik: Tak, w sprawiedliwości, nie było w rzeczywistości "cześć". 109 00:05:35,030 --> 00:05:36,894 To było coś, co zwykle bardziej podobny do that-- 110 00:05:36,894 --> 00:05:37,560 [AUDIO ODTWARZANIE] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 Głośnik 1: czyli regulują I would-- byłoby więc jego komputer 113 00:05:39,320 --> 00:05:42,170 Przysięgam na niego w każdej chwili, że faktycznie usiadła na jego klawiaturze. 114 00:05:42,170 --> 00:05:46,265 I bardzo szybko zorientowali się, że aby nie pozostawić jego ekran odblokowany. 115 00:05:46,265 --> 00:05:48,730 Ale to sugeruje rodzaj głupie zabawy, że ci 116 00:05:48,730 --> 00:05:50,210 może mieć coś jak bash. 117 00:05:50,210 --> 00:05:52,770 Ale to jest trochę więcej poważne, aby upewnić się, niż to. 118 00:05:52,770 --> 00:05:57,235 I w rzeczywistości jest to jeden z Najbardziej niebezpieczne i długotrwałe błędy 119 00:05:57,235 --> 00:05:58,860 że naprawdę hit świat globalnie. 120 00:05:58,860 --> 00:06:02,060 Ten błąd jest już przez około 20 lat, 121 00:06:02,060 --> 00:06:05,780 i będziesz po prostu uderzył w Moment jego względnej prostoty. 122 00:06:05,780 --> 00:06:07,990 >> Więc to jest przedstawiciel dowodzić, że jeśli 123 00:06:07,990 --> 00:06:10,448 właścicielem Mac, teraz dosłownie jeśli masz swój pokrywa otwarta, 124 00:06:10,448 --> 00:06:12,940 można spróbować wpisując w które Program o nazwie Terminal. 125 00:06:12,940 --> 00:06:15,410 Terminal znajduje się pod Aplikacje Utilities-- 126 00:06:15,410 --> 00:06:18,790 raz, użytkownicy systemu Windows nie trzeba martwić się o tego konkretnego threat-- 127 00:06:18,790 --> 00:06:22,310 ale ci z was, z komputerami Mac można wpisać to w oknie jak zrobię tutaj, 128 00:06:22,310 --> 00:06:24,210 i jeśli nie wpisz że do tego programu 129 00:06:24,210 --> 00:06:28,830 nazwie Terminal, jak zrobię teraz, jeśli widzisz słowo "narażone" 130 00:06:28,830 --> 00:06:32,200 komputer jest podatne na eksploatację. 131 00:06:32,200 --> 00:06:33,850 >> Teraz co to właściwie znaczy? 132 00:06:33,850 --> 00:06:35,870 I to jest prawda niektóre całkiem szalony składnia, 133 00:06:35,870 --> 00:06:39,050 ale niech przynajmniej wyciągnąć niektóre z interesujących aspektów. 134 00:06:39,050 --> 00:06:42,567 Więc jest jakiś, który wygląda składnia mało znane, co najmniej od C 135 00:06:42,567 --> 00:06:43,950 i programowania bardziej ogólnie. 136 00:06:43,950 --> 00:06:47,550 Widzę kilka nawiasów, średniki, nawiasy klamrowe i takie, 137 00:06:47,550 --> 00:06:50,820 ale okazuje się, że to głupota tutaj na żółto 138 00:06:50,820 --> 00:06:53,580 jest zasadniczo funkcją że nic nie robi. 139 00:06:53,580 --> 00:06:57,840 Środki okrężnicy nic nie robić, a średnik oznacza przestać robić nic. 140 00:06:57,840 --> 00:07:00,250 Więc wewnątrz nich nawiasy klamrowe, fakt 141 00:07:00,250 --> 00:07:02,440 że mam równe zaloguj się w lewo, to 142 00:07:02,440 --> 00:07:05,500 jest zasadniczo stworzenie Polecenie albo zmienna 143 00:07:05,500 --> 00:07:09,520 nazwie x, i przypisywanie że żółty fragment kodu nie. 144 00:07:09,520 --> 00:07:14,040 To może być coś w stylu "echo hello "lub" mówią sygnał "czy coś 145 00:07:14,040 --> 00:07:15,120 podobny do tego. 146 00:07:15,120 --> 00:07:17,780 Nie zauważyć, jeśli twoje oczy dalej wędrować w prawo 147 00:07:17,780 --> 00:07:22,150 nie więcej niż do tej linii tylko koniec tej średnikiem. 148 00:07:22,150 --> 00:07:25,160 "Echo wrażliwe", a następnie poza tym jest jeszcze więcej. 149 00:07:25,160 --> 00:07:26,530 Innym średnik, bash-c :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Więc krótko mówiąc, ta linia kodu jest 152 00:07:34,050 --> 00:07:36,660 wystarczające do zmuszenia Komputer, który jest 153 00:07:36,660 --> 00:07:39,830 narażone na robienie czegoś , że chcesz to zrobić, 154 00:07:39,830 --> 00:07:44,290 bo jest błąd w bash, zgodnie z którą chociaż Bash miał zatrzymać 155 00:07:44,290 --> 00:07:48,980 czytanie wierszy prawo polecenia tam po żółtym tekstem, 156 00:07:48,980 --> 00:07:52,520 dla 20-plus-letniego buga, Bash był faktycznie czytanie 157 00:07:52,520 --> 00:07:56,780 poza tym średnikiem i ładna dużo robi to, co jej powiedział. 158 00:07:56,780 --> 00:07:59,070 >> Więc co jest implikacja Z tego ostatecznie? 159 00:07:59,070 --> 00:08:01,340 Powiedziałem tylko "echo Witaj" lub "echo wrażliwe" 160 00:08:01,340 --> 00:08:05,449 Ale co, jeśli zrobił coś faktycznie złośliwy, jak rmdir *, 161 00:08:05,449 --> 00:08:07,240 które może nie kiedykolwiek wpisane wcześniej, 162 00:08:07,240 --> 00:08:08,920 i szczerze mówiąc, prawdopodobnie nie powinny zbyt szybko, 163 00:08:08,920 --> 00:08:10,700 bo można zrobić Wiele szkód z niego. 164 00:08:10,700 --> 00:08:11,210 Dlaczego? 165 00:08:11,210 --> 00:08:12,990 rm co robi, oczywiście? 166 00:08:12,990 --> 00:08:14,270 Usuwa. 167 00:08:14,270 --> 00:08:15,930 * Oznacza co? 168 00:08:15,930 --> 00:08:16,430 Wszystko. 169 00:08:16,430 --> 00:08:18,180 Więc to tak zwany dzikie karty, więc oznacza to, 170 00:08:18,180 --> 00:08:20,410 usunąć wszystko aktualny katalog. 171 00:08:20,410 --> 00:08:23,379 -r dzieje oznacza rekurencyjne, co oznacza, że ​​jeśli to, czego usuwanie 172 00:08:23,379 --> 00:08:26,420 jest katalogiem, a wewnątrz nie jest inne pliki i inne katalogi, 173 00:08:26,420 --> 00:08:28,950 rekurencyjnie zanurzyć się tam i usuń wszystko. 174 00:08:28,950 --> 00:08:31,040 A-f jest najgorszy z nich wszystkich. 175 00:08:31,040 --> 00:08:32,580 Ktoś wie co -f oznacza tutaj? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Siła. 178 00:08:34,360 --> 00:08:37,830 Tak więc siłę środka, nawet jeśli jest to zły pomysł, 179 00:08:37,830 --> 00:08:40,939 zrobić bez pytania mnie do dalszego potwierdzenia. 180 00:08:40,939 --> 00:08:43,230 Więc, wiesz, że śmiać się , ale szczerze mówiąc, prawdopodobnie 181 00:08:43,230 --> 00:08:44,972 wpisz to wiele razy dzień, ponieważ rzeczywistości 182 00:08:44,972 --> 00:08:47,210 Jest to najszybszy sposób na usunąć całą masę rzeczy. 183 00:08:47,210 --> 00:08:48,590 Ale nawet zrobiłem trochę szkód. 184 00:08:48,590 --> 00:08:53,100 >> Ale jeśli było oszukać komputer do definiowania trochę zmienną głupiego 185 00:08:53,100 --> 00:08:56,810 lub funkcję x, a następnie oszukiwanie komputera do wykonywania 186 00:08:56,810 --> 00:09:00,030 poza granice, które funkcja, poza tym średnikiem, 187 00:09:00,030 --> 00:09:04,430 Rzeczywiście można oszukać komputer do wykonania coś rm -rf 188 00:09:04,430 --> 00:09:07,810 E-mail lub polecenie lub polecenie Kopiuj. 189 00:09:07,810 --> 00:09:11,400 Wszystko, co dosłownie można zrobić z komputer, czy to usuwanie plików, 190 00:09:11,400 --> 00:09:15,350 tworzenia plików, spamuje kogoś, atakuje jakiś serwer zdalnie, 191 00:09:15,350 --> 00:09:17,190 jeśli można to wyrazić z poleceniem, można 192 00:09:17,190 --> 00:09:19,120 Można oszukać komputer do robienia tego. 193 00:09:19,120 --> 00:09:21,510 >> Teraz to, co jest przykładem w jaki sposób można to zrobić? 194 00:09:21,510 --> 00:09:24,300 Cóż, jest wiele komputerów na Bash Internet bieżącą. 195 00:09:24,300 --> 00:09:26,390 Nas wszystkich użytkowników komputerów Mac są wśród nich. 196 00:09:26,390 --> 00:09:30,390 Wiele serwerów Linux należą im, jak również i Unix. 197 00:09:30,390 --> 00:09:32,630 System Windows ponownie dostaje stosunkowo od haka 198 00:09:32,630 --> 00:09:34,590 chyba że masz zainstalowany specjalne oprogramowanie. 199 00:09:34,590 --> 00:09:37,130 Teraz wiele serwerów, na instancji, działają serwery WWW, 200 00:09:37,130 --> 00:09:39,840 i faktycznie Linux jest chyba najpopularniejszy system operacyjny 201 00:09:39,840 --> 00:09:43,060 uruchomić na komputerach w internecie które służą do stron internetowych. 202 00:09:43,060 --> 00:09:44,910 Teraz, jak zobaczymy później w semestrze, gdy 203 00:09:44,910 --> 00:09:48,470 wysłać wniosek Twój browser-- Chrome 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- do zdalnego serwera, 205 00:09:50,790 --> 00:09:53,730 Okazuje się, że nawet jeśli po prostu wpisane www.example.com, 206 00:09:53,730 --> 00:09:59,590 Twoja przeglądarka wysyła wiadomość to jest trochę bardziej ezoteryczne, jak ten. 207 00:09:59,590 --> 00:10:01,239 >> Ale zauważysz coś dziwnego. 208 00:10:01,239 --> 00:10:03,030 Pierwsze dwie linie Nigdy nie widziałem wcześniej, 209 00:10:03,030 --> 00:10:04,904 ale nie wyglądają szczególnie groźne. 210 00:10:04,904 --> 00:10:08,030 Ale zauważ, co ukradli dla trzeciej linii tutaj. 211 00:10:08,030 --> 00:10:13,390 Jeśli zły był, aby wysłać wiadomość tak od swojego komputera 212 00:10:13,390 --> 00:10:17,270 do trudnej Mac lub podatny serwer Linux, 213 00:10:17,270 --> 00:10:21,580 Zabawne jest to, że Bash, że prosta szybka trochę poleceń, 214 00:10:21,580 --> 00:10:27,450 jest wszechobecny i jest często używane na zasadzie wykonywania 215 00:10:27,450 --> 00:10:30,020 Zawartość wiadomość, że odbiera. 216 00:10:30,020 --> 00:10:33,490 I przez tę logikę, można oszukać serwer WWW, w związku z tym, 217 00:10:33,490 --> 00:10:36,370 wysyłając coś User-Agent, który zazwyczaj 218 00:10:36,370 --> 00:10:38,300 ma do powiedzenia Nazwa Twojej przeglądarce. 219 00:10:38,300 --> 00:10:42,420 User-Agent Chrome, Internet User-Agent Explorer, Firefox User-Agent, w tym 220 00:10:42,420 --> 00:10:44,590 jest tylko w Twojej przeglądarce Sposób identyfikowania się. 221 00:10:44,590 --> 00:10:46,605 Ale jeśli facet bardzo zły sprytnie mówi, mm-mm, jestem 222 00:10:46,605 --> 00:10:47,930 Nie powiem ci, co moja przeglądarka jest, 223 00:10:47,930 --> 00:10:50,888 Ja zamiast zamiar wysłać ci to tajemniczo wyglądające rzeczy z -rf rm 224 00:10:50,888 --> 00:10:55,840 * W nim można dosłownie oszukać podatny serwer WWW w Internecie 225 00:10:55,840 --> 00:10:59,055 do wykonywania dokładnie, że w tam na usunięcie wszystkich plików. 226 00:10:59,055 --> 00:11:00,930 I szczerze mówiąc, to nie jest nawet najgorsze. 227 00:11:00,930 --> 00:11:01,763 Możesz zrobić wszystko. 228 00:11:01,763 --> 00:11:04,480 Można zacząć dystrybuowane atak Denial of Service 229 00:11:04,480 --> 00:11:07,030 jeśli wysłał tę wiadomość całe kiście serwerów internetowych 230 00:11:07,030 --> 00:11:10,256 a następnie miał je wszystkie schodzą na instancji, na serwerach Harvard.edu, 231 00:11:10,256 --> 00:11:12,130 i można sortować z hukiem do cholery z nimi 232 00:11:12,130 --> 00:11:15,490 przez ruch w sieci, który był inaczej wywołane tym złym facetem. 233 00:11:15,490 --> 00:11:18,760 >> Więc, krótko mówiąc, niemal wszyscy w tym pokoju, który jest właścicielem komputera Mac 234 00:11:18,760 --> 00:11:20,240 jest podatny na to. 235 00:11:20,240 --> 00:11:24,100 Wyszło, że chyba jesteś uruchomiony serwer WWW na komputerze przenośnym, 236 00:11:24,100 --> 00:11:27,780 i chyba już właściwie skonfigurowane to, aby umożliwić coś SSH do niego, 237 00:11:27,780 --> 00:11:28,670 jesteś rzeczywiście bezpieczne. 238 00:11:28,670 --> 00:11:31,710 To wrażliwe, ale nie ma nic jeden próbuje dostać się do laptopa, 239 00:11:31,710 --> 00:11:33,290 , dzięki czemu można mieć pewność, rodzaj. 240 00:11:33,290 --> 00:11:36,210 Jednak, Apple wkrótce być aktualizacją poprawkę dla tego produktu. 241 00:11:36,210 --> 00:11:39,660 Świat Linuksa już wydany liczba poprawek dla Fedory i Ubuntu 242 00:11:39,660 --> 00:11:43,790 i inne wersje Linuksa, a nawet po uruchomieniu aktualizacji 50 w urządzeniu, 243 00:11:43,790 --> 00:11:45,930 nawet, że zbyt będzie zaktualizowane i poprawione. 244 00:11:45,930 --> 00:11:47,764 Ale to też nie ma naprawdę był podatny, 245 00:11:47,764 --> 00:11:49,804 bo chyba masz majstrował urządzenia 246 00:11:49,804 --> 00:11:52,770 i wykonany publicznie laptopa dostępne w Internecie, które nie jest 247 00:11:52,770 --> 00:11:54,910 domyślnie masz rzeczywiście było w porządku, bo 248 00:11:54,910 --> 00:11:56,890 z firewalla i innych technik. 249 00:11:56,890 --> 00:12:01,000 >> Ale to skrajny przykład z błędem że mamy do mieszka dosłownie 20 250 00:12:01,000 --> 00:12:04,050 lat, a kto wie, czy ktoś przez cały ten czas jest o niej wiadomo? 251 00:12:04,050 --> 00:12:06,300 I w rzeczywistości jest to jeden z podstawowe wyzwania 252 00:12:06,300 --> 00:12:08,690 że zobaczymy później w Semestr o bezpieczeństwo, 253 00:12:08,690 --> 00:12:13,020 jest to, że tak jak w świecie rzeczywistym, dobrzy są w gorszej sytuacji. 254 00:12:13,020 --> 00:12:16,500 Zachować złych facetów, musimy upewnić się, że wszystkie drzwi są zamknięte, 255 00:12:16,500 --> 00:12:20,340 że każde okno jest bezpieczne, że każdy punkt wejścia do domu 256 00:12:20,340 --> 00:12:21,980 jest bezpieczne utrzymanie złych facetów. 257 00:12:21,980 --> 00:12:26,870 Ale to, co robi źle facet musiał zrobić, aby rzeczywiście zagrozić domu 258 00:12:26,870 --> 00:12:28,200 i ukraść od Ciebie? 259 00:12:28,200 --> 00:12:32,574 On lub ona po prostu musi znaleźć odblokowany drzwi, jedno okno przerwane, czy coś 260 00:12:32,574 --> 00:12:35,240 w tym kierunku, i to samo w dziedzinie bezpieczeństwa komputerowego. 261 00:12:35,240 --> 00:12:37,660 Możemy napisać miliony linii kodu programowania 262 00:12:37,660 --> 00:12:40,570 i wydawać setki lub tysiące godzin próbuje uzyskać to prawidłowe, 263 00:12:40,570 --> 00:12:43,370 ale jeśli tylko jeden błąd w poprawność, 264 00:12:43,370 --> 00:12:47,030 można umieścić cały system i Rzeczywiście w tym przypadku, cały Internet 265 00:12:47,030 --> 00:12:48,660 i świat na ryzyko. 266 00:12:48,660 --> 00:12:51,950 >> Tak więc, jeśli chcesz dowiedzieć się więcej na ten temat, przejdź do tej zawartości tutaj. 267 00:12:51,950 --> 00:12:54,450 Nie ma potrzeby do akcji dzisiaj, chyba że jesteś 268 00:12:54,450 --> 00:12:57,116 wśród tych bardziej komfortowe, że prowadzimy własnej sieci 269 00:12:57,116 --> 00:12:59,810 serwer, w którym to przypadku należy, w rzeczywistości, zaktualizować oprogramowanie. 270 00:12:59,810 --> 00:13:03,244 >> I to też jest tytuł mowy, a teraz papier, 271 00:13:03,244 --> 00:13:05,410 że mamy związane na strona Kursu na dziś. 272 00:13:05,410 --> 00:13:07,600 To było przez kolegów nazwie Ken Thompson, który 273 00:13:07,600 --> 00:13:10,120 przyjmowała bardzo znany Nagroda w dziedzinie informatyki, 274 00:13:10,120 --> 00:13:13,495 i dał to przemówienie kilka lat temu, w zasadzie na tym samym temacie. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Prosząc ludzi pytanie, Należy naprawdę 277 00:13:20,520 --> 00:13:23,480 Zaufanie, ostatecznie, oprogramowanie, które już zostały podane? 278 00:13:23,480 --> 00:13:26,100 Na przykład, wszyscy mamy pisze programy, 279 00:13:26,100 --> 00:13:27,820 i byliśmy kompilacji je z Clang. 280 00:13:27,820 --> 00:13:31,830 I wiedzy, napisałeś wszelkie programy CS50, gdzie istnieje 281 00:13:31,830 --> 00:13:35,310 Tylne drzwi z rodzaju, istnieje sposób, że zły facet, czy uruchomić program, 282 00:13:35,310 --> 00:13:37,410 może przejąć kontrolę nad komputerem? 283 00:13:37,410 --> 00:13:38,310 Chyba nie, prawda? 284 00:13:38,310 --> 00:13:40,180 Mario i chciwi, i kredytowa. 285 00:13:40,180 --> 00:13:41,680 To wszystko są bardzo małe programy. 286 00:13:41,680 --> 00:13:43,910 Trzeba być dość źle, jeśli rzeczywiście 287 00:13:43,910 --> 00:13:47,310 wykonany cały komputer podatny po napisaniu 10 lub 20 linii kodu, 288 00:13:47,310 --> 00:13:49,690 lub co najmniej niektóre nieświadomy implikacji bezpieczeństwa. 289 00:13:49,690 --> 00:13:52,023 Teraz mogę powiedzieć, że żartobliwie, ale mamy zamiar zobaczyć już dziś 290 00:13:52,023 --> 00:13:54,600 i w tym tygodniu to faktycznie bardzo, bardzo łatwe 291 00:13:54,600 --> 00:13:57,980 być źle i zrobić nawet krótkie programy narażone. 292 00:13:57,980 --> 00:14:02,880 >> Ale teraz przynajmniej sobie że pytanie zadawane jest tutaj 293 00:14:02,880 --> 00:14:04,850 jest o Clang w kompilator. 294 00:14:04,850 --> 00:14:08,360 Dlaczego zostaliśmy ufając dzyń w ciągu ostatnich dwóch lub trzech tygodni? 295 00:14:08,360 --> 00:14:12,650 Kto powiedział, że ten, kto napisał dzyń nie mają "jeśli" stan tam 296 00:14:12,650 --> 00:14:17,680 że zasadniczo wstrzykuje kilka zer i te, do każdego programu kompiluje 297 00:14:17,680 --> 00:14:21,180 że pozwolił mu dostęp komputer, gdy śpisz 298 00:14:21,180 --> 00:14:23,580 i laptopa pokrywa jest otwarta i komputer działa? 299 00:14:23,580 --> 00:14:24,080 Prawda? 300 00:14:24,080 --> 00:14:28,350 Mamy tego rodzaju prawa cześć systemu Teraz, gdy mamy nadzieję, że Clang jest legalne. 301 00:14:28,350 --> 00:14:30,000 Ufasz, że urządzenie jest legalne. 302 00:14:30,000 --> 00:14:34,430 Ufasz, że dosłownie każdy program na komputerze Mac lub PC jest wiarygodne. 303 00:14:34,430 --> 00:14:37,510 I jak sugeruje ten prosty błąd, nawet jeśli to nie jest złośliwy, 304 00:14:37,510 --> 00:14:40,580 że nie jest to absolutnie może być prawdą. 305 00:14:40,580 --> 00:14:42,350 >> Więc należy się bać jak cholera. 306 00:14:42,350 --> 00:14:45,560 Szczerze mówiąc, to nie ma proste Rozwiązaniem tego inne 307 00:14:45,560 --> 00:14:48,185 niż rodzaj świadomości społecznej z rosnącej złożoności 308 00:14:48,185 --> 00:14:50,310 że budujemy na szczycie naszych systemów komputerowych, 309 00:14:50,310 --> 00:14:53,740 i jak coraz bardziej podatne możemy być bardzo dobrze. 310 00:14:53,740 --> 00:14:55,570 >> Teraz z tym powiedział, Breakout. 311 00:14:55,570 --> 00:14:59,889 Breakout jest problemem tak ustawione trzy, a Breakout to gra z przeszłości 312 00:14:59,889 --> 00:15:02,180 że może pamiętacie, ale dla nas problemu ustawić trzy, 313 00:15:02,180 --> 00:15:04,450 pozwala nam na rzeczy z powrotem do nacięcia 314 00:15:04,450 --> 00:15:08,880 tak, że kiedy piszemy programy, nawet w oknie terminala, jak ten, 315 00:15:08,880 --> 00:15:14,670 może faktycznie działać, ostatecznie, nie programy graficzne 316 00:15:14,670 --> 00:15:17,800 w przeciwieństwie do tych, mieliśmy Dostęp do w Scratch. 317 00:15:17,800 --> 00:15:20,910 Więc to jest przez personel Realizacja Breakout, 318 00:15:20,910 --> 00:15:23,930 Ten, który jest po prostu łamanie cegły gry, które można przenieść wiosła z powrotem 319 00:15:23,930 --> 00:15:27,590 i do przodu, i uderzyć piłkę na tych kolorowych klocków w górę szczycie. 320 00:15:27,590 --> 00:15:30,020 Więc to przynosi nam swego rodzaju powrotem do miejsca, gdzie 321 00:15:30,020 --> 00:15:33,180 udało się bardzo szybko z początku, a teraz z C, 322 00:15:33,180 --> 00:15:35,800 realizacji naszych własnych graficzne interfejsy użytkownika. 323 00:15:35,800 --> 00:15:38,960 >> Ale to nie wszystko, to Problem stanowi zestaw pierwszy 324 00:15:38,960 --> 00:15:41,000 , w którym dajemy Ci czek kodu. 325 00:15:41,000 --> 00:15:43,940 A w rzeczywistości, wprowadzają wyraźne uwagę na to, ponieważ zwłaszcza 326 00:15:43,940 --> 00:15:47,090 dla tych mniej wygodne, to ustaw błąd, przynajmniej na pierwszy rzut oka 327 00:15:47,090 --> 00:15:49,170 będzie czuć się jak podjęliśmy go wycięcie. 328 00:15:49,170 --> 00:15:51,540 Bo my wam, dla niektórych z wyszukiwania 329 00:15:51,540 --> 00:15:54,930 i sortowania problemów w Pset, Pęczek kodu, które napisał, 330 00:15:54,930 --> 00:15:56,680 i kilka uwag że powiedzieć "do zrobienia" 331 00:15:56,680 --> 00:15:58,221 gdzie trzeba wypełnić formularz. 332 00:15:58,221 --> 00:16:00,020 Więc nie zbyt straszne, ale jest to pierwszy raz, 333 00:16:00,020 --> 00:16:03,370 mamy wręczając Ci kod, który trzeba najpierw przeczytać, zrozumieć, a następnie dodać do 334 00:16:03,370 --> 00:16:04,290 i wypełnić go. 335 00:16:04,290 --> 00:16:05,940 >> A następnie z Breakout, mamy zamiar zrobić to samo, 336 00:16:05,940 --> 00:16:08,740 co daje kilkadziesiąt więcej linii kodu, który, szczerze mówiąc, daje 337 00:16:08,740 --> 00:16:11,490 Wiele ram dla gra, ale zatrzymać się 338 00:16:11,490 --> 00:16:14,304 wdrażania cegły i piłki i wiosło, 339 00:16:14,304 --> 00:16:15,970 ale robimy realizacji innych funkcji. 340 00:16:15,970 --> 00:16:18,280 A nawet, że na pierwszy rzut oka, znowu, szczególnie jeśli mniej wygodne, 341 00:16:18,280 --> 00:16:21,480 może wydawać się szczególnie trudne i myślisz, że jest tak wiele nowych funkcji 342 00:16:21,480 --> 00:16:24,070 trzeba owinąć swój umysł wokół, i to jest prawda. 343 00:16:24,070 --> 00:16:26,281 Ale należy pamiętać, że to zupełnie jak nowa. 344 00:16:26,281 --> 00:16:28,780 Kursy są nie użyłeś wszystkich kawałki układanki w Scratch. 345 00:16:28,780 --> 00:16:31,120 Szanse są, że nie obchodzi mnie do zawijania twój umysł wokół nich wszystkich 346 00:16:31,120 --> 00:16:33,617 bo wszystko było zajęło Szybki rzut oka, aby zrozumieć, o, 347 00:16:33,617 --> 00:16:35,450 to jest to, co można zrobić, z tego kawałek układanki. 348 00:16:35,450 --> 00:16:38,260 I rzeczywiście, w problemu ustawić 3 Spec, będziemy wskazywać 349 00:16:38,260 --> 00:16:41,370 w dokumentacji, która będzie wprowadzenie do kilku nowych funkcji, 350 00:16:41,370 --> 00:16:43,570 i ostatecznie programowania konstruuje używasz. 351 00:16:43,570 --> 00:16:47,610 Warunki, pętle, zmienne i funkcje 352 00:16:47,610 --> 00:16:50,720 będzie identyczna tego, co widzieliśmy do tej pory. 353 00:16:50,720 --> 00:16:53,560 >> Tak naprawdę, co damy jesteś pewien, że przykładowy kod 354 00:16:53,560 --> 00:16:56,110 pozwala utworzyć okno że nie wygląda inaczej niż ten, 355 00:16:56,110 --> 00:16:59,540 i ostatecznie przekształcić go w coś całkiem tak. 356 00:16:59,540 --> 00:17:02,250 Więc skorzystać z CS50, dyskutować godzinami pracy i więcej, 357 00:17:02,250 --> 00:17:05,290 i ma komfort na tym, że ilość kodu trzeba napisać 358 00:17:05,290 --> 00:17:06,760 w rzeczywistości nie jest aż tak dużo. 359 00:17:06,760 --> 00:17:10,359 Pierwszym wyzwaniem jest po prostu przyzwyczaja sobie na jakiś kod pisaliśmy. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Wszelkie pytania dotyczące pset3, ShellShock, lub w inny sposób? 362 00:17:15,810 --> 00:17:19,226 >> PUBLICZNOŚCI: Wydawało się, że przechodzi z Breakout 363 00:17:19,226 --> 00:17:22,154 że kod jest prawie styl obiektowy, 364 00:17:22,154 --> 00:17:24,675 ale myślałem, że C był obiektowego programu. 365 00:17:24,675 --> 00:17:26,050 Głośnik 1: doskonałe pytanie. 366 00:17:26,050 --> 00:17:28,258 Więc patrząc przez Kod dystrybucji kod 367 00:17:28,258 --> 00:17:30,180 pisaliśmy o pset3, dla tych, którzy znają, to 368 00:17:30,180 --> 00:17:32,230 Wygląda na to, że to trochę obiektowego. 369 00:17:32,230 --> 00:17:33,800 Odpowiedź jest krótka, to jest. 370 00:17:33,800 --> 00:17:38,130 To zbliżanie, w jaki sposób kod może zrobić za pomocą obiektowego 371 00:17:38,130 --> 00:17:41,850 język C, ale jeszcze ostatecznie proceduralne. 372 00:17:41,850 --> 00:17:44,900 Nie ma metody wewnątrz z zmienne, jak zobaczysz. 373 00:17:44,900 --> 00:17:46,180 Ale przypomina, że. 374 00:17:46,180 --> 00:17:48,780 I zobaczymy tę funkcję ponownie gdy mamy do PHP i JavaScript 375 00:17:48,780 --> 00:17:49,946 pod koniec semestru. 376 00:17:49,946 --> 00:17:53,667 Ale teraz, pomyśl o tym, jak podpowiedź, co nadejdzie. 377 00:17:53,667 --> 00:17:54,250 Dobre pytanie. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 Wszystko w porządku. 380 00:17:56,550 --> 00:17:59,730 Więc merge sort był jak lewe rzeczy ostatnio. 381 00:17:59,730 --> 00:18:03,250 I połączyć sortowania było fajne w Poczucie, że jest to o wiele szybciej, 382 00:18:03,250 --> 00:18:07,100 co najmniej w oparciu o testy pobieżne zrobiliśmy w zeszłym tygodniu, niż, powiedzmy, bańki 383 00:18:07,100 --> 00:18:08,710 sortowanie, wybór sortowania, wstawiania sortowania. 384 00:18:08,710 --> 00:18:11,780 I to, co było po prostu zbyt schludny jak zwięźle i czysto 385 00:18:11,780 --> 00:18:12,810 można je wyrazić. 386 00:18:12,810 --> 00:18:15,840 A co możemy powiedzieć, to była górna zobowiązany na czas trwania do scalenia 387 00:18:15,840 --> 00:18:16,340 sortować? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Tak? 390 00:18:18,495 --> 00:18:19,360 >> PUBLICZNOŚCI: n log n? 391 00:18:19,360 --> 00:18:20,819 >> Głośnik 1: n log n, w porządku. n log n. 392 00:18:20,819 --> 00:18:23,776 I wrócimy do tego, co, że naprawdę oznacza i gdzie to pochodzi, 393 00:18:23,776 --> 00:18:25,570 lecz była lepsza niż Czas 394 00:18:25,570 --> 00:18:28,440 które widzieliśmy na bańce Wybór i wprowadzenie sortowania? 395 00:18:28,440 --> 00:18:30,610 Więc n do kwadratu. n do kwadratu jest większe niż to, 396 00:18:30,610 --> 00:18:34,650 i nawet jeśli nie jest to oczywiste, wiem, że log n jest mniejsza niż n, 397 00:18:34,650 --> 00:18:36,910 więc jeśli n razy coś mniejszej niż n, 398 00:18:36,910 --> 00:18:38,680 to będzie mniej niż n do kwadratu. 399 00:18:38,680 --> 00:18:40,130 To trochę intuicji istnieje. 400 00:18:40,130 --> 00:18:42,190 Ale zapłaciliśmy za to cenę. 401 00:18:42,190 --> 00:18:47,000 To było szybciej, ale temat, który rozpoczął pojawiać się w zeszłym tygodniu był to kompromis. 402 00:18:47,000 --> 00:18:49,804 Mam lepsze wyniki czas mądry, ale to, co 403 00:18:49,804 --> 00:18:52,470 nie mam wydać na inne Natomiast w celu osiągnięcia tego? 404 00:18:52,470 --> 00:18:53,591 >> PUBLICZNOŚCI: Pamięć. 405 00:18:53,591 --> 00:18:54,465 Głośnik 1: Powiedz jeszcze raz? 406 00:18:54,465 --> 00:18:55,173 PUBLICZNOŚCI: Pamięć. 407 00:18:55,173 --> 00:18:57,040 Głośnik 1: Pamięć, lub miejsca bardziej ogólnie. 408 00:18:57,040 --> 00:18:59,040 I to nie było super oczywiste z naszych ludzi, 409 00:18:59,040 --> 00:19:02,240 ale pamiętam, że naszych wolontariuszy były krok do przodu i intensyfikacji 410 00:19:02,240 --> 00:19:04,780 z powrotem, jakby tam tablica tu, a jakby nie 411 00:19:04,780 --> 00:19:07,130 Drugi układ tutaj mogli korzystać, bo 412 00:19:07,130 --> 00:19:09,080 Szacowany gdzieś połączyć tych ludzi. 413 00:19:09,080 --> 00:19:11,480 Nie możemy po prostu wymienić je na miejscu. 414 00:19:11,480 --> 00:19:13,800 Tak połączyć sortowania dźwigni jest więcej miejsca, które 415 00:19:13,800 --> 00:19:15,620 nie muszą się inne algorytmy, 416 00:19:15,620 --> 00:19:17,410 Plusem jest jednak, że jest to o wiele szybciej. 417 00:19:17,410 --> 00:19:20,780 I szczerze mówiąc, w realnej przestrzeni świata te days-- RAM, dysk twardy space-- 418 00:19:20,780 --> 00:19:25,030 jest stosunkowo tanie, a więc to, niekoniecznie złe. 419 00:19:25,030 --> 00:19:28,320 >> Więc rzućmy okiem, trochę bardziej metodycznie, na to, co zrobiliśmy 420 00:19:28,320 --> 00:19:30,220 i dlatego powiedział, że n log n. 421 00:19:30,220 --> 00:19:33,260 Więc tutaj są numery, a osiem ośmiu wolontariuszy mieliśmy ostatnio. 422 00:19:33,260 --> 00:19:35,718 I pierwszą rzeczą, że Merge Sortuj kazał nam zrobić, to co? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 PUBLICZNOŚCI: Podzielić na dwie części. 425 00:19:38,010 --> 00:19:38,663 Głośnik 1: Powiedz jeszcze raz? 426 00:19:38,663 --> 00:19:39,650 PUBLICZNOŚCI: Podzielić na dwie części. 427 00:19:39,650 --> 00:19:40,610 Głośnik 1: Podział na dwie, prawda. 428 00:19:40,610 --> 00:19:42,818 To bardzo przypomina książka telefoniczna, z podziałem 429 00:19:42,818 --> 00:19:44,220 i podbić bardziej ogólnie. 430 00:19:44,220 --> 00:19:45,640 Tak patrzyliśmy na lewej połowie. 431 00:19:45,640 --> 00:19:48,700 A następnie raz mówiliśmy, sortowanie Lewa połowa elementów, 432 00:19:48,700 --> 00:19:49,690 co my obok powiedzieć? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Sortować lewą połowę lewej połowa, co pozwoliło nam, 435 00:19:54,860 --> 00:19:57,570 Po podzieleniu na dwie części, skupić się na czterech i dwóch. 436 00:19:57,570 --> 00:20:01,280 >> Jak można sortować listy teraz, w żółty, wielkości dwóch, przy użyciu Merge Sortuj? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 Oraz podzielić ją na pół, i uporządkować lewą połowę. 439 00:20:04,580 --> 00:20:07,100 I to właśnie tam rzeczy mam trochę głupie krótko. 440 00:20:07,100 --> 00:20:10,720 Jak można sortować listę, która jest z Rozmiar jeden, jak ten numer cztery tutaj? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 To sortowane. 443 00:20:13,210 --> 00:20:14,200 Gotowe. 444 00:20:14,200 --> 00:20:17,300 >> Ale jak można sortować listę rozmiar jeden kiedy to numer dwa? 445 00:20:17,300 --> 00:20:21,640 Cóż, to samo, ale teraz to, co było Trzeci i kluczowym krokiem w seryjnej Sortuj? 446 00:20:21,640 --> 00:20:24,020 Trzeba było połączyć w lewo połowa i prawa połowa. 447 00:20:24,020 --> 00:20:26,580 A kiedy już to zrobił, patrzyliśmy na czterech, w jaki patrzył na dwóch. 448 00:20:26,580 --> 00:20:28,750 Zdecydowaliśmy wszelkie prawa, oczywiście dwa na pierwszym, 449 00:20:28,750 --> 00:20:31,840 więc umieścić w jego dwóch miejsce, a następnie przez cztery. 450 00:20:31,840 --> 00:20:35,010 A teraz trzeba trochę do tyłu, i to jest rodzaj charakterystyki 451 00:20:35,010 --> 00:20:37,570 algorytmu jak Merge Sortuj, przewijanie w pamięci. 452 00:20:37,570 --> 00:20:40,240 Jaka była następna linia z tej historii? 453 00:20:40,240 --> 00:20:41,780 Co mam być skupienie się na następny? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 Prawa połowa po lewej połowa, która jest sześć i osiem. 456 00:20:47,350 --> 00:20:50,320 >> Pozwólcie mi przejść przez ten bez belaboring punkt za dużo. 457 00:20:50,320 --> 00:20:53,330 Sześć i osiem, a sześć jest sortowane, osiem jest posortowana. 458 00:20:53,330 --> 00:20:57,190 Połączyć je ze sobą tak, a teraz kolejny wielki krok 459 00:20:57,190 --> 00:21:00,990 jest, oczywiście, rozwiązać z prawą połowę Pierwszym krokiem tego algorytmu. 460 00:21:00,990 --> 00:21:02,870 Więc skupić się na jednym, trzy, siedem, pięć. 461 00:21:02,870 --> 00:21:04,540 Następnie skupić się na lewej połowie. 462 00:21:04,540 --> 00:21:09,400 Lewa połowa, że ​​prawa połowa to i następnie łączyć w jedną i trzy. 463 00:21:09,400 --> 00:21:13,100 Następnie w prawo w połowie, a następnie w lewo w połowie z niej, a następnie prawa połowa. 464 00:21:13,100 --> 00:21:15,985 Scalić je, a teraz co krok pozostaje? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Scalanie duży lewą połowę i duże prawa połowa, więc idzie tam, 467 00:21:22,460 --> 00:21:27,330 Następnie dwa, a następnie trzy, cztery, a następnie, po czym pięć, potem sześć, potem siedem, potem osiem. 468 00:21:27,330 --> 00:21:31,990 >> Więc teraz, dlaczego jest to ostatecznie ujawniając, zwłaszcza gdy n i logarytmy więcej 469 00:21:31,990 --> 00:21:35,487 ogólnie raczej uciec, przynajmniej w ostatnich pamięci? 470 00:21:35,487 --> 00:21:37,070 Cóż, zawiadomienia wysokość tej rzeczy. 471 00:21:37,070 --> 00:21:41,230 Mieliśmy osiem elementów, a my podzielić je przez dwa, w dwóch o dwa. 472 00:21:41,230 --> 00:21:44,590 Więc zalogować bazę dwa ośmiu daje nam trzy. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 I uwierzcie mi, że jeśli trochę zamglone na tym. 475 00:21:48,540 --> 00:21:54,710 Ale zalogować baza dwa ośmiu jest trzy, tak zrobiliśmy trzy warstwy łączenia. 476 00:21:54,710 --> 00:21:57,170 A kiedy połączyły elementy, jak wiele elementów 477 00:21:57,170 --> 00:21:58,950 nie patrzymy na każdy z tych wierszy? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Całkowita n, prawda? 480 00:22:01,437 --> 00:22:04,020 Ponieważ połączyć górny wiersz, mimo, że zrobiliśmy to po kawałku, 481 00:22:04,020 --> 00:22:05,990 my ostatecznie dotknął każdy numer raz. 482 00:22:05,990 --> 00:22:09,054 I w drugim rzędzie, w celu scalić te wykazy wielkości dwóch, 483 00:22:09,054 --> 00:22:10,470 musieliśmy dotknąć każdego elementu raz. 484 00:22:10,470 --> 00:22:12,690 A następnie tutaj naprawdę wyraźnie w ostatnim wierszu 485 00:22:12,690 --> 00:22:15,430 musieliśmy dotknąć każdego z tych Elementy raz, ale tylko raz 486 00:22:15,430 --> 00:22:18,400 więc tu leży, to nasza n log n. 487 00:22:18,400 --> 00:22:21,780 >> A teraz po prostu zrobić rzeczy trochę bardziej formalne na chwilę, gdy 488 00:22:21,780 --> 00:22:24,260 były do ​​teraz analizować ten na jakimś wyższym poziomie 489 00:22:24,260 --> 00:22:28,340 i starają się zdecydować, a jak Może go o wyrażanie 490 00:22:28,340 --> 00:22:31,780 Czas pracy tego algorytmu po prostu patrząc na niego, a nie 491 00:22:31,780 --> 00:22:33,590 stosując wymyślony przykład? 492 00:22:33,590 --> 00:22:36,590 Cóż, ile czasu byś powiedział kroku jak ten w żółtym zajmie, 493 00:22:36,590 --> 00:22:37,173 jeśli n <2 powrót? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 To wielki O czym? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Więc widzę jeden, więc jeden krok, może dwa kroki, bo to, czy 498 00:22:44,540 --> 00:22:47,110 a następnie wrócić, ale to stały czas, prawda? 499 00:22:47,110 --> 00:22:49,960 Więc powiedzieliśmy O (1), a to jak ja wyrazić. 500 00:22:49,960 --> 00:22:51,480 T, po prostu być razem z systemem. 501 00:22:51,480 --> 00:22:54,150 n oznacza wielkość wejścia, więc T (n), po prostu fantazyjny sposób 502 00:22:54,150 --> 00:22:56,330 mówić biegu Czas podany wejście wielkości n 503 00:22:56,330 --> 00:23:00,220 będzie w porządku o stałym czasie, w O (1). 504 00:23:00,220 --> 00:23:01,970 >> Ale poza tym, co z tego? 505 00:23:01,970 --> 00:23:05,660 W jaki sposób można wyrazić czas tej żółtej linii działa? 506 00:23:05,660 --> 00:23:06,250 T o co? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Niby można tu oszukać odpowiedzieć cyklicznie na moje pytanie. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Więc jeśli czas pracy w Ogólnie po prostu powiedzieć, to T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 A teraz trochę popływać tu i mówiąc, dobrze, tylko uporządkować lewą połowę, 513 00:23:22,490 --> 00:23:23,920 a następnie posortować prawą połowę. 514 00:23:23,920 --> 00:23:27,520 Jak możemy symbolicznie reprezentują Czas pracy tego żółtej linii? 515 00:23:27,520 --> 00:23:28,020 T o co? 516 00:23:28,020 --> 00:23:29,360 Co wielkość wejścia? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 n nad nimi. 519 00:23:31,057 --> 00:23:32,140 Dlaczego nie mogę po prostu powiedzieć, że? 520 00:23:32,140 --> 00:23:36,449 A następnie jest inny T (n / 2), a następnie ponownie, jeśli połączyć dwie posortowane połówki, 521 00:23:36,449 --> 00:23:38,615 ile elementów mam musiał dotknąć całości? 522 00:23:38,615 --> 00:23:39,780 523 00:23:39,780 --> 00:23:40,320 n. 524 00:23:40,320 --> 00:23:42,790 Więc mogę wyrazić to, po prostu być rodzajem szczególnego, 525 00:23:42,790 --> 00:23:44,430 jako czasu pracy w ogóle. 526 00:23:44,430 --> 00:23:51,140 T (n) jest tylko czas przejścia T (n / 2), Plus T (n / 2), lewy i prawy połowę połowę, 527 00:23:51,140 --> 00:23:55,360 Plus O (n), który jest prawdopodobnie n kroki , ale być może, jeśli używam dwa palce, 528 00:23:55,360 --> 00:23:57,960 To dwa razy więcej kroki, ale liniowy. 529 00:23:57,960 --> 00:24:00,440 To niektóre liczba kroków to współczynnik n, 530 00:24:00,440 --> 00:24:02,270 tak możemy wyrazić to, jak ten. 531 00:24:02,270 --> 00:24:05,550 I to, gdzie teraz będziemy punt do widok z naszego gimnazjum podręcznik matematyki 532 00:24:05,550 --> 00:24:10,290 my, że nawrotu ostatecznie kończy się równa tej, n log n razy, 533 00:24:10,290 --> 00:24:12,530 jeśli faktycznie się matematyka bardziej formalnie. 534 00:24:12,530 --> 00:24:13,950 >> Więc to tylko dwie perspektywy. 535 00:24:13,950 --> 00:24:17,500 Jednym z numerycznie zakodowane reprezentatywnego przykładu 536 00:24:17,500 --> 00:24:21,140 za pomocą ośmiu cyfr, i więcej ogólne spojrzenie na to, jak tam dotarliśmy. 537 00:24:21,140 --> 00:24:25,670 Ale to, co jest naprawdę interesujące tutaj jest, ponownie, to pojęcie z jazdy na rowerze. 538 00:24:25,670 --> 00:24:26,900 Nie używam do pętli. 539 00:24:26,900 --> 00:24:29,860 Jestem rodzaju definiowania chodzi o coś w sobie, 540 00:24:29,860 --> 00:24:31,950 Nie tylko to funkcja matematyczna, 541 00:24:31,950 --> 00:24:34,860 ale także pod względem tego pseudo kod. 542 00:24:34,860 --> 00:24:38,260 Ten pseudo kod jest rekurencyjny , że dwa z jego liniami 543 00:24:38,260 --> 00:24:42,310 zasadniczo mówi, aby przejść używać się rozwiązać mniejsze 544 00:24:42,310 --> 00:24:45,400 Problem mniejszych rozmiarach a następnie wielokrotnie 545 00:24:45,400 --> 00:24:48,820 i znowu, aż go zredukować aż do tak zwanego przypadku podstawowym. 546 00:24:48,820 --> 00:24:52,810 >> Więc rzeczywiście wyciągnąć bardziej atrakcyjne wynos od tego w następujący sposób. 547 00:24:52,810 --> 00:24:58,420 Pozwólcie mi iść do gedit i podjąć spojrzeć na niektóre z dzisiejszego kodu źródłowego, 548 00:24:58,420 --> 00:24:59,930 w szczególności ten przykład tutaj. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, który najwyraźniej dodaje numery jeden do n. 550 00:25:03,709 --> 00:25:05,750 Zobaczmy więc, co to zna i zna tutaj. 551 00:25:05,750 --> 00:25:08,690 Po pierwsze mamy kilka obejmuje, więc nic nowego. 552 00:25:08,690 --> 00:25:09,190 Prototyp. 553 00:25:09,190 --> 00:25:11,370 Jestem trochę zamglony na to po kilku dniach, 554 00:25:11,370 --> 00:25:13,790 Ale co powiedzieć Prototyp funkcji jest? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 PUBLICZNOŚCI: [niesłyszalne]. 557 00:25:16,015 --> 00:25:16,905 Głośnik 1: Co to jest? 558 00:25:16,905 --> 00:25:17,800 PUBLICZNOŚCI: Ogłaszamy go. 559 00:25:17,800 --> 00:25:18,883 Głośnik 1: Ogłaszamy go. 560 00:25:18,883 --> 00:25:22,290 Więc uczysz dzyń, hej, nie faktycznie realizacji tego jeszcze, 561 00:25:22,290 --> 00:25:25,740 ale gdzieś w tym pliku, prawdopodobnie, będzie funkcja nazywa co? 562 00:25:25,740 --> 00:25:26,930 563 00:25:26,930 --> 00:25:27,540 Sigma. 564 00:25:27,540 --> 00:25:30,540 I to jest właśnie obietnica, że to będzie wyglądać. 565 00:25:30,540 --> 00:25:33,720 To zajmie liczbę całkowitą jako input-- i mogę być bardziej wyraźne 566 00:25:33,720 --> 00:25:36,570 i powiedzieć, int n --and to zamierza powrócić int, 567 00:25:36,570 --> 00:25:39,900 ale średnik oznacza, mm, będę się poruszać do realizacji w tym trochę później. 568 00:25:39,900 --> 00:25:40,989 Ponownie, Clang jest głupi. 569 00:25:40,989 --> 00:25:43,280 To będzie tylko wiedzieć, co poinformować go od góry do dołu, 570 00:25:43,280 --> 00:25:45,765 więc musimy przynajmniej dać to wskazówka, co nadejdzie. 571 00:25:45,765 --> 00:25:47,330 >> Teraz przyjrzyjmy się głównym tutaj. 572 00:25:47,330 --> 00:25:50,040 Zróbmy tu i przewinąć w dół zobacz, co robi główny. 573 00:25:50,040 --> 00:25:53,780 To nie tak, że długo z funkcji, a w rzeczywistości konstrukt tutaj zna. 574 00:25:53,780 --> 00:25:57,590 Oświadczam zmiennej n, a następnie I znowu i znowu męczyć użytkownika 575 00:25:57,590 --> 00:26:01,880 dla liczby naturalnej przy użyciu getInt, i jedyne wyjście z tej pętli 576 00:26:01,880 --> 00:26:03,280 gdy użytkownik zastosował. 577 00:26:03,280 --> 00:26:05,670 Do While, używaliśmy do męczyć użytkownika w ten sposób. 578 00:26:05,670 --> 00:26:06,670 Teraz to jest interesujące. 579 00:26:06,670 --> 00:26:08,510 Oświadczam, int o nazwie "odpowiedź". 580 00:26:08,510 --> 00:26:11,420 Przypisać jej wartość zwracana z funkcji o nazwie "sigma". 581 00:26:11,420 --> 00:26:15,200 Nie wiem jeszcze, co to robi, ale Pamiętam, deklarując ją przed chwilą. 582 00:26:15,200 --> 00:26:18,310 A potem ja przekazując wartości, które użytkownik wpisał w, n, 583 00:26:18,310 --> 00:26:20,420 a następnie zgłosić odpowiedź. 584 00:26:20,420 --> 00:26:22,260 Dobrze niech przewijania na chwilę. 585 00:26:22,260 --> 00:26:28,620 Idziemy do przodu do tego katalogu, aby sigma 0, i faktycznie uruchomić ten program 586 00:26:28,620 --> 00:26:30,490 i zobaczyć co się dzieje. 587 00:26:30,490 --> 00:26:35,930 Więc jeśli pójdę do przodu i bieg ten program, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 i wpisz w pozytywny całkowitą jak dwóch, Sigma, 589 00:26:40,139 --> 00:26:43,180 jak grecki symbol wskazuje, jest po prostu zamiar dodać do wszystkich numerów z 590 00:26:43,180 --> 00:26:44,320 zero, do dwóch. 591 00:26:44,320 --> 00:26:46,560 Tak 0 Plus 1 plus 2. 592 00:26:46,560 --> 00:26:48,830 Więc mam nadzieję, że to powinno dać mi 3. 593 00:26:48,830 --> 00:26:49,750 To wszystko robi. 594 00:26:49,750 --> 00:26:52,690 I podobnie, jeśli uruchomię to znowu i nadać mu numer trzy, 595 00:26:52,690 --> 00:26:56,721 to 3 plus 2, więc to 5 plus 1 powinien dać mi 6. 596 00:26:56,721 --> 00:26:59,470 A potem, jeśli się naprawdę szalony i zacznij pisać w większych ilościach, 597 00:26:59,470 --> 00:27:01,290 powinien dać mi coraz większe sumy. 598 00:27:01,290 --> 00:27:02,250 Więc to wszystko. 599 00:27:02,250 --> 00:27:04,010 >> Więc co sigma wygląda? 600 00:27:04,010 --> 00:27:05,430 Cóż, to całkiem proste. 601 00:27:05,430 --> 00:27:08,940 To jak może wdrożyliśmy to w ciągu ostatnich kilku tygodni. 602 00:27:08,940 --> 00:27:11,120 "Int" będzie typ zwracany. 603 00:27:11,120 --> 00:27:14,330 Sigma jest nazwa, a to trwa Zmienna m zamiast n. 604 00:27:14,330 --> 00:27:15,940 Będę zmieni się góry. 605 00:27:15,940 --> 00:27:17,340 To jest właśnie kontrola poprawności. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Zobaczymy, dlaczego w jednej chwili. 608 00:27:19,950 --> 00:27:24,220 Teraz Oświadczam innej zmiennej, suma, zainicjować go do zera. 609 00:27:24,220 --> 00:27:28,140 To mam to dla pętli iteracji, widocznie dla jasności, 610 00:27:28,140 --> 00:27:33,810 od i = 1 do dnia an = m, który jest co użytkownik wpisze w, a potem 611 00:27:33,810 --> 00:27:35,690 zwiększyć sumę takiego. 612 00:27:35,690 --> 00:27:37,360 A następnie powrócić sumę. 613 00:27:37,360 --> 00:27:38,440 >> Więc kilka pytań. 614 00:27:38,440 --> 00:27:42,370 Jeden, mam prawo w moim komentarzu, że ta unika ryzyka nieskończoną pętlę. 615 00:27:42,370 --> 00:27:45,620 Dlaczego przekazując liczby ujemnej wywoływać potencjalnie nieskończoną pętlę? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> PUBLICZNOŚCI: Nigdy nie osiągnie m. 618 00:27:51,290 --> 00:27:52,880 >> Głośnik 1: Nigdy nie osiągnie m. 619 00:27:52,880 --> 00:27:55,880 Ale m przechodzi w, więc niech Rozważmy prosty przykład. 620 00:27:55,880 --> 00:27:58,510 Jeśli m jest przekazywana przez użytkownika jako negatywny. 621 00:27:58,510 --> 00:28:00,059 Niezależnie od głównego. 622 00:28:00,059 --> 00:28:01,850 Głównym chroni nas przed to też, więc jestem 623 00:28:01,850 --> 00:28:04,680 jest naprawdę analny z Sigma również upewnić się, 624 00:28:04,680 --> 00:28:06,540 że wejście nie może być ujemna. 625 00:28:06,540 --> 00:28:10,130 Tak więc, jeżeli m jest negatywna coś jak negatywny. 626 00:28:10,130 --> 00:28:11,930 Co się stanie? 627 00:28:11,930 --> 00:28:14,390 Cóż, będzie inicjalizacji jeden, 628 00:28:14,390 --> 00:28:19,060 i wtedy będzie mniejsza lub równa m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Stand by. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 Że was-- niech nie, niech nix tę historię. 633 00:28:29,370 --> 00:28:32,780 Nie pytałem na to pytanie, ponieważ ryzyko, że jestem nawiązując do 634 00:28:32,780 --> 00:28:38,360 nie będzie się działo, bo to zawsze będzie większa niż: OK, 635 00:28:38,360 --> 00:28:39,871 I wycofać to pytanie. 636 00:28:39,871 --> 00:28:40,370 OK. 637 00:28:40,370 --> 00:28:42,030 Skupmy się tylko na tej części tutaj. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Dlaczego Oświadczam, niektóre zewnątrz pętli? 640 00:28:48,830 --> 00:28:52,010 Obwieszczenie w sprawie linii 49 mam oświadczył I wewnątrz pętli, 641 00:28:52,010 --> 00:28:54,950 ale on-line 48 Mam oświadczył trochę poza. 642 00:28:54,950 --> 00:28:55,695 Tak. 643 00:28:55,695 --> 00:28:56,611 PUBLICZNOŚCI: [niesłyszalne]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 Głośnik 1: Jasne. 646 00:28:59,400 --> 00:29:03,360 Więc przede wszystkim na pewno nie Aby zadeklarować i zainicjować sumę 647 00:29:03,360 --> 00:29:06,130 zero wewnątrz na każdej iteracji pętli, 648 00:29:06,130 --> 00:29:09,370 bo to wyraźnie pokonać Celem sumowanie cyfr. 649 00:29:09,370 --> 00:29:11,770 Ja ciągle się zmienia wartość z powrotem do zera. 650 00:29:11,770 --> 00:29:17,992 A także, co jest inny, bardziej ezoteryczne Powodem tej samej decyzji projektowej? 651 00:29:17,992 --> 00:29:18,954 Tak. 652 00:29:18,954 --> 00:29:20,279 >> PUBLICZNOŚCI: [niesłyszalne]. 653 00:29:20,279 --> 00:29:21,070 Głośnik 1: Dokładnie. 654 00:29:21,070 --> 00:29:24,060 Chcę przejść na zewnątrz pętli zbyt na jakiej linii? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 Na 53. 657 00:29:26,400 --> 00:29:29,910 Oraz w oparciu o nasze zasada od kilku wykładów temu 658 00:29:29,910 --> 00:29:33,680 zmienne o zakresie, tak naprawdę, do nawiasy klamrowe, które je obejmujàcych. 659 00:29:33,680 --> 00:29:38,190 Więc jeśli nie deklaruje sumę wewnątrz z tych zewnętrznych klamrach, 660 00:29:38,190 --> 00:29:40,250 I nie można go używać w wierszu 53. 661 00:29:40,250 --> 00:29:43,160 Innymi słowy, jeśli zadeklarowana Suma tutaj, lub nawet w obrębie 662 00:29:43,160 --> 00:29:45,410 Pętli, nie mogłem do niego dostęp w 53. 663 00:29:45,410 --> 00:29:47,150 Zmienna skutecznie zniknąć. 664 00:29:47,150 --> 00:29:48,579 Więc kilka powodów tam. 665 00:29:48,579 --> 00:29:50,370 Ale teraz wróćmy i zobaczyć co się dzieje. 666 00:29:50,370 --> 00:29:51,730 Tak sigma zostanie wywołany. 667 00:29:51,730 --> 00:29:55,640 Dodaje się 1 plus 2, lub 1 plus 2 Plus 3, a następnie zwraca wartość, 668 00:29:55,640 --> 00:29:59,660 zapisuje go w odpowiedzi, a printf tutaj Dlatego widzę na ekranie. 669 00:29:59,660 --> 00:30:03,079 Więc to jest to, co my nazywamy iteracyjny podejście, w którym powtórzenie tylko 670 00:30:03,079 --> 00:30:03,870 Oznacza pomocą pętli. 671 00:30:03,870 --> 00:30:06,900 Na pętli, pętla While, While pętla, tylko znowu robi coś 672 00:30:06,900 --> 00:30:08,380 i znowu i znowu. 673 00:30:08,380 --> 00:30:13,505 >> Ale sigma jest rodzaj funkcji w zgrabny że mogę go realizować w różny sposób. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Co to, co po prostu się trochę chłodno, 676 00:30:19,120 --> 00:30:21,880 pozwól mi naprawdę pozbyć z wielu utrudnień 677 00:30:21,880 --> 00:30:24,380 bo tej funkcji jest naprawdę bardzo proste. 678 00:30:24,380 --> 00:30:27,780 Niech go po prostu zredukować do czterech głównych linii 679 00:30:27,780 --> 00:30:30,410 i pozbyć się wszystkich Komentarze i nawiasy klamrowe. 680 00:30:30,410 --> 00:30:34,334 To jest rodzaj oszałamiające Alternatywą wdrożenie. 681 00:30:34,334 --> 00:30:37,250 W porządku, może nie oszałamiające, ale to trochę bardziej seksownego, dobrze, 682 00:30:37,250 --> 00:30:39,920 spojrzeć na to o wiele więcej zwięźle. 683 00:30:39,920 --> 00:30:43,120 Z zaledwie czterech linii kodu, I najpierw trzeba to testow. 684 00:30:43,120 --> 00:30:45,732 Gdy m jest mniejsze niż lub równe zero, sigma nie ma sensu. 685 00:30:45,732 --> 00:30:48,190 To ma być tylko tym przypadku liczb dodatnich 686 00:30:48,190 --> 00:30:50,340 więc jestem po prostu będzie zwracają zero dowolnie 687 00:30:50,340 --> 00:30:53,210 tak, że przynajmniej mają część tzw bazowym. 688 00:30:53,210 --> 00:30:54,430 >> Ale tu jest piękno. 689 00:30:54,430 --> 00:30:59,930 Całość tego pomysłu, dodając, liczby od 1 do n, lub, w tym przypadku, 690 00:30:59,930 --> 00:31:02,630 Można to zrobić poprzez rodzaju przekazując złotówki. 691 00:31:02,630 --> 00:31:04,947 Cóż, to, co jest sumą 1 do m? 692 00:31:04,947 --> 00:31:05,780 Cóż, wiesz co? 693 00:31:05,780 --> 00:31:11,949 To samo jak suma m plus suma 1 do m minus 1. 694 00:31:11,949 --> 00:31:12,740 No wiesz co? 695 00:31:12,740 --> 00:31:13,940 Co sigma m minus 1? 696 00:31:13,940 --> 00:31:17,860 Cóż, jeśli to rodzaj postępować logicznie, to jest taka sama, jak m minus 1 697 00:31:17,860 --> 00:31:21,415 Plus sigma m minus 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Więc można trochę tylko-- to jest jak, jeśli jesteś po prostu 700 00:31:26,012 --> 00:31:28,220 próbując drażnić znajomego i zadać pytanie, 701 00:31:28,220 --> 00:31:31,344 Ci niby odpowiedzieć na pytanie, można trochę zachować przekazując złotówki. 702 00:31:31,344 --> 00:31:34,560 Ale co jest kluczowym jest, że jeśli trzymać czyni znak mniejsze 703 00:31:34,560 --> 00:31:36,910 i mniejszy, jesteś nie pytając, co to sigma 704 00:31:36,910 --> 00:31:39,116 n, co sigma n, co sigma n? 705 00:31:39,116 --> 00:31:40,990 Pytasz, co jest sigma n, co sigma 706 00:31:40,990 --> 00:31:42,839 n minus 1, co jest sigma n minus 2? 707 00:31:42,839 --> 00:31:44,880 W końcu Twoje pytanie stanie się, co? 708 00:31:44,880 --> 00:31:50,250 Co jest sigma jednym lub zero, niektóre bardzo małą wartość, 709 00:31:50,250 --> 00:31:52,220 i jak najszybciej się, że Twój przyjaciel 710 00:31:52,220 --> 00:31:54,350 nie zamierzasz zapytać samo pytanie jeszcze raz, 711 00:31:54,350 --> 00:31:55,975 jesteś po prostu powiedzieć, oh to jest zero. 712 00:31:55,975 --> 00:31:58,490 Skończyliśmy grać ten rodzaj z głupim cyklicznej gry. 713 00:31:58,490 --> 00:32:02,950 >> Więc rekurencja jest aktem w programowaniu z funkcji nazywająca siebie. 714 00:32:02,950 --> 00:32:06,630 Program ten, po opracowaniu i uruchomieniu, jest będzie zachowywać się dokładnie tak samo, 715 00:32:06,630 --> 00:32:09,620 ale co to jest to, że wewnątrz klucz z funkcji o nazwie Sigma, 716 00:32:09,620 --> 00:32:13,150 jest linia kodu w którym mamy nazywając siebie, 717 00:32:13,150 --> 00:32:14,980 które normalnie byłoby złe. 718 00:32:14,980 --> 00:32:21,160 Na przykład, co jeśli pierwszy skompilowane to, tak aby sigma-- 719 00:32:21,160 --> 00:32:22,710 Marka Sigma 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Dodatnia, proszę, 50 1275. 722 00:32:27,690 --> 00:32:30,810 Więc to, co wydaje się funkcja być oparte na jednym z testów, prawidłowe. 723 00:32:30,810 --> 00:32:34,917 Ale co, jeśli się trochę niebezpieczne i usunąć tzw sprawę podstawową, 724 00:32:34,917 --> 00:32:37,750 i po prostu powiedzieć, a ja tylko co Ten bardziej skomplikowany niż jest. 725 00:32:37,750 --> 00:32:42,450 Miejmy tylko obliczenia sigma biorąc m, a następnie dodanie 726 00:32:42,450 --> 00:32:44,564 w sigma jednego m minus? 727 00:32:44,564 --> 00:32:45,980 Cóż, co się będzie działo? 728 00:32:45,980 --> 00:32:47,140 Miejmy pomniejszyć. 729 00:32:47,140 --> 00:32:52,920 Miejmy rekompilacji programu, zapisać, ponownie skompilować program, 730 00:32:52,920 --> 00:33:00,450 a następnie gotowe ./sigma-1 powiększanie, Proszę wprowadzić dodatnią liczbę całkowitą, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Jak wielu z was są gotowi do przyzna się do oglądania, że? 733 00:33:04,430 --> 00:33:04,950 >> OK. 734 00:33:04,950 --> 00:33:06,690 Tak może się zdarzyć na wiele powodów, 735 00:33:06,690 --> 00:33:09,148 i szczerze mówiąc w tym tygodniu, że jesteśmy o, aby dać Ci więcej z nich. 736 00:33:09,148 --> 00:33:11,780 Ale w tym przypadku, spróbuj rozumować wstecz 737 00:33:11,780 --> 00:33:14,430 Co by się stało tutaj? 738 00:33:14,430 --> 00:33:17,400 Błąd segmentacji, powiedzieliśmy ostatniego Czas, odnosi się do segmentu pamięci. 739 00:33:17,400 --> 00:33:18,690 Coś złego się stało. 740 00:33:18,690 --> 00:33:21,550 Ale co to było mechanicznie, że wyszło 741 00:33:21,550 --> 00:33:25,000 tutaj z powodu mojego usunięcia z tego tak zwanego przypadku bazowego, 742 00:33:25,000 --> 00:33:26,870 gdzie wróciłem zakodowane wartości? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Co sądzisz poszło nie tak? 745 00:33:30,460 --> 00:33:31,219 Tak. 746 00:33:31,219 --> 00:33:32,135 >> PUBLICZNOŚCI: [niesłyszalne]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 Głośnik 1: Ach. 749 00:33:36,970 --> 00:33:37,550 Dobre pytanie. 750 00:33:37,550 --> 00:33:39,508 Tak więc wielkość liczby że byłem podsumowując 751 00:33:39,508 --> 00:33:41,920 ma tak duże, że przekroczone Wielkość wolnej przestrzeni pamięci. 752 00:33:41,920 --> 00:33:44,640 Dobry pomysł, ale nie całkowicie będzie powodować awarię. 753 00:33:44,640 --> 00:33:48,230 To może spowodować całkowitą przepełnienia, gdzie bity po prostu odwrócić 754 00:33:48,230 --> 00:33:51,760 i wtedy pomylić naprawdę duży Numer do jak liczba ujemna, 755 00:33:51,760 --> 00:33:53,260 lecz sam nie powoduje awarię. 756 00:33:53,260 --> 00:33:55,509 Ponieważ na koniec dzień int jest nadal 32 bity. 757 00:33:55,509 --> 00:33:57,640 Nie idziesz do przypadkowo ukraść 33-sza trochę. 758 00:33:57,640 --> 00:33:58,431 Ale dobra myśl. 759 00:33:58,431 --> 00:33:58,984 Tak. 760 00:33:58,984 --> 00:33:59,900 >> PUBLICZNOŚCI: [niesłyszalne]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 Głośnik 1: Metoda nigdy nie przestanie działać, 763 00:34:02,300 --> 00:34:06,658 i rzeczywiście nazywa się ponownie i znowu i znowu i znowu 764 00:34:06,658 --> 00:34:08,449 i znowu, i żaden z te funkcje w historii 765 00:34:08,449 --> 00:34:13,310 zakończyć, ponieważ ich jedyny linii kod wywołuje same za siebie znowu i znowu 766 00:34:13,310 --> 00:34:14,219 i znowu. 767 00:34:14,219 --> 00:34:16,080 I co jest naprawdę dzieje się tu i teraz my 768 00:34:16,080 --> 00:34:18,100 może zwrócić tego rodzaju obrazowo. 769 00:34:18,100 --> 00:34:20,899 Pozwól mi przejść do obraz na chwilę. 770 00:34:20,899 --> 00:34:22,940 To jest obraz, który w końcu ucieleśnić 771 00:34:22,940 --> 00:34:26,336 bardziej szczegółowo, co się dzieje wewnątrz pamięci komputera. 772 00:34:26,336 --> 00:34:28,460 I okazuje się, że na Dno tego obrazu 773 00:34:28,460 --> 00:34:29,709 jest coś, co nazywa stos. 774 00:34:29,709 --> 00:34:31,920 To jest fragment pamięci, fragment pamięci RAM, 775 00:34:31,920 --> 00:34:33,920 że jest po prostu stosować w każdej chwili funkcja jest wywoływana. 776 00:34:33,920 --> 00:34:36,239 Za każdym razem, programista, wywołania funkcji, 777 00:34:36,239 --> 00:34:38,860 System operacyjny, jak Mac OS, Windows lub Linux, 778 00:34:38,860 --> 00:34:41,920 chwyta kilka bajtów, może kilka kilobajtów, może kilka megabajtów 779 00:34:41,920 --> 00:34:44,590 pamięci, wręcza je do Ciebie, a następnie pozwala 780 00:34:44,590 --> 00:34:47,650 można uruchomić za pomocą funkcji bez względu na zmienne trzeba. 781 00:34:47,650 --> 00:34:50,699 A jeśli to nazwać kolejnym Funkcja i innej funkcji, 782 00:34:50,699 --> 00:34:53,590 masz kolejny kawałek pamięci i kolejny kawałek pamięci. 783 00:34:53,590 --> 00:34:57,090 >> I rzeczywiście, jeśli te zielone tace z Annenberg reprezentowania tej pamięci, 784 00:34:57,090 --> 00:34:59,870 Oto co się dzieje, pierwszy Czas wywołania funkcji sigma. 785 00:34:59,870 --> 00:35:04,510 To jak wprowadzenie takiego zasobnika na co początkowo pusty stos. 786 00:35:04,510 --> 00:35:07,142 Ale wtedy, jeżeli tacy domaga się, by tak rzec, 787 00:35:07,142 --> 00:35:08,850 wzywając inne wystąpienie sigma, to 788 00:35:08,850 --> 00:35:11,640 jak prosi system operacyjny, ooh, potrzebujemy trochę więcej pamięci, 789 00:35:11,640 --> 00:35:12,520 daj mi to. 790 00:35:12,520 --> 00:35:14,840 A potem robi się piętrzyły się na na szczycie. 791 00:35:14,840 --> 00:35:18,030 Ale co tu jest klucz Pierwsza taca nadal istnieje, 792 00:35:18,030 --> 00:35:20,620 bo wywołany ten drugi podajnik. 793 00:35:20,620 --> 00:35:23,500 Teraz zaś, sigma zadzwonić Sigma, to jest jak z prośbą o więcej pamięci. 794 00:35:23,500 --> 00:35:25,830 Zostanie ułożone na tutaj. 795 00:35:25,830 --> 00:35:29,350 Sigma zadzwonić Sigma, to inna podajnik, który zostanie ułożone na tutaj. 796 00:35:29,350 --> 00:35:32,942 A jeśli to robił, ostatecznie, rodzaj wizualnej mapie 797 00:35:32,942 --> 00:35:35,525 na tym wykresie, co się dzieje na zdarzyć, ze stosem tac? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 To będzie przekraczać kwoty pamięci w komputerze jest. 800 00:35:41,160 --> 00:35:45,790 I tak szybko, jak to zielone tacy przekracza linię poziomą 801 00:35:45,790 --> 00:35:49,410 powyżej stosu i sterty nad tym słowem, którego wrócimy w przyszłości, 802 00:35:49,410 --> 00:35:50,410 to jest złe. 803 00:35:50,410 --> 00:35:52,810 Kupa jest inna segment pamięci 804 00:35:52,810 --> 00:35:55,190 i jeśli pozwoli to tace i stos na stos, 805 00:35:55,190 --> 00:35:57,800 masz zamiar przekroczyć własny segment pamięci, 806 00:35:57,800 --> 00:36:00,420 a program jest rzeczywiście zamiar upaść. 807 00:36:00,420 --> 00:36:02,930 >> Teraz, jak na marginesie, ten pomysł rekursji Dlatego 808 00:36:02,930 --> 00:36:06,500 może wyraźnie prowadzą do problemów, ale to nie jest koniecznie złą rzeczą. 809 00:36:06,500 --> 00:36:08,840 Ponieważ uważają, po wszystkim how-- i może 810 00:36:08,840 --> 00:36:11,700 ma to jakiś przyzwyczaić do --how elegancki lub jak proste 811 00:36:11,700 --> 00:36:14,890 że realizacja sigma było. 812 00:36:14,890 --> 00:36:17,440 I nie będziemy używać rekurencji aż tak dużo w CS50, 813 00:36:17,440 --> 00:36:20,780 ale w CS51 i naprawdę każda klasa gdzie można manipulować struktury danych 814 00:36:20,780 --> 00:36:23,640 jak drzewa lub drzew rodzinnych, , że mają jakąś hierarchię, 815 00:36:23,640 --> 00:36:26,000 to jest bardzo, bardzo przydatna. 816 00:36:26,000 --> 00:36:29,750 Teraz, jak na bok, tak, że jako początkujący informatyków 817 00:36:29,750 --> 00:36:33,180 zna niektóre z Google'a wewnątrz żarty, jeśli pójdziesz do Google 818 00:36:33,180 --> 00:36:36,345 i patrzeć, co jest Definicja, powiedzmy, rekurencja, wprowadź. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 Aha. 821 00:36:41,110 --> 00:36:42,670 Tak na marginesie, to zatrzymał się kilka. 822 00:36:42,670 --> 00:36:45,470 To było jak 10 minutach kunktatorstwo rano. 823 00:36:45,470 --> 00:36:52,890 Jeśli także Google "krzywo" informacja przechylając głowę slightly-- 824 00:36:52,890 --> 00:36:55,120 i ten jest prawdopodobnie najbardziej okropna wszystkim 825 00:36:55,120 --> 00:36:57,286 ponieważ ktoś spędził jak wykonawczych to ich dzień 826 00:36:57,286 --> 00:36:59,880 kilka lat ago-- chodź. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Och, wait--, że to błąd. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Tak działa na jednym z Największe strony świecie 831 00:37:11,410 --> 00:37:13,510 są te głupie małe pisanki. 832 00:37:13,510 --> 00:37:16,690 Prawdopodobnie zużywają Numer nieszablonowe linii kodu 833 00:37:16,690 --> 00:37:19,280 po prostu tak, że możemy mieć trochę zabawy takie rzeczy. 834 00:37:19,280 --> 00:37:22,140 Ale przynajmniej teraz masz niektóre z tych wewnątrz żartów. 835 00:37:22,140 --> 00:37:28,330 >> Teraz rzućmy okiem na niektóre z White Lies, który został nam mówi późno, 836 00:37:28,330 --> 00:37:30,707 i zacząć się łuszczyć powrotem niektóre warstwy technicznie 837 00:37:30,707 --> 00:37:32,790 tak, że naprawdę można zrozumieć co się dzieje 838 00:37:32,790 --> 00:37:34,860 i można zrozumieć, niektóre z zagrożeń, 839 00:37:34,860 --> 00:37:38,060 jak Shellshock, że teraz zaczął się 840 00:37:38,060 --> 00:37:41,110 na czele wszyscy na uwagę, przynajmniej w mediach. 841 00:37:41,110 --> 00:37:45,810 Więc tutaj jest bardzo prosta funkcja że zwraca nic, nieważne. 842 00:37:45,810 --> 00:37:46,790 Jego nazwa jest Swap. 843 00:37:46,790 --> 00:37:50,880 To trwa w dwóch zmiennych i nic nie zwraca. 844 00:37:50,880 --> 00:37:52,260 Staje się w A i B. 845 00:37:52,260 --> 00:37:53,337 Tak szybkie demonstracji. 846 00:37:53,337 --> 00:37:54,170 Przywieźliśmy je do góry. 847 00:37:54,170 --> 00:37:56,100 Równie dobrze możemy wziąć trochę złamać się tu na chwilę 848 00:37:56,100 --> 00:37:57,250 i mają coś do picia. 849 00:37:57,250 --> 00:38:00,120 Jeśli ktoś nie miałby nic przeciwko łączenia ja się tu tylko na chwilę. 850 00:38:00,120 --> 00:38:01,830 Jak o tobie w bordową koszulę? 851 00:38:01,830 --> 00:38:02,335 Chodź na górę. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Wystarczy jeden dzisiaj. 854 00:38:05,260 --> 00:38:06,251 Dziękuję, choć. 855 00:38:06,251 --> 00:38:08,000 Wszystko w porządku, a my mamy wymyślanie kto tutaj? 856 00:38:08,000 --> 00:38:08,660 Jak masz na imię? 857 00:38:08,660 --> 00:38:09,360 >> GŁOŚNIK 4: Laura. 858 00:38:09,360 --> 00:38:09,740 >> Głośnik 1: Laura. 859 00:38:09,740 --> 00:38:10,370 Chodź na górę. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Więc Laura, bardzo proste wyzwanie dzisiaj. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Nice to meet yo. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 Wszystko w porządku. 866 00:38:16,910 --> 00:38:21,179 Tak więc mamy tu trochę mleka i mamy trochę soku pomarańczowego tutaj 867 00:38:21,179 --> 00:38:23,345 i że niektóre kubki zapożyczone z Annenberg dziś. 868 00:38:23,345 --> 00:38:24,178 >> GŁOŚNIK 4: Borrowed. 869 00:38:24,178 --> 00:38:27,240 Głośnik 1: I będziemy iść do przodu i daje pół szklanki tego. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 Wszystko w porządku. 872 00:38:28,800 --> 00:38:30,750 I damy ci pół Szklanka mleka. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 Aha, i tak, że można pamiętam, co to było jak, 875 00:38:35,890 --> 00:38:38,860 Przypomniałem sobie, aby doprowadzić to się i dziś. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Ok. 878 00:38:42,530 --> 00:38:45,470 Jeśli nie masz nic przeciwko, zobaczymy, że Można umieścić je na swoich własnych okularów 879 00:38:45,470 --> 00:38:46,560 jeśli chcesz. 880 00:38:46,560 --> 00:38:48,710 To będzie świat z oczu Laury. 881 00:38:48,710 --> 00:38:49,210 Wszystko w porządku. 882 00:38:49,210 --> 00:38:53,820 Więc twoim celem, biorąc pod uwagę dwie filiżanki ciecz tutaj, mleko i sok pomarańczowy, 883 00:38:53,820 --> 00:38:58,370 jest zamiana obu zawartość żeby sok pomarańczowy przechodzi w kubku mleka 884 00:38:58,370 --> 00:39:00,710 oraz mleko przechodzi szklanki soku pomarańczowego. 885 00:39:00,710 --> 00:39:02,359 >> GŁOŚNIK 4: Czy dostanę kolejną filiżankę? 886 00:39:02,359 --> 00:39:05,650 Głośnik 1: Cieszę się, że pytasz, choć byłoby znacznie lepiej filmy 887 00:39:05,650 --> 00:39:06,710 jeśli nie poprosił. 888 00:39:06,710 --> 00:39:10,620 Ale tak, możemy zaoferować Państwu trzeci puchar to pusty, oczywiście. 889 00:39:10,620 --> 00:39:11,120 Wszystko w porządku. 890 00:39:11,120 --> 00:39:12,300 Więc zamienić zawartość nie. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Bardzo ładne. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Bardzo dobre. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Robisz to niezwykle starannie. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 I kroku trzeciego. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 Wszystko w porządku. 901 00:39:31,350 --> 00:39:31,930 Doskonałe. 902 00:39:31,930 --> 00:39:33,930 Wielkie brawa byłoby to dobre dla Laury. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 Wszystko w porządku. 905 00:39:37,000 --> 00:39:40,790 Mamy mały prezent na pożegnanie dla Ciebie, ale pozwól mi wziąć te. 906 00:39:40,790 --> 00:39:42,620 Dziękuję bardzo. 907 00:39:42,620 --> 00:39:46,170 Tak więc prosty przykład, chociaż wykazać, że jeśli nie 908 00:39:46,170 --> 00:39:48,300 chcesz zamienić zawartość z dwóch pojemników, 909 00:39:48,300 --> 00:39:52,360 lub nazwijmy je zmienne, trzeba trochę tymczasowego magazynowania 910 00:39:52,360 --> 00:39:56,710 do etapu jedną z zawartości w taki że można zrobić swap. 911 00:39:56,710 --> 00:40:01,790 Tak naprawdę, to kod źródłowy tutaj w C to przedstawiciel dokładnie to. 912 00:40:01,790 --> 00:40:06,340 Jeżeli sok pomarańczowy był i mleka był b, i chcieliśmy zamienić dwa, 913 00:40:06,340 --> 00:40:08,990 możesz spróbować coś twórczego przez wylewanie się ze sobą, 914 00:40:08,990 --> 00:40:11,031 ale to chyba nie byłoby kończy się szczególnie dobrze. 915 00:40:11,031 --> 00:40:15,260 I tak używamy trzeci kubek, połączenie to tmp, T-M-P zgodnie z konwencją, 916 00:40:15,260 --> 00:40:19,370 i umieścić zawartość L w, wtedy zamienić jedną filiżankę, 917 00:40:19,370 --> 00:40:22,610 następnie umieścić w Dzienniku Urzędowym Oryginalny puchar, tym samym 918 00:40:22,610 --> 00:40:25,320 osiągnięcia, dokładnie tak, jak Laura zrobiła, swap. 919 00:40:25,320 --> 00:40:26,850 >> Więc zróbmy dokładnie to. 920 00:40:26,850 --> 00:40:30,110 Pozwólcie mi iść do przodu i otworzyć się na przykład, że za 921 00:40:30,110 --> 00:40:32,720 w rzeczywistości nazywa się "nie zamienić ", ponieważ nie jest to 922 00:40:32,720 --> 00:40:36,180 tak po prostu zrobić jak mogłoby się wydawać. 923 00:40:36,180 --> 00:40:41,190 Tak więc w tym programie, zauważysz, że Używam stdio.h, nasz stary przyjaciel. 924 00:40:41,190 --> 00:40:43,130 Mam prototyp do wymiany tam, które 925 00:40:43,130 --> 00:40:45,450 oznacza jego realizacja jest prawdopodobnie w dół poniżej, 926 00:40:45,450 --> 00:40:48,050 i zobaczmy, co to główny Program zrobi dla mnie. 927 00:40:48,050 --> 00:40:52,020 Pierwszy raz oświadczam, int x dostaje jeden, i int y dostaje dwa. 928 00:40:52,020 --> 00:40:54,930 Więc myślę o tych, w Dzienniku Urzędowym mleko i, odpowiednio. 929 00:40:54,930 --> 00:40:57,100 A potem po prostu printf mówiąc x to 930 00:40:57,100 --> 00:41:00,120 i y jest to, tak mogę wizualnie zobaczyć, co się dzieje. 931 00:41:00,120 --> 00:41:03,810 Wtedy mam printf twierdząc że jestem swapping dwa, 932 00:41:03,810 --> 00:41:07,100 a potem wydrukować twierdzą, że są one zamienione, 933 00:41:07,100 --> 00:41:09,300 i wydrukować x i y ponownie. 934 00:41:09,300 --> 00:41:13,010 Więc tutaj w wymiany jest dokładnie to, co Laura zrobiła, 935 00:41:13,010 --> 00:41:16,240 i dokładnie to, co widzieliśmy na Ekran chwilą. 936 00:41:16,240 --> 00:41:19,380 >> Więc idź naprzód i być bardzo rozczarowany. 937 00:41:19,380 --> 00:41:24,690 Dodać nie swap, i uruchomić bez swapa, powiększenie wyjścia tutaj. 938 00:41:24,690 --> 00:41:28,320 Wprowadź x oznacza 1, y oznacza 2, zamiana zamienione. 939 00:41:28,320 --> 00:41:32,700 X jeszcze 1 i y jest w dalszym ciągu 2. 940 00:41:32,700 --> 00:41:37,630 Więc chociaż, szczerze mówiąc, to wygląda dokładnie jak, choć bardziej technicznie, 941 00:41:37,630 --> 00:41:40,730 co Laura nie, nie wydaje się do pracy. 942 00:41:40,730 --> 00:41:42,130 Więc dlaczego tak jest? 943 00:41:42,130 --> 00:41:46,630 Cóż, okazuje się, że gdy możemy napisać program tak 944 00:41:46,630 --> 00:41:51,590 który zarówno główny, podkreślił tutaj, a następnie innej funkcji, jak zamiana, 945 00:41:51,590 --> 00:41:54,230 podświetlony tutaj, które wzywa świat 946 00:41:54,230 --> 00:41:57,030 wygląda trochę coś jak te tace chwilą. 947 00:41:57,030 --> 00:42:00,440 Po pierwsze jest wywoływana głównym, to jak pytanie system operacyjny 948 00:42:00,440 --> 00:42:04,030 na trochę pamięci na każdy lokalny zmienne x i y, jak że głównym ma, 949 00:42:04,030 --> 00:42:05,660 i kończy się tam. 950 00:42:05,660 --> 00:42:10,920 Ale jeśli główne połączenia zamienić, a głównym przechodzi do wymiany dwa argumenty, A i B, 951 00:42:10,920 --> 00:42:16,410 sok pomarańczowy i mleko, to nie jest tak, wręczając sok pomarańczowy i mleko 952 00:42:16,410 --> 00:42:17,500 do Laury. 953 00:42:17,500 --> 00:42:21,300 Co robi komputer, jest to przekazuje kopie soku pomarańczowego 954 00:42:21,300 --> 00:42:27,110 i kopie mleka do Laury, tak że co ostatecznie wewnątrz tego podajnika 955 00:42:27,110 --> 00:42:32,510 jest jedna wartość drugiego, lub L i mleko, ale ich kopie, 956 00:42:32,510 --> 00:42:34,790 tak, że w tym momencie w historii, nie 957 00:42:34,790 --> 00:42:36,930 to L i mleka w każdym z tych zasobników. 958 00:42:36,930 --> 00:42:39,260 Nie jeden, a dwa W każdym z tych zasobników 959 00:42:39,260 --> 00:42:41,720 i funkcja wymiany jest rzeczywiście pracuje. 960 00:42:41,720 --> 00:42:46,090 To zamiana ich w środku z drugim najwyższym tacy, 961 00:42:46,090 --> 00:42:48,147 Zamiana ale nie ma wpływu. 962 00:42:48,147 --> 00:42:49,980 I opiera się tylko na niektórych Podstawową zasadą mamy 963 00:42:49,980 --> 00:42:52,970 mówił o przed, a nawet zaledwie kilka minut temu, co 964 00:42:52,970 --> 00:42:58,770 może wyjaśnić, dlaczego zmiany b wewnątrz swapu 965 00:42:58,770 --> 00:43:05,560 ma wpływ na x i y, chociaż Zdałem x i y do funkcji swap. 966 00:43:05,560 --> 00:43:08,750 Co znajduje się tutaj, że kluczowym słowem może uproszczeniu wyjaśnić? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Myślę, że słyszałem go tutaj? 969 00:43:12,627 --> 00:43:13,335 PUBLICZNOŚCI: Powrót. 970 00:43:13,335 --> 00:43:14,085 Głośnik 1: Powrót? 971 00:43:14,085 --> 00:43:14,590 Nie powrócić. 972 00:43:14,590 --> 00:43:15,895 Chodźmy z jednym innego. 973 00:43:15,895 --> 00:43:16,395 Co to jest? 974 00:43:16,395 --> 00:43:17,080 >> PUBLICZNOŚCI: [niesłyszalne]. 975 00:43:17,080 --> 00:43:20,000 >> Głośnik 1: OK, więc return-- mogliśmy uczynić pracę powrotu w historii, 976 00:43:20,000 --> 00:43:21,914 ale jest jeszcze prostsze wyjaśnienie. 977 00:43:21,914 --> 00:43:22,580 PUBLICZNOŚCI: Zakres. 978 00:43:22,580 --> 00:43:23,288 Głośnik 1: Zakres. 979 00:43:23,288 --> 00:43:24,300 Wezmę zakresu. 980 00:43:24,300 --> 00:43:27,290 Tak więc zakres, pamiętam gdzie nasza x i y oświadczył. 981 00:43:27,290 --> 00:43:30,840 Oni deklarowane wewnątrz z głównym aż tutaj. 982 00:43:30,840 --> 00:43:33,200 i b, w międzyczasie, skutecznie oświadczył 983 00:43:33,200 --> 00:43:35,930 wewnątrz swapu, nie całkiem w nawiasy klamrowe, ale nadal 984 00:43:35,930 --> 00:43:37,690 w ogólnej powierzchni wymiany. 985 00:43:37,690 --> 00:43:40,560 I tak naprawdę, i b tylko tacy istnieją w tym 986 00:43:40,560 --> 00:43:44,850 z Annenberg, to Drugi fragment kodu. 987 00:43:44,850 --> 00:43:49,500 Więc jesteśmy rzeczywiście zmiany kopię, ale to naprawdę nie wszystko, że pomocne. 988 00:43:49,500 --> 00:43:52,190 >> Warto więc przyjrzeć się to trochę niższy poziom. 989 00:43:52,190 --> 00:43:55,430 Mam zamiar wrócić do Źródło katalog, 990 00:43:55,430 --> 00:43:58,330 i idę do pierwszego powiększyć tutaj, i tylko 991 00:43:58,330 --> 00:44:02,290 aby potwierdzić, że jestem w tym większe okno terminala, 992 00:44:02,290 --> 00:44:04,430 Program nadal zachowuje się tak. 993 00:44:04,430 --> 00:44:06,840 Przypuśćmy teraz, że ten nie jest celowe. 994 00:44:06,840 --> 00:44:10,090 Oczywiście chciałem swapa do praca, więc czuje się jak robaka. 995 00:44:10,090 --> 00:44:12,780 Teraz mogę rozpocząć dodawanie Wiele printf do mojego kodu, 996 00:44:12,780 --> 00:44:16,010 drukowanie X tutaj, y nad tutaj, tutaj, b tutaj. 997 00:44:16,010 --> 00:44:18,220 Ale szczerze mówiąc, to chyba to, co robiłeś przez kilka tygodni 998 00:44:18,220 --> 00:44:20,190 teraz, w godzinach pracy urzędu i podczas pracy w domu 999 00:44:20,190 --> 00:44:22,150 na psets próbuje znaleźć kilka błędów. 1000 00:44:22,150 --> 00:44:25,560 Ale zobaczysz, jeśli nie masz, że problemem ustawić trzy wprowadza cię 1001 00:44:25,560 --> 00:44:31,630 do polecenia o nazwie GDB, gdzie GDB, GNU debugger, 1002 00:44:31,630 --> 00:44:34,040 ma sobie całą masę Cechy, które mogą rzeczywiście 1003 00:44:34,040 --> 00:44:38,160 pozwala zrozumieć sytuacje tak, ale nieodparcie, 1004 00:44:38,160 --> 00:44:39,940 rozwiązać problemy i znaleźć błędy. 1005 00:44:39,940 --> 00:44:40,940 Więc mam zamiar to zrobić. 1006 00:44:40,940 --> 00:44:44,770 Zamiast ./noswap, zamiast mnie zamierza uruchomić GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Innymi słowy, mam zamiar uruchomić mój Program nie w Bash, nasz nowy przyjaciel 1009 00:44:51,200 --> 00:44:51,850 dzisiaj. 1010 00:44:51,850 --> 00:44:53,970 Zamierzam uruchomić mój Program noswap wewnątrz 1011 00:44:53,970 --> 00:44:56,900 tego innego programu o nazwie GDB który debugera, które 1012 00:44:56,900 --> 00:45:01,035 to program, który jest zaprojektowany, aby pomóc Wy, ludzie, znaleźć i usunąć błędy. 1013 00:45:01,035 --> 00:45:03,410 Więc jeśli uderzę Uruchom tutaj, nie okropna ilość tekstu 1014 00:45:03,410 --> 00:45:04,868 że nigdy tak naprawdę nie trzeba czytać. 1015 00:45:04,868 --> 00:45:07,290 To w zasadzie rozproszenia z wiersza, który 1016 00:45:07,290 --> 00:45:10,030 Mam zamiar hit Control-L wstać o tam na górze. 1017 00:45:10,030 --> 00:45:11,800 To jest szybka GDB. 1018 00:45:11,800 --> 00:45:15,550 Jeśli chcę, aby uruchomić ten program teraz, w tej małej ściągawki na dzisiejszym 1019 00:45:15,550 --> 00:45:21,860 zjeżdżalnia sugeruje, Run to pierwszy Polecenia, które ma na celu wprowadzenie. 1020 00:45:21,860 --> 00:45:25,150 A ja po prostu się do typu uruchomić się tutaj wewnątrz GDB, 1021 00:45:25,150 --> 00:45:26,811 i rzeczywiście prowadził mój program. 1022 00:45:26,811 --> 00:45:29,310 Teraz jest jakaś dodatkowa Wyjścia ekranie, jak to 1023 00:45:29,310 --> 00:45:31,910 ale to GDB prostu analny i mówi nam, co się dzieje. 1024 00:45:31,910 --> 00:45:34,451 Tak naprawdę nie musisz się martwić o te szczegóły teraz. 1025 00:45:34,451 --> 00:45:36,890 Ale to, co jest naprawdę fajne o GDB, jeśli zrobić to again-- 1026 00:45:36,890 --> 00:45:42,100 Control-L czyści screen-- pozwól mi odejść dalej i wpisz "złamać głównym," w ten sposób, 1027 00:45:42,100 --> 00:45:45,743 kiedy naciśnij Enter, co jest ustawienie zwany próg w noswap.c, 1028 00:45:45,743 --> 00:45:51,270 Linia 16, czyli tam, gdzie GDB zorientowali się mój program faktycznie 1029 00:45:51,270 --> 00:45:53,070 jest moja funkcja w rzeczywistości. 1030 00:45:53,070 --> 00:45:55,070 To my na razie zignorować ale to jest adres 1031 00:45:55,070 --> 00:45:57,310 pamięć specyficznie tej funkcji. 1032 00:45:57,310 --> 00:46:00,240 Więc teraz, kiedy typem uruchomienia, zauważyć, co jest cool tutaj. 1033 00:46:00,240 --> 00:46:05,650 Mój program przerywa na linii I powiedział GDB aby wstrzymać wykonanie na. 1034 00:46:05,650 --> 00:46:09,850 Więc nie mam do teraz zmiana kodu, dodać kilka printf, w przekompilować, powtórka 1035 00:46:09,850 --> 00:46:13,300 to, zmienić, dodać kilka printf, w zapisać, ponownie skompilować go, uruchom go. 1036 00:46:13,300 --> 00:46:18,100 Można po prostu przejść przez mój program krok po kroku po kroku w ludzkiej prędkości, 1037 00:46:18,100 --> 00:46:20,880 nie na Intel-wewnątrz rodzaju prędkości. 1038 00:46:20,880 --> 00:46:24,580 >> Więc teraz zauważyć tę linię pojawia się tutaj, a jeśli wrócę 1039 00:46:24,580 --> 00:46:27,800 do mojego programu w gedit, Zauważ, że to jest rzeczywiście 1040 00:46:27,800 --> 00:46:29,280 Pierwszy wiersz kodu. 1041 00:46:29,280 --> 00:46:31,240 Jest linia 16 w gedit. 1042 00:46:31,240 --> 00:46:34,610 Jest linia 16 w ciągu GDB, a nawet choć ten czarno-biały interfejs 1043 00:46:34,610 --> 00:46:37,760 nie jest tak użytkownik przyjazny, oznacza to, 1044 00:46:37,760 --> 00:46:41,680 że linia 16 nie został wykonany jeszcze, ale o to, aby być. 1045 00:46:41,680 --> 00:46:46,220 Tak naprawdę, jeśli polecenie print x, nie printf, tylko print x, 1046 00:46:46,220 --> 00:46:50,730 I trochę fałszywe wartości nie od zera, ponieważ x nie został jeszcze zainicjowany. 1047 00:46:50,730 --> 00:46:54,760 Więc mam zamiar wpisać obok, lub jeśli chcę być nadzwyczajnego, po prostu n dla następnego. 1048 00:46:54,760 --> 00:46:59,090 Ale kiedy typem obok wejść, teraz zauważyć, że porusza się na linii 17. 1049 00:46:59,090 --> 00:47:02,840 Tak logicznie, jeśli mam wykonywane Linia 16 i teraz wpisz Drukuj X, 1050 00:47:02,840 --> 00:47:03,640 co mam zobaczyć? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Jeden. 1053 00:47:05,520 --> 00:47:07,820 >> A teraz to jest prawda mylące. 1054 00:47:07,820 --> 00:47:11,260 $ 2 to tylko fantazyjny sposób, jeśli Ciebie Aby odnieść się do tej wartości później, 1055 00:47:11,260 --> 00:47:12,510 można powiedzieć "znak dolara dwóch." 1056 00:47:12,510 --> 00:47:13,480 To jak odniesienie tyłu. 1057 00:47:13,480 --> 00:47:14,570 Ale teraz, po prostu zignorować. 1058 00:47:14,570 --> 00:47:17,070 Co ciekawe jest to, co jest po prawej jednakowej znaku. 1059 00:47:17,070 --> 00:47:21,000 A teraz, jeśli napiszę następny raz i druk y, powinny widzę 2. 1060 00:47:21,000 --> 00:47:23,870 Teraz można również drukować x znowu, i szczerze mówiąc, 1061 00:47:23,870 --> 00:47:27,130 jeśli mam już trochę mylić, gdzie jestem, mogę pisać listy do listy 1062 00:47:27,130 --> 00:47:30,590 i po prostu zobaczyć jakiś kontekst wokół punkt w rzeczywistości jestem. 1063 00:47:30,590 --> 00:47:35,180 A teraz mogę pisać obok, a tam x 1. 1064 00:47:35,180 --> 00:47:36,300 Teraz wpisz obok. 1065 00:47:36,300 --> 00:47:37,710 Och, y 2. 1066 00:47:37,710 --> 00:47:40,750 I znowu, to jest mylące, bo wyjścia GDB za 1067 00:47:40,750 --> 00:47:43,044 jest zmieszane z własnej produkcji. 1068 00:47:43,044 --> 00:47:45,710 Ale jeśli pamiętać, by spoglądając w tę iz powrotem w kodzie 1069 00:47:45,710 --> 00:47:47,740 lub r to z boku przez strony, być może, będziesz 1070 00:47:47,740 --> 00:47:51,020 zobaczyć, że naprawdę jestem wzmocnienie przez mój program. 1071 00:47:51,020 --> 00:47:54,620 >> Nie zauważyć, co się dzieje obok, dosłownie. 1072 00:47:54,620 --> 00:47:56,380 Oto wiersz 22. 1073 00:47:56,380 --> 00:48:01,315 Pozwól mi przejść przez to, co porusza się na do 23, a jeśli mogę wydrukować x teraz, jeszcze jeden. 1074 00:48:01,315 --> 00:48:03,890 A jeśli mogę wydrukować y teraz, jeszcze jeden. 1075 00:48:03,890 --> 00:48:05,820 Więc to nie jest przydatne ćwiczenia. 1076 00:48:05,820 --> 00:48:07,450 Warto więc powtórzyć to. 1077 00:48:07,450 --> 00:48:10,069 Pozwól mi wrócić do góry i rodzaj uruchomić ponownie. 1078 00:48:10,069 --> 00:48:12,110 I to mówiąc, program debugowanym że jest 1079 00:48:12,110 --> 00:48:14,109 rozpoczęty już, rozpoczyna się od początku. 1080 00:48:14,109 --> 00:48:15,420 Tak, zróbmy to jeszcze raz. 1081 00:48:15,420 --> 00:48:22,000 I tym razem zróbmy następny, następny, następny, następny, następny, 1082 00:48:22,000 --> 00:48:24,180 ale teraz robi się ciekawie. 1083 00:48:24,180 --> 00:48:27,760 Teraz chcę, aby wejść do Swap, więc nie wpisz obok. 1084 00:48:27,760 --> 00:48:34,380 I typu krok, a teraz zauważyłem skoczył mnie do linii noswap.c 33. 1085 00:48:34,380 --> 00:48:37,240 Jeśli wrócę do gedit, co linia 33? 1086 00:48:37,240 --> 00:48:40,500 To pierwszy rzeczywisty linii kodu wewnątrz swap. 1087 00:48:40,500 --> 00:48:44,150 Co jest miłe, bo teraz mogę rodzaj grzebać i uzyskać ciekawy 1088 00:48:44,150 --> 00:48:46,052 co do tego, co się dzieje naprawdę tam jest. 1089 00:48:46,052 --> 00:48:46,760 Pozwól mi wydrukować tmp. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Wow. 1092 00:48:48,800 --> 00:48:51,438 Dlaczego niektórzy mają tmp szalony, fałszywe wartości śmieci? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 PUBLICZNOŚCI: To nie został zainicjowany. 1095 00:48:56,120 --> 00:48:57,150 Głośnik 1: To nie został zainicjowany. 1096 00:48:57,150 --> 00:49:00,270 I rzeczywiście, po uruchomieniu programu, dostaniesz całą masę pamięci 1097 00:49:00,270 --> 00:49:03,392 przez system operacyjny, ale nie zainicjalizowany żadnych wartości, 1098 00:49:03,392 --> 00:49:05,600 więc cokolwiek bity jesteś widząc tutaj, nawet jeśli jest to 1099 00:49:05,600 --> 00:49:07,770 ten szalony duży negatywny liczba, oznacza po prostu 1100 00:49:07,770 --> 00:49:10,750 że są to pozostałości z Niektóre wcześniejsze korzystanie z tej pamięci RAM, 1101 00:49:10,750 --> 00:49:13,050 mimo, że nie mają ja potrzebowałem jeszcze. 1102 00:49:13,050 --> 00:49:17,086 Więc teraz mam zamiar iść do przodu i typ następny, i gdybym teraz wpisać druku tmp, 1103 00:49:17,086 --> 00:49:17,835 co mam zobaczyć? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Niezależnie wartość była jest pierwszym argumentem, tylko 1106 00:49:23,360 --> 00:49:25,550 jak x był pierwszy sprawa jest przekazywana w, 1107 00:49:25,550 --> 00:49:30,450 tak ix powinny być takie same, więc drukować tmp powinien wypisać mi jeden. 1108 00:49:30,450 --> 00:49:36,360 >> Więc to, co zobaczysz w zestawie problemu trzy to swego rodzaju samouczek na GDB, 1109 00:49:36,360 --> 00:49:40,020 ale uświadomić sobie, że to jest początek od spojrzenia na narzędzie, które rzeczywiście 1110 00:49:40,020 --> 00:49:42,774 pomoc w rozwiązaniu problemów o wiele bardziej skuteczne. 1111 00:49:42,774 --> 00:49:44,690 Co jesteśmy ostatecznie zamiar zrobić w środę 1112 00:49:44,690 --> 00:49:48,180 jest zacząć się łuszczyć powrotem kilka warstw i usunąć niektóre kółka. 1113 00:49:48,180 --> 00:49:50,496 To coś nazywa się ciąg znaków, który używaliśmy przez jakiś czas, 1114 00:49:50,496 --> 00:49:53,370 my jedziemy powoli zabieraj od Ciebie i zacząć mówić o 1115 00:49:53,370 --> 00:49:55,725 coś bardziej ezoterycznie znany jako char *, 1116 00:49:55,725 --> 00:49:59,550 ale mamy zamiar zrobić ładne i delikatnie pierwsze chociaż wskaźników, 1117 00:49:59,550 --> 00:50:02,730 jak nazywa się je, można zrobić kilka bardzo złe rzeczy, jeśli nadużywane, 1118 00:50:02,730 --> 00:50:06,040 patrząc na trochę od claymation nasz przyjaciel Nick Parlante Stanford 1119 00:50:06,040 --> 00:50:09,670 University, profesor w komputerze nauka, która ułożyła ten podgląd 1120 00:50:09,670 --> 00:50:11,075 z tego, co nadchodzi w środę. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [ODTWARZANIE] 1123 00:50:13,400 --> 00:50:13,900 Hej, Binky. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Obudź się. 1126 00:50:15,780 --> 00:50:17,240 To jest czas dla wskaźnika zabawy. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> Co to jest? 1129 00:50:19,350 --> 00:50:21,150 Dowiedz się o wskazówki? 1130 00:50:21,150 --> 00:50:22,050 Och, cukierek! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [KONIEC ODTWARZANIE] 1133 00:50:23,730 --> 00:50:25,396 Głośnik 1: To czeka na Ciebie w środę. 1134 00:50:25,396 --> 00:50:26,440 Zobaczymy się potem. 1135 00:50:26,440 --> 00:50:27,106 [ODTWARZANIE] 1136 00:50:27,106 --> 00:50:30,420 -I teraz, Deep Thoughts, przez Daven Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> Dlaczego uczymy C? 1139 00:50:35,900 --> 00:50:36,785 Dlaczego nie +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Śmiech] 1142 00:50:40,910 --> 00:50:42,160 >> [KONIEC ODTWARZANIE]