1 00:00:00,000 --> 00:00:02,070 2 00:00:02,070 --> 00:00:03,320 CARTER ZENKE: Hello, everyone. 3 00:00:03,320 --> 00:00:06,130 It's so good to see you for our last session of the workshop, which 4 00:00:06,130 --> 00:00:08,430 is quite a crazy statement here. 5 00:00:08,430 --> 00:00:10,180 Today we'll be going over GitHub Classroom 6 00:00:10,180 --> 00:00:12,007 and teaching CS50 with GitHub Classroom. 7 00:00:12,007 --> 00:00:14,590 GitHub Classroom is a tool for our friends at GitHub Education 8 00:00:14,590 --> 00:00:16,507 that we started building some supports around. 9 00:00:16,507 --> 00:00:19,840 And as David has just said, you can do everything you need with the course 10 00:00:19,840 --> 00:00:23,543 using our own tools, submit [INAUDIBLE] I/O, and so on. 11 00:00:23,543 --> 00:00:25,960 But if you're interested in doing something more advanced, 12 00:00:25,960 --> 00:00:27,700 having more flexibility, more autonomy, you 13 00:00:27,700 --> 00:00:29,530 can certainly use GitHub Classroom for that. 14 00:00:29,530 --> 00:00:31,280 And the plan for today will be to show you 15 00:00:31,280 --> 00:00:34,000 at a high level what is GitHub Classroom, and then going 16 00:00:34,000 --> 00:00:36,310 through a demo of how you could use GitHub Classroom, 17 00:00:36,310 --> 00:00:38,185 and Rong Xin will help us see a student point 18 00:00:38,185 --> 00:00:40,780 of view using GitHub Classroom too. 19 00:00:40,780 --> 00:00:43,730 So GitHub Classroom is, again, based off of GitHub's infrastructure. 20 00:00:43,730 --> 00:00:46,480 And if you want to go see it, you can go to classroom.github.com 21 00:00:46,480 --> 00:00:48,550 to go ahead and see the home page for Classroom. 22 00:00:48,550 --> 00:00:50,830 You're welcome to follow along if you'd like. 23 00:00:50,830 --> 00:00:54,310 And it's important to know that all of what Classroom offers 24 00:00:54,310 --> 00:00:56,470 is really based on GitHub's infrastructure. 25 00:00:56,470 --> 00:00:59,950 So if you're familiar, for example, with having a notion of a Classroom, 26 00:00:59,950 --> 00:01:03,640 we can think of that as simply backing up to a GitHub organization 27 00:01:03,640 --> 00:01:06,550 where a GitHub organization is a collection of repositories. 28 00:01:06,550 --> 00:01:09,250 Now, these repositories in [INAUDIBLE] Classroom 29 00:01:09,250 --> 00:01:12,130 are really just assignments or a repository, 30 00:01:12,130 --> 00:01:14,210 something like some collection of code here. 31 00:01:14,210 --> 00:01:17,700 So every assignment on GitHub Classroom is really just a GitHub repository. 32 00:01:17,700 --> 00:01:19,420 I'll show you some visuals here. 33 00:01:19,420 --> 00:01:22,330 Here's what our classroom looked like in fall of 2021 34 00:01:22,330 --> 00:01:25,270 where we had this organization called GitHub Classroom for CS50. 35 00:01:25,270 --> 00:01:27,200 This was our classroom for the fall course. 36 00:01:27,200 --> 00:01:29,920 And inside that organization, we had several repositories, 37 00:01:29,920 --> 00:01:31,180 one for each assignment. 38 00:01:31,180 --> 00:01:33,340 And what students would do is they would go and accept that assignment 39 00:01:33,340 --> 00:01:36,310 and create their own repository, their own version of the assignment 40 00:01:36,310 --> 00:01:37,310 inside our organization. 41 00:01:37,310 --> 00:01:40,060 So a student might see something like this [INAUDIBLE] assignment, 42 00:01:40,060 --> 00:01:42,850 they would go ahead and see if they're working on DNA, 43 00:01:42,850 --> 00:01:45,040 the distribution code inside a repository 44 00:01:45,040 --> 00:01:47,647 that they could then clone for themselves and submit work to. 45 00:01:47,647 --> 00:01:49,480 So again, all of what we'll talk about today 46 00:01:49,480 --> 00:01:54,790 is based on GitHub's infrastructure using organizations and repositories. 47 00:01:54,790 --> 00:02:00,790 Now, GitHub Classroom offers some UI overlays to this idea of organizations 48 00:02:00,790 --> 00:02:01,930 and repositories. 49 00:02:01,930 --> 00:02:03,638 If you were to log into Classroom and you 50 00:02:03,638 --> 00:02:05,888 were to make your own Classroom using their interface, 51 00:02:05,888 --> 00:02:07,340 you might see something like this. 52 00:02:07,340 --> 00:02:09,173 You would see a list of assignments that you 53 00:02:09,173 --> 00:02:12,290 have created where each assignment is, again, just a template repository, 54 00:02:12,290 --> 00:02:14,082 and you can create that list of assignments 55 00:02:14,082 --> 00:02:17,390 to distribute to students based on those repositories here. 56 00:02:17,390 --> 00:02:20,260 So let's say I've made a birthdays assignment, a caesar assignment, 57 00:02:20,260 --> 00:02:24,040 and a cash assignment, each of those assignments comes with a single link 58 00:02:24,040 --> 00:02:26,530 that I can then share with my students and they can then 59 00:02:26,530 --> 00:02:30,280 use that link to clone that template repository, make their own changes, 60 00:02:30,280 --> 00:02:32,450 and submit that work back to me. 61 00:02:32,450 --> 00:02:35,020 So for example, [INAUDIBLE],, if I send them a link, 62 00:02:35,020 --> 00:02:36,970 they would see "Accept this assignment -- 63 00:02:36,970 --> 00:02:37,940 dna". 64 00:02:37,940 --> 00:02:41,170 And once they do, they'll be able to see their own repository 65 00:02:41,170 --> 00:02:45,700 inside my Classroom organization that they can, again, submit work to. 66 00:02:45,700 --> 00:02:48,610 As they work on that assignment, they're able to run 67 00:02:48,610 --> 00:02:50,512 what we call an action workflow. 68 00:02:50,512 --> 00:02:52,720 In this case, we can talk about that as auto-grading. 69 00:02:52,720 --> 00:02:56,020 This action workflow run check50 for us and gives a student back 70 00:02:56,020 --> 00:02:58,580 a score that I can then see in my own classroom. 71 00:02:58,580 --> 00:03:02,350 So let's say a student worked on DNA, they could do an automated commit, 72 00:03:02,350 --> 00:03:04,750 and they could then see that action workflow run 73 00:03:04,750 --> 00:03:07,630 and see how many tests in check50 they have passed. 74 00:03:07,630 --> 00:03:09,700 And then later on, if I want, as a teacher, 75 00:03:09,700 --> 00:03:13,150 to leave feedback on their work, I could use GitHub's pull requests 76 00:03:13,150 --> 00:03:16,068 feature to leave comments on their work in this repository. 77 00:03:16,068 --> 00:03:19,360 So if you're familiar with PRs, I could go ahead and leave a comment like this. 78 00:03:19,360 --> 00:03:23,200 And, "Very nicely done!" for their work on a certain assignment using the pull 79 00:03:23,200 --> 00:03:25,860 request feature on GitHub. 80 00:03:25,860 --> 00:03:29,110 And once I do that, let's say I have a whole collection of students whose work 81 00:03:29,110 --> 00:03:31,402 I want to see, I can go to GitHub Classroom's interface 82 00:03:31,402 --> 00:03:33,335 and see all their scores in one place. 83 00:03:33,335 --> 00:03:35,210 Let me move out of the way here a little bit. 84 00:03:35,210 --> 00:03:38,410 You can see I have Hermione, Harry, and Ron who've all submitted work to me, 85 00:03:38,410 --> 00:03:40,390 and I can see how many tests they passed. 86 00:03:40,390 --> 00:03:43,330 Hermione has 21/21, Harry has 1 out of 21. 87 00:03:43,330 --> 00:03:46,810 And if I wanted to, I could download their grades using a CSV file here. 88 00:03:46,810 --> 00:03:49,090 I could also download all their submissions 89 00:03:49,090 --> 00:03:53,720 in a single zip file using a download repositories feature here. 90 00:03:53,720 --> 00:03:56,050 So this is what GitHub Classroom offers us. 91 00:03:56,050 --> 00:03:58,750 It offers us a chance to create our own assignments, 92 00:03:58,750 --> 00:04:00,790 to distribute them with template repositories, 93 00:04:00,790 --> 00:04:03,610 to have students have their own space in which to work on them, 94 00:04:03,610 --> 00:04:05,360 and to submit that work back to us, we can 95 00:04:05,360 --> 00:04:07,220 leave feedback and see their grades. 96 00:04:07,220 --> 00:04:10,510 So let's actually dive into how we could do a demo of this 97 00:04:10,510 --> 00:04:13,120 in seeing how to build our own GitHub Classroom. 98 00:04:13,120 --> 00:04:16,329 So I will go over to classroom.github.com, 99 00:04:16,329 --> 00:04:19,839 and the link is in the chat here, and the first thing we need to do is sign 100 00:04:19,839 --> 00:04:21,110 in with your GitHub account. 101 00:04:21,110 --> 00:04:24,080 So I'll go ahead and sign in here. 102 00:04:24,080 --> 00:04:27,622 And once I do that, I should see I already have a Classroom open. 103 00:04:27,622 --> 00:04:29,830 But if you'd like to make your own, all we have to do 104 00:04:29,830 --> 00:04:33,580 is click on this New Classroom button up here. 105 00:04:33,580 --> 00:04:37,250 And notice that we prompt it to select an organization for your new Classroom. 106 00:04:37,250 --> 00:04:40,660 So again, GitHub Classroom is based on GitHub's already existing 107 00:04:40,660 --> 00:04:42,520 infrastructure around organizations. 108 00:04:42,520 --> 00:04:46,990 So you'll first make a new organization and you'll then tie that organization 109 00:04:46,990 --> 00:04:48,970 to your GitHub Classroom. 110 00:04:48,970 --> 00:04:50,450 So I have already done this. 111 00:04:50,450 --> 00:04:52,610 But if you want to, you can go ahead and create an organization. 112 00:04:52,610 --> 00:04:55,610 And once you do, you'll be able to create a Classroom to go along with it. 113 00:04:55,610 --> 00:04:57,860 The steps here are simply to create that organization, 114 00:04:57,860 --> 00:05:01,540 name it, type in your email, save it, and then go ahead 115 00:05:01,540 --> 00:05:03,330 and give your classroom a name. 116 00:05:03,330 --> 00:05:08,370 In my case, if I go back here, I decide to call mine "Carter's Demo Classroom". 117 00:05:08,370 --> 00:05:10,990 So once you have that, you can click on this demo here, 118 00:05:10,990 --> 00:05:12,990 and you'll notice that we have some assignments. 119 00:05:12,990 --> 00:05:15,990 I've already created these assignments, but you can also create your own 120 00:05:15,990 --> 00:05:18,003 using this New Assignment button here. 121 00:05:18,003 --> 00:05:19,920 So I can go ahead and create a new assignment, 122 00:05:19,920 --> 00:05:23,430 and let's say I have a template repository that I put some distribution 123 00:05:23,430 --> 00:05:26,500 code into, and I want to share that with my students. 124 00:05:26,500 --> 00:05:30,640 So I'll hit New Assignment, and I'll first give the assignment a name. 125 00:05:30,640 --> 00:05:33,030 In this case, let's say I'm a teacher, and I 126 00:05:33,030 --> 00:05:38,460 want to distribute CS50's cash problem from this most recent fall. 127 00:05:38,460 --> 00:05:41,420 So what I could do is I could say, I want to search for-- 128 00:05:41,420 --> 00:05:43,128 actually, I want to give it a name first. 129 00:05:43,128 --> 00:05:46,740 I'll type in "cash" here, and I'll say this is an individual assignment. 130 00:05:46,740 --> 00:05:49,840 I could optionally give this assignment a deadline, 131 00:05:49,840 --> 00:05:52,860 but just note that in GitHub Classroom, once the deadline has passed, 132 00:05:52,860 --> 00:05:54,990 your students can't submit work to that assignment. 133 00:05:54,990 --> 00:05:58,710 So we tend to leave deadlines blank just so we can implement our own lateness 134 00:05:58,710 --> 00:06:00,330 checks here. 135 00:06:00,330 --> 00:06:02,550 I'll keep the repository visibility private 136 00:06:02,550 --> 00:06:05,730 because I only want students themselves to see their own repository, 137 00:06:05,730 --> 00:06:09,520 and we don't tend to grant students admin access to the repository, 138 00:06:09,520 --> 00:06:11,310 they tend not to need it. 139 00:06:11,310 --> 00:06:15,690 So we'll leave this blank and we'll hit Continue here, and what I can then do 140 00:06:15,690 --> 00:06:18,460 is choose some starter code for the student to use. 141 00:06:18,460 --> 00:06:22,235 So at this point, I'd like to show you our own infrastructure for GitHub 142 00:06:22,235 --> 00:06:24,360 Classroom, which is called Classroom 50, and you're 143 00:06:24,360 --> 00:06:27,570 welcome to use this as you use GitHub Classroom. 144 00:06:27,570 --> 00:06:32,670 To see this, I can go to github.com/classroom50, 145 00:06:32,670 --> 00:06:36,390 and you'll see that we've put together a collection of template repositories 146 00:06:36,390 --> 00:06:39,460 full of CS50 distribution code for your students to use here. 147 00:06:39,460 --> 00:06:42,150 So you could choose any of these type of repositories 148 00:06:42,150 --> 00:06:45,310 and distribute them using GitHub Classroom for your students. 149 00:06:45,310 --> 00:06:48,780 So notice how I wanted to use the cash repository here, 150 00:06:48,780 --> 00:06:51,240 I have a public template, which means I can use this 151 00:06:51,240 --> 00:06:55,150 as the basis for this assignment and I can share this with my own students. 152 00:06:55,150 --> 00:06:59,550 So in GitHub Classroom, I'll say Select a repository, 153 00:06:59,550 --> 00:07:05,720 I want to use the 2022 Fall Cache Repository in Classroom 50. 154 00:07:05,720 --> 00:07:13,792 So I'll then go ahead and use classroom50/2022-fall-cash, 155 00:07:13,792 --> 00:07:16,500 and I'll see the repository [INAUDIBLE] here, so I can select it, 156 00:07:16,500 --> 00:07:19,290 and now it is the basis for this assignment. 157 00:07:19,290 --> 00:07:23,490 I can hit Continue, and now I'll be prompted 158 00:07:23,490 --> 00:07:25,110 to set up autograding and feedback. 159 00:07:25,110 --> 00:07:26,550 We have done most of this for you. 160 00:07:26,550 --> 00:07:28,050 There's no need to add autograding tests. 161 00:07:28,050 --> 00:07:31,092 We've already added those through [INAUDIBLE] repositories using check50, 162 00:07:31,092 --> 00:07:34,770 but we can also enable feedback pull requests [INAUDIBLE] where 163 00:07:34,770 --> 00:07:38,580 I can leave comments on student work via a GitHub Classroom's PR feature, 164 00:07:38,580 --> 00:07:40,710 or pull request feature, so I'll check that 165 00:07:40,710 --> 00:07:42,690 and I'll create this new assignment. 166 00:07:42,690 --> 00:07:46,360 167 00:07:46,360 --> 00:07:49,630 [INAUDIBLE] to load, and now notice I can see how many students 168 00:07:49,630 --> 00:07:51,185 have done this assignment so far. 169 00:07:51,185 --> 00:07:52,060 Currently, it's none. 170 00:07:52,060 --> 00:07:53,768 But in a moment, it will just be Rongxin. 171 00:07:53,768 --> 00:07:56,500 So when I get this link here I can use to share with Rong Xin 172 00:07:56,500 --> 00:08:01,540 to accept this assignment, and let me go ahead and share that with Rong Xin now. 173 00:08:01,540 --> 00:08:04,090 And in a moment, we'll see how Rong Xin walks through working 174 00:08:04,090 --> 00:08:06,460 on this assignment as a student. 175 00:08:06,460 --> 00:08:09,035 176 00:08:09,035 --> 00:08:10,720 SPEAKER 2: Can everyone see my screen? 177 00:08:10,720 --> 00:08:13,926 178 00:08:13,926 --> 00:08:15,635 CARTER ZENKE: I think we can. 179 00:08:15,635 --> 00:08:16,740 SPEAKER 2: All right. 180 00:08:16,740 --> 00:08:21,090 So I just got the [INAUDIBLE] sent by [INAUDIBLE] it looks like this, 181 00:08:21,090 --> 00:08:25,090 so I'm just going to visit it. 182 00:08:25,090 --> 00:08:30,130 And I'm being greeted by this Accept the assignment screen, so all I can do 183 00:08:30,130 --> 00:08:32,330 is I can just click Accept this assignment. 184 00:08:32,330 --> 00:08:34,150 So what GitHub is doing right now is trying 185 00:08:34,150 --> 00:08:37,840 to create an assignment repository for this particular problem set 186 00:08:37,840 --> 00:08:42,230 and under Carter's Classroom organization. 187 00:08:42,230 --> 00:08:46,370 So we'll probably just refresh this page, and it's done. 188 00:08:46,370 --> 00:08:48,730 I can just click on this GitHub link, it will bring me 189 00:08:48,730 --> 00:08:50,590 to the assignment repository. 190 00:08:50,590 --> 00:08:55,090 So right now, as you can see, I'm now inside the assignment repository 191 00:08:55,090 --> 00:08:59,100 and I would be able to dive right in by creating a GitHub codespace on it. 192 00:08:59,100 --> 00:09:00,850 Just click Create [? codespace ?] on main, 193 00:09:00,850 --> 00:09:05,740 it will just bring up a codespace for this assignment repository, 194 00:09:05,740 --> 00:09:07,678 and then back over to Ricardo for now. 195 00:09:07,678 --> 00:09:08,470 CARTER ZENKE: Yeah. 196 00:09:08,470 --> 00:09:10,270 So while Rong Xin's codespace boots, I want 197 00:09:10,270 --> 00:09:12,562 to show you just a brief resource we've created for you 198 00:09:12,562 --> 00:09:14,475 here if I can share my screen here. 199 00:09:14,475 --> 00:09:17,350 We've created a resource for you to learn how to make your own custom 200 00:09:17,350 --> 00:09:19,810 assignments using GitHub Classroom and specifically 201 00:09:19,810 --> 00:09:21,380 their template repository feature. 202 00:09:21,380 --> 00:09:23,740 So if I click on this, I should be brought 203 00:09:23,740 --> 00:09:26,590 to a link that shows me how to go through GitHub Classroom 204 00:09:26,590 --> 00:09:29,247 and create my own assignments using GitHub Classroom. 205 00:09:29,247 --> 00:09:31,330 This is a step-by-step walkthrough for you to use. 206 00:09:31,330 --> 00:09:33,580 And certainly don't feel tied to our own assignments, 207 00:09:33,580 --> 00:09:36,460 you're welcome to modify them as you see fit. 208 00:09:36,460 --> 00:09:39,813 We'll find a more long-term home for this in the future, most likely 209 00:09:39,813 --> 00:09:41,980 in our own official documentation, but for now we'll 210 00:09:41,980 --> 00:09:43,685 have it in [INAUDIBLE] here. 211 00:09:43,685 --> 00:09:46,810 And again, this just walks you through creating a blank template repository 212 00:09:46,810 --> 00:09:50,500 if you're unfamiliar with that, going ahead and adding distribution code 213 00:09:50,500 --> 00:09:52,210 to it, and giving it a name. 214 00:09:52,210 --> 00:09:55,990 And also, you are welcome to use our own GitHub action 215 00:09:55,990 --> 00:09:59,630 configurations to reuse autograding using your own check50 checks. 216 00:09:59,630 --> 00:10:03,880 So notice here, for example, you might modify the name of your checks. 217 00:10:03,880 --> 00:10:05,920 Here, I've called mine mario/less tests if I'm 218 00:10:05,920 --> 00:10:07,960 making this mario/less distribution code, 219 00:10:07,960 --> 00:10:10,000 but I could also supply check50_args. 220 00:10:10,000 --> 00:10:12,160 I could say I want to use a certain check50_slug, 221 00:10:12,160 --> 00:10:14,650 maybe it's one I've made myself, and putting that in here 222 00:10:14,650 --> 00:10:17,680 will allow me to run check50 as students submits work as we'll 223 00:10:17,680 --> 00:10:19,970 see Rong Xin do in just a moment. 224 00:10:19,970 --> 00:10:22,540 And this is all configurable using this main.yml 225 00:10:22,540 --> 00:10:26,500 inside the hub repository, which again, this documentation runs you through. 226 00:10:26,500 --> 00:10:30,130 At the very end, you should have a repository that looks a bit like this. 227 00:10:30,130 --> 00:10:33,150 And Rong Xin, are you ready to show us the student view? 228 00:10:33,150 --> 00:10:34,350 SPEAKER 2: Just one moment. 229 00:10:34,350 --> 00:10:36,970 My codespace [INAUDIBLE] as I mentioned earlier, 230 00:10:36,970 --> 00:10:40,600 and the first time student launch in the codespace takes time to pull the image 231 00:10:40,600 --> 00:10:41,875 and extract the image. 232 00:10:41,875 --> 00:10:43,583 CARTER ZENKE: And I'll also just give you 233 00:10:43,583 --> 00:10:46,623 a more long tour of GitHub Classroom. 234 00:10:46,623 --> 00:10:49,540 We can go to Classroom 50 here and we can see a few other repositories 235 00:10:49,540 --> 00:10:50,680 that we have. 236 00:10:50,680 --> 00:10:53,680 So currently, what we've done is we've added all of the assignments 237 00:10:53,680 --> 00:10:58,210 from 2021 fall, but it's our goal to update these as we go through 238 00:10:58,210 --> 00:11:00,040 and update CS50's own assignments. 239 00:11:00,040 --> 00:11:02,785 So we've called them 2022 Fall, symbolized 240 00:11:02,785 --> 00:11:05,410 that these will be the ones in use for teachers this next fall. 241 00:11:05,410 --> 00:11:07,202 But as we have the course this coming fall, 242 00:11:07,202 --> 00:11:11,080 we'll update those for the next year ahead. 243 00:11:11,080 --> 00:11:13,010 Rong Xin has already accepted my assignment, 244 00:11:13,010 --> 00:11:16,720 so here I have this student named rongxinliu-test. 245 00:11:16,720 --> 00:11:21,640 And I can see that at the moment, Rong Xin's latest submission doesn't quite 246 00:11:21,640 --> 00:11:25,480 pass all of the checks, but maybe eventually they will. 247 00:11:25,480 --> 00:11:28,210 And I can go over here and I could download 248 00:11:28,210 --> 00:11:31,450 a CSV of all the grades from my students so far. 249 00:11:31,450 --> 00:11:35,860 I got here simply by going to my Classroom, 250 00:11:35,860 --> 00:11:40,990 clicking on the assignment I distributed to Rong Xin, in this case it was cash, 251 00:11:40,990 --> 00:11:44,740 and then I can see all the students who have accepted this assignment, as well 252 00:11:44,740 --> 00:11:48,010 as all the submissions to this assignment so far. 253 00:11:48,010 --> 00:11:51,490 SPEAKER 2: So I'm ready to reshare my screen in a moment. 254 00:11:51,490 --> 00:11:56,110 So right now, I'm in codespace again, but for this particular assignment 255 00:11:56,110 --> 00:11:56,630 only. 256 00:11:56,630 --> 00:12:01,210 So as you can see, I am now open a cache.c file, 257 00:12:01,210 --> 00:12:05,310 which is the distribution code from the template repository. 258 00:12:05,310 --> 00:12:07,310 My goal is to finish this assignment, of course. 259 00:12:07,310 --> 00:12:11,830 But right now, for the demo purposes, I won't be implementing all of them. 260 00:12:11,830 --> 00:12:18,950 I will just quickly finish this one by doing it incorrectly. 261 00:12:18,950 --> 00:12:21,520 So let's say I finish this particular function, 262 00:12:21,520 --> 00:12:25,220 I just want to submit it, right now what I can do is just quickly 263 00:12:25,220 --> 00:12:34,858 make a push and type in "this is my submission", 264 00:12:34,858 --> 00:12:36,400 and I would just quickly make a push. 265 00:12:36,400 --> 00:12:39,893 266 00:12:39,893 --> 00:12:42,390 OK. 267 00:12:42,390 --> 00:12:46,560 So what it does is actually push the change that I made for this assignment 268 00:12:46,560 --> 00:12:48,720 back to this assignment repository. 269 00:12:48,720 --> 00:12:51,630 And as you can see, it will just trigger the action workflow, 270 00:12:51,630 --> 00:12:53,730 which is run the autograder. 271 00:12:53,730 --> 00:12:57,420 And again, this is my submission that I just made. 272 00:12:57,420 --> 00:13:01,170 If I click on it, you can see that the autograding is running. 273 00:13:01,170 --> 00:13:03,150 It takes time to run the autograding. 274 00:13:03,150 --> 00:13:06,810 Again, it's pulling one of those codespace images 275 00:13:06,810 --> 00:13:11,880 that we define so that we are running the check at the exact same environment 276 00:13:11,880 --> 00:13:15,446 as if a student are working on their problems [INAUDIBLE].. 277 00:13:15,446 --> 00:13:22,350 278 00:13:22,350 --> 00:13:24,510 So what is autograding that is actually it 279 00:13:24,510 --> 00:13:27,540 puts the base image that codespace is running, 280 00:13:27,540 --> 00:13:31,740 but then you run check50 on top of it? 281 00:13:31,740 --> 00:13:33,660 And essentially what it's doing right now. 282 00:13:33,660 --> 00:13:36,270 And once the security checks are finished running, 283 00:13:36,270 --> 00:13:39,118 it will just render the output to GitHub Classroom, 284 00:13:39,118 --> 00:13:41,160 and GitHub Classroom will be able to-- and Carter 285 00:13:41,160 --> 00:13:45,238 will be able to see what my grades are for this submission, 286 00:13:45,238 --> 00:13:46,530 for this particular submission. 287 00:13:46,530 --> 00:13:47,370 CARTER ZENKE: Yeah. 288 00:13:47,370 --> 00:13:50,582 Rong Xin, while this runs, you mind if I show what it looks like on my end? 289 00:13:50,582 --> 00:13:51,540 SPEAKER 2: Sounds good. 290 00:13:51,540 --> 00:13:53,880 CARTER ZENKE: So here I am back in my assignment for cash. 291 00:13:53,880 --> 00:13:55,672 I see Rong Xin has accepted this assignment 292 00:13:55,672 --> 00:13:57,000 and is presently working on it. 293 00:13:57,000 --> 00:14:00,030 What I could do is I could click on this commit button here 294 00:14:00,030 --> 00:14:02,450 to see Rong Xin's updates to this assignment. 295 00:14:02,450 --> 00:14:04,200 So I'll click on this commit, and I'll see 296 00:14:04,200 --> 00:14:08,523 that Rong Xin has indeed one attempt at this problem so far. 297 00:14:08,523 --> 00:14:10,440 I could also go to Rong Xin's repository here. 298 00:14:10,440 --> 00:14:15,540 I could say cash-rongxinliu-test, and so I could see all of Rong Xin's progress 299 00:14:15,540 --> 00:14:18,180 by clicking on his assignment here, and now I 300 00:14:18,180 --> 00:14:22,680 can see that he's indeed returned since over 250. 301 00:14:22,680 --> 00:14:25,710 Now, if I wanted to leave Rong Xin some feedback, what I could do 302 00:14:25,710 --> 00:14:31,200 is simply click on the pull requests tab and go to this feedback pull request. 303 00:14:31,200 --> 00:14:34,513 By clicking on this and choosing Files changed, 304 00:14:34,513 --> 00:14:36,180 I can see the updates Rong Xin has made. 305 00:14:36,180 --> 00:14:39,600 So I can see that he modified particularly this line here, 47. 306 00:14:39,600 --> 00:14:42,040 And for the comment, I can use the very same GitHub UI. 307 00:14:42,040 --> 00:14:47,280 I could click on this, and I could say "Maybe think about 308 00:14:47,280 --> 00:14:50,460 how this math will work out. 309 00:14:50,460 --> 00:14:54,990 Try thinking of an example with $0.25. 310 00:14:54,990 --> 00:14:59,190 Do you get back one quarter?" 311 00:14:59,190 --> 00:15:02,880 So I could leave that comment, and I could add a single comment. 312 00:15:02,880 --> 00:15:05,610 And now, the next time Rong Xin goes to that feedback PR, 313 00:15:05,610 --> 00:15:09,510 he'll be able to see that comment on his own work. 314 00:15:09,510 --> 00:15:11,520 And once Rong Xin's tests are finished, I 315 00:15:11,520 --> 00:15:14,520 should be able to see an updated score for Rong Xin, which in the end 316 00:15:14,520 --> 00:15:16,830 will probably still be this number of checks out of 14. 317 00:15:16,830 --> 00:15:18,660 So we won't see too many changes here, but Rong Xin, 318 00:15:18,660 --> 00:15:20,910 is yours finished running in a way that we can see it? 319 00:15:20,910 --> 00:15:23,262 320 00:15:23,262 --> 00:15:25,410 SPEAKER 2: Sure, let me reshare my screen. 321 00:15:25,410 --> 00:15:28,130 322 00:15:28,130 --> 00:15:30,530 By the way, I can see Carter's comment now 323 00:15:30,530 --> 00:15:32,990 and I can reply to it, but not right now. 324 00:15:32,990 --> 00:15:36,620 325 00:15:36,620 --> 00:15:39,030 Since I did not correctly solve the problems, 326 00:15:39,030 --> 00:15:42,410 of course I failed all the grading, but I would be able to click on it 327 00:15:42,410 --> 00:15:46,310 and see what check I'm failing. 328 00:15:46,310 --> 00:15:50,180 This is all the check50 chat we already implemented, 329 00:15:50,180 --> 00:15:54,780 but this is now rendering on GitHub's action workflow. 330 00:15:54,780 --> 00:16:00,060 So as you can see, it tells me I did not return [INAUDIBLE] the number of cents, 331 00:16:00,060 --> 00:16:02,950 I did not proactively [INAUDIBLE] negative input, that kind of thing. 332 00:16:02,950 --> 00:16:09,270 So I would be able to get feedback from this action workflow result 333 00:16:09,270 --> 00:16:11,100 and for this particular submission. 334 00:16:11,100 --> 00:16:15,460 I can keep resubmitting until I probably solve the problem, 335 00:16:15,460 --> 00:16:20,040 but this is the feedback that student would get from this autograder, 336 00:16:20,040 --> 00:16:23,160 and I was awarded 2 out of 14 point, probably 337 00:16:23,160 --> 00:16:27,810 because some of the [INAUDIBLE],, probably because my test compiles, 338 00:16:27,810 --> 00:16:32,208 and so I passed all those checks, but I did not pass the remaining checks. 339 00:16:32,208 --> 00:16:33,000 CARTER ZENKE: Yeah. 340 00:16:33,000 --> 00:16:34,150 Thank you for sharing, Rong Xin. 341 00:16:34,150 --> 00:16:35,733 So that is the student view of things. 342 00:16:35,733 --> 00:16:39,120 And to close us out, just to make sure you have access to all the features 343 00:16:39,120 --> 00:16:40,847 that GitHub Classroom offers, I encourage 344 00:16:40,847 --> 00:16:43,680 you to go to-- if you're in GitHub Classroom, go to the Settings tab 345 00:16:43,680 --> 00:16:48,240 over here, and you should see an option to verify your status as a teacher. 346 00:16:48,240 --> 00:16:50,490 So through GitHub's Global Education campus, 347 00:16:50,490 --> 00:16:53,610 you're able to receive the codespaces feature for your own students. 348 00:16:53,610 --> 00:16:56,402 If you click Get Verified here, you can go through GitHub's process 349 00:16:56,402 --> 00:17:00,240 to receive the features that Rong Xin and I have just gone through here. 350 00:17:00,240 --> 00:17:02,730 But overall, this was our tour of GitHub Classroom. 351 00:17:02,730 --> 00:17:06,420 Again, all of our tools we've previously seen so far, code, [INAUDIBLE],, 352 00:17:06,420 --> 00:17:08,790 submit50, check50, and so on, you can all 353 00:17:08,790 --> 00:17:10,710 use with teaching your [INAUDIBLE] Classroom. 354 00:17:10,710 --> 00:17:13,290 But if you'd like more autonomy, more flexibility, and so on, 355 00:17:13,290 --> 00:17:15,130 get a Classroom as one option for you. 356 00:17:15,130 --> 00:17:17,130 So we just wanted to show this to you all today, 357 00:17:17,130 --> 00:17:20,840 and we'll pause here and take a few questions. 358 00:17:20,840 --> 00:17:22,000