1 00:00:00,000 --> 00:00:02,916 2 00:00:02,916 --> 00:00:04,860 >> [MUSIK SPELA] 3 00:00:04,860 --> 00:00:10,210 4 00:00:10,210 --> 00:00:13,350 >> DAVID MALAN: Detta är CS50, och detta är början på veckan åtta. 5 00:00:13,350 --> 00:00:17,510 Och vi är så glada att välkomna tillbaka, stor överraskning, CS50 egen Ramon 6 00:00:17,510 --> 00:00:22,160 Galvan, en stigande senior som har varit spendera de senaste månaderna 7 00:00:22,160 --> 00:00:26,190 sedan juli i LA, i Hollywood, bokstavligen arbetar på en helt ny TV 8 00:00:26,190 --> 00:00:31,930 show kallad Colony, skaparen av vilka är faktiskt en Harvard alun själv. 9 00:00:31,930 --> 00:00:36,610 Och så vi är mycket glada över att se detta debut på USA nätverket i januari. 10 00:00:36,610 --> 00:00:40,370 Så håll ögonen öppna för det, och för mer Ramon för de kommande veckorna. 11 00:00:40,370 --> 00:00:42,550 >> Nu vet att slutet är nära. 12 00:00:42,550 --> 00:00:47,400 Och vad detta betyder är att det inte finns så mycket kvar av CS50, sorgligt att säga. 13 00:00:47,400 --> 00:00:49,400 Vi har bara tre problem uppsättningar left-- det finns 14 00:00:49,400 --> 00:00:52,510 problemet set six-- som är i dina händer nu eller snart kommer att vara, 15 00:00:52,510 --> 00:00:56,080 på grund av senare week-- är tänkt att överbrygga våra världar kommandoraden, där 16 00:00:56,080 --> 00:00:59,450 Vi har tillbringat större delen av vår tid med hjälp C, och världen av webbprogrammering. 17 00:00:59,450 --> 00:01:02,350 Tja, ser du en hel del idéer lånat från kommandoraden arbete, 18 00:01:02,350 --> 00:01:04,560 men också en hel del nytt och intressanta idéer 19 00:01:04,560 --> 00:01:07,929 som också kommer att vara förbunden för mobila applikationer och för teknik, 20 00:01:07,929 --> 00:01:10,470 mer allmänt, som du killar är alla bekanta idag 21 00:01:10,470 --> 00:01:12,090 på bärbara datorer och telefoner och liknande. 22 00:01:12,090 --> 00:01:15,220 >> Så du kommer inte att genomföra en webbsida eller en webbplats 23 00:01:15,220 --> 00:01:17,620 per se, men en verklig webbserver. 24 00:01:17,620 --> 00:01:21,590 Du kommer att skriva resten av en webbserver skriven i C, vars syfte i livet 25 00:01:21,590 --> 00:01:25,410 är att ta emot HTTP-begäranden, dessa virtuella kuvert vi hålla talar 26 00:01:25,410 --> 00:01:29,780 om, och faktiskt reagerar antingen med vissa statiska content-- som en prick HTML 27 00:01:29,780 --> 00:01:32,310 fil eller en punkt JPEG- eller någon annan antal filer, 28 00:01:32,310 --> 00:01:37,070 eller ens en PHP-fil där din webb servern kommer att tolka det PHP 29 00:01:37,070 --> 00:01:38,332 kod och spotta ut resultaten. 30 00:01:38,332 --> 00:01:40,540 Nu har vi gett dig med en hel del ram 31 00:01:40,540 --> 00:01:43,100 för det-- verkligen distributions kod för problem 32 00:01:43,100 --> 00:01:47,496 set sex är över 1000 rader lång, en Många som är kommentarer, att vara fair-- 33 00:01:47,496 --> 00:01:49,370 men detta är egentligen menade att vara en möjlighet 34 00:01:49,370 --> 00:01:52,570 att få händerna smutsiga dykning i ett ganska stort projekt 35 00:01:52,570 --> 00:01:55,570 att vi har mycket specifikt huggen ur bitar av för dig, 36 00:01:55,570 --> 00:01:59,046 så det verkligen när du avslutar CS50 och ange den verkliga världen av programmering 37 00:01:59,046 --> 00:02:00,920 och vill plaska i valfritt antal projekt, 38 00:02:00,920 --> 00:02:03,253 du har mycket större komfort ladda ner någon källa 39 00:02:03,253 --> 00:02:05,020 kod, vissa öppen källkod projicera på webben, 40 00:02:05,020 --> 00:02:08,174 och dykning i och göra ändringar som du tycker passar. 41 00:02:08,174 --> 00:02:11,340 Problem set sju kommer att vara om gör din egen web-baserad applikation 42 00:02:11,340 --> 00:02:14,140 som tar dynamisk ingång och producerar dynamisk effekt i form 43 00:02:14,140 --> 00:02:16,920 av en etrade.com liknande webbplats. 44 00:02:16,920 --> 00:02:20,800 Och problemet set åtta kommer att fokusera på ännu annat språk kallas JavaScript. 45 00:02:20,800 --> 00:02:24,170 >> Under tiden den slutliga Projektet är på horisonten. 46 00:02:24,170 --> 00:02:26,800 Den så kallade pre-förslag beror en vecka från och med idag. 47 00:02:26,800 --> 00:02:29,930 Pre-proposal-- per specifikationen, som är på CS50: s website-- 48 00:02:29,930 --> 00:02:33,260 är en ganska avslappnad möjlighet för att skicka en ganska kortfattad email 49 00:02:33,260 --> 00:02:35,170 till din undervisning stipendiaten bara för att underrätta honom 50 00:02:35,170 --> 00:02:38,250 eller henne om vad du tänker, till använda honom eller henne som bollplank. 51 00:02:38,250 --> 00:02:40,980 Och har en sanity check-- oavsett om du funderar 52 00:02:40,980 --> 00:02:43,210 om bita av för mycket eller kanske för lite, 53 00:02:43,210 --> 00:02:46,480 eller kanske du har ingen aning om och vill engagera sig i en konversation. 54 00:02:46,480 --> 00:02:48,480 >> Därefter är ett förslag och statusrapport, 55 00:02:48,480 --> 00:02:51,860 den så kallade CS50 hackathon här i Cambridge för Harvard och Yale studenter 56 00:02:51,860 --> 00:02:52,362 likadana. 57 00:02:52,362 --> 00:02:54,320 Den slutliga projektet genomförandet är sedan rakt. 58 00:02:54,320 --> 00:02:59,290 Och sedan en CS50 rättvis här, i Cambridge, samt en annan i New Haven. 59 00:02:59,290 --> 00:03:02,500 Så förslaget, ta en titt på hemsidan för dessa uppgifter. 60 00:03:02,500 --> 00:03:06,530 >> Men mer spännande är också en möjlighet att få händerna smutsiga, 61 00:03:06,530 --> 00:03:09,350 och era sinnen öppna för en hel gäng ämnen och verktyg 62 00:03:09,350 --> 00:03:12,920 och tekniker som är underordnade till kursen kärn kursplan, 63 00:03:12,920 --> 00:03:14,810 men icke desto mindre relaterade. 64 00:03:14,810 --> 00:03:18,400 Och även underbar språngbrädor till gör riktigt cool slut projekt som 65 00:03:18,400 --> 00:03:22,020 går långt utöver material vi har täckt formellt problem sätter eller föreläsning. 66 00:03:22,020 --> 00:03:24,446 Så gå till CS50: s hemsida för hela listan av seminarier. 67 00:03:24,446 --> 00:03:26,070 Om du inte registrerar ännu, det är bra. 68 00:03:26,070 --> 00:03:29,860 Gå vidare och registrera dig stilla och vi kommer följa upp med en live streaming länk, 69 00:03:29,860 --> 00:03:31,844 dag och tid finns på webbplatsen. 70 00:03:31,844 --> 00:03:33,760 Och allt kommer att vara registreras och sätta på nätet 71 00:03:33,760 --> 00:03:35,800 Om du inte kan göra vissa dagar och tider. 72 00:03:35,800 --> 00:03:39,380 >> När det gäller vad som ligger framför thereafter-- bra, Naturligtvis finns det CS50 hackathon. 73 00:03:39,380 --> 00:03:43,560 Detta foto, minns, från vecka noll tas runt 04:00 en kväll i år tidigare. 74 00:03:43,560 --> 00:03:46,900 Den CS50 mässan, vilket i sin tur kommer att äga rum i båda städerna. 75 00:03:46,900 --> 00:03:49,760 Och sedan, bara för att plantera frö, även om vi fortfarande 76 00:03:49,760 --> 00:03:54,080 har en månad plus kvar av terminen, om du vill gå med CS50 egen undervisning 77 00:03:54,080 --> 00:03:56,770 personal, och du vill starta funderar på att bli en CA, 78 00:03:56,770 --> 00:03:59,550 eller undervisning karl, vet att Vi börjar prata mer om det 79 00:03:59,550 --> 00:04:00,630 senare den här terminen. 80 00:04:00,630 --> 00:04:03,470 Men på bilden är de flesta av årets lag. 81 00:04:03,470 --> 00:04:06,950 >> Och så, PHP-- och jag var så ledsen förra veckan att [? Allyse?] Vänligt 82 00:04:06,950 --> 00:04:09,370 gick till insatser för att få oss dessa underbara rekvisita 83 00:04:09,370 --> 00:04:11,720 att jag inte sluta använda, så det egentligen bara såg lite dum 84 00:04:11,720 --> 00:04:15,160 att vi hade en spade sitter här hela dag i onsdags, och en liten sked. 85 00:04:15,160 --> 00:04:17,709 Men detta var min metafor sätt att försöka måla 86 00:04:17,709 --> 00:04:21,600 bilden av varför vi övergår från C till ett språk som PHP. 87 00:04:21,600 --> 00:04:25,480 Och samma kan sägas om alla Antalet languages-- Java, Python, Ruby 88 00:04:25,480 --> 00:04:31,270 eller knippen mot andra, men medan i C, till exempel, att skriva ett program i C 89 00:04:31,270 --> 00:04:34,050 kan typiskt vara ta en sked så här 90 00:04:34,050 --> 00:04:36,770 och att gräva ett hål i marken, i sand eller smuts. 91 00:04:36,770 --> 00:04:39,770 PHP kan du ta mycket större inslag av problemet, 92 00:04:39,770 --> 00:04:42,842 skriva mycket mindre kod med användning av en betydligt mindre verktyg, 93 00:04:42,842 --> 00:04:45,050 eftersom det finns så mycket mer funktionalitet pusslas in. 94 00:04:45,050 --> 00:04:47,633 >> Nu, om vi var verkligen dramatiskt, Vi skulle ha något att skotta 95 00:04:47,633 --> 00:04:48,760 här, men så var det. 96 00:04:48,760 --> 00:04:51,370 Under tiden, den andra metafor vi kom upp med 97 00:04:51,370 --> 00:04:53,770 är, naturligtvis, du kan använda något som en skiftnyckel 98 00:04:53,770 --> 00:04:56,610 hamra i något som liknar en spik. 99 00:04:56,610 --> 00:04:58,980 Men naturligtvis, den högra verktyg för användning går 100 00:04:58,980 --> 00:05:01,360 att vara inte så mycket språk som kallas C-- 101 00:05:01,360 --> 00:05:03,590 och nu har jag bara irriterad [? Sanders,?] Förmodligen, 102 00:05:03,590 --> 00:05:07,890 Vi kommer att fixa det later-- så rätt verktyg att använda ofta 103 00:05:07,890 --> 00:05:09,640 kommer inte att vara Detta lägsta verktyget nivå. 104 00:05:09,640 --> 00:05:13,720 Och faktiskt, är inte ett språk C som de flesta av er någonsin kommer att använda, 105 00:05:13,720 --> 00:05:15,590 eller nödvändigtvis använda igen. 106 00:05:15,590 --> 00:05:18,350 >> Och faktiskt, lite secret-- den enda gången 107 00:05:18,350 --> 00:05:23,160 Jag använder C själv är ganska mycket mellan September och december varje höst 108 00:05:23,160 --> 00:05:23,870 termin. 109 00:05:23,870 --> 00:05:25,790 Och det beror på att vi använda den som en möjlighet 110 00:05:25,790 --> 00:05:27,852 att lära grunderna programmering, 111 00:05:27,852 --> 00:05:29,810 och med det dator kunskap, data 112 00:05:29,810 --> 00:05:32,435 strukturer, algoritmer och like-- men mycket snabbt kommer du 113 00:05:32,435 --> 00:05:35,010 se nu att syntaxen och idéerna bakom C 114 00:05:35,010 --> 00:05:37,530 är så underbart överföras till modernare 115 00:05:37,530 --> 00:05:41,130 språk högre nivå, som PHP och Python och Perl och Java 116 00:05:41,130 --> 00:05:46,750 och Objective-C- faktiskt, inte så mycket Objective-C- men Swift, dessa nyare 117 00:05:46,750 --> 00:05:50,010 språk som många av er kommer sedan plaska med dig slutprojekt. 118 00:05:50,010 --> 00:05:55,070 >> Så utan vidare, låt oss faktiskt Använd PHP för att lösa vissa problem. 119 00:05:55,070 --> 00:06:00,230 Minns att tidigt, sista vecka, vi bara används CS50 IDE, 120 00:06:00,230 --> 00:06:02,990 Vi skrev ett dinky litet program som bara sa "Hello world." 121 00:06:02,990 --> 00:06:05,680 Och då jag sparade den i en fil som heter hello.php. 122 00:06:05,680 --> 00:06:07,280 Och då jag körde detta kommando. 123 00:06:07,280 --> 00:06:08,080 >> Och varför? 124 00:06:08,080 --> 00:06:09,900 På engelska, vad som händer här? 125 00:06:09,900 --> 00:06:12,760 Vad gjorde jag när Jag sprang detta kommando? 126 00:06:12,760 --> 00:06:13,405 >> Yeah? 127 00:06:13,405 --> 00:06:16,572 >> PUBLIK: Det finns någon funktion PHP som läser vad in-- förstår att. 128 00:06:16,572 --> 00:06:19,696 DAVID MALAN: Bra, det finns någon funktion PHP-- och låt mig vara mer specifik, 129 00:06:19,696 --> 00:06:21,810 det finns ett program som heter PHP, alias 130 00:06:21,810 --> 00:06:25,872 En tolk, som förstår innehållet i hello.php, 131 00:06:25,872 --> 00:06:27,830 och tolkar det uppifrån botten, vänster till höger, 132 00:06:27,830 --> 00:06:29,590 och gör vad de kommandon säger. 133 00:06:29,590 --> 00:06:33,320 Kommandona i hello.php, naturligtvis, bara källa code-- funktioner 134 00:06:33,320 --> 00:06:35,750 och variabler och loopar och liknande, som vi själva 135 00:06:35,750 --> 00:06:37,460 har börjat skriva i PHP. 136 00:06:37,460 --> 00:06:40,240 >> Men till skillnad från C, som är en kompilerad språk, 137 00:06:40,240 --> 00:06:42,810 PHP du bara skriva det, och köra det. 138 00:06:42,810 --> 00:06:46,420 Du hoppa över den mellansteg av omvandla den till ettor och nollor, 139 00:06:46,420 --> 00:06:47,790 och sedan köra den. 140 00:06:47,790 --> 00:06:50,510 Så vad är en Fördelen med detta? 141 00:06:50,510 --> 00:06:52,690 Varför vi hoppar över steget? 142 00:06:52,690 --> 00:06:55,238 Varför modernare språk tenderar att hoppa över det här steget? 143 00:06:55,238 --> 00:06:58,880 144 00:06:58,880 --> 00:07:01,220 Vilken var den nytta? 145 00:07:01,220 --> 00:07:02,080 >> Eller bara intuitivt? 146 00:07:02,080 --> 00:07:04,200 Även om vi har inte skrivit mycket PHP före, 147 00:07:04,200 --> 00:07:07,210 vad är fördelaktigt om inte sammanställa koden tror du? 148 00:07:07,210 --> 00:07:08,520 Nej? 149 00:07:08,520 --> 00:07:09,610 Inte begå? 150 00:07:09,610 --> 00:07:11,350 Skrapa huvudet? 151 00:07:11,350 --> 00:07:12,614 Yeah. 152 00:07:12,614 --> 00:07:13,600 >> PUBLIK: Mer dynamisk. 153 00:07:13,600 --> 00:07:14,683 >> DAVID MALAN: Mer dynamisk? 154 00:07:14,683 --> 00:07:16,032 Vad menar du? 155 00:07:16,032 --> 00:07:17,000 >> PUBLIK: [OHÖRBAR] 156 00:07:17,000 --> 00:07:20,349 157 00:07:20,349 --> 00:07:22,390 DAVID MALAN: OK, bra, så beroende på ingångs, 158 00:07:22,390 --> 00:07:23,470 du behöver inte kompilera det varje gång. 159 00:07:23,470 --> 00:07:24,990 Och det är verkligen så enkelt som that-- vad 160 00:07:24,990 --> 00:07:26,990 är poängen med att fortsätta att kompilera din kod? 161 00:07:26,990 --> 00:07:29,480 Detta är bara ett steg som är making-- detta kräver, 162 00:07:29,480 --> 00:07:31,900 Under de senaste veckor, dubbelt så många steg 163 00:07:31,900 --> 00:07:33,820 som bara kör ditt program. 164 00:07:33,820 --> 00:07:36,940 Det har varit bra att se att du se några felmeddelanden och så vidare, 165 00:07:36,940 --> 00:07:38,720 men det är fortfarande bara en irriterande steg. 166 00:07:38,720 --> 00:07:41,810 >> Och så programmerare insåg över tiden, varför inte vi 167 00:07:41,810 --> 00:07:45,327 börja skriva språk som inte behöver det ganska mekaniskt steg, 168 00:07:45,327 --> 00:07:47,160 så att kan bara skriva din kod och köra den. 169 00:07:47,160 --> 00:07:48,920 Men vad var priset som vi såg vi betalat 170 00:07:48,920 --> 00:07:50,910 förra veckan, med ett särskilt exempel? 171 00:07:50,910 --> 00:07:51,650 Ja? 172 00:07:51,650 --> 00:07:52,370 >> Fart. 173 00:07:52,370 --> 00:07:54,690 Så [? Vad är?] tolkar lite långsammare, 174 00:07:54,690 --> 00:07:57,330 att nollor och ettor är trevlig och snabb för en dator 175 00:07:57,330 --> 00:08:00,070 att förstå, eftersom Intel CPU, eller vad det är, 176 00:08:00,070 --> 00:08:03,070 bara förstår vad som händer på dessa mönster av bitar. 177 00:08:03,070 --> 00:08:05,370 Medan en tolk är ett program som verkligen 178 00:08:05,370 --> 00:08:07,980 måste läsa Ascii källan kod som du har skrivit, 179 00:08:07,980 --> 00:08:12,700 och konvertera det, så att säga, eller räkna ut hur det omvandlar slutligen 180 00:08:12,700 --> 00:08:13,525 till nollor och ettor. 181 00:08:13,525 --> 00:08:15,650 Så det tar bara lite bit av ett prestations träff. 182 00:08:15,650 --> 00:08:16,858 Så det är lite av en kompromiss. 183 00:08:16,858 --> 00:08:21,570 Nu om vi gör detta över här, låt mig gå vidare och göra ett exempel på följande sätt. 184 00:08:21,570 --> 00:08:26,610 Om jag går in här, ny fil, jag kommer att spara detta igen är hello.php. 185 00:08:26,610 --> 00:08:31,450 Och nu ska jag gå vidare och säger, "print hello world" - 186 00:08:31,450 --> 00:08:35,130 och påminna om att jag kan använda skriva ut, gör jag inte måste använda print-F. Och nu här nere, 187 00:08:35,130 --> 00:08:42,039 om jag gör PHP av hello.php, huh-- jag inte verkar ha tolkat det. 188 00:08:42,039 --> 00:08:43,412 Vad gjorde jag för fel? 189 00:08:43,412 --> 00:08:44,710 >> PUBLIK: De vinklade armband. 190 00:08:44,710 --> 00:08:47,015 >> DAVID MALAN: Ja, du behöver denna vinkel fäste där uppe. 191 00:08:47,015 --> 00:08:49,390 Så det är ganska irriterande, men du vänjer sig snabbt. 192 00:08:49,390 --> 00:08:53,500 Om jag måste skriva PHP-kod, jag i allmänhet måste tala om för programmet, 193 00:08:53,500 --> 00:08:56,950 eller berätta tolken, hey PHP, här kommer några PHP-kod. 194 00:08:56,950 --> 00:09:00,440 Och sedan för bra åtgärd, skulle jag stäng inte detta, utan snarare 195 00:09:00,440 --> 00:09:03,740 med bara frågetecken vinkel fäste, så att nu här nere, 196 00:09:03,740 --> 00:09:06,840 om jag kör detta igen, nu Jag får det önskade resultatet. 197 00:09:06,840 --> 00:09:09,820 >> Nu göra en liten optimering, bara så att du har sett det förut. 198 00:09:09,820 --> 00:09:14,040 Detta är typ av irriterande att jag måste köra PHP rymden hello.php, 199 00:09:14,040 --> 00:09:16,060 eftersom i det förflutna jag kan bara skriva dot slash 200 00:09:16,060 --> 00:09:17,560 programmets namn, som är ganska trevligt. 201 00:09:17,560 --> 00:09:19,420 Det är lite av en bättre användarupplevelse. 202 00:09:19,420 --> 00:09:24,160 >> Så visar det sig kan du göra det här i PHP med following-- jag 203 00:09:24,160 --> 00:09:28,780 kan använda denna ganska kryptiskt besvärjelse på toppen här, 204 00:09:28,780 --> 00:09:31,740 som i allmänhet kallas en Shebang, varvid detta är en skarp symbol, 205 00:09:31,740 --> 00:09:34,270 så att säga, är detta en smäll eller ett utropstecken. 206 00:09:34,270 --> 00:09:38,490 Och detta är nu vägen till ett program på en typisk Linux-system som 207 00:09:38,490 --> 00:09:41,500 kallas miljö, eller env. 208 00:09:41,500 --> 00:09:43,920 Och detta line-- lång historia short-- linje man bara 209 00:09:43,920 --> 00:09:48,710 säger hej dator, hitta PHP tolk för mig i miljön, 210 00:09:48,710 --> 00:09:50,610 hitta den i ditt minne, så att säga. 211 00:09:50,610 --> 00:09:54,130 >> Och vad är trevligt nu, att om jag går här nere, 212 00:09:54,130 --> 00:09:57,750 Jag kan göra punkt snedstreck hello dot php, eller-- hmm. 213 00:09:57,750 --> 00:09:59,000 Åtkomst nekad. 214 00:09:59,000 --> 00:10:02,350 Tja, kommer du att se ännu mer av detta med problem set sju, om du 215 00:10:02,350 --> 00:10:04,060 inte redan har gjort, med behörigheterna. 216 00:10:04,060 --> 00:10:06,510 Det visar sig att jag behöver att utföra detta kommando 217 00:10:06,510 --> 00:10:10,779 kallas [? chamod?] för förändring mode-- ett plus x hello.php. 218 00:10:10,779 --> 00:10:13,820 Jag behöver [OHÖRBAR] detta ett ytterligare steg som berättar min dator, 219 00:10:13,820 --> 00:10:16,400 göra hello.php körbar. 220 00:10:16,400 --> 00:10:21,310 Och nu titta på vad happens-- dot snedstreck hello.php, bara körs. 221 00:10:21,310 --> 00:10:23,310 Jag behöver inte ange tolken längre. 222 00:10:23,310 --> 00:10:26,680 Och jag kan göra det ännu vackrare, fortfarande, om jag byter namn den här grejen. 223 00:10:26,680 --> 00:10:30,570 Om jag flyttar hello.php bara Hello-- så märker i det övre vänstra, 224 00:10:30,570 --> 00:10:32,860 programmets namn är faktiskt nu bara Hej. 225 00:10:32,860 --> 00:10:37,300 Nu kan jag få det att se ut som en C-program, även om det är skrivet i PHP-- 226 00:10:37,300 --> 00:10:39,210 eller uppriktigt valfritt antal av andra språk. 227 00:10:39,210 --> 00:10:41,480 >> Så marginell förbättring, ingen funktionell skillnad. 228 00:10:41,480 --> 00:10:44,460 Men det är bara en liten nyfikenhet nu, så att du kan skriva program 229 00:10:44,460 --> 00:10:48,989 på alla språk, och användaren inte måste veta eller bry sig om vad de är. 230 00:10:48,989 --> 00:10:51,030 Nåväl, låt oss titta på ett mer övertygande exempel nu 231 00:10:51,030 --> 00:10:52,850 att jag piskade upp i förväg. 232 00:10:52,850 --> 00:10:54,955 Och detta kallas quote.php. 233 00:10:54,955 --> 00:10:56,740 Och det är tillgängligt på nätet. 234 00:10:56,740 --> 00:11:00,299 Och märker att det är ganska short-- men det är ett kommandorad program som är 235 00:11:00,299 --> 00:11:02,840 kommer att titta upp aktiekurserna för mig, som faktiskt går 236 00:11:02,840 --> 00:11:04,230 att vara relevant för problembild sju. 237 00:11:04,230 --> 00:11:05,396 >> Så låt oss se vad jag gör. 238 00:11:05,396 --> 00:11:08,640 Högst upp har jag fått öppna fäste frågetecken PHP. 239 00:11:08,640 --> 00:11:13,372 Sedan har jag fått denna linje, där jag är kräver en fil som heter functions.php-- 240 00:11:13,372 --> 00:11:15,080 vi kommer att se mer om detta i en bit, 241 00:11:15,080 --> 00:11:17,340 men detta är som C: s version av skarpa innefattar, 242 00:11:17,340 --> 00:11:19,090 vart vill du gå inkluderar en annan fil. 243 00:11:19,090 --> 00:11:23,720 PHP kallar det kräver, även om det även har en inkludera funktionen. 244 00:11:23,720 --> 00:11:26,861 Och det visar sig att function.php är bara något jag skrev innan klassen. 245 00:11:26,861 --> 00:11:29,860 Jag satte den i samma katalog, eftersom Jag ville faktor ut någon kod 246 00:11:29,860 --> 00:11:31,800 att vi kanske vill använda någon annanstans. 247 00:11:31,800 --> 00:11:34,560 >> Under tiden kan du förmodligen sluta vad som händer här. 248 00:11:34,560 --> 00:11:39,200 Detta är lite annorlunda från C- men Vad menar jag med att säkerställa korrekt användning? 249 00:11:39,200 --> 00:11:41,180 Översätt detta mer tekniskt. 250 00:11:41,180 --> 00:11:45,950 Under vilka omständigheter är jag avsluta programmet, eller spännande? 251 00:11:45,950 --> 00:11:47,074 Yeah? 252 00:11:47,074 --> 00:11:47,990 >> PUBLIK: När du inte har två kommandoradsargument. 253 00:11:47,990 --> 00:11:49,480 >> DAVID MALAN: När jag inte har att kommandoradsargumenten. 254 00:11:49,480 --> 00:11:52,396 Och kom ihåg att en av dem argument är programmets själva namnet. 255 00:11:52,396 --> 00:11:55,340 Och den andra kommer att vara ett annat ord jag skriver efter prompten. 256 00:11:55,340 --> 00:11:57,460 Så precis som C, här är mitt sätt att kontrollera, 257 00:11:57,460 --> 00:12:00,022 gjorde användaren samarbeta och köra programmet som jag tänkt? 258 00:12:00,022 --> 00:12:01,730 Nu, det finns något lite annorlunda 259 00:12:01,730 --> 00:12:04,020 med C- först av allt vi har denna dollartecken, 260 00:12:04,020 --> 00:12:07,710 och vad en dollar logga betecknar i PHP? 261 00:12:07,710 --> 00:12:08,440 Bara en variabel. 262 00:12:08,440 --> 00:12:11,731 Det är all-- bara en variabel, följt av vad du vill verkligen kalla det. 263 00:12:11,731 --> 00:12:14,000 Observera att det är något saknas från min PHP-program, 264 00:12:14,000 --> 00:12:18,210 precis som det saknades sista vecka, jämfört med C, vilket är vad? 265 00:12:18,210 --> 00:12:21,620 >> En typer, men också något annat. 266 00:12:21,620 --> 00:12:26,409 Det finns ingen något function-- huvudsakliga funktion. 267 00:12:26,409 --> 00:12:27,450 Det finns ingen huvudfunktion. 268 00:12:27,450 --> 00:12:29,680 Du börjar bara skriva din kod utan att behöva 269 00:12:29,680 --> 00:12:32,790 att oroa sig en ganska godtycklig konvention namnge någon standard 270 00:12:32,790 --> 00:12:33,880 Funktionen viktigaste. 271 00:12:33,880 --> 00:12:36,720 Så arg C är bara riktigt en global variabel 272 00:12:36,720 --> 00:12:39,049 att tolken gör tillgängliga för mig. 273 00:12:39,049 --> 00:12:40,090 Nu är detta intressant. 274 00:12:40,090 --> 00:12:41,140 Så slå upp saker. 275 00:12:41,140 --> 00:12:43,370 Dollartecken lager är på vänster, det är min variabel. 276 00:12:43,370 --> 00:12:45,120 På höger sida, Det är tydligen 277 00:12:45,120 --> 00:12:50,270 en funktion i PHP som kallas lookup som Jag passerar min sista kommandorad 278 00:12:50,270 --> 00:12:51,902 argument att-- vad ordet är. 279 00:12:51,902 --> 00:12:53,610 Och vi får se hur detta arbetar i ett ögonblick. 280 00:12:53,610 --> 00:12:55,380 >> Och sedan slutligen jag rapportera priset. 281 00:12:55,380 --> 00:12:58,650 Jag skriva ut en andel av en sådan och sådan. 282 00:12:58,650 --> 00:13:02,082 Och kom ihåg, detta är den sätt på PHP-- ett sätt i PHP-- 283 00:13:02,082 --> 00:13:04,290 där du inte behöver göra dollartecken S längre. 284 00:13:04,290 --> 00:13:06,782 Du kan bara använda klammerparenteserna och koppla in någon variabel. 285 00:13:06,782 --> 00:13:09,240 Du behöver inte oroa dig för använder printf på samma sätt. 286 00:13:09,240 --> 00:13:13,530 >> Och som en sidoreplik, när du sätter en variabel insidan av citattecken så här, 287 00:13:13,530 --> 00:13:17,370 du använder en fin teknik kallas variabel interpolation. 288 00:13:17,370 --> 00:13:20,380 Det betyder bara att koppla variabeln i här. 289 00:13:20,380 --> 00:13:23,760 Och som en sidoreplik, en del av er som kommer från andra program bakgrunder, 290 00:13:23,760 --> 00:13:26,960 Du får inte använda apostrof runt strängar för att göra detta. 291 00:13:26,960 --> 00:13:30,290 Du måste använda citationstecken för variabel interpolation att arbeta. 292 00:13:30,290 --> 00:13:32,740 Annars kommer du bokstavligen se dessa klammerparenteserna. 293 00:13:32,740 --> 00:13:34,500 >> Så slutligen, låt oss gå vidare och köra. 294 00:13:34,500 --> 00:13:36,690 Låt mig göra min terminal lite större. 295 00:13:36,690 --> 00:13:41,940 Låt mig gå vidare och köra insidan av min offert katalog. 296 00:13:41,940 --> 00:13:46,950 [? CDsource?] [? AM?] [? citat?] PHP citat dot PHP, 297 00:13:46,950 --> 00:13:50,290 och jag kommer att söka efter något som GOOG, som är dess ticker symbol, 298 00:13:50,290 --> 00:13:55,510 och en del av sitt nya namn, Alphabet Inc, kostar $ 717 per dag. 299 00:13:55,510 --> 00:13:58,680 Okej, om vi vill köra igen, någon 300 00:13:58,680 --> 00:14:02,600 har en annan börsinformation de vill titta upp? 301 00:14:02,600 --> 00:14:06,770 >> Microsoft tror jag är här, MSFT-- $ 53. 302 00:14:06,770 --> 00:14:09,720 Jag tror Yahoo är kanske det. 303 00:14:09,720 --> 00:14:12,130 Och Facebook är det. 304 00:14:12,130 --> 00:14:13,740 >> Så vad är det här programmet gör? 305 00:14:13,740 --> 00:14:16,306 Det magiska verkar bäddas i den uppslagsfunktion. 306 00:14:16,306 --> 00:14:17,430 Så låt oss ta en snabb titt. 307 00:14:17,430 --> 00:14:21,815 >> Det visar sig att inte komma med PHP, det är i functions.php. 308 00:14:21,815 --> 00:14:23,690 Och vi kommer inte att gå igenom detta i detalj, 309 00:14:23,690 --> 00:14:28,040 men märker avgörande ordet här är att på ledningen sex av functions.php-- 310 00:14:28,040 --> 00:14:29,440 Jag bokstavligen säger funktion. 311 00:14:29,440 --> 00:14:31,050 Jag ange namnet på min funktion. 312 00:14:31,050 --> 00:14:34,330 Jag ange någon argument, eller parametrar, 313 00:14:34,330 --> 00:14:36,480 Jag vill att funktionen att take-- inga slag. 314 00:14:36,480 --> 00:14:37,580 Och då jag genomföra det. 315 00:14:37,580 --> 00:14:39,240 >> Och jag ska våg min hand vid genomförandet, 316 00:14:39,240 --> 00:14:42,115 eftersom det är ganska avancerad höger nu, men vi får se det igen faktiskt 317 00:14:42,115 --> 00:14:44,700 i en vecka i problem set sju. 318 00:14:44,700 --> 00:14:47,490 Men jag kan städa upp det också. 319 00:14:47,490 --> 00:14:49,590 Jag ingår också i dagens kod en version 320 00:14:49,590 --> 00:14:52,340 citat, som inte har någon punkt PHP-fil. 321 00:14:52,340 --> 00:14:57,270 För vad är förmodligen på toppen av program som kallas bara citera? 322 00:14:57,270 --> 00:15:00,140 Det så kallade shebang-- den ganska kryptisk besvärjelse 323 00:15:00,140 --> 00:15:04,590 som säger att hitta PHP och sedan köra det på min kod här. 324 00:15:04,590 --> 00:15:07,360 >> Okej, så som ger oss där vi slutade 325 00:15:07,360 --> 00:15:09,560 sista time-- än med några mer avancerade exempel. 326 00:15:09,560 --> 00:15:13,980 Några frågor hittills om PHP eller vad vi gör? 327 00:15:13,980 --> 00:15:15,570 No-- okej. 328 00:15:15,570 --> 00:15:16,180 Yeah? 329 00:15:16,180 --> 00:15:19,610 >> PUBLIK: Inside the HTML-filer, gör du-- 330 00:15:19,610 --> 00:15:22,226 [? gör du ?] [? bara kalla det?] en [OHÖRBAR] PHP-fil? 331 00:15:22,226 --> 00:15:23,350 DAVID MALAN: Bra fråga. 332 00:15:23,350 --> 00:15:26,070 I en webb sammanhang, vilket vi är bokstavligen på väg att övergå till, 333 00:15:26,070 --> 00:15:28,028 du inte använder den så kallade shebang vid toppen, 334 00:15:28,028 --> 00:15:31,980 eftersom banan server-- ofta en program som heter Apache eller Microsoft 335 00:15:31,980 --> 00:15:37,470 IIS, Internet Information Server, eller valfritt antal andra webbserverprogramvaran, 336 00:15:37,470 --> 00:15:40,636 vet att när det ser en prick PHP-fil, att det 337 00:15:40,636 --> 00:15:42,010 bör köra tolken på den. 338 00:15:42,010 --> 00:15:43,468 Det ser inte på det första raden. 339 00:15:43,468 --> 00:15:45,580 Så denna första raden trick är bara när du är 340 00:15:45,580 --> 00:15:48,330 skriver kommandorad programs-- som vi kommer inte att göra super ofta, 341 00:15:48,330 --> 00:15:52,510 men det är vårt sätt att överbrygga våra C exempel för nu vår PHP. 342 00:15:52,510 --> 00:16:00,680 >> Så låt oss verkligen överbrygga denna värld från kommandoraden världen webben 343 00:16:00,680 --> 00:16:02,230 genom att göra följande. 344 00:16:02,230 --> 00:16:05,090 Låt mig gå vidare och dra över för bara ett ögonblick här. 345 00:16:05,090 --> 00:16:09,940 Så om vi har en webbserver, eller snarare om vi har min laptop hit, 346 00:16:09,940 --> 00:16:11,280 som jag ska dra ut så här. 347 00:16:11,280 --> 00:16:14,250 Och här har vi Internet i någon form. 348 00:16:14,250 --> 00:16:18,210 Och sedan över här, vi har en server i en building-- 349 00:16:18,210 --> 00:16:20,760 detta är hur internet works-- och här 350 00:16:20,760 --> 00:16:23,120 är en server med några lampor kanske. 351 00:16:23,120 --> 00:16:27,530 Vad som faktiskt händer mellan dessa två anslutningar? 352 00:16:27,530 --> 00:16:29,240 >> Så i denna byggnad är en webbserver. 353 00:16:29,240 --> 00:16:31,420 Det är bara en dator som kör vissa drift 354 00:16:31,420 --> 00:16:34,561 system-- kanske fri programvara som kallas Apache, som CS50 IDE körs. 355 00:16:34,561 --> 00:16:36,310 Så kan du faktiskt tänk på denna byggnad 356 00:16:36,310 --> 00:16:38,579 som den byggnad i som CSt0 IDE lagras. 357 00:16:38,579 --> 00:16:40,870 Det är där ni alla har konton, där ni alla 358 00:16:40,870 --> 00:16:43,130 har din egen webbserver kör, alla ni 359 00:16:43,130 --> 00:16:45,730 har egna unika webbadresser, som vi började diskutera, 360 00:16:45,730 --> 00:16:47,280 och du kommer att se mer i P. satt sex. 361 00:16:47,280 --> 00:16:49,450 >> Här är min laptop någonstans annanstans på internet. 362 00:16:49,450 --> 00:16:54,550 Och så när jag besöker en webbadress som tillhör för mig, är att internet trafik som går 363 00:16:54,550 --> 00:16:58,360 över till servern, serverns tar emot en HTTP request-- 364 00:16:58,360 --> 00:17:02,900 som en get index.html och det är svara på den webbsidan. 365 00:17:02,900 --> 00:17:04,280 Så det är den allmänna paradigm. 366 00:17:04,280 --> 00:17:07,089 Medan allt upp fram till nu i dag, allt 367 00:17:07,089 --> 00:17:09,660 hände bara i gränserna för denna byggnad. 368 00:17:09,660 --> 00:17:12,910 Jag använde min bärbara dator, men Jag var ansluten till CS50 IDE, 369 00:17:12,910 --> 00:17:17,369 så alla dessa program jag kör var inne på den servern själv. 370 00:17:17,369 --> 00:17:22,660 >> Men nu, låt oss börja återanvända PHP att skriva några faktiska program som 371 00:17:22,660 --> 00:17:24,230 serveras upp av en webbserver. 372 00:17:24,230 --> 00:17:30,320 Och för att göra detta, kommer jag att gå i en massa exempel 373 00:17:30,320 --> 00:17:33,710 att införa denna idé här. 374 00:17:33,710 --> 00:17:38,500 Så det här är lite av en finare sätt att som beskriver en programmeringsparadigm. 375 00:17:38,500 --> 00:17:41,540 >> Och i själva verket som du avslutar CS50 eller arbete på examensarbeten, 376 00:17:41,540 --> 00:17:43,520 eller ta del följer på klass, börjar du 377 00:17:43,520 --> 00:17:45,740 att se att world-- särskilt efter att ha vuxit upp 378 00:17:45,740 --> 00:17:48,300 med språk som C som är super låga level-- 379 00:17:48,300 --> 00:17:51,290 inser att det är bättre sätt att skriva programvara. 380 00:17:51,290 --> 00:17:53,290 Det finns vissa mönster du kan följa, 381 00:17:53,290 --> 00:17:57,640 vissa sätt att organisera dina filer och sätt att namnge dina funktioner, 382 00:17:57,640 --> 00:18:00,300 så att lång historia kort, världen har kommit upp 383 00:18:00,300 --> 00:18:04,340 med en massa förkortningar och namn för metoder för programmering. 384 00:18:04,340 --> 00:18:06,260 Dessa är bara tekniker som du kan använda. 385 00:18:06,260 --> 00:18:09,660 >> Och en av dem kallas MVC, för Model View Controller. 386 00:18:09,660 --> 00:18:12,270 Och detta är bara för nu, en alltför komplicerad 387 00:18:12,270 --> 00:18:18,960 sätt att säga hur du ska lägga ut en PHP-baserad webbplats, i vårt fall. 388 00:18:18,960 --> 00:18:22,140 How do you organisera dina filer, hur gör du organisera din logik, 389 00:18:22,140 --> 00:18:26,220 på ett sätt som gör det lättare att skriva mer komplicerade webbplatser? 390 00:18:26,220 --> 00:18:28,550 Och faktiskt, vi ska snabbt dit med p-set sju. 391 00:18:28,550 --> 00:18:32,020 >> Så i en värld av MVC, du kommer att se att vår kod kan i allmänhet 392 00:18:32,020 --> 00:18:38,290 karakteriseras som antingen modellkoden, eller controller kod eller vykod. 393 00:18:38,290 --> 00:18:40,200 Och jag kommer att oversimplify den såsom follows-- 394 00:18:40,200 --> 00:18:42,074 regulatorn är hjärnan hos ditt program, 395 00:18:42,074 --> 00:18:44,100 Det är där alla intressant logik händer. 396 00:18:44,100 --> 00:18:46,110 Så allt vi har varit skriver hittills i klassen, 397 00:18:46,110 --> 00:18:48,210 är ungefär som controller code-- det kontrollerande 398 00:18:48,210 --> 00:18:50,585 ditt program, dina loopar, ditt villkor, dina funktioner 399 00:18:50,585 --> 00:18:52,100 och variabler och allt det där. 400 00:18:52,100 --> 00:18:56,160 >> Visningar, nu, kommer att vara lite tydligare i världen av webben. 401 00:18:56,160 --> 00:18:59,360 En vy är estetik på din webbplats. 402 00:18:59,360 --> 00:19:04,080 Det är vad användaren sees-- bilderna HTML tabeller, HTML-taggar, och alla 403 00:19:04,080 --> 00:19:08,220 av detta, alla av den fluffiga estetiska saker som inte är så svårt att skriva, 404 00:19:08,220 --> 00:19:11,380 men är precis vad du genererar, är den så kallade uppfattning estetik. 405 00:19:11,380 --> 00:19:13,880 Och modell, i slutändan, kommer vara databas stuff-- som 406 00:19:13,880 --> 00:19:16,510 vi börjar dyka in alla ju mer denna onsdag. 407 00:19:16,510 --> 00:19:19,740 Så controller är logiken, uppfattning är den estetiska grejer, 408 00:19:19,740 --> 00:19:23,500 och modellen kommer att vara där vi lagra våra faktiska uppgifter. 409 00:19:23,500 --> 00:19:26,410 >> Så låt oss titta på detta mer konkret med följande exempel. 410 00:19:26,410 --> 00:19:34,700 Jag kommer att gå in i min katalog här av dagens källa code-- vilka alla 411 00:19:34,700 --> 00:19:35,770 finns på nätet. 412 00:19:35,770 --> 00:19:37,800 Och jag kommer att gå in i version noll. 413 00:19:37,800 --> 00:19:41,500 Och här är-- låt oss kalla det version noll CS50: s webbplats. 414 00:19:41,500 --> 00:19:43,010 Det finns inte mycket här alls. 415 00:19:43,010 --> 00:19:46,810 Det är en mycket enkel webbsida som är förmodligen använda vad HTML tags-- bara 416 00:19:46,810 --> 00:19:48,970 gissa från tidigare exempel? 417 00:19:48,970 --> 00:19:49,890 >> Vad är det? 418 00:19:49,890 --> 00:19:53,920 H1-- förmodligen den stora djärva titel att logotypen uppe, CS50. 419 00:19:53,920 --> 00:19:55,080 Och vad är på lek? 420 00:19:55,080 --> 00:19:55,799 Yeah? 421 00:19:55,799 --> 00:19:56,840 PUBLIK: Punktlista. 422 00:19:56,840 --> 00:19:59,990 DAVID MALAN: Onumrerad list-- så UL tag och kanske ett par LI-taggar. 423 00:19:59,990 --> 00:20:01,840 Och om du inte kommer ihåg dessa, det ärligt spelar ingen roll. 424 00:20:01,840 --> 00:20:04,170 Dessa är fluffig slags genomförandet detaljer om HTML 425 00:20:04,170 --> 00:20:06,378 att du snabbt slå upp och du är tillbaka på vägen. 426 00:20:06,378 --> 00:20:10,040 Vi kommer att fokusera mer på program idéer som de saftigare bitar. 427 00:20:10,040 --> 00:20:12,890 >> Så låt oss bara ta en snabb se HTML-- och faktiskt 428 00:20:12,890 --> 00:20:16,880 om jag öppnar upp vyn källan här, Japp, Det är precis vad som händer här. 429 00:20:16,880 --> 00:20:18,440 Det finns en UL-tagg. 430 00:20:18,440 --> 00:20:20,630 Kapslade inuti det är att LI-taggar. 431 00:20:20,630 --> 00:20:24,470 Och då jag lånade URL av den faktiska planen här. 432 00:20:24,470 --> 00:20:27,570 >> Och sedan i lectures.php är tydligen 433 00:20:27,570 --> 00:20:31,640 annan dynamiskt genererad sida som kommer att ha, låt oss see-- ah, 434 00:20:31,640 --> 00:20:33,170 de första två veckorna av föreläsning. 435 00:20:33,170 --> 00:20:36,600 Så vecka noll och vecka ett, låt oss titta på this-- om jag visa sidans källkod, 436 00:20:36,600 --> 00:20:38,120 även super enkelt. 437 00:20:38,120 --> 00:20:42,430 Dessa leder till två sidor kallas week0.php och week1.php. 438 00:20:42,430 --> 00:20:44,040 Så anser nu vad som händer. 439 00:20:44,040 --> 00:20:50,630 >> När jag klickar på week0.php, min laptop gör en begäran om week0.php. 440 00:20:50,630 --> 00:20:53,700 441 00:20:53,700 --> 00:20:58,110 Webbservern, alias, CS50 IDE, tar emot den virtuella kuvert. 442 00:20:58,110 --> 00:21:01,040 Det ser ett meddelande som får week0.php. 443 00:21:01,040 --> 00:21:05,060 Det är då tolka filen, topp till botten, vänster för att right-- filen 444 00:21:05,060 --> 00:21:07,720 kallas week0.php-- och spotta ut resultaten. 445 00:21:07,720 --> 00:21:10,510 Så insidan av denna fil, week0.php, måste vara 446 00:21:10,510 --> 00:21:15,410 styrenheten logik som genererar denna HTML och vi kommer snart att se det. 447 00:21:15,410 --> 00:21:19,340 >> Men nu, låt mig klickar på vecka noll, och nu har vi onsdag och fredag, 448 00:21:19,340 --> 00:21:25,260 och nu har vi bilderna långsamt från vecka noll. 449 00:21:25,260 --> 00:21:27,400 Och du kanske minns detta från vägen tillbaka när. 450 00:21:27,400 --> 00:21:29,340 Så det är allt denna webbplats gör. 451 00:21:29,340 --> 00:21:31,120 >> Så låt oss fundera över hur det är att göra detta. 452 00:21:31,120 --> 00:21:34,290 Jag kommer att gå tillbaka till källkoden här, i CS50 IDE, 453 00:21:34,290 --> 00:21:36,660 och jag kommer att öppna upp index.php. 454 00:21:36,660 --> 00:21:38,910 På toppen av den här filen är ett gäng av kommentarer. 455 00:21:38,910 --> 00:21:43,000 Och sedan i mitten av den här filen, det visar sig, är ingen PHP-kod som helst. 456 00:21:43,000 --> 00:21:47,380 För om du inte har någon av de öppna fäste frågetecken PHP-taggar, 457 00:21:47,380 --> 00:21:49,180 du är fri att bara sätta HTML. 458 00:21:49,180 --> 00:21:51,480 >> För vad PHP tolk är tänkt att göra, 459 00:21:51,480 --> 00:21:53,938 är när det läser detta file-- uppifrån och ned, vänster till right-- 460 00:21:53,938 --> 00:21:59,100 det bara tolkar koden det ser mellan dessa vinkelfästen frågetecken. 461 00:21:59,100 --> 00:22:02,380 Och allt annat som det inte erkänna som PHP, bara spottar ut. 462 00:22:02,380 --> 00:22:05,080 Och HTML är bland de saker Det kommer bara att spotta ut. 463 00:22:05,080 --> 00:22:09,090 >> Så den här filen kan ha kallats index.html, 464 00:22:09,090 --> 00:22:11,690 men jag namnge allt dot PHP som en språngbräda. 465 00:22:11,690 --> 00:22:15,960 Lectures.php-- liknande sätt underwhelming, det är bara några HTML. 466 00:22:15,960 --> 00:22:19,840 Week0.php, på liknande sätt bara några HTML. 467 00:22:19,840 --> 00:22:22,300 >> Men nu ska vi sätta på ökända ingenjörs hatt, 468 00:22:22,300 --> 00:22:24,400 och fundera över hur vi kan förbättra den här. 469 00:22:24,400 --> 00:22:28,541 Det är inte svårt att göra detta, men jag typ av decentraliserade till kopiera och klistra in. 470 00:22:28,541 --> 00:22:31,540 Och faktiskt, om jag gör vecka två, du vet vad jag förmodligen kommer att göra? 471 00:22:31,540 --> 00:22:34,940 Jag kommer att gå till week1.php, jag kommer att markera allt. 472 00:22:34,940 --> 00:22:39,110 Jag kommer att kopiera den, klistra in den till en ny fil som heter week2.php, 473 00:22:39,110 --> 00:22:42,440 tweak några webbadresser och vara på väg. 474 00:22:42,440 --> 00:22:45,240 >> Så baserat på vad vi har sett i C redan, 475 00:22:45,240 --> 00:22:46,860 Detta känns inte rätt, förhoppningsvis. 476 00:22:46,860 --> 00:22:49,610 Kopiera, klistra in sällan den rätta lösningen. 477 00:22:49,610 --> 00:22:51,429 Så vad kan vi börja att göra för att förbättra detta? 478 00:22:51,429 --> 00:22:53,345 Var finns möjligheter för bättre design? 479 00:22:53,345 --> 00:22:56,890 480 00:22:56,890 --> 00:22:58,760 >> När jag kommer till vecka åtta, det kommer 481 00:22:58,760 --> 00:23:00,910 att bli riktigt irriterande Om jag vill ändra 482 00:23:00,910 --> 00:23:03,930 teckensnitt för var och en av mina sidor, eller om jag vill 483 00:23:03,930 --> 00:23:06,522 att ändra strukturen av layouten. 484 00:23:06,522 --> 00:23:08,396 Så var är möjligheten för bättre design? 485 00:23:08,396 --> 00:23:11,990 486 00:23:11,990 --> 00:23:15,160 Nåväl, låt oss betrakta vad som är delas mellan alla dessa filer. 487 00:23:15,160 --> 00:23:21,696 >> Här är vecka ett, här är vecka noll, här är lectures.php, 488 00:23:21,696 --> 00:23:25,790 Här är index.php-- vad är densamma och vad som är annorlunda, grovt räknat, 489 00:23:25,790 --> 00:23:26,760 i vart och ett av dessa filer? 490 00:23:26,760 --> 00:23:30,560 491 00:23:30,560 --> 00:23:32,060 Yeah? 492 00:23:32,060 --> 00:23:34,560 >> PUBLIK: [OHÖRBAR] 493 00:23:34,560 --> 00:23:41,244 494 00:23:41,244 --> 00:23:42,160 DAVID MALAN: OK, bra. 495 00:23:42,160 --> 00:23:46,115 Så det finns ett mönster, säkert, varvid varje gång jag väljer föreläsning I, 496 00:23:46,115 --> 00:23:48,250 Jag ska generera en mycket liknande utseende sidan. 497 00:23:48,250 --> 00:23:50,375 Och så kanske jag kan utnyttja det faktum att verkligen, 498 00:23:50,375 --> 00:23:53,060 vi medvetet numeriskt indexeras vår lectures-- 499 00:23:53,060 --> 00:23:55,290 om jag kan sätta ännu mer ord i ditt svar. 500 00:23:55,290 --> 00:23:59,984 Och vad är det enda, verkligen, som är att byta mellan vecka en-- 501 00:23:59,984 --> 00:24:02,400 och låt mig rulla ner så det är ungefär i samma plats-- 502 00:24:02,400 --> 00:24:05,480 så här är vecka noll, ungefär på toppen. 503 00:24:05,480 --> 00:24:12,370 Här är vecka ett, vecka noll, vecka ett, vecka noll. 504 00:24:12,370 --> 00:24:14,370 OK, bokstavligen om du vet ingen som helst program 505 00:24:14,370 --> 00:24:16,286 detta är nu precis som en mönstermatchning spel. 506 00:24:16,286 --> 00:24:17,200 Så vad är annorlunda? 507 00:24:17,200 --> 00:24:18,765 Yeah? 508 00:24:18,765 --> 00:24:19,777 >> PUBLIK: [OHÖRBAR] 509 00:24:19,777 --> 00:24:22,360 DAVID MALAN: Bra, så titeln förändras, aldrig så lite. 510 00:24:22,360 --> 00:24:24,010 Zero kommer naturligtvis till ett. 511 00:24:24,010 --> 00:24:25,570 Samma sak händer i H1-tagg. 512 00:24:25,570 --> 00:24:28,790 Och vi vet inte riktigt ser det lika lätt, eftersom webbadresserna är lite lång. 513 00:24:28,790 --> 00:24:30,670 Men dessa webbadresser förändras något. 514 00:24:30,670 --> 00:24:34,490 >> Men vad är inte förändras är, vågar jag säga, de flesta av innehållet i page-- 515 00:24:34,490 --> 00:24:38,530 HTML-taggen är densamma, är huvudet samma, titeln är nästan densamma, 516 00:24:38,530 --> 00:24:40,659 kroppen är densamma, och nästan allt annat 517 00:24:40,659 --> 00:24:42,450 är densamma med undantag för de små tweaks. 518 00:24:42,450 --> 00:24:45,310 Så hur kan vi gå om facto en del av detta ut? 519 00:24:45,310 --> 00:24:48,740 >> Bra låt mig föreslå exakt att i nästa version. 520 00:24:48,740 --> 00:24:53,890 Så här i version ett, jag har exakt samma filer, plus ett par andra. 521 00:24:53,890 --> 00:24:59,730 Här finns index.php-- och även om du aldrig sett PHP förut, 522 00:24:59,730 --> 00:25:05,511 vad gör jag nog att lösa detta problem-- baserat på vad du ser här? 523 00:25:05,511 --> 00:25:11,300 524 00:25:11,300 --> 00:25:12,760 Ja, det är en liten åtagande? 525 00:25:12,760 --> 00:25:13,450 Nej? 526 00:25:13,450 --> 00:25:16,020 Ja, gå vidare. 527 00:25:16,020 --> 00:25:17,380 >> PUBLIK: [OHÖRBAR] 528 00:25:17,380 --> 00:25:18,380 >> DAVID MALAN: Japp. 529 00:25:18,380 --> 00:25:20,380 >> PUBLIK: [OHÖRBAR] 530 00:25:20,380 --> 00:25:26,090 531 00:25:26,090 --> 00:25:28,669 >> DAVID MALAN: Jag behöver du talar bara lite högre. 532 00:25:28,669 --> 00:25:31,084 >> PUBLIK: [OHÖRBAR] 533 00:25:31,084 --> 00:25:35,744 534 00:25:35,744 --> 00:25:36,660 DAVID MALAN: OK, bra. 535 00:25:36,660 --> 00:25:38,620 Och jag think-- det var svårt att höra dig-- men jag 536 00:25:38,620 --> 00:25:42,690 tror att vad du får på är att taggarna som var vanliga där uppe, 537 00:25:42,690 --> 00:25:47,710 och taggarna som var vanliga på botten, har nu räknas bort, 538 00:25:47,710 --> 00:25:51,140 eller förvisas till vilka filer? 539 00:25:51,140 --> 00:25:53,476 Header.php och footer.php-- och vi kommer 540 00:25:53,476 --> 00:25:55,600 att göra några tweaks till ta itu med problem som du bara 541 00:25:55,600 --> 00:25:59,370 upp om siffrorna förändras, för exempel, om jag hörde dig rätt. 542 00:25:59,370 --> 00:26:02,060 >> Men det verkar vara kontentan av det. 543 00:26:02,060 --> 00:26:04,820 Om det fanns en stor mängd redundans på toppen av sidan, 544 00:26:04,820 --> 00:26:06,736 och en stor mängd redundans vid botten, 545 00:26:06,736 --> 00:26:09,280 låt oss bokstavligen bara höjdpunkt och skär det innehållet ut, 546 00:26:09,280 --> 00:26:13,270 lägga den i en separat file-- precis som idén om CSS, där vi räknade ut 547 00:26:13,270 --> 00:26:16,710 mycket liknande estetik, sätta det i en separat punkt PHP-fil, 548 00:26:16,710 --> 00:26:20,340 Använd kräva mechanism-- som är som ciss include-- som 549 00:26:20,340 --> 00:26:23,570 är i huvudsak som att säga gå greppa innehållet i header.php, 550 00:26:23,570 --> 00:26:25,370 och kopiera och klistra in dem här. 551 00:26:25,370 --> 00:26:29,490 >> Men vad detta betyder är att nu i index.php, jag har dessa två linjer. 552 00:26:29,490 --> 00:26:32,130 I lectures.php jag också har dessa två linjer. 553 00:26:32,130 --> 00:26:35,230 I week0.php jag också har dessa två linjer. 554 00:26:35,230 --> 00:26:38,380 >> Så nu, om jag vill ändra titeln på alla mina sidor, 555 00:26:38,380 --> 00:26:40,530 eller jag vill ändra grundläggande struktur, 556 00:26:40,530 --> 00:26:44,380 Jag kan ändra det nu bara ett ställe, eller två places-- sidhuvud och sidfot, 557 00:26:44,380 --> 00:26:45,429 respektive. 558 00:26:45,429 --> 00:26:47,970 Nu koden start att se lite mer kryptiskt, eller hur? 559 00:26:47,970 --> 00:26:53,590 Men om man tänker på vad sidan är doing-- om jag begär week0.php, 560 00:26:53,590 --> 00:26:59,880 precis som på ritningen över här-- när week0.php begärs, 561 00:26:59,880 --> 00:27:00,960 vad betyder det? 562 00:27:00,960 --> 00:27:04,410 >> Bokstavligen är den här filen begärs av webbläsaren. 563 00:27:04,410 --> 00:27:06,240 Webben server-- alias 564 00:27:06,240 --> 00:27:09,250 CS50 ID-- griper detta fil, week0.php, och läser 565 00:27:09,250 --> 00:27:10,780 det uppifrån och ned, från vänster till höger. 566 00:27:10,780 --> 00:27:15,400 På rad ett omedelbart möter det öppna fäste frågetecken PHP, kräver 567 00:27:15,400 --> 00:27:17,872 header dot PHP, och så vad PHP tolken 568 00:27:17,872 --> 00:27:20,580 does-- som är inbyggd i webben server, eftersom vi förkonfigurerade 569 00:27:20,580 --> 00:27:24,580 den för dig-- det går automatiskt i header.php, kopierar innehållet, 570 00:27:24,580 --> 00:27:25,640 klistrar dem här. 571 00:27:25,640 --> 00:27:28,790 >> Men sedan tolk möten frågetecken nära fästet, 572 00:27:28,790 --> 00:27:30,320 så det är allt gjort tänkande. 573 00:27:30,320 --> 00:27:33,400 Nu är det bara blint spottar ut linjer två till och med sju, 574 00:27:33,400 --> 00:27:35,240 eftersom det är bara rå HTML. 575 00:27:35,240 --> 00:27:38,470 Får ledningen åtta, och gör det samma magi igen-- öppna filen, 576 00:27:38,470 --> 00:27:41,460 ta tag i innehållet, och ålägger dem eller klistra in dem 577 00:27:41,460 --> 00:27:42,480 just då och där. 578 00:27:42,480 --> 00:27:44,210 >> Men jag bara nämnt en bugg. 579 00:27:44,210 --> 00:27:48,610 Detta är en partiell steg bakåt, för om vi tittar i header.php, 580 00:27:48,610 --> 00:27:50,850 Jag har typ av klippa ett hörn. 581 00:27:50,850 --> 00:27:56,250 Vad funktion gav jag upp för att få denna diskutabel bättre design? 582 00:27:56,250 --> 00:27:57,305 Yeah? 583 00:27:57,305 --> 00:27:58,180 PUBLIK: [OHÖRBAR] 584 00:27:58,180 --> 00:28:00,570 DAVID MALAN: Ja, jag typ av klippa en nontrivial hörn. 585 00:28:00,570 --> 00:28:04,489 Ni påpekade att det förändrades var titeln, numret i titeln, 586 00:28:04,489 --> 00:28:05,530 och numret i H1. 587 00:28:05,530 --> 00:28:08,170 Så min lösning var OK, låt oss bara byta namn på sidan, 588 00:28:08,170 --> 00:28:10,080 och inte ta itu med det som helst problem. 589 00:28:10,080 --> 00:28:12,130 Så det är en partiell steg bakåt för säker. 590 00:28:12,130 --> 00:28:14,300 >> Men vad är anmärkningsvärt här är det vad jag har gjort 591 00:28:14,300 --> 00:28:17,200 annars factored ut alla vanliga grejer. 592 00:28:17,200 --> 00:28:21,520 Och i footer.php, märker jag räknade ur allt detta, om än mindre, 593 00:28:21,520 --> 00:28:22,790 gemensamma grejer. 594 00:28:22,790 --> 00:28:26,070 Så jag behöver på något sätt nu kunna ta ytterligare ett steg framåt, och fixa 595 00:28:26,070 --> 00:28:27,160 denna titel frågor. 596 00:28:27,160 --> 00:28:28,180 Så låt oss göra det. 597 00:28:28,180 --> 00:28:35,060 >> Låt mig gå in på min andra version här, som, återigen, har samma filer 598 00:28:35,060 --> 00:28:36,825 med undantag för ett nytt tillägg. 599 00:28:36,825 --> 00:28:38,950 Och det är lite mer mångordig, men låt oss se om vi 600 00:28:38,950 --> 00:28:40,550 kan retas isär vad som händer här. 601 00:28:40,550 --> 00:28:45,370 Så i stället för att kräva header.php och footer.php, 602 00:28:45,370 --> 00:28:50,180 Jag verkar endast kräver en file-- kallade naturligtvis helpers.php. 603 00:28:50,180 --> 00:28:52,560 Och låt mig föreskriver nu, vad som finns inuti av helpers.php 604 00:28:52,560 --> 00:28:55,330 är bara en massa funktioner som jag skrev, precis som förut. 605 00:28:55,330 --> 00:28:57,550 Men jag kallade det helpers.php. 606 00:28:57,550 --> 00:29:00,370 >> Nu uppenbarligen, i linje tre och 10, jag är 607 00:29:00,370 --> 00:29:02,840 anropa två functions-- render sidhuvud, sidfot göra. 608 00:29:02,840 --> 00:29:05,040 De kommer inte med PHP, skrev jag dem själv. 609 00:29:05,040 --> 00:29:07,880 Och jag satte dem i helpers.php. 610 00:29:07,880 --> 00:29:11,210 >> Nu har vi bara sett den här syntaxen en gång, och det var super kort. 611 00:29:11,210 --> 00:29:15,330 Men detta är tydligen ett argument för att göra huvudet, funktionen. 612 00:29:15,330 --> 00:29:16,450 Varför vet jag det? 613 00:29:16,450 --> 00:29:18,522 Väl här är en nära Paren, Här är en öppen Paren. 614 00:29:18,522 --> 00:29:21,230 Och naturligtvis, precis som i C, något mellan dessa parenteser 615 00:29:21,230 --> 00:29:23,350 är en input-- eller en argument till funktionen. 616 00:29:23,350 --> 00:29:26,710 >> Vad är datatyp detta argument, baserat på vad jag har markerat? 617 00:29:26,710 --> 00:29:30,820 Vad gör dessa hakparenteser ange baserat på förra veckan? 618 00:29:30,820 --> 00:29:33,390 Ja, det är en array-- specifikt en associativ array. 619 00:29:33,390 --> 00:29:35,700 Och denna syntax visserligen är lite funky, 620 00:29:35,700 --> 00:29:38,860 men detta är bara passerar i en nyckelvärdet paret. 621 00:29:38,860 --> 00:29:43,530 Det viktiga är, citat unquote titel, och värdet är CS50. 622 00:29:43,530 --> 00:29:46,220 >> Om vi ​​hade gjort detta i C, kanske det istället 623 00:29:46,220 --> 00:29:49,400 ser mer ut så här, bara citat unquote CS50-- 624 00:29:49,400 --> 00:29:52,460 eller faktiskt skulle det vara lockigt hängslen, eller något liknande i C, 625 00:29:52,460 --> 00:29:55,580 där nyckeln är noll, och värdet är CS50. 626 00:29:55,580 --> 00:29:59,840 Men återigen, i PHP, även om Syntaxen är, återigen, en lite konstig, 627 00:29:59,840 --> 00:30:02,860 det tillåter dig att passera ord istället för siffror 628 00:30:02,860 --> 00:30:05,120 att associera nycklar med värden. 629 00:30:05,120 --> 00:30:06,390 >> Så vad betyder då allt detta? 630 00:30:06,390 --> 00:30:09,750 Om jag går in helpers.php, låt oss titta på denna funktion. 631 00:30:09,750 --> 00:30:13,620 renderHeader.php, snarare renderHeader är min funktion, 632 00:30:13,620 --> 00:30:16,220 och jag vet att eftersom jag ser nyckelordet function här. 633 00:30:16,220 --> 00:30:19,450 Detta är nytt från C- det tydligen tar ett argument som kallas data-- 634 00:30:19,450 --> 00:30:22,400 men jag kunde ha kallat detta något, men jag kallade det uppgifter, 635 00:30:22,400 --> 00:30:25,090 bara för att vara lite clean-- och bara ta en gissning, särskilt 636 00:30:25,090 --> 00:30:28,173 om du har programmerat i någon annan högnivåspråk före, något 637 00:30:28,173 --> 00:30:29,820 ovanför C konceptuellt. 638 00:30:29,820 --> 00:30:33,820 >> Vad gör lika öppna fäste hakparentes förmodligen innebära? 639 00:30:33,820 --> 00:30:35,540 Eller vad kan det innebära? 640 00:30:35,540 --> 00:30:39,660 Vi har inte sett detta i C. Yeah? 641 00:30:39,660 --> 00:30:40,480 >> En tom array. 642 00:30:40,480 --> 00:30:45,440 Konkret innebär detta att om användaren inte ringa renderHeader 643 00:30:45,440 --> 00:30:49,340 med ett argument, jag fortfarande att ha ett argument som kallas data 644 00:30:49,340 --> 00:30:52,327 men standardvärdet är kommer att bli en tom array. 645 00:30:52,327 --> 00:30:53,660 Så det är bara en trevlig bekvämlighet. 646 00:30:53,660 --> 00:30:56,493 Jag behöver inte skrika på användaren, eller säga att du använt min funktion fel. 647 00:30:56,493 --> 00:30:59,849 Jag kan bara ge användaren en standard värde, om jag inte särskilt vård. 648 00:30:59,849 --> 00:31:01,890 Nu denna funktion, jag kommer att vifta mina händer på. 649 00:31:01,890 --> 00:31:07,620 Men detta extrakt funktionen kan oss att passera dessa variabler i uppgifter 650 00:31:07,620 --> 00:31:10,360 in header.php på följande sätt. 651 00:31:10,360 --> 00:31:13,100 Och detta är den sista biten, Jag tror, ​​funky syntax. 652 00:31:13,100 --> 00:31:15,860 Här är min nya version av header.php-- det 653 00:31:15,860 --> 00:31:20,140 brukade säga, bokstavligen, öppen fäste titel CS50, och det var det. 654 00:31:20,140 --> 00:31:21,766 Och samma sak för H1. 655 00:31:21,766 --> 00:31:24,310 >> Nu är det tydligen säger något ganska funky. 656 00:31:24,310 --> 00:31:28,030 Och låt mig underlätta detta för ett ögonblick som följer. 657 00:31:28,030 --> 00:31:31,020 Detta är vad jag har ändrat min titel för att vara. 658 00:31:31,020 --> 00:31:35,140 Men det börjar bli lite ful att ständigt öppna konsoler med PHP, 659 00:31:35,140 --> 00:31:36,610 och sedan använda utskriftsfunktionen. 660 00:31:36,610 --> 00:31:40,810 Det visar sig att PHP har en stenografi notation för detta, vilket är bara 661 00:31:40,810 --> 00:31:45,050 ett likhetstecken, som är tekniskt en funktion som kallas eko i stället för tryck, 662 00:31:45,050 --> 00:31:46,800 men det är samma sak, på ett effektivt sätt. 663 00:31:46,800 --> 00:31:48,440 >> Det ser bara bättre. 664 00:31:48,440 --> 00:31:50,510 Det är bara en syntaktisk socker, om ni så vill, 665 00:31:50,510 --> 00:31:52,260 som gör min kod ser lite bättre. 666 00:31:52,260 --> 00:31:54,010 Men det visar sig, och vi får se det igen 667 00:31:54,010 --> 00:31:57,420 Snart måste vi kalla detta irriterande lång funktion som kallas 668 00:31:57,420 --> 00:32:00,582 HTML speciella tecken i PHP, eftersom det visar sig 669 00:32:00,582 --> 00:32:02,790 Det finns vissa insatsvaror att användaren kan ge oss, 670 00:32:02,790 --> 00:32:05,160 eller att användarna kan ge oss, som kommer att bryta vår webbplats. 671 00:32:05,160 --> 00:32:07,035 Men vi ser att nästa vecka med JavaScript. 672 00:32:07,035 --> 00:32:10,740 Men för nu, vet bara att den här filen, headers.php, helt enkelt 673 00:32:10,740 --> 00:32:13,040 tar titeln som Jag passerade, det gör 674 00:32:13,040 --> 00:32:17,380 säker på att det är säkert att injiceras i en bana sida, och det spottar ut som min titel 675 00:32:17,380 --> 00:32:18,640 och som min H1. 676 00:32:18,640 --> 00:32:24,440 Så om jag går in i denna version nu, märker att föreläsningar har sin titel tillbaka, 677 00:32:24,440 --> 00:32:28,630 vecka noll har sin titel tillbaka, och faktiskt, HTML jag generera 678 00:32:28,630 --> 00:32:32,110 är identisk med vad min första version was-- utom för min blank, 679 00:32:32,110 --> 00:32:35,150 eftersom jag har börjat formatering min kod lite annorlunda. 680 00:32:35,150 --> 00:32:38,082 Men jag har skapat alla koden jag bryr mig om. 681 00:32:38,082 --> 00:32:39,790 Så låt mig paus för bara en stund och se 682 00:32:39,790 --> 00:32:42,200 om det finns några frågor eller förvirring jag har skapat. 683 00:32:42,200 --> 00:32:44,970 684 00:32:44,970 --> 00:32:48,150 Okej, så låt oss vrida lite svårare här 685 00:32:48,150 --> 00:32:51,500 för att se om det finns ett möjlighet till förbättring. 686 00:32:51,500 --> 00:32:56,130 Helpers.php hade även denna funktion, kallad renderFooter. 687 00:32:56,130 --> 00:32:59,652 Och vad är anmärkningsvärt om renderHeader och renderFooter? 688 00:32:59,652 --> 00:33:02,610 Och återigen, för dagens ändamål, vet att extraktet funktion är bara 689 00:33:02,610 --> 00:33:08,280 mitt sätt att skicka argument in header.php och footer.php. 690 00:33:08,280 --> 00:33:10,900 691 00:33:10,900 --> 00:33:11,780 >> Förlåt? 692 00:33:11,780 --> 00:33:13,056 >> PUBLIK: [OHÖRBAR] 693 00:33:13,056 --> 00:33:15,180 DAVID MALAN: Ja, bara jag förändrat kräver linjen. 694 00:33:15,180 --> 00:33:19,410 Så bokstavligen, har jag begått synden kopiera och klistra in, ännu en gång. 695 00:33:19,410 --> 00:33:21,920 Det är inte ett stort antal linjer, men kom on-- 696 00:33:21,920 --> 00:33:25,220 om jag kopiera och klistra in allt bara för att ändra ett litet ord, 697 00:33:25,220 --> 00:33:28,610 och ett litet ord som Alan pekar ut är sidfot här, jämfört med header här. 698 00:33:28,610 --> 00:33:30,670 Annars är allt identiska, med undantag för, 699 00:33:30,670 --> 00:33:32,180 Naturligtvis funktionens namn. 700 00:33:32,180 --> 00:33:33,690 Så vad kan vi göra bättre? 701 00:33:33,690 --> 00:33:39,810 >> Bra låt mig att öppna upp denna version här, varvid i helpers.php, 702 00:33:39,810 --> 00:33:42,300 varför inte jag bara få en lite smartare om detta? 703 00:33:42,300 --> 00:33:46,410 Skriv något mer komplicerad kod, men kalla det göra? 704 00:33:46,410 --> 00:33:48,470 Så vad har jag i grunden förändrats? 705 00:33:48,470 --> 00:33:51,770 >> Det tar ett argument now-- två argument, uppgifter fortfarande. 706 00:33:51,770 --> 00:33:54,444 Och vad är det första namn förmodligen används för, 707 00:33:54,444 --> 00:33:55,860 baserat på vad du läser här? 708 00:33:55,860 --> 00:33:58,452 Även om vissa av syntaxen är fortfarande ny. 709 00:33:58,452 --> 00:33:59,660 Vad är dollartecken mall? 710 00:33:59,660 --> 00:34:02,400 711 00:34:02,400 --> 00:34:03,016 >> Förlåt? 712 00:34:03,016 --> 00:34:03,710 >> PUBLIK: sidhuvudet eller sidfoten. 713 00:34:03,710 --> 00:34:04,510 >> DAVID MALAN: sidhuvudet eller sidfoten. 714 00:34:04,510 --> 00:34:07,134 Så tydligen, bestämde jag att om det enda som förändras 715 00:34:07,134 --> 00:34:10,159 är vad mall jag vill att print-- och genom mall 716 00:34:10,159 --> 00:34:13,100 Jag menar att detta är modell för kod som jag vill skriva ut, 717 00:34:13,100 --> 00:34:16,350 men jag vill koppla in någon values-- så om det är bara header 718 00:34:16,350 --> 00:34:20,440 eller sidfot, varför inte jag parameter det och kallar argumentet dollartecken 719 00:34:20,440 --> 00:34:21,409 mall? 720 00:34:21,409 --> 00:34:26,250 Och sedan denna skraj syntax tillåter mig att skapa en bana i en variabel här. 721 00:34:26,250 --> 00:34:28,030 >> Så dollartecken vägen är en variabel. 722 00:34:28,030 --> 00:34:31,120 Vad gör detta syntax göra, om du är bekant? 723 00:34:31,120 --> 00:34:32,512 Yeah? 724 00:34:32,512 --> 00:34:34,065 >> PUBLIK: [OHÖRBAR] 725 00:34:34,065 --> 00:34:34,940 DAVID MALAN: Exakt. 726 00:34:34,940 --> 00:34:37,600 Om mallen är, citat unquote, sidhuvud, eller om mallen är, 727 00:34:37,600 --> 00:34:41,170 citationstecken unquote, sidfot, den linjen det att jag har markerat, linje åtta, 728 00:34:41,170 --> 00:34:46,330 är helt enkelt ta det namnet, som rubrik, och sammanlänka den med punkt PHP. 729 00:34:46,330 --> 00:34:49,750 Så att vi inte har denna operatör i C. Detta punktoperatorn är 730 00:34:49,750 --> 00:34:54,520 en fantastisk sak i PHP-- om du är bekant med JavaScript eller Java, 731 00:34:54,520 --> 00:34:56,949 du kan använda plus underteckna göra sammanfogning. 732 00:34:56,949 --> 00:34:59,974 >> I C är det en smärta i neck-- och jag är så ledsen, i p-set sex, 733 00:34:59,974 --> 00:35:02,390 du kommer att behöva göra this-- det är en smärta i nacken 734 00:35:02,390 --> 00:35:03,930 att sammanfoga strängar. 735 00:35:03,930 --> 00:35:04,670 Varför? 736 00:35:04,670 --> 00:35:06,580 Jo, därför att om du har en sträng som är denna långa, 737 00:35:06,580 --> 00:35:09,538 och en annan sträng som är denna långa, du kan inte bara koppla ihop dem. 738 00:35:09,538 --> 00:35:11,070 Vad vill du istället ha att göra i C? 739 00:35:11,070 --> 00:35:11,680 Yeah? 740 00:35:11,680 --> 00:35:12,380 >> PUBLIK: [OHÖRBAR] 741 00:35:12,380 --> 00:35:15,090 >> DAVID MALAN: Du måste malloc minne, eller använd en array på stacken. 742 00:35:15,090 --> 00:35:17,214 Och du har faktiskt göra den arrayen är tillräckligt stor 743 00:35:17,214 --> 00:35:20,940 för att passa detta plus detta, plus backslash noll. 744 00:35:20,940 --> 00:35:24,994 Sedan sammanfoga dem tillsammans med hjälp av rör katt eller manuellt med en for-loop, 745 00:35:24,994 --> 00:35:26,160 eller valfritt antal tekniker. 746 00:35:26,160 --> 00:35:27,760 Och vi visa ett par i p-set sex. 747 00:35:27,760 --> 00:35:29,080 >> Det är en smärta i nacken. 748 00:35:29,080 --> 00:35:34,190 Och det är verkligen vad jag menar om Detta jämfört this-- som C kontra PHP. 749 00:35:34,190 --> 00:35:36,870 Du får precis så mycket mer funktionalitet för gratis, 750 00:35:36,870 --> 00:35:39,030 så att du kan fokusera, helst på det roliga 751 00:35:39,030 --> 00:35:41,190 del av kodning, den projekt som du vill lösa, 752 00:35:41,190 --> 00:35:43,190 snarare än den låga nivån minutiae. 753 00:35:43,190 --> 00:35:49,840 >> Så det här bara genererar header.php eller footer.php baserat på vilka jag kallar. 754 00:35:49,840 --> 00:35:52,280 Och faktiskt om jag går i index.php, meddelande 755 00:35:52,280 --> 00:35:56,230 allt som changed-- Istället för ringer göra sidhuvud eller sidfot göra, 756 00:35:56,230 --> 00:36:00,230 Jag ringer render, följt av namnet på mallen som jag vill göra. 757 00:36:00,230 --> 00:36:02,370 Och du ser detta också, i problembild sju, 758 00:36:02,370 --> 00:36:05,530 där vi tillåta dig att använda Samma funktion att göra klasar 759 00:36:05,530 --> 00:36:07,550 och klasar av olika webbsidor. 760 00:36:07,550 --> 00:36:10,570 >> Så i stället för att uppehålla mig alltför mycket mer på dessa details-- 761 00:36:10,570 --> 00:36:13,210 där du kan se igen i problem set seven-- låt oss titta 762 00:36:13,210 --> 00:36:16,850 vid nu i början av en lösning till ett mer intressant problem. 763 00:36:16,850 --> 00:36:19,310 Hittills ingenting vi har gjort har sparade data. 764 00:36:19,310 --> 00:36:22,920 I själva verket, den enda gången som vi någonsin har sparat något som vi har gjort i denna klass 765 00:36:22,920 --> 00:36:31,030 är när vi hade en mycket enkel demo stund tillbaka, där vi använda filer IO i C, 766 00:36:31,030 --> 00:36:34,520 och jag tror att jag skrev i mitt namn, och Hannah namn, och Marias namn, 767 00:36:34,520 --> 00:36:37,610 eller kanske Andy namn, och då vi sparade en CSV file-- 768 00:36:37,610 --> 00:36:39,430 kommaseparerade värden fil. 769 00:36:39,430 --> 00:36:43,530 >> Och vi använde fopen-- Jag tror vi använde fprintf som jag minns, 770 00:36:43,530 --> 00:36:44,910 och vi sparat en fil. 771 00:36:44,910 --> 00:36:46,920 Nu, är att den enklaste form av en databas. 772 00:36:46,920 --> 00:36:50,230 Om du vill göra en webbplats för Frosh IMS-programmet, varvid freshmen 773 00:36:50,230 --> 00:36:53,390 kan registrera sig för en sport, du helst vill göra något med dessa uppgifter. 774 00:36:53,390 --> 00:36:55,370 Förra veckan gjorde vi ingenting med data-- vi just sagt, 775 00:36:55,370 --> 00:36:56,661 du är registrerad, inte riktigt. 776 00:36:56,661 --> 00:36:58,950 Eller kanske jag mailade Proctor, och det var det. 777 00:36:58,950 --> 00:37:02,110 >> Men det skulle vara trevligt om jag kunde ge det proctor en CSV-fil, 778 00:37:02,110 --> 00:37:03,340 som en Excel-fil. 779 00:37:03,340 --> 00:37:05,090 Eller ännu bättre, skulle det vara trevligt om jag kunde 780 00:37:05,090 --> 00:37:08,830 sätta dessa användares namn och sovsal namn och allt det 781 00:37:08,830 --> 00:37:11,740 i en databas som bara lever för evigt, 782 00:37:11,740 --> 00:37:13,530 tills jag väljer att ta bort data. 783 00:37:13,530 --> 00:37:15,645 En databas som gör det möjligt mig att hämta information. 784 00:37:15,645 --> 00:37:18,070 Och faktiskt, det är vad en databas är. 785 00:37:18,070 --> 00:37:20,470 >> Vi introducerar idag, och nästa vecka också, en teknik 786 00:37:20,470 --> 00:37:25,020 kallas SQL-- en Structured Query Språk, vilket är ett annat språk. 787 00:37:25,020 --> 00:37:28,750 Det är i huvudsak en programmerings språk, men för databaser. 788 00:37:28,750 --> 00:37:31,760 Och en databas för nu, bara tänka på som en super snygga version 789 00:37:31,760 --> 00:37:35,710 Microsoft Excel eller Google Kalkylblad eller Apple Numbers. 790 00:37:35,710 --> 00:37:39,950 Det är i allmänhet ett program som låter du kan lagra en massa uppgifter 791 00:37:39,950 --> 00:37:43,960 i rader och kolumner, ganska som du kanske i Excel. 792 00:37:43,960 --> 00:37:47,100 >> Men vad är trevligt, särskilt om Vi är inte super bekant med Excel, 793 00:37:47,100 --> 00:37:52,040 vad SQL låter dig göra är fråga här information genom att skriva rader kod 794 00:37:52,040 --> 00:37:55,220 där du kan, även om din databas har en miljon rader i det, 795 00:37:55,220 --> 00:37:57,190 du kan hitta saker supersnabb. 796 00:37:57,190 --> 00:37:59,950 I själva verket är Excel särskilt dålig på stora datamängder. 797 00:37:59,950 --> 00:38:02,460 Och i själva verket upp till ett par år sedan, visade sig 798 00:38:02,460 --> 00:38:08,890 Excel skulle bara tillåter dig att lagra upp till 65.535 rader av data-- som 799 00:38:08,890 --> 00:38:12,020 låter som en hel del, men på När jag var en grad student, 800 00:38:12,020 --> 00:38:14,920 och jag minns snubbla över detta eftersom jag var generera 801 00:38:14,920 --> 00:38:17,900 CSV-filer för min forskning och jag ville analysera dem snabbt 802 00:38:17,900 --> 00:38:19,530 genom att bara öppna upp i Excel. 803 00:38:19,530 --> 00:38:23,730 Naturligtvis, min dator bara kraschat, eftersom jag hade mer än 65.000 rader. 804 00:38:23,730 --> 00:38:27,210 >> Men där gjorde 65.535 ifrån? 805 00:38:27,210 --> 00:38:29,670 Vad var Microsoft gör, förmodligen? 806 00:38:29,670 --> 00:38:32,430 Om du är bra med dina befogenheter två? 807 00:38:32,430 --> 00:38:37,160 Ja, de använde en 16-bitars värde för att representera radnumret. 808 00:38:37,160 --> 00:38:41,310 Och två till 16 är 65,536-- minus ett, för om du 809 00:38:41,310 --> 00:38:45,414 noll index innebär att var flest antal rader jag kunde ha. 810 00:38:45,414 --> 00:38:46,830 Och det var bara ett beslut design. 811 00:38:46,830 --> 00:38:52,760 Genom att spara 16 bitar, begränsade de mig till 16.000 rader, i stället för 4 miljarder, 812 00:38:52,760 --> 00:38:54,322 som jag kunde ha haft idealiskt. 813 00:38:54,322 --> 00:38:57,030 Men för nu, ska vi införa detta mer i ett webbsammanhang. 814 00:38:57,030 --> 00:39:00,390 Och vad är trevligt om SQL är att även även om det är ganska stark och ganska 815 00:39:00,390 --> 00:39:04,050 sofistikerat, verkligen kokar det ner till fyra tangentoperationer, fyra 816 00:39:04,050 --> 00:39:08,060 nyckelfunktioner, om du will-- välja, för att hämta data, söka 817 00:39:08,060 --> 00:39:12,510 för data; radera eller radering av data; infoga för att lägga rader till databasen; 818 00:39:12,510 --> 00:39:13,410 och uppdatering. 819 00:39:13,410 --> 00:39:17,010 Så om du någonsin har använt Google Kalkylblad, Apple Numbers, Microsoft 820 00:39:17,010 --> 00:39:19,310 Excel, du har verkställt, mest troligt, allt 821 00:39:19,310 --> 00:39:22,530 av dessa åtgärder som en människa med bara med hjälp av tangentbordet och mouse-- 822 00:39:22,530 --> 00:39:26,050 infoga data, med hjälp av dina ögon för att välja eller söka efter uppgifter, 823 00:39:26,050 --> 00:39:28,360 eller uppdatera data eller ta bort data. 824 00:39:28,360 --> 00:39:29,870 >> Så vad betyder det? 825 00:39:29,870 --> 00:39:34,300 Tja, förinstallerat i CS50 IDE är ett program som heter MySQL. 826 00:39:34,300 --> 00:39:37,050 Det är en fri, öppen källkod databas som är super populär. 827 00:39:37,050 --> 00:39:40,590 Facebook, till exempel, använder den för att detta dag, bland annat verktyg som de använder. 828 00:39:40,590 --> 00:39:44,300 Och en hel del mycket populära webbplatser använder det till stor del eftersom det är snabbt, 829 00:39:44,300 --> 00:39:45,230 och eftersom det är gratis. 830 00:39:45,230 --> 00:39:46,820 Men absolut finns alternativ. 831 00:39:46,820 --> 00:39:49,580 Och några av er kanske plaska med alternativ för examensarbeten. 832 00:39:49,580 --> 00:39:55,330 >> Detta är en skärmdump, under tiden, av ett webbaserat verktyg som heter phpMyAdmin. 833 00:39:55,330 --> 00:39:58,260 Det är en slump att Detta webbaserade verktyg är också 834 00:39:58,260 --> 00:40:01,720 skriven på ett språk, PHP, men vad det är tänkt att göra 835 00:40:01,720 --> 00:40:04,620 är att ge oss ett webbaserat gränssnitt till en databas. 836 00:40:04,620 --> 00:40:07,180 Eftersom MySQL är typiskt något historiskt, du 837 00:40:07,180 --> 00:40:08,770 skulle samverka med endast med en kommandorad. 838 00:40:08,770 --> 00:40:10,811 Och det skulle vara super irriterande och svårbegripliga att ha 839 00:40:10,811 --> 00:40:14,487 att skriva textkommandon för att välja uppgifter, infoga data, och ta bort data. 840 00:40:14,487 --> 00:40:16,820 Så en del människor på internet skrev ett webbaserat program 841 00:40:16,820 --> 00:40:18,900 att bara låta oss hantera data i vår databas. 842 00:40:18,900 --> 00:40:23,040 Det är som att dubbelklicka på Excel, och kör en webbaserad version därav. 843 00:40:23,040 --> 00:40:26,370 >> Och vad du kommer att använda detta för i slutändan nästa vecka, inte p-set sex, 844 00:40:26,370 --> 00:40:28,680 men är att bygga något kallas CS50 Finance, som 845 00:40:28,680 --> 00:40:32,630 kommer att ha en databas över användare, med användarnamn och lösenord, 846 00:40:32,630 --> 00:40:34,860 dollar belopp som de har på sina bankkonton. 847 00:40:34,860 --> 00:40:37,280 Det kommer att bli något du använder för att lagra 848 00:40:37,280 --> 00:40:39,910 symbolerna och de kvantiteter över bestånd som användare 849 00:40:39,910 --> 00:40:42,567 har köpt med hjälp av virtuella dollar som du ger till dem. 850 00:40:42,567 --> 00:40:44,900 Och det kommer att tillåta användare att anmäla sig till din webbplats, 851 00:40:44,900 --> 00:40:47,190 så att även dina vänner kan lyssna på din webbplats 852 00:40:47,190 --> 00:40:49,360 och faktiskt registrera, logga in och leka 853 00:40:49,360 --> 00:40:52,807 och försöka hitta fel i koden, och försöka hitta fel på din webbplats. 854 00:40:52,807 --> 00:40:55,390 Och de kommer att registrera med sätta sig själva, effektivt, 855 00:40:55,390 --> 00:40:58,120 via koden du skriver till din databas. 856 00:40:58,120 --> 00:41:02,470 >> Till exempel är detta en sammanfattning skärmdump vad en databas kan se ut. 857 00:41:02,470 --> 00:41:05,190 Detta var från en av förra årets solutions-- 858 00:41:05,190 --> 00:41:07,760 Detta är som en mini Excel fil som finns lagrad i vår databas, 859 00:41:07,760 --> 00:41:09,950 lagras i denna programvara kallad MySQL. 860 00:41:09,950 --> 00:41:13,260 På vänster sida, jag har tydligen ges varje användare ett unikt nummer. 861 00:41:13,260 --> 00:41:16,200 I den andra kolumnen, har jag givit alla en användare name-- min egen 862 00:41:16,200 --> 00:41:16,880 bland dem. 863 00:41:16,880 --> 00:41:21,430 Och på höger sida, Jag har gett dem en hash. 864 00:41:21,430 --> 00:41:26,760 >> Nu detta är faktiskt ett lösenord, men det är inte en vanlig text lösenord. 865 00:41:26,760 --> 00:41:30,160 Det är en krypterade lösenord, om du vill, eller en hash lösenord. 866 00:41:30,160 --> 00:41:32,000 Som vi ska återkomma till inom kort. 867 00:41:32,000 --> 00:41:34,340 >> Men om du någonsin läst en artikel om hur 868 00:41:34,340 --> 00:41:37,950 ditt lösenord på någon bank eller någon webbplats kan ha äventyrats, 869 00:41:37,950 --> 00:41:39,630 Det kan i allmänhet innebära en av två saker. 870 00:41:39,630 --> 00:41:42,780 Så det här är bara ett utdrag av sex användare. 871 00:41:42,780 --> 00:41:45,460 Alla ni nu kan räkna via hacking eller cracking 872 00:41:45,460 --> 00:41:47,690 vad våra sex folks lösenord är. 873 00:41:47,690 --> 00:41:49,720 Men om du någonsin har fått en varning eller en ursäkt 874 00:41:49,720 --> 00:41:52,803 från ett företag eller en webbplats säger, ledsen, bröt en hacker i vår databas, 875 00:41:52,803 --> 00:41:56,360 bör du nog byta lösenord, vad kan det betyda? 876 00:41:56,360 --> 00:41:59,670 >> Tja, en, kan innebära Företaget har varit mer idiotiska, 877 00:41:59,670 --> 00:42:03,630 och har lagra dina lösenord i en kolumn som denna, okrypterad. 878 00:42:03,630 --> 00:42:05,840 Vilket innebär att motståndaren, som stal databasen 879 00:42:05,840 --> 00:42:07,440 bokstavligen vet ditt användarnamn och lösenord. 880 00:42:07,440 --> 00:42:08,960 Det är det värsta tänkbara scenario. 881 00:42:08,960 --> 00:42:11,710 Och som du ser i p-set sju, så lätt att undvika. 882 00:42:11,710 --> 00:42:15,624 Det finns absolut ingen ursäkt för att form av dumhet i dagens internet. 883 00:42:15,624 --> 00:42:18,540 Two-- och vi hittar några artiklar att vittna att det fortfarande 884 00:42:18,540 --> 00:42:21,710 händer, nonetheless-- två, kanske motståndaren 885 00:42:21,710 --> 00:42:23,840 stal denna version av databasen. 886 00:42:23,840 --> 00:42:27,110 Vilket är fortfarande slags dåligt, eftersom nu de vet att jag har sex kunder, 887 00:42:27,110 --> 00:42:29,270 Jag vet användarnamn av dessa sex kunder, 888 00:42:29,270 --> 00:42:32,910 och jag vet den krypterade versioner, eller streckade versioner, 889 00:42:32,910 --> 00:42:34,340 av dessa sex kunders lösenord. 890 00:42:34,340 --> 00:42:37,010 Men någon av er som kanske har gjort [? Hacker 2?] 891 00:42:37,010 --> 00:42:41,150 där du spruckna lösenord, eller tog En titt på den versionen av problemet 892 00:42:41,150 --> 00:42:46,280 set, varför är det fortfarande lite oroande Om motståndaren vet ditt hash 893 00:42:46,280 --> 00:42:47,435 lösenord? 894 00:42:47,435 --> 00:42:49,732 >> PUBLIK: Eftersom de kunde ange hela ordlistan 895 00:42:49,732 --> 00:42:50,690 in hashfunktionen. 896 00:42:50,690 --> 00:42:54,520 Och om ditt lösenord är en ordbok ord [? De kan bara match--?] 897 00:42:54,520 --> 00:42:57,640 >> DAVID MALAN: Exakt, motståndaren kan bara skriva kod, som några av er 898 00:42:57,640 --> 00:43:00,526 gjorde för [? Hacker?] 2, där du iterera över 899 00:43:00,526 --> 00:43:03,400 alla ord i ordlistan, eller alla möjliga kombinationer av A 900 00:43:03,400 --> 00:43:06,610 till Z och en genom nine-- vilket låter som en hel del, och det är. 901 00:43:06,610 --> 00:43:08,361 Men för en dator, Det är ganska snabbt. 902 00:43:08,361 --> 00:43:10,610 Och faktiskt, var att punkt [? Hacker 2,?] Var 903 00:43:10,610 --> 00:43:12,540 att ta saker som bokstavligen ser ut så här, 904 00:43:12,540 --> 00:43:14,900 och dekonstruera vad det egentligen var. 905 00:43:14,900 --> 00:43:17,270 >> Så ska vi titta på hur vi kan lagra denna mer effektivt. 906 00:43:17,270 --> 00:43:20,210 Det visade sig, tack och lov i MySQL, det kommer att bli datatyper. 907 00:43:20,210 --> 00:43:22,800 Och en av de roliga delarna om databasdesign, att vara ärlig, 908 00:43:22,800 --> 00:43:25,810 är egentligen bestämmer själv hur ska du representerar data? 909 00:43:25,810 --> 00:43:29,630 Om du representerar ett telefonnummer som en int, som ett stort antal, eller en lång tid? 910 00:43:29,630 --> 00:43:31,630 Eller vill du verkligen göra det som en sekvens av tecken? 911 00:43:31,630 --> 00:43:33,780 Och det kan vara mycket icke-triviala effekterna av detta. 912 00:43:33,780 --> 00:43:36,714 >> I själva verket en av de tidigaste, roliga förbunden berättelser 913 00:43:36,714 --> 00:43:39,880 är när Mark Zuckerberg byggde Facebook, var det ursprungligen skriven på, 914 00:43:39,880 --> 00:43:42,300 och fortfarande till stor del skriven i PHP. 915 00:43:42,300 --> 00:43:45,400 Och en av de största utmaningarna de mötte tidigt var skalning. 916 00:43:45,400 --> 00:43:48,820 När de höll lägga till skolan efter skola efter skolan, så vitt jag vet, 917 00:43:48,820 --> 00:43:51,639 en av de originella lösningar var i huvudsak att kopiera och klistra in 918 00:43:51,639 --> 00:43:53,430 några av de databaser och en del av koden, 919 00:43:53,430 --> 00:43:55,346 så att Harvard var körs på en egen server, 920 00:43:55,346 --> 00:43:56,995 och MIT kördes på sin egen server. 921 00:43:56,995 --> 00:43:59,120 Och det var därför, för vissa av er som kanske kommer ihåg, 922 00:43:59,120 --> 00:44:01,510 du kan inte ha vänner i andra nätverk. 923 00:44:01,510 --> 00:44:05,050 >> Du har förmodligen inte har vänner på MIT eller Harvard 10-tal år sedan, 924 00:44:05,050 --> 00:44:07,467 men du kan inte spänna nätverk för dels den anledningen. 925 00:44:07,467 --> 00:44:10,550 Och en av de största utmaningarna för Mark och för företag som Facebook 926 00:44:10,550 --> 00:44:13,460 faktiskt hanterar hundratals och tusentals och miljontals 927 00:44:13,460 --> 00:44:14,460 förfrågningar per sekund. 928 00:44:14,460 --> 00:44:16,501 Så de saker vi börjar talar om den här veckan 929 00:44:16,501 --> 00:44:19,860 verkligen kommer att vara relevant för skriva bra program, och populärt 930 00:44:19,860 --> 00:44:23,040 framgångsrika verktyg som kan hantera många användare. 931 00:44:23,040 --> 00:44:25,460 >> Så vi ska prata om saker som indexering och sökning, 932 00:44:25,460 --> 00:44:26,910 men det är det för dag. 933 00:44:26,910 --> 00:44:28,780 Vi kommer att se dig mer på onsdag. 934 00:44:28,780 --> 00:44:31,780 935 00:44:31,780 --> 00:44:33,902 >> [MUSIK - "Seinfeld" TEMA] 936 00:44:33,902 --> 00:44:35,943 DAVID MALAN: Du kan till det, och subtrahera från den. 937 00:44:35,943 --> 00:44:38,859 Och du behöver inte hålla med någon förutbestämd mängd av minne. 938 00:44:38,859 --> 00:44:40,580 Tja, vad som kommer att kallas? 939 00:44:40,580 --> 00:44:42,369 >> TALARE 1: Tja, vad som händer? 940 00:44:42,369 --> 00:44:43,535 TALARE 2: Vad menar du? 941 00:44:43,535 --> 00:44:44,451 Han föreläser. 942 00:44:44,451 --> 00:44:47,650 DAVID MALAN: Och vi kan använda en Funktionen kallas malloc att memory-- 943 00:44:47,650 --> 00:44:50,050 >> TALARE 1: Varför är inte armarna flytta? 944 00:44:50,050 --> 00:44:52,450 >> TALARE 2: Tja that's-- du vet, det är normalt. 945 00:44:52,450 --> 00:44:57,162 Det är precis som han har bara stora korvar hänger där. 946 00:44:57,162 --> 00:44:59,040 >> TALARE 1: Det är normalt? 947 00:44:59,040 --> 00:45:03,096 >> TALARE 2: Ja, jag tror att vi bara antar att han av misstag 948 00:45:03,096 --> 00:45:06,840 ersatt sin deodorant med superlim. 949 00:45:06,840 --> 00:45:07,608