1 00:00:00,680 --> 00:00:02,810 Another great thing that IDEs provides is a way for 2 00:00:02,810 --> 00:00:06,390 teams to communicate about the current state of the code in a project. 3 00:00:06,390 --> 00:00:08,440 There are built in version conversion control tools that allow 4 00:00:08,440 --> 00:00:12,510 you to use a program like Get that push and pull changes to a shared repository. 5 00:00:13,810 --> 00:00:17,330 So I've been working on that tree story project that we started way back when, and 6 00:00:17,330 --> 00:00:20,770 making more dynamic using more of the tricks that we picked up throughout 7 00:00:20,770 --> 00:00:24,060 our journey, and I'm really excited to show you where it's heading. 8 00:00:24,060 --> 00:00:25,010 I'm not quite done with it yet, 9 00:00:25,010 --> 00:00:27,240 and I was wondering if maybe you could help me wrap some of it up. 10 00:00:28,760 --> 00:00:31,990 The really nice thing that IntelliJ offers is the ability to 11 00:00:31,990 --> 00:00:34,030 import an existing project. 12 00:00:34,030 --> 00:00:34,780 As we haven't yet 13 00:00:34,780 --> 00:00:38,400 covered version control in our adventures, we'll just use a zip file. 14 00:00:38,400 --> 00:00:41,000 Don't worry though, we'll get there soon enough, and when we do, 15 00:00:41,000 --> 00:00:43,780 we'll work together through a shared repository. 16 00:00:43,780 --> 00:00:44,750 Until then, though, 17 00:00:44,750 --> 00:00:47,820 I've added a link in the teacher's notes that I'd like you to download. 18 00:00:47,820 --> 00:00:49,110 So, go ahead and download it, and 19 00:00:49,110 --> 00:00:51,200 then extract the zip file on your local machine. 20 00:00:52,540 --> 00:00:56,309 Okay, so let's choose Open, so we'll choose File, Open. 21 00:00:56,309 --> 00:01:01,350 And then I'm gonna point to where that extracted folder is at. 22 00:01:01,350 --> 00:01:03,880 So, that's in my Downloads, over here. 23 00:01:03,880 --> 00:01:10,150 And I opened my local TreeStory, I am just going to click Choose and of course we're 24 00:01:10,150 --> 00:01:13,460 gonna say, do we want to have another window open and keep both of these open? 25 00:01:13,460 --> 00:01:15,480 I don't think so, let's just do this one, so we'll say this window. 26 00:01:18,340 --> 00:01:19,480 Put it up, cool. 27 00:01:19,480 --> 00:01:23,810 Here's everything, the project SDK is not defined, so let's go ahead and 28 00:01:23,810 --> 00:01:25,096 click Setup SDK. 29 00:01:25,096 --> 00:01:27,909 Is the. 30 00:01:27,909 --> 00:01:31,590 All right, there, everything is all set. 31 00:01:31,590 --> 00:01:34,420 So I'm going to open up the main over here. 32 00:01:34,420 --> 00:01:40,190 This is where we're going to run through, okay. 33 00:01:40,190 --> 00:01:43,120 So, using the tools that we've learned thus far, 34 00:01:43,120 --> 00:01:45,560 I was able to get things pretty dynamic. 35 00:01:45,560 --> 00:01:46,910 I'm not quite done yet. 36 00:01:46,910 --> 00:01:49,070 So, let's take a look at where I got. 37 00:01:49,070 --> 00:01:52,790 In Main, right here, if we do a little walk through of where I've gotten to, 38 00:01:52,790 --> 00:01:55,780 I haven't really written too much of the prompting code at all. 39 00:01:55,780 --> 00:01:58,800 But I've walked through the prototype and it needs some finishing touches. 40 00:01:58,800 --> 00:02:00,320 Maybe we can work together. 41 00:02:00,320 --> 00:02:02,780 So, I put notes in here of what I'd like to enhance and 42 00:02:02,780 --> 00:02:06,220 I hard coded some things here in Main that, hopefully, we could just unwind. 43 00:02:06,220 --> 00:02:08,650 I just wanted to show how it was working. 44 00:02:08,650 --> 00:02:11,900 This first thing here, we want to instantiate a new prompter object and 45 00:02:11,900 --> 00:02:14,220 prompt for the story. 46 00:02:14,220 --> 00:02:16,420 That's a to do here. 47 00:02:16,420 --> 00:02:17,380 The story template. 48 00:02:17,380 --> 00:02:21,455 So you'll see here that the story template is a string and 49 00:02:21,455 --> 00:02:23,375 all the places where we wanted to have spaces, 50 00:02:23,375 --> 00:02:27,585 I put double underscores to kinda fill in the blanks, because that's the, and 51 00:02:27,585 --> 00:02:30,215 the text that's inside of it is the word that we wanna ask the person. 52 00:02:30,215 --> 00:02:32,015 So, it kinda looks like a fill in the blank thing, right? 53 00:02:32,015 --> 00:02:33,506 So, you just write the story this way. 54 00:02:35,637 --> 00:02:38,007 And we'll prompt for those things, okay? 55 00:02:38,007 --> 00:02:39,877 So, on the next line here, we have this template. 56 00:02:39,877 --> 00:02:42,677 And to the constructor, we pass the story, okay. 57 00:02:42,677 --> 00:02:43,857 And so, let's look over here, 58 00:02:43,857 --> 00:02:49,097 let's just make sure that I know what this template is and open up these imports. 59 00:02:49,097 --> 00:02:52,227 Okay, we'll look over here in the source. 60 00:02:52,227 --> 00:02:53,457 Okay here, so here's template. 61 00:02:53,457 --> 00:02:55,250 So that's probably what that's talking about. 62 00:02:55,250 --> 00:02:58,445 So we'll dive deeper into template here in a bit. 63 00:02:58,445 --> 00:03:01,920 Okay, and after that I made some very obviously fake results, 64 00:03:01,920 --> 00:03:10,515 I named them fake results, and let's put these on here. 65 00:03:10,515 --> 00:03:17,050 Okay so, it says friend, talented, java programmer, high five. 66 00:03:17,050 --> 00:03:19,770 So I'm pretty sure that must fill up the story. 67 00:03:19,770 --> 00:03:22,760 Yep, very talented, I owe you a high five. 68 00:03:22,760 --> 00:03:23,260 Cool. 69 00:03:25,460 --> 00:03:27,180 And then we take this fake result and 70 00:03:27,180 --> 00:03:29,450 we call the render method, which we'll take a look at. 71 00:03:29,450 --> 00:03:32,440 And it returns results and we'll print out the results, there. 72 00:03:33,980 --> 00:03:36,580 And it says this should really happen in the prompt or run method. 73 00:03:36,580 --> 00:03:38,740 I'll take a look at that here. 74 00:03:38,740 --> 00:03:41,290 Fix a little typo, see the little green thing there. 75 00:03:41,290 --> 00:03:41,790 All right. 76 00:03:43,220 --> 00:03:47,680 Now, since this was imported, all of the configuration's already there. 77 00:03:47,680 --> 00:03:49,020 So see, there's already a main method here. 78 00:03:49,020 --> 00:03:52,910 So let's go ahead and let's run this and just make sure that it works 79 00:03:52,910 --> 00:03:55,930 it's gonna take the fake data in the story and says, thanks for helping me out. 80 00:03:55,930 --> 00:03:59,230 Your are really a talented java programmer and I owe you a high five. 81 00:03:59,230 --> 00:04:00,730 Cool. Pretty awesome, right? 82 00:04:00,730 --> 00:04:04,460 So, if we just made it so that you could prompt for the story and 83 00:04:04,460 --> 00:04:08,950 then for each of the placeholders, we'd have a super dynamic application, right? 84 00:04:08,950 --> 00:04:11,490 So, you prompt for the story, prompt for the placeholders. 85 00:04:11,490 --> 00:04:13,120 Bam! We got a tree story and 86 00:04:13,120 --> 00:04:15,020 it can be as dynamic as possible. 87 00:04:15,020 --> 00:04:18,560 Wouldn't be as hardcoded as we did in the original version of this, right? 88 00:04:18,560 --> 00:04:21,140 So I'm getting pulled off the project though. 89 00:04:21,140 --> 00:04:22,530 I got to go work on something else. 90 00:04:22,530 --> 00:04:25,140 I did the best that I could to document things. 91 00:04:25,140 --> 00:04:28,220 And I also left some to do's throughout the code. 92 00:04:28,220 --> 00:04:29,230 I used the format here. 93 00:04:29,230 --> 00:04:31,970 You'll see i used TODO:csd. 94 00:04:31,970 --> 00:04:33,480 That's my initials. 95 00:04:33,480 --> 00:04:35,000 This way you know that it's me talking, 96 00:04:36,050 --> 00:04:40,260 I was kind of leaving notes of what I thought was left that needed to get done. 97 00:04:40,260 --> 00:04:41,690 Because I initialed it, 98 00:04:41,690 --> 00:04:44,680 you know to come talk to me if these don't make any sense, right? 99 00:04:44,680 --> 00:04:47,340 So this is a great feature that lets you track to do's on a project. 100 00:04:47,340 --> 00:04:49,300 And I want to show you a couple of things, actually. 101 00:04:49,300 --> 00:04:55,870 If I press Cmd, and then hold it down, you see how this bar down here showed up? 102 00:04:55,870 --> 00:04:56,520 I'm going to do that again. 103 00:04:56,520 --> 00:04:58,820 I press Cmd and I hold it down and there it is. 104 00:04:58,820 --> 00:05:02,040 You can open up these different windows so I'm going to open up to do's here. 105 00:05:02,040 --> 00:05:05,820 This is a list of all of the to do's that are in the application. 106 00:05:05,820 --> 00:05:09,445 And if you click on each one of them it will go in highlight those. 107 00:05:09,445 --> 00:05:13,045 Okay, so this is a great place to kinda have gathered left what needs to be done 108 00:05:13,045 --> 00:05:14,125 in a project. 109 00:05:14,125 --> 00:05:17,505 This is a great way for teams to communicate with each other. 110 00:05:17,505 --> 00:05:19,125 And obviously you're on my team, and 111 00:05:19,125 --> 00:05:23,315 here we are communicating about what is left that needs to be done. 112 00:05:23,315 --> 00:05:25,855 So another thing that I did was I wrote Javadoc. 113 00:05:25,855 --> 00:05:29,310 So if you highlight methods, if we take a look at this render here and 114 00:05:29,310 --> 00:05:32,530 you click F1 on it just like any other method. 115 00:05:32,530 --> 00:05:36,130 Click render, it gives you the help that I actually wrote. 116 00:05:36,130 --> 00:05:40,190 And it says, given a list of values, replaces the fill in the blanks in order. 117 00:05:40,190 --> 00:05:42,700 And the values are the replacements for the fill in the blanks, and 118 00:05:42,700 --> 00:05:45,140 it returns the filled out TreeStory. 119 00:05:45,140 --> 00:05:46,560 Awesome. 120 00:05:46,560 --> 00:05:49,280 So, I'm going to show you something else too. 121 00:05:49,280 --> 00:05:54,247 If you wanted to see where this was defined you can press Cmd+B. 122 00:05:54,247 --> 00:05:56,470 Or Ctrl+B. 123 00:05:56,470 --> 00:05:58,250 And that's navigate to declaration. 124 00:05:58,250 --> 00:06:03,291 So I could have chosen Navigate, Declaration, Cmd+B. 125 00:06:05,450 --> 00:06:07,990 So see the documentation above that formatting? 126 00:06:09,040 --> 00:06:10,270 It's called Javadoc. 127 00:06:10,270 --> 00:06:12,190 It's a little out of the scope of this course, but 128 00:06:12,190 --> 00:06:14,190 I just wanted to show you that it works. 129 00:06:14,190 --> 00:06:17,400 And you could actually generate this using the IDE. 130 00:06:17,400 --> 00:06:20,070 And, it will generate websites using this notation. 131 00:06:20,070 --> 00:06:24,420 So, actually the documentation that we were looking at in, all of the Javadocs 132 00:06:24,420 --> 00:06:27,540 whenever we jumped over to the official Java documentation is using this format. 133 00:06:27,540 --> 00:06:31,210 So as long as you follow this, the IDE will then help. 134 00:06:31,210 --> 00:06:33,060 I'll do a future workshop on this, and 135 00:06:33,060 --> 00:06:35,730 I'll drop some information in the teacher notes if you're interested. 136 00:06:35,730 --> 00:06:37,670 And vote up the workshop if you're interested in it. 137 00:06:38,830 --> 00:06:42,770 Okay, so it's taking values that are passed in array and 138 00:06:42,770 --> 00:06:47,960 calling format, calling String.format on a thing called mCompiled. 139 00:06:49,120 --> 00:06:51,460 Okay, let's see what sets this. 140 00:06:51,460 --> 00:06:54,230 So I'm going to click this and I'm going to press Cmd+B. 141 00:06:54,230 --> 00:06:55,440 There we go. 142 00:06:55,440 --> 00:07:00,010 Okay, so it's a private string, and I'm going to press Cmd+B one more time and 143 00:07:00,010 --> 00:07:02,600 you can see this is where it's been used. 144 00:07:02,600 --> 00:07:06,300 So, mCompiled equals, so there, it's getting set, so let's look at that. 145 00:07:06,300 --> 00:07:10,060 The line below is the one we did, but this one here is where it gets set. 146 00:07:10,060 --> 00:07:10,750 Ok sweet. 147 00:07:10,750 --> 00:07:12,190 So where is this. 148 00:07:12,190 --> 00:07:15,880 This is inside of the template constructor. 149 00:07:16,910 --> 00:07:21,000 Well let's go ahead and lock this code in the debugger. 150 00:07:21,000 --> 00:07:24,775 I'm going to drop a break point on the first line here on this pattern line here 151 00:07:24,775 --> 00:07:28,101 and I'm going to kick off the debugger remember that was control D. 152 00:07:31,801 --> 00:07:33,440 Cool awesome so we're here already. 153 00:07:33,440 --> 00:07:36,350 If we look at the stack we're over here in main. 154 00:07:37,350 --> 00:07:39,130 And we're passed in the story. 155 00:07:39,130 --> 00:07:40,450 Which is that right there. 156 00:07:40,450 --> 00:07:42,410 The story that thing's named for helping me out. 157 00:07:43,830 --> 00:07:47,010 Okay so let's go back in to the template where we're at. 158 00:07:47,010 --> 00:07:50,170 You'll see that it says init here that's the way that it's saying that it's inside 159 00:07:50,170 --> 00:07:51,430 of the constructor. 160 00:07:51,430 --> 00:07:52,240 The initializer. 161 00:07:54,512 --> 00:07:59,180 All right, so to accomplish the finding of the place holders, you know, the blanks? 162 00:07:59,180 --> 00:08:02,080 I decided to use a regular expression. 163 00:08:02,080 --> 00:08:04,680 Now you've seen the little taste tests of these before, 164 00:08:04,680 --> 00:08:08,800 we use them to split up a string and you might have seen a workshop on them, 165 00:08:08,800 --> 00:08:11,230 but if you haven't, don't let them overwhelm you. 166 00:08:11,230 --> 00:08:13,350 They're a bit hard to grasp at first. 167 00:08:13,350 --> 00:08:16,420 It's normal to be a little bit confused, okay. 168 00:08:16,420 --> 00:08:20,460 So here we're seeing a pattern and it looks like this. 169 00:08:20,460 --> 00:08:24,690 Anything that has two underscores, followed by any character that's not 170 00:08:24,690 --> 00:08:30,380 two underscores, one or more of them, and then another two underscores. 171 00:08:30,380 --> 00:08:33,780 So we're looking for that, that is the pattern that we're looking for. 172 00:08:33,780 --> 00:08:37,690 We then use the pattern object to create a regular expression in the helper class 173 00:08:37,690 --> 00:08:39,470 called a matcher, which is here. 174 00:08:39,470 --> 00:08:43,100 So let's go ahead and let step, so 175 00:08:43,100 --> 00:08:48,030 now we have the text that's in here, we've gone to the matcher, okay? 176 00:08:48,030 --> 00:08:51,530 So let's step again, okay, so 177 00:08:51,530 --> 00:08:54,860 it's got all of these tools down here to keep track of things. 178 00:08:54,860 --> 00:08:59,110 It also has a method called find, which will find the next matching pattern. 179 00:08:59,110 --> 00:09:02,100 Let's step into that loop a bit here, press F8. 180 00:09:02,100 --> 00:09:06,020 Now we've entered the while loop, and we know that method of find was true, 181 00:09:06,020 --> 00:09:09,080 because we're in the while loop. 182 00:09:09,080 --> 00:09:14,022 We know now that we found a thing, and there's a method named group, so 183 00:09:14,022 --> 00:09:17,890 matcher.group is called. 184 00:09:17,890 --> 00:09:19,700 So let's look at that a little bit deeper. 185 00:09:19,700 --> 00:09:23,510 The way that grouping works in regular expressions is that you can mark certain 186 00:09:23,510 --> 00:09:25,900 parts that you want to extract. 187 00:09:25,900 --> 00:09:28,870 So we wanna extract the name and not the double underscore, so 188 00:09:28,870 --> 00:09:30,350 that's what these parentheses are about. 189 00:09:30,350 --> 00:09:32,150 We're saying this is the group that we want. 190 00:09:32,150 --> 00:09:34,040 We want the value inside of here. 191 00:09:34,040 --> 00:09:36,850 Anything that is not two underscores. 192 00:09:37,930 --> 00:09:41,430 So, the way that this works is group zero is the whole thing. 193 00:09:41,430 --> 00:09:43,600 Group one is the first set of parentheses. 194 00:09:43,600 --> 00:09:47,060 If you wanted more, you do one and then two and then so forth. 195 00:09:47,060 --> 00:09:50,210 Let's go ahead and use that little REPL tool. 196 00:09:50,210 --> 00:09:52,330 We'll say Evaluate Expression. 197 00:09:52,330 --> 00:09:55,070 And right here, if we say matcher.group(0). 198 00:09:55,070 --> 00:09:58,990 When we evaluate it, we'll see that it returns name, but 199 00:09:58,990 --> 00:10:03,690 if we do group 1, it's just name, right? 200 00:10:03,690 --> 00:10:07,130 So it's 0th is the first one, 1 is the first parens there. 201 00:10:08,550 --> 00:10:11,780 So if that seemed intense. 202 00:10:11,780 --> 00:10:12,800 It definitely is. 203 00:10:12,800 --> 00:10:15,660 It most definitely is and you shouldn't feel intimidated. 204 00:10:15,660 --> 00:10:18,220 Make sure that you check the teacher's notes to learn more about regular 205 00:10:18,220 --> 00:10:18,750 expressions. 206 00:10:18,750 --> 00:10:22,240 They're very powerful and definitely worth exploring more. 207 00:10:22,240 --> 00:10:24,850 Okay, so let's loop each one of these. 208 00:10:27,280 --> 00:10:34,510 Okay All right, so the next label [INAUDIBLE] is adjective. 209 00:10:34,510 --> 00:10:38,845 What we're doing is we're populating this mPlaceHolders, which is a list. 210 00:10:38,845 --> 00:10:43,180 Right, so let's take a look and place holders here is an array list. 211 00:10:44,350 --> 00:10:45,970 We're populating it each time. 212 00:10:48,390 --> 00:10:50,680 Oh, we're populating each one of the placeholders. 213 00:10:50,680 --> 00:10:51,280 That makes sense. 214 00:10:52,390 --> 00:10:53,900 Cool, so let's step outside of that. 215 00:10:53,900 --> 00:10:55,830 Let's break on this line here. 216 00:10:57,080 --> 00:10:59,090 We'll move to the cursor. 217 00:11:00,300 --> 00:11:01,350 Cool. So we got placeholders. 218 00:11:01,350 --> 00:11:03,730 We have all the placeholders that are in there and look, there's doubles. 219 00:11:04,820 --> 00:11:08,120 It's going to call a replaceAll method on matcher, 220 00:11:08,120 --> 00:11:12,080 which is going to replace all the previous matches, all those double underscores. 221 00:11:12,080 --> 00:11:14,390 So, let's do that, let's see what happens. 222 00:11:14,390 --> 00:11:15,950 Let's take a look of what incompiled is. 223 00:11:17,130 --> 00:11:19,620 Okay, it's the string format that we've seen before, right? 224 00:11:19,620 --> 00:11:24,700 So, it's the %s and it's just waiting to have some values put in there. 225 00:11:24,700 --> 00:11:27,110 So now let's go back to that render method. 226 00:11:28,770 --> 00:11:32,050 Here's that render method, and let's drop a break point here. 227 00:11:32,050 --> 00:11:33,670 And we'll just run to that. 228 00:11:35,750 --> 00:11:40,430 Okay, so mCompiled is that, and that values from the outside. 229 00:11:40,430 --> 00:11:42,190 What do we got in the values here? 230 00:11:43,560 --> 00:11:44,280 So there is values, and 231 00:11:44,280 --> 00:11:48,010 they go right into those format spots, so as long as we prompt for 232 00:11:48,010 --> 00:11:52,950 what those placeholders were, we can just stick those values that the people answer. 233 00:11:52,950 --> 00:11:54,280 Great, so there we go. 234 00:11:54,280 --> 00:11:55,430 That's how it's working, but 235 00:11:55,430 --> 00:11:58,120 I'd love to integrate that prompter object a little bit better. 236 00:11:58,120 --> 00:12:01,240 Let's take a quick look at the prompter object. 237 00:12:01,240 --> 00:12:03,300 I am going to stop the debugger. 238 00:12:03,300 --> 00:12:05,790 I'm gonna click this little arrow here to minimize it. 239 00:12:08,720 --> 00:12:09,681 Let's take a look at the prompter object. 240 00:12:14,800 --> 00:12:19,665 All right so in the constructor, let's get up to the constructor here and 241 00:12:19,665 --> 00:12:23,353 in the constructor we're building a reader all right, 242 00:12:23,353 --> 00:12:27,000 then it calls this method called loadCensoredWords. 243 00:12:27,000 --> 00:12:29,220 Let's press Cmd+B to see how that's defined. 244 00:12:29,220 --> 00:12:31,880 Right below it, so there's that, cool. 245 00:12:31,880 --> 00:12:37,891 So it uses the NIO style of files and does a paths dot get resources censored_words. 246 00:12:37,891 --> 00:12:42,740 So resources censored_words, okay. 247 00:12:42,740 --> 00:12:44,220 So it opens up that file. 248 00:12:45,700 --> 00:12:48,820 There's the censored words that we remember from before. 249 00:12:48,820 --> 00:12:50,020 Let's go back there really quick. 250 00:12:51,910 --> 00:12:55,450 Cool, so it pulls them all out and it pulls them into a set. 251 00:12:56,760 --> 00:13:02,470 Right mCensoredWords here is a set, a string set. 252 00:13:02,470 --> 00:13:03,790 Cool. 253 00:13:03,790 --> 00:13:05,920 That has that contains method that we saw earlier, 254 00:13:05,920 --> 00:13:08,760 so we could see if the word actually exists in there. 255 00:13:08,760 --> 00:13:09,300 All right. 256 00:13:09,300 --> 00:13:11,950 Sorry to drop the project on you like this but I really got something to do. 257 00:13:11,950 --> 00:13:13,780 I have to go set it up. 258 00:13:13,780 --> 00:13:15,800 I think I've given you all the info that you need and 259 00:13:15,800 --> 00:13:17,650 like I said there's to do's left in these files. 260 00:13:17,650 --> 00:13:19,170 So if you look in the prompter there's two here. 261 00:13:19,170 --> 00:13:23,480 So let's see let's print out the results that were gathered by rendering 262 00:13:23,480 --> 00:13:27,160 the template inside of the run method and prompter that makes sense and 263 00:13:27,160 --> 00:13:28,020 this other one let's see. 264 00:13:29,175 --> 00:13:30,240 Okay, so prompt for word. 265 00:13:30,240 --> 00:13:34,630 Prompt the user for the response to the phrase to make sure the word is censored. 266 00:13:34,630 --> 00:13:36,850 Loop until you get a good response. 267 00:13:36,850 --> 00:13:37,450 Okay? 268 00:13:37,450 --> 00:13:40,320 Cool. So go ahead and you'll get a passed in 269 00:13:40,320 --> 00:13:42,710 phrase and all this stuff's documented here. 270 00:13:42,710 --> 00:13:44,100 I really got to get running. 271 00:13:44,100 --> 00:13:45,600 Sorry about that, talk to you soon. 272 00:13:47,020 --> 00:13:49,220 I wanted you to experience something here. 273 00:13:49,220 --> 00:13:52,740 Even though you might not have understood exactly how I wrote this code, 274 00:13:52,740 --> 00:13:56,030 you did understand what it was doing, after stepping through it. 275 00:13:56,030 --> 00:13:59,370 The better you get at this, the more you'll be able to dive into projects and 276 00:13:59,370 --> 00:14:00,860 find your way around. 277 00:14:00,860 --> 00:14:03,230 This is an important skill to hone as a software developer. 278 00:14:04,230 --> 00:14:06,640 Many times you'll be thrust into a code base and 279 00:14:06,640 --> 00:14:08,900 you'll have to figure out how things are working. 280 00:14:08,900 --> 00:14:11,470 The more comfortable you start feeling around exploring, 281 00:14:11,470 --> 00:14:13,390 the quicker you'll pick things up. 282 00:14:13,390 --> 00:14:16,230 Using the debugger to step through things is a great way to learn what is up. 283 00:14:17,590 --> 00:14:18,170 All right. 284 00:14:18,170 --> 00:14:19,140 I know you can do this. 285 00:14:19,140 --> 00:14:19,890 Have fun. 286 00:14:19,890 --> 00:14:23,410 And remember if you get stuck just use the debugger to walk through things. 287 00:14:23,410 --> 00:14:26,060 Hit the forum too if something's confusing, your team will help you out. 288 00:14:27,450 --> 00:14:29,570 I've gotta set this up, I'll see you right after the exercise.