1 00:00:00,000 --> 00:00:05,280 [MUSIC PLAYING] 2 00:00:05,280 --> 00:00:11,520 3 00:00:11,520 --> 00:00:18,840 SPEAKER 1: One year ago, in this quiet library, in this cozy studio, something 4 00:00:18,840 --> 00:00:22,410 happened, something so frightening-- 5 00:00:22,410 --> 00:00:24,270 SPEAKER 2: Ah. 6 00:00:24,270 --> 00:00:25,950 SPEAKER 1: Something so deadly-- 7 00:00:25,950 --> 00:00:28,470 8 00:00:28,470 --> 00:00:38,214 something so evil-- we prayed it would never happen again. 9 00:00:38,214 --> 00:00:39,070 SPEAKER 3: Ah. 10 00:00:39,070 --> 00:00:46,527 SPEAKER 1: Now from the creators of CS50 Live comes CS50 Live. 11 00:00:46,527 --> 00:00:54,592 12 00:00:54,592 --> 00:00:55,800 DAVID J. MALAN: Hello, world. 13 00:00:55,800 --> 00:00:59,578 This is CS50 Live, season one, zero indexed. 14 00:00:59,578 --> 00:01:00,120 That's right. 15 00:01:00,120 --> 00:01:02,245 We've been picked up by Harvard for another season. 16 00:01:02,245 --> 00:01:04,629 And boy do we have an amazing episode for you today. 17 00:01:04,629 --> 00:01:08,250 First we'll take a look back at the most popular passwords of this past year, 18 00:01:08,250 --> 00:01:11,670 we'll look at a nasty bug in a popular gaming platform, 19 00:01:11,670 --> 00:01:14,430 we'll give you a new definition of the word evil, 20 00:01:14,430 --> 00:01:16,860 and we'll pay a visit to our friends at Google. 21 00:01:16,860 --> 00:01:17,790 No relation. 22 00:01:17,790 --> 00:01:21,432 But first, let's take a look back at season one. 23 00:01:21,432 --> 00:01:25,128 [MUSIC PLAYING] 24 00:01:25,128 --> 00:01:26,520 25 00:01:26,520 --> 00:01:27,360 Hello, world. 26 00:01:27,360 --> 00:01:27,960 This is-- 27 00:01:27,960 --> 00:01:28,220 SPEAKER 5: CS-- 28 00:01:28,220 --> 00:01:29,137 RAMON GALVAN: 50 Live. 29 00:01:29,137 --> 00:01:31,368 I'm Ramon Galvan, filling in today for David-- 30 00:01:31,368 --> 00:01:32,910 DAVID J. MALAN: Who's lost his voice. 31 00:01:32,910 --> 00:01:35,702 RAMON GALVAN: Today, he'll be the Andy Richter to my Conan O'Brien. 32 00:01:35,702 --> 00:01:40,200 [MUSIC PLAYING] 33 00:01:40,200 --> 00:02:00,473 34 00:02:00,473 --> 00:02:02,390 DAVID J. MALAN: And now for our first bug fix. 35 00:02:02,390 --> 00:02:06,200 This is of course season zero's look back and not season one. 36 00:02:06,200 --> 00:02:07,520 But what else is new? 37 00:02:07,520 --> 00:02:09,949 Well, it turns out not much in the world of passwords. 38 00:02:09,949 --> 00:02:15,590 In fact, the most popular password of this past year was as before 123456 39 00:02:15,590 --> 00:02:19,560 followed closely in second place by old school, password. 40 00:02:19,560 --> 00:02:24,110 However, in third place this year, up 17 places, is our old favorite 41 00:02:24,110 --> 00:02:29,360 12345, which you may remember from such films as this one here. 42 00:02:29,360 --> 00:02:35,600 Now in 17th-- in 25th place, meanwhile, is a newcomer, dragon, perhaps because 43 00:02:35,600 --> 00:02:36,990 of such films as this one. 44 00:02:36,990 --> 00:02:39,500 Now in 25th place-- 45 00:02:39,500 --> 00:02:41,843 and now for our second bug fix of the season. 46 00:02:41,843 --> 00:02:43,760 Whereas that was in ninth place, dragon, we're 47 00:02:43,760 --> 00:02:47,000 now going to take a look at 25th place, trustno1. 48 00:02:47,000 --> 00:02:50,690 Now if you think you've been oh so clever by using one, the number, 49 00:02:50,690 --> 00:02:52,610 instead of one the word in your password, 50 00:02:52,610 --> 00:02:56,400 well, rest assured that so have millions of other people. 51 00:02:56,400 --> 00:02:59,580 Now you may recall this expression from such films as this one here. 52 00:02:59,580 --> 00:03:02,225 And speaking of Scully, we'd like to welcome aboard to CS50-- 53 00:03:02,225 --> 00:03:06,470 CS50's newest team member, Scully, pictured here at a recent field trip 54 00:03:06,470 --> 00:03:08,240 to a CS50 ice skating rink. 55 00:03:08,240 --> 00:03:10,050 In fact, can we enhance? 56 00:03:10,050 --> 00:03:10,550 No. 57 00:03:10,550 --> 00:03:11,570 Can we enhance? 58 00:03:11,570 --> 00:03:12,620 Yes, indeed. 59 00:03:12,620 --> 00:03:14,030 That is our Scully. 60 00:03:14,030 --> 00:03:15,560 Welcome aboard. 61 00:03:15,560 --> 00:03:17,902 And now a nasty bug in a popular software 62 00:03:17,902 --> 00:03:19,610 from our friends at Valve Software called 63 00:03:19,610 --> 00:03:22,490 Steam, which is a platform for downloading and then playing 64 00:03:22,490 --> 00:03:23,690 popular video games. 65 00:03:23,690 --> 00:03:27,560 Well, turns out that a user recently reported to the Linux community 66 00:03:27,560 --> 00:03:29,720 for Steam's client the following bug. 67 00:03:29,720 --> 00:03:33,710 He moved his local share Steam directory, he ran Steam, 68 00:03:33,710 --> 00:03:36,810 and it deleted everything on the system owned by user. 69 00:03:36,810 --> 00:03:39,200 In other words, simply by moving one of his folders 70 00:03:39,200 --> 00:03:42,650 for this game, Steam-- for this platform gaming-- for this gaming platform 71 00:03:42,650 --> 00:03:45,990 Steam, he ended up deleting all of the files on his hard drive. 72 00:03:45,990 --> 00:03:49,550 Now what's fascinating, if you take a look at this thread on github.com 73 00:03:49,550 --> 00:03:53,250 is you'll see that the community chased down the bug to this line here, 74 00:03:53,250 --> 00:03:56,180 which declares a so-called environment variable on the left, 75 00:03:56,180 --> 00:03:58,370 assigns it the value here on the right. 76 00:03:58,370 --> 00:04:00,350 But unfortunately, it turns out if you do 77 00:04:00,350 --> 00:04:04,850 move a certain directory, this value you can evaluate to just quote unquote, 78 00:04:04,850 --> 00:04:06,350 or the so-called empty string. 79 00:04:06,350 --> 00:04:10,730 Now unfortunately, later in the file was this very dangerous line here. 80 00:04:10,730 --> 00:04:14,210 rm-rf and then STEAMROOT slash star. 81 00:04:14,210 --> 00:04:17,360 Unfortunately, if STEAMROOT is itself the empty string, 82 00:04:17,360 --> 00:04:21,350 this becomes just slash star, which of course, has the effect of saying, 83 00:04:21,350 --> 00:04:25,640 remove recursively and forcibly everything 84 00:04:25,640 --> 00:04:27,133 in the root of my hard drive. 85 00:04:27,133 --> 00:04:30,050 Now thankfully, this particular fellow had backups of all of his data. 86 00:04:30,050 --> 00:04:31,118 So not all was lost. 87 00:04:31,118 --> 00:04:34,160 But if you'd like to take a closer look at this bug and the resulting fix 88 00:04:34,160 --> 00:04:37,700 therefore, go ahead to GitHub's URL here. 89 00:04:37,700 --> 00:04:39,650 And now a word from our old friend Cookie 90 00:04:39,650 --> 00:04:42,500 Monster, who's holding in his hands here Verizon, 91 00:04:42,500 --> 00:04:45,620 who gives us today our new definition of the word evil. 92 00:04:45,620 --> 00:04:48,410 You may recall a few months back that Verizon, as well 93 00:04:48,410 --> 00:04:50,510 as another popular cell phone company in the US, 94 00:04:50,510 --> 00:04:55,370 AT&T, were injecting so-called super cookies into the mobile HTTP 95 00:04:55,370 --> 00:04:59,120 traffic from folks like me who are using phones to access the internet. 96 00:04:59,120 --> 00:05:02,990 Specifically, they were introducing into our HTTP traffic 97 00:05:02,990 --> 00:05:08,000 a header called UIDH, which essentially inserted a unique value associated 98 00:05:08,000 --> 00:05:11,150 somehow to my cell phone and perhaps your cell phone so 99 00:05:11,150 --> 00:05:15,590 that any website that receives that value can know that this is me again, 100 00:05:15,590 --> 00:05:17,030 and again, and again. 101 00:05:17,030 --> 00:05:19,130 Of course, this effectively allows websites 102 00:05:19,130 --> 00:05:23,240 to track me under the premise of serving up more effective advertising, 103 00:05:23,240 --> 00:05:26,690 but nonetheless maliciously potentially, keeping track of who I am. 104 00:05:26,690 --> 00:05:29,630 Because in fact, even if I delete all of my phone's cookies 105 00:05:29,630 --> 00:05:32,390 and even if I use my browser's Incognito Mode, 106 00:05:32,390 --> 00:05:37,050 this UIDH header is still being injected by a company like Verizon. 107 00:05:37,050 --> 00:05:39,230 Now thankfully, Verizon recently announced 108 00:05:39,230 --> 00:05:41,180 that they're going to let us finally opt out 109 00:05:41,180 --> 00:05:42,988 of this horrible, horrible practice. 110 00:05:42,988 --> 00:05:44,780 And yet all along, they've been assuring us 111 00:05:44,780 --> 00:05:48,090 the UIDH was designed with privacy protections in place. 112 00:05:48,090 --> 00:05:50,660 It changes automatically and frequently and does not 113 00:05:50,660 --> 00:05:52,880 contain any customer information. 114 00:05:52,880 --> 00:05:54,860 Now the last of those claims might be true. 115 00:05:54,860 --> 00:05:58,460 But this is ridiculous to claim that by changing it periodically 116 00:05:58,460 --> 00:06:01,160 and automatically, you're actually protecting us users. 117 00:06:01,160 --> 00:06:03,410 Consider after all how a malicious website 118 00:06:03,410 --> 00:06:05,180 can figure out who we still are. 119 00:06:05,180 --> 00:06:08,545 If this is me here on the left trying to visit a website like this on the right, 120 00:06:08,545 --> 00:06:11,420 and suppose for the sake of discussion that this website on the right 121 00:06:11,420 --> 00:06:14,660 happens to be running PHP, and therefore uses session cookies, 122 00:06:14,660 --> 00:06:17,480 and gives me a value called PHPSESSID to remember 123 00:06:17,480 --> 00:06:20,150 who I am as with one of those digital hand stamps. 124 00:06:20,150 --> 00:06:22,760 Well, the next time I make an HTTP request to the server, 125 00:06:22,760 --> 00:06:27,530 I'm going to present that hand stamp, PHPSESSID, and it might equal ABCD. 126 00:06:27,530 --> 00:06:30,650 But meanwhile, Verizon, as a so-called man in the middle, 127 00:06:30,650 --> 00:06:36,560 is going to be injecting a little something like this, UIDH:1234, 128 00:06:36,560 --> 00:06:40,260 which is my unique identifier so long as Verizon is concerned. 129 00:06:40,260 --> 00:06:42,290 Now so long as this website remembers that, 130 00:06:42,290 --> 00:06:45,650 he can correlate of course ABCD with 1234. 131 00:06:45,650 --> 00:06:49,280 But suppose the next time I visit the website, I again send that same cookie, 132 00:06:49,280 --> 00:06:50,330 ABCD. 133 00:06:50,330 --> 00:06:53,060 But Verizon is now claiming that they're protecting me 134 00:06:53,060 --> 00:06:55,790 by changing my value to say 5678. 135 00:06:55,790 --> 00:06:59,140 Well, it doesn't take a particularly sophisticated line of code 136 00:06:59,140 --> 00:07:02,680 to realize ABCD used to be 1234. 137 00:07:02,680 --> 00:07:05,530 Now ABCD is 5678. 138 00:07:05,530 --> 00:07:11,140 Let me update my own database so that I realize that 1234 and 5678 are 139 00:07:11,140 --> 00:07:13,660 and have always been the same person. 140 00:07:13,660 --> 00:07:15,220 It's not much protection indeed. 141 00:07:15,220 --> 00:07:18,340 Now for more details and to learn more about these kinds of threats, 142 00:07:18,340 --> 00:07:20,120 head to this URL here. 143 00:07:20,120 --> 00:07:23,380 And if you'd like to be paranoid, and you should now be, 144 00:07:23,380 --> 00:07:26,920 head to amibeingtracked.com. 145 00:07:26,920 --> 00:07:28,930 And now for a new segment altogether. 146 00:07:28,930 --> 00:07:30,850 You know that depictions of technology are 147 00:07:30,850 --> 00:07:33,070 quite popular in today's films and TV. 148 00:07:33,070 --> 00:07:35,300 But they're not necessarily always accurate. 149 00:07:35,300 --> 00:07:39,340 In fact, let's take a look at a popular film from yesteryear, Weird Science, 150 00:07:39,340 --> 00:07:41,350 and pass a little CS50 judgment. 151 00:07:41,350 --> 00:07:45,340 152 00:07:45,340 --> 00:07:46,435 Let's roll film. 153 00:07:46,435 --> 00:07:47,540 [VIDEO PLAYBACK] 154 00:07:47,540 --> 00:07:48,040 155 00:07:48,040 --> 00:07:51,340 Here we have two fellas trying to hack into a computer system using an age 156 00:07:51,340 --> 00:07:56,140 old modem by putting the phone on top of the computer. 157 00:07:56,140 --> 00:07:58,360 This man is now defending himself against the attack. 158 00:07:58,360 --> 00:08:00,647 159 00:08:00,647 --> 00:08:03,230 If you've ever wondered what it means to hack, this of course, 160 00:08:03,230 --> 00:08:06,340 is what it truly is. 161 00:08:06,340 --> 00:08:09,770 Those are some backup tapes. 162 00:08:09,770 --> 00:08:10,490 Yeah, access. 163 00:08:10,490 --> 00:08:12,870 That's what happens when access is denied. 164 00:08:12,870 --> 00:08:15,120 Now wait for it. 165 00:08:15,120 --> 00:08:16,400 Wait for it. 166 00:08:16,400 --> 00:08:18,557 Bowling alley effect. 167 00:08:18,557 --> 00:08:19,640 And now we have to choose. 168 00:08:19,640 --> 00:08:20,890 How are we going to hack this? 169 00:08:20,890 --> 00:08:22,680 We're going to hack to the left. 170 00:08:22,680 --> 00:08:23,180 Yeah, no. 171 00:08:23,180 --> 00:08:26,780 That was the wrong choice. 172 00:08:26,780 --> 00:08:27,620 Let's try again. 173 00:08:27,620 --> 00:08:29,090 Back up. 174 00:08:29,090 --> 00:08:30,770 Let's go down the middle. 175 00:08:30,770 --> 00:08:31,370 Here we go. 176 00:08:31,370 --> 00:08:33,890 177 00:08:33,890 --> 00:08:34,429 All right. 178 00:08:34,429 --> 00:08:36,890 Wait for it. 179 00:08:36,890 --> 00:08:38,690 Wait for it. 180 00:08:38,690 --> 00:08:40,520 I wonder what time it is. 181 00:08:40,520 --> 00:08:41,600 Oh. 182 00:08:41,600 --> 00:08:44,037 Oh, and physics, of course, is relevant. 183 00:08:44,037 --> 00:08:44,870 SPEAKER 6: We're in. 184 00:08:44,870 --> 00:08:45,600 [END PLAYBACK] 185 00:08:45,600 --> 00:08:46,100 DAVID J. MALAN: No. 186 00:08:46,100 --> 00:08:46,400 No. 187 00:08:46,400 --> 00:08:46,900 No. 188 00:08:46,900 --> 00:08:47,790 We're not in. 189 00:08:47,790 --> 00:08:49,160 That's enough of that. 190 00:08:49,160 --> 00:08:53,480 But if you'd like to learn a bit more about this, Google Weird Science. 191 00:08:53,480 --> 00:08:55,652 And in fact, speaking of Google, we recently 192 00:08:55,652 --> 00:08:58,610 headed out to Mountain View, California to meet with two of our friends 193 00:08:58,610 --> 00:09:02,150 from Google to talk with them about what it's like to develop software 194 00:09:02,150 --> 00:09:03,420 in the real world. 195 00:09:03,420 --> 00:09:06,110 In fact, we met with them outside of the actual building 196 00:09:06,110 --> 00:09:08,300 in which Android software is developed. 197 00:09:08,300 --> 00:09:09,920 Let's take a look. 198 00:09:09,920 --> 00:09:13,910 ANDREW SELLERGREN: My story starts senior year of college in 2007. 199 00:09:13,910 --> 00:09:17,760 I was a chemistry major and planning to go to medical school. 200 00:09:17,760 --> 00:09:19,110 I signed up for CS50. 201 00:09:19,110 --> 00:09:21,110 This was the first year that David was teaching. 202 00:09:21,110 --> 00:09:21,845 I loved it. 203 00:09:21,845 --> 00:09:22,970 I loved every minute of it. 204 00:09:22,970 --> 00:09:28,810 David was nice enough to invite me back the next year to be a TF for CS50. 205 00:09:28,810 --> 00:09:30,710 I bounced around a little bit after college. 206 00:09:30,710 --> 00:09:32,377 I didn't end up going to medical school. 207 00:09:32,377 --> 00:09:37,490 And I decided to teach myself more about computer science. 208 00:09:37,490 --> 00:09:39,440 And I ended up getting a job at Google. 209 00:09:39,440 --> 00:09:40,987 And I'm now on the Android team. 210 00:09:40,987 --> 00:09:43,820 JOHN NICKERSON: Here at Google, I work in the Anti-Abuse engineering 211 00:09:43,820 --> 00:09:47,510 department and our product quality operations group, specifically 212 00:09:47,510 --> 00:09:50,000 fighting click fraud on our ad networks. 213 00:09:50,000 --> 00:09:53,120 ANDREW SELLERGREN: Recently, I've been working on a website. 214 00:09:53,120 --> 00:09:56,120 And of course, at Google, developing a website 215 00:09:56,120 --> 00:09:58,650 means you want to be able to serve millions of users. 216 00:09:58,650 --> 00:10:01,800 So we have to get things like load balancing in place. 217 00:10:01,800 --> 00:10:06,170 We have to make sure that the static content gets served very quickly 218 00:10:06,170 --> 00:10:09,860 and is optimized for all of our users. 219 00:10:09,860 --> 00:10:12,260 And in order to test this, one of the things we do 220 00:10:12,260 --> 00:10:13,740 is we write integration tests. 221 00:10:13,740 --> 00:10:16,340 So we have to bring up all of our servers, 222 00:10:16,340 --> 00:10:21,380 including the login servers, the static content servers, bring those all up, 223 00:10:21,380 --> 00:10:23,570 and then test that our website loads. 224 00:10:23,570 --> 00:10:29,000 So we use a framework called Selenium, which is open source. 225 00:10:29,000 --> 00:10:34,490 And it allows you to fire up a browser and actually load your website in it, 226 00:10:34,490 --> 00:10:36,530 and then perform actions on it. 227 00:10:36,530 --> 00:10:39,170 The interesting challenges are digging into those logs, 228 00:10:39,170 --> 00:10:40,970 figuring out what's going on. 229 00:10:40,970 --> 00:10:44,382 And that's what I've been wrestling with the last week or so actually. 230 00:10:44,382 --> 00:10:46,340 JOHN NICKERSON: Ran into an interesting problem 231 00:10:46,340 --> 00:10:49,320 where we were dependent on date and time. 232 00:10:49,320 --> 00:10:51,770 And when you think about date and time, you usually only 233 00:10:51,770 --> 00:10:53,840 think about your local system because you're coding on it, 234 00:10:53,840 --> 00:10:55,640 and you compile on it, and you run on it. 235 00:10:55,640 --> 00:10:57,890 But what happens is when you're in a global-- 236 00:10:57,890 --> 00:11:01,210 you have a global footprint with data centers all over the world, 237 00:11:01,210 --> 00:11:03,210 local time doesn't really mean anything anymore. 238 00:11:03,210 --> 00:11:06,200 So we realize that local time was actually causing problems 239 00:11:06,200 --> 00:11:11,460 because the database that all of our data was stored in had a timestamp. 240 00:11:11,460 --> 00:11:15,590 And so timestamps now were very timezone dependent, which none of the code 241 00:11:15,590 --> 00:11:16,470 accounted for. 242 00:11:16,470 --> 00:11:19,160 And so what we ended up realizing was that all of a sudden, 243 00:11:19,160 --> 00:11:23,540 jobs were running that they thought were running eight hours in the future 244 00:11:23,540 --> 00:11:25,430 were actually running presently. 245 00:11:25,430 --> 00:11:27,590 The end result was to just normalize any time 246 00:11:27,590 --> 00:11:31,310 we're using date times to make sure they're in either UTC timestamp 247 00:11:31,310 --> 00:11:34,937 so that we normalize the time, or just double check to make sure 248 00:11:34,937 --> 00:11:37,520 that we're running in an environment that is known at the time 249 00:11:37,520 --> 00:11:41,900 so that we don't run into these sorts of weird math time calculation problems 250 00:11:41,900 --> 00:11:42,560 that we did. 251 00:11:42,560 --> 00:11:43,220 ANDREW SELLERGREN: Hello, world. 252 00:11:43,220 --> 00:11:44,210 I'm Andrew Sellergren. 253 00:11:44,210 --> 00:11:45,766 JOHN NICKERSON: And this is CS50. 254 00:11:45,766 --> 00:11:49,217 255 00:11:49,217 --> 00:11:51,060 DAVID J. MALAN: And now for a special treat. 256 00:11:51,060 --> 00:11:52,890 At Harvard, there's a tradition of shopping 257 00:11:52,890 --> 00:11:55,652 for courses whereby students can take a look at classes 258 00:11:55,652 --> 00:11:57,360 for the week at the start of the semester 259 00:11:57,360 --> 00:11:59,710 before actually enrolling in those classes. 260 00:11:59,710 --> 00:12:03,840 We thought we'd honor this tradition by producing CS50's first ever music 261 00:12:03,840 --> 00:12:06,060 video toward an end of getting students and hopefully 262 00:12:06,060 --> 00:12:09,540 you excited about what awaits in CS50. 263 00:12:09,540 --> 00:12:12,651 This is "Funk 50". 264 00:12:12,651 --> 00:12:14,361 SPEAKER 7: Do. 265 00:12:14,361 --> 00:12:16,306 Do, do, do, do, do, do. 266 00:12:16,306 --> 00:12:18,066 Do, do. 267 00:12:18,066 --> 00:12:22,260 Do, do, do, do, do, do, do, do. 268 00:12:22,260 --> 00:12:26,355 Do, do, do, do, do, do, do, do. 269 00:12:26,355 --> 00:12:28,820 Do, do, do, do, do. 270 00:12:28,820 --> 00:12:32,800 SPEAKER 8: Learn C that good code, JavaScript for that net gold. 271 00:12:32,800 --> 00:12:36,550 This one for them undergrads, them hackers, straight coding beasts. 272 00:12:36,550 --> 00:12:40,330 Typing, while I'm compiling it on stage. 273 00:12:40,330 --> 00:12:42,550 Got hoodies on with Rob Bowden. 274 00:12:42,550 --> 00:12:44,470 Got to go with CS50. 275 00:12:44,470 --> 00:12:45,550 We can't stop. 276 00:12:45,550 --> 00:12:46,590 SPEAKER 9: Oh yeah. 277 00:12:46,590 --> 00:12:48,580 SPEAKER 8: Called a crimson and a bulldog. 278 00:12:48,580 --> 00:12:49,300 Code a lot. 279 00:12:49,300 --> 00:12:50,152 SPEAKER 9: Oh yeah. 280 00:12:50,152 --> 00:12:52,450 SPEAKER 8: Make Zuck want to come back again. 281 00:12:52,450 --> 00:12:53,330 We can't stop. 282 00:12:53,330 --> 00:12:54,340 SPEAKER 9: Oh yeah. 283 00:12:54,340 --> 00:12:56,440 SPEAKER 8: What a name, that Harvard man. 284 00:12:56,440 --> 00:12:57,296 Why not? 285 00:12:57,296 --> 00:12:58,152 SPEAKER 9: Oh yeah. 286 00:12:58,152 --> 00:12:59,940 Am I good about that fair. 287 00:12:59,940 --> 00:13:00,820 Break it down. 288 00:13:00,820 --> 00:13:02,830 Course is your hallelujah. 289 00:13:02,830 --> 00:13:04,780 Puzzles be coming to you. 290 00:13:04,780 --> 00:13:06,610 Course is your hallelujah. 291 00:13:06,610 --> 00:13:08,490 Because these Malan going to teach it to you. 292 00:13:08,490 --> 00:13:10,696 Because your TF going to teach it to you. 293 00:13:10,696 --> 00:13:12,895 Because you for sure going to learn it to you. 294 00:13:12,895 --> 00:13:14,810 Thursday night and we in the Berg. 295 00:13:14,810 --> 00:13:16,150 Don't believe me, just shop. 296 00:13:16,150 --> 00:13:22,770 297 00:13:22,770 --> 00:13:24,130 Don't believe me, just shop. 298 00:13:24,130 --> 00:13:30,436 299 00:13:30,436 --> 00:13:32,790 Don't believe me, just shop. 300 00:13:32,790 --> 00:13:34,496 Don't believe me, just shop. 301 00:13:34,496 --> 00:13:36,730 Don't believe me just shop. 302 00:13:36,730 --> 00:13:38,065 Don't believe me just shop. 303 00:13:38,065 --> 00:13:40,700 Hey, hey, hey, oh. 304 00:13:40,700 --> 00:13:42,660 CS50 what? 305 00:13:42,660 --> 00:13:44,620 Come on, code it up. 306 00:13:44,620 --> 00:13:46,580 CS50, what? 307 00:13:46,580 --> 00:13:48,540 Come on, code it up. 308 00:13:48,540 --> 00:13:50,500 CS50, what? 309 00:13:50,500 --> 00:13:52,460 Come on, code it up. 310 00:13:52,460 --> 00:13:56,693 CS50 what? 311 00:13:56,693 --> 00:13:58,360 DAVID J. MALAN: That's it for CS50 Live. 312 00:13:58,360 --> 00:14:00,460 Thanks so much to Oleg, and Joe, and Patrick, 313 00:14:00,460 --> 00:14:04,960 and to Dan, Shelly, Colton, Ramon, and our newest team member, Scully. 314 00:14:04,960 --> 00:14:06,340 This was CS50. 315 00:14:06,340 --> 00:14:10,890 [MUSIC PLAYING] 316 00:14:10,890 --> 00:14:24,000