WEBVTT X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000 00:00:00.000 --> 00:00:05.280 [MUSIC PLAYING] 00:00:11.520 --> 00:00:18.840 SPEAKER 1: One year ago, in this quiet library, in this cozy studio, something 00:00:18.840 --> 00:00:22.410 happened, something so frightening-- 00:00:22.410 --> 00:00:24.270 SPEAKER 2: Ah. 00:00:24.270 --> 00:00:25.950 SPEAKER 1: Something so deadly-- 00:00:28.470 --> 00:00:38.214 something so evil-- we prayed it would never happen again. 00:00:38.214 --> 00:00:39.070 SPEAKER 3: Ah. 00:00:39.070 --> 00:00:46.527 SPEAKER 1: Now from the creators of CS50 Live comes CS50 Live. 00:00:54.592 --> 00:00:55.800 DAVID J. MALAN: Hello, world. 00:00:55.800 --> 00:00:59.578 This is CS50 Live, season one, zero indexed. 00:00:59.578 --> 00:01:00.120 That's right. 00:01:00.120 --> 00:01:02.245 We've been picked up by Harvard for another season. 00:01:02.245 --> 00:01:04.629 And boy do we have an amazing episode for you today. 00:01:04.629 --> 00:01:08.250 First we'll take a look back at the most popular passwords of this past year, 00:01:08.250 --> 00:01:11.670 we'll look at a nasty bug in a popular gaming platform, 00:01:11.670 --> 00:01:14.430 we'll give you a new definition of the word evil, 00:01:14.430 --> 00:01:16.860 and we'll pay a visit to our friends at Google. 00:01:16.860 --> 00:01:17.790 No relation. 00:01:17.790 --> 00:01:21.432 But first, let's take a look back at season one. 00:01:21.432 --> 00:01:25.128 [MUSIC PLAYING] 00:01:26.520 --> 00:01:27.360 Hello, world. 00:01:27.360 --> 00:01:27.960 This is-- 00:01:27.960 --> 00:01:28.220 SPEAKER 5: CS-- 00:01:28.220 --> 00:01:29.137 RAMON GALVAN: 50 Live. 00:01:29.137 --> 00:01:31.368 I'm Ramon Galvan, filling in today for David-- 00:01:31.368 --> 00:01:32.910 DAVID J. MALAN: Who's lost his voice. 00:01:32.910 --> 00:01:35.702 RAMON GALVAN: Today, he'll be the Andy Richter to my Conan O'Brien. 00:01:35.702 --> 00:01:40.200 [MUSIC PLAYING] 00:02:00.473 --> 00:02:02.390 DAVID J. MALAN: And now for our first bug fix. 00:02:02.390 --> 00:02:06.200 This is of course season zero's look back and not season one. 00:02:06.200 --> 00:02:07.520 But what else is new? 00:02:07.520 --> 00:02:09.949 Well, it turns out not much in the world of passwords. 00:02:09.949 --> 00:02:15.590 In fact, the most popular password of this past year was as before 123456 00:02:15.590 --> 00:02:19.560 followed closely in second place by old school, password. 00:02:19.560 --> 00:02:24.110 However, in third place this year, up 17 places, is our old favorite 00:02:24.110 --> 00:02:29.360 12345, which you may remember from such films as this one here. 00:02:29.360 --> 00:02:35.600 Now in 17th-- in 25th place, meanwhile, is a newcomer, dragon, perhaps because 00:02:35.600 --> 00:02:36.990 of such films as this one. 00:02:36.990 --> 00:02:39.500 Now in 25th place-- 00:02:39.500 --> 00:02:41.843 and now for our second bug fix of the season. 00:02:41.843 --> 00:02:43.760 Whereas that was in ninth place, dragon, we're 00:02:43.760 --> 00:02:47.000 now going to take a look at 25th place, trustno1. 00:02:47.000 --> 00:02:50.690 Now if you think you've been oh so clever by using one, the number, 00:02:50.690 --> 00:02:52.610 instead of one the word in your password, 00:02:52.610 --> 00:02:56.400 well, rest assured that so have millions of other people. 00:02:56.400 --> 00:02:59.580 Now you may recall this expression from such films as this one here. 00:02:59.580 --> 00:03:02.225 And speaking of Scully, we'd like to welcome aboard to CS50-- 00:03:02.225 --> 00:03:06.470 CS50's newest team member, Scully, pictured here at a recent field trip 00:03:06.470 --> 00:03:08.240 to a CS50 ice skating rink. 00:03:08.240 --> 00:03:10.050 In fact, can we enhance? 00:03:10.050 --> 00:03:10.550 No. 00:03:10.550 --> 00:03:11.570 Can we enhance? 00:03:11.570 --> 00:03:12.620 Yes, indeed. 00:03:12.620 --> 00:03:14.030 That is our Scully. 00:03:14.030 --> 00:03:15.560 Welcome aboard. 00:03:15.560 --> 00:03:17.902 And now a nasty bug in a popular software 00:03:17.902 --> 00:03:19.610 from our friends at Valve Software called 00:03:19.610 --> 00:03:22.490 Steam, which is a platform for downloading and then playing 00:03:22.490 --> 00:03:23.690 popular video games. 00:03:23.690 --> 00:03:27.560 Well, turns out that a user recently reported to the Linux community 00:03:27.560 --> 00:03:29.720 for Steam's client the following bug. 00:03:29.720 --> 00:03:33.710 He moved his local share Steam directory, he ran Steam, 00:03:33.710 --> 00:03:36.810 and it deleted everything on the system owned by user. 00:03:36.810 --> 00:03:39.200 In other words, simply by moving one of his folders 00:03:39.200 --> 00:03:42.650 for this game, Steam-- for this platform gaming-- for this gaming platform 00:03:42.650 --> 00:03:45.990 Steam, he ended up deleting all of the files on his hard drive. 00:03:45.990 --> 00:03:49.550 Now what's fascinating, if you take a look at this thread on github.com 00:03:49.550 --> 00:03:53.250 is you'll see that the community chased down the bug to this line here, 00:03:53.250 --> 00:03:56.180 which declares a so-called environment variable on the left, 00:03:56.180 --> 00:03:58.370 assigns it the value here on the right. 00:03:58.370 --> 00:04:00.350 But unfortunately, it turns out if you do 00:04:00.350 --> 00:04:04.850 move a certain directory, this value you can evaluate to just quote unquote, 00:04:04.850 --> 00:04:06.350 or the so-called empty string. 00:04:06.350 --> 00:04:10.730 Now unfortunately, later in the file was this very dangerous line here. 00:04:10.730 --> 00:04:14.210 rm-rf and then STEAMROOT slash star. 00:04:14.210 --> 00:04:17.360 Unfortunately, if STEAMROOT is itself the empty string, 00:04:17.360 --> 00:04:21.350 this becomes just slash star, which of course, has the effect of saying, 00:04:21.350 --> 00:04:25.640 remove recursively and forcibly everything 00:04:25.640 --> 00:04:27.133 in the root of my hard drive. 00:04:27.133 --> 00:04:30.050 Now thankfully, this particular fellow had backups of all of his data. 00:04:30.050 --> 00:04:31.118 So not all was lost. 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 00:04:34.160 --> 00:04:37.700 therefore, go ahead to GitHub's URL here. 00:04:37.700 --> 00:04:39.650 And now a word from our old friend Cookie 00:04:39.650 --> 00:04:42.500 Monster, who's holding in his hands here Verizon, 00:04:42.500 --> 00:04:45.620 who gives us today our new definition of the word evil. 00:04:45.620 --> 00:04:48.410 You may recall a few months back that Verizon, as well 00:04:48.410 --> 00:04:50.510 as another popular cell phone company in the US, 00:04:50.510 --> 00:04:55.370 AT&T, were injecting so-called super cookies into the mobile HTTP 00:04:55.370 --> 00:04:59.120 traffic from folks like me who are using phones to access the internet. 00:04:59.120 --> 00:05:02.990 Specifically, they were introducing into our HTTP traffic 00:05:02.990 --> 00:05:08.000 a header called UIDH, which essentially inserted a unique value associated 00:05:08.000 --> 00:05:11.150 somehow to my cell phone and perhaps your cell phone so 00:05:11.150 --> 00:05:15.590 that any website that receives that value can know that this is me again, 00:05:15.590 --> 00:05:17.030 and again, and again. 00:05:17.030 --> 00:05:19.130 Of course, this effectively allows websites 00:05:19.130 --> 00:05:23.240 to track me under the premise of serving up more effective advertising, 00:05:23.240 --> 00:05:26.690 but nonetheless maliciously potentially, keeping track of who I am. 00:05:26.690 --> 00:05:29.630 Because in fact, even if I delete all of my phone's cookies 00:05:29.630 --> 00:05:32.390 and even if I use my browser's Incognito Mode, 00:05:32.390 --> 00:05:37.050 this UIDH header is still being injected by a company like Verizon. 00:05:37.050 --> 00:05:39.230 Now thankfully, Verizon recently announced 00:05:39.230 --> 00:05:41.180 that they're going to let us finally opt out 00:05:41.180 --> 00:05:42.988 of this horrible, horrible practice. 00:05:42.988 --> 00:05:44.780 And yet all along, they've been assuring us 00:05:44.780 --> 00:05:48.090 the UIDH was designed with privacy protections in place. 00:05:48.090 --> 00:05:50.660 It changes automatically and frequently and does not 00:05:50.660 --> 00:05:52.880 contain any customer information. 00:05:52.880 --> 00:05:54.860 Now the last of those claims might be true. 00:05:54.860 --> 00:05:58.460 But this is ridiculous to claim that by changing it periodically 00:05:58.460 --> 00:06:01.160 and automatically, you're actually protecting us users. 00:06:01.160 --> 00:06:03.410 Consider after all how a malicious website 00:06:03.410 --> 00:06:05.180 can figure out who we still are. 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, 00:06:08.545 --> 00:06:11.420 and suppose for the sake of discussion that this website on the right 00:06:11.420 --> 00:06:14.660 happens to be running PHP, and therefore uses session cookies, 00:06:14.660 --> 00:06:17.480 and gives me a value called PHPSESSID to remember 00:06:17.480 --> 00:06:20.150 who I am as with one of those digital hand stamps. 00:06:20.150 --> 00:06:22.760 Well, the next time I make an HTTP request to the server, 00:06:22.760 --> 00:06:27.530 I'm going to present that hand stamp, PHPSESSID, and it might equal ABCD. 00:06:27.530 --> 00:06:30.650 But meanwhile, Verizon, as a so-called man in the middle, 00:06:30.650 --> 00:06:36.560 is going to be injecting a little something like this, UIDH:1234, 00:06:36.560 --> 00:06:40.260 which is my unique identifier so long as Verizon is concerned. 00:06:40.260 --> 00:06:42.290 Now so long as this website remembers that, 00:06:42.290 --> 00:06:45.650 he can correlate of course ABCD with 1234. 00:06:45.650 --> 00:06:49.280 But suppose the next time I visit the website, I again send that same cookie, 00:06:49.280 --> 00:06:50.330 ABCD. 00:06:50.330 --> 00:06:53.060 But Verizon is now claiming that they're protecting me 00:06:53.060 --> 00:06:55.790 by changing my value to say 5678. 00:06:55.790 --> 00:06:59.140 Well, it doesn't take a particularly sophisticated line of code 00:06:59.140 --> 00:07:02.680 to realize ABCD used to be 1234. 00:07:02.680 --> 00:07:05.530 Now ABCD is 5678. 00:07:05.530 --> 00:07:11.140 Let me update my own database so that I realize that 1234 and 5678 are 00:07:11.140 --> 00:07:13.660 and have always been the same person. 00:07:13.660 --> 00:07:15.220 It's not much protection indeed. 00:07:15.220 --> 00:07:18.340 Now for more details and to learn more about these kinds of threats, 00:07:18.340 --> 00:07:20.120 head to this URL here. 00:07:20.120 --> 00:07:23.380 And if you'd like to be paranoid, and you should now be, 00:07:23.380 --> 00:07:26.920 head to amibeingtracked.com. 00:07:26.920 --> 00:07:28.930 And now for a new segment altogether. 00:07:28.930 --> 00:07:30.850 You know that depictions of technology are 00:07:30.850 --> 00:07:33.070 quite popular in today's films and TV. 00:07:33.070 --> 00:07:35.300 But they're not necessarily always accurate. 00:07:35.300 --> 00:07:39.340 In fact, let's take a look at a popular film from yesteryear, Weird Science, 00:07:39.340 --> 00:07:41.350 and pass a little CS50 judgment. 00:07:45.340 --> 00:07:46.435 Let's roll film. 00:07:46.435 --> 00:07:47.540 [VIDEO PLAYBACK] 00:07:48.040 --> 00:07:51.340 Here we have two fellas trying to hack into a computer system using an age 00:07:51.340 --> 00:07:56.140 old modem by putting the phone on top of the computer. 00:07:56.140 --> 00:07:58.360 This man is now defending himself against the attack. 00:08:00.647 --> 00:08:03.230 If you've ever wondered what it means to hack, this of course, 00:08:03.230 --> 00:08:06.340 is what it truly is. 00:08:06.340 --> 00:08:09.770 Those are some backup tapes. 00:08:09.770 --> 00:08:10.490 Yeah, access. 00:08:10.490 --> 00:08:12.870 That's what happens when access is denied. 00:08:12.870 --> 00:08:15.120 Now wait for it. 00:08:15.120 --> 00:08:16.400 Wait for it. 00:08:16.400 --> 00:08:18.557 Bowling alley effect. 00:08:18.557 --> 00:08:19.640 And now we have to choose. 00:08:19.640 --> 00:08:20.890 How are we going to hack this? 00:08:20.890 --> 00:08:22.680 We're going to hack to the left. 00:08:22.680 --> 00:08:23.180 Yeah, no. 00:08:23.180 --> 00:08:26.780 That was the wrong choice. 00:08:26.780 --> 00:08:27.620 Let's try again. 00:08:27.620 --> 00:08:29.090 Back up. 00:08:29.090 --> 00:08:30.770 Let's go down the middle. 00:08:30.770 --> 00:08:31.370 Here we go. 00:08:33.890 --> 00:08:34.429 All right. 00:08:34.429 --> 00:08:36.890 Wait for it. 00:08:36.890 --> 00:08:38.690 Wait for it. 00:08:38.690 --> 00:08:40.520 I wonder what time it is. 00:08:40.520 --> 00:08:41.600 Oh. 00:08:41.600 --> 00:08:44.037 Oh, and physics, of course, is relevant. 00:08:44.037 --> 00:08:44.870 SPEAKER 6: We're in. 00:08:44.870 --> 00:08:45.600 [END PLAYBACK] 00:08:45.600 --> 00:08:46.100 DAVID J. MALAN: No. 00:08:46.100 --> 00:08:46.400 No. 00:08:46.400 --> 00:08:46.900 No. 00:08:46.900 --> 00:08:47.790 We're not in. 00:08:47.790 --> 00:08:49.160 That's enough of that. 00:08:49.160 --> 00:08:53.480 But if you'd like to learn a bit more about this, Google Weird Science. 00:08:53.480 --> 00:08:55.652 And in fact, speaking of Google, we recently 00:08:55.652 --> 00:08:58.610 headed out to Mountain View, California to meet with two of our friends 00:08:58.610 --> 00:09:02.150 from Google to talk with them about what it's like to develop software 00:09:02.150 --> 00:09:03.420 in the real world. 00:09:03.420 --> 00:09:06.110 In fact, we met with them outside of the actual building 00:09:06.110 --> 00:09:08.300 in which Android software is developed. 00:09:08.300 --> 00:09:09.920 Let's take a look. 00:09:09.920 --> 00:09:13.910 ANDREW SELLERGREN: My story starts senior year of college in 2007. 00:09:13.910 --> 00:09:17.760 I was a chemistry major and planning to go to medical school. 00:09:17.760 --> 00:09:19.110 I signed up for CS50. 00:09:19.110 --> 00:09:21.110 This was the first year that David was teaching. 00:09:21.110 --> 00:09:21.845 I loved it. 00:09:21.845 --> 00:09:22.970 I loved every minute of it. 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. 00:09:28.810 --> 00:09:30.710 I bounced around a little bit after college. 00:09:30.710 --> 00:09:32.377 I didn't end up going to medical school. 00:09:32.377 --> 00:09:37.490 And I decided to teach myself more about computer science. 00:09:37.490 --> 00:09:39.440 And I ended up getting a job at Google. 00:09:39.440 --> 00:09:40.987 And I'm now on the Android team. 00:09:40.987 --> 00:09:43.820 JOHN NICKERSON: Here at Google, I work in the Anti-Abuse engineering 00:09:43.820 --> 00:09:47.510 department and our product quality operations group, specifically 00:09:47.510 --> 00:09:50.000 fighting click fraud on our ad networks. 00:09:50.000 --> 00:09:53.120 ANDREW SELLERGREN: Recently, I've been working on a website. 00:09:53.120 --> 00:09:56.120 And of course, at Google, developing a website 00:09:56.120 --> 00:09:58.650 means you want to be able to serve millions of users. 00:09:58.650 --> 00:10:01.800 So we have to get things like load balancing in place. 00:10:01.800 --> 00:10:06.170 We have to make sure that the static content gets served very quickly 00:10:06.170 --> 00:10:09.860 and is optimized for all of our users. 00:10:09.860 --> 00:10:12.260 And in order to test this, one of the things we do 00:10:12.260 --> 00:10:13.740 is we write integration tests. 00:10:13.740 --> 00:10:16.340 So we have to bring up all of our servers, 00:10:16.340 --> 00:10:21.380 including the login servers, the static content servers, bring those all up, 00:10:21.380 --> 00:10:23.570 and then test that our website loads. 00:10:23.570 --> 00:10:29.000 So we use a framework called Selenium, which is open source. 00:10:29.000 --> 00:10:34.490 And it allows you to fire up a browser and actually load your website in it, 00:10:34.490 --> 00:10:36.530 and then perform actions on it. 00:10:36.530 --> 00:10:39.170 The interesting challenges are digging into those logs, 00:10:39.170 --> 00:10:40.970 figuring out what's going on. 00:10:40.970 --> 00:10:44.382 And that's what I've been wrestling with the last week or so actually. 00:10:44.382 --> 00:10:46.340 JOHN NICKERSON: Ran into an interesting problem 00:10:46.340 --> 00:10:49.320 where we were dependent on date and time. 00:10:49.320 --> 00:10:51.770 And when you think about date and time, you usually only 00:10:51.770 --> 00:10:53.840 think about your local system because you're coding on it, 00:10:53.840 --> 00:10:55.640 and you compile on it, and you run on it. 00:10:55.640 --> 00:10:57.890 But what happens is when you're in a global-- 00:10:57.890 --> 00:11:01.210 you have a global footprint with data centers all over the world, 00:11:01.210 --> 00:11:03.210 local time doesn't really mean anything anymore. 00:11:03.210 --> 00:11:06.200 So we realize that local time was actually causing problems 00:11:06.200 --> 00:11:11.460 because the database that all of our data was stored in had a timestamp. 00:11:11.460 --> 00:11:15.590 And so timestamps now were very timezone dependent, which none of the code 00:11:15.590 --> 00:11:16.470 accounted for. 00:11:16.470 --> 00:11:19.160 And so what we ended up realizing was that all of a sudden, 00:11:19.160 --> 00:11:23.540 jobs were running that they thought were running eight hours in the future 00:11:23.540 --> 00:11:25.430 were actually running presently. 00:11:25.430 --> 00:11:27.590 The end result was to just normalize any time 00:11:27.590 --> 00:11:31.310 we're using date times to make sure they're in either UTC timestamp 00:11:31.310 --> 00:11:34.937 so that we normalize the time, or just double check to make sure 00:11:34.937 --> 00:11:37.520 that we're running in an environment that is known at the time 00:11:37.520 --> 00:11:41.900 so that we don't run into these sorts of weird math time calculation problems 00:11:41.900 --> 00:11:42.560 that we did. 00:11:42.560 --> 00:11:43.220 ANDREW SELLERGREN: Hello, world. 00:11:43.220 --> 00:11:44.210 I'm Andrew Sellergren. 00:11:44.210 --> 00:11:45.766 JOHN NICKERSON: And this is CS50. 00:11:49.217 --> 00:11:51.060 DAVID J. MALAN: And now for a special treat. 00:11:51.060 --> 00:11:52.890 At Harvard, there's a tradition of shopping 00:11:52.890 --> 00:11:55.652 for courses whereby students can take a look at classes 00:11:55.652 --> 00:11:57.360 for the week at the start of the semester 00:11:57.360 --> 00:11:59.710 before actually enrolling in those classes. 00:11:59.710 --> 00:12:03.840 We thought we'd honor this tradition by producing CS50's first ever music 00:12:03.840 --> 00:12:06.060 video toward an end of getting students and hopefully 00:12:06.060 --> 00:12:09.540 you excited about what awaits in CS50. 00:12:09.540 --> 00:12:12.651 This is "Funk 50". 00:12:12.651 --> 00:12:14.361 SPEAKER 7: Do. 00:12:14.361 --> 00:12:16.306 Do, do, do, do, do, do. 00:12:16.306 --> 00:12:18.066 Do, do. 00:12:18.066 --> 00:12:22.260 Do, do, do, do, do, do, do, do. 00:12:22.260 --> 00:12:26.355 Do, do, do, do, do, do, do, do. 00:12:26.355 --> 00:12:28.820 Do, do, do, do, do. 00:12:28.820 --> 00:12:32.800 SPEAKER 8: Learn C that good code, JavaScript for that net gold. 00:12:32.800 --> 00:12:36.550 This one for them undergrads, them hackers, straight coding beasts. 00:12:36.550 --> 00:12:40.330 Typing, while I'm compiling it on stage. 00:12:40.330 --> 00:12:42.550 Got hoodies on with Rob Bowden. 00:12:42.550 --> 00:12:44.470 Got to go with CS50. 00:12:44.470 --> 00:12:45.550 We can't stop. 00:12:45.550 --> 00:12:46.590 SPEAKER 9: Oh yeah. 00:12:46.590 --> 00:12:48.580 SPEAKER 8: Called a crimson and a bulldog. 00:12:48.580 --> 00:12:49.300 Code a lot. 00:12:49.300 --> 00:12:50.152 SPEAKER 9: Oh yeah. 00:12:50.152 --> 00:12:52.450 SPEAKER 8: Make Zuck want to come back again. 00:12:52.450 --> 00:12:53.330 We can't stop. 00:12:53.330 --> 00:12:54.340 SPEAKER 9: Oh yeah. 00:12:54.340 --> 00:12:56.440 SPEAKER 8: What a name, that Harvard man. 00:12:56.440 --> 00:12:57.296 Why not? 00:12:57.296 --> 00:12:58.152 SPEAKER 9: Oh yeah. 00:12:58.152 --> 00:12:59.940 Am I good about that fair. 00:12:59.940 --> 00:13:00.820 Break it down. 00:13:00.820 --> 00:13:02.830 Course is your hallelujah. 00:13:02.830 --> 00:13:04.780 Puzzles be coming to you. 00:13:04.780 --> 00:13:06.610 Course is your hallelujah. 00:13:06.610 --> 00:13:08.490 Because these Malan going to teach it to you. 00:13:08.490 --> 00:13:10.696 Because your TF going to teach it to you. 00:13:10.696 --> 00:13:12.895 Because you for sure going to learn it to you. 00:13:12.895 --> 00:13:14.810 Thursday night and we in the Berg. 00:13:14.810 --> 00:13:16.150 Don't believe me, just shop. 00:13:22.770 --> 00:13:24.130 Don't believe me, just shop. 00:13:30.436 --> 00:13:32.790 Don't believe me, just shop. 00:13:32.790 --> 00:13:34.496 Don't believe me, just shop. 00:13:34.496 --> 00:13:36.730 Don't believe me just shop. 00:13:36.730 --> 00:13:38.065 Don't believe me just shop. 00:13:38.065 --> 00:13:40.700 Hey, hey, hey, oh. 00:13:40.700 --> 00:13:42.660 CS50 what? 00:13:42.660 --> 00:13:44.620 Come on, code it up. 00:13:44.620 --> 00:13:46.580 CS50, what? 00:13:46.580 --> 00:13:48.540 Come on, code it up. 00:13:48.540 --> 00:13:50.500 CS50, what? 00:13:50.500 --> 00:13:52.460 Come on, code it up. 00:13:52.460 --> 00:13:56.693 CS50 what? 00:13:56.693 --> 00:13:58.360 DAVID J. MALAN: That's it for CS50 Live. 00:13:58.360 --> 00:14:00.460 Thanks so much to Oleg, and Joe, and Patrick, 00:14:00.460 --> 00:14:04.960 and to Dan, Shelly, Colton, Ramon, and our newest team member, Scully. 00:14:04.960 --> 00:14:06.340 This was CS50. 00:14:06.340 --> 00:14:10.890 [MUSIC PLAYING]