1 00:00:00,000 --> 00:00:17,044 2 00:00:17,044 --> 00:00:18,210 DAVID J. MALAN: Hello world. 3 00:00:18,210 --> 00:00:22,679 This is CS50 Live and this is March 14, which means, happy pi day. 4 00:00:22,679 --> 00:00:24,470 Now it's been a while since we've seen you, 5 00:00:24,470 --> 00:00:26,682 because last Friday, Rob Bowden and I were actually 6 00:00:26,682 --> 00:00:28,390 away at a conference in Atlanta, Georgia. 7 00:00:28,390 --> 00:00:30,525 A conference known as SIGCSE, the Special Interest 8 00:00:30,525 --> 00:00:33,400 Group on Computer Science Education, which every year brings together 9 00:00:33,400 --> 00:00:35,900 some 1,000 educators to talk about and to work 10 00:00:35,900 --> 00:00:38,692 on improvements on computer science education. 11 00:00:38,692 --> 00:00:40,650 One of the keynote speakers this year, in fact, 12 00:00:40,650 --> 00:00:42,800 was the founder of code.org, which you might 13 00:00:42,800 --> 00:00:44,550 have seen in the press over the past year. 14 00:00:44,550 --> 00:00:47,050 They've done an extraordinary job over the past year getting 15 00:00:47,050 --> 00:00:50,310 people excited about computer science, and about programming in particular. 16 00:00:50,310 --> 00:00:52,351 In fact, one of their most well known initiatives 17 00:00:52,351 --> 00:00:56,560 is known as The Hour of Code which is an opportunity and a curriculum via which 18 00:00:56,560 --> 00:00:58,769 you, or a friend, or a family member, or colleague, 19 00:00:58,769 --> 00:01:01,810 could get your hands dirty with a bit of computer science and programming 20 00:01:01,810 --> 00:01:04,610 for just an hour to see if you take to it. 21 00:01:04,610 --> 00:01:06,964 >> In fact, if you yourself have a friend, family member, 22 00:01:06,964 --> 00:01:10,130 or colleague who would like to try his or her hand at some computer science, 23 00:01:10,130 --> 00:01:13,390 but you think throwing them into CS50's curriculum might be a bit too much too 24 00:01:13,390 --> 00:01:17,910 soon, well by all means, refer them to code.org/learn where they can try 25 00:01:17,910 --> 00:01:21,110 their hand for just one hour at a bit of computer science. 26 00:01:21,110 --> 00:01:23,180 Or better yet, show them this clip. 27 00:01:23,180 --> 00:01:27,570 >> [VIDEO PLAYBACK] 28 00:01:27,570 --> 00:01:28,570 >> -Hi, I'm Leah. 29 00:01:28,570 --> 00:01:29,320 >> -And I'm Tonya. 30 00:01:29,320 --> 00:01:31,820 >> -And we're lucky enough to be studying computer science. 31 00:01:31,820 --> 00:01:34,895 We think it's terrible that 90% of school don't teach it. 32 00:01:34,895 --> 00:01:37,020 -They definitely didn't offer it at my high school. 33 00:01:37,020 --> 00:01:40,047 -So we're trying to make this video to show that anybody can learn. 34 00:01:40,047 --> 00:01:42,463 We want to get 10 million students to do The Hour of Code. 35 00:01:42,463 --> 00:01:43,810 >> -Hour of Code. 36 00:01:43,810 --> 00:01:44,410 >> -Hour of Code. 37 00:01:44,410 --> 00:01:45,405 >> -The Hour of Code. 38 00:01:45,405 --> 00:01:46,317 >> -Hour of Code. 39 00:01:46,317 --> 00:01:46,900 -Hour of Code. 40 00:01:46,900 --> 00:01:47,460 -Hour of Code. 41 00:01:47,460 --> 00:01:48,043 -Hour of Code. 42 00:01:48,043 --> 00:01:49,947 -The Hour of Code. 43 00:01:49,947 --> 00:01:51,780 -How do you get him to get to the sunflower. 44 00:01:51,780 --> 00:01:53,920 He needs to do some actions. 45 00:01:53,920 --> 00:01:54,560 >> -I got it. 46 00:01:54,560 --> 00:01:56,440 Yay. 47 00:01:56,440 --> 00:01:59,610 >> -And then we'll run it and see what happens. 48 00:01:59,610 --> 00:02:00,415 >> -Amazing. 49 00:02:00,415 --> 00:02:02,598 >> -There we go. 50 00:02:02,598 --> 00:02:04,483 >> -You just wrote your first program. 51 00:02:04,483 --> 00:02:04,983 -I wrote it? 52 00:02:04,983 --> 00:02:05,937 -Yeah. 53 00:02:05,937 --> 00:02:07,368 -This is the code you just wrote. 54 00:02:07,368 --> 00:02:08,800 -Very awesome. 55 00:02:08,800 --> 00:02:12,317 -I thought like, code was like FBI hacker, symbols and stuff. 56 00:02:12,317 --> 00:02:14,650 -A little bit of problem solving, a little bit of logic. 57 00:02:14,650 --> 00:02:15,650 -It's like instructions. 58 00:02:15,650 --> 00:02:18,040 -Programming is a lot easier today. 59 00:02:18,040 --> 00:02:20,060 -Don't just play on your phone. 60 00:02:20,060 --> 00:02:20,600 Program it. 61 00:02:20,600 --> 00:02:21,099 >> -All right. 62 00:02:21,099 --> 00:02:21,926 -Awesome. 63 00:02:21,926 --> 00:02:24,050 >> -How does someone go about getting a job? 64 00:02:24,050 --> 00:02:26,960 >> -Maybe take an online class, find a class at a community college. 65 00:02:26,960 --> 00:02:29,219 >> -You can get one of the best paying jobs in the world. 66 00:02:29,219 --> 00:02:31,510 -I think medicine's moving into the whole computer age. 67 00:02:31,510 --> 00:02:33,450 -Technology touches every part of our lives. 68 00:02:33,450 --> 00:02:36,340 If you can create technology, you can change the world. 69 00:02:36,340 --> 00:02:39,539 >> -So we're excited that you're participating in today's Hour of Code. 70 00:02:39,539 --> 00:02:40,830 -We just did two lines of code. 71 00:02:40,830 --> 00:02:42,471 -Three lines of code. 72 00:02:42,471 --> 00:02:42,970 -Four lines. 73 00:02:42,970 --> 00:02:43,760 -Seven lines. 74 00:02:43,760 --> 00:02:44,585 -Five lines. 75 00:02:44,585 --> 00:02:49,435 76 00:02:49,435 --> 00:02:50,971 -16 lines of codes. 77 00:02:50,971 --> 00:02:51,720 -99 lines of code. 78 00:02:51,720 --> 00:02:52,670 -60 lines. 79 00:02:52,670 --> 00:02:54,380 -18 lines of code. 80 00:02:54,380 --> 00:02:56,330 -75 lines of code. 81 00:02:56,330 --> 00:02:58,700 -It doesn't matter how old you are. 82 00:02:58,700 --> 00:02:59,426 -Hour of Code. 83 00:02:59,426 --> 00:03:01,890 -Hour of Code. 84 00:03:01,890 --> 00:03:02,880 -The Hour of Code. 85 00:03:02,880 --> 00:03:03,750 -The Hour of Code. 86 00:03:03,750 --> 00:03:06,410 -The Hour of Code. 87 00:03:06,410 --> 00:03:08,555 -Whether you're young man or a young woman. 88 00:03:08,555 --> 00:03:11,127 Whether you live in a city or rural area. 89 00:03:11,127 --> 00:03:13,876 -Everybody in this country should learn how to program a computer. 90 00:03:13,876 --> 00:03:15,001 -And I just completed the-- 91 00:03:15,001 --> 00:03:16,050 -Hour of Code. 92 00:03:16,050 --> 00:03:17,790 -It's actually really easy to learn. 93 00:03:17,790 --> 00:03:19,330 -Girls should learn this, too. 94 00:03:19,330 --> 00:03:22,940 -Understand that language that's going to be the future. 95 00:03:22,940 --> 00:03:24,420 -Anyone can learn computer science. 96 00:03:24,420 --> 00:03:25,378 -And you can learn too. 97 00:03:25,378 --> 00:03:29,374 -Jack Dorsey, Mark Zuckerberg, Bill Gates, all of y'all, I'm learning. 98 00:03:29,374 --> 00:03:30,040 -Give it a shot. 99 00:03:30,040 --> 00:03:43,330 100 00:03:43,330 --> 00:03:44,300 >> [END VIDEO PLAYBACK] 101 00:03:44,300 --> 00:03:47,610 >> Now something tells me that if you're in CS50 or is in CS50x, 102 00:03:47,610 --> 00:03:50,850 you've spent well more than just an hour on coding. 103 00:03:50,850 --> 00:03:53,080 But for any family members, friends, or colleagues 104 00:03:53,080 --> 00:03:56,450 that you'd like to introduce to this world, here's another incentive. 105 00:03:56,450 --> 00:03:57,440 Remember this guy? 106 00:03:57,440 --> 00:03:59,860 Very popular of late, has been a so-called flappy 107 00:03:59,860 --> 00:04:01,540 bird on various platforms. 108 00:04:01,540 --> 00:04:05,310 And here we have a URL, at code.org/flappy, 109 00:04:05,310 --> 00:04:08,400 where the kind folks at code.org can put together a tool via which you 110 00:04:08,400 --> 00:04:12,570 or a friend can make your own implementation of that popular game. 111 00:04:12,570 --> 00:04:13,910 So do check it out. 112 00:04:13,910 --> 00:04:15,811 >> Now that conference, and last Friday. 113 00:04:15,811 --> 00:04:18,060 Rob Bowden and I where again, away at this conference, 114 00:04:18,060 --> 00:04:19,768 and we thought about having a guest host. 115 00:04:19,768 --> 00:04:22,174 And we tried out quite a few folks for auditions. 116 00:04:22,174 --> 00:04:24,090 None of them seemed to work out, so we thought 117 00:04:24,090 --> 00:04:27,110 we'd show you a few clips of what did transpire. 118 00:04:27,110 --> 00:04:27,810 >> [VIDEO PLAYBACK] 119 00:04:27,810 --> 00:04:31,670 >> RAMON GALVAN: I'm Ramon Galvan filling in for your normal host, David Malan. 120 00:04:31,670 --> 00:04:40,340 The US military's passcode was 000000, not really safe if you ask me. 121 00:04:40,340 --> 00:04:43,430 Nevertheless, I love you. 122 00:04:43,430 --> 00:04:45,650 Unlike David, who circles you. 123 00:04:45,650 --> 00:04:48,880 124 00:04:48,880 --> 00:04:51,040 Let's not go over this mistake. 125 00:04:51,040 --> 00:04:53,067 What is this about? 126 00:04:53,067 --> 00:04:54,733 Let's just see a video with Harry Lewis. 127 00:04:54,733 --> 00:04:55,116 >> [END VIDEO PLAYBACK] 128 00:04:55,116 --> 00:04:57,721 >> DAVID J. MALAN: Now, what's most funny about that clip is not 129 00:04:57,721 --> 00:05:00,720 how Ramon performed in front of the camera, but how Ramon does not know, 130 00:05:00,720 --> 00:05:02,870 until as of a few moments ago, that we were 131 00:05:02,870 --> 00:05:05,860 going to play those clips back here for you on the internet. 132 00:05:05,860 --> 00:05:07,680 So CS50's own, Ramon Galvan. 133 00:05:07,680 --> 00:05:10,070 Coming back perhaps in some future episode. 134 00:05:10,070 --> 00:05:12,460 >> Now meanwhile, you may recall we left last times episode 135 00:05:12,460 --> 00:05:14,670 on a bit of a cliffhanger, where we mentioned 136 00:05:14,670 --> 00:05:17,250 that Rob Bowden has a twin brother, Paul. 137 00:05:17,250 --> 00:05:19,450 Who, again, fancies himself a bit of a comedian. 138 00:05:19,450 --> 00:05:22,200 But he also happened to appear in a popular American game show, 139 00:05:22,200 --> 00:05:23,696 and we asked you which one. 140 00:05:23,696 --> 00:05:25,570 Well several of you wrote in with the answer. 141 00:05:25,570 --> 00:05:27,580 And here's one such example. 142 00:05:27,580 --> 00:05:31,140 >> In CS50 live, David mentioned about Robert's twin brother, Paul Bowden, 143 00:05:31,140 --> 00:05:32,590 and asked about to Google it. 144 00:05:32,590 --> 00:05:34,420 Well looks like he's in Harvard, too. 145 00:05:34,420 --> 00:05:37,990 And, Who Wants To Be A Millionaire, and yes, if I'm the first one 146 00:05:37,990 --> 00:05:41,810 to report this, David, sir, I would be glad to be famous on the next CS50 147 00:05:41,810 --> 00:05:42,310 live. 148 00:05:42,310 --> 00:05:45,400 So consider yourself famous because the answer was indeed, 149 00:05:45,400 --> 00:05:46,650 Who Wants To Be A Millionaire. 150 00:05:46,650 --> 00:05:50,390 And in fact, pictured here is Paul Bowden alongside that TV show's host. 151 00:05:50,390 --> 00:05:53,344 And we also did a bit of digging, and found this clip for you. 152 00:05:53,344 --> 00:05:54,010 [VIDEO PLAYBACK] 153 00:05:54,010 --> 00:05:56,410 -Paul Bowden from Franklin, New Jersey. 154 00:05:56,410 --> 00:05:59,290 155 00:05:59,290 --> 00:05:59,897 Hey Paul. 156 00:05:59,897 --> 00:06:00,730 Welcome to the show. 157 00:06:00,730 --> 00:06:02,650 >> -Thank you. 158 00:06:02,650 --> 00:06:06,140 >> -Paul it says here you are a Sophomore at Harvard University, obviously 159 00:06:06,140 --> 00:06:07,840 a smart guy. 160 00:06:07,840 --> 00:06:09,400 >> -I guess. 161 00:06:09,400 --> 00:06:11,384 >> -Well in my book that certainly suggests so. 162 00:06:11,384 --> 00:06:13,800 And I know when you were standing in line for Millionaire, 163 00:06:13,800 --> 00:06:17,420 a sign from heaven said you're probably going to do well, right? 164 00:06:17,420 --> 00:06:19,260 >> -You could say that. 165 00:06:19,260 --> 00:06:22,920 When I was standing in line I had a Polo shirt that was tucked in 166 00:06:22,920 --> 00:06:26,300 and a bird happened to poop right down the back of my shirt. 167 00:06:26,300 --> 00:06:28,510 And it was still tucked in. 168 00:06:28,510 --> 00:06:30,390 But it ended up being good luck. 169 00:06:30,390 --> 00:06:32,070 >> -It is good luck, see? 170 00:06:32,070 --> 00:06:33,440 There you go, you're here. 171 00:06:33,440 --> 00:06:35,086 All right, Paul. 172 00:06:35,086 --> 00:06:36,440 Are you ready? 173 00:06:36,440 --> 00:06:36,941 >> -I am ready. 174 00:06:36,941 --> 00:06:37,440 -All right. 175 00:06:37,440 --> 00:06:38,685 Then let's play Millionaire. 176 00:06:38,685 --> 00:06:41,360 177 00:06:41,360 --> 00:06:44,120 And your brother's been sitting behind you, your brother Rob. 178 00:06:44,120 --> 00:06:45,220 How are you, Rob? 179 00:06:45,220 --> 00:06:46,150 >> -I'm good how are you? 180 00:06:46,150 --> 00:06:47,421 >> -Twin brother. 181 00:06:47,421 --> 00:06:47,920 -Yes. 182 00:06:47,920 --> 00:06:50,290 -Now you're, the younger though, you came out six minutes later, right? 183 00:06:50,290 --> 00:06:51,130 Is that correct? 184 00:06:51,130 --> 00:06:51,650 >> -I am, yes. 185 00:06:51,650 --> 00:06:53,970 >> -But are you the smarter brother? 186 00:06:53,970 --> 00:06:55,480 >> -Well, I don't want to brag. 187 00:06:55,480 --> 00:06:56,765 So I can't answer that. 188 00:06:56,765 --> 00:06:58,600 >> [END VIDEO PLAYBACK] 189 00:06:58,600 --> 00:07:02,610 >> -So Rob has a twin, writes another of your classmates, hmm interesting. 190 00:07:02,610 --> 00:07:04,410 How deep does the rabbit hole go? 191 00:07:04,410 --> 00:07:08,290 I have a question, why do problem sets take so long to be autograded? 192 00:07:08,290 --> 00:07:09,860 What goes on behind the scenes? 193 00:07:09,860 --> 00:07:11,590 So we thought this would actually be a good question 194 00:07:11,590 --> 00:07:14,930 to answer because it does suggest a bit of an underlying interesting technical 195 00:07:14,930 --> 00:07:15,620 details. 196 00:07:15,620 --> 00:07:18,880 Contrary to popular belief, they are not in fact graded by Muppets, but rather 197 00:07:18,880 --> 00:07:21,950 by an infrastructure that we know as Check 50 on the client. 198 00:07:21,950 --> 00:07:25,350 And an infrastructure we know its sandbox 50 on the server side. 199 00:07:25,350 --> 00:07:27,250 >> Now for those unfamiliar, in order to test 200 00:07:27,250 --> 00:07:30,009 the correctness of some of CS50's problem set problems, 201 00:07:30,009 --> 00:07:32,050 you can run a command in the CS50 appliance known 202 00:07:32,050 --> 00:07:35,355 as check 50, where you specify a unique identifier for the test 203 00:07:35,355 --> 00:07:36,230 that you want to run. 204 00:07:36,230 --> 00:07:38,050 And then you specify the paths to the file 205 00:07:38,050 --> 00:07:40,697 or files that you want to upload to the servers for testing. 206 00:07:40,697 --> 00:07:42,780 Now, when the response comes back from the server, 207 00:07:42,780 --> 00:07:45,820 hopefully you see all green smiley faces, like those here, 208 00:07:45,820 --> 00:07:49,000 indicating that I wrote "hello, world" very correctly. 209 00:07:49,000 --> 00:07:51,630 By contrast, if I did something wrong, like not actually 210 00:07:51,630 --> 00:07:55,045 naming the file correctly, I might get this scary red unhappy face 211 00:07:55,045 --> 00:07:58,230 saying hello.c exists, which means it does not 212 00:07:58,230 --> 00:07:59,669 in fact, as indicated by the red. 213 00:07:59,669 --> 00:08:01,460 And if something's in yellow, meanwhile, it 214 00:08:01,460 --> 00:08:04,400 means that those checks didn't even run because of some dependency, 215 00:08:04,400 --> 00:08:07,030 some earlier test did not in fact succeed. 216 00:08:07,030 --> 00:08:09,164 >> So what's really happening underneath the hood? 217 00:08:09,164 --> 00:08:11,080 Well when you run this check 50 command, we're 218 00:08:11,080 --> 00:08:12,830 essentially zipping up all of your files, 219 00:08:12,830 --> 00:08:16,510 compressing them, sending them up to see CS50's cluster of servers, where 220 00:08:16,510 --> 00:08:19,090 we then create what's called a sandbox around them. 221 00:08:19,090 --> 00:08:21,100 Essentially you can think of this as a folder, 222 00:08:21,100 --> 00:08:25,250 and as a special user that exists solely for the purpose of compiling 223 00:08:25,250 --> 00:08:28,790 and running that specific code in isolation from anyone else's, 224 00:08:28,790 --> 00:08:32,480 so that just in case a student has an accidental infinite loop or worse, 225 00:08:32,480 --> 00:08:35,200 it's not going to necessarily affect anyone else on the system. 226 00:08:35,200 --> 00:08:39,200 Nor can any files be manipulated or deleted that shouldn't be allowed. 227 00:08:39,200 --> 00:08:41,159 >> Now, how does the code get tested? 228 00:08:41,159 --> 00:08:45,950 Well, we wrote a whole infrastructure called again, sandbox-- CS 50 sandbox. 229 00:08:45,950 --> 00:08:48,470 And this infrastructure is written, surprise, 230 00:08:48,470 --> 00:08:49,980 in a language called JavaScript. 231 00:08:49,980 --> 00:08:53,000 Which you might know, from clientside experiences, but it turns out 232 00:08:53,000 --> 00:08:55,490 you can also use JavaScript on the server side. 233 00:08:55,490 --> 00:08:57,450 What do some of the tests actually look like? 234 00:08:57,450 --> 00:09:01,260 Well here's some server side JavaScript code, and it's just an excerpt thereof. 235 00:09:01,260 --> 00:09:04,710 But this represents two checks that we might run on your code. 236 00:09:04,710 --> 00:09:08,360 >> The first of which up top there, checks whether the file hello.c exists, 237 00:09:08,360 --> 00:09:11,880 and the second one actually checks if your file compiles OK. 238 00:09:11,880 --> 00:09:15,080 And that is what ultimately generates those unhappy faces 239 00:09:15,080 --> 00:09:18,479 or those happy faces that you see in the form of check 50 results. 240 00:09:18,479 --> 00:09:20,270 Now, for much more technical detail, you're 241 00:09:20,270 --> 00:09:23,436 welcome to take a look at this paper here, which coincidentally was actually 242 00:09:23,436 --> 00:09:25,680 presented at last year's SIGCSE conference, 243 00:09:25,680 --> 00:09:28,660 and it dives into much more detail as to how that system works 244 00:09:28,660 --> 00:09:31,010 and why we built it last year. 245 00:09:31,010 --> 00:09:33,180 >> Now, in the media of late, has been this expression 246 00:09:33,180 --> 00:09:35,640 here-- goto fail, the so-called goto fail 247 00:09:35,640 --> 00:09:38,410 bug that plagued Apple Computer recently. 248 00:09:38,410 --> 00:09:42,021 Now, we don't introduce this in CS 50, because the goto statement in C 249 00:09:42,021 --> 00:09:44,770 is generally frowned upon, even though it definitely has its uses. 250 00:09:44,770 --> 00:09:47,490 And what this means here, goto fail, is that whatever 251 00:09:47,490 --> 00:09:50,550 program has this line of code, should go to, that is 252 00:09:50,550 --> 00:09:54,290 jump to, another line of code irrespective of any lines 253 00:09:54,290 --> 00:09:58,300 in between it, and that line of code will be labeled with the keyword fail. 254 00:09:58,300 --> 00:10:01,005 >> And fail could be anything, a FUBAR [? BES ?] but in this case, 255 00:10:01,005 --> 00:10:03,630 Apple chose to call it fail because it's the chunk of code that 256 00:10:03,630 --> 00:10:06,850 should execute if and when something has failed. 257 00:10:06,850 --> 00:10:10,717 Now, unfortunately, Apple made a mistake with this statement, as we'll soon see. 258 00:10:10,717 --> 00:10:12,550 And they recently released this announcement 259 00:10:12,550 --> 00:10:14,710 in one of their bug fix reports. 260 00:10:14,710 --> 00:10:16,950 An attacker with a privileged network position 261 00:10:16,950 --> 00:10:21,880 may capture or modify data in sessions protected by SSL/TLS. 262 00:10:21,880 --> 00:10:24,250 SSL, recall, was secure sockets layer, and it's 263 00:10:24,250 --> 00:10:28,070 the technology used to typically encrypt traffic between a web browser, 264 00:10:28,070 --> 00:10:31,730 say on a Mac or an iPhone, or any other device, and a web server. 265 00:10:31,730 --> 00:10:33,400 And TLS is related to that. 266 00:10:33,400 --> 00:10:36,670 >> This issue was addressed by restoring missing validation steps. 267 00:10:36,670 --> 00:10:40,350 So this was Apple's description of the problem and solution thereto. 268 00:10:40,350 --> 00:10:41,630 But what did this really mean? 269 00:10:41,630 --> 00:10:44,171 So we did some digging, and we actually found the source code 270 00:10:44,171 --> 00:10:49,170 for Apple's own implementation of SSL, which again affects Macs or iPhone, 271 00:10:49,170 --> 00:10:51,970 particularly if you're using Safari on those computers. 272 00:10:51,970 --> 00:10:53,890 Here's an excerpt from that code. 273 00:10:53,890 --> 00:10:56,140 >> Now, you might not recognize some of the functions. 274 00:10:56,140 --> 00:10:59,560 And you might not recognize the use of a go to statement up until now. 275 00:10:59,560 --> 00:11:01,480 But this is somewhat familiar syntax. 276 00:11:01,480 --> 00:11:04,900 We have some if conditions, some indentation, a function, curly braces. 277 00:11:04,900 --> 00:11:06,340 So not all that foreign. 278 00:11:06,340 --> 00:11:07,780 But let's zoom in a little bit. 279 00:11:07,780 --> 00:11:11,590 Here, adjust to those conditions, and here's mention of goto fail. 280 00:11:11,590 --> 00:11:12,579 Now, what is fail? 281 00:11:12,579 --> 00:11:14,870 Well let's actually scroll down further in the program. 282 00:11:14,870 --> 00:11:17,360 These are the lines of code, those three lines that 283 00:11:17,360 --> 00:11:20,970 are executed if you do indeed go to fail. 284 00:11:20,970 --> 00:11:22,430 >> Now, what's the issue then? 285 00:11:22,430 --> 00:11:24,430 Well, let's go back up to those conditions where 286 00:11:24,430 --> 00:11:28,630 I've highlighted in yellow all mentions of goto fail. 287 00:11:28,630 --> 00:11:30,860 See anything curious? 288 00:11:30,860 --> 00:11:32,210 Focus on the bottom there. 289 00:11:32,210 --> 00:11:32,710 Right? 290 00:11:32,710 --> 00:11:34,830 The code might be new, but the ideas are not. 291 00:11:34,830 --> 00:11:37,130 If we zoom in here, you'll notice that the programmer 292 00:11:37,130 --> 00:11:40,200 has written goto fail twice, but indented both of them. 293 00:11:40,200 --> 00:11:44,445 But you may have made this same mistake yourself in some problems for CS 50. 294 00:11:44,445 --> 00:11:47,070 Just because you indent two lines of code inside of a condition 295 00:11:47,070 --> 00:11:49,111 does not mean that they're both going to execute. 296 00:11:49,111 --> 00:11:52,240 They're only both going to execute if you actually surround both of them 297 00:11:52,240 --> 00:11:53,100 with what? 298 00:11:53,100 --> 00:11:54,320 Curly braces. 299 00:11:54,320 --> 00:11:57,130 >> So what's really happening if I sort of fix the indentation 300 00:11:57,130 --> 00:12:01,330 and don't add any curly braces, what's really happening underneath the hood, 301 00:12:01,330 --> 00:12:03,920 is that goto fail has essentially left alliance here, 302 00:12:03,920 --> 00:12:07,100 which means it's going to execute no matter what. 303 00:12:07,100 --> 00:12:09,640 And you're going to go to, or jump to, those three 304 00:12:09,640 --> 00:12:12,500 lines of code we looked at a moment ago. 305 00:12:12,500 --> 00:12:14,330 So what's the implication? 306 00:12:14,330 --> 00:12:17,760 Well, take a look at those bottom most two lines right here. 307 00:12:17,760 --> 00:12:20,450 Those lines will never, ever get reached. 308 00:12:20,450 --> 00:12:22,780 Because no matter what, that second goto fail 309 00:12:22,780 --> 00:12:25,790 is going to compel the program to jump right over those lines. 310 00:12:25,790 --> 00:12:28,030 And long story short, those last two lines 311 00:12:28,030 --> 00:12:31,100 are actually important for the correctness of SSL. 312 00:12:31,100 --> 00:12:35,610 >> Indeed, if they do not execute, it is possible or an adversary, a bad guy, 313 00:12:35,610 --> 00:12:38,210 to wage what is generally known as a man in the middle attack, 314 00:12:38,210 --> 00:12:41,860 pretending to be a secure website like Facebook, or Amazon, or Google. 315 00:12:41,860 --> 00:12:45,680 But really just see-- having an encrypted connection to you, 316 00:12:45,680 --> 00:12:48,792 and they then forward your traffic along, for better or for worse. 317 00:12:48,792 --> 00:12:50,750 Possibly your username, possibly your password, 318 00:12:50,750 --> 00:12:54,080 possibly your credit card information, to the actual site in question. 319 00:12:54,080 --> 00:12:55,410 Or not even at all. 320 00:12:55,410 --> 00:12:57,656 In other words, this breaks SSL. 321 00:12:57,656 --> 00:12:59,280 Now thankfully, Apple did address this. 322 00:12:59,280 --> 00:13:01,930 Both for Mac OS and iOS recently. 323 00:13:01,930 --> 00:13:04,790 But if you'd like to double check your computer is now up to date, 324 00:13:04,790 --> 00:13:08,630 assuming you have auto updates on, head to gotofail.com 325 00:13:08,630 --> 00:13:11,440 and you'll see a nice little test that will tell you as much. 326 00:13:11,440 --> 00:13:14,190 Meanwhile, if you'd like to take a look at the actual source code, 327 00:13:14,190 --> 00:13:16,990 this is a long URL, but here's the entire source code for that file 328 00:13:16,990 --> 00:13:19,740 if you'd like to get a sense of what the real world programming is 329 00:13:19,740 --> 00:13:22,310 like, and frankly real world bugs. 330 00:13:22,310 --> 00:13:25,390 >> Speaking of bugs, this meme was circulated quite a bit of late. 331 00:13:25,390 --> 00:13:28,670 99 little bugs in the code, 99 little bugs in the code, 332 00:13:28,670 --> 00:13:32,650 take one down, patch it around, 127 little bugs in the code. 333 00:13:32,650 --> 00:13:34,010 So what is this referring to? 334 00:13:34,010 --> 00:13:36,410 Possibly, this is an experience you yourself have had, 335 00:13:36,410 --> 00:13:39,400 where you try to chase down some bug, and then another, or maybe 336 00:13:39,400 --> 00:13:42,290 even more bugs spring up as a result of your having tried 337 00:13:42,290 --> 00:13:43,829 to address one problem. 338 00:13:43,829 --> 00:13:45,620 In fact, for this to hit home even further, 339 00:13:45,620 --> 00:13:48,080 let's pull up a face that is perhaps familiar. 340 00:13:48,080 --> 00:13:49,730 Hal, from Malcolm in the Middle. 341 00:13:49,730 --> 00:13:50,850 >> [VIDEO PLAYBACK] 342 00:13:50,850 --> 00:13:52,818 >> [MUSIC PLAYING] 343 00:13:52,818 --> 00:14:17,587 344 00:14:17,587 --> 00:14:18,420 [END VIDEO PLAYBACK] 345 00:14:18,420 --> 00:14:21,128 DAVID J. MALAN: And now some hellos from some of your classmates. 346 00:14:21,128 --> 00:14:24,405 Up first is Khalid, and a friend of his who hail from northern Virginia 347 00:14:24,405 --> 00:14:26,030 in the United States. 348 00:14:26,030 --> 00:14:30,590 >> KHALID: Ahoy CS50 mates, my name is Khalid [INAUDIBLE]. 349 00:14:30,590 --> 00:14:35,580 Meet my parrot, [INAUDIBLE] I live in northern Virginia. 350 00:14:35,580 --> 00:14:41,070 I'm an eighth grader and I'm excited to be part of CS50 class. 351 00:14:41,070 --> 00:14:46,340 This is great to experience a college but stay at home. 352 00:14:46,340 --> 00:14:49,980 As you can guess, I am enrolled in the online learning program. 353 00:14:49,980 --> 00:14:54,380 Feel free to experience my first project here. 354 00:14:54,380 --> 00:14:56,579 See you around. 355 00:14:56,579 --> 00:14:58,620 DAVID J. MALAN:And now let's head to Kansas City, 356 00:14:58,620 --> 00:15:00,464 Missouri where Derek awaits. 357 00:15:00,464 --> 00:15:03,380 Derek was at work when he filmed this so you might hear a bit of noise 358 00:15:03,380 --> 00:15:07,170 in the background since he works in a data center. 359 00:15:07,170 --> 00:15:10,520 >> DEREK MITCHELL: Hello world, my name is Derek Mitchell. 360 00:15:10,520 --> 00:15:12,930 I am in Kansas City, Missouri. 361 00:15:12,930 --> 00:15:16,790 And I'm taking the CS50 class because I really 362 00:15:16,790 --> 00:15:19,830 need to learn some programming for my job. 363 00:15:19,830 --> 00:15:20,770 This is where I work. 364 00:15:20,770 --> 00:15:27,030 I am a regional support technician for Cabela's, world's foremost outfitter. 365 00:15:27,030 --> 00:15:31,160 And I'm just trying to learn some more programming so I can excel at my career 366 00:15:31,160 --> 00:15:33,690 and just be a better technician. 367 00:15:33,690 --> 00:15:40,600 So again, my name is Derek Mitchell and this is CS50. 368 00:15:40,600 --> 00:15:45,950 >> [SPEAKING ITALIAN] 369 00:15:45,950 --> 00:15:47,110 >> FEDERICO: Hello world. 370 00:15:47,110 --> 00:15:48,318 My name is Federico Grivelli. 371 00:15:48,318 --> 00:15:49,210 I am from Italy. 372 00:15:49,210 --> 00:15:52,670 I was born in one of the largest cities in the country, Milan. 373 00:15:52,670 --> 00:15:56,720 And I was actually raised in a smaller city next to Milan. 374 00:15:56,720 --> 00:16:00,740 So here starts my desire on expanding my horizons. 375 00:16:00,740 --> 00:16:04,910 And this why today I am a foreign exchange student in Washington state. 376 00:16:04,910 --> 00:16:07,260 Of course, the United States of America. 377 00:16:07,260 --> 00:16:10,545 So American education is really different from Italian. 378 00:16:10,545 --> 00:16:14,150 Here I get much more hands on experience, 379 00:16:14,150 --> 00:16:17,870 rather than studies and memorization. 380 00:16:17,870 --> 00:16:24,430 So this was me, my name again is Federico Grivelli, and this is a CS50. 381 00:16:24,430 --> 00:16:27,240 >> DAVID J. MALAN: And now a hello from someone we weren't expecting. 382 00:16:27,240 --> 00:16:28,380 >> SARAH COFFEY: Hello world. 383 00:16:28,380 --> 00:16:32,030 My name is Sarah Coffey, I'm from Maltham, Massachusetts, 384 00:16:32,030 --> 00:16:35,810 and I'm married to CS50's own Dan Coffey. 385 00:16:35,810 --> 00:16:39,592 Dan, I just wanted to wish you a very happy birthday. 386 00:16:39,592 --> 00:16:42,550 DAVID J. MALAN:He doesn't know this is about to happen, but CS50's own, 387 00:16:42,550 --> 00:16:44,770 Danny Coffey, is right now in the control room. 388 00:16:44,770 --> 00:16:49,125 But is about to be on the internet, because today is 29th birthday. 389 00:16:49,125 --> 00:16:51,865 390 00:16:51,865 --> 00:16:53,308 Come on out Dan. 391 00:16:53,308 --> 00:16:57,160 392 00:16:57,160 --> 00:17:01,306 Please come out, Dan, otherwise this is about to be very awkward. 393 00:17:01,306 --> 00:17:04,010 Dan? 394 00:17:04,010 --> 00:17:08,040 This year is Dan Coffey, did not know this was going to be happening-- we 395 00:17:08,040 --> 00:17:10,780 of course have prepared this. 396 00:17:10,780 --> 00:17:20,980 So happy 29th birthday, and we hope you are, indeed, surprised. 397 00:17:20,980 --> 00:17:23,741 No, that, other way, other way. 398 00:17:23,741 --> 00:17:24,240 No it was. 399 00:17:24,240 --> 00:17:24,889 >> DAN COFFEY: There we go. 400 00:17:24,889 --> 00:17:26,430 >> DAVID J. MALAN: Dan Coffey, everyone. 401 00:17:26,430 --> 00:17:28,460 Thank you very much Dan, for coming out. 402 00:17:28,460 --> 00:17:32,400 And now, 60 seconds of pandas. 403 00:17:32,400 --> 00:17:33,676 >> [VIDEO PLAYBACK] 404 00:17:33,676 --> 00:17:36,156 >> [MUSIC PLAYING] 405 00:17:36,156 --> 00:18:32,077 406 00:18:32,077 --> 00:18:32,910 [END VIDEO PLAYBACK] 407 00:18:32,910 --> 00:18:34,670 DAVID J. MALAN: Now you may recall from a recent episode, 408 00:18:34,670 --> 00:18:37,830 that we introduced LaunchCode, an initiative in Saint Louis, Missouri, 409 00:18:37,830 --> 00:18:40,200 run by volunteers who have been following along 410 00:18:40,200 --> 00:18:43,304 with CS50's curriculum and guiding citizens of Saint Louis 411 00:18:43,304 --> 00:18:46,470 through that material toward an end of helping to pair them with programming 412 00:18:46,470 --> 00:18:48,530 jobs at the end of the semester. 413 00:18:48,530 --> 00:18:51,360 You may recall in fact, that this initiative was so popular 414 00:18:51,360 --> 00:18:55,749 in Saint Louis, that they nearly overflowed the local opera house. 415 00:18:55,749 --> 00:18:57,540 Well, LaunchCode's founders very graciously 416 00:18:57,540 --> 00:18:59,610 came to campus recently and agreed to sit down 417 00:18:59,610 --> 00:19:02,830 with us in Sanders Theatre for a chat about what LaunchCode is 418 00:19:02,830 --> 00:19:04,589 and how it's been going on. 419 00:19:04,589 --> 00:19:07,880 DAVID J. MALAN:We're here today with our friends from LaunchCode who have flown 420 00:19:07,880 --> 00:19:10,410 in all the way from St. Louis to say hello. 421 00:19:10,410 --> 00:19:11,279 Hello everyone. 422 00:19:11,279 --> 00:19:12,070 JIM MCKELVEY:Hello. 423 00:19:12,070 --> 00:19:14,819 DAVID J. MALAN: Who do we have here with us today from LaunchCode. 424 00:19:14,819 --> 00:19:16,304 JIM MCKELVEY: So, I'm Jim McKelvey. 425 00:19:16,304 --> 00:19:17,720 BRENDAN LIND:And I'm Brendan Lind. 426 00:19:17,720 --> 00:19:19,050 ZACH LOU: And I'm Zach Lou. 427 00:19:19,050 --> 00:19:20,020 DAVID J. MALAN: And for those unfamiliar, 428 00:19:20,020 --> 00:19:22,005 could you tell us a little about what LaunchCode is? 429 00:19:22,005 --> 00:19:24,380 >> JIM MCKELVEY: So LaunchCode is a job placement system 430 00:19:24,380 --> 00:19:26,880 that we are pioneering starting in St. Louis, 431 00:19:26,880 --> 00:19:28,600 but we're going to bring it nationwide. 432 00:19:28,600 --> 00:19:31,460 The idea basically is to get companies to change their hiring 433 00:19:31,460 --> 00:19:34,640 practices to accept people who have nontraditional credentials. 434 00:19:34,640 --> 00:19:39,350 So as we know, as programmers, that a lot of the best programmers 435 00:19:39,350 --> 00:19:41,720 are self-taught to some extent. 436 00:19:41,720 --> 00:19:44,869 And companies don't necessarily recognize 437 00:19:44,869 --> 00:19:46,160 this in their hiring practices. 438 00:19:46,160 --> 00:19:49,240 So if you're a good coder, you still don't necessarily 439 00:19:49,240 --> 00:19:51,080 have a way to a good job. 440 00:19:51,080 --> 00:19:53,400 >> And so, we started working with a hundred companies 441 00:19:53,400 --> 00:19:55,790 from billion dollar firms like Enterprise, 442 00:19:55,790 --> 00:19:59,670 and MasterCard, down to two-man start-ups. 443 00:19:59,670 --> 00:20:03,720 And we've gotten them all to agree to take LaunchCode candidates into, 444 00:20:03,720 --> 00:20:05,230 basically an apprenticeship system. 445 00:20:05,230 --> 00:20:07,920 >> DAVID J. MALAN: And how did you find CS50's materials in the first place. 446 00:20:07,920 --> 00:20:09,461 >> JIM MCKELVEY: So it was really funny. 447 00:20:09,461 --> 00:20:14,310 My wife took your class online through Harvard Extension. 448 00:20:14,310 --> 00:20:17,560 And she took Fall 2012 CS50. 449 00:20:17,560 --> 00:20:22,010 And while we were, I'm a computer scientist by training. 450 00:20:22,010 --> 00:20:25,180 And so I was helping her through the class, I was watching it. 451 00:20:25,180 --> 00:20:30,980 And she said, you know, this is being offered online through edX, 452 00:20:30,980 --> 00:20:36,960 and we're placing these people, who have very little traditional credentials, 453 00:20:36,960 --> 00:20:38,870 and we're like, this would be fantastic. 454 00:20:38,870 --> 00:20:40,540 So that's how we found out about it. 455 00:20:40,540 --> 00:20:41,535 Through m wife, Anna. 456 00:20:41,535 --> 00:20:42,994 And your Harvard Extension Program. 457 00:20:42,994 --> 00:20:44,201 DAVID J. MALAN: That's funny. 458 00:20:44,201 --> 00:20:47,620 It's such a small decision, her taking the classes had such an impact then. 459 00:20:47,620 --> 00:20:49,940 >> JIM MCKELVEY: It was super lucky. 460 00:20:49,940 --> 00:20:53,931 And we were really excited to see that you guys were working with edX 461 00:20:53,931 --> 00:20:56,430 and making it available, and all the supplemental materials. 462 00:20:56,430 --> 00:20:58,840 And it's fantastic resource for training. 463 00:20:58,840 --> 00:20:59,590 DAVID J. MALAN:OK. 464 00:20:59,590 --> 00:21:02,596 Well, in the news, we actually came across a look 465 00:21:02,596 --> 00:21:05,720 at what the first night of LaunchCode was when you were in the opera house. 466 00:21:05,720 --> 00:21:07,520 Can you give us a firsthand account of what 467 00:21:07,520 --> 00:21:09,840 your experience was like that evening? 468 00:21:09,840 --> 00:21:11,880 >> JIM MCKELVEY: Yeah, so I was in Rome. 469 00:21:11,880 --> 00:21:14,950 And Brendan called me at 3:00 in the morning, and said, 470 00:21:14,950 --> 00:21:17,140 we've overflowed all three venues. 471 00:21:17,140 --> 00:21:21,360 So we had the Christ Church Cathedral, the Downtown Library, 472 00:21:21,360 --> 00:21:24,520 and the Soldiers Memorial, which are three fairly large venues. 473 00:21:24,520 --> 00:21:26,390 And we were expecting a few hundred people. 474 00:21:26,390 --> 00:21:28,550 We had over 1,000 people sign up. 475 00:21:28,550 --> 00:21:30,890 So we overflowed everything and Brendan calls me, 476 00:21:30,890 --> 00:21:33,840 like, we need a bigger building. 477 00:21:33,840 --> 00:21:36,370 And they got us this giant, this giant opera 478 00:21:36,370 --> 00:21:38,717 house, where we held the first class. 479 00:21:38,717 --> 00:21:40,050 DAVID J. MALAN: Oh that's great. 480 00:21:40,050 --> 00:21:42,590 JIM MCKELVEY:And people were so grateful. 481 00:21:42,590 --> 00:21:45,930 I mean, the people who we are reaching are 482 00:21:45,930 --> 00:21:48,089 people who you just want to help these folks. 483 00:21:48,089 --> 00:21:50,630 DAVID J. MALAN: And from what you've seen, just how realistic 484 00:21:50,630 --> 00:21:53,460 is it, someone who enters the course with no prior background. 485 00:21:53,460 --> 00:21:56,150 And some months later, they have 13 weeks of CS50 486 00:21:56,150 --> 00:21:58,310 under their belt to actually feel confident enough 487 00:21:58,310 --> 00:22:01,000 and be qualified enough for an actual programming job. 488 00:22:01,000 --> 00:22:03,590 >> JIM MCKELVEY: So David, we really don't know, OK? 489 00:22:03,590 --> 00:22:06,770 Because we haven't done it at any sort of scale yet. 490 00:22:06,770 --> 00:22:10,910 You know, our data points right now are what I've learned was possible. 491 00:22:10,910 --> 00:22:13,533 And then the 50 some people that we've placed, 492 00:22:13,533 --> 00:22:15,200 we know generally where they are. 493 00:22:15,200 --> 00:22:18,270 And our guess is that somebody who comes through CS50 494 00:22:18,270 --> 00:22:21,397 is going to be generally as skilled as some 495 00:22:21,397 --> 00:22:23,480 of the people we have already successfully placed. 496 00:22:23,480 --> 00:22:25,620 >> So we haven't proven its scale yet. 497 00:22:25,620 --> 00:22:29,140 And I'm not saying that it's a complete in education by any means. 498 00:22:29,140 --> 00:22:31,990 But it's such a great start. 499 00:22:31,990 --> 00:22:33,640 And it gives people a context. 500 00:22:33,640 --> 00:22:36,310 And it also, you know, it's a rigorous class. 501 00:22:36,310 --> 00:22:40,020 So anyone who completes this class has proven something. 502 00:22:40,020 --> 00:22:43,175 That they've demonstrated some character or a combination of you 503 00:22:43,175 --> 00:22:48,170 know, either tenacity or intelligence, or whatever that magical formula is 504 00:22:48,170 --> 00:22:51,660 that gets them through the pretty tough class, 505 00:22:51,660 --> 00:22:54,420 we think that's going to bode very well for their success. 506 00:22:54,420 --> 00:22:57,340 And we have companies that are willing to back up on that. 507 00:22:57,340 --> 00:22:59,700 So, so we don't really know. 508 00:22:59,700 --> 00:23:03,630 But we're very optimistic that anyone who gets through CS50, 509 00:23:03,630 --> 00:23:06,080 we can get a job. 510 00:23:06,080 --> 00:23:09,320 >> BRENDAN LIND: And the thing is that LaunchCode is not 511 00:23:09,320 --> 00:23:11,120 like your typical entry level hire. 512 00:23:11,120 --> 00:23:13,870 Right, it's not where you come in and say 513 00:23:13,870 --> 00:23:16,410 normally you might need a C.S. degree and two years of work 514 00:23:16,410 --> 00:23:18,800 experience to get a lot of jobs, right? 515 00:23:18,800 --> 00:23:22,680 But then, LaunchCode comes in, you don't need any of those things. 516 00:23:22,680 --> 00:23:24,620 You don't need to be qualified to that point. 517 00:23:24,620 --> 00:23:26,370 Where you have to be is have that aptitude 518 00:23:26,370 --> 00:23:27,780 and drive to get to that level. 519 00:23:27,780 --> 00:23:28,960 So it's an apprenticeship. 520 00:23:28,960 --> 00:23:31,920 And it lasts until you're at that level, where 521 00:23:31,920 --> 00:23:34,040 you would be brought in for the normal position. 522 00:23:34,040 --> 00:23:35,910 And the company can let you go at any point. 523 00:23:35,910 --> 00:23:38,000 >> DAVID J. MALAN: So the companies are the ones doing, ultimately, 524 00:23:38,000 --> 00:23:39,177 that initial partnership. 525 00:23:39,177 --> 00:23:40,010 BRENDAN LIND: Right. 526 00:23:40,010 --> 00:23:43,045 So what CS50-- what we're doing trying to do with CS50 527 00:23:43,045 --> 00:23:46,320 is get them to the point where then, hey if you can take CS50, 528 00:23:46,320 --> 00:23:48,620 like you have that drive, you have that will to learn, 529 00:23:48,620 --> 00:23:53,460 and you have that aptitude to self-learn and work in a company, 530 00:23:53,460 --> 00:23:56,160 to handle whatever it is that is needed. 531 00:23:56,160 --> 00:23:58,530 And then we can get them, we get them in the door. 532 00:23:58,530 --> 00:24:02,640 And they get paid, they get paid $15 an hour for the duration apprenticeship. 533 00:24:02,640 --> 00:24:05,880 And whenever they're ready, the company turns them into a salaried position. 534 00:24:05,880 --> 00:24:08,570 If they don't, if the company doesn't think that they're on their way, 535 00:24:08,570 --> 00:24:09,445 they can let them go. 536 00:24:09,445 --> 00:24:14,750 And so far, that success is that pretty much everybody is still 537 00:24:14,750 --> 00:24:15,630 with their company. 538 00:24:15,630 --> 00:24:16,540 >> DAVID J. MALAN:OK. 539 00:24:16,540 --> 00:24:18,350 So right now you're focused on Saint Louis, 540 00:24:18,350 --> 00:24:20,880 but I gather you'd like to take the initiative nationally. 541 00:24:20,880 --> 00:24:22,790 So what is indeed next for you? 542 00:24:22,790 --> 00:24:25,630 >> JIM MCKELVEY: So next are a series of cities around the country. 543 00:24:25,630 --> 00:24:28,710 So, we don't want to go national until we refine the model, 544 00:24:28,710 --> 00:24:32,470 and maybe laid a couple of those sidewalks through the dirt. 545 00:24:32,470 --> 00:24:34,830 The completion of this first CS50 class is 546 00:24:34,830 --> 00:24:38,080 going to be really important, because we're getting good data from that. 547 00:24:38,080 --> 00:24:43,079 But once we know what works and what we really should be doing and scaling, 548 00:24:43,079 --> 00:24:45,120 then we're going to scale as quickly as possible, 549 00:24:45,120 --> 00:24:46,710 because the need exists everywhere. 550 00:24:46,710 --> 00:24:50,260 And we're not trying to make this some sort of local, Saint Louis phenomenon. 551 00:24:50,260 --> 00:24:52,740 We're just using that as a test bed. 552 00:24:52,740 --> 00:24:55,900 And then we'll be expanding you know, as quickly as we can 553 00:24:55,900 --> 00:24:58,160 to places that have similar needs. 554 00:24:58,160 --> 00:25:00,070 >> DAVID J. MALAN: Well, thank you so much for everything you've been doing. 555 00:25:00,070 --> 00:25:01,610 We're flattered to even be part of it. 556 00:25:01,610 --> 00:25:02,660 It's been quite inspiring. 557 00:25:02,660 --> 00:25:03,660 >> JIM MCKELVEY: Thank you. 558 00:25:03,660 --> 00:25:08,610 This has been so generous of just a world class education that 559 00:25:08,610 --> 00:25:12,660 is available for people who genuinely appreciate it. 560 00:25:12,660 --> 00:25:14,410 I wish you could meet some of the students 561 00:25:14,410 --> 00:25:18,470 and see the people who you know, it's changing lives. 562 00:25:18,470 --> 00:25:22,610 And I just wish we could reach through the cameras and bring them here. 563 00:25:22,610 --> 00:25:25,090 But it's so meaningful. 564 00:25:25,090 --> 00:25:28,189 And it's moving the needle and it's really good. 565 00:25:28,189 --> 00:25:28,730 So thank you. 566 00:25:28,730 --> 00:25:29,980 >> DAVID J. MALAN: Thank you from us as well. 567 00:25:29,980 --> 00:25:30,900 Appreciate it. 568 00:25:30,900 --> 00:25:33,660 569 00:25:33,660 --> 00:25:35,660 Thanks so much for joining us. 570 00:25:35,660 --> 00:25:39,550 launchcodestl.com for more. 571 00:25:39,550 --> 00:25:43,109 >> So we got chatting shortly after that chat about what more we could do. 572 00:25:43,109 --> 00:25:44,400 And we came upon the following. 573 00:25:44,400 --> 00:25:48,010 We are so pleased to announce the first ever CS50 Hackathon that 574 00:25:48,010 --> 00:25:50,500 will be going on the road to Saint Louis. 575 00:25:50,500 --> 00:25:51,780 The LaunchCode edition. 576 00:25:51,780 --> 00:25:54,230 In fact, we will be taking with us, if you'd like to meet these folks. 577 00:25:54,230 --> 00:25:56,563 If you yourself hail from St. Louis, or would ultimately 578 00:25:56,563 --> 00:25:59,850 like to tune in online, CS50's own Andrew will be there. 579 00:25:59,850 --> 00:26:04,720 CS50's Chang, Colton, Dan, whom you just met, 580 00:26:04,720 --> 00:26:11,040 Devin, Gabriel, Jason, Ramon, who you also met earlier. 581 00:26:11,040 --> 00:26:15,920 Rob Bowden, Shelly, whom you may remember from such films as-- 582 00:26:15,920 --> 00:26:17,370 and [? Zemaila ?]. 583 00:26:17,370 --> 00:26:20,600 >> So indeed, if you would like to join us in St. Louis or online 584 00:26:20,600 --> 00:26:24,800 at live.cs50.net, tune in for the next live show on Friday 585 00:26:24,800 --> 00:26:27,332 March 28 at 6:00 PM Eastern Time. 586 00:26:27,332 --> 00:26:29,790 We're going to be awake for quite a few hours that evening. 587 00:26:29,790 --> 00:26:32,170 And we hope you'll stay up with us as well. 588 00:26:32,170 --> 00:26:33,896 That's it for this week's CS50 Live. 589 00:26:33,896 --> 00:26:35,770 Thanks so much to everyone behind the camera. 590 00:26:35,770 --> 00:26:37,320 Thanks so much to our contributors. 591 00:26:37,320 --> 00:26:39,880 We'll see you in St. Louis, this was CS50. 592 00:26:39,880 --> 00:27:07,810 593 00:27:07,810 --> 00:27:10,350 >> RAMON: What does the fox say? 594 00:27:10,350 --> 00:27:31,146