1 00:00:04,960 --> 00:00:19,999 [Music] 2 00:00:20,680 --> 00:00:24,800 hi everyone welcome back for the last 3 00:00:22,519 --> 00:00:27,240 talk before we have lunch uh would you 4 00:00:24,800 --> 00:00:29,400 please join me in welcoming to this the 5 00:00:27,240 --> 00:00:31,880 podium uh Clinton Roy who'll be talking 6 00:00:29,400 --> 00:00:34,160 about adding file system contexts to 7 00:00:31,880 --> 00:00:34,160 path 8 00:00:35,559 --> 00:00:40,600 lib it's always helpful to get a 9 00:00:37,800 --> 00:00:43,920 reminder of um what is between you and 10 00:00:40,600 --> 00:00:45,360 lunch so no pressure uh hello everyone 11 00:00:43,920 --> 00:00:47,920 my name is Clinton I'm a software 12 00:00:45,360 --> 00:00:50,520 engineer uh most of my career is has 13 00:00:47,920 --> 00:00:52,399 been around helping researchers uh write 14 00:00:50,520 --> 00:00:55,840 code so that they can do more research 15 00:00:52,399 --> 00:00:57,120 and more science and make life better uh 16 00:00:55,840 --> 00:00:59,359 at the moment I'm at the Australian 17 00:00:57,120 --> 00:01:01,199 synchrotron um a few of my colleagues 18 00:00:59,359 --> 00:01:02,680 have given uh a couple of talks earlier 19 00:01:01,199 --> 00:01:04,360 in the week on the synchron stuff so I 20 00:01:02,680 --> 00:01:06,640 don't have to go over that 21 00:01:04,360 --> 00:01:09,040 fortunately um I'm talking today about 22 00:01:06,640 --> 00:01:11,240 something that is not uh synchrotron 23 00:01:09,040 --> 00:01:13,080 specific uh but it certainly has come up 24 00:01:11,240 --> 00:01:17,159 from uh some of my work at the 25 00:01:13,080 --> 00:01:21,040 synchrotron and it is a very small tweak 26 00:01:17,159 --> 00:01:23,759 to python that I'm suggesting um and you 27 00:01:21,040 --> 00:01:25,479 know as if as with any change the change 28 00:01:23,759 --> 00:01:28,880 is the hardest 29 00:01:25,479 --> 00:01:31,720 part um so during this talk I'm just 30 00:01:28,880 --> 00:01:34,759 going to outline what I'm proposing um 31 00:01:31,720 --> 00:01:36,399 why um how it could be implemented and 32 00:01:34,759 --> 00:01:40,600 what are the next 33 00:01:36,399 --> 00:01:44,280 steps um there is a public part of the 34 00:01:40,600 --> 00:01:48,159 Python Community public website uh uh 35 00:01:44,280 --> 00:01:51,479 called discus or discuss um there is a 36 00:01:48,159 --> 00:01:53,520 section of that called python ideas I'm 37 00:01:51,479 --> 00:01:57,320 trying to choose my words very carefully 38 00:01:53,520 --> 00:02:00,200 here python ideas is a place where ideas 39 00:01:57,320 --> 00:02:01,840 go to get schooled um a lot of people 40 00:02:00,200 --> 00:02:07,560 have ideas they think they're really 41 00:02:01,840 --> 00:02:09,239 good um uh ideas many people have ideas 42 00:02:07,560 --> 00:02:11,319 and they're much like getting a song 43 00:02:09,239 --> 00:02:12,400 stuck in your head they're stuck in your 44 00:02:11,319 --> 00:02:14,800 head they're not stuck in everyone 45 00:02:12,400 --> 00:02:16,280 else's head uh they might sound really 46 00:02:14,800 --> 00:02:19,080 good inside your head but when you sing 47 00:02:16,280 --> 00:02:21,040 them they sound really bad ideas can be 48 00:02:19,080 --> 00:02:23,000 really similar to that they sound really 49 00:02:21,040 --> 00:02:24,879 good in your head but they're not so 50 00:02:23,000 --> 00:02:30,040 crash hot when everyone else looks at 51 00:02:24,879 --> 00:02:31,480 them um there's there's roughly um um I 52 00:02:30,040 --> 00:02:36,519 forget the exact number I think there's 53 00:02:31,480 --> 00:02:40,680 roughly about uh 50 or 60 threads uh of 54 00:02:36,519 --> 00:02:45,159 ideas posted to the python ideas um um 55 00:02:40,680 --> 00:02:47,800 Forum a year and most of those ideas the 56 00:02:45,159 --> 00:02:49,800 response to them is like the last person 57 00:02:47,800 --> 00:02:51,800 who brought it up here's are all the 58 00:02:49,800 --> 00:02:53,519 responses to it that said it's a really 59 00:02:51,800 --> 00:02:57,640 bad idea go and have a look at this 60 00:02:53,519 --> 00:03:00,800 thread or even uh more concretely that 61 00:02:57,640 --> 00:03:03,280 idea um was proposed in the standard 62 00:03:00,800 --> 00:03:06,120 python way uh uh a pep which we'll get 63 00:03:03,280 --> 00:03:07,720 on to later on um and these are all the 64 00:03:06,120 --> 00:03:11,040 reasons that pep didn't 65 00:03:07,720 --> 00:03:12,680 proceed so whenever I have an idea uh 66 00:03:11,040 --> 00:03:16,920 because I subscribe to the python ideas 67 00:03:12,680 --> 00:03:19,040 mailing list um I know how to set my 68 00:03:16,920 --> 00:03:21,959 expectations for any ideas that I come 69 00:03:19,040 --> 00:03:25,920 up with and they are 70 00:03:21,959 --> 00:03:28,000 l so I had an idea and much like a song 71 00:03:25,920 --> 00:03:30,400 I couldn't get it out of my head um and 72 00:03:28,000 --> 00:03:32,760 it was rattling around and matter how 73 00:03:30,400 --> 00:03:33,959 many side projects I said yes to I 74 00:03:32,760 --> 00:03:36,040 couldn't get rid of the idea from my 75 00:03:33,959 --> 00:03:38,000 head so I decided to post it up on 76 00:03:36,040 --> 00:03:39,640 python ideas and let other people shoot 77 00:03:38,000 --> 00:03:41,120 it down so that I could quietly put it 78 00:03:39,640 --> 00:03:43,879 to to 79 00:03:41,120 --> 00:03:45,920 bet um so you know I freely admitted 80 00:03:43,879 --> 00:03:47,920 that I was using a a public resource I 81 00:03:45,920 --> 00:03:49,400 was using other people's time for my own 82 00:03:47,920 --> 00:03:52,079 mental 83 00:03:49,400 --> 00:03:53,480 health um unfortunately someone came 84 00:03:52,079 --> 00:03:55,120 back and said that's kind of an 85 00:03:53,480 --> 00:03:58,159 interesting idea and you should do it 86 00:03:55,120 --> 00:04:01,120 and then he uh uh listed out uh a 87 00:03:58,159 --> 00:04:04,480 technique for doing it 88 00:04:01,120 --> 00:04:07,519 um if you don't know Barney Barney is 89 00:04:04,480 --> 00:04:11,200 the this is the code owners file from uh 90 00:04:07,519 --> 00:04:13,879 cpython GitHub um Barney is the owner of 91 00:04:11,200 --> 00:04:16,720 the path lib Library so unfortunately I 92 00:04:13,879 --> 00:04:18,079 posted an idea and the person who owns 93 00:04:16,720 --> 00:04:19,239 the library said it's an interesting 94 00:04:18,079 --> 00:04:24,400 idea and you should go and have a look 95 00:04:19,239 --> 00:04:29,080 at it so that was that was the first 96 00:04:24,400 --> 00:04:31,759 fail so um I'm not I'm not really 97 00:04:29,080 --> 00:04:34,160 suggesting it is a very small idea as 98 00:04:31,759 --> 00:04:37,720 you you will see uh I'm not suggesting 99 00:04:34,160 --> 00:04:39,360 huge code changes um so most of the 100 00:04:37,720 --> 00:04:43,039 coding examples I'll be showing will be 101 00:04:39,360 --> 00:04:44,840 relatively small um for space reasons 102 00:04:43,039 --> 00:04:47,440 you can assume that all of the examples 103 00:04:44,840 --> 00:04:49,400 have uh this this import here just so 104 00:04:47,440 --> 00:04:51,880 that we can save on Space going forward 105 00:04:49,400 --> 00:04:54,320 so it's a very standard uh import of 106 00:04:51,880 --> 00:04:57,400 path from path 107 00:04:54,320 --> 00:05:00,759 lip um and the change that I'm 108 00:04:57,400 --> 00:05:03,600 suggesting here is there are flags that 109 00:05:00,759 --> 00:05:06,479 are passed to operations in path lib and 110 00:05:03,600 --> 00:05:09,120 the most common ones are to do with case 111 00:05:06,479 --> 00:05:12,240 sensitivity and to following sin links 112 00:05:09,120 --> 00:05:14,919 and I'm suggesting that we move those 113 00:05:12,240 --> 00:05:18,280 flags from the operation so from the 114 00:05:14,919 --> 00:05:23,520 verb and uh we move those flags uh to 115 00:05:18,280 --> 00:05:26,840 the noun uh so to the object so um in 116 00:05:23,520 --> 00:05:29,400 this before case here uh pathlib has a 117 00:05:26,840 --> 00:05:34,199 glob operator so we're asking path lib 118 00:05:29,400 --> 00:05:37,960 to give us all the st. Tiff files and um 119 00:05:34,199 --> 00:05:40,479 if I say case sensitive false um it will 120 00:05:37,960 --> 00:05:43,440 give me all of the star. Tiff lowercase 121 00:05:40,479 --> 00:05:47,400 files and all the star. Tiff uppercase 122 00:05:43,440 --> 00:05:50,600 files um and if one of the elements of 123 00:05:47,400 --> 00:05:53,160 Home Clinton R Pon Au is a Sim link um 124 00:05:50,600 --> 00:05:54,800 I'm telling it to not follow those Sim 125 00:05:53,160 --> 00:05:57,360 links so if there's a Sim Link in that 126 00:05:54,800 --> 00:06:00,319 path don't follow it so all I'm 127 00:05:57,360 --> 00:06:02,919 suggesting is we um 128 00:06:00,319 --> 00:06:06,840 move those flags from the operation to 129 00:06:02,919 --> 00:06:08,639 the object um there is a little bit of a 130 00:06:06,840 --> 00:06:10,400 name difference between the recurse Sim 131 00:06:08,639 --> 00:06:12,800 links and the follow Sim links the 132 00:06:10,400 --> 00:06:14,240 concept is identical there so don't get 133 00:06:12,800 --> 00:06:16,720 hung up on the name of the attribute 134 00:06:14,240 --> 00:06:19,000 changing too much so that that's the 135 00:06:16,720 --> 00:06:22,479 talk so if you need to go off and have 136 00:06:19,000 --> 00:06:25,639 lunch you've got the the guts of the 137 00:06:22,479 --> 00:06:28,360 idea um and I kind of have to describe 138 00:06:25,639 --> 00:06:30,319 why we want to do this now so if your 139 00:06:28,360 --> 00:06:32,120 stomach's nice and comfortable um for 140 00:06:30,319 --> 00:06:35,960 lunch now I'd leave now because this is 141 00:06:32,120 --> 00:06:35,960 where it starts to get a little bit 142 00:06:36,199 --> 00:06:41,190 quasy I am a developer I'm therefore 143 00:06:39,639 --> 00:06:42,240 right 144 00:06:41,190 --> 00:06:45,400 [Music] 145 00:06:42,240 --> 00:06:47,479 so this is this is the essential core 146 00:06:45,400 --> 00:06:49,520 problem when people post their ideas up 147 00:06:47,479 --> 00:06:52,560 to python ideas this is the the core 148 00:06:49,520 --> 00:06:53,840 motivating factor that they've got um 149 00:06:52,560 --> 00:06:57,160 this is the one that you've got to get 150 00:06:53,840 --> 00:07:01,879 over when you post your ideas in 151 00:06:57,160 --> 00:07:03,919 public um I I think long term with path 152 00:07:01,879 --> 00:07:06,759 lib we're just going to start seeing 153 00:07:03,919 --> 00:07:09,160 more and more flags and and I think 154 00:07:06,759 --> 00:07:11,360 those flags are good uh so so having 155 00:07:09,160 --> 00:07:13,280 having those flags uh to be able to 156 00:07:11,360 --> 00:07:15,400 change the way that operations happen I 157 00:07:13,280 --> 00:07:17,800 think is a good thing but I think it 158 00:07:15,400 --> 00:07:20,039 might be a better thing if we have one 159 00:07:17,800 --> 00:07:21,759 place where we put all of those flags 160 00:07:20,039 --> 00:07:22,560 rather than adding Flags to lots of 161 00:07:21,759 --> 00:07:24,240 different 162 00:07:22,560 --> 00:07:26,840 operations and that's that's a little 163 00:07:24,240 --> 00:07:30,240 bit of a taste thing uh but I also think 164 00:07:26,840 --> 00:07:32,720 it means that when we add a flag we are 165 00:07:30,240 --> 00:07:34,720 not uh just adding a flag to one 166 00:07:32,720 --> 00:07:38,720 operation we're thinking about how that 167 00:07:34,720 --> 00:07:41,160 new flag can uh alter the behavior of 168 00:07:38,720 --> 00:07:43,520 the entire path lip uh 169 00:07:41,160 --> 00:07:46,840 Library um and it means that if we add a 170 00:07:43,520 --> 00:07:49,919 new flag we're adding it in one place so 171 00:07:46,840 --> 00:07:53,000 the documentation for the path lib init 172 00:07:49,919 --> 00:07:55,759 uh function would grow all of the uh 173 00:07:53,000 --> 00:08:00,120 Flags but none of the other operations 174 00:07:55,759 --> 00:08:00,120 would grow uh in their complexity 175 00:08:00,680 --> 00:08:08,919 um the the main thing I think here is 176 00:08:03,599 --> 00:08:12,080 that it's very possible to have paths as 177 00:08:08,919 --> 00:08:16,919 um parts of an API where you're passing 178 00:08:12,080 --> 00:08:18,319 a directory along to an API and that API 179 00:08:16,919 --> 00:08:20,520 you don't want to have to give it all of 180 00:08:18,319 --> 00:08:23,599 these extra flags as part of that API 181 00:08:20,520 --> 00:08:25,919 because the path is really just a input 182 00:08:23,599 --> 00:08:28,840 or output operator and you don't want 183 00:08:25,919 --> 00:08:31,240 your non-path API to have to deal with 184 00:08:28,840 --> 00:08:33,519 those flags 185 00:08:31,240 --> 00:08:36,560 so this is where the work side of things 186 00:08:33,519 --> 00:08:38,440 come in let's say I have a science API 187 00:08:36,560 --> 00:08:40,880 that I give a directory and that 188 00:08:38,440 --> 00:08:44,039 directory might have oh I don't know 189 00:08:40,880 --> 00:08:44,959 hundreds of Tiff files from a camera 190 00:08:44,039 --> 00:08:49,399 that I 191 00:08:44,959 --> 00:08:51,440 control um at the moment my science API 192 00:08:49,399 --> 00:08:54,360 would if if there were sings in that 193 00:08:51,440 --> 00:08:55,720 path because it was a nested NFS Mount 194 00:08:54,360 --> 00:08:58,000 from three servers away and there were 195 00:08:55,720 --> 00:09:00,760 lots of Zim links in that chain at the 196 00:08:58,000 --> 00:09:02,720 moment I would have to tell my science 197 00:09:00,760 --> 00:09:05,160 API that doesn't really care about Sim 198 00:09:02,720 --> 00:09:10,360 links that it needs to follow the Sim 199 00:09:05,160 --> 00:09:13,040 links so if I get my change in uh that 200 00:09:10,360 --> 00:09:15,920 op option would get passed along to the 201 00:09:13,040 --> 00:09:17,360 path object the science API wouldn't 202 00:09:15,920 --> 00:09:19,279 have to think about Sim links wouldn't 203 00:09:17,360 --> 00:09:22,360 have to know about Sim links uh but it 204 00:09:19,279 --> 00:09:24,959 would get modified uh by those flags and 205 00:09:22,360 --> 00:09:28,000 in my mind that's appropriate because my 206 00:09:24,959 --> 00:09:29,079 science API doesn't know what SIM links 207 00:09:28,000 --> 00:09:29,920 are shouldn't have to know what SIM 208 00:09:29,079 --> 00:09:31,560 links are 209 00:09:29,920 --> 00:09:33,680 so it's that separation of concerns in 210 00:09:31,560 --> 00:09:33,680 the 211 00:09:33,920 --> 00:09:41,399 API um so as long as well as uh Barney 212 00:09:39,160 --> 00:09:43,519 saying it's it's an interesting idea he 213 00:09:41,399 --> 00:09:46,399 also gave me a complete recipe for had 214 00:09:43,519 --> 00:09:47,600 to go about implementing a prototype so 215 00:09:46,399 --> 00:09:49,120 the rest of the talk is going through 216 00:09:47,600 --> 00:09:52,760 that 217 00:09:49,120 --> 00:09:54,519 prototype um so I am making a class 218 00:09:52,760 --> 00:09:58,560 called context path because all of these 219 00:09:54,519 --> 00:10:01,079 flags are context in a certain way um in 220 00:09:58,560 --> 00:10:02,920 the fullness of time if this idea was 221 00:10:01,079 --> 00:10:05,519 accepted there wouldn't be a context 222 00:10:02,920 --> 00:10:07,839 path it would go into path itself but 223 00:10:05,519 --> 00:10:10,760 for this test run we're making a new 224 00:10:07,839 --> 00:10:13,680 class called context path the really 225 00:10:10,760 --> 00:10:18,200 important thing here is that in Python 226 00:10:13,680 --> 00:10:22,160 312 and 313 Barnie's done a lot of work 227 00:10:18,200 --> 00:10:24,640 to rejig path lib so that you can subass 228 00:10:22,160 --> 00:10:26,480 from path and do so in a really useful 229 00:10:24,640 --> 00:10:28,800 manner so if you want to do experiments 230 00:10:26,480 --> 00:10:32,160 around path and path lib it is really 231 00:10:28,800 --> 00:10:33,640 easy to do do um so much so that he's 232 00:10:32,160 --> 00:10:35,040 kind of got a rot response about how to 233 00:10:33,640 --> 00:10:37,480 try these things 234 00:10:35,040 --> 00:10:41,880 out 235 00:10:37,480 --> 00:10:44,680 so um the second implementation step is 236 00:10:41,880 --> 00:10:48,760 passing along my my context Flags to the 237 00:10:44,680 --> 00:10:52,880 init uh operation so my init operation 238 00:10:48,760 --> 00:10:56,079 here uh uh very standard python where 239 00:10:52,880 --> 00:10:59,440 I've got uh my star ARS which is all of 240 00:10:56,079 --> 00:11:02,120 the parts of the path 241 00:10:59,440 --> 00:11:06,360 um I've got my case sensitivity flag my 242 00:11:02,120 --> 00:11:08,880 follow Sim links flag I call uh super of 243 00:11:06,360 --> 00:11:11,320 in it so that's the the path in it so 244 00:11:08,880 --> 00:11:14,120 that initializes path how it always has 245 00:11:11,320 --> 00:11:18,760 been and then I store my Flags in the 246 00:11:14,120 --> 00:11:21,480 object so very um very normal standard 247 00:11:18,760 --> 00:11:25,200 basic python 248 00:11:21,480 --> 00:11:28,160 there uh step three uh is Implement with 249 00:11:25,200 --> 00:11:32,760 segments with segments is the Workhorse 250 00:11:28,160 --> 00:11:35,480 of the path uh path lid path object uh 251 00:11:32,760 --> 00:11:38,600 anytime you are making A New Path based 252 00:11:35,480 --> 00:11:39,959 on uh a previous path like you're using 253 00:11:38,600 --> 00:11:41,639 the slash operator to add a new 254 00:11:39,959 --> 00:11:44,360 directory or file name into it it 255 00:11:41,639 --> 00:11:49,360 eventually gets called down to with 256 00:11:44,360 --> 00:11:50,839 segments so the um the path 257 00:11:49,360 --> 00:11:55,480 implementation of withd segments is 258 00:11:50,839 --> 00:11:58,800 really quite clever it grabs self asks 259 00:11:55,480 --> 00:12:01,200 me what the type of self is and in path 260 00:11:58,800 --> 00:12:04,040 that answer is path and then it passes 261 00:12:01,200 --> 00:12:06,480 along those path segments to its own 262 00:12:04,040 --> 00:12:10,160 class so it's calling in it again 263 00:12:06,480 --> 00:12:12,680 essentially so my context uh path 264 00:12:10,160 --> 00:12:14,279 implementation very very similar does 265 00:12:12,680 --> 00:12:17,240 exactly the same thing but just passes 266 00:12:14,279 --> 00:12:19,560 those flags along so I'm doing exactly 267 00:12:17,240 --> 00:12:21,440 the same thing as the original path 268 00:12:19,560 --> 00:12:24,079 class but I'm just passing my context 269 00:12:21,440 --> 00:12:24,079 Flags 270 00:12:25,399 --> 00:12:28,959 along I can't hear anyone's stomach 271 00:12:27,680 --> 00:12:30,560 rumbling or anything like that so that's 272 00:12:28,959 --> 00:12:32,240 good 273 00:12:30,560 --> 00:12:34,000 um so that's essentially the 274 00:12:32,240 --> 00:12:39,199 implementation uh like a test 275 00:12:34,000 --> 00:12:42,600 implementation of my idea um in terms of 276 00:12:39,199 --> 00:12:45,079 uh creating a context path passing the 277 00:12:42,600 --> 00:12:48,160 flags along now it's time to use the 278 00:12:45,079 --> 00:12:49,360 flags I'm not um like like the really 279 00:12:48,160 --> 00:12:51,560 important thing here is I'm not talking 280 00:12:49,360 --> 00:12:53,480 about changing the behavior of path lib 281 00:12:51,560 --> 00:12:58,240 I'm just talking about changing the way 282 00:12:53,480 --> 00:13:00,240 you can figure uh path lib so um one of 283 00:12:58,240 --> 00:13:03,720 the operations that that path lib does 284 00:13:00,240 --> 00:13:05,480 is a stat uh a stat uh asks for 285 00:13:03,720 --> 00:13:06,800 information about a file or directory 286 00:13:05,480 --> 00:13:12,720 that you're you're pointing 287 00:13:06,800 --> 00:13:15,040 to so um the implementation um of stat I 288 00:13:12,720 --> 00:13:18,040 can call that in my context uh 289 00:13:15,040 --> 00:13:22,560 implementation of stat by calling super. 290 00:13:18,040 --> 00:13:25,920 stat and when I pass so stat already has 291 00:13:22,560 --> 00:13:28,120 a uh a flag on the verb to follow Sim 292 00:13:25,920 --> 00:13:32,600 links or not so all I do in my 293 00:13:28,120 --> 00:13:35,360 implementation is grab my uh uh 294 00:13:32,600 --> 00:13:37,880 internally stored flag self. follow Sim 295 00:13:35,360 --> 00:13:40,560 links so I'm not changing the operations 296 00:13:37,880 --> 00:13:43,480 of anything it's just um how and where 297 00:13:40,560 --> 00:13:46,480 the flags are stored and passed 298 00:13:43,480 --> 00:13:48,440 along uh and similarly with glob where 299 00:13:46,480 --> 00:13:52,600 we're looking at globbing start. Tiff 300 00:13:48,440 --> 00:13:55,279 files before very similar um I call the 301 00:13:52,600 --> 00:13:57,199 current implementation of glob but I 302 00:13:55,279 --> 00:13:59,199 just pass along the case sensitive and 303 00:13:57,199 --> 00:14:04,480 follow Sim link flags for my own 304 00:13:59,199 --> 00:14:09,600 internal uh flag uh registry 305 00:14:04,480 --> 00:14:13,440 memory so to think about um how this 306 00:14:09,600 --> 00:14:16,600 would operate for testing we have a 307 00:14:13,440 --> 00:14:19,360 testing directory here um we've got two 308 00:14:16,600 --> 00:14:22,360 Tiff files here one's lowcase one's 309 00:14:19,360 --> 00:14:23,920 uppercase so when we switch the case 310 00:14:22,360 --> 00:14:26,680 sensitive flag and we do a glob 311 00:14:23,920 --> 00:14:31,279 operation we'll expect to either get one 312 00:14:26,680 --> 00:14:33,639 or two Tiff files there and we' got uh a 313 00:14:31,279 --> 00:14:37,560 destination D at the top and we've also 314 00:14:33,639 --> 00:14:39,440 got a Sim link um uh pointing to that D 315 00:14:37,560 --> 00:14:44,440 at the bottom 316 00:14:39,440 --> 00:14:46,480 um don't worry the context um important 317 00:14:44,440 --> 00:14:48,759 parts of this slide will be presented 318 00:14:46,480 --> 00:14:50,360 further on but that's I've only got four 319 00:14:48,759 --> 00:14:53,160 files that I'm testing with just as a 320 00:14:50,360 --> 00:14:53,160 proof of concept 321 00:14:53,639 --> 00:15:01,040 test so now we look at some basic tests 322 00:14:57,639 --> 00:15:04,480 um for context path so again these are 323 00:15:01,040 --> 00:15:06,480 common Imports so stat is a standalone 324 00:15:04,480 --> 00:15:09,480 uh python module uh it's a built-in 325 00:15:06,480 --> 00:15:11,279 python module when you do a stat uh on a 326 00:15:09,480 --> 00:15:14,079 file or directory you get back a whole 327 00:15:11,279 --> 00:15:15,800 bunch of numbers stat essentially has a 328 00:15:14,079 --> 00:15:20,959 whole bunch of constants that let you 329 00:15:15,800 --> 00:15:22,639 ask um is this file thing a file is it a 330 00:15:20,959 --> 00:15:25,639 Sim link is a 331 00:15:22,639 --> 00:15:27,240 directory and for my tests I import 332 00:15:25,639 --> 00:15:30,759 context path as 333 00:15:27,240 --> 00:15:32,639 well uh so these are just Imports that 334 00:15:30,759 --> 00:15:34,399 are repeated for all the tests and I've 335 00:15:32,639 --> 00:15:36,199 just put them up here to save space 336 00:15:34,399 --> 00:15:41,040 further 337 00:15:36,199 --> 00:15:44,759 on so this is a case sensitive test so 338 00:15:41,040 --> 00:15:46,839 this is the subset of the test area that 339 00:15:44,759 --> 00:15:48,399 um we're interested in here so we got 340 00:15:46,839 --> 00:15:49,399 the lowercase Tiff file the uppercase 341 00:15:48,399 --> 00:15:53,240 Tiff 342 00:15:49,399 --> 00:15:55,800 file um we create our context path we 343 00:15:53,240 --> 00:15:59,759 pass along case sensitive true so we 344 00:15:55,800 --> 00:16:02,560 care about the case when we do um a glob 345 00:15:59,759 --> 00:16:05,440 on star. Tiff and that is a lower 346 00:16:02,560 --> 00:16:08,399 lowercase do Tiff we expect that we'll 347 00:16:05,440 --> 00:16:12,600 only get the lowercase image. Tiff file 348 00:16:08,399 --> 00:16:16,639 back so that's our case sensitive uh 349 00:16:12,600 --> 00:16:20,440 test there and very 350 00:16:16,639 --> 00:16:24,120 similarly same um area with the two Tiff 351 00:16:20,440 --> 00:16:27,319 files uppercase and lower case this time 352 00:16:24,120 --> 00:16:30,079 we do we set the case sensitive option 353 00:16:27,319 --> 00:16:33,000 to false so we don't care about case so 354 00:16:30,079 --> 00:16:35,720 this time when we do a glob on star. 355 00:16:33,000 --> 00:16:38,079 Tiff it will glob on both the lower case 356 00:16:35,720 --> 00:16:40,440 and the uppercase you can see the assert 357 00:16:38,079 --> 00:16:43,120 there we expect to get those two files 358 00:16:40,440 --> 00:16:45,720 back so that's the the test so we've 359 00:16:43,120 --> 00:16:47,839 tested uh the on and the off parts of 360 00:16:45,720 --> 00:16:47,839 the 361 00:16:48,160 --> 00:16:55,639 flag um Sim links are a little bit um 362 00:16:53,800 --> 00:16:59,040 little bit harder to reason about to 363 00:16:55,639 --> 00:17:00,720 think about um I'm a Unix person and I 364 00:16:59,040 --> 00:17:04,280 know through many years of experience 365 00:17:00,720 --> 00:17:09,039 that I get them wrong all the time um so 366 00:17:04,280 --> 00:17:10,559 this is the um this is the the test for 367 00:17:09,039 --> 00:17:13,079 uh following Sim links when we're doing 368 00:17:10,559 --> 00:17:14,919 a stat operation the subset of the test 369 00:17:13,079 --> 00:17:17,319 area that we're interested in here is 370 00:17:14,919 --> 00:17:19,400 the destination dur so it's a directory 371 00:17:17,319 --> 00:17:23,199 and the Sim link that points to that 372 00:17:19,400 --> 00:17:26,880 directory we make a context path to our 373 00:17:23,199 --> 00:17:29,360 Sim link and we say uh follow the Sim 374 00:17:26,880 --> 00:17:32,000 links um and then we do the St 375 00:17:29,360 --> 00:17:34,600 on that so because we're following the 376 00:17:32,000 --> 00:17:36,240 Sim links when we do the stat we won't 377 00:17:34,600 --> 00:17:39,200 be doing the stat on the Sim link we'll 378 00:17:36,240 --> 00:17:43,440 be doing it on the destination directory 379 00:17:39,200 --> 00:17:45,760 so when we ask the stat results is it a 380 00:17:43,440 --> 00:17:47,039 Sim link it'll be false because we're 381 00:17:45,760 --> 00:17:49,880 following the Sim links so we'll 382 00:17:47,039 --> 00:17:52,520 actually hit the directory and when we 383 00:17:49,880 --> 00:17:54,280 ask the the state results is it a 384 00:17:52,520 --> 00:17:55,600 directory because we followed the Sim 385 00:17:54,280 --> 00:17:56,720 links and we've hit the directory it 386 00:17:55,600 --> 00:18:00,400 will 387 00:17:56,720 --> 00:18:01,880 be and similarly where we're in a mode 388 00:18:00,400 --> 00:18:04,159 where we don't want to follow the Sim 389 00:18:01,880 --> 00:18:07,120 links where we want to Halt on the Sim 390 00:18:04,159 --> 00:18:10,120 links um it's kind of 391 00:18:07,120 --> 00:18:13,400 Switched so we pass along follow Sim 392 00:18:10,120 --> 00:18:16,919 links to be false um which means that 393 00:18:13,400 --> 00:18:18,880 when we're doing the stat um when we're 394 00:18:16,919 --> 00:18:21,840 uh realizing that path it'll stop at the 395 00:18:18,880 --> 00:18:24,960 Sim link so when we check the state 396 00:18:21,840 --> 00:18:26,919 result we can see that it is a Sim link 397 00:18:24,960 --> 00:18:30,120 and that it is not a d because it hasn't 398 00:18:26,919 --> 00:18:32,840 followed that Sim link through um 399 00:18:30,120 --> 00:18:34,320 and I don't think I'll tell you how many 400 00:18:32,840 --> 00:18:36,520 times I had to do this test until I got 401 00:18:34,320 --> 00:18:36,520 it 402 00:18:36,559 --> 00:18:42,440 right um so I've got the idea I've got a 403 00:18:40,600 --> 00:18:45,520 very basic implementation I've got a 404 00:18:42,440 --> 00:18:46,880 conference talk out of it as well um so 405 00:18:45,520 --> 00:18:48,480 what's the next thing to do now that 406 00:18:46,880 --> 00:18:51,039 I've got a really basic implementation 407 00:18:48,480 --> 00:18:54,200 of the idea I need to get back to Barney 408 00:18:51,039 --> 00:18:56,280 um show him the code see what he thinks 409 00:18:54,200 --> 00:18:58,200 um and and that's kind of like the 410 00:18:56,280 --> 00:19:02,600 code's the really easy part like the the 411 00:18:58,200 --> 00:19:05,480 point of this talk is to to show that um 412 00:19:02,600 --> 00:19:07,000 you know software a lot of the time is 413 00:19:05,480 --> 00:19:08,559 really easy and it's dealing with the 414 00:19:07,000 --> 00:19:13,240 people and the change management that's 415 00:19:08,559 --> 00:19:15,720 really hard so the next uh so assuming 416 00:19:13,240 --> 00:19:17,799 that that Barney likes the code and 417 00:19:15,720 --> 00:19:19,360 wants to go ahead now we have to think 418 00:19:17,799 --> 00:19:21,960 about how we're going to incorporate 419 00:19:19,360 --> 00:19:25,200 this change into the py python 420 00:19:21,960 --> 00:19:28,360 ecosystem um the structured way of doing 421 00:19:25,200 --> 00:19:32,000 this uh in the python Community is uh 422 00:19:28,360 --> 00:19:35,760 with a python enhancement uh proposal or 423 00:19:32,000 --> 00:19:37,360 pep um it's a structured document um 424 00:19:35,760 --> 00:19:41,120 which talks about all of the technical 425 00:19:37,360 --> 00:19:43,880 challenges of the idea uh it explicitly 426 00:19:41,120 --> 00:19:46,679 brings out um how we're going to teach 427 00:19:43,880 --> 00:19:48,960 this change because uh at the roots of 428 00:19:46,679 --> 00:19:51,200 python uh it was designed to be a 429 00:19:48,960 --> 00:19:52,720 language that's easy to teach so if 430 00:19:51,200 --> 00:19:55,400 you're making a change to the language 431 00:19:52,720 --> 00:19:57,960 you have to um outline how you're going 432 00:19:55,400 --> 00:20:02,640 to teach this change uh which I think is 433 00:19:57,960 --> 00:20:03,760 uh very useful thing um but there's also 434 00:20:02,640 --> 00:20:06,360 uh thinking about backwards 435 00:20:03,760 --> 00:20:09,480 compatibility because it's a change so 436 00:20:06,360 --> 00:20:11,159 it's it's we're going to um you know if 437 00:20:09,480 --> 00:20:12,919 this gets up it's going to change how 438 00:20:11,159 --> 00:20:15,039 people use path lib and we have to think 439 00:20:12,919 --> 00:20:18,280 about all of the code that's out there 440 00:20:15,039 --> 00:20:19,840 that uses these flags on the verb and 441 00:20:18,280 --> 00:20:22,440 how are we're going to migrate to having 442 00:20:19,840 --> 00:20:25,280 the flags on the noun do we have the 443 00:20:22,440 --> 00:20:27,039 flags in both places do we deprecate 444 00:20:25,280 --> 00:20:30,080 them do we think about eventually 445 00:20:27,039 --> 00:20:32,320 removing them do we use the Tri-State 446 00:20:30,080 --> 00:20:35,120 nature of these flags where by default 447 00:20:32,320 --> 00:20:37,400 they're none um you can actively set 448 00:20:35,120 --> 00:20:39,960 them to true or false if one of the 449 00:20:37,400 --> 00:20:42,640 flags is none and one of the other flags 450 00:20:39,960 --> 00:20:45,000 is uh true or false does that override 451 00:20:42,640 --> 00:20:46,360 things or does the verb always override 452 00:20:45,000 --> 00:20:48,600 the noun or does the noun always 453 00:20:46,360 --> 00:20:51,520 override the verb there's lots of 454 00:20:48,600 --> 00:20:53,520 options and fortunately um I won't be in 455 00:20:51,520 --> 00:20:59,760 charge of making that 456 00:20:53,520 --> 00:21:03,400 decision um so if we go down this track 457 00:20:59,760 --> 00:21:08,000 um it's it's it's one of these changes 458 00:21:03,400 --> 00:21:09,600 where it sort of uh opens the door just 459 00:21:08,000 --> 00:21:11,720 a crack and it can sort of see through 460 00:21:09,600 --> 00:21:15,880 all the things that you would do with it 461 00:21:11,720 --> 00:21:17,600 so um the buzzing in the brain this is 462 00:21:15,880 --> 00:21:21,640 like the flapping in the brain versus 463 00:21:17,600 --> 00:21:24,600 the buzzing in the brain so Windows has 464 00:21:21,640 --> 00:21:26,480 things that behave like Sim links but 465 00:21:24,600 --> 00:21:29,159 regular users don't have the Privileges 466 00:21:26,480 --> 00:21:31,480 to use them they do have things called 467 00:21:29,159 --> 00:21:34,919 Junctions which are kind of like Sim 468 00:21:31,480 --> 00:21:36,279 links but they're only um if I'm getting 469 00:21:34,919 --> 00:21:38,880 if I'm remembering 470 00:21:36,279 --> 00:21:40,840 correctly uh Junctions are Sim links 471 00:21:38,880 --> 00:21:42,080 that you can only point to directories 472 00:21:40,840 --> 00:21:44,600 and you can only Point directories on 473 00:21:42,080 --> 00:21:47,799 the same file system there's already 474 00:21:44,600 --> 00:21:51,200 code inside of path lib to check if 475 00:21:47,799 --> 00:21:54,559 something's a junction and part of part 476 00:21:51,200 --> 00:21:58,600 of my um impetus for doing this is 477 00:21:54,559 --> 00:22:00,559 instead of adding a follow Junction flag 478 00:21:58,600 --> 00:22:03,039 to all of the calls that it makes sense 479 00:22:00,559 --> 00:22:06,640 we just add that follow Junction flag 480 00:22:03,039 --> 00:22:10,760 just in the init function and we call it 481 00:22:06,640 --> 00:22:11,960 done um there's lots of fun things with 482 00:22:10,760 --> 00:22:16,360 lots of different Windows operating 483 00:22:11,960 --> 00:22:19,600 systems where the path can be encoded uh 484 00:22:16,360 --> 00:22:21,840 with different um Unicode mappings and 485 00:22:19,600 --> 00:22:25,039 different you know pre- Unicode mappings 486 00:22:21,840 --> 00:22:27,320 so that you can have uh nicely spelled 487 00:22:25,039 --> 00:22:30,360 uh human names in file names and 488 00:22:27,320 --> 00:22:32,159 directories um at the moment python sort 489 00:22:30,360 --> 00:22:34,559 of takes a punt on that and says we 490 00:22:32,159 --> 00:22:37,720 always do this which is totally fine 491 00:22:34,559 --> 00:22:39,960 totally legit way of doing things but if 492 00:22:37,720 --> 00:22:42,320 we had options on path we could set 493 00:22:39,960 --> 00:22:45,360 those options and we could get nicely 494 00:22:42,320 --> 00:22:47,200 printed names out of paths on Windows 495 00:22:45,360 --> 00:22:48,720 that our users like to read without 496 00:22:47,200 --> 00:22:52,200 having to do any 497 00:22:48,720 --> 00:22:55,440 work um one of the things with Sim links 498 00:22:52,200 --> 00:22:58,640 is that it's very easy to do a really 499 00:22:55,440 --> 00:22:59,760 long chain of sim links ping-ponging all 500 00:22:58,640 --> 00:23:02,480 around your file 501 00:22:59,760 --> 00:23:05,919 system uh you can get into Loops quite 502 00:23:02,480 --> 00:23:07,440 easily if you uh if you forget Which Way 503 00:23:05,919 --> 00:23:09,840 Around The Operators to creating Sim 504 00:23:07,440 --> 00:23:14,720 link uh go which you know I never did 505 00:23:09,840 --> 00:23:16,880 that anymore um so it's very possible to 506 00:23:14,720 --> 00:23:20,760 request following Sim links attempt to 507 00:23:16,880 --> 00:23:22,760 open up a file on a Sim link and just go 508 00:23:20,760 --> 00:23:26,159 round and round in a loop now if we let 509 00:23:22,760 --> 00:23:28,520 that happen um that would be a nice way 510 00:23:26,159 --> 00:23:32,240 of doing a denial of service attack on 511 00:23:28,520 --> 00:23:35,559 on some code so the security people have 512 00:23:32,240 --> 00:23:38,440 have added limits to uh the underlying 513 00:23:35,559 --> 00:23:40,600 file system code that says um if you're 514 00:23:38,440 --> 00:23:42,960 following Sim links and you hit 100 Sim 515 00:23:40,600 --> 00:23:45,679 links that's it we fail and you can't 516 00:23:42,960 --> 00:23:47,279 open that file wouldn't it be nice if at 517 00:23:45,679 --> 00:23:49,840 the python layer we could do something 518 00:23:47,279 --> 00:23:51,919 similar and say you can only follow 10 519 00:23:49,840 --> 00:23:54,400 Sim Links at the at the at the python 520 00:23:51,919 --> 00:23:56,679 layer so that would be an interesting 521 00:23:54,400 --> 00:23:58,919 way of doing security stuff at the path 522 00:23:56,679 --> 00:24:01,679 liway 523 00:23:58,919 --> 00:24:03,320 um there's lots of things to think about 524 00:24:01,679 --> 00:24:05,080 from the backwards compatibility point 525 00:24:03,320 --> 00:24:07,279 of view and and I've already mentioned 526 00:24:05,080 --> 00:24:09,279 this like what would take prec what 527 00:24:07,279 --> 00:24:13,400 would take precedence would the the noun 528 00:24:09,279 --> 00:24:15,159 or the verb Flags take precedence um uh 529 00:24:13,400 --> 00:24:19,320 do we use the Tri-State nature of these 530 00:24:15,159 --> 00:24:22,000 flags to uh make things nice um would we 531 00:24:19,320 --> 00:24:24,400 actually deprecate the arguments uh on 532 00:24:22,000 --> 00:24:26,440 the verbs or would we just leave them 533 00:24:24,400 --> 00:24:27,559 there as an optional extra for those 534 00:24:26,440 --> 00:24:29,240 times when you do actually want to 535 00:24:27,559 --> 00:24:31,919 overwrite 536 00:24:29,240 --> 00:24:35,080 um if you're writing a program or an 537 00:24:31,919 --> 00:24:38,000 application and you've got lots of paths 538 00:24:35,080 --> 00:24:40,640 coming in and out maybe for that 539 00:24:38,000 --> 00:24:43,520 application or Library you want to 540 00:24:40,640 --> 00:24:46,000 always have the same flags for all of 541 00:24:43,520 --> 00:24:49,200 the paths that you create so maybe we 542 00:24:46,000 --> 00:24:50,880 provide a path Factory that sets all of 543 00:24:49,200 --> 00:24:53,039 those flags maybe that's something to 544 00:24:50,880 --> 00:24:53,039 think 545 00:24:55,520 --> 00:25:05,559 about um so that's that's ESS the talk 546 00:24:59,720 --> 00:25:10,600 um I like using old technology um so uh 547 00:25:05,559 --> 00:25:15,080 this slid uh deck um was made with emac 548 00:25:10,600 --> 00:25:16,960 and org mode and uh latch and TI Zed um 549 00:25:15,080 --> 00:25:19,600 the new thing for me is I've actually 550 00:25:16,960 --> 00:25:21,520 paid for a type face which is a sentence 551 00:25:19,600 --> 00:25:23,600 that I never thought I would say but the 552 00:25:21,520 --> 00:25:27,240 uh the monotype face there is uh 553 00:25:23,600 --> 00:25:29,120 courtesy of berley mono and with that I 554 00:25:27,240 --> 00:25:34,320 have time for questions 555 00:25:29,120 --> 00:25:37,360 [Applause] 556 00:25:34,320 --> 00:25:40,360 and who's up for the first question 557 00:25:37,360 --> 00:25:40,360 yeah 558 00:25:41,120 --> 00:25:48,399 no come on you knew i' have something um 559 00:25:45,799 --> 00:25:50,240 so you you already answered my first 560 00:25:48,399 --> 00:25:52,200 question which was the default flag 561 00:25:50,240 --> 00:25:55,600 model um but the other thing that was 562 00:25:52,200 --> 00:25:57,880 giving me Vibes of was decimal contexts 563 00:25:55,600 --> 00:25:58,960 and whether you'd considered the decimal 564 00:25:57,880 --> 00:26:00,960 context 565 00:25:58,960 --> 00:26:04,440 type 566 00:26:00,960 --> 00:26:09,080 approach yeah so 567 00:26:04,440 --> 00:26:10,960 um so similarly so programming is you 568 00:26:09,080 --> 00:26:12,120 know not all the time but a lot of the 569 00:26:10,960 --> 00:26:15,279 time it's 570 00:26:12,120 --> 00:26:17,720 about uh making assumptions versus 571 00:26:15,279 --> 00:26:20,520 knowing the assumptions that you've made 572 00:26:17,720 --> 00:26:23,120 so we've done that in a lot of 573 00:26:20,520 --> 00:26:25,760 contexts and one of these context is 574 00:26:23,120 --> 00:26:27,720 with decimal numbers uh so there's a 575 00:26:25,760 --> 00:26:29,760 whole bunch of flags that you can set 576 00:26:27,720 --> 00:26:32,200 around dealing with python decimal 577 00:26:29,760 --> 00:26:34,720 numbers and this is not a python 578 00:26:32,200 --> 00:26:36,600 specific thing this is the the standard 579 00:26:34,720 --> 00:26:40,399 uh for decimal numbers that the python 580 00:26:36,600 --> 00:26:43,000 mation bases itself on but in order to 581 00:26:40,399 --> 00:26:46,480 make life easy we hid a lot of those 582 00:26:43,000 --> 00:26:48,679 details inside the module um now I might 583 00:26:46,480 --> 00:26:55,720 be getting this wrong so so shout me 584 00:26:48,679 --> 00:26:59,039 down I am um it's it's difficult because 585 00:26:55,720 --> 00:27:01,039 those contexts are built into the module 586 00:26:59,039 --> 00:27:02,480 it's a little bit ugly to change those 587 00:27:01,039 --> 00:27:05,679 contexts for two different decimal 588 00:27:02,480 --> 00:27:09,799 numbers and get them to talk together 589 00:27:05,679 --> 00:27:11,880 nicely so I like I I don't know like in 590 00:27:09,799 --> 00:27:16,960 my mind the the decimal context way of 591 00:27:11,880 --> 00:27:18,520 doing things is not great and and maybe 592 00:27:16,960 --> 00:27:22,640 shouldn't be a recipe for how we do this 593 00:27:18,520 --> 00:27:24,760 in the future but you know that's uh in 594 00:27:22,640 --> 00:27:27,399 an attempt to make decimal numbers as 595 00:27:24,760 --> 00:27:29,520 easy and as nice to deal with uh uh 596 00:27:27,399 --> 00:27:31,600 integer literals we hid some of the 597 00:27:29,520 --> 00:27:33,559 context it's still available and you can 598 00:27:31,600 --> 00:27:36,760 still get it but it's not as nice as it 599 00:27:33,559 --> 00:27:38,440 could be it I I I don't know if you 600 00:27:36,760 --> 00:27:43,799 agree with that or not 601 00:27:38,440 --> 00:27:46,360 but yes yes and and fortunately I don't 602 00:27:43,799 --> 00:27:50,159 have to make that decision think we got 603 00:27:46,360 --> 00:27:50,159 one right at the back oh 604 00:27:52,720 --> 00:27:57,080 yep I'm glad that the video operator 605 00:27:55,200 --> 00:27:58,480 didn't invent a cute way of 606 00:27:57,080 --> 00:28:00,399 communicating to me with the video 607 00:27:58,480 --> 00:28:02,360 recorder I don't have a mic they didn't 608 00:28:00,399 --> 00:28:04,240 give me one they don't trust me with it 609 00:28:02,360 --> 00:28:06,519 uh I wrote my my question down because I 610 00:28:04,240 --> 00:28:10,120 forgot it immediately uh I know you told 611 00:28:06,519 --> 00:28:13,039 us to disregard the uh rename of rer sim 612 00:28:10,120 --> 00:28:17,320 links to follow links yes is that rename 613 00:28:13,039 --> 00:28:19,120 partially so that it is easier to um 614 00:28:17,320 --> 00:28:21,200 introduce that number limit or is it 615 00:28:19,120 --> 00:28:23,600 also just to make it clearer that it is 616 00:28:21,200 --> 00:28:27,600 stopping any any Sim links rather than 617 00:28:23,600 --> 00:28:30,320 like yeah yeah yeah so it's it's very 618 00:28:27,600 --> 00:28:33,960 possible that we would need to think 619 00:28:30,320 --> 00:28:36,519 well we would need to think about the uh 620 00:28:33,960 --> 00:28:38,159 naming of these flags if we change the 621 00:28:36,519 --> 00:28:40,880 location of the flags we need to think 622 00:28:38,159 --> 00:28:44,880 very carefully about the naming of them 623 00:28:40,880 --> 00:28:47,960 uh so it is entirely possible that 624 00:28:44,880 --> 00:28:51,799 without me thinking of a explicit case 625 00:28:47,960 --> 00:28:53,480 of it that we might have two sink flags 626 00:28:51,799 --> 00:28:55,240 that mean slightly different things for 627 00:28:53,480 --> 00:28:59,000 different operators that's entirely 628 00:28:55,240 --> 00:29:00,960 possible um and that option is in the 629 00:28:59,000 --> 00:29:03,039 back of my brain I can't think of the 630 00:29:00,960 --> 00:29:06,600 case but it's entirely it's entirely 631 00:29:03,039 --> 00:29:06,600 reasonable and possible that that will 632 00:29:07,279 --> 00:29:12,720 happen hi you mentioned a few potential 633 00:29:10,200 --> 00:29:15,200 future options on paths like Junctions 634 00:29:12,720 --> 00:29:16,919 and windows en codings is that something 635 00:29:15,200 --> 00:29:18,559 you start off the conversation with with 636 00:29:16,919 --> 00:29:20,240 the code owner of hey I've got a bunch 637 00:29:18,559 --> 00:29:21,760 of ideas and this is a prerequisite or 638 00:29:20,240 --> 00:29:25,000 do you just take it like one step at a 639 00:29:21,760 --> 00:29:29,440 time and see how far you get um I I 640 00:29:25,000 --> 00:29:31,519 would I would I would give B probably 641 00:29:29,440 --> 00:29:33,679 like this talk video basically so I'd 642 00:29:31,519 --> 00:29:34,840 give him the code and and the talk and 643 00:29:33,679 --> 00:29:36,679 and I'd sort of suggest you know these 644 00:29:34,840 --> 00:29:41,880 are all things that it might improve 645 00:29:36,679 --> 00:29:43,720 things um and you know uh bnie will have 646 00:29:41,880 --> 00:29:48,600 a much better idea of what the right way 647 00:29:43,720 --> 00:29:52,640 to go is for these things um you know I 648 00:29:48,600 --> 00:29:54,240 like none of this stuff is 649 00:29:52,640 --> 00:29:56,640 really 650 00:29:54,240 --> 00:29:58,360 wow all of these things are possible 651 00:29:56,640 --> 00:30:00,320 with python now it's just just that you 652 00:29:58,360 --> 00:30:03,399 got to do explicit code handling in your 653 00:30:00,320 --> 00:30:05,799 paths and around your path handling um 654 00:30:03,399 --> 00:30:07,600 and I think python could be nicer if 655 00:30:05,799 --> 00:30:09,480 some of that stuff was automated using 656 00:30:07,600 --> 00:30:12,840 the 657 00:30:09,480 --> 00:30:16,519 contexts thank you very much Clinton um 658 00:30:12,840 --> 00:30:20,519 I present to you the 659 00:30:16,519 --> 00:30:20,519 mug thank