WEBVTT 1 00:00:01.500 --> 00:00:04.050 in the previous video we looked at how 2 00:00:04.050 --> 00:00:05.670 to catch exceptions and handle them in the previous video we looked at how 3 00:00:05.670 --> 00:00:09.510 using the try and accept statements and to catch exceptions and handle them 4 00:00:09.510 --> 00:00:11.790 we looked at how to use finally to make using the try and accept statements and 5 00:00:11.790 --> 00:00:13.620 sure that we can run clean up code for we looked at how to use finally to make 6 00:00:13.620 --> 00:00:16.080 example even if an exception is raised sure that we can run clean up code for 7 00:00:16.080 --> 00:00:18.449 and then we also saw yet another use of example even if an exception is raised 8 00:00:18.449 --> 00:00:21.480 the else keyword this time to execute and then we also saw yet another use of 9 00:00:21.480 --> 00:00:24.510 code if an exception isn't raised now the else keyword this time to execute 10 00:00:24.510 --> 00:00:27.180 handling exceptions is important to make code if an exception isn't raised now 11 00:00:27.180 --> 00:00:30.210 sure your code doesn't crash so if you handling exceptions is important to make 12 00:00:30.210 --> 00:00:32.340 can take some useful action when an sure your code doesn't crash so if you 13 00:00:32.340 --> 00:00:33.840 exception is raised then you should can take some useful action when an 14 00:00:33.840 --> 00:00:36.300 certainly do so but what happens if you exception is raised then you should 15 00:00:36.300 --> 00:00:39.390 code can't handle the exception now certainly do so but what happens if you 16 00:00:39.390 --> 00:00:41.790 if your module relies on a file name that has code can't handle the exception now 17 00:00:41.790 --> 00:00:43.680 been provided by the user for example if your module relies on a file name that has 18 00:00:43.680 --> 00:00:46.350 they may have entered an invalid volume or been provided by the user for example 19 00:00:46.350 --> 00:00:49.260 drive letter on Windows now your module they may have entered an invalid volume or 20 00:00:49.260 --> 00:00:51.120 may be called by some other code that drive letter on Windows now your module 21 00:00:51.120 --> 00:00:53.340 requested the file name so you can't may be called by some other code that 22 00:00:53.340 --> 00:00:55.050 just go picking a random location on requested the file name so you can't 23 00:00:55.050 --> 00:00:58.079 the computer to write your data to so just go picking a random location on 24 00:00:58.079 --> 00:01:00.090 in that case there's not a lot that your code the computer to write your data to so 25 00:01:00.090 --> 00:01:02.250 can do about the exception in that case there's not a lot that your code 26 00:01:02.250 --> 00:01:04.320 now you may be tempted to ask the user can do about the exception 27 00:01:04.320 --> 00:01:06.330 for another file name but if you're now you may be tempted to ask the user 28 00:01:06.330 --> 00:01:08.760 code is running on a remote server or as a for another file name but if you're 29 00:01:08.760 --> 00:01:09.990 windows service code is running on a remote server or as a 30 00:01:09.990 --> 00:01:12.119 no one will ever see your prompt and windows service 31 00:01:12.119 --> 00:01:13.439 your program will sit there waiting for no one will ever see your prompt and 32 00:01:13.439 --> 00:01:16.470 input that will never come so in that your program will sit there waiting for 33 00:01:16.470 --> 00:01:19.650 case theirs 2 actions you can take one input that will never come so in that 34 00:01:19.650 --> 00:01:21.750 action really the first thing you can do case theirs 2 actions you can take one 35 00:01:21.750 --> 00:01:23.939 is do nothing and we'll see in a minute action really the first thing you can do 36 00:01:23.939 --> 00:01:25.799 that doing nothing can actually be the is do nothing and we'll see in a minute 37 00:01:25.799 --> 00:01:27.810 best approach and they can be nothing that doing nothing can actually be the 38 00:01:27.810 --> 00:01:30.030 wrong with ignoring exceptions that you best approach and they can be nothing 39 00:01:30.030 --> 00:01:33.299 can't deal with but the other option is wrong with ignoring exceptions that you 40 00:01:33.299 --> 00:01:35.850 to raise an exception to let the calling can't deal with but the other option is 41 00:01:35.850 --> 00:01:38.850 code know that something's gone wrong so to raise an exception to let the calling 42 00:01:38.850 --> 00:01:40.650 we're going to use our duck class to code know that something's gone wrong so 43 00:01:40.650 --> 00:01:43.049 demonstrate this so got the game project we're going to use our duck class to 44 00:01:43.049 --> 00:01:44.670 open and you can see I've got the duck demonstrate this so got the game project 45 00:01:44.670 --> 00:01:47.100 stop py file opened so if you haven't open and you can see I've got the duck 46 00:01:47.100 --> 00:01:49.020 got this file or you've been experimenting stop py file opened so if you haven't 47 00:01:49.020 --> 00:01:51.030 or modifying it then you will find the got this file or you've been experimenting 48 00:01:51.030 --> 00:01:53.399 original ducks .py file in the or modifying it then you will find the 49 00:01:53.399 --> 00:01:56.070 resources section for this video so original ducks .py file in the 50 00:01:56.070 --> 00:01:58.680 we're going to use our duck class in a demo resources section for this video so 51 00:01:58.680 --> 00:02:02.250 program to model durk migration now we're going to use our duck class in a demo 52 00:02:02.250 --> 00:02:04.290 it's all a bit simplified but if I program to model durk migration now 53 00:02:04.290 --> 00:02:06.180 waited until we really needed to use it's all a bit simplified but if I 54 00:02:06.180 --> 00:02:08.489 exceptions in our database code you'd waited until we really needed to use 55 00:02:08.489 --> 00:02:10.140 have to learn about them while also exceptions in our database code you'd 56 00:02:10.140 --> 00:02:12.330 having a lot of new database concepts have to learn about them while also 57 00:02:12.330 --> 00:02:15.090 to understand so I put this having a lot of new database concepts 58 00:02:15.090 --> 00:02:17.220 example together to explain raising to understand so I put this 59 00:02:17.220 --> 00:02:19.680 exceptions before we need to do things example together to explain raising 60 00:02:19.680 --> 00:02:22.739 like this in real code now our duck exceptions before we need to do things 61 00:02:22.739 --> 00:02:25.379 class maybe we'll be very simple but like this in real code now our duck 62 00:02:25.379 --> 00:02:27.450 what we're about to do is exactly what you class maybe we'll be very simple but 63 00:02:27.450 --> 00:02:30.300 would do in real modules to make them what we're about to do is exactly what you 64 00:02:30.300 --> 00:02:32.459 more robust and to make debugging would do in real modules to make them 65 00:02:32.459 --> 00:02:33.209 easier more robust and to make debugging 66 00:02:33.209 --> 00:02:35.879 ok so should either have the game project easier 67 00:02:35.879 --> 00:02:38.400 loaded which I've got on screen there or ok so should either have the game project 68 00:02:38.400 --> 00:02:39.780 you should have created a new python loaded which I've got on screen there or 69 00:02:39.780 --> 00:02:42.360 project with a Python file called ducks you should have created a new python 70 00:02:42.360 --> 00:02:44.610 and then paste in the text from ducks.py project with a Python file called ducks 71 00:02:44.610 --> 00:02:46.950 from the resources section of this and then paste in the text from ducks.py 72 00:02:46.950 --> 00:02:49.829 video so what I'm going to do is from the resources section of this 73 00:02:49.829 --> 00:02:52.470 start by adding a new class to duck.py video so what I'm going to do is 74 00:02:52.470 --> 00:02:55.860 to represent a flock of ducks i'm start by adding a new class to duck.py 75 00:02:55.860 --> 00:02:57.780 going to call this class flock and add it to represent a flock of ducks i'm 76 00:02:57.780 --> 00:02:59.549 after the penguin class down here at going to call this class flock and add it 77 00:02:59.549 --> 00:03:02.010 the bottom going to clean up some of after the penguin class down here at 78 00:03:02.010 --> 00:03:07.860 this code that's been commented out so the bottom going to clean up some of 79 00:03:07.860 --> 00:03:09.150 I'm actually going to add this this code that's been commented out so 80 00:03:09.150 --> 00:03:11.730 class here on line 45 actually what I I'm actually going to add this 81 00:03:11.730 --> 00:03:13.470 might do just make it a space down here so class here on line 45 actually what I 82 00:03:13.470 --> 00:03:14.670 it's a little bit easier for us to might do just make it a space down here so 83 00:03:14.670 --> 00:03:18.540 see going to start with class... it's a little bit easier for us to 84 00:03:18.540 --> 00:03:25.739 .... see going to start with class... 85 00:03:25.739 --> 00:04:10.049 .... .... 86 00:04:10.049 --> 00:04:15.120 ok so there's our flock class so it's a .... 87 00:04:15.120 --> 00:04:17.940 fairly basic classes you can see when we ok so there's our flock class so it's a 88 00:04:17.940 --> 00:04:21.209 create a new flock the unique method in fairly basic classes you can see when we 89 00:04:21.209 --> 00:04:23.940 line 48 creates an empty list called create a new flock the unique method in 90 00:04:23.940 --> 00:04:26.130 flock and that's with a lowercase as you line 48 creates an empty list called 91 00:04:26.130 --> 00:04:28.440 can see there now we got an add flock and that's with a lowercase as you 92 00:04:28.440 --> 00:04:31.110 duck method to add new ducks to the can see there now we got an add 93 00:04:31.110 --> 00:04:34.020 flock and also this migrate method that duck method to add new ducks to the 94 00:04:34.020 --> 00:04:36.450 causes every duck in the flock to fly by flock and also this migrate method that 95 00:04:36.450 --> 00:04:39.390 calling their fly method so next what causes every duck in the flock to fly by 96 00:04:39.390 --> 00:04:41.730 we're going to do is use our duck calling their fly method so next what 97 00:04:41.730 --> 00:04:43.890 objects in another program so we're we're going to do is use our duck 98 00:04:43.890 --> 00:04:45.240 going to create a new python file objects in another program so we're 99 00:04:45.240 --> 00:04:55.500 called migration migration so we need to going to create a new python file 100 00:04:55.500 --> 00:04:57.930 import ducks so that we can use the called migration migration so we need to 101 00:04:57.930 --> 00:05:00.000 object from ducks.py and then i'm going import ducks so that we can use the 102 00:05:00.000 --> 00:05:01.620 to create a new flock and add some ducks object from ducks.py and then i'm going 103 00:05:01.620 --> 00:05:07.380 to that so import... to create a new flock and add some ducks 104 00:05:07.380 --> 00:05:12.900 .... to that so import... 105 00:05:12.900 --> 00:05:33.810 .... .... 106 00:05:33.810 --> 00:05:42.510 ...okay so .... 107 00:05:42.510 --> 00:05:43.980 obviously I didn't try to think up other ...okay so 108 00:05:43.980 --> 00:05:46.169 names so for each duck but if you're in obviously I didn't try to think up other 109 00:05:46.169 --> 00:05:48.480 a habit of naming duck then names so for each duck but if you're in 110 00:05:48.480 --> 00:05:49.800 you've either got a good scientific a habit of naming duck then 111 00:05:49.800 --> 00:05:52.020 reason for doing so or a very strange you've either got a good scientific 112 00:05:52.020 --> 00:05:52.560 hobby reason for doing so or a very strange 113 00:05:52.560 --> 00:05:54.660 alright so we've now got a new flock hobby 114 00:05:54.660 --> 00:05:55.650 object alright so we've now got a new flock 115 00:05:55.650 --> 00:05:57.900 we've also got the seven ducks that object 116 00:05:57.900 --> 00:05:59.669 we've defined herein line 4 through we've also got the seven ducks that 117 00:05:59.669 --> 00:06:00.360 10 we've defined herein line 4 through 118 00:06:00.360 --> 00:06:03.660 so let's now go ahead and add the Ducks 10 119 00:06:03.660 --> 00:06:10.830 to the flock.... so let's now go ahead and add the Ducks 120 00:06:10.830 --> 00:06:13.610 ... to the flock.... 121 00:06:13.610 --> 00:06:16.849 .... ... 122 00:06:16.849 --> 00:06:48.420 .... .... 123 00:06:48.420 --> 00:06:50.940 ....so .... 124 00:06:50.940 --> 00:06:52.740 it now contains seven ducks and we ....so 125 00:06:52.740 --> 00:06:54.750 should be able to make the migrate so it now contains seven ducks and we 126 00:06:54.750 --> 00:06:58.770 we do that by typing... should be able to make the migrate so 127 00:06:58.770 --> 00:07:00.630 so try running that to confirm that it we do that by typing... 128 00:07:00.630 --> 00:07:04.260 works you can see that time we've got so try running that to confirm that it 129 00:07:04.260 --> 00:07:07.500 seven messages their so each duck is works you can see that time we've got 130 00:07:07.500 --> 00:07:10.500 successfully flying so far that's seven messages their so each duck is 131 00:07:10.500 --> 00:07:13.320 working fine but the problem comes if i successfully flying so far that's 132 00:07:13.320 --> 00:07:15.810 try to add percy the penguin to the working fine but the problem comes if i 133 00:07:15.810 --> 00:07:17.610 flock let me show you what i mean so i'm try to add percy the penguin to the 134 00:07:17.610 --> 00:07:22.260 going to do.... flock let me show you what i mean so i'm 135 00:07:22.260 --> 00:07:26.340 ... going to do.... 136 00:07:26.340 --> 00:07:30.060 ... ... 137 00:07:30.060 --> 00:07:33.720 .... ... 138 00:07:33.720 --> 00:07:39.750 ....you see that we've .... 139 00:07:39.750 --> 00:07:42.600 actually got an error so as you can see ....you see that we've 140 00:07:42.600 --> 00:07:44.160 here we've only got four of our ducks actually got an error so as you can see 141 00:07:44.160 --> 00:07:46.350 that have managed to fly the other three here we've only got four of our ducks 142 00:07:46.350 --> 00:07:49.170 grounded and failed to take off and again that have managed to fly the other three 143 00:07:49.170 --> 00:07:50.670 percy he had a problem trying to fly as grounded and failed to take off and again 144 00:07:50.670 --> 00:07:53.250 well and i put this into percy he had a problem trying to fly as 145 00:07:53.250 --> 00:07:55.890 floating mode right now to make it easier well and i put this into 146 00:07:55.890 --> 00:07:59.250 and probably see those links a little floating mode right now to make it easier 147 00:07:59.250 --> 00:08:02.280 easier so you probably recall from we're and probably see those links a little 148 00:08:02.280 --> 00:08:04.320 setting up a penguin that this was going easier so you probably recall from we're 149 00:08:04.320 --> 00:08:05.940 to happen and that's because penguins setting up a penguin that this was going 150 00:08:05.940 --> 00:08:08.580 can't fly so the migrate method crashes to happen and that's because penguins 151 00:08:08.580 --> 00:08:10.590 when it tries to call Percy's fly method can't fly so the migrate method crashes 152 00:08:10.590 --> 00:08:13.050 so we're going to use this simple when it tries to call Percy's fly method 153 00:08:13.050 --> 00:08:15.210 example to look at how we can handle so we're going to use this simple 154 00:08:15.210 --> 00:08:18.000 problems like this and the first thing we example to look at how we can handle 155 00:08:18.000 --> 00:08:19.770 should do is to provide the users of our problems like this and the first thing we 156 00:08:19.770 --> 00:08:23.100 modules with a hint as to what they should do is to provide the users of our 157 00:08:23.100 --> 00:08:25.650 should be passing to our methods now modules with a hint as to what they 158 00:08:25.650 --> 00:08:29.340 python 3.5 added support for type hints should be passing to our methods now 159 00:08:29.340 --> 00:08:32.400 in function and method declarations but python 3.5 added support for type hints 160 00:08:32.400 --> 00:08:34.770 function annotations have been around in function and method declarations but 161 00:08:34.770 --> 00:08:37.950 since python 3.0 you can use an function annotations have been around 162 00:08:37.950 --> 00:08:40.110 annotation in exactly the same format as since python 3.0 you can use an 163 00:08:40.110 --> 00:08:42.270 as a type in what we're about to do will annotation in exactly the same format as 164 00:08:42.270 --> 00:08:45.180 work with all versions of python 3 in as a type in what we're about to do will 165 00:08:45.180 --> 00:08:47.760 fact type hints it's just a formalization of work with all versions of python 3 in 166 00:08:47.760 --> 00:08:50.640 using function annotations for static type fact type hints it's just a formalization of 167 00:08:50.640 --> 00:08:53.490 analysis and it was mainly done so that using function annotations for static type 168 00:08:53.490 --> 00:08:55.890 type checking tools have a standard to analysis and it was mainly done so that 169 00:08:55.890 --> 00:08:57.990 work with now the lint checker in type checking tools have a standard to 170 00:08:57.990 --> 00:09:00.060 IntelliJ that gives us those warnings work with now the lint checker in 171 00:09:00.060 --> 00:09:01.800 and errors in the right margin IntelliJ that gives us those warnings 172 00:09:01.800 --> 00:09:04.649 is one such checker alright so let's add and errors in the right margin 173 00:09:04.649 --> 00:09:07.260 some hints to our add duck method so that is one such checker alright so let's add 174 00:09:07.260 --> 00:09:09.750 at least anyone using attacks module has some hints to our add duck method so that 175 00:09:09.750 --> 00:09:11.850 an indication of what they should be at least anyone using attacks module has 176 00:09:11.850 --> 00:09:14.760 providing to the method so we're going an indication of what they should be 177 00:09:14.760 --> 00:09:17.850 to actually just come back here close down providing to the method so we're going 178 00:09:17.850 --> 00:09:20.700 run window and i'm going to add to actually just come back here close down 179 00:09:20.700 --> 00:09:24.360 the code back in ducks.py and run window and i'm going to add 180 00:09:24.360 --> 00:09:25.350 specifically what we're going to be the code back in ducks.py and 181 00:09:25.350 --> 00:09:28.920 looking at is the flock object and we're specifically what we're going to be 182 00:09:28.920 --> 00:09:30.540 going to add hint to the add duck method looking at is the flock object and we're 183 00:09:30.540 --> 00:09:34.260 so parameters are annotated by using a going to add hint to the add duck method 184 00:09:34.260 --> 00:09:36.630 colon followed by the type of the so parameters are annotated by using a 185 00:09:36.630 --> 00:09:38.760 parameter and return values are colon followed by the type of the 186 00:09:38.760 --> 00:09:41.279 indicated using the literal a dash and a parameter and return values are 187 00:09:41.279 --> 00:09:42.510 greater than symbol indicated using the literal a dash and a 188 00:09:42.510 --> 00:09:44.730 let's go ahead and do that so with duck greater than symbol 189 00:09:44.730 --> 00:09:49.170 we're going to put... let's go ahead and do that so with duck 190 00:09:49.170 --> 00:09:52.110 ... we're going to put... 191 00:09:52.110 --> 00:10:04.079 ... ... 192 00:10:04.079 --> 00:10:06.839 ...so again parameters ... 193 00:10:06.839 --> 00:10:08.730 are annotated by using a colon as you ...so again parameters 194 00:10:08.730 --> 00:10:11.700 can see here and then now followed by are annotated by using a colon as you 195 00:10:11.700 --> 00:10:13.800 the type of the perimeter and the return can see here and then now followed by 196 00:10:13.800 --> 00:10:15.510 value can see I use a dash and a the type of the perimeter and the return 197 00:10:15.510 --> 00:10:18.690 greater than sign and then the type of value can see I use a dash and a 198 00:10:18.690 --> 00:10:20.399 the parameter in this case we're using greater than sign and then the type of 199 00:10:20.399 --> 00:10:22.740 none when I switch back now that I've the parameter in this case we're using 200 00:10:22.740 --> 00:10:25.800 done that to migration py so you can none when I switch back now that I've 201 00:10:25.800 --> 00:10:27.420 see that intelliJ lint checker has done that to migration py so you can 202 00:10:27.420 --> 00:10:29.430 picked up the annotation and we've see that intelliJ lint checker has 203 00:10:29.430 --> 00:10:30.959 actually got this percy showing a picked up the annotation and we've 204 00:10:30.959 --> 00:10:32.940 warning if I can hover over that now actually got this percy showing a 205 00:10:32.940 --> 00:10:38.070 expected type duck got penguin instead if warning if I can hover over that now 206 00:10:38.070 --> 00:10:40.260 you click on one of the add duck method calls expected type duck got penguin instead if 207 00:10:40.260 --> 00:10:42.690 doesn't matter which one then use you click on one of the add duck method calls 208 00:10:42.690 --> 00:10:46.770 control q or ctrl J on a Mac there's now doesn't matter which one then use 209 00:10:46.770 --> 00:10:48.300 indication that we should be adding control q or ctrl J on a Mac there's now 210 00:10:48.300 --> 00:10:50.160 objects of type duck as you can see there indication that we should be adding 211 00:10:50.160 --> 00:10:53.160 now note that self has been annotated objects of type duck as you can see there 212 00:10:53.160 --> 00:10:56.850 automatically self flock up here there's now note that self has been annotated 213 00:10:56.850 --> 00:10:59.519 no need to annotate the self parameter automatically self flock up here there's 214 00:10:59.519 --> 00:11:03.510 in method calls so function annotations no need to annotate the self parameter 215 00:11:03.510 --> 00:11:05.970 or type hints as they're called they in method calls so function annotations 216 00:11:05.970 --> 00:11:08.579 do use exactly the same mechanism can be or type hints as they're called they 217 00:11:08.579 --> 00:11:11.250 very useful now they're very simple to do use exactly the same mechanism can be 218 00:11:11.250 --> 00:11:12.839 use so there's only one other thing i very useful now they're very simple to 219 00:11:12.839 --> 00:11:15.060 want to say about them now if you use a use so there's only one other thing i 220 00:11:15.060 --> 00:11:15.450 hint want to say about them now if you use a 221 00:11:15.450 --> 00:11:17.520 for one of the parameters then add a hint 222 00:11:17.520 --> 00:11:19.440 hint for all of them including the for one of the parameters then add a 223 00:11:19.440 --> 00:11:21.660 return value you can find more hint for all of them including the 224 00:11:21.660 --> 00:11:24.930 information of this in pet 484 lets return value you can find more 225 00:11:24.930 --> 00:11:26.550 just to open a browser I will quickly show information of this in pet 484 lets 226 00:11:26.550 --> 00:11:26.800 that just to open a browser I will quickly show 227 00:11:26.800 --> 00:11:34.089 [Music] that 228 00:11:34.089 --> 00:11:37.430 if you scroll down here [Music] 229 00:11:37.430 --> 00:11:40.880 here under the non goals section it if you scroll down here 230 00:11:40.880 --> 00:11:42.950 should be emphasized that python will here under the non goals section it 231 00:11:42.950 --> 00:11:45.680 remain a dynamically typed language and should be emphasized that python will 232 00:11:45.680 --> 00:11:47.480 the authors have no desire to ever make remain a dynamically typed language and 233 00:11:47.480 --> 00:11:50.300 type hints mandatory even by convention the authors have no desire to ever make 234 00:11:50.300 --> 00:11:53.690 and the second parameter under here the type hints mandatory even by convention 235 00:11:53.690 --> 00:11:55.370 next section the meaning of annotations and the second parameter under here the 236 00:11:55.370 --> 00:11:58.399 that recommends that you add hints for next section the meaning of annotations 237 00:11:58.399 --> 00:12:01.220 all arguments and the return type if that recommends that you add hints for 238 00:12:01.220 --> 00:12:02.720 you're going to add hints for any of them all arguments and the return type if 239 00:12:02.720 --> 00:12:04.370 and I think that's probably good you're going to add hints for any of them 240 00:12:04.370 --> 00:12:05.690 practice so do that and I think that's probably good 241 00:12:05.690 --> 00:12:07.910 ok so we've given the users of our practice so do that 242 00:12:07.910 --> 00:12:10.399 module an indication of what they should ok so we've given the users of our 243 00:12:10.399 --> 00:12:12.230 pass to the add_duck_ module an indication of what they should 244 00:12:12.230 --> 00:12:15.649 method as if the name was an pass to the add_duck_ 245 00:12:15.649 --> 00:12:18.320 indication enough in this case but that method as if the name was an 246 00:12:18.320 --> 00:12:20.180 still doesn't prevent it from crashing indication enough in this case but that 247 00:12:20.180 --> 00:12:22.910 if they ignore the hint so if we go ahead still doesn't prevent it from crashing 248 00:12:22.910 --> 00:12:26.930 and run this migration .py we still if they ignore the hint so if we go ahead 249 00:12:26.930 --> 00:12:27.860 get crashing and run this migration .py we still 250 00:12:27.860 --> 00:12:30.770 so let's stop the video here and in the get crashing 251 00:12:30.770 --> 00:12:31.970 next video we're going to have a look at so let's stop the video here and in the 252 00:12:31.970 --> 00:12:34.310 this stack trace and talk about this a next video we're going to have a look at 253 00:12:34.310 --> 00:12:35.990 little bit further so we'll see you in this stack trace and talk about this a 254 00:12:35.990 --> 00:12:41.529 the next video little bit further so we'll see you in