1 00:00:00,750 --> 00:00:06,640 [Music] 2 00:00:05,540 --> 00:00:06,880 [Applause] 3 00:00:06,640 --> 00:00:12,480 [Music] 4 00:00:06,880 --> 00:00:12,480 [Applause] 5 00:00:13,900 --> 00:00:15,679 [Music] 6 00:00:15,280 --> 00:00:17,039 Stop. 7 00:00:15,679 --> 00:00:19,840 Stop. 8 00:00:17,039 --> 00:00:21,119 Okay, good. You can do it. 9 00:00:19,840 --> 00:00:22,880 We've forgot to teach you how to stop 10 00:00:21,119 --> 00:00:24,320 clapping yesterday to cause all kinds of 11 00:00:22,880 --> 00:00:26,240 problems. 12 00:00:24,320 --> 00:00:27,920 Yeah. When we tell you to stop clapping 13 00:00:26,240 --> 00:00:29,920 during talks, remember they only get 14 00:00:27,920 --> 00:00:32,160 five minutes. And when you when you're 15 00:00:29,920 --> 00:00:35,200 clapping, they don't get time to give a 16 00:00:32,160 --> 00:00:36,559 talk cuz we don't stop the stopwatch. 17 00:00:35,200 --> 00:00:38,239 The best way to build rapport with an 18 00:00:36,559 --> 00:00:40,239 audience, by the way, is by chastising 19 00:00:38,239 --> 00:00:42,320 them immediately. As soon as you start, 20 00:00:40,239 --> 00:00:46,399 right off the bat. 21 00:00:42,320 --> 00:00:49,600 Uh, stop. 22 00:00:46,399 --> 00:00:51,600 Try again. Stop. 23 00:00:49,600 --> 00:00:53,280 Better. 24 00:00:51,600 --> 00:00:54,719 Uh, the other complaint that we got was 25 00:00:53,280 --> 00:00:56,640 that there weren't nearly enough bad 26 00:00:54,719 --> 00:00:59,359 jokes in between the talks today. The 27 00:00:56,640 --> 00:01:01,440 good news is that we've had two days to 28 00:00:59,359 --> 00:01:03,760 become completely exhausted and turn off 29 00:01:01,440 --> 00:01:06,560 that filter. Also, I've written a whole 30 00:01:03,760 --> 00:01:08,240 bunch of them beforehand just in case um 31 00:01:06,560 --> 00:01:10,720 handing over to my wonderful 32 00:01:08,240 --> 00:01:13,119 co-presenter here. Uh the quality of 33 00:01:10,720 --> 00:01:13,920 jokes decreases during as we swap off 34 00:01:13,119 --> 00:01:15,760 just in case, you know. 35 00:01:13,920 --> 00:01:19,439 I have a spreadsheet that Chris has 36 00:01:15,760 --> 00:01:21,119 given me. Uh there are talk titles, 37 00:01:19,439 --> 00:01:24,840 presenter names, and then there are 38 00:01:21,119 --> 00:01:24,840 jokes in bold. 39 00:01:26,240 --> 00:01:33,119 I have standards. 40 00:01:28,479 --> 00:01:35,119 If you say so, Chris. I I do. Um, 41 00:01:33,119 --> 00:01:37,040 it's time to begin the lightning talks. 42 00:01:35,119 --> 00:01:39,439 Uh, and to begin this block, we have 43 00:01:37,040 --> 00:01:44,799 Nick, who's going to be talking about 44 00:01:39,439 --> 00:01:46,399 blocks. It's true. Good joke. Good joke. 45 00:01:44,799 --> 00:01:48,159 Has it come up? Has it come up? Is it 46 00:01:46,399 --> 00:01:49,840 going to come up? It's come up. Cool. 47 00:01:48,159 --> 00:01:51,439 Hello. This is my talk called The 48 00:01:49,840 --> 00:01:53,680 Children Yearn for the Minds. It's about 49 00:01:51,439 --> 00:01:55,439 importing Ultima 4 maps into Minecraft. 50 00:01:53,680 --> 00:01:57,920 Well, not Minecraft. mind test, although 51 00:01:55,439 --> 00:02:00,719 it's called Luante now. Who cares why? 52 00:01:57,920 --> 00:02:01,439 It's actually a talk about Oh, stop it. 53 00:02:00,719 --> 00:02:02,640 It's actually a talk about 54 00:02:01,439 --> 00:02:04,159 procrastinate. It's all right. I'll fix 55 00:02:02,640 --> 00:02:06,719 that later. Um, it's a talk about 56 00:02:04,159 --> 00:02:08,479 procrastination inspired by Adah's talk 57 00:02:06,719 --> 00:02:10,640 yesterday because I thought, you know, 58 00:02:08,479 --> 00:02:12,319 young developers like tend to 59 00:02:10,640 --> 00:02:14,720 procrastinate and find themselves lost 60 00:02:12,319 --> 00:02:16,720 in this mine of procrastination and and 61 00:02:14,720 --> 00:02:18,080 I just wanted to demonstrate that more 62 00:02:16,720 --> 00:02:21,680 senior developers might do the same 63 00:02:18,080 --> 00:02:23,680 thing but like harder. Anyway, so I was 64 00:02:21,680 --> 00:02:24,959 working on my presentation for and all 65 00:02:23,680 --> 00:02:26,400 these slides are in the wrong order, I 66 00:02:24,959 --> 00:02:29,040 think. I was working on my presentation 67 00:02:26,400 --> 00:02:30,160 for my thing yesterday, and I was 68 00:02:29,040 --> 00:02:31,680 working very hard at it. I had a 69 00:02:30,160 --> 00:02:33,680 proposal in, everyone liked it. It was 70 00:02:31,680 --> 00:02:34,879 really good. I had a to-do list. I had a 71 00:02:33,680 --> 00:02:36,080 bunch of stuff to look up, a bunch of 72 00:02:34,879 --> 00:02:37,440 stuff to write, a bunch of slides to 73 00:02:36,080 --> 00:02:39,760 make, all of that. It was very, very, 74 00:02:37,440 --> 00:02:42,239 very boring. Um, so of course, I did 75 00:02:39,760 --> 00:02:45,200 what anyone sensible would do, which was 76 00:02:42,239 --> 00:02:47,680 to to Well, so I really liked this game 77 00:02:45,200 --> 00:02:50,160 when I was growing up called Ultima 4. 78 00:02:47,680 --> 00:02:51,599 It was great. It ran on the Apple 2. It 79 00:02:50,160 --> 00:02:53,519 was an adventure. There was a whole 80 00:02:51,599 --> 00:02:56,080 world to explore. There was so much to 81 00:02:53,519 --> 00:02:58,000 do and find out about. And then at some 82 00:02:56,080 --> 00:02:59,760 point, oh, that the whole world to find 83 00:02:58,000 --> 00:03:01,200 out about. And you had this picture of 84 00:02:59,760 --> 00:03:02,400 this world, this picture of this place, 85 00:03:01,200 --> 00:03:03,599 even though you'd never seen it because 86 00:03:02,400 --> 00:03:05,040 it was always in this tiny little 87 00:03:03,599 --> 00:03:06,879 window. You had this picture of the 88 00:03:05,040 --> 00:03:08,239 place. You know how places are in games? 89 00:03:06,879 --> 00:03:09,760 You imagine them even though they're not 90 00:03:08,239 --> 00:03:11,680 real. They're very meaningful to you. 91 00:03:09,760 --> 00:03:13,280 And I thought, wouldn't it be cool if I 92 00:03:11,680 --> 00:03:15,599 could still have that? And when 93 00:03:13,280 --> 00:03:17,200 Minecraft came out, I thought I could 94 00:03:15,599 --> 00:03:19,200 put it in Minecraft. Imagine if I could 95 00:03:17,200 --> 00:03:20,720 take this world of blocks and put it in 96 00:03:19,200 --> 00:03:24,959 that world of blocks. Wouldn't that be 97 00:03:20,720 --> 00:03:26,319 awesome? No picture. Um, and so I had to 98 00:03:24,959 --> 00:03:27,680 learn how to read the map. So I learned 99 00:03:26,319 --> 00:03:30,000 how to read the map. And the thing is 100 00:03:27,680 --> 00:03:32,159 about Ultima 4 is so old that nothing 101 00:03:30,000 --> 00:03:34,319 could be complicated. There wasn't time. 102 00:03:32,159 --> 00:03:35,760 So we hadn't made anything hard yet. So 103 00:03:34,319 --> 00:03:37,040 like all the map is just a bunch of 104 00:03:35,760 --> 00:03:39,280 bites in a row. They're not the right 105 00:03:37,040 --> 00:03:40,640 row, but it's a row. And then I went to 106 00:03:39,280 --> 00:03:42,319 write it into Minecraft. And Minecraft's 107 00:03:40,640 --> 00:03:43,920 hard and it's in Java and mine test 108 00:03:42,319 --> 00:03:46,640 isn't and it's open source and it's in 109 00:03:43,920 --> 00:03:49,440 lure, which is okay. That's fine, too. 110 00:03:46,640 --> 00:03:51,519 but also it's got a a documented format 111 00:03:49,440 --> 00:03:53,360 for its files. It's an insane format. 112 00:03:51,519 --> 00:03:55,120 It's completely crazy, but it's 113 00:03:53,360 --> 00:03:56,799 documented or you might call it 114 00:03:55,120 --> 00:03:59,519 confessed. 115 00:03:56,799 --> 00:04:01,599 It is very complicated. 116 00:03:59,519 --> 00:04:03,040 Whoa, thank you. Um, so this is some of 117 00:04:01,599 --> 00:04:04,319 the code that writes it. I promised in 118 00:04:03,040 --> 00:04:07,040 my thing that I would have some actual 119 00:04:04,319 --> 00:04:08,560 Python code in a talk at PyCon. Hey, 120 00:04:07,040 --> 00:04:12,159 there it is. I didn't do syntax 121 00:04:08,560 --> 00:04:13,599 highlighting. Get good. Um uh basically 122 00:04:12,159 --> 00:04:16,000 what you do is you output a whole bunch 123 00:04:13,599 --> 00:04:17,199 of random binary data and a whole bunch 124 00:04:16,000 --> 00:04:18,239 of other data that is meant to do 125 00:04:17,199 --> 00:04:19,840 something but I just put a bunch of 126 00:04:18,239 --> 00:04:22,479 zeros there and saw if it worked and it 127 00:04:19,840 --> 00:04:24,479 some of it worked and then you take that 128 00:04:22,479 --> 00:04:26,720 you compress it and you write it 129 00:04:24,479 --> 00:04:29,600 somewhere around here. 130 00:04:26,720 --> 00:04:32,560 You write it into an SQLite 3 database 131 00:04:29,600 --> 00:04:35,120 as a zlib compressed row which is just 132 00:04:32,560 --> 00:04:36,560 like I say it's a confession. Anyway, 133 00:04:35,120 --> 00:04:39,040 doing that, you could suddenly write 134 00:04:36,560 --> 00:04:41,919 blocks, 16 x6 cubes of crap into the 135 00:04:39,040 --> 00:04:43,680 Luanti maps. This is awesome. So then I 136 00:04:41,919 --> 00:04:44,639 looked at this is the Ultima 4 map. So I 137 00:04:43,680 --> 00:04:45,919 looked at that and I went, wouldn't it 138 00:04:44,639 --> 00:04:47,680 be cool if I could just pick those tiles 139 00:04:45,919 --> 00:04:49,280 up and write them into Luante? There 140 00:04:47,680 --> 00:04:50,720 they are. And I went, they're very 141 00:04:49,280 --> 00:04:52,960 square and ugly looking, but that's 142 00:04:50,720 --> 00:04:55,199 okay. There's also towns. Towns have 143 00:04:52,960 --> 00:04:57,280 their own 32x 32 maps. They're one grid 144 00:04:55,199 --> 00:04:59,440 scale on the big map, but they're 32x 32 145 00:04:57,280 --> 00:05:00,639 on the little maps of each town. So you 146 00:04:59,440 --> 00:05:02,560 have to pick them up, too, and put them 147 00:05:00,639 --> 00:05:06,080 in separately onto the scaled up map 148 00:05:02,560 --> 00:05:07,840 from the big map. There they are. Um, 149 00:05:06,080 --> 00:05:10,160 and then somewhere this clicker is not 150 00:05:07,840 --> 00:05:11,600 helping me. And then I looked at these 151 00:05:10,160 --> 00:05:12,800 things and went square rivers. Square 152 00:05:11,600 --> 00:05:14,160 rivers are ugly. I have to do something 153 00:05:12,800 --> 00:05:15,600 about that. So I worked out a way that 154 00:05:14,160 --> 00:05:18,080 you could make like rounded rivers. And 155 00:05:15,600 --> 00:05:19,600 there it is. And then I put that into 156 00:05:18,080 --> 00:05:21,919 there, too. And now we have little 157 00:05:19,600 --> 00:05:24,000 roundy rivers. That's pretty cool. And 158 00:05:21,919 --> 00:05:25,039 then I had this long list of other 159 00:05:24,000 --> 00:05:26,240 things I need to do. So I need to have 160 00:05:25,039 --> 00:05:28,000 terrain. I need to have mountains coming 161 00:05:26,240 --> 00:05:29,199 up and oceans going down. I need to have 162 00:05:28,000 --> 00:05:30,960 trees in the right places. There's 163 00:05:29,199 --> 00:05:32,479 shrines and dungeons and the moon gates. 164 00:05:30,960 --> 00:05:34,080 And there's all this other complexity 165 00:05:32,479 --> 00:05:35,759 and stuff. I now have a really long 166 00:05:34,080 --> 00:05:37,280 tedious to-do list that I really can't 167 00:05:35,759 --> 00:05:38,960 be bothered doing. And so the good news 168 00:05:37,280 --> 00:05:40,639 is 169 00:05:38,960 --> 00:05:43,639 that's how I finished my talk about 170 00:05:40,639 --> 00:05:43,639 bioinformatics. 171 00:05:44,000 --> 00:05:47,639 Thank you very much. 172 00:05:53,199 --> 00:06:00,000 Thank you so much, Nick. Up next on this 173 00:05:55,680 --> 00:06:02,320 side, we have Ben and Ellena. But first, 174 00:06:00,000 --> 00:06:04,639 Miss Linda is here to tell us a story. 175 00:06:02,320 --> 00:06:07,919 Good morning, Miss Linda. 176 00:06:04,639 --> 00:06:10,160 Good morning, everyone. 177 00:06:07,919 --> 00:06:12,000 Slight content warning. There will be a 178 00:06:10,160 --> 00:06:14,479 mention of mental health and uh 179 00:06:12,000 --> 00:06:16,560 workplace exploitation. 180 00:06:14,479 --> 00:06:18,080 Once upon a time, there was an 181 00:06:16,560 --> 00:06:20,160 oligarchy. 182 00:06:18,080 --> 00:06:22,080 It wasn't your usual kind of oligarchy. 183 00:06:20,160 --> 00:06:24,800 The oligarchs weren't actually in 184 00:06:22,080 --> 00:06:26,800 charge. It was a sneaky kind of 185 00:06:24,800 --> 00:06:28,720 oligarchy. Although, it's kind of weird 186 00:06:26,800 --> 00:06:31,840 to call it sneaky because it was very, 187 00:06:28,720 --> 00:06:33,440 very loud. 188 00:06:31,840 --> 00:06:36,319 They weren't just loud. They just 189 00:06:33,440 --> 00:06:39,039 weren't loud about being in charge. They 190 00:06:36,319 --> 00:06:42,000 were loud in a hey look what's that over 191 00:06:39,039 --> 00:06:43,520 there kind of way. The oligarchs didn't 192 00:06:42,000 --> 00:06:46,240 think of themselves as oligarchs. 193 00:06:43,520 --> 00:06:48,639 Oligarchs very rarely do. Instead they 194 00:06:46,240 --> 00:06:52,319 thought of themselves as benefactors, 195 00:06:48,639 --> 00:06:54,639 saviors of mankind. Though in truth the 196 00:06:52,319 --> 00:06:57,840 man part was more important than the 197 00:06:54,639 --> 00:06:59,840 kind part. It turns out that in order to 198 00:06:57,840 --> 00:07:01,680 save mankind you have to do some pretty 199 00:06:59,840 --> 00:07:04,080 terrible things. 200 00:07:01,680 --> 00:07:06,880 In their own minds, they were creating a 201 00:07:04,080 --> 00:07:08,880 glorious new future. A future in which 202 00:07:06,880 --> 00:07:11,039 no one would need to work, or at least 203 00:07:08,880 --> 00:07:13,840 no one would need to get paid for their 204 00:07:11,039 --> 00:07:17,199 work, which was almost as good. In fact, 205 00:07:13,840 --> 00:07:19,360 for the oligarchs, it was better. 206 00:07:17,199 --> 00:07:21,759 The oligarchs set about building a 207 00:07:19,360 --> 00:07:23,680 device. The device would write 208 00:07:21,759 --> 00:07:26,720 masterpieces the like of which the world 209 00:07:23,680 --> 00:07:30,000 had never seen. Or maybe it would be a 210 00:07:26,720 --> 00:07:31,520 friend or even a therapist. Obviously, 211 00:07:30,000 --> 00:07:33,919 it would save the world from climate 212 00:07:31,520 --> 00:07:36,000 change, and it would absolutely rescue 213 00:07:33,919 --> 00:07:39,199 humanity from the need to be creative or 214 00:07:36,000 --> 00:07:42,080 interesting in any way. Honestly, it was 215 00:07:39,199 --> 00:07:43,759 going to be incredible as long as no one 216 00:07:42,080 --> 00:07:46,720 asked the oligarchs exactly what 217 00:07:43,759 --> 00:07:48,319 incredible meant. It was going to be all 218 00:07:46,720 --> 00:07:51,599 things to all people. That much was 219 00:07:48,319 --> 00:07:54,240 clear. Unfortunately, not de defining 220 00:07:51,599 --> 00:07:57,039 what the device was made for made it 221 00:07:54,240 --> 00:07:59,599 kind of tricky to build. The oligarchs 222 00:07:57,039 --> 00:08:01,840 scooped up a ton of funding because 223 00:07:59,599 --> 00:08:03,919 obviously everybody wanted an all things 224 00:08:01,840 --> 00:08:06,720 to all people device and they were 225 00:08:03,919 --> 00:08:08,800 terribly convincing. They built the 226 00:08:06,720 --> 00:08:11,759 device and set it free with great pomp 227 00:08:08,800 --> 00:08:13,680 and ceremony. It could do anything up to 228 00:08:11,759 --> 00:08:15,919 and including flying to the moon. 229 00:08:13,680 --> 00:08:19,360 Indeed, it practically had a PhD in 230 00:08:15,919 --> 00:08:21,280 flying to the moon. Unfortunately, it 231 00:08:19,360 --> 00:08:23,680 flew to the moon in much the same way as 232 00:08:21,280 --> 00:08:25,680 a bucket of sewage would. It didn't get 233 00:08:23,680 --> 00:08:27,599 very high and it made a rather stinky 234 00:08:25,680 --> 00:08:30,560 and uh terrible mess when it hit the 235 00:08:27,599 --> 00:08:33,279 ground. 236 00:08:30,560 --> 00:08:35,680 Undaunted for they were fearless 237 00:08:33,279 --> 00:08:38,080 worldsaving men, they built a second 238 00:08:35,680 --> 00:08:40,159 device feeding it everything they could 239 00:08:38,080 --> 00:08:41,760 find. And they were so good at finding 240 00:08:40,159 --> 00:08:44,399 things that they even found many things 241 00:08:41,760 --> 00:08:46,080 that belong to other people. But because 242 00:08:44,399 --> 00:08:48,560 they were building an all things to all 243 00:08:46,080 --> 00:08:50,959 people device, it was perfectly fine 244 00:08:48,560 --> 00:08:53,279 obviously for them to uh to take the 245 00:08:50,959 --> 00:08:56,399 things without asking because the device 246 00:08:53,279 --> 00:08:58,880 was essential to saving mankind. The 247 00:08:56,399 --> 00:09:01,360 actual device was amazing. It passed all 248 00:08:58,880 --> 00:09:03,600 the tests, knew all of the things. It 249 00:09:01,360 --> 00:09:05,680 was just a teensy bit embarrassing when 250 00:09:03,600 --> 00:09:08,080 it turned out not to be able to solve 251 00:09:05,680 --> 00:09:09,839 all of the problems. It certainly solved 252 00:09:08,080 --> 00:09:11,920 some of the problems, which was pretty 253 00:09:09,839 --> 00:09:14,480 impressive actually, as long as you were 254 00:09:11,920 --> 00:09:17,440 happy with the uh answer to two plus two 255 00:09:14,480 --> 00:09:19,519 being a kind of bug. 256 00:09:17,440 --> 00:09:21,200 But everyone was jolly impressed anyway 257 00:09:19,519 --> 00:09:24,080 because the oligarchs told them to be, 258 00:09:21,200 --> 00:09:26,320 and they were terribly convincing. 259 00:09:24,080 --> 00:09:27,920 Unfortunately, word got out that the 260 00:09:26,320 --> 00:09:29,680 actual device was drinking a huge amount 261 00:09:27,920 --> 00:09:32,160 of water, burning up quite a lot of the 262 00:09:29,680 --> 00:09:34,080 world's atmosphere, uh, and still not 263 00:09:32,160 --> 00:09:36,240 successfully doing all the tricks. But 264 00:09:34,080 --> 00:09:38,399 the oligarchs said that there was no way 265 00:09:36,240 --> 00:09:40,480 to do it to build the actual device. And 266 00:09:38,399 --> 00:09:41,760 obviously we had to do that and there 267 00:09:40,480 --> 00:09:43,440 was plenty more water in atmosphere 268 00:09:41,760 --> 00:09:46,800 where all of that came from anyway. And 269 00:09:43,440 --> 00:09:48,640 they were terribly convincing. 270 00:09:46,800 --> 00:09:50,560 So they scooped up more money, burnt 271 00:09:48,640 --> 00:09:52,640 even more atmosphere, stole even more 272 00:09:50,560 --> 00:09:54,640 things, and built the really actual 273 00:09:52,640 --> 00:09:56,640 device this time, or Lucifer, as they 274 00:09:54,640 --> 00:09:58,720 affectionately named it. And it seemed 275 00:09:56,640 --> 00:10:00,480 truly incredible until the word got out 276 00:09:58,720 --> 00:10:02,399 that Lucifer had been fed poor and 277 00:10:00,480 --> 00:10:04,000 vulnerable people so that they could 278 00:10:02,399 --> 00:10:06,640 wade around in the rather horrifically 279 00:10:04,000 --> 00:10:09,360 grubby insides of the machine and remove 280 00:10:06,640 --> 00:10:10,560 the problematic bits. Of course, they 281 00:10:09,360 --> 00:10:12,160 didn't necessarily make it out of 282 00:10:10,560 --> 00:10:13,600 Lucifer alive or undamaged, but the 283 00:10:12,160 --> 00:10:15,839 oligarchs pointed out that there was 284 00:10:13,600 --> 00:10:17,519 simply no other way to build Lucifer or 285 00:10:15,839 --> 00:10:19,519 his descendants. And obviously, we had 286 00:10:17,519 --> 00:10:22,000 to do that and they were terribly 287 00:10:19,519 --> 00:10:23,760 convincing. Of course, this argument 288 00:10:22,000 --> 00:10:25,600 came as rather a surprise to the people 289 00:10:23,760 --> 00:10:27,279 who were researching ways to build other 290 00:10:25,600 --> 00:10:28,560 devices that didn't eat people, burn up 291 00:10:27,279 --> 00:10:29,920 the atmosphere, drink all the water, 292 00:10:28,560 --> 00:10:31,839 steal all the things, or scoop up all 293 00:10:29,920 --> 00:10:34,000 the money, but simply did one thing 294 00:10:31,839 --> 00:10:36,160 really, really well. But it turned out 295 00:10:34,000 --> 00:10:38,399 nobody really cared about all of that 296 00:10:36,160 --> 00:10:41,560 stuff. And so the devices continued to 297 00:10:38,399 --> 00:10:41,560 be built, 298 00:10:43,440 --> 00:10:49,200 skipping all of the things. 299 00:10:46,240 --> 00:10:54,760 The story doesn't stop there, but 300 00:10:49,200 --> 00:10:54,760 perhaps we could choose our own ending. 301 00:11:00,000 --> 00:11:04,959 Thank you, Miss Linda. I have no idea 302 00:11:02,880 --> 00:11:07,680 what that story could have been about, 303 00:11:04,959 --> 00:11:10,640 but I'm sure it's very important. 304 00:11:07,680 --> 00:11:13,279 Uh, Yakov, you're on deck. Uh, but 305 00:11:10,640 --> 00:11:13,600 first, uh, Benelina. 306 00:11:13,279 --> 00:11:16,600 Hey, 307 00:11:13,600 --> 00:11:16,600 Benelina. 308 00:11:16,959 --> 00:11:19,040 microphone. 309 00:11:18,000 --> 00:11:21,279 Thank you, sir. 310 00:11:19,040 --> 00:11:23,040 Hello, PyCon. 311 00:11:21,279 --> 00:11:23,360 How are we? 312 00:11:23,040 --> 00:11:25,760 Good. 313 00:11:23,360 --> 00:11:28,480 That's great. I'm a uh longtime 314 00:11:25,760 --> 00:11:30,640 listener, first- time talker. 315 00:11:28,480 --> 00:11:33,600 Um, and I'm here to ask you some 316 00:11:30,640 --> 00:11:36,720 questions. Do you like Python? 317 00:11:33,600 --> 00:11:39,760 Do you like the Python community? 318 00:11:36,720 --> 00:11:43,600 Do you like high availability? 319 00:11:39,760 --> 00:11:46,240 Do you like things that are easy to do? 320 00:11:43,600 --> 00:11:47,920 Yeah. Yeah. Thought that. So come be a 321 00:11:46,240 --> 00:11:49,839 part of the Python Australia community. 322 00:11:47,920 --> 00:11:54,079 It's your Python community in Australia 323 00:11:49,839 --> 00:11:56,079 the other 360.25 days of the year. Um we 324 00:11:54,079 --> 00:11:58,240 have a website and a discord. You can 325 00:11:56,079 --> 00:12:01,600 use the website to get to the discord. 326 00:11:58,240 --> 00:12:02,079 Um and we are 327 00:12:01,600 --> 00:12:03,680 so 328 00:12:02,079 --> 00:12:06,000 yeah so I mean you might be asking 329 00:12:03,680 --> 00:12:07,920 yourself what is a Python Australia? 330 00:12:06,000 --> 00:12:10,240 Well you might note there is a Python 331 00:12:07,920 --> 00:12:12,639 Africa, a Python Asia, a Python Europe, 332 00:12:10,240 --> 00:12:14,639 a Python Latin America. There is no 333 00:12:12,639 --> 00:12:16,959 Python Australia. We believe that there 334 00:12:14,639 --> 00:12:19,279 should be at the end of last PyCon AU in 335 00:12:16,959 --> 00:12:21,040 the hallway track uh small handful of us 336 00:12:19,279 --> 00:12:23,279 went all got together and went why don't 337 00:12:21,040 --> 00:12:26,160 we make a Python Australia? So your next 338 00:12:23,279 --> 00:12:30,720 question is probably who is a Python 339 00:12:26,160 --> 00:12:32,560 Australia? Um well we're in the user 340 00:12:30,720 --> 00:12:34,079 groups. So if you're not part of your 341 00:12:32,560 --> 00:12:35,760 local user group or you do not have one, 342 00:12:34,079 --> 00:12:37,360 we recommend you join one. And there's 343 00:12:35,760 --> 00:12:40,000 another thing too that we tend to over 344 00:12:37,360 --> 00:12:41,760 represent on the coding front. Um there 345 00:12:40,000 --> 00:12:44,959 are more core contributors in Australia 346 00:12:41,760 --> 00:12:47,120 than is statistically consistent. Uh we 347 00:12:44,959 --> 00:12:48,560 are very very proud and uh big shout out 348 00:12:47,120 --> 00:12:50,240 to all these people. They are also part 349 00:12:48,560 --> 00:12:51,600 of our community. There are many online 350 00:12:50,240 --> 00:12:53,519 spaces which many Australians 351 00:12:51,600 --> 00:12:54,800 participate in and we're very proud. You 352 00:12:53,519 --> 00:12:56,639 are part of the Python Australia 353 00:12:54,800 --> 00:12:57,920 community. There are all kinds of other 354 00:12:56,639 --> 00:13:00,560 weird and wonderful things we do with 355 00:12:57,920 --> 00:13:03,040 Python. All of you are also welcome as 356 00:13:00,560 --> 00:13:06,240 are all of just you know our day-to-day 357 00:13:03,040 --> 00:13:08,959 professional Python users. So who is 358 00:13:06,240 --> 00:13:11,680 part of Python Australia? 359 00:13:08,959 --> 00:13:14,880 everyone. 360 00:13:11,680 --> 00:13:16,959 Yes, including you. Um, and you know 361 00:13:14,880 --> 00:13:19,040 that thing Chris Chris No was talking 362 00:13:16,959 --> 00:13:23,120 about in consequences this morning. This 363 00:13:19,040 --> 00:13:26,000 is that. Come join us. Uh, we having a 364 00:13:23,120 --> 00:13:27,760 meeting tomorrow in our Discord. You'll 365 00:13:26,000 --> 00:13:29,279 find the details there. 366 00:13:27,760 --> 00:13:31,839 I've got one. 367 00:13:29,279 --> 00:13:35,120 Um, so come join us. Uh, all experience 368 00:13:31,839 --> 00:13:37,680 levels are welcome. Um, we we hope to 369 00:13:35,120 --> 00:13:39,600 represent you well. Um we we have 370 00:13:37,680 --> 00:13:41,360 somewhat come together from all the 371 00:13:39,600 --> 00:13:44,560 different states and other small 372 00:13:41,360 --> 00:13:46,000 community bodies. Um and uh yeah, we 373 00:13:44,560 --> 00:13:48,160 we're hoping to represent you and give 374 00:13:46,000 --> 00:13:51,160 you a space to be connected to each 375 00:13:48,160 --> 00:13:51,160 other. 376 00:13:51,700 --> 00:13:55,259 [Music] 377 00:13:57,440 --> 00:14:01,519 Thank you so much, Ben and Elellanena, 378 00:13:59,199 --> 00:14:04,720 for giving me a way to hang out with all 379 00:14:01,519 --> 00:14:07,360 of you folks after Tuesday. Uh, up next 380 00:14:04,720 --> 00:14:11,839 on this side is Christopher Phillips. 381 00:14:07,360 --> 00:14:12,959 But first, over to Yakov. Over. 382 00:14:11,839 --> 00:14:14,880 I should have expected that. Hello. 383 00:14:12,959 --> 00:14:16,079 Hello. I am a human and you are humans 384 00:14:14,880 --> 00:14:18,240 and I would like to communicate with 385 00:14:16,079 --> 00:14:19,760 you, but this is difficult. As Lily 386 00:14:18,240 --> 00:14:22,079 mentioned in her wonderful talk earlier 387 00:14:19,760 --> 00:14:23,680 today, what is in my head and what is in 388 00:14:22,079 --> 00:14:25,279 your head are two different things and 389 00:14:23,680 --> 00:14:27,680 we need a way to relate them. And so to 390 00:14:25,279 --> 00:14:30,720 do this, we try our best with this 391 00:14:27,680 --> 00:14:33,040 wonderful thing called language. And it 392 00:14:30,720 --> 00:14:34,639 is wonderful. Uh, sometimes it's spoken, 393 00:14:33,040 --> 00:14:36,959 sometimes it's written, but is a great 394 00:14:34,639 --> 00:14:39,440 way to try and encode all of my thoughts 395 00:14:36,959 --> 00:14:41,680 and ideas. Well, most of them if we're 396 00:14:39,440 --> 00:14:43,360 being honest. But these are not just 397 00:14:41,680 --> 00:14:45,920 used to make up words. We use these 398 00:14:43,360 --> 00:14:48,000 letters as all sorts of identifiers 399 00:14:45,920 --> 00:14:50,639 everywhere. Letters are so good. We put 400 00:14:48,000 --> 00:14:51,920 them everywhere. We use them for words. 401 00:14:50,639 --> 00:14:53,519 We use them for license plates. We use 402 00:14:51,920 --> 00:14:55,440 them for registrations. We put them for 403 00:14:53,519 --> 00:14:57,279 We use them for taxi ways. We use them 404 00:14:55,440 --> 00:14:59,040 for key areas in Counterstrike only A 405 00:14:57,279 --> 00:15:01,040 and B cuz there's never more than that. 406 00:14:59,040 --> 00:15:02,639 And so on. We love using letters 407 00:15:01,040 --> 00:15:04,959 everywhere, 408 00:15:02,639 --> 00:15:06,240 but sometimes using letters is hard. 409 00:15:04,959 --> 00:15:08,480 There are some problems that can happen 410 00:15:06,240 --> 00:15:10,160 when you try and encode and decode the 411 00:15:08,480 --> 00:15:12,880 magic of thoughts into some other 412 00:15:10,160 --> 00:15:14,560 medium. And one of them is a bit of a 413 00:15:12,880 --> 00:15:17,199 pet peeve of mine. And it's very much 414 00:15:14,560 --> 00:15:19,519 self-inflicted. And that is if you want 415 00:15:17,199 --> 00:15:23,680 to describe a letter, it has a name. You 416 00:15:19,519 --> 00:15:25,040 just say the name. A B C D. Well, four 417 00:15:23,680 --> 00:15:27,760 in and three of them sound the same 418 00:15:25,040 --> 00:15:29,600 already. This can be a problem 419 00:15:27,760 --> 00:15:31,760 particularly if you're in an environment 420 00:15:29,600 --> 00:15:32,880 where you can't have clear audio. So 421 00:15:31,760 --> 00:15:35,120 you've got a phone call that's a bit 422 00:15:32,880 --> 00:15:36,560 dodgy. If you're using a two-way radio, 423 00:15:35,120 --> 00:15:38,160 if you're in person, if you're wearing a 424 00:15:36,560 --> 00:15:40,000 mask, if you have a thick accent, it can 425 00:15:38,160 --> 00:15:41,680 be very hard when you have a letter to 426 00:15:40,000 --> 00:15:43,279 know exactly which one was said when it 427 00:15:41,680 --> 00:15:46,000 could have been one of two, one of six, 428 00:15:43,279 --> 00:15:48,079 one of seven. So there is a standard for 429 00:15:46,000 --> 00:15:50,240 this. It emerged from civil aviation in 430 00:15:48,079 --> 00:15:52,399 the 1960s. there is a clear word that 431 00:15:50,240 --> 00:15:55,199 can be used instead of a letter because 432 00:15:52,399 --> 00:15:57,279 aviation really really loves to use 433 00:15:55,199 --> 00:15:58,800 letters for everything. Each word 434 00:15:57,279 --> 00:16:01,199 basically has two rules. Number one is 435 00:15:58,800 --> 00:16:03,279 it starts with the letter that it 436 00:16:01,199 --> 00:16:06,079 represents which normal names of letters 437 00:16:03,279 --> 00:16:07,600 do not. Uh and number two is that it 438 00:16:06,079 --> 00:16:09,360 doesn't sound like any of the others. 439 00:16:07,600 --> 00:16:12,000 They all sound very distinct. So you 440 00:16:09,360 --> 00:16:13,600 have a for alpha, b for bravo, c for 441 00:16:12,000 --> 00:16:15,680 charlie, 442 00:16:13,600 --> 00:16:19,120 u for uniform. I have heard so many 443 00:16:15,680 --> 00:16:21,440 people say you for unicorn. 444 00:16:19,120 --> 00:16:25,199 It's close enough. If it works, it 445 00:16:21,440 --> 00:16:27,040 works. Why not? Exactly. Um, I'd heard 446 00:16:25,199 --> 00:16:29,519 of this. Yeah, cool. Something for like 447 00:16:27,040 --> 00:16:31,680 cops and fireflies, whatever to use. I 448 00:16:29,519 --> 00:16:33,040 didn't really get into it until I was 449 00:16:31,680 --> 00:16:34,399 trying to memorize it when I got into 450 00:16:33,040 --> 00:16:36,079 amateur radio a few years back. I think 451 00:16:34,399 --> 00:16:38,399 I've already shared this picture at PyCon 452 00:16:36,079 --> 00:16:40,000 maybe last year or the year before. This 453 00:16:38,399 --> 00:16:42,480 was me working with the Wavely Amateur 454 00:16:40,000 --> 00:16:45,199 Radio Society on an international radio 455 00:16:42,480 --> 00:16:47,680 communications contest. Yes, they have a 456 00:16:45,199 --> 00:16:49,519 contest for that. And no, it's probably 457 00:16:47,680 --> 00:16:52,079 not as exciting as watching last night's 458 00:16:49,519 --> 00:16:54,720 tram driving contest, which I still need 459 00:16:52,079 --> 00:16:56,880 to catch up on. But this uses shortwave 460 00:16:54,720 --> 00:16:58,639 radio communication. And shortwave radio 461 00:16:56,880 --> 00:17:00,560 relies on bouncing signals off the 462 00:16:58,639 --> 00:17:02,639 Earth's atmosphere. So, as the 463 00:17:00,560 --> 00:17:04,640 atmosphere shifts around, other stations 464 00:17:02,639 --> 00:17:07,120 will fade in, fade out. Can be very hard 465 00:17:04,640 --> 00:17:08,720 to hear them sometimes. By sometimes, 466 00:17:07,120 --> 00:17:09,839 most of the time, in my experience, 467 00:17:08,720 --> 00:17:11,120 particular if they're in another state 468 00:17:09,839 --> 00:17:13,439 or another country, you can reach 469 00:17:11,120 --> 00:17:16,160 overseas. No internet. not exactly the 470 00:17:13,439 --> 00:17:18,400 clearest signal. Or if you're visiting 471 00:17:16,160 --> 00:17:20,559 from interstate or overseas and you're 472 00:17:18,400 --> 00:17:21,839 on a plane into or out of Melbourne, you 473 00:17:20,559 --> 00:17:23,919 definitely wouldn't want them to mix 474 00:17:21,839 --> 00:17:26,160 things up. We've got the taxiway map 475 00:17:23,919 --> 00:17:29,120 here. Uh you wouldn't want to mix up B 476 00:17:26,160 --> 00:17:31,440 and C up the top. We've got M and N over 477 00:17:29,120 --> 00:17:34,799 to the left. Um or for the main runway, 478 00:17:31,440 --> 00:17:36,720 you've got B, C, G, and E, which all 479 00:17:34,799 --> 00:17:38,240 sound very similar. And you really want 480 00:17:36,720 --> 00:17:41,120 to make sure you land up at the right 481 00:17:38,240 --> 00:17:42,559 spot. and ideally not on a runway you 482 00:17:41,120 --> 00:17:45,280 not on a taxi way where there's another 483 00:17:42,559 --> 00:17:47,200 aircraft already standing there. But 484 00:17:45,280 --> 00:17:49,760 it's not just industry use. I've found 485 00:17:47,200 --> 00:17:50,880 uses for this in everyday life. Um as a 486 00:17:49,760 --> 00:17:52,400 practical example, since not 487 00:17:50,880 --> 00:17:54,240 everything's digitized, I was on a phone 488 00:17:52,400 --> 00:17:56,880 call a few years back with my car 489 00:17:54,240 --> 00:17:59,120 insurance and they wanted my 17digit 490 00:17:56,880 --> 00:18:00,720 VIN, the vehicle identification number, 491 00:17:59,120 --> 00:18:02,480 which by the way, did you know that 492 00:18:00,720 --> 00:18:04,720 that's also a standard? It's not just a 493 00:18:02,480 --> 00:18:06,559 random series of numbers and letters. 494 00:18:04,720 --> 00:18:10,080 Um, but it's really not fun when you've 495 00:18:06,559 --> 00:18:11,919 got 17 17 digits, a bad phone line cuz 496 00:18:10,080 --> 00:18:14,799 they've offshored their phone support to 497 00:18:11,919 --> 00:18:16,240 some other country. Um, and so many 498 00:18:14,799 --> 00:18:18,320 letters sound the same. It reminded me 499 00:18:16,240 --> 00:18:20,880 of Windows product activation by phone, 500 00:18:18,320 --> 00:18:22,880 but it was worse. Using phonetics helped 501 00:18:20,880 --> 00:18:24,400 a lot here, though not everyone expects 502 00:18:22,880 --> 00:18:25,679 it. I was once on a phone call with the 503 00:18:24,400 --> 00:18:27,440 police. When I started using phonetics, 504 00:18:25,679 --> 00:18:29,919 I officer just kind of froze and they're 505 00:18:27,440 --> 00:18:31,919 like, "Are you a police officer?" I was 506 00:18:29,919 --> 00:18:34,000 like, "No, you you don't need to be a 507 00:18:31,919 --> 00:18:36,160 police officer to use phonetics." So I 508 00:18:34,000 --> 00:18:38,160 strongly suggest people could go off try 509 00:18:36,160 --> 00:18:40,240 learn this it becomes much easier to 510 00:18:38,160 --> 00:18:43,280 read out letters when you're spelling 511 00:18:40,240 --> 00:18:45,440 things and as well as or instead of if 512 00:18:43,280 --> 00:18:47,039 you want to be cheeky there's the native 513 00:18:45,440 --> 00:18:49,600 phonetic alphabet and then someone came 514 00:18:47,039 --> 00:18:54,000 up with the anti-phenetic alphabet we 515 00:18:49,600 --> 00:18:58,000 have gems like C for Q as in key and the 516 00:18:54,000 --> 00:19:00,480 one I had to Google T as in ulong so you 517 00:18:58,000 --> 00:19:02,880 can guarantee confusion 518 00:19:00,480 --> 00:19:04,400 wherever you go 519 00:19:02,880 --> 00:19:06,000 That's it from me. You can find more of 520 00:19:04,400 --> 00:19:08,300 me online at this URL or offline in the 521 00:19:06,000 --> 00:19:11,120 hallways outside. Thank you. 522 00:19:08,300 --> 00:19:15,840 [Music] 523 00:19:11,120 --> 00:19:19,600 Uh thank you Yankee. Um Morgan, you are 524 00:19:15,840 --> 00:19:23,280 next. Uh but first, uh Christopher is 525 00:19:19,600 --> 00:19:26,280 going to talk to us about um driving 526 00:19:23,280 --> 00:19:26,280 illegally, 527 00:19:26,400 --> 00:19:31,360 something like that. Hi. Uh, my name is 528 00:19:29,919 --> 00:19:33,440 Christopher Phillips and I am a 529 00:19:31,360 --> 00:19:35,120 recovering game developer. 530 00:19:33,440 --> 00:19:36,880 Hi Christopher. 531 00:19:35,120 --> 00:19:38,320 Thanks for sharing. 532 00:19:36,880 --> 00:19:40,320 I'm currently working at the Curtain 533 00:19:38,320 --> 00:19:41,679 Institute of Radio Astronomy maintaining 534 00:19:40,320 --> 00:19:44,000 software at the core of the Merches and 535 00:19:41,679 --> 00:19:45,600 Widefield Array radio telescope. And 536 00:19:44,000 --> 00:19:47,760 this is a short version of a longer talk 537 00:19:45,600 --> 00:19:51,039 I gave somewhere else about a year ago. 538 00:19:47,760 --> 00:19:53,200 Uh, let's rewind a few years, 539 00:19:51,039 --> 00:19:55,919 right? As a teenager, the computer to 540 00:19:53,200 --> 00:19:58,559 have was the Commodore 64. 541 00:19:55,919 --> 00:20:00,000 Yay. Many people fans cool. My friends 542 00:19:58,559 --> 00:20:01,760 and I spent a fair amount of time 543 00:20:00,000 --> 00:20:02,799 playing computer games, uh, but were 544 00:20:01,760 --> 00:20:04,559 just as interested in the idea of 545 00:20:02,799 --> 00:20:06,720 writing them. Many grand designs were 546 00:20:04,559 --> 00:20:08,559 out loud, outlined on pen and paper, a 547 00:20:06,720 --> 00:20:10,160 few code fragments written, but nothing 548 00:20:08,559 --> 00:20:11,840 concrete or publishable. High school 549 00:20:10,160 --> 00:20:16,240 ended, we went our separate ways, and I 550 00:20:11,840 --> 00:20:18,480 dove into an engineering degree at UWA. 551 00:20:16,240 --> 00:20:19,919 Um, now the degree started out giving 552 00:20:18,480 --> 00:20:21,440 you a pretty broad grounding. Even if 553 00:20:19,919 --> 00:20:22,720 you're eventually doing coding or 554 00:20:21,440 --> 00:20:24,000 electronics, you still had to start out 555 00:20:22,720 --> 00:20:25,679 with some mechanical and civil 556 00:20:24,000 --> 00:20:27,039 engineering units. This turned out to be 557 00:20:25,679 --> 00:20:29,919 pretty useful later on. and I'm a big 558 00:20:27,039 --> 00:20:31,440 fan of broad degrees. Um, that's also 559 00:20:29,919 --> 00:20:33,200 where I became a member of the 560 00:20:31,440 --> 00:20:35,520 university computer club, uh, pictured 561 00:20:33,200 --> 00:20:36,880 in the bottom right there. And I spent 562 00:20:35,520 --> 00:20:38,480 just as much time in the club room 563 00:20:36,880 --> 00:20:40,799 tinkering on old machines as I did in my 564 00:20:38,480 --> 00:20:42,320 formal studies, probably more. Um, 565 00:20:40,799 --> 00:20:44,720 particularly continuing to try and teach 566 00:20:42,320 --> 00:20:47,120 my Commodore 64 new tricks despite its 567 00:20:44,720 --> 00:20:50,799 waning commercial value. 568 00:20:47,120 --> 00:20:51,919 Um, so that said, although Commodore 64s 569 00:20:50,799 --> 00:20:53,280 aren't a thing you can sell games for 570 00:20:51,919 --> 00:20:55,200 anymore, after all, I make more than 571 00:20:53,280 --> 00:20:56,720 maybe a few hundred. A constant with 572 00:20:55,200 --> 00:20:58,159 games consoles is they're designed to be 573 00:20:56,720 --> 00:20:59,600 cheap to make with only just enough 574 00:20:58,159 --> 00:21:00,960 grunt that a good developer can make 575 00:20:59,600 --> 00:21:03,280 shinier games than the ones coming out 576 00:21:00,960 --> 00:21:04,880 from competing hardware. So given that 577 00:21:03,280 --> 00:21:06,400 when I finally took a run at applying 578 00:21:04,880 --> 00:21:07,840 for some games positions a few years 579 00:21:06,400 --> 00:21:09,760 later, studios were just as interested 580 00:21:07,840 --> 00:21:11,280 in my tales of Commodore 64 fast loaders 581 00:21:09,760 --> 00:21:13,440 and sprite multiplexes as there were in 582 00:21:11,280 --> 00:21:15,039 my degree and that helped me get a job 583 00:21:13,440 --> 00:21:16,400 at Reflection Interactive in the north 584 00:21:15,039 --> 00:21:18,720 of England helping develop a whole 585 00:21:16,400 --> 00:21:20,559 series of driving games. 586 00:21:18,720 --> 00:21:22,720 Hands up if you've ever played any of 587 00:21:20,559 --> 00:21:24,880 Driver or Driver 2 or Driver 3 or 588 00:21:22,720 --> 00:21:28,159 Stuntman. There are some really old 589 00:21:24,880 --> 00:21:30,640 people in the audience here. 590 00:21:28,159 --> 00:21:32,559 Um, one of my first really interesting 591 00:21:30,640 --> 00:21:34,400 tasks was to replace an older 2D racing 592 00:21:32,559 --> 00:21:36,159 simulation with a full 3D physical model 593 00:21:34,400 --> 00:21:37,919 of how a car accelerates, hand does 594 00:21:36,159 --> 00:21:39,120 handbrake turns and corners. And for 595 00:21:37,919 --> 00:21:41,039 that, my first few mechanical 596 00:21:39,120 --> 00:21:43,919 engineering was a godsend. A lot of 597 00:21:41,039 --> 00:21:46,320 integration of 3D maths and vector 598 00:21:43,919 --> 00:21:48,400 arithmetic and things. Now, the third 599 00:21:46,320 --> 00:21:50,320 game I worked on 600 00:21:48,400 --> 00:21:52,000 um marked the company's transition to a 601 00:21:50,320 --> 00:21:54,799 new hardware platform, the PS2. And we 602 00:21:52,000 --> 00:21:56,400 really wanted to show off how much 603 00:21:54,799 --> 00:21:58,720 detail we could get in models of cities 604 00:21:56,400 --> 00:22:00,320 like and the like. We sent artists out 605 00:21:58,720 --> 00:22:01,840 to take thousands of reference photos 606 00:22:00,320 --> 00:22:02,960 before they modeled dozens of different 607 00:22:01,840 --> 00:22:04,240 districts and all these different 608 00:22:02,960 --> 00:22:06,159 architectural styles and famous 609 00:22:04,240 --> 00:22:07,600 landmarks. Question is, how do you fit 610 00:22:06,159 --> 00:22:10,240 all that into a games console that's 611 00:22:07,600 --> 00:22:12,400 only got 32 megabytes of RAM? Short 612 00:22:10,240 --> 00:22:15,120 version is im custom image compression 613 00:22:12,400 --> 00:22:16,799 codecs, clever data streaming systems, 614 00:22:15,120 --> 00:22:19,520 um, and a few other bits and pieces 615 00:22:16,799 --> 00:22:21,520 along the way. uh cutting a bit closer 616 00:22:19,520 --> 00:22:24,159 to the present day. I recently had a 617 00:22:21,520 --> 00:22:25,919 opportunity to optimize some code for a 618 00:22:24,159 --> 00:22:27,760 some spatial ecologists monitoring plant 619 00:22:25,919 --> 00:22:30,720 health along creek beds near mine sites 620 00:22:27,760 --> 00:22:32,720 in areas of WA. They 10 centimeter 621 00:22:30,720 --> 00:22:34,000 resolution area surveys across dozens of 622 00:22:32,720 --> 00:22:36,240 square kilometers. That's about 3 623 00:22:34,000 --> 00:22:38,240 billion pixels per site. Um with each 624 00:22:36,240 --> 00:22:40,000 pixel having RGB color, a ground 625 00:22:38,240 --> 00:22:41,919 altitude, canopy altitude, vegetation 626 00:22:40,000 --> 00:22:43,679 classification, way too much to fit into 627 00:22:41,919 --> 00:22:46,000 a desktop computer. and their attempts 628 00:22:43,679 --> 00:22:47,520 to run the reports that had been just 629 00:22:46,000 --> 00:22:50,080 fine on small sites were really 630 00:22:47,520 --> 00:22:52,799 struggling on um monitoring entire 631 00:22:50,080 --> 00:22:54,320 multicometers creek beds. Um even if 632 00:22:52,799 --> 00:22:56,960 they threw more hardware, it just ran 633 00:22:54,320 --> 00:22:58,240 for a week and crashed. And to me, I 634 00:22:56,960 --> 00:22:59,679 noticed that's really not that different 635 00:22:58,240 --> 00:23:01,120 to grabbing just enough imagery of a 636 00:22:59,679 --> 00:23:02,720 game disc to render the scenery along a 637 00:23:01,120 --> 00:23:05,520 route taken by a car touring across a 638 00:23:02,720 --> 00:23:08,640 city. So 639 00:23:05,520 --> 00:23:10,240 I improved the usage of numpy, made it a 640 00:23:08,640 --> 00:23:12,320 bit more idatic, a few less loops in 641 00:23:10,240 --> 00:23:13,760 Python, a few more underlining C, but 642 00:23:12,320 --> 00:23:14,880 also used a lot of game development 643 00:23:13,760 --> 00:23:16,720 techniques for optimizing the 644 00:23:14,880 --> 00:23:18,559 calculation, streaming tiled compressed 645 00:23:16,720 --> 00:23:20,880 data to reduce memory footprint, IO 646 00:23:18,559 --> 00:23:22,159 bandwidth, and storage requirements. Uh, 647 00:23:20,880 --> 00:23:23,760 through all this managed to get one of 648 00:23:22,159 --> 00:23:25,280 the reports down from taking a week and 649 00:23:23,760 --> 00:23:26,799 probably not even finishing to taking 650 00:23:25,280 --> 00:23:28,240 about half an hour on a desktop PC in 651 00:23:26,799 --> 00:23:30,240 the office. I was pretty happy with 652 00:23:28,240 --> 00:23:32,080 that. 653 00:23:30,240 --> 00:23:33,520 Um, I know all that without moving away 654 00:23:32,080 --> 00:23:35,600 from Python. didn't have to write a sing 655 00:23:33,520 --> 00:23:39,120 rewrite a single line in Python or Rust 656 00:23:35,600 --> 00:23:41,760 in C rust. Python all the way. Um, 657 00:23:39,120 --> 00:23:43,360 moving on, my current position started 658 00:23:41,760 --> 00:23:44,720 out with lunch with another old unique 659 00:23:43,360 --> 00:23:46,480 contact who organized with his team 660 00:23:44,720 --> 00:23:47,679 leader. Um, I wasn't that keen on 661 00:23:46,480 --> 00:23:49,039 commuting, but he was like, "No, just 662 00:23:47,679 --> 00:23:50,960 come and have a chat with Greg, see what 663 00:23:49,039 --> 00:23:52,480 we've got in common." I shared my 664 00:23:50,960 --> 00:23:54,720 stories of compressing and streaming 665 00:23:52,480 --> 00:23:56,240 vast maps of data, how video games had 666 00:23:54,720 --> 00:23:57,280 been useful prep for spatial ecology, 667 00:23:56,240 --> 00:23:59,440 and how I've been messing around with 668 00:23:57,280 --> 00:24:01,440 for transforms for various things on a 669 00:23:59,440 --> 00:24:03,200 range of platforms over the years. In 670 00:24:01,440 --> 00:24:05,280 return, Greg waxed lyrical about a novel 671 00:24:03,200 --> 00:24:06,799 radio telescope featuring thousands of 672 00:24:05,280 --> 00:24:09,039 little radio antennas scattered across 673 00:24:06,799 --> 00:24:10,559 the desert that steered by changing the 674 00:24:09,039 --> 00:24:13,440 delays with which they listen signals 675 00:24:10,559 --> 00:24:14,720 rather than moving big dishes around. At 676 00:24:13,440 --> 00:24:16,720 the core of the telescope were some 677 00:24:14,720 --> 00:24:18,559 monolithic C programs thousands of lines 678 00:24:16,720 --> 00:24:19,600 long running on a little server a few 679 00:24:18,559 --> 00:24:22,640 kilometers down the road from the 680 00:24:19,600 --> 00:24:24,960 receiver. Um, one colle they collected 681 00:24:22,640 --> 00:24:25,760 heaps of data um, correlations and 682 00:24:24,960 --> 00:24:29,279 things. 683 00:24:25,760 --> 00:24:31,200 Thank you so much, Christopher. Stop. 684 00:24:29,279 --> 00:24:33,520 Well done everyone. Thank you so much 685 00:24:31,200 --> 00:24:35,200 Christopher for taking us on a whole 686 00:24:33,520 --> 00:24:38,559 bunch of different topics. Up next on 687 00:24:35,200 --> 00:24:40,480 this side is Matt Sangia. But first 688 00:24:38,559 --> 00:24:43,679 taking us from running rivers to runtime 689 00:24:40,480 --> 00:24:45,760 semantics is Morgan Bartholomew. 690 00:24:43,679 --> 00:24:47,760 Hello everyone. Uh today I will be 691 00:24:45,760 --> 00:24:49,120 talking about binary operation runtime 692 00:24:47,760 --> 00:24:52,400 semantics and their type system 693 00:24:49,120 --> 00:24:54,080 implications. So I hope to explain what 694 00:24:52,400 --> 00:24:55,440 is happening in this expression by the 695 00:24:54,080 --> 00:24:58,799 end of this talk and what it means for 696 00:24:55,440 --> 00:25:01,679 type checkers. So if we look at a simple 697 00:24:58,799 --> 00:25:04,320 case of a object that supports a binary 698 00:25:01,679 --> 00:25:06,640 operation in this example plus um we 699 00:25:04,320 --> 00:25:08,960 just have a add dunder fairly simple to 700 00:25:06,640 --> 00:25:11,279 understand. We would then move on to the 701 00:25:08,960 --> 00:25:15,400 right hand dunder which operates when 702 00:25:11,279 --> 00:25:15,400 the value is on the right hand side. 703 00:25:15,760 --> 00:25:20,320 We also have the inline dunder which is 704 00:25:18,400 --> 00:25:23,039 called when you use the plus equals 705 00:25:20,320 --> 00:25:24,799 augmented assignment operator. 706 00:25:23,039 --> 00:25:27,919 The way that these work in combination 707 00:25:24,799 --> 00:25:30,559 is that one dunder will return the 708 00:25:27,919 --> 00:25:33,120 notimplemented singleton which will then 709 00:25:30,559 --> 00:25:35,679 be which will then pass the execution on 710 00:25:33,120 --> 00:25:37,840 to the right hand side objects right- 711 00:25:35,679 --> 00:25:40,080 hand version of that dunder. So in this 712 00:25:37,840 --> 00:25:41,840 case it would call the add dunder which 713 00:25:40,080 --> 00:25:44,240 will then return not implemented and 714 00:25:41,840 --> 00:25:47,520 then it will call writes rd dunder and 715 00:25:44,240 --> 00:25:49,200 return three. 716 00:25:47,520 --> 00:25:51,120 The next complexity in this system is 717 00:25:49,200 --> 00:25:52,960 the right hand subtype rule. So what 718 00:25:51,120 --> 00:25:56,000 this means is when the right hand side 719 00:25:52,960 --> 00:25:58,799 is a subtype of the type of the left 720 00:25:56,000 --> 00:26:01,279 hand side value then the interpreter 721 00:25:58,799 --> 00:26:06,880 will invoke the right hand dunder first 722 00:26:01,279 --> 00:26:09,279 before moving on to the normal dunder. 723 00:26:06,880 --> 00:26:12,240 These all combine when using a augmented 724 00:26:09,279 --> 00:26:14,320 assignment operator. So in this case we 725 00:26:12,240 --> 00:26:17,279 will see the I add being invoked first. 726 00:26:14,320 --> 00:26:20,480 It superseds the other operators. then 727 00:26:17,279 --> 00:26:23,480 the add operator, then the R add 728 00:26:20,480 --> 00:26:23,480 operator. 729 00:26:23,919 --> 00:26:27,520 A reimplementation of this in Python 730 00:26:25,600 --> 00:26:31,520 would look something like this. We start 731 00:26:27,520 --> 00:26:33,360 by checking the IAD. If it exists, we 732 00:26:31,520 --> 00:26:35,840 call it. If it returns not implemented, 733 00:26:33,360 --> 00:26:38,960 we move on. We then go through checking 734 00:26:35,840 --> 00:26:40,159 the RAD. We check the um subtype rule. 735 00:26:38,960 --> 00:26:42,480 We would then move on to checking the 736 00:26:40,159 --> 00:26:44,480 ad. And then finally, the R ad if it was 737 00:26:42,480 --> 00:26:45,919 not invoked previously. If none of these 738 00:26:44,480 --> 00:26:48,240 exist, then we'd raise an attribute 739 00:26:45,919 --> 00:26:48,240 error. 740 00:26:48,640 --> 00:26:54,240 So what do these rules what implications 741 00:26:52,320 --> 00:26:56,720 they have in the type system and type 742 00:26:54,240 --> 00:26:58,880 checkers? 743 00:26:56,720 --> 00:27:01,039 So currently if you annotated the return 744 00:26:58,880 --> 00:27:02,880 type as not implemented 745 00:27:01,039 --> 00:27:04,799 all of the type checkers will not 746 00:27:02,880 --> 00:27:06,320 understand these semantics and will say 747 00:27:04,799 --> 00:27:08,240 that this operator returns not 748 00:27:06,320 --> 00:27:11,600 implemented type when in reality this 749 00:27:08,240 --> 00:27:14,559 will raise an attribute error. 750 00:27:11,600 --> 00:27:16,159 This results in some unsoundness when 751 00:27:14,559 --> 00:27:17,679 this value will actually return a 752 00:27:16,159 --> 00:27:19,520 string, but the type checker thinks it 753 00:27:17,679 --> 00:27:22,520 returns an instance of not implemented 754 00:27:19,520 --> 00:27:22,520 type. 755 00:27:24,240 --> 00:27:29,279 In this case, at runtime, it's returning 756 00:27:27,120 --> 00:27:30,720 a string, but the type checker thinks 757 00:27:29,279 --> 00:27:32,640 it's returning an int. Oh, and by the 758 00:27:30,720 --> 00:27:35,640 way, I'm using ty for all of these 759 00:27:32,640 --> 00:27:35,640 examples. 760 00:27:36,000 --> 00:27:42,480 Um here when we have a 761 00:27:39,200 --> 00:27:44,159 right-hand operator that returns an 762 00:27:42,480 --> 00:27:47,600 incompatible type with the left hand 763 00:27:44,159 --> 00:27:50,080 operator, it's very important that we 764 00:27:47,600 --> 00:27:54,080 understand what the possible value will 765 00:27:50,080 --> 00:27:57,440 be. In this case, ty and it's um agrees 766 00:27:54,080 --> 00:27:59,120 with my here that it would return int 767 00:27:57,440 --> 00:28:02,320 which is wrong. it'll actually return a 768 00:27:59,120 --> 00:28:03,520 string. And this is because these type 769 00:28:02,320 --> 00:28:06,159 checkers have implemented the right-h 770 00:28:03,520 --> 00:28:08,320 hand rule incorrectly. And it assumes 771 00:28:06,159 --> 00:28:10,640 that because the left hand side is a 772 00:28:08,320 --> 00:28:13,200 left and it the right hand side is also 773 00:28:10,640 --> 00:28:15,039 a left, it does not take into 774 00:28:13,200 --> 00:28:16,640 consideration the possibility that the 775 00:28:15,039 --> 00:28:18,399 right hand is actually a subtype of the 776 00:28:16,640 --> 00:28:19,840 left hand. So it will say it returns an 777 00:28:18,399 --> 00:28:21,279 int when it will actually invoke the 778 00:28:19,840 --> 00:28:24,520 right hand operator and not the left 779 00:28:21,279 --> 00:28:24,520 hand operator. 780 00:28:25,600 --> 00:28:33,039 In this case, we have the inverse where 781 00:28:29,600 --> 00:28:36,640 the right hand side is 782 00:28:33,039 --> 00:28:39,039 being um wait what? 783 00:28:36,640 --> 00:28:43,039 Oh yeah, the other way around. The left 784 00:28:39,039 --> 00:28:45,279 hand side is um a subtype of the left 785 00:28:43,039 --> 00:28:47,039 hand type. So the type checker here 786 00:28:45,279 --> 00:28:49,200 thinks that the right hand side is a 787 00:28:47,039 --> 00:28:50,880 subtype of the left hand side value, but 788 00:28:49,200 --> 00:28:53,760 actually the value on the left is a 789 00:28:50,880 --> 00:28:55,520 subtype of the left class. 790 00:28:53,760 --> 00:28:58,159 And the right hand side is not a subtype 791 00:28:55,520 --> 00:28:59,600 of this imposter class. So the type 792 00:28:58,159 --> 00:29:01,919 checker is incorrectly applying the 793 00:28:59,600 --> 00:29:03,520 right hand side subtype rule when it 794 00:29:01,919 --> 00:29:04,880 shouldn't be. And it says it returns a 795 00:29:03,520 --> 00:29:07,360 string when it will actually return an 796 00:29:04,880 --> 00:29:08,880 integer. 797 00:29:07,360 --> 00:29:11,679 So how can we fix this? How can we 798 00:29:08,880 --> 00:29:14,480 update the type checkers? What possible 799 00:29:11,679 --> 00:29:15,760 rules could we imply to or what rules 800 00:29:14,480 --> 00:29:18,760 could we add to get the correct 801 00:29:15,760 --> 00:29:18,760 behaviors? 802 00:29:19,679 --> 00:29:26,880 We can add validations on the subtypes 803 00:29:24,399 --> 00:29:29,919 for the corresponding right- hand side 804 00:29:26,880 --> 00:29:31,840 operators when they have an incompatible 805 00:29:29,919 --> 00:29:35,360 return type with the super types left 806 00:29:31,840 --> 00:29:38,559 hand side operator. We will say that 807 00:29:35,360 --> 00:29:40,799 this okay has to maintain compatibility. 808 00:29:38,559 --> 00:29:44,840 More examples. 809 00:29:40,799 --> 00:29:44,840 More examples. Thank you. 810 00:29:45,039 --> 00:29:48,640 Ah, 811 00:29:46,880 --> 00:29:51,679 thanks. Thanks, Morgan. That is one of 812 00:29:48,640 --> 00:29:55,679 my favorite types of talk. 813 00:29:51,679 --> 00:29:58,559 Uh, Brianna, you are on deck. Um, when I 814 00:29:55,679 --> 00:30:00,000 wasuling today's lightning talks, um, I 815 00:29:58,559 --> 00:30:02,080 had great difficulty trying to figure 816 00:30:00,000 --> 00:30:04,399 out what to, uh, follow up a talk about 817 00:30:02,080 --> 00:30:06,480 binary operations with. Anyway, here's 818 00:30:04,399 --> 00:30:09,520 Matt. Please make them welcome. 819 00:30:06,480 --> 00:30:11,440 [Music] 820 00:30:09,520 --> 00:30:13,760 Thank you, Chris. 821 00:30:11,440 --> 00:30:17,200 Um, can you all hear me? 822 00:30:13,760 --> 00:30:19,679 Yep. Cool. Uh so uh I suspect a lot of 823 00:30:17,200 --> 00:30:21,600 you have heard about or used uh Jupyter 824 00:30:19,679 --> 00:30:24,960 notebooks before. If you haven't, uh 825 00:30:21,600 --> 00:30:26,640 Jupyter Notebook is a way to um 826 00:30:24,960 --> 00:30:28,320 basically via a web page create a 827 00:30:26,640 --> 00:30:30,159 notebook of information that is 828 00:30:28,320 --> 00:30:33,039 interactive and has runnable Python 829 00:30:30,159 --> 00:30:36,240 code. Um Jupyter Notebooks and Jupyter 830 00:30:33,039 --> 00:30:38,399 Lab and um IPython have been around for 831 00:30:36,240 --> 00:30:40,559 quite some time now. uh I think that 832 00:30:38,399 --> 00:30:42,480 they've built a bit of a legacy and have 833 00:30:40,559 --> 00:30:44,080 got some historical design decisions 834 00:30:42,480 --> 00:30:47,039 that I think that we could do a little 835 00:30:44,080 --> 00:30:48,640 bit better with these days with you know 836 00:30:47,039 --> 00:30:49,679 now that we've learned from some of the 837 00:30:48,640 --> 00:30:52,640 stuff that's been that's been done 838 00:30:49,679 --> 00:30:54,799 there. Um and a couple years ago I 839 00:30:52,640 --> 00:30:58,640 learned about a new up and coming 840 00:30:54,799 --> 00:31:00,399 notebook framework called MIMO. Um and 841 00:30:58,640 --> 00:31:02,559 so I'm going to tell you a little bit 842 00:31:00,399 --> 00:31:04,480 about it. So let's have a look at this. 843 00:31:02,559 --> 00:31:07,520 This is an IPython notebook for now. 844 00:31:04,480 --> 00:31:09,039 Sorry, a a Jupyter notebook. So we've 845 00:31:07,520 --> 00:31:13,279 got a notebook. It's running in our 846 00:31:09,039 --> 00:31:16,720 browser. Um if I go to display uh the 847 00:31:13,279 --> 00:31:19,120 contents of this notebook. Um so we're 848 00:31:16,720 --> 00:31:20,559 looking at the the file that contains 849 00:31:19,120 --> 00:31:22,799 the Python notebook. If I have a look at 850 00:31:20,559 --> 00:31:25,360 that. Oh, this is what happens when I do 851 00:31:22,799 --> 00:31:28,559 live demos, right? Um so the issue here 852 00:31:25,360 --> 00:31:31,200 is that I have run a cell and the that 853 00:31:28,559 --> 00:31:34,080 cell depended on the output of another 854 00:31:31,200 --> 00:31:36,080 cell. And so I have to run the notebook 855 00:31:34,080 --> 00:31:38,799 in a particular order, potentially 856 00:31:36,080 --> 00:31:41,039 sequentially from top to bottom, but not 857 00:31:38,799 --> 00:31:43,600 necessarily. Uh, in this case, I might 858 00:31:41,039 --> 00:31:46,000 want to put all of my imports uh for a 859 00:31:43,600 --> 00:31:49,120 notebook down the bottom out of the way 860 00:31:46,000 --> 00:31:52,159 and be able to use those further up, but 861 00:31:49,120 --> 00:31:53,679 I can't do that easily um with Jupiter 862 00:31:52,159 --> 00:31:55,760 because it's not going to know to go and 863 00:31:53,679 --> 00:31:57,120 run that. Um, so I'm going to go to the 864 00:31:55,760 --> 00:31:59,679 cell below. I'm going to pull in my 865 00:31:57,120 --> 00:32:01,519 imports, and then I'm going to fail 866 00:31:59,679 --> 00:32:04,000 miserably. Let's open that one. run that 867 00:32:01,519 --> 00:32:05,600 one as well. There we go. So, we're 868 00:32:04,000 --> 00:32:07,200 looking at the contents of this of this 869 00:32:05,600 --> 00:32:10,159 notebook file. And we can see it's a 870 00:32:07,200 --> 00:32:12,240 whole lot of JSON. Um, it's not super 871 00:32:10,159 --> 00:32:13,360 easy to maintain or work with. And if I 872 00:32:12,240 --> 00:32:15,360 wanted to just run this as a regular 873 00:32:13,360 --> 00:32:16,399 Python script, I'm going to have a few 874 00:32:15,360 --> 00:32:19,039 challenges. I'm going to have to go and 875 00:32:16,399 --> 00:32:21,519 convert it. It's a bit of a pain. Um, so 876 00:32:19,039 --> 00:32:24,240 let's have a look at the way this. So, 877 00:32:21,519 --> 00:32:26,240 if I open up my MIMO notebook, 878 00:32:24,240 --> 00:32:28,159 um, if I have a look at the contents of 879 00:32:26,240 --> 00:32:32,240 this notebook, 880 00:32:28,159 --> 00:32:35,760 I need to go and enable this cell. 881 00:32:32,240 --> 00:32:39,440 Um this notebook 882 00:32:35,760 --> 00:32:43,440 uh this notebook is pure Python. So it's 883 00:32:39,440 --> 00:32:45,600 imported marino marrimo sorry and each 884 00:32:43,440 --> 00:32:49,200 cell in the notebook is an anonymous 885 00:32:45,600 --> 00:32:50,880 function. So we can 886 00:32:49,200 --> 00:32:52,240 go and copy the code out of each cell 887 00:32:50,880 --> 00:32:53,840 and put it into a regular Python script 888 00:32:52,240 --> 00:32:56,159 and it will just work. You can also use 889 00:32:53,840 --> 00:32:59,279 MIMO to run the notebook as a regular 890 00:32:56,159 --> 00:33:01,440 Python script and it's I think rather 891 00:32:59,279 --> 00:33:03,360 easy to read. So if I go a little bit 892 00:33:01,440 --> 00:33:05,200 further down, one of the other benefits 893 00:33:03,360 --> 00:33:07,600 of Mimo is that it's built in with a 894 00:33:05,200 --> 00:33:09,840 whole bunch of stuff that didn't come 895 00:33:07,600 --> 00:33:12,000 with Jupiter notebooks but has, you 896 00:33:09,840 --> 00:33:14,240 know, is available as add-ons, but um 897 00:33:12,000 --> 00:33:16,320 MIMO has a lot more stuff that they make 898 00:33:14,240 --> 00:33:19,200 natively available. One of those things 899 00:33:16,320 --> 00:33:21,039 is duck DB. So um one of the things that 900 00:33:19,200 --> 00:33:25,600 I can do with duct DB is I can say I 901 00:33:21,039 --> 00:33:28,320 would like to open uh a JSON file and 902 00:33:25,600 --> 00:33:31,279 put it into a pandas dataf frame and I 903 00:33:28,320 --> 00:33:33,279 can view that data frame here in a 904 00:33:31,279 --> 00:33:34,960 pretty table with a whole bunch of like 905 00:33:33,279 --> 00:33:37,039 frequency distribution stuff. And then 906 00:33:34,960 --> 00:33:39,600 what I've done to view the table is I 907 00:33:37,039 --> 00:33:41,120 have used raw SQL. I haven't had to do 908 00:33:39,600 --> 00:33:42,880 anything else in this cell. This is an 909 00:33:41,120 --> 00:33:44,799 SQL 910 00:33:42,880 --> 00:33:48,000 an SQL cell and I've been able to use 911 00:33:44,799 --> 00:33:50,559 raw SQL to display the contents of this 912 00:33:48,000 --> 00:33:52,480 spreadsheet this um table. Likewise, I 913 00:33:50,559 --> 00:33:54,960 can use other raw SQL where I can go and 914 00:33:52,480 --> 00:33:56,480 filter it. Um I could change this to 915 00:33:54,960 --> 00:33:58,000 Europe 916 00:33:56,480 --> 00:34:00,240 and it'll go and change the contents 917 00:33:58,000 --> 00:34:02,960 there. Um, and the other thing that I 918 00:34:00,240 --> 00:34:04,720 can do is I can have, and this is 919 00:34:02,960 --> 00:34:06,080 available again in Jupiter as well, but 920 00:34:04,720 --> 00:34:09,760 um, I feel like it was a little easier 921 00:34:06,080 --> 00:34:12,480 for me to get this working in Mimo. Um, 922 00:34:09,760 --> 00:34:14,639 was that I can add a widget here, and I 923 00:34:12,480 --> 00:34:16,079 can say, "Show me cars that are that 924 00:34:14,639 --> 00:34:18,960 have at least this many miles per 925 00:34:16,079 --> 00:34:20,639 gallon." Um, and we can also see that 926 00:34:18,960 --> 00:34:22,879 way down the bottom here, here are my 927 00:34:20,639 --> 00:34:26,000 imports for Maro and Pandas. And the way 928 00:34:22,879 --> 00:34:27,440 this works is that each, if I go back up 929 00:34:26,000 --> 00:34:29,040 to the top here, I've got 40 seconds. 930 00:34:27,440 --> 00:34:30,639 This is fine. If I go back back up the 931 00:34:29,040 --> 00:34:35,040 top, we can see that the cell at the 932 00:34:30,639 --> 00:34:38,639 bottom returns my two imports. 933 00:34:35,040 --> 00:34:41,040 And if I go further up to the top, 934 00:34:38,639 --> 00:34:43,359 uh where's it gone? Here, we can see 935 00:34:41,040 --> 00:34:46,560 that it takes in 936 00:34:43,359 --> 00:34:49,280 a lot of those imports as arguments so 937 00:34:46,560 --> 00:34:50,800 that it can do internal dependency 938 00:34:49,280 --> 00:34:52,639 ordering without me having to think 939 00:34:50,800 --> 00:34:54,399 about it. And if I were to run this 940 00:34:52,639 --> 00:34:56,079 cell, it would make sure that all the 941 00:34:54,399 --> 00:34:57,119 the prior cells have already been run. 942 00:34:56,079 --> 00:34:58,640 There's a whole bunch of other stuff 943 00:34:57,119 --> 00:35:00,560 that you can do with MIMO. I highly 944 00:34:58,640 --> 00:35:04,359 recommend you check it out.app and 945 00:35:00,560 --> 00:35:04,359 marrimo.io are there. 946 00:35:08,160 --> 00:35:12,320 Thank you so much, Matt. Um, while 947 00:35:10,560 --> 00:35:13,760 lightning talks are going on, we're 948 00:35:12,320 --> 00:35:15,440 setting up the next person, but all I 949 00:35:13,760 --> 00:35:16,640 can just hear is ooze every 10 seconds. 950 00:35:15,440 --> 00:35:20,480 I'm really excited to go back and watch 951 00:35:16,640 --> 00:35:22,640 that one. Um, up on this side next is 952 00:35:20,480 --> 00:35:25,119 Evan. But in the meantime, it's not 953 00:35:22,640 --> 00:35:28,720 lightning talks unless there's some 954 00:35:25,119 --> 00:35:33,160 controversy. So, Brianna Argo is here to 955 00:35:28,720 --> 00:35:33,160 talk to us about some more about fish. 956 00:35:34,160 --> 00:35:38,119 So, I thought it would be 957 00:35:38,160 --> 00:35:42,079 I thought given that it's my first pyon, 958 00:35:40,240 --> 00:35:43,760 the way to make a good impression at the 959 00:35:42,079 --> 00:35:46,480 start would be to challenge something 960 00:35:43,760 --> 00:35:49,480 someone said yesterday. 961 00:35:46,480 --> 00:35:49,480 Stop. 962 00:35:49,520 --> 00:35:54,960 So why listen to me? To establish some 963 00:35:52,000 --> 00:35:56,560 credibility, uh I'm currently a masters 964 00:35:54,960 --> 00:35:59,040 of health data science student, but 965 00:35:56,560 --> 00:36:01,040 previously I majored in ecology and 966 00:35:59,040 --> 00:36:02,880 conservation biology. And as part of 967 00:36:01,040 --> 00:36:05,040 that, I did an honors project and I've 968 00:36:02,880 --> 00:36:06,560 copied some slides directly that had 969 00:36:05,040 --> 00:36:08,720 nothing to do with taxonomy or 970 00:36:06,560 --> 00:36:11,200 classification. But as you can see, 971 00:36:08,720 --> 00:36:13,359 there's a picture of a fish on this 972 00:36:11,200 --> 00:36:15,920 slide. 973 00:36:13,359 --> 00:36:17,680 And if we look at the next one, it's got 974 00:36:15,920 --> 00:36:19,280 some equations and there's some partial 975 00:36:17,680 --> 00:36:22,190 derivatives. So clearly I'm a very 976 00:36:19,280 --> 00:36:24,720 technical and competent person. 977 00:36:22,190 --> 00:36:26,720 [Applause] 978 00:36:24,720 --> 00:36:28,640 So let's get on to the content of 979 00:36:26,720 --> 00:36:31,040 phoggenetic trees. These can also be 980 00:36:28,640 --> 00:36:32,960 called clatograms. And what you can see 981 00:36:31,040 --> 00:36:35,440 is the relationships of ancestry here. 982 00:36:32,960 --> 00:36:37,680 So you've got some common ancestor 983 00:36:35,440 --> 00:36:41,119 branches down and then you can see the 984 00:36:37,680 --> 00:36:44,720 subdivisions of the filer there. In a 985 00:36:41,119 --> 00:36:46,240 monopillettic tree, you have the recent 986 00:36:44,720 --> 00:36:48,320 common ancestor and all of the 987 00:36:46,240 --> 00:36:51,520 descendants a group together into the 988 00:36:48,320 --> 00:36:54,560 one monopilletic group. Another example 989 00:36:51,520 --> 00:36:58,560 of that is shown in this instance. 990 00:36:54,560 --> 00:37:01,440 But controversially perhaps other types 991 00:36:58,560 --> 00:37:03,760 of groupings are possible. So we can see 992 00:37:01,440 --> 00:37:07,040 here we have a polyilletic grouping 993 00:37:03,760 --> 00:37:09,599 where you do not have um everything 994 00:37:07,040 --> 00:37:11,040 flowing from the one common ancestor. we 995 00:37:09,599 --> 00:37:13,599 have different most recent common 996 00:37:11,040 --> 00:37:15,040 ancestors involved. 997 00:37:13,599 --> 00:37:18,640 So the takeaway here in terms of 998 00:37:15,040 --> 00:37:21,520 interpreting a follow a phogenetic tree 999 00:37:18,640 --> 00:37:23,200 is that in a monopilotic group you do 1000 00:37:21,520 --> 00:37:25,760 need to share the common ancestors and 1001 00:37:23,200 --> 00:37:27,200 so that rule about if these members are 1002 00:37:25,760 --> 00:37:30,000 in the group then we know that this 1003 00:37:27,200 --> 00:37:31,680 other member such as humans for instance 1004 00:37:30,000 --> 00:37:34,079 has to be in the group as well would 1005 00:37:31,680 --> 00:37:37,119 hold. If you don't have a monopilletic 1006 00:37:34,079 --> 00:37:38,800 group that's not necessarily the case. 1007 00:37:37,119 --> 00:37:42,880 I thought for my talk I would bring up 1008 00:37:38,800 --> 00:37:44,560 the definition of fish. And 1009 00:37:42,880 --> 00:37:47,119 so this is the first screenshot I found. 1010 00:37:44,560 --> 00:37:48,560 I just went to Mariam Webster. And here 1011 00:37:47,119 --> 00:37:50,560 it actually presented me with somewhat 1012 00:37:48,560 --> 00:37:53,280 of a problem. Uh you might see I've put 1013 00:37:50,560 --> 00:37:54,720 a box around starfish. And the problem 1014 00:37:53,280 --> 00:37:56,160 here is it shows me as a bit of a 1015 00:37:54,720 --> 00:37:58,000 hypocrite because I looked at that and I 1016 00:37:56,160 --> 00:38:00,000 went that's not starfish. We should be 1017 00:37:58,000 --> 00:38:02,079 calling them sea stars because they're 1018 00:38:00,000 --> 00:38:05,079 not fish. And I know that because of 1019 00:38:02,079 --> 00:38:05,079 phogenetics. 1020 00:38:05,200 --> 00:38:12,400 Stop. 1021 00:38:07,119 --> 00:38:15,280 If we if we look at the next uh proposed 1022 00:38:12,400 --> 00:38:16,800 definition um we can see that it's 1023 00:38:15,280 --> 00:38:19,119 describing some of the characteristics. 1024 00:38:16,800 --> 00:38:23,520 So it's telling us about the morphology 1025 00:38:19,119 --> 00:38:27,680 and we have that included in so I prefer 1026 00:38:23,520 --> 00:38:29,839 the second version sits happier with me. 1027 00:38:27,680 --> 00:38:31,119 But my morphology based definitions can 1028 00:38:29,839 --> 00:38:33,520 be quite limiting and have their own 1029 00:38:31,119 --> 00:38:36,320 issues as well. So if I say for instance 1030 00:38:33,520 --> 00:38:38,960 that a mammal is something that produces 1031 00:38:36,320 --> 00:38:41,440 milk and it has fur, then plenty of 1032 00:38:38,960 --> 00:38:43,280 mammals could be categorized under that. 1033 00:38:41,440 --> 00:38:45,390 But you might also have a bad drawing of 1034 00:38:43,280 --> 00:38:48,000 a coconut. 1035 00:38:45,390 --> 00:38:50,000 [Music] 1036 00:38:48,000 --> 00:38:51,680 But if we want to use this phoggenetic 1037 00:38:50,000 --> 00:38:53,520 based approach, then we might want to 1038 00:38:51,680 --> 00:38:54,800 consider what are our nodes. And usually 1039 00:38:53,520 --> 00:38:56,720 when you zoom in at the bottom, you 1040 00:38:54,800 --> 00:38:58,560 might have different species. So it's 1041 00:38:56,720 --> 00:39:01,280 important that we can consistently 1042 00:38:58,560 --> 00:39:03,440 consider what is a species. If we look 1043 00:39:01,280 --> 00:39:05,680 at the process of something becoming two 1044 00:39:03,440 --> 00:39:08,160 different species, we start with the one 1045 00:39:05,680 --> 00:39:10,320 population, they become more different 1046 00:39:08,160 --> 00:39:12,079 over time due to limited gene flow. 1047 00:39:10,320 --> 00:39:14,560 Typically there, this is some geographic 1048 00:39:12,079 --> 00:39:16,480 barrier. Um, and then because they're 1049 00:39:14,560 --> 00:39:18,000 not having that gene flow to keep them 1050 00:39:16,480 --> 00:39:20,400 more similar with each other, 1051 00:39:18,000 --> 00:39:21,760 differences increase until eventually 1052 00:39:20,400 --> 00:39:23,920 they get to the point where we've got 1053 00:39:21,760 --> 00:39:25,920 these two subpopuls that have split off. 1054 00:39:23,920 --> 00:39:27,680 They're so different members of them 1055 00:39:25,920 --> 00:39:29,599 can't create fertile offspring with each 1056 00:39:27,680 --> 00:39:31,520 other. And according to the biological 1057 00:39:29,599 --> 00:39:34,160 species concept, that's when they're 1058 00:39:31,520 --> 00:39:36,320 different species. 1059 00:39:34,160 --> 00:39:38,880 But there are many issues with this 1060 00:39:36,320 --> 00:39:41,680 definition as well. So for instance, we 1061 00:39:38,880 --> 00:39:44,240 have ring species. Imagine a group of 1062 00:39:41,680 --> 00:39:46,400 lizards all around this canyon and 1063 00:39:44,240 --> 00:39:48,160 pair-wise they have that compatibility, 1064 00:39:46,400 --> 00:39:49,599 but the ones far across from each other 1065 00:39:48,160 --> 00:39:52,320 don't. Would you consider them the same 1066 00:39:49,599 --> 00:39:55,119 species or not? Another thing we might 1067 00:39:52,320 --> 00:39:57,440 consider is what if they're an asexual 1068 00:39:55,119 --> 00:39:59,680 type of lizard and so we don't have that 1069 00:39:57,440 --> 00:40:02,480 reproduction criteria to look at. You 1070 00:39:59,680 --> 00:40:04,160 could think even differently. What about 1071 00:40:02,480 --> 00:40:07,440 if we have viruses and you've got 1072 00:40:04,160 --> 00:40:10,240 horizontal gene transfer? So there is no 1073 00:40:07,440 --> 00:40:12,079 perfect objective generalizable rule set 1074 00:40:10,240 --> 00:40:14,160 for classifying life. My righteous 1075 00:40:12,079 --> 00:40:18,040 indignation that I had yesterday might 1076 00:40:14,160 --> 00:40:18,040 have been a little bit mistaken. 1077 00:40:18,400 --> 00:40:23,119 And I think the takeaway here is to 1078 00:40:20,720 --> 00:40:24,960 consider what makes sense for your users 1079 00:40:23,119 --> 00:40:26,640 and what makes sense for the purpose and 1080 00:40:24,960 --> 00:40:29,640 context you're applying it for. Thank 1081 00:40:26,640 --> 00:40:29,640 you. 1082 00:40:34,320 --> 00:40:38,880 Oh, thank you for that. I I love these 1083 00:40:36,400 --> 00:40:40,960 response talks. Um, if you want to give 1084 00:40:38,880 --> 00:40:42,560 a response talk to anything today, 1085 00:40:40,960 --> 00:40:44,400 you've got a whole year to think about 1086 00:40:42,560 --> 00:40:46,079 it, which is going to make you look 1087 00:40:44,400 --> 00:40:48,079 extra deranged and like you're holding a 1088 00:40:46,079 --> 00:40:50,160 grudge and such, which we really like. 1089 00:40:48,079 --> 00:40:52,079 So, do be thinking about your response 1090 00:40:50,160 --> 00:40:55,119 lightning talks for the uh for the next 1091 00:40:52,079 --> 00:40:57,760 12-ish months. Uh, Ash, you are on deck. 1092 00:40:55,119 --> 00:41:00,079 Um, 1093 00:40:57,760 --> 00:41:03,359 Evan's not your parents, but he is going 1094 00:41:00,079 --> 00:41:05,920 to tell you how to eat. 1095 00:41:03,359 --> 00:41:08,400 Hello. Hello. Can you hear me? Okay, 1096 00:41:05,920 --> 00:41:10,160 great. Great. Awesome. Hello. Now, I I'm 1097 00:41:08,400 --> 00:41:11,839 not a fruit connoisseur by any means, 1098 00:41:10,160 --> 00:41:14,400 but I've noticed that no one knows how 1099 00:41:11,839 --> 00:41:16,800 to eat fruit. So, here we go. U first 1100 00:41:14,400 --> 00:41:18,880 we'll start Eezy with oranges, the most 1101 00:41:16,800 --> 00:41:20,800 illustrious of all fruit. Cut them in 1102 00:41:18,880 --> 00:41:22,480 half and then into thirds. And this 1103 00:41:20,800 --> 00:41:25,680 allows you to easily eat off the 1104 00:41:22,480 --> 00:41:27,760 individual segments by bending the skin. 1105 00:41:25,680 --> 00:41:30,160 Mandarins kind of like an orange, but 1106 00:41:27,760 --> 00:41:32,960 the inner segments are already uh pulled 1107 00:41:30,160 --> 00:41:34,319 apart. Peel off a ribbon of skin with 1108 00:41:32,960 --> 00:41:35,920 your fingers and then keep the 1109 00:41:34,319 --> 00:41:37,839 hemisphere to hold the skin and the 1110 00:41:35,920 --> 00:41:39,920 seeds. 1111 00:41:37,839 --> 00:41:42,079 You have the apple classic. You take 1112 00:41:39,920 --> 00:41:44,319 bites out without peeling and once you 1113 00:41:42,079 --> 00:41:46,880 get to the core, don't be wasteful and 1114 00:41:44,319 --> 00:41:48,319 stop. Finish it off. Nothing bad can 1115 00:41:46,880 --> 00:41:50,640 happen to you since they keep the doctor 1116 00:41:48,319 --> 00:41:53,119 away. 1117 00:41:50,640 --> 00:41:56,400 Pears are basically messily green apples 1118 00:41:53,119 --> 00:41:59,200 best cut into slices. Prickly pears are 1119 00:41:56,400 --> 00:42:01,119 not pears, but the fruits of cacti. They 1120 00:41:59,200 --> 00:42:02,960 are covered in spikes and they're best 1121 00:42:01,119 --> 00:42:05,119 eaten by quickly torching them over 1122 00:42:02,960 --> 00:42:08,640 fire, washing and then filleting their 1123 00:42:05,119 --> 00:42:11,839 skin to reveal their juicy innards. 1124 00:42:08,640 --> 00:42:14,480 Tomatoes are not vegetables. They have 1125 00:42:11,839 --> 00:42:16,560 seeds inside and thus they are fruit. 1126 00:42:14,480 --> 00:42:20,079 Cut into segments and top off with your 1127 00:42:16,560 --> 00:42:22,240 favorite salt. Honestly, delicious. 1128 00:42:20,079 --> 00:42:24,160 Lemons are popular ingredients, but they 1129 00:42:22,240 --> 00:42:26,480 need more love than that. Have you tried 1130 00:42:24,160 --> 00:42:28,800 eating them raw like an orange? Very 1131 00:42:26,480 --> 00:42:31,760 nice. 1132 00:42:28,800 --> 00:42:34,640 Strawberries, they are not berries or 1133 00:42:31,760 --> 00:42:37,119 fruit. They are the thing that holds the 1134 00:42:34,640 --> 00:42:39,040 seeds, which aren't seeds, but the 1135 00:42:37,119 --> 00:42:40,880 fruits itself. 1136 00:42:39,040 --> 00:42:43,839 Anyways, just cut off the green part and 1137 00:42:40,880 --> 00:42:46,000 eat them whole. 1138 00:42:43,839 --> 00:42:49,040 Avocados 1139 00:42:46,000 --> 00:42:51,040 have a seed inside and thus are a fruit. 1140 00:42:49,040 --> 00:42:53,599 First, cut along the shortest axis to 1141 00:42:51,040 --> 00:42:56,800 minimize surface area. 1142 00:42:53,599 --> 00:43:00,079 It will last longer. Then spoon out the 1143 00:42:56,800 --> 00:43:03,520 flesh, throw away the flesh, and keep 1144 00:43:00,079 --> 00:43:06,400 the seed to admire its beauty. 1145 00:43:03,520 --> 00:43:09,280 This is why they're so expensive. 1146 00:43:06,400 --> 00:43:11,359 Banana, the ultimate weapon. Most people 1147 00:43:09,280 --> 00:43:13,200 would eat a banana like this, peeling 1148 00:43:11,359 --> 00:43:15,760 from the stem. But this is a grave 1149 00:43:13,200 --> 00:43:18,319 mistake. Even primordial primates will 1150 00:43:15,760 --> 00:43:20,640 get this right. Pinch from the tip and 1151 00:43:18,319 --> 00:43:22,960 eat as you do. 1152 00:43:20,640 --> 00:43:25,920 Figs. Another one that's not actually a 1153 00:43:22,960 --> 00:43:28,720 fruit, but a sconium, which is an inside 1154 00:43:25,920 --> 00:43:34,319 out group of lots of teeny tiny flowers 1155 00:43:28,720 --> 00:43:36,960 that all bear not seeds, but fruit, 1156 00:43:34,319 --> 00:43:38,400 like an inside out strawberry. 1157 00:43:36,960 --> 00:43:41,920 There's no leaves on these, so just eat 1158 00:43:38,400 --> 00:43:44,480 them whole. A kiwi, often mistaken as 1159 00:43:41,920 --> 00:43:47,680 the bird due to resemblance. Normally 1160 00:43:44,480 --> 00:43:50,720 cut in half 1161 00:43:47,680 --> 00:43:53,680 and eaten with eaten with a spoon, but 1162 00:43:50,720 --> 00:43:57,119 best eaten like an apple with a skin on, 1163 00:43:53,680 --> 00:43:59,520 letting you eat it wherever you are. 1164 00:43:57,119 --> 00:44:02,160 Mango. Most people cut off the cheeks to 1165 00:43:59,520 --> 00:44:03,920 dice, but have you tried peeling off its 1166 00:44:02,160 --> 00:44:07,760 skin? 1167 00:44:03,920 --> 00:44:09,119 Now you can eat it like an apple. 1168 00:44:07,760 --> 00:44:11,920 Blueberries. Did you know that 1169 00:44:09,119 --> 00:44:13,599 blueberries can be white on the inside? 1170 00:44:11,920 --> 00:44:18,520 So when you're eating them, make sure to 1171 00:44:13,599 --> 00:44:18,520 cut each one in half to double check 1172 00:44:18,560 --> 00:44:23,520 before devouring them whole. 1173 00:44:21,359 --> 00:44:26,640 Grapes, the food of the gods, most 1174 00:44:23,520 --> 00:44:29,920 oftenly mistaken. Uh most often 1175 00:44:26,640 --> 00:44:31,599 mistakenly eaten whole and one by one, 1176 00:44:29,920 --> 00:44:34,079 but should actually have their skin 1177 00:44:31,599 --> 00:44:37,359 peeled before consumption. Try it. You 1178 00:44:34,079 --> 00:44:40,319 really don't need the fiber. 1179 00:44:37,359 --> 00:44:42,880 Blackberries. Oh, wait a minute. Yeah, 1180 00:44:40,319 --> 00:44:45,280 they they they look the same to me. And 1181 00:44:42,880 --> 00:44:47,599 if you think about it, no one eats 1182 00:44:45,280 --> 00:44:50,960 grapes whole with the vine. So, make 1183 00:44:47,599 --> 00:44:53,760 sure you pluck each one individually 1184 00:44:50,960 --> 00:44:55,680 to savor them as much as you can. 1185 00:44:53,760 --> 00:44:57,040 Pineapple. My favorites. They're 1186 00:44:55,680 --> 00:44:58,560 actually made through a fusion of 1187 00:44:57,040 --> 00:45:00,720 flowers that are out to kill you with 1188 00:44:58,560 --> 00:45:02,240 their spikiness. Although there's some 1189 00:45:00,720 --> 00:45:03,680 cutting methods that are superior, 1190 00:45:02,240 --> 00:45:05,920 they're all difficult, so just hack it 1191 00:45:03,680 --> 00:45:08,319 with a peeler. 1192 00:45:05,920 --> 00:45:10,240 Chilies are my arch nemesis. You can see 1193 00:45:08,319 --> 00:45:12,560 they have seeds inside and thus they're 1194 00:45:10,240 --> 00:45:15,440 a fruit. To eat, don't cut them like 1195 00:45:12,560 --> 00:45:17,680 this. Cut them head to tail. Remove all 1196 00:45:15,440 --> 00:45:19,680 of the seeds. And since it no longer has 1197 00:45:17,680 --> 00:45:23,000 seeds, it is no longer a fruit and can 1198 00:45:19,680 --> 00:45:23,000 go in the bin. 1199 00:45:24,640 --> 00:45:30,480 So, this talk for some might have been 1200 00:45:27,839 --> 00:45:32,319 funny or infuriating, but why should we 1201 00:45:30,480 --> 00:45:35,280 shame people for their preferences or 1202 00:45:32,319 --> 00:45:37,520 upbringings? Eat fruit however you want 1203 00:45:35,280 --> 00:45:39,410 and apply that principle to the rest of 1204 00:45:37,520 --> 00:45:40,670 your life. Thank you. 1205 00:45:39,410 --> 00:45:42,280 [Applause] 1206 00:45:40,670 --> 00:45:43,400 [Music] 1207 00:45:42,280 --> 00:45:46,550 [Applause] 1208 00:45:43,400 --> 00:45:46,550 [Music] 1209 00:45:48,160 --> 00:45:51,960 Thank you. I think 1210 00:45:54,560 --> 00:45:58,319 yeah 1211 00:45:56,720 --> 00:46:01,599 up next on this side while I process 1212 00:45:58,319 --> 00:46:04,079 what just happened is Alex Verico. But 1213 00:46:01,599 --> 00:46:06,240 first, uh, we've had a talk from Brianna 1214 00:46:04,079 --> 00:46:08,560 about jeans. We had a talk from Evan 1215 00:46:06,240 --> 00:46:10,720 effectively about jeans. So, we had to 1216 00:46:08,560 --> 00:46:12,810 tie it up with a third talk about jeans. 1217 00:46:10,720 --> 00:46:13,000 Please make Alex feel welcome. 1218 00:46:12,810 --> 00:46:15,520 [Music] 1219 00:46:13,000 --> 00:46:17,920 [Applause] 1220 00:46:15,520 --> 00:46:20,720 Hi. Uh, I'm here to talk about pants or 1221 00:46:17,920 --> 00:46:22,160 as Daisy alluded, jeans. So, who here is 1222 00:46:20,720 --> 00:46:25,359 wearing jeans? Can I see a show of 1223 00:46:22,160 --> 00:46:28,480 hands? A lot of you. Uh, how many of you 1224 00:46:25,359 --> 00:46:30,000 have a favorite pair of jeans? 1225 00:46:28,480 --> 00:46:31,839 Do you know why it's your favorite pair 1226 00:46:30,000 --> 00:46:33,760 of jeans? I don't need an answer now, 1227 00:46:31,839 --> 00:46:35,040 but come see me after the talk. I would 1228 00:46:33,760 --> 00:46:38,880 actually genuinely love to hear about 1229 00:46:35,040 --> 00:46:41,760 it. So, last year, this pair of pants 1230 00:46:38,880 --> 00:46:44,160 was voted the best pair of jeans in the 1231 00:46:41,760 --> 00:46:45,599 world, or rather the best faded pair of 1232 00:46:44,160 --> 00:46:48,079 jeans in the world. Look at those 1233 00:46:45,599 --> 00:46:51,280 whiskers, those combs, those stacks. 1234 00:46:48,079 --> 00:46:53,760 Very impressive stuff. But Ash, you ask, 1235 00:46:51,280 --> 00:46:56,560 how do we judge the best pair of jeans 1236 00:46:53,760 --> 00:46:58,400 in the world? Well, enter this 1237 00:46:56,560 --> 00:47:01,920 happylooking Swedish man on the right. 1238 00:46:58,400 --> 00:47:05,760 His name is Rudy Kra and he runs the 1239 00:47:01,920 --> 00:47:08,240 genes museum with over 14,000 samples 1240 00:47:05,760 --> 00:47:10,720 that he's collected over the past 50 or 1241 00:47:08,240 --> 00:47:13,359 60 years or so. And he's the final judge 1242 00:47:10,720 --> 00:47:17,280 in a jeans fading competition called the 1243 00:47:13,359 --> 00:47:20,079 Indigo Invitational. Now, the Indigo 1244 00:47:17,280 --> 00:47:22,319 Invitational goes for 365 days and some 1245 00:47:20,079 --> 00:47:24,480 people have very specific techniques and 1246 00:47:22,319 --> 00:47:26,960 strategies to their jeans fading. The 1247 00:47:24,480 --> 00:47:29,119 most dedicated will go as long as they 1248 00:47:26,960 --> 00:47:30,800 can without washing their jeans, aiming 1249 00:47:29,119 --> 00:47:32,960 to produce higher contrast wear 1250 00:47:30,800 --> 00:47:35,760 patterns. Some even going the whole year 1251 00:47:32,960 --> 00:47:38,560 without washing. Here's a pair the day 1252 00:47:35,760 --> 00:47:40,000 that the competition started last year. 1253 00:47:38,560 --> 00:47:41,520 And this is what they looked like at the 1254 00:47:40,000 --> 00:47:43,760 end. 1255 00:47:41,520 --> 00:47:45,599 Yeah. Uh a little gross. These uh these 1256 00:47:43,760 --> 00:47:47,839 jeans look like they've had a a pretty 1257 00:47:45,599 --> 00:47:51,839 rough life. Um this is absurd, right? 1258 00:47:47,839 --> 00:47:54,000 Surely only the most dedicated, most 1259 00:47:51,839 --> 00:47:56,079 hygienically challenged people would 1260 00:47:54,000 --> 00:47:58,560 ever consider taking part in this 1261 00:47:56,079 --> 00:48:00,400 competition. So naturally, I decided to 1262 00:47:58,560 --> 00:48:02,640 enter. 1263 00:48:00,400 --> 00:48:05,040 This is the pair that I chose this year. 1264 00:48:02,640 --> 00:48:08,319 I'm wearing them right now. It's a 14.5 1265 00:48:05,040 --> 00:48:09,760 oz double black jeans from Nudie. Uh 1266 00:48:08,319 --> 00:48:11,119 they worked for me in a style that I 1267 00:48:09,760 --> 00:48:12,640 liked. They're roomy enough for me to 1268 00:48:11,119 --> 00:48:13,839 climb in. Um I think they're pretty 1269 00:48:12,640 --> 00:48:17,680 neat. They've got a little orange 1270 00:48:13,839 --> 00:48:19,920 salvage ID. uh sulfur rope dyed warp and 1271 00:48:17,680 --> 00:48:22,319 a colorast weft. I don't have time to 1272 00:48:19,920 --> 00:48:23,839 explain that. Ask me after the the talk. 1273 00:48:22,319 --> 00:48:27,599 Um and I think they should produce some 1274 00:48:23,839 --> 00:48:29,920 interesting outcomes. So why enter this 1275 00:48:27,599 --> 00:48:31,760 competition? Well, in a world of fast 1276 00:48:29,920 --> 00:48:34,319 fashion, constant trend cycles, and 1277 00:48:31,760 --> 00:48:36,480 predistressed items, personalization of 1278 00:48:34,319 --> 00:48:38,720 an object through consistent dedicated 1279 00:48:36,480 --> 00:48:40,880 wear becomes a little bit of an oddity. 1280 00:48:38,720 --> 00:48:42,720 And if you're really odd like me, you're 1281 00:48:40,880 --> 00:48:44,880 also probably interested in the way that 1282 00:48:42,720 --> 00:48:47,440 objects build memory and meaning through 1283 00:48:44,880 --> 00:48:49,359 their use. Your jeans become a record of 1284 00:48:47,440 --> 00:48:51,359 all the experiences that you have while 1285 00:48:49,359 --> 00:48:53,839 wearing them. Things like where you put 1286 00:48:51,359 --> 00:48:55,440 your wallet, that weird coffee stain, 1287 00:48:53,839 --> 00:48:56,960 the tear from falling off your bike that 1288 00:48:55,440 --> 00:49:00,559 you patched up with scraps from another 1289 00:48:56,960 --> 00:49:02,240 pair, a vessel of memory and nostalgia. 1290 00:49:00,559 --> 00:49:04,400 Jeans also carry social meaning. 1291 00:49:02,240 --> 00:49:06,240 Originally a symbol of the working class 1292 00:49:04,400 --> 00:49:08,240 and then progressing into rebellion and 1293 00:49:06,240 --> 00:49:10,160 counterculture. While they do not exist 1294 00:49:08,240 --> 00:49:11,839 solely in these social domains anymore, 1295 00:49:10,160 --> 00:49:13,760 these meanings are firmly embedded into 1296 00:49:11,839 --> 00:49:15,280 their aesthetic and can imply certain 1297 00:49:13,760 --> 00:49:17,119 levels of social status and group 1298 00:49:15,280 --> 00:49:19,119 belonging. Yes, I did just reference 1299 00:49:17,119 --> 00:49:21,200 semiotic sociology and phenomenology in 1300 00:49:19,119 --> 00:49:23,280 a lightning talk. I would I know you 1301 00:49:21,200 --> 00:49:25,280 would love to hear me talk about coard 1302 00:49:23,280 --> 00:49:29,359 and marks, but sadly I don't quite have 1303 00:49:25,280 --> 00:49:30,880 time for that. So, uh uh competition 1304 00:49:29,359 --> 00:49:32,400 started two weeks ago. What's happened 1305 00:49:30,880 --> 00:49:35,040 since I started? So, I wore them to 1306 00:49:32,400 --> 00:49:37,440 PyCon. I'm giving a talk in these pants. 1307 00:49:35,040 --> 00:49:39,040 Um, I wore them when my partner was 1308 00:49:37,440 --> 00:49:40,960 taken in for a surgery that they had 1309 00:49:39,040 --> 00:49:42,800 been fighting for years to get. And I 1310 00:49:40,960 --> 00:49:44,720 was wearing them when I learned that my 1311 00:49:42,800 --> 00:49:46,800 grandfather had passed away. So, in just 1312 00:49:44,720 --> 00:49:48,559 2 weeks, these jeans have shared quite a 1313 00:49:46,800 --> 00:49:50,160 lot of experiences. 1314 00:49:48,559 --> 00:49:52,240 Hopefully, the rest of the year goes a 1315 00:49:50,160 --> 00:49:53,920 little bit smoother, especially because 1316 00:49:52,240 --> 00:49:57,440 now I kind of need to provide an update 1317 00:49:53,920 --> 00:50:00,680 at next year's PyCon. 1318 00:49:57,440 --> 00:50:00,680 Thank you. 1319 00:50:03,839 --> 00:50:09,839 Well, they say you are what you wear and 1320 00:50:06,160 --> 00:50:11,200 I think for you doubly so. Um, if 1321 00:50:09,839 --> 00:50:12,559 everything goes well and you're at next 1322 00:50:11,200 --> 00:50:15,680 year's Lightning Talks, I think you'll 1323 00:50:12,559 --> 00:50:18,160 probably still be wearing them. So, uh, 1324 00:50:15,680 --> 00:50:23,040 say hi to Ash now. 1325 00:50:18,160 --> 00:50:24,960 Um, hey, uh, Catrix, you're on deck. Um, 1326 00:50:23,040 --> 00:50:28,000 Alex is going to tell us something about 1327 00:50:24,960 --> 00:50:29,760 being done. 1328 00:50:28,000 --> 00:50:31,920 Good day, everyone. All right, quick 1329 00:50:29,760 --> 00:50:33,680 disclaimer before I start. I am not here 1330 00:50:31,920 --> 00:50:35,839 on behalf of my company. All stories 1331 00:50:33,680 --> 00:50:38,240 that I share are my own and my opinions 1332 00:50:35,839 --> 00:50:40,319 are also my own, not my companies. It's 1333 00:50:38,240 --> 00:50:42,160 a QR code on screen right now that links 1334 00:50:40,319 --> 00:50:45,200 to notes about this talk. I'll also show 1335 00:50:42,160 --> 00:50:46,960 it later. I love the motto done is 1336 00:50:45,200 --> 00:50:49,040 better than perfect. And today I'm going 1337 00:50:46,960 --> 00:50:51,359 to give an example of when that's a bad 1338 00:50:49,040 --> 00:50:54,240 idea and also some practical ways to 1339 00:50:51,359 --> 00:50:56,319 apply it when it's a good idea. My house 1340 00:50:54,240 --> 00:50:58,559 is majority solar powered, which is 1341 00:50:56,319 --> 00:51:00,720 great because no power bills, but I do 1342 00:50:58,559 --> 00:51:02,800 work in IT, which means lots of devices 1343 00:51:00,720 --> 00:51:04,800 using lots of power. And so I'm 1344 00:51:02,800 --> 00:51:06,400 constantly watching my solar system. How 1345 00:51:04,800 --> 00:51:08,079 much power is being produced? How 1346 00:51:06,400 --> 00:51:11,040 charged are the batteries? How much 1347 00:51:08,079 --> 00:51:13,680 power am I using? And so on. A while 1348 00:51:11,040 --> 00:51:15,520 back, I got sick of always going outside 1349 00:51:13,680 --> 00:51:17,920 to check on everything and decided to 1350 00:51:15,520 --> 00:51:20,960 try and get remote monitoring set up. A 1351 00:51:17,920 --> 00:51:23,200 quick Google search um later, turns out 1352 00:51:20,960 --> 00:51:25,119 my system has a built-in Wi-Fi dongle 1353 00:51:23,200 --> 00:51:26,480 and an app to view everything about your 1354 00:51:25,119 --> 00:51:28,800 system that doesn't require a 1355 00:51:26,480 --> 00:51:30,400 subscription. Once I registered an 1356 00:51:28,800 --> 00:51:32,319 account in the app, it asked me to enter 1357 00:51:30,400 --> 00:51:33,920 the serial number of my system. Then 1358 00:51:32,319 --> 00:51:36,800 immediately started showing all the 1359 00:51:33,920 --> 00:51:38,319 information I wanted. Great job done. No 1360 00:51:36,800 --> 00:51:40,720 more going out in the rain at night to 1361 00:51:38,319 --> 00:51:42,640 check on the batteries. A few weeks went 1362 00:51:40,720 --> 00:51:45,200 by and this monitoring was working 1363 00:51:42,640 --> 00:51:47,119 great. But then I started to wonder, do 1364 00:51:45,200 --> 00:51:48,800 I trust the manufacturer of my solar 1365 00:51:47,119 --> 00:51:50,240 system to have done a good job of 1366 00:51:48,800 --> 00:51:52,319 building this monitoring system that 1367 00:51:50,240 --> 00:51:53,839 they are offering for free? Surely 1368 00:51:52,319 --> 00:51:55,440 they're trying to keep the cost as low 1369 00:51:53,839 --> 00:51:58,880 as possible since they're not charging 1370 00:51:55,440 --> 00:52:00,800 for it. So naturally, I started digging. 1371 00:51:58,880 --> 00:52:02,319 I'm not going to go into depth about how 1372 00:52:00,800 --> 00:52:04,400 I discovered these issues since this 1373 00:52:02,319 --> 00:52:06,880 isn't a cyber security talk, but let me 1374 00:52:04,400 --> 00:52:08,400 summarize the main issues here. No 1375 00:52:06,880 --> 00:52:10,240 HTTPS. 1376 00:52:08,400 --> 00:52:11,839 both the connections from the system to 1377 00:52:10,240 --> 00:52:15,040 the server and from the app to the 1378 00:52:11,839 --> 00:52:17,200 server where unencrypted HTTP a perfect 1379 00:52:15,040 --> 00:52:19,920 example of done is better than perfect 1380 00:52:17,200 --> 00:52:22,079 being a bad thing. 1381 00:52:19,920 --> 00:52:24,480 No verification that you own the system 1382 00:52:22,079 --> 00:52:27,119 you are trying to control. Just put in a 1383 00:52:24,480 --> 00:52:29,040 system ID, you can control it. This 1384 00:52:27,119 --> 00:52:30,960 means you could easily disable 1385 00:52:29,040 --> 00:52:33,760 overcharge protection for someone else's 1386 00:52:30,960 --> 00:52:36,240 batteries and start a fire. This on its 1387 00:52:33,760 --> 00:52:41,119 own wouldn't be terrible if it wasn't 1388 00:52:36,240 --> 00:52:43,760 for the final issue. sequential IDs. 1389 00:52:41,119 --> 00:52:46,079 So I immediately disabled the Wi-Fi 1390 00:52:43,760 --> 00:52:47,599 dongle and started looking for other 1391 00:52:46,079 --> 00:52:50,319 options. 1392 00:52:47,599 --> 00:52:52,559 I found an amazing GitHub repository 1393 00:52:50,319 --> 00:52:54,640 where someone else had already reverse 1394 00:52:52,559 --> 00:52:57,200 engineered the USB communication 1395 00:52:54,640 --> 00:52:59,839 protocol for the system. And so my focus 1396 00:52:57,200 --> 00:53:01,839 turned to building a basic program to 1397 00:52:59,839 --> 00:53:04,079 record, store, and display all the data 1398 00:53:01,839 --> 00:53:05,839 I needed. I split this into three 1399 00:53:04,079 --> 00:53:09,119 distinct parts to make it easier to work 1400 00:53:05,839 --> 00:53:11,359 on and marginally more secure. Part one, 1401 00:53:09,119 --> 00:53:13,599 the monitor connects to the system by 1402 00:53:11,359 --> 00:53:15,599 USB, queries all the parameters I want, 1403 00:53:13,599 --> 00:53:18,559 stores them in a SQLite database with 1404 00:53:15,599 --> 00:53:20,960 the timestamp. Pretty simple. Part two, 1405 00:53:18,559 --> 00:53:23,119 solar viewer for the web serves a basic 1406 00:53:20,960 --> 00:53:25,359 web page using Flask, which renders data 1407 00:53:23,119 --> 00:53:27,280 from the same database. By this point, 1408 00:53:25,359 --> 00:53:29,200 I've accomplished part of my goal. I'm 1409 00:53:27,280 --> 00:53:30,880 recording data and I can view it on my 1410 00:53:29,200 --> 00:53:33,040 local network. But what about remote 1411 00:53:30,880 --> 00:53:34,720 monitoring? Because I've adopted the 1412 00:53:33,040 --> 00:53:36,880 done is better than perfect motto for 1413 00:53:34,720 --> 00:53:38,800 this project. I haven't built any kind 1414 00:53:36,880 --> 00:53:41,359 of authentication system. I haven't set 1415 00:53:38,800 --> 00:53:43,280 up HTTPS and I don't want to expose my 1416 00:53:41,359 --> 00:53:45,599 hack together code to the internet. So 1417 00:53:43,280 --> 00:53:46,880 what now? I want to introduce a concept 1418 00:53:45,599 --> 00:53:49,280 some of you will already be familiar 1419 00:53:46,880 --> 00:53:51,200 with. Risk outsourcing. This basically 1420 00:53:49,280 --> 00:53:53,119 just means palm off the risk to someone 1421 00:53:51,200 --> 00:53:54,800 else. So here's how I put that into 1422 00:53:53,119 --> 00:53:57,680 practice. The third part of my 1423 00:53:54,800 --> 00:53:59,440 monitoring setup, Discord. A basic 1424 00:53:57,680 --> 00:54:01,440 Discord bot that connects to the same 1425 00:53:59,440 --> 00:54:04,000 database, renders the same data as the 1426 00:54:01,440 --> 00:54:05,760 web viewer, post in a Discord server. A 1427 00:54:04,000 --> 00:54:07,599 perfect example of how you can embrace 1428 00:54:05,760 --> 00:54:10,160 done is better than perfect without 1429 00:54:07,599 --> 00:54:11,839 compromising on security by outsourcing 1430 00:54:10,160 --> 00:54:14,400 risky components to well-established 1431 00:54:11,839 --> 00:54:16,800 products. So, how can you adopt the 1432 00:54:14,400 --> 00:54:19,119 motto of done is better than perfect? 1433 00:54:16,800 --> 00:54:20,400 Just start coding. If you have an idea, 1434 00:54:19,119 --> 00:54:22,000 you don't have to plan it out well 1435 00:54:20,400 --> 00:54:24,079 enough for it to scale to thousands of 1436 00:54:22,000 --> 00:54:26,000 users. Build it in a way that works for 1437 00:54:24,079 --> 00:54:28,160 you. Then come back to it and enhance it 1438 00:54:26,000 --> 00:54:31,359 if you want to or don't. Done is better 1439 00:54:28,160 --> 00:54:33,200 than perfect. Second, outsource risk. 1440 00:54:31,359 --> 00:54:35,599 For example, many projects can use 1441 00:54:33,200 --> 00:54:37,359 Discord or a Telegram bot or many other 1442 00:54:35,599 --> 00:54:39,680 platforms to provide secure remote 1443 00:54:37,359 --> 00:54:42,160 access with very little effort or risk. 1444 00:54:39,680 --> 00:54:44,079 Third, share your projects. Sharing your 1445 00:54:42,160 --> 00:54:45,680 projects is a great side effect. Over 1446 00:54:44,079 --> 00:54:47,920 time, you will start to automatically 1447 00:54:45,680 --> 00:54:49,680 adopt good practices such as using 1448 00:54:47,920 --> 00:54:51,119 config files instead of hard coding, 1449 00:54:49,680 --> 00:54:53,200 maintain a requirements file, and 1450 00:54:51,119 --> 00:54:55,119 writing down the setup instructions. Cuz 1451 00:54:53,200 --> 00:54:57,040 believe me, it seems obvious how to set 1452 00:54:55,119 --> 00:54:59,119 it up today, but it won't be obvious two 1453 00:54:57,040 --> 00:55:01,040 years and a dozen projects later. 1454 00:54:59,119 --> 00:55:02,720 Fourth, be transparent when sharing your 1455 00:55:01,040 --> 00:55:04,400 work. Add a disclaimer if you don't 1456 00:55:02,720 --> 00:55:05,760 think it's secure or a note if you think 1457 00:55:04,400 --> 00:55:07,760 something could be improved but don't 1458 00:55:05,760 --> 00:55:09,920 have time to do it. And finally, 1459 00:55:07,760 --> 00:55:11,599 encourage contributions. Your hack 1460 00:55:09,920 --> 00:55:13,440 together weekend project probably works 1461 00:55:11,599 --> 00:55:15,280 great for you and only you and that's 1462 00:55:13,440 --> 00:55:17,040 okay. Remember done is better than 1463 00:55:15,280 --> 00:55:19,280 perfect. But maybe someone else will 1464 00:55:17,040 --> 00:55:21,119 make it work for them. And remember, 1465 00:55:19,280 --> 00:55:25,559 review their change in the same context. 1466 00:55:21,119 --> 00:55:25,559 D is better than perfect. Thank 1467 00:55:30,480 --> 00:55:33,839 There we go. Well done. 1468 00:55:32,160 --> 00:55:34,400 Did we just cut him off before he was 1469 00:55:33,839 --> 00:55:34,960 done? 1470 00:55:34,400 --> 00:55:36,559 No. 1471 00:55:34,960 --> 00:55:40,000 Oh, hey. 1472 00:55:36,559 --> 00:55:45,760 No, I was I was waiting for the zero. 1473 00:55:40,000 --> 00:55:48,640 So, thank you so much, Alex Verico. Um, 1474 00:55:45,760 --> 00:55:51,520 unfortunately up on this side is I did 1475 00:55:48,640 --> 00:55:52,720 it again. Sorry, Peter. Unfortunately, 1476 00:55:51,520 --> 00:55:54,799 up on this side is not a lot of 1477 00:55:52,720 --> 00:55:56,240 lightning talk. Fortunately, however, it 1478 00:55:54,799 --> 00:55:57,839 is our lovely conference director, Peter 1479 00:55:56,240 --> 00:56:00,079 Hall. 1480 00:55:57,839 --> 00:56:04,559 Um, but in the meantime, we've just had 1481 00:56:00,079 --> 00:56:07,599 Alex Vero and now we have another AV 1482 00:56:04,559 --> 00:56:09,119 person to talk. Please direct your 1483 00:56:07,599 --> 00:56:11,119 complaints about that joke to 1484 00:56:09,119 --> 00:56:13,200 Christopher Nogabau. 1485 00:56:11,119 --> 00:56:14,559 Classic. 1486 00:56:13,200 --> 00:56:16,480 That was literally one of the one that 1487 00:56:14,559 --> 00:56:18,240 was the one that he was the most keen on 1488 00:56:16,480 --> 00:56:19,680 out of the spreadsheet jokes. All of the 1489 00:56:18,240 --> 00:56:20,960 all the all of the jokes that I've made 1490 00:56:19,680 --> 00:56:24,000 on stage here that you've liked, those 1491 00:56:20,960 --> 00:56:28,000 are mine. Um 1492 00:56:24,000 --> 00:56:32,079 um anyway, Chris has been uh a core part 1493 00:56:28,000 --> 00:56:34,240 of our AV team since 2020. um multiple 1494 00:56:32,079 --> 00:56:36,319 conference organizers including myself 1495 00:56:34,240 --> 00:56:37,760 have uh trusted him with basically 1496 00:56:36,319 --> 00:56:41,040 everything that make this conference 1497 00:56:37,760 --> 00:56:44,319 run. And based on what I've seen from 1498 00:56:41,040 --> 00:56:46,799 the submission, I'm about to learn that 1499 00:56:44,319 --> 00:56:50,559 whether or not I should have had that 1500 00:56:46,799 --> 00:56:52,000 much trust. We'll find out. 1501 00:56:50,559 --> 00:56:53,680 Hey everyone, there is audio in this 1502 00:56:52,000 --> 00:56:56,640 just to let you guys at the back know. 1503 00:56:53,680 --> 00:56:59,040 Um, so this uh titled is titled, "Is 1504 00:56:56,640 --> 00:57:03,520 this secret data encoded into the PyCon 1505 00:56:59,040 --> 00:57:06,000 AU 2025 logo?" Let's have a look. Well, 1506 00:57:03,520 --> 00:57:07,359 at the start of each of the conferences 1507 00:57:06,000 --> 00:57:08,880 for the last few years, we've had 1508 00:57:07,359 --> 00:57:11,280 something called a bumper. And it's a 1509 00:57:08,880 --> 00:57:13,200 kind of it wakes people up. And it also 1510 00:57:11,280 --> 00:57:15,839 says, "Oh, we're about to start." So, 1511 00:57:13,200 --> 00:57:18,319 some of them we've had is this one. Now, 1512 00:57:15,839 --> 00:57:19,920 I get to I don't draw the logos, but I 1513 00:57:18,319 --> 00:57:23,040 animate them. I do the sound effects 1514 00:57:19,920 --> 00:57:25,280 that go with them. And this year we had 1515 00:57:23,040 --> 00:57:28,880 this beautiful logo by Robert uh 1516 00:57:25,280 --> 00:57:30,559 Shulton. Uh big clap for that wonderful 1517 00:57:28,880 --> 00:57:33,040 human 1518 00:57:30,559 --> 00:57:35,599 who made this great logo. And I got 1519 00:57:33,040 --> 00:57:38,559 inspired by this little bit up here. Uh 1520 00:57:35,599 --> 00:57:40,720 which to me reminded me of a 1980s tape 1521 00:57:38,559 --> 00:57:42,720 loader. What is a tape loader? Well, 1522 00:57:40,720 --> 00:57:45,280 back in the 1980s, we had computers like 1523 00:57:42,720 --> 00:57:47,680 these uh which loaded from uh tape. This 1524 00:57:45,280 --> 00:57:49,119 is a Sinclair ZedX Spectrum. Yes. You 1525 00:57:47,680 --> 00:57:51,040 put your tape in the tape machine, you 1526 00:57:49,119 --> 00:57:53,040 push play, and often while it was 1527 00:57:51,040 --> 00:57:55,440 loading, it would do things like this, 1528 00:57:53,040 --> 00:57:56,799 which has audio. There we go. So, you 1529 00:57:55,440 --> 00:57:59,040 can see there the black and white's 1530 00:57:56,799 --> 00:58:01,119 loading with audio as it goes. And you 1531 00:57:59,040 --> 00:58:02,880 hear the data. And there we go. You see 1532 00:58:01,119 --> 00:58:05,119 it in the logo as well. So, that's where 1533 00:58:02,880 --> 00:58:07,760 the inspiration for that came. But if we 1534 00:58:05,119 --> 00:58:09,280 take that audio and we put it into an 1535 00:58:07,760 --> 00:58:10,799 audio editor program, you can do this 1536 00:58:09,280 --> 00:58:12,880 from your you rip it off YouTube when 1537 00:58:10,799 --> 00:58:14,720 you get home and try this. You'll notice 1538 00:58:12,880 --> 00:58:16,480 that this weird thing happens. If you 1539 00:58:14,720 --> 00:58:18,640 look with phase analysis, the difference 1540 00:58:16,480 --> 00:58:20,319 between left and right. So at some point 1541 00:58:18,640 --> 00:58:22,480 in this, the left and right speaker 1542 00:58:20,319 --> 00:58:24,640 actually flips. So you can cancel the 1543 00:58:22,480 --> 00:58:26,240 audio out. And if we combine the two 1544 00:58:24,640 --> 00:58:28,720 together, you'll see this little block 1545 00:58:26,240 --> 00:58:31,119 of data suddenly appears. Oh, what's 1546 00:58:28,720 --> 00:58:32,640 this? 1547 00:58:31,119 --> 00:58:34,079 If you've ever used a spectrum, you'll 1548 00:58:32,640 --> 00:58:36,079 know what that is. That's the sound of a 1549 00:58:34,079 --> 00:58:37,599 tape loading. Is it? Well, let's find 1550 00:58:36,079 --> 00:58:39,440 out. So we're going to delete the 1551 00:58:37,599 --> 00:58:41,359 waveform off the start and the end of 1552 00:58:39,440 --> 00:58:44,240 this logo bit of audio here. And if we 1553 00:58:41,359 --> 00:58:45,680 look at closely, that looks awfully like 1554 00:58:44,240 --> 00:58:46,960 frequency shift king. For those of you 1555 00:58:45,680 --> 00:58:48,880 who are into radio, you'll know what 1556 00:58:46,960 --> 00:58:51,359 that is. Um, so what we're going to do 1557 00:58:48,880 --> 00:58:53,280 is save it as a creative voice file. No 1558 00:58:51,359 --> 00:58:54,799 one's used these since 1990, but that's 1559 00:58:53,280 --> 00:58:57,040 okay. We're going to use it here. So, 1560 00:58:54,799 --> 00:58:59,520 we're going to save this as logo.voc. 1561 00:58:57,040 --> 00:59:01,280 Now, that is just the audio from our uh 1562 00:58:59,520 --> 00:59:03,200 introduction there. And we're going to 1563 00:59:01,280 --> 00:59:04,720 load it into a program called DOSBox or 1564 00:59:03,200 --> 00:59:06,960 an emulator. We're going to use a little 1565 00:59:04,720 --> 00:59:09,200 program here called Taper, which is for 1566 00:59:06,960 --> 00:59:11,920 reconstructing virtual tape files from 1567 00:59:09,200 --> 00:59:14,000 audio. going to take our logo audio. 1568 00:59:11,920 --> 00:59:16,160 We're going to pull it into taper and 1569 00:59:14,000 --> 00:59:18,240 we're going to open that uh creative 1570 00:59:16,160 --> 00:59:20,640 voice file. And in particular, there's 1571 00:59:18,240 --> 00:59:22,640 this pilot detection, which is a little 1572 00:59:20,640 --> 00:59:24,000 at the start that tells the spectrum, 1573 00:59:22,640 --> 00:59:25,839 oh, are we running at the right speed? 1574 00:59:24,000 --> 00:59:27,280 And it does a whole load of calibration. 1575 00:59:25,839 --> 00:59:29,200 Turns out you can make that really 1576 00:59:27,280 --> 00:59:30,799 short, which is what we've done here. 1577 00:59:29,200 --> 00:59:32,799 And so instead of giving it 10 seconds, 1578 00:59:30,799 --> 00:59:34,880 we've given it just a half a fraction of 1579 00:59:32,799 --> 00:59:37,040 a second. You see, pyons, something's 1580 00:59:34,880 --> 00:59:39,119 happening here. What is happening here? 1581 00:59:37,040 --> 00:59:42,000 Let's find out. We're going to save this 1582 00:59:39,119 --> 00:59:44,240 as a tap file, which is a virtual tape 1583 00:59:42,000 --> 00:59:46,400 file. So, this is the virtual tape of 1584 00:59:44,240 --> 00:59:47,920 the audio from our logo that we've been 1585 00:59:46,400 --> 00:59:49,920 watching for the last three days. Every 1586 00:59:47,920 --> 00:59:51,760 time something starts, says we don't 1587 00:59:49,920 --> 00:59:53,440 fully understand this format. No, it's 1588 00:59:51,760 --> 00:59:55,119 got some weird conference audio in it, 1589 00:59:53,440 --> 00:59:56,400 too. So, it'll say, "Do you want us to 1590 00:59:55,119 --> 00:59:57,599 save it anyway?" You say, "Yeah, don't 1591 00:59:56,400 --> 00:59:59,040 worry about the other bits of audio in 1592 00:59:57,599 --> 01:00:00,960 there. Just save it and see what 1593 00:59:59,040 --> 01:00:03,599 happens." So, it's now going to save 1594 01:00:00,960 --> 01:00:05,920 that as a tap file. What do we do with a 1595 01:00:03,599 --> 01:00:08,000 tap file? Well, we load it into an 1596 01:00:05,920 --> 01:00:10,880 emulator, the free Unix Spectrum 1597 01:00:08,000 --> 01:00:12,480 emulator that we're running in Windows. 1598 01:00:10,880 --> 01:00:14,000 So, you can see here, we're going to go 1599 01:00:12,480 --> 01:00:17,040 tape. We're going to open that virtual 1600 01:00:14,000 --> 01:00:19,520 tape file. And now, with that tape file 1601 01:00:17,040 --> 01:00:21,040 open, we're going to reboot our machine. 1602 01:00:19,520 --> 01:00:22,720 So, you can see it's a hard reset. 1603 01:00:21,040 --> 01:00:24,400 Nothing in RAM here. So, this is an 1604 01:00:22,720 --> 01:00:27,119 empty spectrum. We need to look at the 1605 01:00:24,400 --> 01:00:28,799 keyboard to know to press J for load and 1606 01:00:27,119 --> 01:00:30,960 then control and P twice for the 1607 01:00:28,799 --> 01:00:33,760 inverted commas to get the two load 1608 01:00:30,960 --> 01:00:37,920 things. And then we press play on our 1609 01:00:33,760 --> 01:00:39,280 tape. And our tape goes play. 1610 01:00:37,920 --> 01:00:41,200 That's inspired. That's what inspired 1611 01:00:39,280 --> 01:00:45,119 the logo. 1612 01:00:41,200 --> 01:00:46,480 Hey, what do we found? Bit of data. 1613 01:00:45,119 --> 01:00:48,559 That's the data you've been listening to 1614 01:00:46,480 --> 01:00:51,040 for 3 days. And what do you know? We 1615 01:00:48,559 --> 01:00:52,460 press run and we have a piece of 1616 01:00:51,040 --> 01:00:59,769 software. 1617 01:00:52,460 --> 01:00:59,769 [Applause] 1618 01:01:00,480 --> 01:01:05,760 And because we love open source, if you 1619 01:01:03,599 --> 01:01:07,119 push any key at the end of this, it will 1620 01:01:05,760 --> 01:01:08,640 actually give you the source code and 1621 01:01:07,119 --> 01:01:11,040 you can start playing around with it. 1622 01:01:08,640 --> 01:01:13,280 It's written in basic. It was about 140 1623 01:01:11,040 --> 01:01:14,720 bytes worth of data. Um, there was a few 1624 01:01:13,280 --> 01:01:16,960 things with this. To get it short enough 1625 01:01:14,720 --> 01:01:18,799 to fit it in the logo was a bit of fun. 1626 01:01:16,960 --> 01:01:21,680 Um, also to make it so that it wouldn't 1627 01:01:18,799 --> 01:01:23,280 get affected by MP3 or AAC encoding. 1628 01:01:21,680 --> 01:01:24,559 I've tried encoding it with heaps of 1629 01:01:23,280 --> 01:01:26,240 different encoders. I did a whole lot of 1630 01:01:24,559 --> 01:01:28,799 filtering on the logo soundtrack to make 1631 01:01:26,240 --> 01:01:30,240 it so it didn't cut out. Um, and also 1632 01:01:28,799 --> 01:01:31,599 had to make sure the venue could play it 1633 01:01:30,240 --> 01:01:33,440 in stereo, which they couldn't. This 1634 01:01:31,599 --> 01:01:35,680 whole room is mono, but we figured out a 1635 01:01:33,440 --> 01:01:37,839 way of not having the cutout. Um, and 1636 01:01:35,680 --> 01:01:39,440 then finally, um, thank you to the 1637 01:01:37,839 --> 01:01:41,599 organizers for letting me do a lightning 1638 01:01:39,440 --> 01:01:43,520 talk. And if I'm just changing the code 1639 01:01:41,599 --> 01:01:46,079 down here, cuz we can cuz it's all open 1640 01:01:43,520 --> 01:01:49,920 and you can do this too if you load this 1641 01:01:46,079 --> 01:01:53,020 off YouTube later. I'd like to thank you 1642 01:01:49,920 --> 01:01:55,540 for letting me do a lightning talk. 1643 01:01:53,020 --> 01:01:55,760 [Applause] 1644 01:01:55,540 --> 01:01:58,839 [Music] 1645 01:01:55,760 --> 01:01:58,839 [Applause] 1646 01:01:58,880 --> 01:02:04,079 So, uh, for those of you on the live 1647 01:02:02,000 --> 01:02:07,520 stream or who buy an online ticket for 1648 01:02:04,079 --> 01:02:09,680 next year, um, please actually stay and 1649 01:02:07,520 --> 01:02:12,480 watch the talks and don't spend your 1650 01:02:09,680 --> 01:02:14,480 time trying to hack apart the audio. Uh, 1651 01:02:12,480 --> 01:02:17,680 we really do want you to watch the 1652 01:02:14,480 --> 01:02:21,079 talks. Um, that's the end of the 1653 01:02:17,680 --> 01:02:21,079 lightning talks. 1654 01:02:21,200 --> 01:02:25,839 I'm I'm supposed to like vamp now, but 1655 01:02:23,200 --> 01:02:28,960 I'm still just like struck by I'm I'm 1656 01:02:25,839 --> 01:02:29,680 impressed and also betrayed. 1657 01:02:28,960 --> 01:02:31,280 It 1658 01:02:29,680 --> 01:02:33,119 and it's one of the best Curly Boys I 1659 01:02:31,280 --> 01:02:34,799 think we've seen in the uh however many 1660 01:02:33,119 --> 01:02:37,040 years it's been since Curly Boy's been a 1661 01:02:34,799 --> 01:02:39,680 thing. So, uh thanks for that as well. 1662 01:02:37,040 --> 01:02:42,000 Um while we're doing thanks, thank you 1663 01:02:39,680 --> 01:02:44,319 to all the other AV people for doing the 1664 01:02:42,000 --> 01:02:47,720 amazing job you do do making this run 1665 01:02:44,319 --> 01:02:47,720 actually smoothly. 1666 01:02:48,799 --> 01:02:52,880 Seriously. 1667 01:02:50,559 --> 01:02:55,440 Uh 1668 01:02:52,880 --> 01:02:58,160 uh thank you. Thank thank you to Beno 1669 01:02:55,440 --> 01:03:01,200 who has been our uh stopwatch holder for 1670 01:02:58,160 --> 01:03:04,720 the last two days. Uh we normally have 1671 01:03:01,200 --> 01:03:06,640 him on Q the stopwatch holder. Uh we 1672 01:03:04,720 --> 01:03:08,559 have him on deck to uh to do 1673 01:03:06,640 --> 01:03:10,640 interpretive dances when the AV fails, 1674 01:03:08,559 --> 01:03:12,079 but the AV people did their job. So uh 1675 01:03:10,640 --> 01:03:16,559 you didn't get to see any of that this 1676 01:03:12,079 --> 01:03:19,119 time. Um genuinely when we when we book 1677 01:03:16,559 --> 01:03:20,400 venues for PyCon we tell the venue AV 1678 01:03:19,119 --> 01:03:21,680 people about lightning talks and their 1679 01:03:20,400 --> 01:03:23,920 reaction is almost always consistent 1680 01:03:21,680 --> 01:03:25,119 that you want to do what 1681 01:03:23,920 --> 01:03:27,119 and it still works. 1682 01:03:25,119 --> 01:03:29,839 Yeah it's still like massive testament 1683 01:03:27,119 --> 01:03:32,880 to the venue AV team and especially to 1684 01:03:29,839 --> 01:03:35,920 uh the PON AV team led by Nex video. 1685 01:03:32,880 --> 01:03:39,760 Oh uh thanks you thank you to all 12 1686 01:03:35,920 --> 01:03:41,359 sorry 12 13 speakers uh from today's 1687 01:03:39,760 --> 01:03:43,960 lightning talks. you've been fantastic 1688 01:03:41,359 --> 01:03:47,070 as always. 1689 01:03:43,960 --> 01:03:47,070 [Music] 1690 01:03:47,680 --> 01:03:51,359 Um, thank you Daisy for being the 1691 01:03:49,839 --> 01:03:54,760 wonderful co-host for this year's 1692 01:03:51,359 --> 01:03:54,760 Lightning Talks. 1693 01:03:55,280 --> 01:03:58,240 And thank you so much to Chris for 1694 01:03:56,960 --> 01:03:59,039 coming back and hosting Lightning Talks 1695 01:03:58,240 --> 01:04:03,280 with me once again. 1696 01:03:59,039 --> 01:04:04,880 Hey, it's me. Um, that is the end of 1697 01:04:03,280 --> 01:04:07,359 Lightning Talks. Please give a huge 1698 01:04:04,880 --> 01:04:12,760 round of applause to our fearless 1699 01:04:07,359 --> 01:04:12,760 conference director, Peter Hall. Woo! 1700 01:04:13,400 --> 01:04:22,400 [Applause] 1701 01:04:15,000 --> 01:04:22,400 [Music] 1702 01:04:22,640 --> 01:04:25,799 I'll be