1 00:00:00,480 --> 00:00:03,480 foreign 2 00:00:09,620 --> 00:00:15,240 ER Williams who's going to introduce 3 00:00:12,300 --> 00:00:17,160 fast API so Atlanta's been a fixture of 4 00:00:15,240 --> 00:00:19,500 their python community and in Canberra 5 00:00:17,160 --> 00:00:22,439 organizing their Canberra python meetup 6 00:00:19,500 --> 00:00:24,060 group for a long time then she was in 7 00:00:22,439 --> 00:00:26,279 Perth and Sydney and now back back in 8 00:00:24,060 --> 00:00:28,320 Canberra and uh the Canberra python you 9 00:00:26,279 --> 00:00:31,260 know group's going very strong with over 10 00:00:28,320 --> 00:00:33,180 a thousand members now so uh 11 00:00:31,260 --> 00:00:36,260 um yeah please uh give a round of 12 00:00:33,180 --> 00:00:36,260 applause to Elena 13 00:00:39,020 --> 00:00:42,719 yeah indeed we're quite proud of our 14 00:00:41,280 --> 00:00:45,480 Canberra python news group but also 15 00:00:42,719 --> 00:00:47,040 Perth user group as well with Russ try 16 00:00:45,480 --> 00:00:49,680 that okay so 17 00:00:47,040 --> 00:00:51,600 um this is a fast API talk uh thank you 18 00:00:49,680 --> 00:00:53,219 so much for coming it's a very tough 19 00:00:51,600 --> 00:00:55,320 session to choose so I'm grateful for 20 00:00:53,219 --> 00:00:55,980 everybody who's here 21 00:00:55,320 --> 00:00:58,920 um 22 00:00:55,980 --> 00:01:01,920 as Ed said my name is Elena Williams uh 23 00:00:58,920 --> 00:01:03,840 this talk is entirely in GitHub exactly 24 00:01:01,920 --> 00:01:05,820 as it is 25 00:01:03,840 --> 00:01:07,979 um anyone who's seen my talks before 26 00:01:05,820 --> 00:01:11,040 will know that I have too much content 27 00:01:07,979 --> 00:01:13,260 so let's go 28 00:01:11,040 --> 00:01:14,939 um what we're doing here today is we're 29 00:01:13,260 --> 00:01:17,640 just going to touch upon a small number 30 00:01:14,939 --> 00:01:19,680 of Technologies and describe where they 31 00:01:17,640 --> 00:01:21,420 the fundamentals of where they sort of 32 00:01:19,680 --> 00:01:23,759 come from so I'm kind of assuming you 33 00:01:21,420 --> 00:01:25,259 you can Python program already and you 34 00:01:23,759 --> 00:01:26,939 have an interest in this stuff but you 35 00:01:25,259 --> 00:01:28,439 don't do it already 36 00:01:26,939 --> 00:01:30,060 uh what we're not going to be talking 37 00:01:28,439 --> 00:01:32,820 about is we're not going to be talking 38 00:01:30,060 --> 00:01:35,759 about full web applications because apis 39 00:01:32,820 --> 00:01:38,280 are intended to sort of float above your 40 00:01:35,759 --> 00:01:40,680 data layer before your front end 41 00:01:38,280 --> 00:01:43,380 um and you know data layers in the old 42 00:01:40,680 --> 00:01:44,820 days were idbs full stop now they could 43 00:01:43,380 --> 00:01:46,380 be anything they could be a python list 44 00:01:44,820 --> 00:01:49,200 so they could be a file sitting on a 45 00:01:46,380 --> 00:01:52,259 computer they could be something a 46 00:01:49,200 --> 00:01:54,180 cluster of something extremely exotic uh 47 00:01:52,259 --> 00:01:55,740 so I'm not going to talk about data lays 48 00:01:54,180 --> 00:01:58,140 in any kind of detail but I will be 49 00:01:55,740 --> 00:01:59,040 talking about gnaf we're not also not 50 00:01:58,140 --> 00:02:01,979 going to be talking about deployment 51 00:01:59,040 --> 00:02:04,020 because fast API basically deploys on 52 00:02:01,979 --> 00:02:05,180 serverless and you can pick your own 53 00:02:04,020 --> 00:02:07,979 vendor 54 00:02:05,180 --> 00:02:10,979 uh very good another thing important to 55 00:02:07,979 --> 00:02:13,140 note I am not from geoscience Australia 56 00:02:10,979 --> 00:02:14,520 they are a different organization they 57 00:02:13,140 --> 00:02:16,080 are just down the road some of the 58 00:02:14,520 --> 00:02:18,500 people I care about the very most in the 59 00:02:16,080 --> 00:02:24,000 world work there or have worked there 60 00:02:18,500 --> 00:02:27,720 and they do like rocks rocks and stuff 61 00:02:24,000 --> 00:02:30,120 um whereas geoscape work we do a dresses 62 00:02:27,720 --> 00:02:32,520 where addresses are a name for a fizzy 63 00:02:30,120 --> 00:02:36,239 is a name for a physical location like a 64 00:02:32,520 --> 00:02:40,980 house or an office or a um a mailbox or 65 00:02:36,239 --> 00:02:44,580 a shop or a store or an antenna or an 66 00:02:40,980 --> 00:02:48,080 ATM or a oh what was the next one it was 67 00:02:44,580 --> 00:02:51,120 a barbecue block boat shed um this here 68 00:02:48,080 --> 00:02:52,739 is actually a file out of Gina this is 69 00:02:51,120 --> 00:02:54,000 called an authority file 70 00:02:52,739 --> 00:02:55,200 um actually I thought this was going to 71 00:02:54,000 --> 00:02:56,580 be slightly Square so I'm going to pull 72 00:02:55,200 --> 00:03:00,720 this in a little bit 73 00:02:56,580 --> 00:03:02,760 um and uh this is a list of every single 74 00:03:00,720 --> 00:03:05,519 type of address that has been supplied 75 00:03:02,760 --> 00:03:07,319 to Australia for legit has been used or 76 00:03:05,519 --> 00:03:09,420 we'll be using really our favorites are 77 00:03:07,319 --> 00:03:12,120 Marine birth and mazonet because 78 00:03:09,420 --> 00:03:13,140 everyone's like what's a mazonet nobody 79 00:03:12,120 --> 00:03:15,180 knows 80 00:03:13,140 --> 00:03:17,519 um so where do these addresses get 81 00:03:15,180 --> 00:03:20,099 minted they are produced by local 82 00:03:17,519 --> 00:03:21,599 government agencies or councils or land 83 00:03:20,099 --> 00:03:23,340 planning authorities 84 00:03:21,599 --> 00:03:26,099 um that's the simple answer there are 85 00:03:23,340 --> 00:03:28,560 more than 500 of those uh but they also 86 00:03:26,099 --> 00:03:31,260 get fed up to the states who do their 87 00:03:28,560 --> 00:03:34,140 own processes on them and then there are 88 00:03:31,260 --> 00:03:36,480 a couple of public sector departments 89 00:03:34,140 --> 00:03:38,459 who maintain their own independent 90 00:03:36,480 --> 00:03:41,400 address lists for their own special 91 00:03:38,459 --> 00:03:43,379 purposes and to clarify there are no 92 00:03:41,400 --> 00:03:45,420 rules about what an address should be 93 00:03:43,379 --> 00:03:47,099 there's no regulatory body to make sure 94 00:03:45,420 --> 00:03:50,840 addresses comply with some standard 95 00:03:47,099 --> 00:03:50,840 there are guidelines 96 00:03:51,360 --> 00:03:56,459 um so 97 00:03:53,700 --> 00:04:00,780 there is no single a single address list 98 00:03:56,459 --> 00:04:03,900 until the 19 now preparing for the 1992 99 00:04:00,780 --> 00:04:05,640 census and um I was not going to include 100 00:04:03,900 --> 00:04:08,519 the next slide but 101 00:04:05,640 --> 00:04:10,319 um I on the flight over the 102 00:04:08,519 --> 00:04:12,780 acknowledgment of country was so 103 00:04:10,319 --> 00:04:14,640 lackluster that I was like you know what 104 00:04:12,780 --> 00:04:18,000 I'm going to put that slide in 105 00:04:14,640 --> 00:04:19,320 um because this is a picture of the 1921 106 00:04:18,000 --> 00:04:21,060 census from the National Library of 107 00:04:19,320 --> 00:04:21,900 Australia this is all complete aside by 108 00:04:21,060 --> 00:04:26,160 the way 109 00:04:21,900 --> 00:04:29,759 um firstly apologies to Tasmania uh 110 00:04:26,160 --> 00:04:32,520 it's on a serious note I think all of us 111 00:04:29,759 --> 00:04:35,100 here uh know what it feels like or most 112 00:04:32,520 --> 00:04:37,620 of us majorities to be treated as if you 113 00:04:35,100 --> 00:04:39,900 don't exist this is an artifact from 114 00:04:37,620 --> 00:04:42,240 history of government level treatment 115 00:04:39,900 --> 00:04:44,220 like you do not exist 116 00:04:42,240 --> 00:04:46,199 um so on that I would like to give a 117 00:04:44,220 --> 00:04:48,000 shout out and respect to all of our 118 00:04:46,199 --> 00:04:51,600 first Nations brothers and sisters and 119 00:04:48,000 --> 00:04:53,460 Elders who are here with us now respect 120 00:04:51,600 --> 00:04:55,080 um but anyway enough that garbage 121 00:04:53,460 --> 00:04:57,360 politics behind us we're organizing a 122 00:04:55,080 --> 00:04:59,280 census for 1996. 123 00:04:57,360 --> 00:05:01,919 um and nobody had a single list of 124 00:04:59,280 --> 00:05:03,720 addresses because we want uh uh single 125 00:05:01,919 --> 00:05:05,880 list of addresses so the states believe 126 00:05:03,720 --> 00:05:08,400 it or not came together and formed a 127 00:05:05,880 --> 00:05:10,680 company one share each to each estate in 128 00:05:08,400 --> 00:05:13,020 the Commonwealth and it's a not a 129 00:05:10,680 --> 00:05:16,259 multinational entity a private company 130 00:05:13,020 --> 00:05:17,820 not the government not the federal go 131 00:05:16,259 --> 00:05:19,919 owned by the government but not the 132 00:05:17,820 --> 00:05:22,500 federal government the states and I I 133 00:05:19,919 --> 00:05:25,680 actually think that's pretty cool 134 00:05:22,500 --> 00:05:27,840 and we make a single jury-coded National 135 00:05:25,680 --> 00:05:29,520 address file um because when you get all 136 00:05:27,840 --> 00:05:31,440 of the sources that create addresses 137 00:05:29,520 --> 00:05:33,060 they only agree on about two-thirds of 138 00:05:31,440 --> 00:05:34,860 them and then you know there's like some 139 00:05:33,060 --> 00:05:36,960 three to ten percent of them that are 140 00:05:34,860 --> 00:05:39,120 just like could be anything 141 00:05:36,960 --> 00:05:40,620 um but in the decades since I've been 142 00:05:39,120 --> 00:05:41,880 putting this together there's um they've 143 00:05:40,620 --> 00:05:43,620 developed a lot of sophisticated 144 00:05:41,880 --> 00:05:46,259 strategies for building up data layers 145 00:05:43,620 --> 00:05:47,880 and you know providing services to you 146 00:05:46,259 --> 00:05:49,680 know like 147 00:05:47,880 --> 00:05:52,740 heaps of stuff like the emergency 148 00:05:49,680 --> 00:05:54,780 services and um you know lateral 149 00:05:52,740 --> 00:05:56,100 committee Council whatever commission 150 00:05:54,780 --> 00:05:57,720 that's the word 151 00:05:56,100 --> 00:05:59,580 um and sourcing National critical 152 00:05:57,720 --> 00:06:01,259 infrastructure and it's apparently worth 153 00:05:59,580 --> 00:06:04,860 like millions of dollars at the economy 154 00:06:01,259 --> 00:06:06,780 because it's free from data.gov 155 00:06:04,860 --> 00:06:09,360 um and it's apparently the most 156 00:06:06,780 --> 00:06:12,720 downloaded data source from data.gov.gov 157 00:06:09,360 --> 00:06:14,520 dot a u and in my uh abstract I refer to 158 00:06:12,720 --> 00:06:16,139 GF as a monster not because it's 159 00:06:14,520 --> 00:06:18,900 particularly big it's only 15 million 160 00:06:16,139 --> 00:06:20,580 records or so but because it is 203 161 00:06:18,900 --> 00:06:22,139 files and they all have to fit together 162 00:06:20,580 --> 00:06:24,120 just so 163 00:06:22,139 --> 00:06:26,100 um but don't ask me there's a talk by 164 00:06:24,120 --> 00:06:28,740 Alex Lee at this very conference was 2 165 00:06:26,100 --> 00:06:31,319 p.m now it's 11 A.M tomorrow where he 166 00:06:28,740 --> 00:06:33,840 apparently took apart Jane f 167 00:06:31,319 --> 00:06:35,280 um so he probably knows better than I do 168 00:06:33,840 --> 00:06:37,979 um but there is a flattened version that 169 00:06:35,280 --> 00:06:39,240 came out last year and uh but it's a 170 00:06:37,979 --> 00:06:40,919 trade-off because you missed out on that 171 00:06:39,240 --> 00:06:43,380 lovely Authority file like I showed at 172 00:06:40,919 --> 00:06:45,419 the beginning enough of that we're here 173 00:06:43,380 --> 00:06:48,180 to talk about code no matter a matter of 174 00:06:45,419 --> 00:06:51,960 fact we're here to talk about fast API 175 00:06:48,180 --> 00:06:53,460 I mean sorry first API 176 00:06:51,960 --> 00:06:55,139 I mean 177 00:06:53,460 --> 00:06:57,180 fast API 178 00:06:55,139 --> 00:07:00,960 um and you know with all of the respect 179 00:06:57,180 --> 00:07:03,240 in the world to Tom and Marcello and 180 00:07:00,960 --> 00:07:04,080 Armin and David for all of the work that 181 00:07:03,240 --> 00:07:07,020 they've done to put this Library 182 00:07:04,080 --> 00:07:08,880 together as well as Sebastian Ramirez of 183 00:07:07,020 --> 00:07:10,139 course she's done the launcher of the 184 00:07:08,880 --> 00:07:12,360 work here 185 00:07:10,139 --> 00:07:15,900 um so this is a 186 00:07:12,360 --> 00:07:17,400 how quickly fast API has become a 187 00:07:15,900 --> 00:07:20,580 competitor against the major python 188 00:07:17,400 --> 00:07:24,419 Frameworks and we are going to look at 189 00:07:20,580 --> 00:07:26,580 some fast API example code the 101 code 190 00:07:24,419 --> 00:07:30,240 saw it here in this very place yesterday 191 00:07:26,580 --> 00:07:34,319 so fast API sorry 192 00:07:30,240 --> 00:07:35,520 fast API I I have one joke 193 00:07:34,319 --> 00:07:37,680 um 194 00:07:35,520 --> 00:07:40,020 uh but I'm going to drill down into more 195 00:07:37,680 --> 00:07:41,280 into the differences here so I don't 196 00:07:40,020 --> 00:07:44,280 know if you can see the flask influence 197 00:07:41,280 --> 00:07:46,319 uh but there are differences first 198 00:07:44,280 --> 00:07:47,220 you've got this get here rather than 199 00:07:46,319 --> 00:07:49,680 route 200 00:07:47,220 --> 00:07:51,599 um and that's a HTTP verb you're allowed 201 00:07:49,680 --> 00:07:54,419 all of the ones that are available 202 00:07:51,599 --> 00:07:56,340 um makes sense for apis secondly that 203 00:07:54,419 --> 00:07:58,319 word async 204 00:07:56,340 --> 00:07:59,940 we're going to come back to that 205 00:07:58,319 --> 00:08:02,039 um finally we're returning a 206 00:07:59,940 --> 00:08:03,199 serializable rather than a string of 207 00:08:02,039 --> 00:08:06,479 marker 208 00:08:03,199 --> 00:08:08,280 because apis produced serializables 209 00:08:06,479 --> 00:08:11,819 which went Json or XML or whatever it 210 00:08:08,280 --> 00:08:14,460 might be but fast API in truth rests 211 00:08:11,819 --> 00:08:16,639 upon pedantic who's kind of main core 212 00:08:14,460 --> 00:08:18,900 mission is to produce validated 213 00:08:16,639 --> 00:08:22,379 serializables so really these things 214 00:08:18,900 --> 00:08:25,319 we're going to talk about async pedantic 215 00:08:22,379 --> 00:08:28,319 very good we're going to do a very quick 216 00:08:25,319 --> 00:08:30,539 tight lightweight example of a fast API 217 00:08:28,319 --> 00:08:32,580 app what I think is a pretty sweet 218 00:08:30,539 --> 00:08:34,680 example oh no so before that we're going 219 00:08:32,580 --> 00:08:37,440 to install it you only need fast API and 220 00:08:34,680 --> 00:08:40,080 uvicon which Noah was here saying is a 221 00:08:37,440 --> 00:08:43,080 pretty Rock and good web server you just 222 00:08:40,080 --> 00:08:44,820 run this and you can run it like that I 223 00:08:43,080 --> 00:08:47,339 have it running here this whole talk is 224 00:08:44,820 --> 00:08:48,660 running out of fast API using flask 225 00:08:47,339 --> 00:08:49,980 static Server Like This is actually 226 00:08:48,660 --> 00:08:52,080 JavaScript but it's it's running from 227 00:08:49,980 --> 00:08:54,180 Fast API to why that's there 228 00:08:52,080 --> 00:08:57,000 um this is running live too your nice 229 00:08:54,180 --> 00:08:59,519 lovely Swagger docs from flask 230 00:08:57,000 --> 00:09:01,560 now we're going to do the example 231 00:08:59,519 --> 00:09:04,140 um so I think this is a really great 232 00:09:01,560 --> 00:09:07,440 example of a really tidy little API 233 00:09:04,140 --> 00:09:09,480 delivery so in this box here whatever I 234 00:09:07,440 --> 00:09:11,519 type into here is going into my search 235 00:09:09,480 --> 00:09:13,800 string here and it's going to filter 236 00:09:11,519 --> 00:09:15,600 this list of wordy words here so if I 237 00:09:13,800 --> 00:09:16,800 type a big seed and you can see it's 238 00:09:15,600 --> 00:09:18,300 running live here and that's the point 239 00:09:16,800 --> 00:09:20,820 I've got here so if I can type whatever 240 00:09:18,300 --> 00:09:23,940 I want and it will filter out that list 241 00:09:20,820 --> 00:09:25,980 or not whatever okay you get it that's a 242 00:09:23,940 --> 00:09:28,260 really quick fast API 243 00:09:25,980 --> 00:09:29,220 very case scenario for use case for 244 00:09:28,260 --> 00:09:30,899 Australian 245 00:09:29,220 --> 00:09:32,160 um this is like an address flavored one 246 00:09:30,899 --> 00:09:35,459 and this is a shout out to my friend 247 00:09:32,160 --> 00:09:36,839 Rachel who gave who gave it to look um 248 00:09:35,459 --> 00:09:38,220 the other a few years ago about 249 00:09:36,839 --> 00:09:39,899 addresses which I strongly recommend 250 00:09:38,220 --> 00:09:41,880 seeing this is the real life version 251 00:09:39,899 --> 00:09:44,220 that we use that's plugged into gnaf and 252 00:09:41,880 --> 00:09:46,860 the internet seems to be oh it works but 253 00:09:44,220 --> 00:09:49,140 we'll give an example here though sadly 254 00:09:46,860 --> 00:09:52,500 the challenge with delivering gnaf in 255 00:09:49,140 --> 00:09:54,180 this manner is not the type head it's 256 00:09:52,500 --> 00:09:56,220 parsing the address string very 257 00:09:54,180 --> 00:09:58,980 interesting problem then connecting that 258 00:09:56,220 --> 00:10:01,740 past address string to searching on our 259 00:09:58,980 --> 00:10:04,680 data source and then we also keep this 260 00:10:01,740 --> 00:10:05,940 data fresh every day uh which these are 261 00:10:04,680 --> 00:10:08,100 all things that we 262 00:10:05,940 --> 00:10:09,480 a extremely interesting problems that 263 00:10:08,100 --> 00:10:12,720 I'd love to talk to anyone about later 264 00:10:09,480 --> 00:10:14,880 if you're interested Okay so 265 00:10:12,720 --> 00:10:17,580 that is a really quick example of fast 266 00:10:14,880 --> 00:10:19,680 API let's talk about 267 00:10:17,580 --> 00:10:21,000 um async but 268 00:10:19,680 --> 00:10:22,800 um truth is I'm not going to erasing 269 00:10:21,000 --> 00:10:25,380 heaps of people are um this is Zach 270 00:10:22,800 --> 00:10:27,959 Hatfield Dodd's talking about async at 271 00:10:25,380 --> 00:10:30,060 this very Year's pycon us 272 00:10:27,959 --> 00:10:32,459 um former Canberra python organizer and 273 00:10:30,060 --> 00:10:34,920 we miss him dearly 274 00:10:32,459 --> 00:10:36,959 um shout out to everybody else involved 275 00:10:34,920 --> 00:10:38,339 too but there's one quick tldr which I 276 00:10:36,959 --> 00:10:39,899 will give you to async if you like me 277 00:10:38,339 --> 00:10:42,600 you walk up to AC and go I have a degree 278 00:10:39,899 --> 00:10:45,300 on how async Works um if you want to run 279 00:10:42,600 --> 00:10:47,579 async and python um The Interpreter 280 00:10:45,300 --> 00:10:49,680 needs to know at runtime that you're 281 00:10:47,579 --> 00:10:52,440 running an awaitable you do this by 282 00:10:49,680 --> 00:10:54,480 using this async await syntax if I want 283 00:10:52,440 --> 00:10:56,640 this get data function to be 284 00:10:54,480 --> 00:10:59,519 asynchronous it's going to go off and go 285 00:10:56,640 --> 00:11:02,339 fetch my data from wherever it needs to 286 00:10:59,519 --> 00:11:04,560 be called using this await you have to 287 00:11:02,339 --> 00:11:07,200 have the async and a weight pair and 288 00:11:04,560 --> 00:11:08,700 that await has to be called by an async 289 00:11:07,200 --> 00:11:12,720 function that's been called by an await 290 00:11:08,700 --> 00:11:15,060 all the way up and down the stack and 291 00:11:12,720 --> 00:11:16,140 if you forget to put in async or await 292 00:11:15,060 --> 00:11:19,079 you'll start to get really wacky 293 00:11:16,140 --> 00:11:20,339 exception exceptions like so if the word 294 00:11:19,079 --> 00:11:21,720 co-routine is popping up in your 295 00:11:20,339 --> 00:11:22,860 exceptions just double check you've 296 00:11:21,720 --> 00:11:24,079 gotten all your racing Center weights 297 00:11:22,860 --> 00:11:27,720 it's a really easy thing to forget 298 00:11:24,079 --> 00:11:28,740 that's all I have to say about async so 299 00:11:27,720 --> 00:11:32,760 the other thing I was going to talk 300 00:11:28,740 --> 00:11:34,620 about is pedantic so hands up if you 301 00:11:32,760 --> 00:11:37,019 have heard of pedantic please because I 302 00:11:34,620 --> 00:11:40,140 want to know oh wow I know keep your 303 00:11:37,019 --> 00:11:43,200 hand up if you've heard of pedantic V2 304 00:11:40,140 --> 00:11:46,079 hands up if you've installed pedantic V2 305 00:11:43,200 --> 00:11:47,760 oh my heart goes down to people okay so 306 00:11:46,079 --> 00:11:49,620 I'll say um when this talk is proposed 307 00:11:47,760 --> 00:11:51,240 Pi negative 2 wasn't released I propose 308 00:11:49,620 --> 00:11:52,740 this talk based on the experiences that 309 00:11:51,240 --> 00:11:53,940 we'd had with pedantic V1 because it was 310 00:11:52,740 --> 00:11:56,279 a lot of fun 311 00:11:53,940 --> 00:11:58,440 um they have fixed everything or pretty 312 00:11:56,279 --> 00:12:00,899 much everything that I had to say about 313 00:11:58,440 --> 00:12:02,760 pedantic V1 so that's not a relic of 314 00:12:00,899 --> 00:12:03,959 history and so I got back five minutes 315 00:12:02,760 --> 00:12:05,519 of my talk that I'm going to fill with 316 00:12:03,959 --> 00:12:07,519 pictures instead 317 00:12:05,519 --> 00:12:07,519 um 318 00:12:07,820 --> 00:12:11,040 because I'm not going to talk about 319 00:12:09,540 --> 00:12:13,200 pedantic right now in fact I am going to 320 00:12:11,040 --> 00:12:15,720 talk about typing in Python in general 321 00:12:13,200 --> 00:12:17,279 because as we all know python is weekly 322 00:12:15,720 --> 00:12:18,779 type what was the one yesterday it was 323 00:12:17,279 --> 00:12:21,180 gradually typed 324 00:12:18,779 --> 00:12:23,399 um and people who feel strongly like 325 00:12:21,180 --> 00:12:26,040 that about that are like a little bit 326 00:12:23,399 --> 00:12:29,459 extreme either for or against it and I 327 00:12:26,040 --> 00:12:31,680 would argue that our beloved babyfl this 328 00:12:29,459 --> 00:12:33,240 is my personal unsubstantiated Theory 329 00:12:31,680 --> 00:12:35,160 um he stepped back from that role 330 00:12:33,240 --> 00:12:38,160 because of the heat that he got about 331 00:12:35,160 --> 00:12:39,480 his very gentle attempts to introduce 332 00:12:38,160 --> 00:12:41,160 typing 333 00:12:39,480 --> 00:12:43,740 um because as we know everything in 334 00:12:41,160 --> 00:12:45,000 Python is a object all the way up and 335 00:12:43,740 --> 00:12:46,079 down you can do whatever you like to it 336 00:12:45,000 --> 00:12:48,480 you try and do something to it and it 337 00:12:46,079 --> 00:12:50,940 will just give it a red hot go there is 338 00:12:48,480 --> 00:12:52,500 a time and a place when you don't want 339 00:12:50,940 --> 00:12:53,760 to do that and there are a lot of 340 00:12:52,500 --> 00:12:55,500 different ways to shout out to Alec 341 00:12:53,760 --> 00:12:58,680 Thomas if you're in the house like he's 342 00:12:55,500 --> 00:13:01,800 a local actress team are too 343 00:12:58,680 --> 00:13:03,959 um but the current hotness in 2023 is 344 00:13:01,800 --> 00:13:06,300 pyrantic um so thank you to Samuel 345 00:13:03,959 --> 00:13:07,620 Colvin and the whole team there uh they 346 00:13:06,300 --> 00:13:09,120 got several million dollars in VC 347 00:13:07,620 --> 00:13:11,639 funding at the release of python 348 00:13:09,120 --> 00:13:14,579 pedantic V2 which was a complete rewrite 349 00:13:11,639 --> 00:13:16,740 up from the ground up in Rust though the 350 00:13:14,579 --> 00:13:19,440 API is still exactly the same so let's 351 00:13:16,740 --> 00:13:21,000 look at some pedantic code so 352 00:13:19,440 --> 00:13:24,060 pedantic 353 00:13:21,000 --> 00:13:25,980 jokes pedantic um nobody thinks that's 354 00:13:24,060 --> 00:13:27,959 funny for me but everyone 355 00:13:25,980 --> 00:13:29,579 um so this is your standard pedantic 356 00:13:27,959 --> 00:13:31,579 base model I think it's pretty obvious 357 00:13:29,579 --> 00:13:33,899 what's going on here we have annotating 358 00:13:31,579 --> 00:13:37,800 some types 359 00:13:33,899 --> 00:13:39,680 we can stack our annotations we can have 360 00:13:37,800 --> 00:13:43,139 custom annotations 361 00:13:39,680 --> 00:13:45,600 uh and I think as would be expected if 362 00:13:43,139 --> 00:13:48,839 you have a dictionary here full of stuff 363 00:13:45,600 --> 00:13:50,940 that matches annotations and in the old 364 00:13:48,839 --> 00:13:52,920 days we used to just have an orm and we 365 00:13:50,940 --> 00:13:54,060 would never see anything like this but 366 00:13:52,920 --> 00:13:56,519 nowadays because you're kind of getting 367 00:13:54,060 --> 00:13:58,019 your data back from whatever generally 368 00:13:56,519 --> 00:14:00,959 you're going to get it back as a key 369 00:13:58,019 --> 00:14:03,420 pair sort of deal which fits well into a 370 00:14:00,959 --> 00:14:06,060 dictionary which we then use the keyword 371 00:14:03,420 --> 00:14:08,160 argument syntax to put into our pedantic 372 00:14:06,060 --> 00:14:10,920 object and thus a pedantic instance 373 00:14:08,160 --> 00:14:13,079 comes out as would be expected 374 00:14:10,920 --> 00:14:15,720 if we do something like this in pedantic 375 00:14:13,079 --> 00:14:17,519 if you do that in a normal python object 376 00:14:15,720 --> 00:14:20,639 it would just make your instance and 377 00:14:17,519 --> 00:14:23,579 everything would be fine as your tuition 378 00:14:20,639 --> 00:14:25,800 probably suggests it does not like it 379 00:14:23,579 --> 00:14:27,480 um it will say like you try to put in a 380 00:14:25,800 --> 00:14:29,820 string I wanted an integer why would you 381 00:14:27,480 --> 00:14:31,680 do that uh also there's this concept 382 00:14:29,820 --> 00:14:33,060 called literal in Django we'd call these 383 00:14:31,680 --> 00:14:35,040 choices 384 00:14:33,060 --> 00:14:38,160 um I think this is like a perfect 385 00:14:35,040 --> 00:14:39,540 example like in no case when we're 386 00:14:38,160 --> 00:14:41,519 putting together a dress do we want 387 00:14:39,540 --> 00:14:43,820 something in Australia that is not on 388 00:14:41,519 --> 00:14:47,100 that list of nine things ever 389 00:14:43,820 --> 00:14:48,480 further that literal is not a list it is 390 00:14:47,100 --> 00:14:50,940 a literal and everything inside that 391 00:14:48,480 --> 00:14:53,339 literal they are not strings they are 392 00:14:50,940 --> 00:14:54,899 enums so beware of that don't treat them 393 00:14:53,339 --> 00:14:56,160 like they're it's a list because you 394 00:14:54,899 --> 00:14:59,339 can't 395 00:14:56,160 --> 00:15:00,959 um so as intuition would suggest if you 396 00:14:59,339 --> 00:15:03,540 put something in there that's not good 397 00:15:00,959 --> 00:15:05,820 it will tell you it doesn't like it it 398 00:15:03,540 --> 00:15:08,040 should be one of those great 399 00:15:05,820 --> 00:15:09,540 uh other things you can do is there's 400 00:15:08,040 --> 00:15:10,860 this concept of field which should be 401 00:15:09,540 --> 00:15:13,800 very familiar to everyone who's smooth 402 00:15:10,860 --> 00:15:17,760 orms it's an analogous sort of concept 403 00:15:13,800 --> 00:15:21,180 you can do validation uh you can do set 404 00:15:17,760 --> 00:15:23,820 defaults you can set fancy defaults 405 00:15:21,180 --> 00:15:26,279 um you can do all kinds of stuff also 406 00:15:23,820 --> 00:15:28,320 worth noting is pedantic inheritance can 407 00:15:26,279 --> 00:15:29,760 be a bit strange like async it's got to 408 00:15:28,320 --> 00:15:31,740 be pedantic all the way up and down the 409 00:15:29,760 --> 00:15:33,360 stack so it's got something to validate 410 00:15:31,740 --> 00:15:34,019 against 411 00:15:33,360 --> 00:15:36,899 um 412 00:15:34,019 --> 00:15:40,380 and it also does not oh you can use 413 00:15:36,899 --> 00:15:43,079 abstract base classes but your attribute 414 00:15:40,380 --> 00:15:45,420 uh value inheritance can be a little bit 415 00:15:43,079 --> 00:15:46,980 weird so just don't take for granted 416 00:15:45,420 --> 00:15:49,800 that that's just going to work as you 417 00:15:46,980 --> 00:15:51,540 would expect also my I'm a Django guy 418 00:15:49,800 --> 00:15:52,860 and maybe I just use that property a lot 419 00:15:51,540 --> 00:15:53,940 but I was really mucked around by the 420 00:15:52,860 --> 00:15:56,240 fact that 421 00:15:53,940 --> 00:15:58,860 um it doesn't handle our property like 422 00:15:56,240 --> 00:16:00,240 easily off the bat um but you can use 423 00:15:58,860 --> 00:16:03,540 this thing called computed field and 424 00:16:00,240 --> 00:16:06,420 that figures it out for you so first API 425 00:16:03,540 --> 00:16:08,100 and pedantic just play really well 426 00:16:06,420 --> 00:16:09,120 together and they're implement it in 427 00:16:08,100 --> 00:16:10,800 that way you want to return a 428 00:16:09,120 --> 00:16:13,079 serializable you can Chuck it out as a 429 00:16:10,800 --> 00:16:15,839 dictionary or as a pedantic object and 430 00:16:13,079 --> 00:16:17,459 that will just return your API request 431 00:16:15,839 --> 00:16:23,040 okay 432 00:16:17,459 --> 00:16:25,380 now uh let's change gears entirely and I 433 00:16:23,040 --> 00:16:28,560 want to talk about Geo Json 434 00:16:25,380 --> 00:16:31,260 um so check out that standard oh yeah 435 00:16:28,560 --> 00:16:34,920 and I understand it's an RTF and an ISO 436 00:16:31,260 --> 00:16:37,139 don't at me uh so this is when this is 437 00:16:34,920 --> 00:16:39,959 no longer python this is a Json object 438 00:16:37,139 --> 00:16:43,320 to notation this is a standard geojson 439 00:16:39,959 --> 00:16:45,420 response um it has three things in it by 440 00:16:43,320 --> 00:16:47,519 the standard it has a type which has to 441 00:16:45,420 --> 00:16:48,779 be a string that for string has to be 442 00:16:47,519 --> 00:16:49,740 kind of feature there's another thing 443 00:16:48,779 --> 00:16:51,300 but we'll get to that in a minute but 444 00:16:49,740 --> 00:16:52,920 basically it's feature 445 00:16:51,300 --> 00:16:55,620 um there's a geometry this is a very 446 00:16:52,920 --> 00:16:57,959 tightly defined object it's got two 447 00:16:55,620 --> 00:16:59,880 things in it a type with a string of the 448 00:16:57,959 --> 00:17:00,899 type of geometry you have there are a 449 00:16:59,880 --> 00:17:02,339 bunch of them they're also tightly 450 00:17:00,899 --> 00:17:04,620 defined and you must have a coordinate 451 00:17:02,339 --> 00:17:06,299 that's it geometry type coordinates and 452 00:17:04,620 --> 00:17:09,000 then they're this property attribute 453 00:17:06,299 --> 00:17:10,380 this can contain whatever you like you 454 00:17:09,000 --> 00:17:11,819 can leave it empty you have to provide 455 00:17:10,380 --> 00:17:14,400 it you leave it empty or you can put 456 00:17:11,819 --> 00:17:15,540 anything in it we overload ours very 457 00:17:14,400 --> 00:17:17,640 hard 458 00:17:15,540 --> 00:17:23,220 um trust me you can do a lot with them 459 00:17:17,640 --> 00:17:24,360 um so type geometry properties easy 460 00:17:23,220 --> 00:17:25,740 um if we wanted to model that in 461 00:17:24,360 --> 00:17:27,299 pedantic it might look something like 462 00:17:25,740 --> 00:17:28,559 this so you get your geometry object 463 00:17:27,299 --> 00:17:32,280 with time coordinates you've got your 464 00:17:28,559 --> 00:17:33,900 feature type geometry properties sweet 465 00:17:32,280 --> 00:17:35,820 um the other thing you can provide is a 466 00:17:33,900 --> 00:17:38,340 feature collection 467 00:17:35,820 --> 00:17:40,740 um which as the name suggests is a 468 00:17:38,340 --> 00:17:42,539 collection of features uh where it's a 469 00:17:40,740 --> 00:17:44,340 type geometry properties and that's 470 00:17:42,539 --> 00:17:46,799 basically it's not the whole gear Json 471 00:17:44,340 --> 00:17:48,240 standard but it's like most of it in 472 00:17:46,799 --> 00:17:49,679 about a minute and a half 473 00:17:48,240 --> 00:17:52,440 um so the other thing I want to dive 474 00:17:49,679 --> 00:17:53,580 into is the types of geometries I just 475 00:17:52,440 --> 00:17:55,500 want to spend a minute talking about 476 00:17:53,580 --> 00:17:57,120 these because I think there are some 477 00:17:55,500 --> 00:17:59,880 points of note if you're new to the Geo 478 00:17:57,120 --> 00:18:02,120 field um you do folk please come at me 479 00:17:59,880 --> 00:18:02,120 because 480 00:18:02,660 --> 00:18:08,520 okay first thing Point 481 00:18:05,340 --> 00:18:10,080 um we say in English vernacular lat long 482 00:18:08,520 --> 00:18:11,520 if you think about it light is with 483 00:18:10,080 --> 00:18:13,320 y-axis 484 00:18:11,520 --> 00:18:14,580 um and long is the x-axis 485 00:18:13,320 --> 00:18:16,620 um I thought this would have been more 486 00:18:14,580 --> 00:18:17,760 figured out it's not as figured out as 487 00:18:16,620 --> 00:18:20,039 you would think it should be there's 488 00:18:17,760 --> 00:18:23,039 also the whole degree versus float thing 489 00:18:20,039 --> 00:18:24,960 just we use Cartesian coordinates every 490 00:18:23,039 --> 00:18:29,120 time we're doing something technical but 491 00:18:24,960 --> 00:18:32,280 don't bet your life on it um so Point 492 00:18:29,120 --> 00:18:33,320 array two things light long 493 00:18:32,280 --> 00:18:35,700 um 494 00:18:33,320 --> 00:18:37,559 this is for things like where we are 495 00:18:35,700 --> 00:18:39,660 right now 496 00:18:37,559 --> 00:18:43,440 um and some other nice pointies in 497 00:18:39,660 --> 00:18:46,380 Planet earthy stuff a line string is an 498 00:18:43,440 --> 00:18:47,220 array of points in order to make a 499 00:18:46,380 --> 00:18:49,320 string 500 00:18:47,220 --> 00:18:51,960 we use this to construct roads oh 501 00:18:49,320 --> 00:18:52,820 internet internet no internet 502 00:18:51,960 --> 00:18:55,799 um 503 00:18:52,820 --> 00:18:57,660 my friend Alex Ware who we spoke 504 00:18:55,799 --> 00:18:59,340 yesterday has spent a lot of time doing 505 00:18:57,660 --> 00:19:01,620 Rhodes data her and John Martin who's 506 00:18:59,340 --> 00:19:03,780 also here that like intersecting Road 507 00:19:01,620 --> 00:19:05,100 strings across borders and making sure 508 00:19:03,780 --> 00:19:06,419 they all line up they've been doing a 509 00:19:05,100 --> 00:19:07,080 lot of that lately got no idea how 510 00:19:06,419 --> 00:19:09,059 they're doing it but if you're 511 00:19:07,080 --> 00:19:10,260 interested they could talk your ear off 512 00:19:09,059 --> 00:19:12,720 about it 513 00:19:10,260 --> 00:19:15,120 um uh the other another type is a 514 00:19:12,720 --> 00:19:16,620 polygon which has a an array of points 515 00:19:15,120 --> 00:19:20,580 where the first and last point is the 516 00:19:16,620 --> 00:19:22,679 same like a building footprint uh then 517 00:19:20,580 --> 00:19:25,200 the last one I'm going to share is multi 518 00:19:22,679 --> 00:19:26,580 polygon which is uh everybody's favorite 519 00:19:25,200 --> 00:19:30,419 and why is it everybody's favorite 520 00:19:26,580 --> 00:19:32,220 because it's quadruply nested uh but if 521 00:19:30,419 --> 00:19:34,980 you think about it if you're going to 522 00:19:32,220 --> 00:19:37,620 have an array multiple Donuts it has to 523 00:19:34,980 --> 00:19:40,260 be quadrupally nested uh and we use 524 00:19:37,620 --> 00:19:41,940 these like day in day out to do like 525 00:19:40,260 --> 00:19:43,200 yeah we use multi polygons for basically 526 00:19:41,940 --> 00:19:45,360 everything 527 00:19:43,200 --> 00:19:47,100 um cool so if we wanted to model these 528 00:19:45,360 --> 00:19:49,020 in pedantic 529 00:19:47,100 --> 00:19:51,860 um honestly this is on here because it's 530 00:19:49,020 --> 00:19:51,860 like list list list 531 00:19:52,140 --> 00:19:58,020 someone's interview 532 00:19:54,480 --> 00:20:00,360 um so I really want to say thank you to 533 00:19:58,020 --> 00:20:02,880 Osteo because they produce this Library 534 00:20:00,360 --> 00:20:04,320 called shapely and if you have a valid 535 00:20:02,880 --> 00:20:07,140 set of coordinates 536 00:20:04,320 --> 00:20:09,000 um sorry I did forget to mention that um 537 00:20:07,140 --> 00:20:11,580 there is handedness in Python with 538 00:20:09,000 --> 00:20:12,960 polygons so uh strictly tight geojson 539 00:20:11,580 --> 00:20:14,820 expected to be clockwise you don't 540 00:20:12,960 --> 00:20:17,220 always have to do it but um strictly 541 00:20:14,820 --> 00:20:18,480 validated will kick come come at you if 542 00:20:17,220 --> 00:20:20,700 you don't 543 00:20:18,480 --> 00:20:23,039 um here like shapely just you give it 544 00:20:20,700 --> 00:20:24,539 your geometry and this like it will just 545 00:20:23,039 --> 00:20:26,520 give you an outline if you want to just 546 00:20:24,539 --> 00:20:28,559 calculate do all the math stuff for you 547 00:20:26,520 --> 00:20:30,360 um this is an Eric dot area and it just 548 00:20:28,559 --> 00:20:32,580 you can feed a geometry and it just does 549 00:20:30,360 --> 00:20:34,140 that nasty stuff like makes it go away 550 00:20:32,580 --> 00:20:38,039 which is great 551 00:20:34,140 --> 00:20:39,480 um uh so in summary Geo Jason also 552 00:20:38,039 --> 00:20:41,100 allows 3D 553 00:20:39,480 --> 00:20:43,679 um also allowed to mix and match your 554 00:20:41,100 --> 00:20:45,900 points and mix and match your geometries 555 00:20:43,679 --> 00:20:48,900 in your feature collection so let's do a 556 00:20:45,900 --> 00:20:50,340 geojson query for like here 557 00:20:48,900 --> 00:20:52,740 um so we've got back a bunch of 558 00:20:50,340 --> 00:20:54,000 buildings from gnaf sweet 559 00:20:52,740 --> 00:20:55,260 um there are like there are four but 560 00:20:54,000 --> 00:20:57,539 only two of them had names because of 561 00:20:55,260 --> 00:20:58,980 reasons um so type property geometry 562 00:20:57,539 --> 00:21:01,559 Json 563 00:20:58,980 --> 00:21:04,200 um the query is for here 564 00:21:01,559 --> 00:21:05,640 um I want to believe that at least 565 00:21:04,200 --> 00:21:07,740 someone else in this room is thinking 566 00:21:05,640 --> 00:21:10,980 about this XK CD comic 567 00:21:07,740 --> 00:21:13,100 um where you know this is us here 568 00:21:10,980 --> 00:21:13,100 um 569 00:21:13,440 --> 00:21:16,860 so I just want you to know if you're in 570 00:21:15,480 --> 00:21:18,480 debt you can probably use in Australia 571 00:21:16,860 --> 00:21:22,140 GTA 2020 572 00:21:18,480 --> 00:21:23,760 um though if you absolutely must convert 573 00:21:22,140 --> 00:21:26,220 your datums to other datums which sounds 574 00:21:23,760 --> 00:21:28,080 like a fiendish problem to do Pi Project 575 00:21:26,220 --> 00:21:29,700 is just magic does it so there is a 576 00:21:28,080 --> 00:21:32,460 library in the world imagine it's a bit 577 00:21:29,700 --> 00:21:34,740 of a bit hard to install 578 00:21:32,460 --> 00:21:37,440 um but you want to convert datum's Magic 579 00:21:34,740 --> 00:21:39,179 okay so why do we care 580 00:21:37,440 --> 00:21:41,280 um basically like we're doing a lot of 581 00:21:39,179 --> 00:21:42,659 digital Twins and digital atlases at the 582 00:21:41,280 --> 00:21:44,460 moment um but you can just pick a 583 00:21:42,659 --> 00:21:45,900 library a mapping library off the shelf 584 00:21:44,460 --> 00:21:48,000 just do it 585 00:21:45,900 --> 00:21:50,340 um I picked leaflet I got their 101 586 00:21:48,000 --> 00:21:52,679 example I just copied and pasted in that 587 00:21:50,340 --> 00:21:54,600 gnaf response from before and butter 588 00:21:52,679 --> 00:21:56,580 Bing butter boom and I checked in some C 589 00:21:54,600 --> 00:21:59,760 for data because like like we're really 590 00:21:56,580 --> 00:22:01,740 smart like it's not educational 95 so 591 00:21:59,760 --> 00:22:03,659 it's just ABS since it's not data but I 592 00:22:01,740 --> 00:22:05,460 thought that was funny 593 00:22:03,659 --> 00:22:07,380 um so here's some more data this is like 594 00:22:05,460 --> 00:22:09,020 Regional Buildings we've got going here 595 00:22:07,380 --> 00:22:11,820 and land 596 00:22:09,020 --> 00:22:14,220 Parcels I think um this is a mesh Block 597 00:22:11,820 --> 00:22:16,140 in the suburb of Adelaide 598 00:22:14,220 --> 00:22:18,600 um this is like the electorate of 599 00:22:16,140 --> 00:22:20,940 Adelaide and the suburb and this is like 600 00:22:18,600 --> 00:22:23,580 all of the state of South Australia 601 00:22:20,940 --> 00:22:26,820 you'll notice that is 310 602 00:22:23,580 --> 00:22:29,039 000 points uh we don't rather do some 603 00:22:26,820 --> 00:22:30,780 other cool stuff like mix and match like 604 00:22:29,039 --> 00:22:33,059 um uh pointing roads you can do some 605 00:22:30,780 --> 00:22:35,760 polygons can do some shaded polygons can 606 00:22:33,059 --> 00:22:39,000 do some 3D geometries 607 00:22:35,760 --> 00:22:40,860 um can do some tree height and um those 608 00:22:39,000 --> 00:22:43,020 tree Heights are actually for real 609 00:22:40,860 --> 00:22:45,000 um uh major Australian Telco uses those 610 00:22:43,020 --> 00:22:48,240 trees Heights to met to like calculate 611 00:22:45,000 --> 00:22:49,080 shadows and clutter and stuff 612 00:22:48,240 --> 00:22:51,900 um 613 00:22:49,080 --> 00:22:53,520 oh gosh I do some pools and some solar 614 00:22:51,900 --> 00:22:55,559 panels and I was just trying that off 615 00:22:53,520 --> 00:22:58,380 because I think I think this is a really 616 00:22:55,559 --> 00:22:59,700 great example of making sense of this 617 00:22:58,380 --> 00:23:01,440 statement here 618 00:22:59,700 --> 00:23:03,120 which is that threading is for working 619 00:23:01,440 --> 00:23:04,260 in parallel async is for waiting in 620 00:23:03,120 --> 00:23:05,940 parallel 621 00:23:04,260 --> 00:23:07,799 so I got a bunch of async functions 622 00:23:05,940 --> 00:23:09,480 pitching off to get my data of all kinds 623 00:23:07,799 --> 00:23:11,820 of stuff so that started electrics one 624 00:23:09,480 --> 00:23:13,140 that was 310 that's very big we're 625 00:23:11,820 --> 00:23:14,580 coming up to the limits of all kinds of 626 00:23:13,140 --> 00:23:16,799 stuff you are hard-pressed to turn that 627 00:23:14,580 --> 00:23:19,860 response around and quicker than you 628 00:23:16,799 --> 00:23:20,820 know like 600 to 8 000 milliseconds 629 00:23:19,860 --> 00:23:22,919 right 630 00:23:20,820 --> 00:23:24,179 um but and so if you've got two of them 631 00:23:22,919 --> 00:23:26,340 and you're stacking them up like that 632 00:23:24,179 --> 00:23:29,659 your response is gonna get very very 633 00:23:26,340 --> 00:23:33,659 long so fast API is perfect here for 634 00:23:29,659 --> 00:23:37,559 running them all at the same time and 635 00:23:33,659 --> 00:23:40,260 then the hour response will only be as 636 00:23:37,559 --> 00:23:42,539 big as our biggest response that we can 637 00:23:40,260 --> 00:23:45,000 get as many different bits of data as we 638 00:23:42,539 --> 00:23:47,760 want Chuck it back on the same Geo Json 639 00:23:45,000 --> 00:23:49,799 response in our massively overloaded 640 00:23:47,760 --> 00:23:51,299 properties and um 641 00:23:49,799 --> 00:23:54,179 and it will be very quick it'll only 642 00:23:51,299 --> 00:23:55,679 take as long as our biggest response 643 00:23:54,179 --> 00:23:58,860 um and then that's a different problem 644 00:23:55,679 --> 00:24:01,740 and I forgot my weight uh because it's a 645 00:23:58,860 --> 00:24:04,440 really easy mistake uh and that is my 646 00:24:01,740 --> 00:24:07,580 entire talk uh thank you very much 647 00:24:04,440 --> 00:24:07,580 you've been a great audience 648 00:24:11,480 --> 00:24:15,720 it's a 649 00:24:13,320 --> 00:24:18,120 thank you very much Elena for a very 650 00:24:15,720 --> 00:24:19,980 animated energetic talk and a very 651 00:24:18,120 --> 00:24:23,159 professional author polished slide deck 652 00:24:19,980 --> 00:24:25,700 so thank you so much and uh yeah um are 653 00:24:23,159 --> 00:24:25,700 there any questions 654 00:24:26,880 --> 00:24:30,260 yes Russell 655 00:24:30,600 --> 00:24:33,080 Mike 656 00:24:33,780 --> 00:24:36,840 thank you thank you very much 657 00:24:36,059 --> 00:24:39,000 um 658 00:24:36,840 --> 00:24:41,280 the you mentioned GTA 2020 at the end 659 00:24:39,000 --> 00:24:42,960 there because there no reference data or 660 00:24:41,280 --> 00:24:46,559 no is there any way to know that your 661 00:24:42,960 --> 00:24:49,440 geojson data has been uh has been coded 662 00:24:46,559 --> 00:24:53,179 against GTA 2020 versus WPS generally um 663 00:24:49,440 --> 00:24:53,179 a header is a prior to CRS and 664 00:24:57,419 --> 00:25:03,240 the pain that is petroleum 665 00:25:00,059 --> 00:25:06,179 um is spatial I guess is the yes but 666 00:25:03,240 --> 00:25:08,220 um yeah and these are all aliases in 667 00:25:06,179 --> 00:25:10,919 fact and gdo 94 is used still commonly 668 00:25:08,220 --> 00:25:12,240 but like I said um usually if it's going 669 00:25:10,919 --> 00:25:14,640 to be specified the datum is going to be 670 00:25:12,240 --> 00:25:17,159 specified it will be in the response 671 00:25:14,640 --> 00:25:19,440 headers and altitude is relative to sea 672 00:25:17,159 --> 00:25:21,780 level mean sea level if it's a three if 673 00:25:19,440 --> 00:25:23,640 it's a 3D coordinate 674 00:25:21,780 --> 00:25:26,360 um good question don't know check the 675 00:25:23,640 --> 00:25:26,360 check your references 676 00:25:26,940 --> 00:25:30,779 um I have people who could give you a 677 00:25:28,559 --> 00:25:32,940 very very very long-winded answer about 678 00:25:30,779 --> 00:25:36,140 that I am not that I don't think this is 679 00:25:32,940 --> 00:25:36,140 the time of the place but 680 00:25:36,419 --> 00:25:39,539 are there any other questions 681 00:25:38,460 --> 00:25:42,440 yes 682 00:25:39,539 --> 00:25:45,360 you could probably choose I'm gonna bet 683 00:25:42,440 --> 00:25:47,520 hello you've got a lot of structured 684 00:25:45,360 --> 00:25:48,960 data there so you the the Json input 685 00:25:47,520 --> 00:25:50,400 which is quite well structured and so 686 00:25:48,960 --> 00:25:52,620 you can expect to bring that into a 687 00:25:50,400 --> 00:25:54,179 pedantic model fairly easily but earlier 688 00:25:52,620 --> 00:25:57,179 you mentioned the addresses which are 689 00:25:54,179 --> 00:25:59,279 very loosey-goosey did you find just did 690 00:25:57,179 --> 00:26:00,720 you end up writing pedantic models to 691 00:25:59,279 --> 00:26:03,600 deal with them and if so was it an 692 00:26:00,720 --> 00:26:05,340 emotionally traumatic experience 693 00:26:03,600 --> 00:26:08,100 unfortunately that's a yes or no 694 00:26:05,340 --> 00:26:09,480 question the answer is yes 695 00:26:08,100 --> 00:26:11,820 um but yeah we have pedantic pretty much 696 00:26:09,480 --> 00:26:14,960 all the way up and down the stack and um 697 00:26:11,820 --> 00:26:18,299 yeah yeah no you you've been there 698 00:26:14,960 --> 00:26:20,880 you know the feelings um so pedantic V1 699 00:26:18,299 --> 00:26:22,919 was less performant than Titanic V2 700 00:26:20,880 --> 00:26:25,500 um and we did have to do some things to 701 00:26:22,919 --> 00:26:26,640 work around that um yeah but overall it 702 00:26:25,500 --> 00:26:28,260 is nice particularly if you've got 703 00:26:26,640 --> 00:26:29,340 people who've come from statically typed 704 00:26:28,260 --> 00:26:31,860 languages 705 00:26:29,340 --> 00:26:34,260 um they find it a lot saner to just be 706 00:26:31,860 --> 00:26:35,880 in a typed world so you can have some 707 00:26:34,260 --> 00:26:37,380 engineer work with Engineers who come 708 00:26:35,880 --> 00:26:38,520 from their background and they they're 709 00:26:37,380 --> 00:26:40,020 cool 710 00:26:38,520 --> 00:26:42,419 family one 711 00:26:40,020 --> 00:26:43,860 we go oh no we do we've we've got ways 712 00:26:42,419 --> 00:26:45,960 yeah and they I strongly recommend 713 00:26:43,860 --> 00:26:47,880 identity too it's really it's it's it 714 00:26:45,960 --> 00:26:49,860 works really well and there's a a tool 715 00:26:47,880 --> 00:26:51,539 for switching from B1 to V2 which seems 716 00:26:49,860 --> 00:26:53,760 to work fine 717 00:26:51,539 --> 00:26:55,980 all right we have any more questions 718 00:26:53,760 --> 00:26:56,760 hello 719 00:26:55,980 --> 00:26:59,640 um 720 00:26:56,760 --> 00:27:01,679 uh building up on the several different 721 00:26:59,640 --> 00:27:04,020 libraries that there are for validation 722 00:27:01,679 --> 00:27:06,179 I notice it looks very much like data 723 00:27:04,020 --> 00:27:08,039 classes as well hello yeah 724 00:27:06,179 --> 00:27:11,159 um what does pudanta give you over uh 725 00:27:08,039 --> 00:27:13,620 like the standard Library data class 726 00:27:11,159 --> 00:27:14,820 it just behaves differently the honest 727 00:27:13,620 --> 00:27:16,740 answer is I don't really know I have 728 00:27:14,820 --> 00:27:18,659 used data classes probably as much as 729 00:27:16,740 --> 00:27:20,880 I've used pedantic but I can't they just 730 00:27:18,659 --> 00:27:22,980 use them for different stuff um I've 731 00:27:20,880 --> 00:27:25,320 never really thought about that framing 732 00:27:22,980 --> 00:27:27,360 um okay so on the lid of it pedantic 733 00:27:25,320 --> 00:27:30,480 says it's good for validation validation 734 00:27:27,360 --> 00:27:31,320 and serialization whereas data classes I 735 00:27:30,480 --> 00:27:34,260 don't I just use them for type 736 00:27:31,320 --> 00:27:36,419 annotation and you know some minor sort 737 00:27:34,260 --> 00:27:37,440 of validation great question let's find 738 00:27:36,419 --> 00:27:40,500 the answer 739 00:27:37,440 --> 00:27:42,299 later thanks Luke 740 00:27:40,500 --> 00:27:44,960 we have time for one more quick question 741 00:27:42,299 --> 00:27:44,960 yes 742 00:27:46,140 --> 00:27:50,539 gifs it's a pretty cool standard what 743 00:27:48,720 --> 00:27:54,299 influences it had on the international 744 00:27:50,539 --> 00:27:56,520 landscape oh that so great so it is 745 00:27:54,299 --> 00:27:58,500 currently the time in history where I 746 00:27:56,520 --> 00:27:59,880 think a lot of these standards are you 747 00:27:58,500 --> 00:28:01,140 know every are just coming to the point 748 00:27:59,880 --> 00:28:03,299 where it's coming becoming a bit 749 00:28:01,140 --> 00:28:04,799 competitive where you used to be just 750 00:28:03,299 --> 00:28:06,840 governments and now there are other 751 00:28:04,799 --> 00:28:07,919 players going hey we can do this um and 752 00:28:06,840 --> 00:28:09,360 so there's been a bit of a 753 00:28:07,919 --> 00:28:12,900 standardization 754 00:28:09,360 --> 00:28:14,400 um and um uh discussion amongst the 755 00:28:12,900 --> 00:28:16,860 different entities who produce this 756 00:28:14,400 --> 00:28:19,020 level of data set 757 00:28:16,860 --> 00:28:21,419 um about about that but it's the very 758 00:28:19,020 --> 00:28:23,279 early days of that history I think so 759 00:28:21,419 --> 00:28:27,000 um I think it's reasonable for me to say 760 00:28:23,279 --> 00:28:29,580 that we do talk to other agencies around 761 00:28:27,000 --> 00:28:31,380 the world who produce these similar 762 00:28:29,580 --> 00:28:33,120 comparable artifacts but they are 763 00:28:31,380 --> 00:28:35,340 different in each region like for 764 00:28:33,120 --> 00:28:37,500 example Malaysia doesn't have one at all 765 00:28:35,340 --> 00:28:39,059 um but 766 00:28:37,500 --> 00:28:40,679 um you know the whole standardization of 767 00:28:39,059 --> 00:28:42,120 addresses is it's I think we're at the 768 00:28:40,679 --> 00:28:44,820 beginning of that conversation that's a 769 00:28:42,120 --> 00:28:46,380 very excellent insight 770 00:28:44,820 --> 00:28:48,539 thank you very much all right we have a 771 00:28:46,380 --> 00:28:50,700 small gift for you as a token as well 772 00:28:48,539 --> 00:28:53,179 appreciation 773 00:28:50,700 --> 00:28:55,760 um so I'll present you with that and 774 00:28:53,179 --> 00:28:59,240 that as well thank you very much 775 00:28:55,760 --> 00:28:59,240 thank you very much 776 00:29:00,299 --> 00:29:04,760 that's awesome 777 00:29:01,550 --> 00:29:04,760 [Applause]