1 00:00:00,000 --> 00:00:04,280 All right. Thank you. 2 00:00:01,120 --> 00:00:04,280 It is. 3 00:00:05,860 --> 00:00:10,939 [Music] 4 00:00:15,679 --> 00:00:20,240 Who's ready for some structure and 5 00:00:17,279 --> 00:00:21,760 order? 6 00:00:20,240 --> 00:00:26,519 Great. Well, you've come to the wrong 7 00:00:21,760 --> 00:00:26,519 place. It's lightning talks time. 8 00:00:27,840 --> 00:00:31,760 There we go. 9 00:00:29,679 --> 00:00:33,440 Okay. Uh for those of you who've been 10 00:00:31,760 --> 00:00:34,960 here before, uh you don't need to listen 11 00:00:33,440 --> 00:00:36,640 to this. For those of you who haven't, 12 00:00:34,960 --> 00:00:39,520 these are five minute talks that people 13 00:00:36,640 --> 00:00:41,600 have signed up for today. 14 00:00:39,520 --> 00:00:43,600 Uh they will be presenting with or 15 00:00:41,600 --> 00:00:45,440 without slides on whatever topic they 16 00:00:43,600 --> 00:00:47,200 decided was interesting and we agreed 17 00:00:45,440 --> 00:00:49,840 was interesting. 18 00:00:47,200 --> 00:00:52,160 Uh and our job is to make these go fast 19 00:00:49,840 --> 00:00:53,440 without awkwardness in between. 20 00:00:52,160 --> 00:00:55,520 Well, we we'll do our best on the 21 00:00:53,440 --> 00:00:56,320 awkwardness thing, but you know, 22 00:00:55,520 --> 00:00:59,440 lightning talks 23 00:00:56,320 --> 00:01:01,840 audible. Really, I am. They can hear me. 24 00:00:59,440 --> 00:01:02,960 Lightning talks are chaotic for myself 25 00:01:01,840 --> 00:01:04,400 and Chris. They're chaotic for our 26 00:01:02,960 --> 00:01:07,040 presenters. They're chaotic for our AV 27 00:01:04,400 --> 00:01:08,880 team, as you've already seen, but they 28 00:01:07,040 --> 00:01:13,040 are also loads and loads of fun. 29 00:01:08,880 --> 00:01:14,880 Okay? And so, our part of this is 30 00:01:13,040 --> 00:01:16,640 audience participation. We need to make 31 00:01:14,880 --> 00:01:18,640 sure that our speakers who signed up for 32 00:01:16,640 --> 00:01:21,520 five minute talks do not get any more 33 00:01:18,640 --> 00:01:23,200 time than what we let them have. Uh our 34 00:01:21,520 --> 00:01:26,479 speakers can see a timer on the front of 35 00:01:23,200 --> 00:01:28,799 the screen and Beno here uh is managing 36 00:01:26,479 --> 00:01:31,040 the timer and when we get to about 10 37 00:01:28,799 --> 00:01:33,520 seconds left he's going to start finger 38 00:01:31,040 --> 00:01:36,079 clapping silently relatively quietly so 39 00:01:33,520 --> 00:01:38,560 it doesn't drown everyone out until he 40 00:01:36,079 --> 00:01:40,880 starts applauding a bit more. And then 41 00:01:38,560 --> 00:01:43,520 when the clock fits 5:00 we are going to 42 00:01:40,880 --> 00:01:47,520 applause uporiously and cheer really 43 00:01:43,520 --> 00:01:49,280 really really really loudly 44 00:01:47,520 --> 00:01:51,119 until we say stop so we don't waste too 45 00:01:49,280 --> 00:01:54,079 much time. 46 00:01:51,119 --> 00:01:59,350 Okay. Uh, so on deck we have uh David 47 00:01:54,079 --> 00:02:04,159 Vo, but first uh Amanda Hogan. 48 00:01:59,350 --> 00:02:07,520 [Applause] 49 00:02:04,159 --> 00:02:10,239 Okay, I need screen. 50 00:02:07,520 --> 00:02:11,920 Yay. Okay, so I have in front of me I 51 00:02:10,239 --> 00:02:15,120 have three pipe cleaners. I cheated 52 00:02:11,920 --> 00:02:17,840 appallingly by cutting uh one of the cut 53 00:02:15,120 --> 00:02:20,239 pipe cleaners into two um in with two 54 00:02:17,840 --> 00:02:21,920 cuts into three pieces so that I didn't 55 00:02:20,239 --> 00:02:23,840 take a whole minute which I've just used 56 00:02:21,920 --> 00:02:25,760 to explain to you. Uh so what I'm going 57 00:02:23,840 --> 00:02:27,920 to be doing is talking about how you can 58 00:02:25,760 --> 00:02:30,720 make earrings out of everything. While 59 00:02:27,920 --> 00:02:33,360 I'm talking I'm also going to be making 60 00:02:30,720 --> 00:02:35,680 earrings out of pipe cleaners. Uh so 61 00:02:33,360 --> 00:02:37,599 when I was very young I used to I don't 62 00:02:35,680 --> 00:02:40,400 know how many are like me. I used to 63 00:02:37,599 --> 00:02:42,160 hang cherries in pears over my ears at 64 00:02:40,400 --> 00:02:44,480 Christmas lunch. Has anyone done that? 65 00:02:42,160 --> 00:02:47,200 Yeah. Okay. So, this is my first foray 66 00:02:44,480 --> 00:02:50,319 into earring making. I I believe that it 67 00:02:47,200 --> 00:02:52,480 was a craft. Um and so after that, uh my 68 00:02:50,319 --> 00:02:56,160 mom refused to give me pierced ears. So, 69 00:02:52,480 --> 00:02:59,040 I um then dangled Christmas Bbles and 70 00:02:56,160 --> 00:03:00,239 their long string over my ear. Uh I was 71 00:02:59,040 --> 00:03:02,640 told that I was not allowed to get 72 00:03:00,239 --> 00:03:04,480 pierced ears until I was 16 when it was 73 00:03:02,640 --> 00:03:07,519 uh I was allowed to go without parental 74 00:03:04,480 --> 00:03:10,720 consent. Very nice of her. Uh, and then 75 00:03:07,519 --> 00:03:14,159 when I was in year 11, my I did get 76 00:03:10,720 --> 00:03:18,080 pierced. My school um added a Coke 77 00:03:14,159 --> 00:03:20,560 machine for fundraising purposes, which 78 00:03:18,080 --> 00:03:22,800 is a terrible idea. I don't know. Uh, 79 00:03:20,560 --> 00:03:25,680 and so do you know that if you remove 80 00:03:22,800 --> 00:03:28,159 the tab from a Coke uh can uh very 81 00:03:25,680 --> 00:03:30,720 careful way, it has a hole that um can 82 00:03:28,159 --> 00:03:32,560 be threaded through a stud earring or a 83 00:03:30,720 --> 00:03:33,680 sleeper, sleepers will come back, so you 84 00:03:32,560 --> 00:03:36,799 have to know what they look like. That's 85 00:03:33,680 --> 00:03:38,159 a sleeper. Um and uh and then you can 86 00:03:36,799 --> 00:03:40,640 really annoy some private school 87 00:03:38,159 --> 00:03:43,280 teachers. Uh 88 00:03:40,640 --> 00:03:45,519 and so that was a um then I discovered 89 00:03:43,280 --> 00:03:47,840 that uh Christmas earrings that I really 90 00:03:45,519 --> 00:03:50,640 loved were things that people That's 91 00:03:47,840 --> 00:03:53,440 one. We have a butterfly everybody. 92 00:03:50,640 --> 00:03:55,360 Uh Christmas earrings were a thing that 93 00:03:53,440 --> 00:03:57,599 people paid money for and I didn't have 94 00:03:55,360 --> 00:04:00,319 any of that. Uh and it seemed like 95 00:03:57,599 --> 00:04:03,040 wasteful to me to spend money when I had 96 00:04:00,319 --> 00:04:05,200 Bbles in a box in my house. So, the 97 00:04:03,040 --> 00:04:06,879 bbles came back again. Uh, 98 00:04:05,200 --> 00:04:08,480 here. 99 00:04:06,879 --> 00:04:10,959 Thank you. 100 00:04:08,480 --> 00:04:13,599 Oh, okay. The Bbles came back again. Uh, 101 00:04:10,959 --> 00:04:15,280 so instead of being threaded over my ear 102 00:04:13,599 --> 00:04:16,880 with the strings, they were now threaded 103 00:04:15,280 --> 00:04:18,720 through with the sleeper through the 104 00:04:16,880 --> 00:04:22,000 center. Uh, it's an excellent way to 105 00:04:18,720 --> 00:04:25,360 make an earring if you are uh rushed at 106 00:04:22,000 --> 00:04:28,720 Christmas. Um, and so then I also 107 00:04:25,360 --> 00:04:30,880 discovered that you can add pom poms to 108 00:04:28,720 --> 00:04:34,639 uh sleepers. Sleepers are a very big 109 00:04:30,880 --> 00:04:36,639 star in this story. Um, and the good uh 110 00:04:34,639 --> 00:04:38,720 pom poms that are made normal size are a 111 00:04:36,639 --> 00:04:40,479 bit big, but if you use a fork, you can 112 00:04:38,720 --> 00:04:42,479 make a pom pom that is perfect earring 113 00:04:40,479 --> 00:04:44,080 size. I'm giving you all the tips today. 114 00:04:42,479 --> 00:04:47,280 You're going to go home and uh get all 115 00:04:44,080 --> 00:04:49,440 your forks out. Um, or you can have a 116 00:04:47,280 --> 00:04:52,720 very talented daughter. Uh, I have one 117 00:04:49,440 --> 00:04:55,919 of those. Um, and so she can do use um 118 00:04:52,720 --> 00:05:00,479 oven baked clay and made ramen bowls. 119 00:04:55,919 --> 00:05:02,240 Honestly, ramen bowls with um little um 120 00:05:00,479 --> 00:05:04,080 what are they called? eyelet screws that 121 00:05:02,240 --> 00:05:06,160 you can get from Bunnings. Uh so you 122 00:05:04,080 --> 00:05:10,000 could attach an earring to the center of 123 00:05:06,160 --> 00:05:12,479 that. Um and so you are now going to go 124 00:05:10,000 --> 00:05:14,400 out into the world and look at things 125 00:05:12,479 --> 00:05:16,560 differently. If you are a TAZ teacher 126 00:05:14,400 --> 00:05:18,960 like me or if you just have a lot of 127 00:05:16,560 --> 00:05:23,199 junk in your drawers, which many of you 128 00:05:18,960 --> 00:05:26,479 do nerds, um 129 00:05:23,199 --> 00:05:28,639 you can use an eyelet screw to attach to 130 00:05:26,479 --> 00:05:32,880 anything that is a kind of malleable 131 00:05:28,639 --> 00:05:35,600 plastic uh or wood and you can make 132 00:05:32,880 --> 00:05:37,440 uh like bugs. No, earrings do not have 133 00:05:35,600 --> 00:05:40,720 to match. This is a rule that uh has 134 00:05:37,440 --> 00:05:43,280 been like applied to us for too long. 135 00:05:40,720 --> 00:05:46,639 Uh, so, 136 00:05:43,280 --> 00:05:50,000 uh, if you have access to a drill, you 137 00:05:46,639 --> 00:05:52,960 can turn and a paper clip and some 138 00:05:50,000 --> 00:05:54,960 pliers, you can turn some Lego bits into 139 00:05:52,960 --> 00:05:57,199 this is a very bad angle. Uh, this was 140 00:05:54,960 --> 00:05:59,680 practiced on a flat surface. Uh, they 141 00:05:57,199 --> 00:06:01,919 they do they do exist like they and 142 00:05:59,680 --> 00:06:05,280 they're threaded. Uh, or if you're like 143 00:06:01,919 --> 00:06:08,240 me and have laser and cutters and 3D 144 00:06:05,280 --> 00:06:11,520 printers down the hall uh, and an SVG, 145 00:06:08,240 --> 00:06:14,160 you can make these. This is the this is 146 00:06:11,520 --> 00:06:17,280 the logo of GPN everybody. Uh we have 147 00:06:14,160 --> 00:06:18,960 the CEO of GPN here right today and uh 148 00:06:17,280 --> 00:06:22,160 it's a very good organization. I have 149 00:06:18,960 --> 00:06:27,160 the shirt. Uh and then 150 00:06:22,160 --> 00:06:27,160 we have two butterflies. 151 00:06:28,479 --> 00:06:31,199 They're not the most beautiful 152 00:06:29,360 --> 00:06:34,880 butterflies I've ever made. Then if you 153 00:06:31,199 --> 00:06:37,280 thread sleepers through them, 154 00:06:34,880 --> 00:06:39,280 even while your hands are shaking, you 155 00:06:37,280 --> 00:06:40,840 have earrings that I will be wearing for 156 00:06:39,280 --> 00:06:51,440 the rest of the day. 157 00:06:40,840 --> 00:06:54,479 [Applause] 158 00:06:51,440 --> 00:06:57,479 Thank you so much. 159 00:06:54,479 --> 00:06:57,479 Hello. 160 00:06:57,600 --> 00:07:00,720 Hold up the earrings. 161 00:06:59,599 --> 00:07:02,800 One. one fell. 162 00:07:00,720 --> 00:07:06,720 There we go. 163 00:07:02,800 --> 00:07:08,319 So, we've all made mistakes 164 00:07:06,720 --> 00:07:11,280 which will be relevant to our next talk. 165 00:07:08,319 --> 00:07:13,520 Uh, for the time being, Sean, if you're 166 00:07:11,280 --> 00:07:17,240 ready to come up next on this side. 167 00:07:13,520 --> 00:07:17,240 Thank you so much, Amanda. 168 00:07:19,120 --> 00:07:23,759 And we've all made mistakes. Uh, the 169 00:07:21,759 --> 00:07:25,919 AV's been a bit screwy already. I forgot 170 00:07:23,759 --> 00:07:26,880 which order this introduction goes in. 171 00:07:25,919 --> 00:07:28,240 But, we're all apparently making 172 00:07:26,880 --> 00:07:31,039 mistakes with typins. So, David's going 173 00:07:28,240 --> 00:07:31,039 to tell us about them. 174 00:07:32,240 --> 00:07:36,639 So yeah, you're you're probably not 175 00:07:34,000 --> 00:07:38,080 using typins, right? But um what what 176 00:07:36,639 --> 00:07:40,000 are typins? You might be asking. So 177 00:07:38,080 --> 00:07:41,919 there's there these things, right? These 178 00:07:40,000 --> 00:07:44,160 these are great for telling humans and 179 00:07:41,919 --> 00:07:46,400 tools what the expected types of 180 00:07:44,160 --> 00:07:48,800 everything is. 181 00:07:46,400 --> 00:07:50,800 So the most common mistake I see is just 182 00:07:48,800 --> 00:07:53,520 not using typins. Typins are great for 183 00:07:50,800 --> 00:07:56,560 documentation. You should use them. 184 00:07:53,520 --> 00:07:59,199 Sometimes people partially type in their 185 00:07:56,560 --> 00:08:01,919 functions. So what happens here is that 186 00:07:59,199 --> 00:08:06,000 the tools will assume that these can 187 00:08:01,919 --> 00:08:07,440 just take or return any type. You should 188 00:08:06,000 --> 00:08:09,919 probably explicit if this is 189 00:08:07,440 --> 00:08:12,080 intentional. 190 00:08:09,919 --> 00:08:15,680 But what's even worse than that are 191 00:08:12,080 --> 00:08:18,319 typins that are just straight up wrong. 192 00:08:15,680 --> 00:08:21,199 There's about five different actively 193 00:08:18,319 --> 00:08:22,800 developed type checkers these days. Make 194 00:08:21,199 --> 00:08:25,360 sure you're running at least one of them 195 00:08:22,800 --> 00:08:27,840 in CI. 196 00:08:25,360 --> 00:08:30,879 So, Python has containers like lists, 197 00:08:27,840 --> 00:08:35,680 right? But what's this list that I'm 198 00:08:30,879 --> 00:08:37,839 taking here of so collections like lists 199 00:08:35,680 --> 00:08:40,800 let you specify the types of values that 200 00:08:37,839 --> 00:08:42,959 they should contain. So, yeah, this is 201 00:08:40,800 --> 00:08:47,600 great. But what if I want to allow 202 00:08:42,959 --> 00:08:49,200 passing a set of integers for example? 203 00:08:47,600 --> 00:08:51,040 So the standard library does define a 204 00:08:49,200 --> 00:08:53,920 bunch of abstract collections which let 205 00:08:51,040 --> 00:08:57,040 you say that these things can take for 206 00:08:53,920 --> 00:09:00,160 example sequences which you know so 207 00:08:57,040 --> 00:09:03,120 types like lists or tpples or in this 208 00:09:00,160 --> 00:09:06,880 example uh I'd just say that uh this can 209 00:09:03,120 --> 00:09:08,880 take anything that might contain ins. 210 00:09:06,880 --> 00:09:13,440 Um, yeah. So, publishing packages to 211 00:09:08,880 --> 00:09:15,360 Pippi. Um, if you're if you have a keen 212 00:09:13,440 --> 00:09:17,760 eye, you you might notice that this 213 00:09:15,360 --> 00:09:19,920 package that I have on screen is missing 214 00:09:17,760 --> 00:09:23,279 something. This does have type hints, 215 00:09:19,920 --> 00:09:25,920 but it's missing this file. So, if you 216 00:09:23,279 --> 00:09:29,040 publish a type hinted library to Pippi, 217 00:09:25,920 --> 00:09:31,920 you have to include this marker file for 218 00:09:29,040 --> 00:09:34,080 tools to actually consume your typeins. 219 00:09:31,920 --> 00:09:38,640 And you only need one at the top level. 220 00:09:34,080 --> 00:09:40,560 So yeah, don't worry about nesting. So 221 00:09:38,640 --> 00:09:44,240 here's some common typos that you might 222 00:09:40,560 --> 00:09:46,800 be making. So here someone wants to 223 00:09:44,240 --> 00:09:49,600 return a tpple from this uh this 224 00:09:46,800 --> 00:09:52,480 function. Um you need to actually use 225 00:09:49,600 --> 00:09:54,480 the tpple type. 226 00:09:52,480 --> 00:09:58,720 Yeah. 227 00:09:54,480 --> 00:10:01,040 Um let's play a little game. 228 00:09:58,720 --> 00:10:03,200 Function or type. So here someone's 229 00:10:01,040 --> 00:10:04,480 actually tried to use the any function 230 00:10:03,200 --> 00:10:06,640 as a type. 231 00:10:04,480 --> 00:10:08,480 Oh 232 00:10:06,640 --> 00:10:11,040 yeah, the the there's a separate any 233 00:10:08,480 --> 00:10:13,040 type which you have to import and use. 234 00:10:11,040 --> 00:10:16,800 Yeah, the 235 00:10:13,040 --> 00:10:19,120 um the same same deal here. Maybe you've 236 00:10:16,800 --> 00:10:22,399 written a decorator, right? Um yeah, so 237 00:10:19,120 --> 00:10:24,720 this here is the callable function, not 238 00:10:22,399 --> 00:10:28,399 the callable type. 239 00:10:24,720 --> 00:10:33,519 Um so yeah, this is better. But um yeah, 240 00:10:28,399 --> 00:10:35,680 you can also say what uh arguments uh a 241 00:10:33,519 --> 00:10:38,320 callable can take and what will return. 242 00:10:35,680 --> 00:10:41,519 Um but yeah, 243 00:10:38,320 --> 00:10:44,079 so here someone's tried to type into 244 00:10:41,519 --> 00:10:46,000 numpy array. 245 00:10:44,079 --> 00:10:48,640 But 246 00:10:46,000 --> 00:10:52,560 if you've used numpy, you might know 247 00:10:48,640 --> 00:10:54,240 that numpy.array is a function, not a 248 00:10:52,560 --> 00:10:57,519 type. 249 00:10:54,240 --> 00:10:59,279 The type is actually called numpy. Nd 250 00:10:57,519 --> 00:11:01,760 array, 251 00:10:59,279 --> 00:11:05,040 but you probably actually want to use 252 00:11:01,760 --> 00:11:06,800 the the nd array type from numpy.typing. 253 00:11:05,040 --> 00:11:10,880 Um, 254 00:11:06,800 --> 00:11:13,920 for many reasons that uh I probably 255 00:11:10,880 --> 00:11:19,600 can't fit in 5 minutes. 256 00:11:13,920 --> 00:11:23,839 Um similarly uh PyTorch has a tensor 257 00:11:19,600 --> 00:11:27,040 type but here this function is using the 258 00:11:23,839 --> 00:11:29,360 tensor function. 259 00:11:27,040 --> 00:11:33,519 Yeah. 260 00:11:29,360 --> 00:11:37,640 So thanks everyone. Um this here is a QR 261 00:11:33,519 --> 00:11:37,640 code to the slides if you need it. 262 00:11:42,399 --> 00:11:45,360 typing is a lot better than it used to 263 00:11:44,079 --> 00:11:47,440 be, but there's still a lot of things 264 00:11:45,360 --> 00:11:48,959 that can go wrong. 265 00:11:47,440 --> 00:11:51,440 Um, 266 00:11:48,959 --> 00:11:53,680 Sam, you're up on deck on this side, but 267 00:11:51,440 --> 00:11:55,600 first, uh, we're going to hear about 268 00:11:53,680 --> 00:11:57,870 game development from Shan. 269 00:11:55,600 --> 00:12:03,980 Thank you. 270 00:11:57,870 --> 00:12:03,980 [Applause] 271 00:12:04,880 --> 00:12:09,279 So, hello everyone. Uh, I'm Sean. I'm a 272 00:12:06,959 --> 00:12:10,720 junior software engineer and I got my 273 00:12:09,279 --> 00:12:14,240 start in programming with game 274 00:12:10,720 --> 00:12:15,519 development and for me I felt that my 275 00:12:14,240 --> 00:12:17,040 journey through game development has 276 00:12:15,519 --> 00:12:18,959 laid a really strong foundation for my 277 00:12:17,040 --> 00:12:22,240 programming skills which eventually led 278 00:12:18,959 --> 00:12:24,000 me to Wolf Lander position. Um I also 279 00:12:22,240 --> 00:12:26,240 saw things go boom on screen that looked 280 00:12:24,000 --> 00:12:28,880 really cool and I wanted to uh learn how 281 00:12:26,240 --> 00:12:30,639 to make things go boom as well. Um so 282 00:12:28,880 --> 00:12:32,320 today I'm going to talk about why game 283 00:12:30,639 --> 00:12:34,320 development is an amazing way to learn 284 00:12:32,320 --> 00:12:38,560 programming. Um and yes my slides are a 285 00:12:34,320 --> 00:12:40,560 game. Um so three core reasons uh visual 286 00:12:38,560 --> 00:12:42,720 feedback touching almost every area of 287 00:12:40,560 --> 00:12:46,000 programming and solving fantastical 288 00:12:42,720 --> 00:12:47,680 problems. So number one visual feedback. 289 00:12:46,000 --> 00:12:50,639 I believe that visual feedback is 290 00:12:47,680 --> 00:12:52,800 integral to the learning process. Um 291 00:12:50,639 --> 00:12:54,320 it's a it's an indicator of like what is 292 00:12:52,800 --> 00:12:56,000 going right and what is going wrong but 293 00:12:54,320 --> 00:12:57,839 it's also something of a motivating 294 00:12:56,000 --> 00:13:00,160 force. I'm sure we've had those like 295 00:12:57,839 --> 00:13:02,000 uplifting moments where we do something 296 00:13:00,160 --> 00:13:04,000 and it works. And I'm willing to bet 297 00:13:02,000 --> 00:13:07,360 that those which had a strong visual 298 00:13:04,000 --> 00:13:10,480 reaction were the most like impactful. 299 00:13:07,360 --> 00:13:13,120 And games are very connected to this. 300 00:13:10,480 --> 00:13:15,839 They are usually well most often tech 301 00:13:13,120 --> 00:13:18,240 visual mediums. And so almost everything 302 00:13:15,839 --> 00:13:19,839 you do, anything you kind of implement 303 00:13:18,240 --> 00:13:21,920 will have some kind of visual feedback 304 00:13:19,839 --> 00:13:24,480 attached to it. Let's take something 305 00:13:21,920 --> 00:13:26,800 simple as like making the play a jump. 306 00:13:24,480 --> 00:13:28,560 Already what you're trying to do is 307 00:13:26,800 --> 00:13:31,120 reacting on the screen and we have a 308 00:13:28,560 --> 00:13:32,639 visual feedback attached to it. Then you 309 00:13:31,120 --> 00:13:34,000 can make it better, maybe vary the jump 310 00:13:32,639 --> 00:13:37,680 a little bit so it feels a little bit 311 00:13:34,000 --> 00:13:39,760 better by varying the uh gravity and uh 312 00:13:37,680 --> 00:13:41,279 jump acceleration. And you take it one 313 00:13:39,760 --> 00:13:44,720 step further by adding some animations 314 00:13:41,279 --> 00:13:47,279 and stuff. And throughout this process, 315 00:13:44,720 --> 00:13:48,320 visual feedback is always there. And so 316 00:13:47,279 --> 00:13:51,360 no matter what you do in game 317 00:13:48,320 --> 00:13:52,880 development, you will feel good about 318 00:13:51,360 --> 00:13:55,360 it, which will then help keep you 319 00:13:52,880 --> 00:13:58,000 motivated and keep you moving forward in 320 00:13:55,360 --> 00:13:59,920 the things you want to learn. 321 00:13:58,000 --> 00:14:01,680 Next is touching almost every area of 322 00:13:59,920 --> 00:14:03,120 programming. Depending on the game you 323 00:14:01,680 --> 00:14:04,480 kind of make, uh you can touch different 324 00:14:03,120 --> 00:14:05,440 areas such as databases, graphics, 325 00:14:04,480 --> 00:14:06,959 rendering, networking, hardware 326 00:14:05,440 --> 00:14:10,240 integration, low level GPU optimization, 327 00:14:06,959 --> 00:14:11,600 just to name a few. Um 328 00:14:10,240 --> 00:14:14,800 games at the end of the day are just 329 00:14:11,600 --> 00:14:18,240 software. Um and they're also not bound 330 00:14:14,800 --> 00:14:21,120 by any particular framework or tool. In 331 00:14:18,240 --> 00:14:23,760 fact, technically anything can be a game 332 00:14:21,120 --> 00:14:25,279 as long as it's well a game, an 333 00:14:23,760 --> 00:14:26,959 interactive system of rules and goals 334 00:14:25,279 --> 00:14:28,720 that engages the player in a playful 335 00:14:26,959 --> 00:14:30,800 manner. 336 00:14:28,720 --> 00:14:32,720 The game, the idea of making a game just 337 00:14:30,800 --> 00:14:34,399 gives you the kind of structure you need 338 00:14:32,720 --> 00:14:36,320 to keep yourself motivated and to give 339 00:14:34,399 --> 00:14:38,000 you direction. 340 00:14:36,320 --> 00:14:41,360 For example, you can say, I want to 341 00:14:38,000 --> 00:14:43,040 learn SQL. Um, which 342 00:14:41,360 --> 00:14:44,240 is a little bit daunting. Um, it's you 343 00:14:43,040 --> 00:14:46,959 don't really know what you want to do 344 00:14:44,240 --> 00:14:48,480 with SQL and it's very vague. You can 345 00:14:46,959 --> 00:14:50,480 instead say, "I want to learn SQL to 346 00:14:48,480 --> 00:14:52,720 manage my game's inventory system and 347 00:14:50,480 --> 00:14:54,160 database." You now have a way to kind of 348 00:14:52,720 --> 00:14:56,160 apply what you want to learn and 349 00:14:54,160 --> 00:14:57,920 direction and hopefully make something 350 00:14:56,160 --> 00:14:59,440 cool and visual out of it in the end as 351 00:14:57,920 --> 00:15:00,720 well. 352 00:14:59,440 --> 00:15:02,800 So, if you always had that kind of one 353 00:15:00,720 --> 00:15:04,079 thing you wanted to learn, maybe make a 354 00:15:02,800 --> 00:15:06,079 game out of it or incorporate in the 355 00:15:04,079 --> 00:15:08,240 game in the game in some way as a 356 00:15:06,079 --> 00:15:09,680 motivating factor. 357 00:15:08,240 --> 00:15:12,320 And now, finally, my favorite part, 358 00:15:09,680 --> 00:15:15,760 solving fantastical problems. Games are 359 00:15:12,320 --> 00:15:18,639 not bound by the chains of reality. 360 00:15:15,760 --> 00:15:20,800 You can basically do whatever you want. 361 00:15:18,639 --> 00:15:22,800 Uh, I mean, how often do you get to 362 00:15:20,800 --> 00:15:25,279 solve problems like, "How do I flood a 363 00:15:22,800 --> 00:15:28,000 city with ducks? 364 00:15:25,279 --> 00:15:32,480 How do I build skyscrapers out of cake?" 365 00:15:28,000 --> 00:15:34,480 "How do I make a pyon talk into a game?" 366 00:15:32,480 --> 00:15:38,399 Games can range from being wacky to 367 00:15:34,480 --> 00:15:39,760 realistic. And by that nature, you will 368 00:15:38,399 --> 00:15:44,440 exercise your problem, your problem 369 00:15:39,760 --> 00:15:44,440 solving skills quite extensively. 370 00:15:44,560 --> 00:15:48,720 So maybe my ramblings have kind of 371 00:15:47,040 --> 00:15:50,959 inspired you to maybe also start making 372 00:15:48,720 --> 00:15:53,519 games yourself. But where do you get 373 00:15:50,959 --> 00:15:55,440 started? Well, as mentioned before, you 374 00:15:53,519 --> 00:15:57,199 can use what you already have. Whatever 375 00:15:55,440 --> 00:15:59,279 framework you want to learn, whatever 376 00:15:57,199 --> 00:16:01,839 kind of thing you want to incorporate, 377 00:15:59,279 --> 00:16:03,440 conceptualize it in a game, and you can 378 00:16:01,839 --> 00:16:05,120 kind of go from there. You also don't 379 00:16:03,440 --> 00:16:07,839 need to worry about graphics rendering 380 00:16:05,120 --> 00:16:09,839 as much. Uh some simple asy art or some 381 00:16:07,839 --> 00:16:12,399 formatted text on a CLI can go a long 382 00:16:09,839 --> 00:16:14,320 way. For more Python related things, 383 00:16:12,399 --> 00:16:16,240 Pygame is an excellent choice. It will 384 00:16:14,320 --> 00:16:18,000 handle your graphics rendering, uh, 385 00:16:16,240 --> 00:16:20,399 audio handling and input handling as 386 00:16:18,000 --> 00:16:22,720 well. Um, and otherwise you want to go 387 00:16:20,399 --> 00:16:23,920 one step further, you have game engines, 388 00:16:22,720 --> 00:16:25,440 um, which will also handle stuff like 389 00:16:23,920 --> 00:16:27,839 physics, collisions, particles, and 390 00:16:25,440 --> 00:16:29,680 other things that might be useful in the 391 00:16:27,839 --> 00:16:31,920 game. Um, I highly recommend the GDO 392 00:16:29,680 --> 00:16:34,000 game engine because it's, uh, scripting 393 00:16:31,920 --> 00:16:36,560 language is almost onetoone with Python, 394 00:16:34,000 --> 00:16:38,560 and it's also open source. 395 00:16:36,560 --> 00:16:39,920 So games are an amazing way to learn 396 00:16:38,560 --> 00:16:41,199 programming because they provide visual 397 00:16:39,920 --> 00:16:43,279 feedback within the development process 398 00:16:41,199 --> 00:16:44,560 itself. You touch almost every area of 399 00:16:43,279 --> 00:16:47,680 programming and you get to solve 400 00:16:44,560 --> 00:16:50,839 fantastical problems. With that said, go 401 00:16:47,680 --> 00:16:50,839 make games. 402 00:16:57,120 --> 00:17:00,920 Thank you so much, Sean. 403 00:17:00,959 --> 00:17:05,919 Some of the best lightning talks have 404 00:17:04,000 --> 00:17:07,280 information as well as a fun little fun 405 00:17:05,919 --> 00:17:09,600 little trick up their sleeve. And as 406 00:17:07,280 --> 00:17:11,039 soon as we saw 407 00:17:09,600 --> 00:17:12,400 I'm going to tell talk about gamedev, 408 00:17:11,039 --> 00:17:14,720 but the slides are a game. We had to 409 00:17:12,400 --> 00:17:17,600 accept it. Up on this side next, we have 410 00:17:14,720 --> 00:17:19,280 Ada. But first, 411 00:17:17,600 --> 00:17:22,520 Sam Bishop is going to take us to a land 412 00:17:19,280 --> 00:17:22,520 down thunder. 413 00:17:22,880 --> 00:17:27,600 It wouldn't be a conference without a 414 00:17:24,559 --> 00:17:29,120 pardon. So yes uh for anyone who hasn't 415 00:17:27,600 --> 00:17:30,320 worked this out at some point when 416 00:17:29,120 --> 00:17:31,919 Python programmers are talking about 417 00:17:30,320 --> 00:17:34,559 dunder we're talking about these double 418 00:17:31,919 --> 00:17:36,559 underscore things and uh you might have 419 00:17:34,559 --> 00:17:37,679 come across some of them uh but I'm 420 00:17:36,559 --> 00:17:39,200 going to cover these ones first. These 421 00:17:37,679 --> 00:17:40,799 are not dunder methods. Do not get them 422 00:17:39,200 --> 00:17:43,120 confused or ask me why I didn't include 423 00:17:40,799 --> 00:17:44,640 them. Name main and a few others. They 424 00:17:43,120 --> 00:17:46,000 are not them. I'm not going to bother. 425 00:17:44,640 --> 00:17:48,720 I'm moving on cuz I've got a hundred of 426 00:17:46,000 --> 00:17:49,919 these to cover such as in it which is 427 00:17:48,720 --> 00:17:51,679 something most people have covered 428 00:17:49,919 --> 00:17:53,120 pretty early on in learning Python. It's 429 00:17:51,679 --> 00:17:54,880 how you make classes. I'm not going to 430 00:17:53,120 --> 00:17:56,240 keep explaining. Then there's repper 431 00:17:54,880 --> 00:17:58,080 where you start having to go, "Hey, 432 00:17:56,240 --> 00:17:59,360 what's this object thing? I'd like 433 00:17:58,080 --> 00:18:00,799 something more useful and you make a 434 00:17:59,360 --> 00:18:02,640 custom version to make that easier for 435 00:18:00,799 --> 00:18:04,640 yourself." Then you get to the ones that 436 00:18:02,640 --> 00:18:06,160 people use a lot for type casting, like 437 00:18:04,640 --> 00:18:08,799 when you need to have a custom string, 438 00:18:06,160 --> 00:18:11,679 int, float, or lesser often complex or 439 00:18:08,799 --> 00:18:13,760 boolean output for what your class does. 440 00:18:11,679 --> 00:18:15,840 And then there's bytes and uh the much 441 00:18:13,760 --> 00:18:17,200 much more infrequently used index, which 442 00:18:15,840 --> 00:18:20,559 is actually called when you're trying to 443 00:18:17,200 --> 00:18:22,400 use it as a reference for indexing. Then 444 00:18:20,559 --> 00:18:23,919 there's the math ones like comparison. 445 00:18:22,400 --> 00:18:25,760 So we've got our greater than, our less 446 00:18:23,919 --> 00:18:27,440 than, our greater than or equal to, our 447 00:18:25,760 --> 00:18:29,039 less than or equal to, are equal to, and 448 00:18:27,440 --> 00:18:30,720 our not equal to. All of these are 449 00:18:29,039 --> 00:18:32,559 hidden behind dunder methods. If you 450 00:18:30,720 --> 00:18:35,520 want to mess with how Python treats 451 00:18:32,559 --> 00:18:36,559 them, this is how you do it. And then 452 00:18:35,520 --> 00:18:38,960 there's the same thing for all the 453 00:18:36,559 --> 00:18:41,600 arithmetic operators. Now, that's a big 454 00:18:38,960 --> 00:18:43,760 old list of 8 by3 and they are all just 455 00:18:41,600 --> 00:18:46,160 variations on the same thing. We have 456 00:18:43,760 --> 00:18:48,160 our add, our right ad, and our in place 457 00:18:46,160 --> 00:18:49,679 ad, which are is my thing on the left, 458 00:18:48,160 --> 00:18:51,679 my thing on the right, or am I doing it 459 00:18:49,679 --> 00:18:53,280 with the weird in place operators? And 460 00:18:51,679 --> 00:18:55,039 that's just our addition, subtraction, 461 00:18:53,280 --> 00:18:56,559 multiplication, division, modulo, into 462 00:18:55,039 --> 00:18:58,400 division, exponentiation, and matrix 463 00:18:56,559 --> 00:19:00,080 multiplication. And then we have our 464 00:18:58,400 --> 00:19:02,000 boolean arithmetic operators. So we've 465 00:19:00,080 --> 00:19:05,039 got our left shift, right shift, and or 466 00:19:02,000 --> 00:19:06,640 exor. Same deal, same kind of pattern. 467 00:19:05,039 --> 00:19:08,400 We've got our value conversions. 468 00:19:06,640 --> 00:19:10,880 Absolute value, negative value, positive 469 00:19:08,400 --> 00:19:13,120 value, and invert along with our 470 00:19:10,880 --> 00:19:15,200 truncations. Truncate, floor, ceiling, 471 00:19:13,120 --> 00:19:16,960 and round. Now that I've finally gotten 472 00:19:15,200 --> 00:19:18,480 rid of all of the math except one, we've 473 00:19:16,960 --> 00:19:20,480 got the weird little side call that is 474 00:19:18,480 --> 00:19:22,240 divod, which most people never use. 475 00:19:20,480 --> 00:19:24,000 they'll just kind of do it twice. But 476 00:19:22,240 --> 00:19:26,960 that gives you your output in terms of 477 00:19:24,000 --> 00:19:28,240 your integer division and the overflow. 478 00:19:26,960 --> 00:19:30,080 Then we've got the fun stuff starting 479 00:19:28,240 --> 00:19:33,280 now. We've got our context managers. So 480 00:19:30,080 --> 00:19:35,120 enter and exit as was a enter and a exit 481 00:19:33,280 --> 00:19:37,039 are how the context managers work both 482 00:19:35,120 --> 00:19:38,640 in synchronous and asynchronous style. 483 00:19:37,039 --> 00:19:40,480 If you customize these, you can do your 484 00:19:38,640 --> 00:19:42,640 own fancy setup logic like spin up a 485 00:19:40,480 --> 00:19:44,320 database for a test or tear it down when 486 00:19:42,640 --> 00:19:45,679 you're done. I've written async managers 487 00:19:44,320 --> 00:19:47,840 that spin up whole Docker environments 488 00:19:45,679 --> 00:19:51,240 in order to run unit tests. These things 489 00:19:47,840 --> 00:19:51,240 are pretty powerful. 490 00:19:53,039 --> 00:19:57,200 They're very very powerful. 491 00:19:55,600 --> 00:19:58,720 You've got the container type methods 492 00:19:57,200 --> 00:20:00,320 which most people again don't tend to 493 00:19:58,720 --> 00:20:01,919 play with too much except for when 494 00:20:00,320 --> 00:20:03,600 they're playing with fake dictionaries. 495 00:20:01,919 --> 00:20:05,440 So you've got your get item, set item, 496 00:20:03,600 --> 00:20:06,880 delete item. You've got the reversed if 497 00:20:05,440 --> 00:20:08,640 you want to customize reversing the 498 00:20:06,880 --> 00:20:10,880 list. Maybe it's a bad idea to reverse 499 00:20:08,640 --> 00:20:12,480 the list in memory for say 10 million 500 00:20:10,880 --> 00:20:14,000 items or something. And you've got 501 00:20:12,480 --> 00:20:16,080 contains which for the same reason maybe 502 00:20:14,000 --> 00:20:17,919 you don't want to check that whole list. 503 00:20:16,080 --> 00:20:19,280 You've got length and length hint, which 504 00:20:17,919 --> 00:20:20,640 again to use the same theme here, maybe 505 00:20:19,280 --> 00:20:22,160 if you've got 10 million items in your 506 00:20:20,640 --> 00:20:23,840 list, you don't actually want to count 507 00:20:22,160 --> 00:20:25,919 them. You might want to do a smart 508 00:20:23,840 --> 00:20:27,520 algorithm kind of guess. And length hint 509 00:20:25,919 --> 00:20:29,280 is how you can do that quickly. You've 510 00:20:27,520 --> 00:20:30,960 got missing, and that's used when it's 511 00:20:29,280 --> 00:20:32,640 like, hey, I didn't find it here. What 512 00:20:30,960 --> 00:20:34,000 do I do now? And then you've got it, 513 00:20:32,640 --> 00:20:36,240 which walks through them all one at a 514 00:20:34,000 --> 00:20:37,919 time. And the asynchronous aitter. 515 00:20:36,240 --> 00:20:39,039 You've also got next and a next, which 516 00:20:37,919 --> 00:20:41,280 speaking of iterators are how the 517 00:20:39,039 --> 00:20:43,440 iterator protocol works. They basically 518 00:20:41,280 --> 00:20:45,200 just spit out things one by one. You've 519 00:20:43,440 --> 00:20:47,360 got get attribute, get adder, set adder, 520 00:20:45,200 --> 00:20:49,120 and dell adder, which are how you do the 521 00:20:47,360 --> 00:20:51,360 attributes on a class. If you want to 522 00:20:49,120 --> 00:20:53,039 delete a thing on a class, the dot 523 00:20:51,360 --> 00:20:55,360 something, that's how you do it. As well 524 00:20:53,039 --> 00:20:57,440 as setting new ones, getting ones, and 525 00:20:55,360 --> 00:20:58,880 the get attribute is called all the time 526 00:20:57,440 --> 00:21:00,400 regardless. So, you can get very 527 00:20:58,880 --> 00:21:02,640 powerfully into messing with other 528 00:21:00,400 --> 00:21:04,720 classes and subasses that way. You've 529 00:21:02,640 --> 00:21:05,919 got new and get new arags, which are 530 00:21:04,720 --> 00:21:08,559 actually controlling how you create 531 00:21:05,919 --> 00:21:10,080 classes. Then you've got instance check, 532 00:21:08,559 --> 00:21:11,440 subclass check, and class item get 533 00:21:10,080 --> 00:21:14,159 check, which are actually able to mess 534 00:21:11,440 --> 00:21:16,480 with the multi uh metaroming. Again, 535 00:21:14,159 --> 00:21:18,080 still same thing for set name and init 536 00:21:16,480 --> 00:21:19,520 subclass because why wouldn't you want 537 00:21:18,080 --> 00:21:21,440 to mess with the subasses someone else 538 00:21:19,520 --> 00:21:24,159 makes from your code? Then you've got 539 00:21:21,440 --> 00:21:25,600 prepare and init subclass in here, which 540 00:21:24,159 --> 00:21:27,840 again more messing with your children 541 00:21:25,600 --> 00:21:30,640 and the code that way. This stuff 542 00:21:27,840 --> 00:21:32,240 reduces only normally used in making uh 543 00:21:30,640 --> 00:21:33,760 pickles because you don't normally sort 544 00:21:32,240 --> 00:21:35,679 of don't know what you're passing in, 545 00:21:33,760 --> 00:21:37,679 but it's there for that. Format is how 546 00:21:35,679 --> 00:21:40,240 you change what Python does when you run 547 00:21:37,679 --> 00:21:42,080 string format on things. Uh, again, not 548 00:21:40,240 --> 00:21:43,679 usually the way you do things. Hash is 549 00:21:42,080 --> 00:21:45,919 how you make things hashable for use in 550 00:21:43,679 --> 00:21:47,280 sets and dictionary lookups. Size of is 551 00:21:45,919 --> 00:21:49,200 how you pretend that you're smaller than 552 00:21:47,280 --> 00:21:51,200 you really are. A wait is how you 553 00:21:49,200 --> 00:21:52,880 actually say, "No, I swear I'm going to 554 00:21:51,200 --> 00:21:55,039 get back to you later in an async 555 00:21:52,880 --> 00:21:56,799 context. Call is how you pretend to be a 556 00:21:55,039 --> 00:21:58,880 function even though you're a class." 557 00:21:56,799 --> 00:22:00,480 And finally, dur is actually how you 558 00:21:58,880 --> 00:22:02,400 list off all the attributes that are 559 00:22:00,480 --> 00:22:04,559 available inside your object or just 560 00:22:02,400 --> 00:22:06,720 lie. 561 00:22:04,559 --> 00:22:08,510 And that is the hundred of them that I 562 00:22:06,720 --> 00:22:11,760 was trying to get through. 563 00:22:08,510 --> 00:22:15,000 [Applause] 564 00:22:11,760 --> 00:22:15,000 Thank you. 565 00:22:15,440 --> 00:22:20,640 Thank you, Sam. Uh that talk has will 566 00:22:18,720 --> 00:22:22,559 certainly help me and many of my other 567 00:22:20,640 --> 00:22:25,880 colleagues in this room be better men at 568 00:22:22,559 --> 00:22:25,880 work in Python. 569 00:22:26,880 --> 00:22:31,919 Hey uh Jack, you're up on uh on the 570 00:22:29,360 --> 00:22:33,440 other lect turn. Uh but first uh I'm 571 00:22:31,919 --> 00:22:36,320 sure there's a bunch of undergrads in 572 00:22:33,440 --> 00:22:38,559 this room. Um if you want the rest of 573 00:22:36,320 --> 00:22:40,720 your year at uni to be more like 574 00:22:38,559 --> 00:22:43,120 lightning talks. Uh Ada is going to help 575 00:22:40,720 --> 00:22:45,440 you. 576 00:22:43,120 --> 00:22:46,880 Cool. Hello. My name is Adah and today 577 00:22:45,440 --> 00:22:48,559 I'm going to tell you the story of how 578 00:22:46,880 --> 00:22:49,840 my friend and I use Python to get 579 00:22:48,559 --> 00:22:51,200 everything we needed to know from our 580 00:22:49,840 --> 00:22:53,440 university lectures without ever 581 00:22:51,200 --> 00:22:55,919 watching them. So here's my 582 00:22:53,440 --> 00:22:57,760 co-conspirator Genie. Together we made 583 00:22:55,919 --> 00:22:59,760 Compendio, a tool for students to make 584 00:22:57,760 --> 00:23:01,919 the most out of their lecture videos. So 585 00:22:59,760 --> 00:23:04,000 you give it a link and instantly get 586 00:23:01,919 --> 00:23:06,480 structured summaries, ask questions 587 00:23:04,000 --> 00:23:08,640 live, like generate revision qu 588 00:23:06,480 --> 00:23:10,480 questions and dig deeper into the parts 589 00:23:08,640 --> 00:23:12,000 you really want to know about. No more 590 00:23:10,480 --> 00:23:14,960 passive learning on two times speed 591 00:23:12,000 --> 00:23:17,679 again. So how did this happen? Now let's 592 00:23:14,960 --> 00:23:19,200 go back to 2021. We were two university 593 00:23:17,679 --> 00:23:21,360 students learning how to software 594 00:23:19,200 --> 00:23:23,919 engineer and as a right of passage we 595 00:23:21,360 --> 00:23:25,440 discovered this adage. Never spend six 596 00:23:23,919 --> 00:23:27,919 minutes doing something by hand that you 597 00:23:25,440 --> 00:23:29,440 can spend six hours failing to automate. 598 00:23:27,919 --> 00:23:31,039 So, 599 00:23:29,440 --> 00:23:32,799 setting the scene, picture this. 600 00:23:31,039 --> 00:23:34,400 University is fully online. We had 601 00:23:32,799 --> 00:23:36,240 several hours of lecture recordings to 602 00:23:34,400 --> 00:23:38,000 catch up on, tutorials and labs, which 603 00:23:36,240 --> 00:23:40,400 is where the real learning happens, a 604 00:23:38,000 --> 00:23:42,400 group assignment due that weekend, and a 605 00:23:40,400 --> 00:23:46,480 global pandemic. So, we're faced with a 606 00:23:42,400 --> 00:23:48,320 choice. Do I work on my assignment, or 607 00:23:46,480 --> 00:23:51,039 sign up for the 24-hour university 608 00:23:48,320 --> 00:23:52,799 hackathon that same weekend? And then we 609 00:23:51,039 --> 00:23:54,960 have, can the summarize my lecture was 610 00:23:52,799 --> 00:23:57,039 born? So the hackathon theme was 611 00:23:54,960 --> 00:23:59,039 education and we wanted to summarize 612 00:23:57,039 --> 00:24:01,120 insights you can't get just by skimming 613 00:23:59,039 --> 00:24:03,280 through lecture slides. So we decided to 614 00:24:01,120 --> 00:24:06,400 focus on the interaction behind between 615 00:24:03,280 --> 00:24:08,720 lecturers and students. So we focused on 616 00:24:06,400 --> 00:24:11,039 a specific problem. Could we match 617 00:24:08,720 --> 00:24:13,279 questions asked by students in the live 618 00:24:11,039 --> 00:24:15,520 chats with real-time answers by the 619 00:24:13,279 --> 00:24:17,919 lecturer from the recording? So we used 620 00:24:15,520 --> 00:24:19,360 a heristic. We noticed that lecturers 621 00:24:17,919 --> 00:24:21,120 would usually mention that they had a 622 00:24:19,360 --> 00:24:23,279 look at a chat or so and so had a good 623 00:24:21,120 --> 00:24:25,279 question. repeat the question from chat 624 00:24:23,279 --> 00:24:26,640 and answer it immediately after. And 625 00:24:25,279 --> 00:24:28,799 that's how we built our first 626 00:24:26,640 --> 00:24:31,120 summarizer. We matched on a trigger word 627 00:24:28,799 --> 00:24:33,039 like question. We used fuzzy wuzzy. 628 00:24:31,120 --> 00:24:34,480 Yeah, that's the name of the library to 629 00:24:33,039 --> 00:24:36,400 string match the next sentence from the 630 00:24:34,480 --> 00:24:38,480 lecturer like a boss. That's in the 631 00:24:36,400 --> 00:24:40,240 official docs um against chat messages 632 00:24:38,480 --> 00:24:42,320 from students. And then we just asserted 633 00:24:40,240 --> 00:24:45,039 that whatever came next is the answer. 634 00:24:42,320 --> 00:24:46,640 It worked pretty well. So then during 635 00:24:45,039 --> 00:24:49,200 our exam period, we were faced with 636 00:24:46,640 --> 00:24:52,240 another choice. Do we study for exams 637 00:24:49,200 --> 00:24:55,120 with our new tool or write a 5,000word 638 00:24:52,240 --> 00:24:56,640 blog post for fun? Um, and there we have 639 00:24:55,120 --> 00:24:58,159 summarize my hackathon. So, you can 640 00:24:56,640 --> 00:25:00,960 check out my website for the full 641 00:24:58,159 --> 00:25:02,960 hackathon story. But now we must address 642 00:25:00,960 --> 00:25:06,080 the elephant in the room. You fast 643 00:25:02,960 --> 00:25:08,640 forward 2 years, 2023, and you guessed 644 00:25:06,080 --> 00:25:10,880 it, LLMs came out seemingly out of 645 00:25:08,640 --> 00:25:13,200 nowhere. So, OpenAI released its first 646 00:25:10,880 --> 00:25:15,039 API for developers. And at this point, I 647 00:25:13,200 --> 00:25:16,960 wasn't even in university, but I still 648 00:25:15,039 --> 00:25:19,120 loved learning. And also, I kept getting 649 00:25:16,960 --> 00:25:20,799 these weird videos from my friends, like 650 00:25:19,120 --> 00:25:22,240 the dark side of home building, what 651 00:25:20,799 --> 00:25:23,679 they don't want you to know. I kind of 652 00:25:22,240 --> 00:25:27,600 wanted to know it, but not enough to 653 00:25:23,679 --> 00:25:29,600 watch a 32-minute video on it. So, 654 00:25:27,600 --> 00:25:31,600 so what do we do instead? Oh, yeah. 655 00:25:29,600 --> 00:25:33,600 We'll bring back summarize my lecture. 656 00:25:31,600 --> 00:25:35,760 So, Genie and I decided to extend the 657 00:25:33,600 --> 00:25:37,520 product. Uh, we use fast API, lang 658 00:25:35,760 --> 00:25:40,080 chain, and versel and learned a bunch of 659 00:25:37,520 --> 00:25:42,480 new concepts like vector databases, rag, 660 00:25:40,080 --> 00:25:44,799 really cool convers, and conversations. 661 00:25:42,480 --> 00:25:46,880 And we made compendio. So, put in that 662 00:25:44,799 --> 00:25:48,880 long YouTube video and get a list of all 663 00:25:46,880 --> 00:25:51,360 the non-compliance issues mentioned in 664 00:25:48,880 --> 00:25:53,039 the other video about home renovations. 665 00:25:51,360 --> 00:25:54,720 Um, and we also tried it with like 666 00:25:53,039 --> 00:25:56,480 two-hour public lectures like 667 00:25:54,720 --> 00:25:57,840 introduction to supply and demand. You 668 00:25:56,480 --> 00:26:00,880 know, kind of just want to learn for 669 00:25:57,840 --> 00:26:02,240 fun. Um, so the other thing we did was 670 00:26:00,880 --> 00:26:03,760 well this is actually pretty cool. So, 671 00:26:02,240 --> 00:26:06,000 we decided to put it in front of users 672 00:26:03,760 --> 00:26:07,520 and deploy the site. Cost money but get 673 00:26:06,000 --> 00:26:09,679 people to try it out. And then we 674 00:26:07,520 --> 00:26:11,840 watched as people used the website and 675 00:26:09,679 --> 00:26:13,440 clicked around. Um, so it was really 676 00:26:11,840 --> 00:26:15,279 cool because we got an iterative process 677 00:26:13,440 --> 00:26:17,760 of improving the tool. So we noticed 678 00:26:15,279 --> 00:26:19,279 that people wanted to like go to that 679 00:26:17,760 --> 00:26:21,520 part of the video when they get answers. 680 00:26:19,279 --> 00:26:23,679 So we added uh structured summaries with 681 00:26:21,520 --> 00:26:25,120 timestamps. Um, the other thing that I 682 00:26:23,679 --> 00:26:27,279 found really fun was like trying to make 683 00:26:25,120 --> 00:26:29,360 it faster. So LMS weren't that fast at 684 00:26:27,279 --> 00:26:31,520 the time. We started with cing. So 685 00:26:29,360 --> 00:26:32,960 videos are stable. Um, if you're 686 00:26:31,520 --> 00:26:34,880 watching lectures, there's like bunch of 687 00:26:32,960 --> 00:26:37,360 people watching the same video. So we c 688 00:26:34,880 --> 00:26:40,640 the summaries and we c like transcribing 689 00:26:37,360 --> 00:26:43,360 some the uh transcript. Uh we also 690 00:26:40,640 --> 00:26:45,039 stream chat messages um like instead of 691 00:26:43,360 --> 00:26:47,039 waiting for the response just like give 692 00:26:45,039 --> 00:26:48,159 it as as it comes. And then we also 693 00:26:47,039 --> 00:26:50,640 realized that you could anchor 694 00:26:48,159 --> 00:26:52,880 expectations. So I replaced the loading 695 00:26:50,640 --> 00:26:54,960 symbol with watching video and two times 696 00:26:52,880 --> 00:26:56,559 speed and suddenly 20 seconds to 697 00:26:54,960 --> 00:26:58,960 summarize a video is really fast 698 00:26:56,559 --> 00:27:01,120 compared to like two times speed 2our 699 00:26:58,960 --> 00:27:02,880 video. Um I also learned about mirrors 700 00:27:01,120 --> 00:27:04,880 and elevators. So when people complained 701 00:27:02,880 --> 00:27:06,400 about the speed of elevators, designers 702 00:27:04,880 --> 00:27:08,080 realized you could just put mirrors in 703 00:27:06,400 --> 00:27:10,720 there. you check your hair and bam, 704 00:27:08,080 --> 00:27:12,480 you're on level 13. Um, so we added some 705 00:27:10,720 --> 00:27:14,880 distractions like what questions can you 706 00:27:12,480 --> 00:27:16,960 ask beyond summaries and had other ideas 707 00:27:14,880 --> 00:27:19,279 like showing uh other videos that were 708 00:27:16,960 --> 00:27:21,039 summarized. So it's now been 2 years 709 00:27:19,279 --> 00:27:22,720 since we built Compendio. Um, it's now 710 00:27:21,039 --> 00:27:24,480 in archive mode and I learned a lot from 711 00:27:22,720 --> 00:27:26,720 building it more than watching the 712 00:27:24,480 --> 00:27:31,000 equivalent of lectures um than the time 713 00:27:26,720 --> 00:27:31,000 spent. Uh, thank you very much. 714 00:27:36,240 --> 00:27:39,840 Thank you so much, Anna, for carrying on 715 00:27:37,919 --> 00:27:42,559 the tradition of avoiding a little bit 716 00:27:39,840 --> 00:27:43,919 of work by doing way more. 717 00:27:42,559 --> 00:27:46,720 Uh, up next on this side, we have 718 00:27:43,919 --> 00:27:48,559 Justin. Uh, but for the time being, uh, 719 00:27:46,720 --> 00:27:51,200 last year, Jack Vichelt managed to 720 00:27:48,559 --> 00:27:53,919 squeeze 18 animal facts into 5 minutes. 721 00:27:51,200 --> 00:27:57,240 Uh, this year, he's set himself a more 722 00:27:53,919 --> 00:27:57,240 modest goal. 723 00:28:00,000 --> 00:28:03,840 All right. Uh, so I'm just going to talk 724 00:28:01,760 --> 00:28:05,919 about just the one cursed animal fact. 725 00:28:03,840 --> 00:28:09,120 Uh, yeah, as said last year, I had more 726 00:28:05,919 --> 00:28:11,840 facts. Um, I have a favorite fish. This 727 00:28:09,120 --> 00:28:13,600 is not the cursed fact. Uh, there are 728 00:28:11,840 --> 00:28:15,200 lots of good fish. There are plenty of 729 00:28:13,600 --> 00:28:17,039 good options for what your favorite fish 730 00:28:15,200 --> 00:28:19,679 might be or what my favorite fish might 731 00:28:17,039 --> 00:28:21,520 be. Is it the hammerhead shark? Uh, no. 732 00:28:19,679 --> 00:28:23,440 Very cool. Not my favorite. How about 733 00:28:21,520 --> 00:28:24,960 the bareyed fish? Those green things, 734 00:28:23,440 --> 00:28:27,679 those are its eyes. They look up through 735 00:28:24,960 --> 00:28:29,679 the transparent head. Uh, very cool. Not 736 00:28:27,679 --> 00:28:31,840 my favorite fish. Maybe it's one of 737 00:28:29,679 --> 00:28:34,880 these fish. They're good fish, but 738 00:28:31,840 --> 00:28:37,520 they're not the best. My favorite fish 739 00:28:34,880 --> 00:28:40,640 is really smart. It has interesting 740 00:28:37,520 --> 00:28:43,760 social habits. It displays evidence of 741 00:28:40,640 --> 00:28:47,520 use. I like it enough that I even have 742 00:28:43,760 --> 00:28:50,399 one at home. I like it so much that a 743 00:28:47,520 --> 00:28:51,679 year ago, I paid a professional about a 744 00:28:50,399 --> 00:28:54,559 year ago, I paid a professional 745 00:28:51,679 --> 00:28:57,039 photographer to take a bunch of photos 746 00:28:54,559 --> 00:29:00,240 of me and my favorite fish. Here is me 747 00:28:57,039 --> 00:29:00,240 and my fish. 748 00:29:01,360 --> 00:29:08,640 What am I a fish? Um, yes. 749 00:29:05,360 --> 00:29:11,640 Sorry. Uh, let's learn about phlogenetic 750 00:29:08,640 --> 00:29:11,640 bracketing. 751 00:29:12,559 --> 00:29:17,039 Stop. It's V species A belongs to a 752 00:29:14,880 --> 00:29:19,919 group. Uh, phoggenetic bracketing is a 753 00:29:17,039 --> 00:29:22,480 tool used in bioinformatics and and a 754 00:29:19,919 --> 00:29:24,000 bunch of other fields. And basically, it 755 00:29:22,480 --> 00:29:25,679 can be used to identify a bunch of 756 00:29:24,000 --> 00:29:28,320 different traits or categorize different 757 00:29:25,679 --> 00:29:31,520 things. If species A belongs to a group 758 00:29:28,320 --> 00:29:33,760 and species B belongs to the same group, 759 00:29:31,520 --> 00:29:36,240 then their earliest common ancestor is 760 00:29:33,760 --> 00:29:39,600 also a part of that group. You cannot 761 00:29:36,240 --> 00:29:42,159 evolve out of a group and so all their 762 00:29:39,600 --> 00:29:44,960 descendants of that common ancestor are 763 00:29:42,159 --> 00:29:48,000 also in that group. This means that if 764 00:29:44,960 --> 00:29:51,039 the hammerhead shark is a fish and the 765 00:29:48,000 --> 00:29:52,720 barrel fish is a fish, we can look at 766 00:29:51,039 --> 00:29:55,039 this tree of life and see the blue line 767 00:29:52,720 --> 00:29:57,600 for the hammerhead shark, the red line 768 00:29:55,039 --> 00:30:00,080 for the barrel fish. We can see where 769 00:29:57,600 --> 00:30:02,880 they meet and the humans are on the 770 00:30:00,080 --> 00:30:05,840 green line, which is along those lines. 771 00:30:02,880 --> 00:30:07,679 So, humans are a fish. Uh, humans are a 772 00:30:05,840 --> 00:30:10,480 fish. There are lots of other fish you 773 00:30:07,679 --> 00:30:14,000 probably didn't know are fish, you know, 774 00:30:10,480 --> 00:30:16,080 snakes, cows, frogs, dinosaurs. 775 00:30:14,000 --> 00:30:17,919 fish. 776 00:30:16,080 --> 00:30:19,919 So, what is the actual physical evidence 777 00:30:17,919 --> 00:30:23,760 of this apart from just me showing a 778 00:30:19,919 --> 00:30:26,240 graph? Um, your eyes are fish eyes. Uh, 779 00:30:23,760 --> 00:30:29,120 what I mean by this is the the lens in 780 00:30:26,240 --> 00:30:31,360 your eye, the refractive index closely 781 00:30:29,120 --> 00:30:34,080 matches water. They are evolved for 782 00:30:31,360 --> 00:30:35,279 seeing in water. Now, you might have 783 00:30:34,080 --> 00:30:38,240 opened your eyes under water and not 784 00:30:35,279 --> 00:30:40,000 seen very well in water. We have adapted 785 00:30:38,240 --> 00:30:41,760 extra things to make them work out of 786 00:30:40,000 --> 00:30:43,600 water where we're not supposed to have 787 00:30:41,760 --> 00:30:44,720 them. uh we've attached a whole bunch of 788 00:30:43,600 --> 00:30:46,000 little muscles around them and we're 789 00:30:44,720 --> 00:30:49,039 constantly pulling on the lens and 790 00:30:46,000 --> 00:30:51,440 distorting it and such. Uh this makes 791 00:30:49,039 --> 00:30:54,159 them work in air. Now um it also means 792 00:30:51,440 --> 00:30:55,679 that your eyes get tired. Fish fish in 793 00:30:54,159 --> 00:30:57,840 the water, their eyes don't get tired. 794 00:30:55,679 --> 00:31:01,520 Fish on the land, their eyes get tired. 795 00:30:57,840 --> 00:31:03,679 Um your eyes are fish eyes. 796 00:31:01,520 --> 00:31:06,000 In the opposite direction, a fish's swim 797 00:31:03,679 --> 00:31:08,880 bladder is just a lung. Uh the lung 798 00:31:06,000 --> 00:31:10,880 evolved first, not the swim bladder. Um, 799 00:31:08,880 --> 00:31:13,520 the lung is a very fancy and weird part 800 00:31:10,880 --> 00:31:16,159 of the digestive tract. That's why it 801 00:31:13,520 --> 00:31:18,799 shares the tube and you can choke. Um, 802 00:31:16,159 --> 00:31:22,080 don't uh 803 00:31:18,799 --> 00:31:24,000 but that's why um there's a if you've 804 00:31:22,080 --> 00:31:26,080 got if you got an area that can absorb 805 00:31:24,000 --> 00:31:27,919 nutrients, it can also absorb oxygen. 806 00:31:26,080 --> 00:31:30,559 Put that off in a bubble somewhere. Seal 807 00:31:27,919 --> 00:31:34,960 that. Hey, now you've got a swim bladder 808 00:31:30,559 --> 00:31:37,600 or a lung. And lastly, you have a jaw. 809 00:31:34,960 --> 00:31:39,600 Everything with a jaw is a fish. If we 810 00:31:37,600 --> 00:31:41,440 go back here, you might have noticed 811 00:31:39,600 --> 00:31:43,360 that those three lines all converge on 812 00:31:41,440 --> 00:31:46,159 the jawed vertebrates. Congratulations, 813 00:31:43,360 --> 00:31:48,080 you have a jaw. You are a fish. Um, 814 00:31:46,159 --> 00:31:50,640 everything with a jaw is a has 815 00:31:48,080 --> 00:31:54,000 everything with a jaw is a fish. Not 816 00:31:50,640 --> 00:31:57,440 every fish has a jaw. Uh, there are two 817 00:31:54,000 --> 00:31:59,679 families of fish that don't. Um, the the 818 00:31:57,440 --> 00:32:00,880 hagfish and the lamp rays. If you've 819 00:31:59,679 --> 00:32:02,559 ever seen a picture of one of them, you 820 00:32:00,880 --> 00:32:06,399 might go, "That is a weird looking 821 00:32:02,559 --> 00:32:08,399 fish." That is definitely true. And so 822 00:32:06,399 --> 00:32:11,519 the one cursed fact that I have for you 823 00:32:08,399 --> 00:32:15,880 is every terrestrial vertebrate is a 824 00:32:11,519 --> 00:32:15,880 fish. Thank you. 825 00:32:18,740 --> 00:32:23,519 [Applause] 826 00:32:20,960 --> 00:32:26,240 Um I happen to be sitting in relatively 827 00:32:23,519 --> 00:32:29,440 close proximity to a trained geneticist 828 00:32:26,240 --> 00:32:33,039 and I have not seen someone wincing that 829 00:32:29,440 --> 00:32:36,080 hard in quite some time. 830 00:32:33,039 --> 00:32:40,399 Uh Jordy, you are up on deck on this 831 00:32:36,080 --> 00:32:44,320 side. Uh Jay is going to uh talk to us 832 00:32:40,399 --> 00:32:45,760 about um radios. 833 00:32:44,320 --> 00:32:47,440 Thank you very much. Good afternoon. My 834 00:32:45,760 --> 00:32:48,880 name is Justin Smwood, but as you are 835 00:32:47,440 --> 00:32:50,880 all my friends, you may call me Jay. 836 00:32:48,880 --> 00:32:52,240 This is my preferred name. Uh and today 837 00:32:50,880 --> 00:32:54,240 I'm going to tell you about how we're 838 00:32:52,240 --> 00:32:56,399 going to save radio astronomy using some 839 00:32:54,240 --> 00:32:58,240 Python. First of all, a little bit about 840 00:32:56,399 --> 00:33:00,480 myself. I'm currently a PhD student at 841 00:32:58,240 --> 00:33:02,080 Swinburn University. Before that, I had 842 00:33:00,480 --> 00:33:03,840 a seven-year career in finance. These 843 00:33:02,080 --> 00:33:06,159 are some of the nicer names I was called 844 00:33:03,840 --> 00:33:07,360 during that time. Uh, and before that, I 845 00:33:06,159 --> 00:33:10,000 have degrees in economics, mathematics 846 00:33:07,360 --> 00:33:12,399 from the University of Melbourne. So, 847 00:33:10,000 --> 00:33:14,799 why does radio astronomy need saving? 848 00:33:12,399 --> 00:33:17,600 Well, first of all, here is a pretty 849 00:33:14,799 --> 00:33:20,320 typical radioastronomy observation. On 850 00:33:17,600 --> 00:33:22,559 the y-axis, we have the frequency. On 851 00:33:20,320 --> 00:33:25,039 the x-axis, we have time. And the pixel 852 00:33:22,559 --> 00:33:26,640 intensity is how strong the signal is in 853 00:33:25,039 --> 00:33:28,559 that particular frequency at that 854 00:33:26,640 --> 00:33:30,559 particular time. As you can see, we have 855 00:33:28,559 --> 00:33:31,919 a bit of a beam going down the middle. 856 00:33:30,559 --> 00:33:33,519 This could be from a black hole. This 857 00:33:31,919 --> 00:33:36,880 could be from a pulsar. This could be 858 00:33:33,519 --> 00:33:38,799 from many uh curious cosmic things. But 859 00:33:36,880 --> 00:33:40,799 I'm more interested in the bits that 860 00:33:38,799 --> 00:33:42,399 we've cut out. 861 00:33:40,799 --> 00:33:43,840 These are bits where the data has been 862 00:33:42,399 --> 00:33:47,120 corrupted by what we call radio 863 00:33:43,840 --> 00:33:49,679 frequency interference or RFI. 864 00:33:47,120 --> 00:33:52,480 And the problem is is that if we do 865 00:33:49,679 --> 00:33:54,720 nothing to stop these entering our 866 00:33:52,480 --> 00:33:57,360 particular things, things are going to 867 00:33:54,720 --> 00:33:58,720 go badly. And this is why. So here I've 868 00:33:57,360 --> 00:34:00,799 got a little image and we've got our 869 00:33:58,720 --> 00:34:02,799 little telescope in the middle and what 870 00:34:00,799 --> 00:34:05,200 we really want to observe is this blue 871 00:34:02,799 --> 00:34:07,919 signal. But there are things which are 872 00:34:05,200 --> 00:34:09,599 getting in the way. For instance, this 873 00:34:07,919 --> 00:34:11,760 red one in the sky might be a satellite 874 00:34:09,599 --> 00:34:14,000 or a plane or this one on the ground 875 00:34:11,760 --> 00:34:16,639 might be a cell tower or a microwave 876 00:34:14,000 --> 00:34:18,399 oven. And these things are also going on 877 00:34:16,639 --> 00:34:21,119 our telescope and they're getting into 878 00:34:18,399 --> 00:34:23,280 our data sets. And the problem is is 879 00:34:21,119 --> 00:34:24,720 that if we do nothing, these white 880 00:34:23,280 --> 00:34:27,280 regions that have been cut out are going 881 00:34:24,720 --> 00:34:29,839 to grow and grow and grow until there is 882 00:34:27,280 --> 00:34:31,760 nothing left. And I've even blocked out 883 00:34:29,839 --> 00:34:33,760 the citation at the top because if no 884 00:34:31,760 --> 00:34:37,000 one's getting any data, no one is 885 00:34:33,760 --> 00:34:37,000 getting published. 886 00:34:37,040 --> 00:34:41,839 And so how are we going to solve it? So 887 00:34:40,240 --> 00:34:44,320 this is Marang. This is the parks 888 00:34:41,839 --> 00:34:46,960 telescope. If you've seen the dish, this 889 00:34:44,320 --> 00:34:48,639 is the the dish. And I'm particularly 890 00:34:46,960 --> 00:34:50,399 interested what's the focus of this 891 00:34:48,639 --> 00:34:52,079 dish? This is something called a phased 892 00:34:50,399 --> 00:34:54,800 array feed. And there's a zoom in the 893 00:34:52,079 --> 00:34:56,240 little uh left hand corner. And each one 894 00:34:54,800 --> 00:34:58,320 of those little checkerboards is a 895 00:34:56,240 --> 00:35:01,440 receiver. Instead of one receiver, we're 896 00:34:58,320 --> 00:35:04,640 now using 200 receivers. And what this 897 00:35:01,440 --> 00:35:05,599 means is we can use the uh arrival times 898 00:35:04,640 --> 00:35:07,440 between each of these different 899 00:35:05,599 --> 00:35:10,000 receivers in order to figure out which 900 00:35:07,440 --> 00:35:13,200 directions things are coming from and 901 00:35:10,000 --> 00:35:15,280 get rid of them, which is great. 902 00:35:13,200 --> 00:35:16,960 So we're going to mathematically fill 903 00:35:15,280 --> 00:35:18,480 filter out this interference using a 904 00:35:16,960 --> 00:35:21,119 branch of mathematics called spatial 905 00:35:18,480 --> 00:35:23,359 filtering. But we have a problem. The 906 00:35:21,119 --> 00:35:26,000 data velocity is huge. We're talking 907 00:35:23,359 --> 00:35:29,119 about the order of terabytes per second. 908 00:35:26,000 --> 00:35:30,480 So really this has to be done in C++ 909 00:35:29,119 --> 00:35:32,320 running on graphics cards at the 910 00:35:30,480 --> 00:35:34,720 telescope. 911 00:35:32,320 --> 00:35:39,200 So how am I using Python to help me do 912 00:35:34,720 --> 00:35:41,359 this? Python use one. I'm making small 913 00:35:39,200 --> 00:35:42,800 interactive applications to simulate and 914 00:35:41,359 --> 00:35:44,960 understand the mathematical techniques 915 00:35:42,800 --> 00:35:46,240 that I need to apply. And Streamlit is 916 00:35:44,960 --> 00:35:49,119 something that's really really good for 917 00:35:46,240 --> 00:35:51,040 this. Um there's a little link to one of 918 00:35:49,119 --> 00:35:53,440 them on on my website, but essentially 919 00:35:51,040 --> 00:35:55,599 this lets me simulate different signals, 920 00:35:53,440 --> 00:35:57,200 apply the techniques and mess around 921 00:35:55,599 --> 00:35:58,160 with all the sliders and things and make 922 00:35:57,200 --> 00:36:00,160 graphs which look completely 923 00:35:58,160 --> 00:36:02,000 unintelligible. But this helps me 924 00:36:00,160 --> 00:36:04,000 understand the techniques before I then 925 00:36:02,000 --> 00:36:05,920 go and apply them in a really high 926 00:36:04,000 --> 00:36:07,520 performance environment. 927 00:36:05,920 --> 00:36:10,079 The second way that Python is helping me 928 00:36:07,520 --> 00:36:11,920 save radio astronomy is to shorten the 929 00:36:10,079 --> 00:36:16,800 develop loops when I'm actually writing 930 00:36:11,920 --> 00:36:19,280 C++ code. I'm fairly new to C++ and so 931 00:36:16,800 --> 00:36:20,800 this helps me uh figure out what I'm 932 00:36:19,280 --> 00:36:24,240 going to do before I actually have to go 933 00:36:20,800 --> 00:36:26,240 and do it in C++ and that helps me. So 934 00:36:24,240 --> 00:36:29,760 that's a really good use of Python in my 935 00:36:26,240 --> 00:36:32,960 in my uh opinion. 936 00:36:29,760 --> 00:36:35,920 So where is all this going? Well, at the 937 00:36:32,960 --> 00:36:39,680 end of my project, what we're eventually 938 00:36:35,920 --> 00:36:41,280 hoping is that we turn this 939 00:36:39,680 --> 00:36:44,280 into 940 00:36:41,280 --> 00:36:44,280 this. 941 00:36:44,310 --> 00:36:54,640 [Applause] 942 00:36:51,920 --> 00:36:57,280 Thank you so much, Justin. So, up next 943 00:36:54,640 --> 00:37:00,079 on this side, we have Toby. Love it. But 944 00:36:57,280 --> 00:37:01,599 for now, Jordi is going to tell us how 945 00:37:00,079 --> 00:37:03,680 we can shove eight graphics cards into 946 00:37:01,599 --> 00:37:07,960 one computer without starting an 947 00:37:03,680 --> 00:37:07,960 electrical fire. Take it away, Jordi. 948 00:37:09,040 --> 00:37:15,040 So, a lot of um ML and AI workloads 949 00:37:12,240 --> 00:37:18,640 depend on two things, Python and GPU 950 00:37:15,040 --> 00:37:21,680 power. But the thing is GPUs are only 951 00:37:18,640 --> 00:37:24,480 getting wider and half your slots end up 952 00:37:21,680 --> 00:37:26,880 under the damn card. So, what you can 953 00:37:24,480 --> 00:37:30,960 see there is a uh photo someone has 954 00:37:26,880 --> 00:37:33,040 leaked to me of the GTX uh 6090 um which 955 00:37:30,960 --> 00:37:34,880 my sources say will try and draw twice 956 00:37:33,040 --> 00:37:38,560 the power through a power connector half 957 00:37:34,880 --> 00:37:40,240 as thick. But um yeah, what can we do 958 00:37:38,560 --> 00:37:41,920 other than being dependent on cloud 959 00:37:40,240 --> 00:37:44,320 services? Maybe we just need some 960 00:37:41,920 --> 00:37:47,119 extension cords. But what could possibly 961 00:37:44,320 --> 00:37:49,520 go wrong? So, a little warning here. You 962 00:37:47,119 --> 00:37:51,599 are opening Pandora's box. Uh the 963 00:37:49,520 --> 00:37:54,960 smaller PCIe slots are only rated for 964 00:37:51,599 --> 00:37:57,119 2.1 amps or maybe even half an amp. Time 965 00:37:54,960 --> 00:37:59,359 16 high power cards can actually pull 6 966 00:37:57,119 --> 00:38:02,079 amps out of the slot. And all of that 967 00:37:59,359 --> 00:38:04,320 comes from two pins on your 24 pin 968 00:38:02,079 --> 00:38:05,599 motherboard power connector. So three 969 00:38:04,320 --> 00:38:08,480 cards on the board and you'll be 970 00:38:05,599 --> 00:38:10,480 breaking that limit. Also, if you stick 971 00:38:08,480 --> 00:38:13,280 a card on a riser cable, it's not 972 00:38:10,480 --> 00:38:14,960 screwed down. Um if it hits your metal 973 00:38:13,280 --> 00:38:17,119 case, you're going to shortcircuit 974 00:38:14,960 --> 00:38:19,040 things. And not that I've done that, but 975 00:38:17,119 --> 00:38:20,880 the slot does still work afterwards if 976 00:38:19,040 --> 00:38:23,280 you add a riser to it that provides 977 00:38:20,880 --> 00:38:25,920 power again. 978 00:38:23,280 --> 00:38:29,680 So there's a there's a lot of pins here, 979 00:38:25,920 --> 00:38:33,040 but which ones do we really need? 980 00:38:29,680 --> 00:38:35,200 So 12 volts, 3.3 ground, supply them at 981 00:38:33,040 --> 00:38:37,359 the remote end. Uh ref clock, most 982 00:38:35,200 --> 00:38:40,400 devices actually do need that with some 983 00:38:37,359 --> 00:38:42,480 exceptions. PCIe reset, most devices do 984 00:38:40,400 --> 00:38:44,240 need that to start up properly. And 985 00:38:42,480 --> 00:38:47,599 lastly, there's two differential pairs 986 00:38:44,240 --> 00:38:49,680 for each lane. Um, so 1 2 4 8 or 16 of 987 00:38:47,599 --> 00:38:52,320 those depending on what width of link 988 00:38:49,680 --> 00:38:55,760 you want. Trouble is, this is all 989 00:38:52,320 --> 00:38:57,680 practically RF. It's like 10 GHz in 990 00:38:55,760 --> 00:39:00,000 terms of signals. Corners might have 991 00:38:57,680 --> 00:39:01,680 been cut somewhere. Your It's not really 992 00:39:00,000 --> 00:39:03,520 just a matter of connected. You need a 993 00:39:01,680 --> 00:39:05,200 very good signal between both ends, but 994 00:39:03,520 --> 00:39:06,880 your motherboard vendor probably cut 995 00:39:05,200 --> 00:39:09,520 some corners. Your card vendor probably 996 00:39:06,880 --> 00:39:11,119 did, too. The newer PCIe modes run on 997 00:39:09,520 --> 00:39:12,560 much tighter margins. and sticking a 998 00:39:11,119 --> 00:39:14,880 bunch of wire in the middle is not 999 00:39:12,560 --> 00:39:16,640 helping. So, there's no guarantees. 1000 00:39:14,880 --> 00:39:18,320 Expect some frustration, but that just 1001 00:39:16,640 --> 00:39:21,280 makes it more satisfying when it does 1002 00:39:18,320 --> 00:39:23,599 work. So, crypto miners love large 1003 00:39:21,280 --> 00:39:25,839 clusters of GPUs. What do they use? 1004 00:39:23,599 --> 00:39:27,920 Wait, what? What's going on here? Well, 1005 00:39:25,839 --> 00:39:31,440 that's not actually USB. It's just using 1006 00:39:27,920 --> 00:39:33,520 the USB3 wires. But we want more than a 1007 00:39:31,440 --> 00:39:35,760 times one link. Machine learning and AI, 1008 00:39:33,520 --> 00:39:38,560 we put a lot of data in and get a lot of 1009 00:39:35,760 --> 00:39:40,800 data out. We're not just trying to guess 1010 00:39:38,560 --> 00:39:43,200 a number. 1011 00:39:40,800 --> 00:39:46,079 So, speaking of USB, uh we got 1012 00:39:43,200 --> 00:39:49,599 Thunderbolt or USB 4. Good option for 1013 00:39:46,079 --> 00:39:52,560 getting cards on a laptop, but you can 1014 00:39:49,599 --> 00:39:54,960 only put one of those in your PC, and 1015 00:39:52,560 --> 00:39:57,040 it's still only times four. At the other 1016 00:39:54,960 --> 00:40:00,079 end, your choices are a little sketchy 1017 00:39:57,040 --> 00:40:01,760 or quite extremely expensive, and I've 1018 00:40:00,079 --> 00:40:04,800 heard Intel doesn't really like these 1019 00:40:01,760 --> 00:40:07,440 things existing anyway. So, you go on 1020 00:40:04,800 --> 00:40:09,200 eBay, you search for the right cables, 1021 00:40:07,440 --> 00:40:11,599 ribbon rises. They're generally the most 1022 00:40:09,200 --> 00:40:14,160 common option. No external power. The 1023 00:40:11,599 --> 00:40:16,320 good ones are even shielded. 1024 00:40:14,160 --> 00:40:17,839 Um, I did not have very good luck with 1025 00:40:16,320 --> 00:40:20,720 these, especially when they were longer 1026 00:40:17,839 --> 00:40:22,160 than 10 cm. So, that one, yeah, good 1027 00:40:20,720 --> 00:40:25,119 luck with that. It's probably going to 1028 00:40:22,160 --> 00:40:27,599 drop you to PCIe 1.0. But, can we get 1029 00:40:25,119 --> 00:40:29,520 more than one device on the slot? So, 1030 00:40:27,599 --> 00:40:32,079 bifocation, it's not actually a feature 1031 00:40:29,520 --> 00:40:33,599 of PCIe. Your motherboard's chipset or 1032 00:40:32,079 --> 00:40:35,440 your CPU is programmed to say which 1033 00:40:33,599 --> 00:40:37,599 lanes go to which slot. We just change 1034 00:40:35,440 --> 00:40:39,839 that. Pretend there's multiple slots. 1035 00:40:37,599 --> 00:40:42,079 get a card like this to alter reality to 1036 00:40:39,839 --> 00:40:45,520 match the software. Um, and then that's 1037 00:40:42,079 --> 00:40:48,640 got two downstream um connectors to go 1038 00:40:45,520 --> 00:40:50,400 to 2 * 8 links and uh yeah, that 1039 00:40:48,640 --> 00:40:52,160 actually borrows some variant of a SAS 1040 00:40:50,400 --> 00:40:54,160 connector because like previous one, 1041 00:40:52,160 --> 00:40:56,079 it's not SAS, but we're just using the 1042 00:40:54,160 --> 00:40:58,079 connector. So that usually lets you 1043 00:40:56,079 --> 00:41:00,240 split it two ways into 8 and 8 or four 1044 00:40:58,079 --> 00:41:03,119 ways into 444. You can't really go below 1045 00:41:00,240 --> 00:41:05,040 that. Your BIOS might let you down by 1046 00:41:03,119 --> 00:41:06,640 not having the menu option visible to 1047 00:41:05,040 --> 00:41:08,240 actually select that on the slot. So you 1048 00:41:06,640 --> 00:41:11,839 just decompile it and poke the right 1049 00:41:08,240 --> 00:41:14,240 value into the EFI variables with RU. 1050 00:41:11,839 --> 00:41:17,680 Simple simple, but surely there's a 1051 00:41:14,240 --> 00:41:19,920 better way. Um, PCIe is packet-based 1052 00:41:17,680 --> 00:41:21,280 switches. And there's even some cheap 1053 00:41:19,920 --> 00:41:23,920 options. You don't just get two 1054 00:41:21,280 --> 00:41:25,760 downstream times 8 links, you get four. 1055 00:41:23,920 --> 00:41:27,200 Uh, with the right software, you can 1056 00:41:25,760 --> 00:41:30,480 even reconfigure this thing to get it 1057 00:41:27,200 --> 00:41:31,920 into times one uh or go much further. So 1058 00:41:30,480 --> 00:41:34,160 then how do you get that to a slot? 1059 00:41:31,920 --> 00:41:35,839 Breakouts. Note the SATA connector. Only 1060 00:41:34,160 --> 00:41:37,440 two amps. Also, we're supposed to have 1061 00:41:35,839 --> 00:41:39,040 some pins connected up there. It 1062 00:41:37,440 --> 00:41:41,359 doesn't. No one actually cares. It 1063 00:41:39,040 --> 00:41:43,359 works. This one, bit of a problem. You 1064 00:41:41,359 --> 00:41:46,560 can see on the right. Yep, they mirrored 1065 00:41:43,359 --> 00:41:48,880 the pin out. Um, so what we have to do 1066 00:41:46,560 --> 00:41:52,079 is move those things up there by doing 1067 00:41:48,880 --> 00:41:54,400 surgery on the cable and then it works. 1068 00:41:52,079 --> 00:41:56,640 Uh, fortunately, um, only had 1069 00:41:54,400 --> 00:41:59,359 fortunately ref clocks only 100 MHz 1070 00:41:56,640 --> 00:42:00,960 practically DC. This one has the lanes 1071 00:41:59,359 --> 00:42:04,480 backwards, but they got the rest of it 1072 00:42:00,960 --> 00:42:07,720 correct. And 1073 00:42:04,480 --> 00:42:07,720 it works. 1074 00:42:10,319 --> 00:42:18,000 Thanks, Jordy. I I I think 1075 00:42:15,359 --> 00:42:20,400 um 1076 00:42:18,000 --> 00:42:23,400 Alex, you are up on deck on this side. 1077 00:42:20,400 --> 00:42:23,400 Um 1078 00:42:24,960 --> 00:42:30,680 uh Toby is going to talk to us about 1079 00:42:27,359 --> 00:42:30,680 data structures. 1080 00:42:32,079 --> 00:42:37,359 I will I will quickly preface this uh 1081 00:42:35,040 --> 00:42:39,520 with if you happen to be in the audience 1082 00:42:37,359 --> 00:42:42,400 and you're my father, you're not allowed 1083 00:42:39,520 --> 00:42:44,480 to comment on this. 1084 00:42:42,400 --> 00:42:47,040 Seems unlikely. 1085 00:42:44,480 --> 00:42:49,920 What are the chances? 1086 00:42:47,040 --> 00:42:53,280 Last year, I had a friend over who had 1087 00:42:49,920 --> 00:42:58,960 some strong opinions on the cleanliness 1088 00:42:53,280 --> 00:43:01,440 or perhaps lack thereof of my room. 1089 00:42:58,960 --> 00:43:03,200 You know, fair enough. I just moved. It 1090 00:43:01,440 --> 00:43:06,000 was covered in clothes and shoes and 1091 00:43:03,200 --> 00:43:09,240 boxes and push bike and plastic and 1092 00:43:06,000 --> 00:43:09,240 other things. 1093 00:43:09,440 --> 00:43:12,880 But that's not what I want to talk 1094 00:43:10,880 --> 00:43:16,079 about. 1095 00:43:12,880 --> 00:43:21,000 Last FM is a music stats website for 1096 00:43:16,079 --> 00:43:21,000 nerds. Any nerds in the audience? 1097 00:43:22,000 --> 00:43:27,280 It keeps track of every song that you've 1098 00:43:24,400 --> 00:43:30,960 listened to across platforms, across 1099 00:43:27,280 --> 00:43:32,640 everything. And it lets you see 1100 00:43:30,960 --> 00:43:34,640 collections of this. It lets you see 1101 00:43:32,640 --> 00:43:38,920 exactly what you listen to and when. And 1102 00:43:34,640 --> 00:43:38,920 it lets you see this for your friends. 1103 00:43:39,200 --> 00:43:44,800 Despite have despite last FM having a 1104 00:43:42,079 --> 00:43:46,319 recommendation system already in it, I 1105 00:43:44,800 --> 00:43:49,040 decided 1106 00:43:46,319 --> 00:43:51,760 I want to do it myself. It's very 1107 00:43:49,040 --> 00:43:53,599 programmercoded, I think, to say, "This 1108 00:43:51,760 --> 00:43:57,520 thing already exists, but I want to do 1109 00:43:53,599 --> 00:43:59,680 it worse, but for more effort." 1110 00:43:57,520 --> 00:44:02,400 Now, in the process of downloading all 1111 00:43:59,680 --> 00:44:04,640 of this user data, I'd made a mistake 1112 00:44:02,400 --> 00:44:07,760 with the API, and I wouldn't realize 1113 00:44:04,640 --> 00:44:10,079 this for a couple more weeks, but it led 1114 00:44:07,760 --> 00:44:13,040 me to an interesting moment that I think 1115 00:44:10,079 --> 00:44:15,119 is helpful for teaching about some data 1116 00:44:13,040 --> 00:44:17,359 structures. 1117 00:44:15,119 --> 00:44:20,319 Because of the mistake I made, I was 1118 00:44:17,359 --> 00:44:22,720 getting some overlaps in when I was 1119 00:44:20,319 --> 00:44:24,640 pageionating these downloads and I 1120 00:44:22,720 --> 00:44:28,319 couldn't really see where the overlaps 1121 00:44:24,640 --> 00:44:30,400 were starting and finishing. And so I 1122 00:44:28,319 --> 00:44:32,720 just had to check here's the new songs 1123 00:44:30,400 --> 00:44:35,440 that I've got and here's every other 1124 00:44:32,720 --> 00:44:37,520 song I've ever downloaded, 1125 00:44:35,440 --> 00:44:41,359 which was regularly hundreds of 1126 00:44:37,520 --> 00:44:43,839 thousands of songs per user. 1127 00:44:41,359 --> 00:44:46,079 This is what a list looks like. 1128 00:44:43,839 --> 00:44:48,319 Basically, in CPython, we've got one 1129 00:44:46,079 --> 00:44:50,800 light from here. And it's very easy to 1130 00:44:48,319 --> 00:44:52,480 see if there's any overlap. If I'm 1131 00:44:50,800 --> 00:44:54,720 looking for a song, I can see if it's 1132 00:44:52,480 --> 00:44:57,520 right there. But if I've got lots and 1133 00:44:54,720 --> 00:45:00,000 lots and lots of songs, it becomes much 1134 00:44:57,520 --> 00:45:02,079 harder to go through every single one 1135 00:45:00,000 --> 00:45:05,440 and check is this song in here, and it's 1136 00:45:02,079 --> 00:45:07,760 this song, is this song. Lists get very 1137 00:45:05,440 --> 00:45:10,640 time consuming for checking. And I was 1138 00:45:07,760 --> 00:45:12,800 checking every page against every item 1139 00:45:10,640 --> 00:45:14,640 in this list for every user and it was 1140 00:45:12,800 --> 00:45:16,720 adding minutes and minutes and minutes 1141 00:45:14,640 --> 00:45:20,200 to my downloads. 1142 00:45:16,720 --> 00:45:20,200 Didn't want that. 1143 00:45:20,480 --> 00:45:25,760 By the end of that, I had kind of come 1144 00:45:24,079 --> 00:45:28,079 up with the idea that I needed to do 1145 00:45:25,760 --> 00:45:30,319 something differently. And so I said 1146 00:45:28,079 --> 00:45:32,160 sets 1147 00:45:30,319 --> 00:45:35,680 sets are a much better structure for 1148 00:45:32,160 --> 00:45:37,839 what I'm doing here because 1149 00:45:35,680 --> 00:45:40,720 and and somebody much smarter than me 1150 00:45:37,839 --> 00:45:42,560 can correct if I've misrepresented 1151 00:45:40,720 --> 00:45:46,319 something. But what we're doing is 1152 00:45:42,560 --> 00:45:49,760 instead of doing a list of items, we 1153 00:45:46,319 --> 00:45:52,720 just put everything there. And we can 1154 00:45:49,760 --> 00:45:55,119 see that each of these spaces will 1155 00:45:52,720 --> 00:45:58,000 represent a specific song, a specific 1156 00:45:55,119 --> 00:45:59,760 ID, a specific something. And we can 1157 00:45:58,000 --> 00:46:01,760 populate these and very quickly just 1158 00:45:59,760 --> 00:46:06,240 look at it, look at it all at once and 1159 00:46:01,760 --> 00:46:08,560 see if it is there. 1160 00:46:06,240 --> 00:46:11,920 So when I'm trying to download my songs, 1161 00:46:08,560 --> 00:46:15,359 it becomes almost instantaneous. It went 1162 00:46:11,920 --> 00:46:19,079 from a few seconds per page to I didn't 1163 00:46:15,359 --> 00:46:19,079 even notice it running. 1164 00:46:19,280 --> 00:46:23,599 So, 1165 00:46:21,359 --> 00:46:26,240 this is good. And I actually ended up 1166 00:46:23,599 --> 00:46:28,160 just putting everything into a set 1167 00:46:26,240 --> 00:46:30,079 because sets are unique. You can see 1168 00:46:28,160 --> 00:46:32,880 here that there's no two spots per 1169 00:46:30,079 --> 00:46:35,040 thing. We can just store unique items 1170 00:46:32,880 --> 00:46:37,280 and everything into a set. Sort it at 1171 00:46:35,040 --> 00:46:39,440 the end. 1172 00:46:37,280 --> 00:46:43,200 Now, my final aside is that now that 1173 00:46:39,440 --> 00:46:46,000 I've got my recommener working, you can 1174 00:46:43,200 --> 00:46:48,000 DM me. Here's my link. I don't have a QR 1175 00:46:46,000 --> 00:46:50,480 code. 1176 00:46:48,000 --> 00:46:53,920 It's not very good at recommending, but 1177 00:46:50,480 --> 00:46:56,560 you're welcome to ask me for it. 1178 00:46:53,920 --> 00:46:58,240 Um, you will need a Last FM account and 1179 00:46:56,560 --> 00:47:01,680 a few hundred listens to get anything 1180 00:46:58,240 --> 00:47:03,520 good from this. Now, with all that being 1181 00:47:01,680 --> 00:47:06,640 said, I think there is actually an 1182 00:47:03,520 --> 00:47:09,280 obvious takeaway from this. 1183 00:47:06,640 --> 00:47:12,240 My room isn't messy. It's highly 1184 00:47:09,280 --> 00:47:15,280 optimized and efficient for finding 1185 00:47:12,240 --> 00:47:17,760 unique items quickly. 1186 00:47:15,280 --> 00:47:20,760 And finally, does the data agree with 1187 00:47:17,760 --> 00:47:20,760 me? 1188 00:47:21,040 --> 00:47:27,669 Kate, fine. I'll clean my room. 1189 00:47:24,590 --> 00:47:27,669 [Applause] 1190 00:47:30,960 --> 00:47:35,200 Thank you so much, Toby, for giving me a 1191 00:47:33,680 --> 00:47:37,920 plausible explanation for my why my 1192 00:47:35,200 --> 00:47:40,800 apartment looks the way it does. 1193 00:47:37,920 --> 00:47:43,680 Uh, up on this side, we have Alan Rubin. 1194 00:47:40,800 --> 00:47:46,160 Uh but first uh so some of you may 1195 00:47:43,680 --> 00:47:47,599 remember in the preandemic Pythons at 1196 00:47:46,160 --> 00:47:48,880 lightning talks we had some uh 1197 00:47:47,599 --> 00:47:51,040 presentations about history and 1198 00:47:48,880 --> 00:47:56,359 politics. 1199 00:47:51,040 --> 00:47:56,359 This year it's a fullblown conspiracy 1200 00:48:01,839 --> 00:48:08,240 ginger nuts are not equal. So there's 1201 00:48:04,560 --> 00:48:10,000 actually four of them. uh bought out 1202 00:48:08,240 --> 00:48:14,480 many bakeries between uh in the 1203 00:48:10,000 --> 00:48:16,319 1940s,50s and60s uh and well they kept 1204 00:48:14,480 --> 00:48:19,119 some of them because basically what 1205 00:48:16,319 --> 00:48:20,960 happened is well they tried to go to the 1206 00:48:19,119 --> 00:48:22,319 arnut skew and then people hated it 1207 00:48:20,960 --> 00:48:25,599 because why would you want the New South 1208 00:48:22,319 --> 00:48:27,920 Wales Ginger skew? Uh it's just bad. So 1209 00:48:25,599 --> 00:48:31,040 anyway, this entire situation happened 1210 00:48:27,920 --> 00:48:33,520 like uh so I was curious after this 1211 00:48:31,040 --> 00:48:37,520 after I came uh home from a road trip 1212 00:48:33,520 --> 00:48:39,359 with some friends and we arrived home uh 1213 00:48:37,520 --> 00:48:41,119 and all they had in their pantry was a 1214 00:48:39,359 --> 00:48:43,200 packet of ginger nuts. It wasn't quite 1215 00:48:41,119 --> 00:48:44,800 right. It was like it tasted weird. The 1216 00:48:43,200 --> 00:48:48,800 texture was wrong. Turns out it was a 1217 00:48:44,800 --> 00:48:52,079 South Australian skew. Uh so as as 1218 00:48:48,800 --> 00:48:53,760 everyone would want to finding out this 1219 00:48:52,079 --> 00:48:56,079 conspiracy, I would want to find out 1220 00:48:53,760 --> 00:48:58,000 where I can buy them. So obviously I had 1221 00:48:56,079 --> 00:49:01,200 to reverse engineer the Coohl's online 1222 00:48:58,000 --> 00:49:03,119 API like I I looked at Coohl's and Worth 1223 00:49:01,200 --> 00:49:08,000 and I went Coohl's is easier so I just 1224 00:49:03,119 --> 00:49:13,920 went with that. Uh so I like queried 1225 00:49:08,000 --> 00:49:15,440 their API like 10,000 times cuz I uh PQ 1226 00:49:13,920 --> 00:49:18,319 uh because I didn't know what stores 1227 00:49:15,440 --> 00:49:21,119 actually existed because like uh the API 1228 00:49:18,319 --> 00:49:25,440 uh uh required a store. So, I just tried 1229 00:49:21,119 --> 00:49:30,040 every integer between uh 0 and 9,999 1230 00:49:25,440 --> 00:49:30,040 and I found about 800 stores. 1231 00:49:30,079 --> 00:49:35,839 Uh I probably queried their API probably 1232 00:49:33,040 --> 00:49:39,119 about 110,000 times, 1233 00:49:35,839 --> 00:49:43,480 but they earned $1.1 billion in profit 1234 00:49:39,119 --> 00:49:43,480 last year, so I don't really give a 1235 00:49:46,240 --> 00:49:51,680 uh one. 1236 00:49:48,960 --> 00:49:53,280 Uh, so then I went to go, "Oh, I've got 1237 00:49:51,680 --> 00:49:55,920 all of these stores. I don't know where 1238 00:49:53,280 --> 00:49:58,319 these 800 stores are." So I looked at 1239 00:49:55,920 --> 00:50:00,800 the easy option, went, "Oh, where's the 1240 00:49:58,319 --> 00:50:04,240 click and collect location uh near me 1241 00:50:00,800 --> 00:50:06,400 API?" And then I realized uh and decided 1242 00:50:04,240 --> 00:50:09,520 to expand the amount of stores it would 1243 00:50:06,400 --> 00:50:11,280 return and the distance and it didn't 1244 00:50:09,520 --> 00:50:15,200 work. Uh, turns out they have a hard 1245 00:50:11,280 --> 00:50:17,040 limit of well distance like kilometers 1246 00:50:15,200 --> 00:50:19,839 and amount of stores returned. So that 1247 00:50:17,040 --> 00:50:22,079 wasn't feasible. So, I ended up going 1248 00:50:19,839 --> 00:50:24,880 digging and found this random really 1249 00:50:22,079 --> 00:50:26,640 looking internal looking ASPX uh web 1250 00:50:24,880 --> 00:50:28,480 page. 1251 00:50:26,640 --> 00:50:31,119 Unfortunately, it was quite outdated and 1252 00:50:28,480 --> 00:50:34,960 it uh includes lots of uh pick and pays 1253 00:50:31,119 --> 00:50:36,960 and a bo uh a former BO locations and I 1254 00:50:34,960 --> 00:50:40,319 looked up one and it was actually an IG 1255 00:50:36,960 --> 00:50:42,319 now. So, I guess they sold it off. So, 1256 00:50:40,319 --> 00:50:44,000 obviously that's not feasible. like I 1257 00:50:42,319 --> 00:50:47,359 was missing a large amount of stores 1258 00:50:44,000 --> 00:50:51,599 that I knew existed because I had uh uh 1259 00:50:47,359 --> 00:50:54,880 stock uh amounts for all of them. So, 1260 00:50:51,599 --> 00:50:57,920 I just found another API. Uh, like I 1261 00:50:54,880 --> 00:51:02,240 can't find it, but uh I went on Google 1262 00:50:57,920 --> 00:51:04,319 search uh Cooh's locations and I found a 1263 00:51:02,240 --> 00:51:08,000 a page for a particular store and turns 1264 00:51:04,319 --> 00:51:11,280 out they had a redirect on uh for most 1265 00:51:08,000 --> 00:51:13,760 store locations using on their old store 1266 00:51:11,280 --> 00:51:15,920 location page uh except for this one 1267 00:51:13,760 --> 00:51:18,559 store. So, I found their API. Turns out 1268 00:51:15,920 --> 00:51:21,119 they've since killed it. Uh so you can 1269 00:51:18,559 --> 00:51:23,599 see up the top left the uh top right 1270 00:51:21,119 --> 00:51:27,440 that's the result that I got in May 2014 1271 00:51:23,599 --> 00:51:29,200 and now it's dead. Oh well. Uh so I 1272 00:51:27,440 --> 00:51:31,040 still wasn't happy. Like I still had 1273 00:51:29,200 --> 00:51:33,440 quite a few stores that I didn't know 1274 00:51:31,040 --> 00:51:35,920 what it was. So I found another free API 1275 00:51:33,440 --> 00:51:38,800 because of course I did. 1276 00:51:35,920 --> 00:51:42,559 So I found all of this data. Now how the 1277 00:51:38,800 --> 00:51:44,400 hell would I display it? So I like all 1278 00:51:42,559 --> 00:51:45,599 of this were I started this entire 1279 00:51:44,400 --> 00:51:47,040 project because I wanted to learn 1280 00:51:45,599 --> 00:51:49,520 Python. And I had never done Python 1281 00:51:47,040 --> 00:51:52,000 before and well there's a lot of 1282 00:51:49,520 --> 00:51:54,400 everything in this thing. So I'm like 1283 00:51:52,000 --> 00:51:56,880 okay I'll have a look. And I ended up 1284 00:51:54,400 --> 00:51:59,760 finding uh geopandas and created a 1285 00:51:56,880 --> 00:52:01,920 static plot. But I went no I don't want 1286 00:51:59,760 --> 00:52:03,760 that. I want to be able to explore the 1287 00:52:01,920 --> 00:52:06,400 map. I want to zoom in because this is 1288 00:52:03,760 --> 00:52:08,880 kind of not workable. Like I can't tell 1289 00:52:06,400 --> 00:52:10,800 which uh stores in Melbourne have what 1290 00:52:08,880 --> 00:52:12,880 because they're just one pixel. It 1291 00:52:10,800 --> 00:52:15,119 doesn't make sense. It doesn't work. So 1292 00:52:12,880 --> 00:52:17,280 back to the drawing bud. Uh and then I 1293 00:52:15,119 --> 00:52:19,280 also looked at more tutorials and found 1294 00:52:17,280 --> 00:52:21,359 out that geopandis actually has another 1295 00:52:19,280 --> 00:52:24,160 thing for like uh uh I think it's called 1296 00:52:21,359 --> 00:52:27,119 explore and it just uses folium uh which 1297 00:52:24,160 --> 00:52:30,480 uh uh uses like generates like a leaflet 1298 00:52:27,119 --> 00:52:33,200 map and well you can just do anything 1299 00:52:30,480 --> 00:52:37,440 and you can export it as HTML. So I did. 1300 00:52:33,200 --> 00:52:39,920 So then I created a uh oh 1301 00:52:37,440 --> 00:52:42,160 yep there we go. 1302 00:52:39,920 --> 00:52:44,800 If I can do it right, I've now have a 1303 00:52:42,160 --> 00:52:46,000 thingy in the top corner. 1304 00:52:44,800 --> 00:52:49,800 I don't know what to do. 1305 00:52:46,000 --> 00:52:49,800 Okay, we can do that. 1306 00:52:51,280 --> 00:52:54,760 There we go. 1307 00:52:55,920 --> 00:53:01,280 Stop. Stop. So, I made a web page about 1308 00:53:00,079 --> 00:53:06,200 it. Uh, and 1309 00:53:01,280 --> 00:53:06,200 that's it. That's your five minutes. 1310 00:53:07,680 --> 00:53:17,040 Uh so some things to note that are we? 1311 00:53:12,160 --> 00:53:20,000 Yeah. So uh G, you're on that side. Um 1312 00:53:17,040 --> 00:53:22,319 so um I mentioned earlier that we had a 1313 00:53:20,000 --> 00:53:27,280 geneticist in the room. Uh Jack, I think 1314 00:53:22,319 --> 00:53:28,480 we've got a response to your talk. Um 1315 00:53:27,280 --> 00:53:28,800 that that is what you're doing, right, 1316 00:53:28,480 --> 00:53:29,680 Alan? 1317 00:53:28,800 --> 00:53:30,880 Uh sure. Now. 1318 00:53:29,680 --> 00:53:31,440 Yeah, let's go with that. Okay. Okay. 1319 00:53:30,880 --> 00:53:34,680 Maybe tomorrow. 1320 00:53:31,440 --> 00:53:34,680 Hello everyone. 1321 00:53:35,440 --> 00:53:38,160 All right. Thanks everyone. I'm going to 1322 00:53:36,640 --> 00:53:39,520 tell you about genomic data standards. 1323 00:53:38,160 --> 00:53:40,640 So first of all, here's a cartoon of a 1324 00:53:39,520 --> 00:53:42,160 DNA molecule. We're talking about 1325 00:53:40,640 --> 00:53:44,559 genomics. We're going to talk about DNA. 1326 00:53:42,160 --> 00:53:46,000 DNA stands for deoxxyribboucleic acid. 1327 00:53:44,559 --> 00:53:47,040 It's how your genome is encoded. And 1328 00:53:46,000 --> 00:53:48,319 that's the blueprint for all the cells 1329 00:53:47,040 --> 00:53:49,599 in your body. I hope many of you saw 1330 00:53:48,319 --> 00:53:51,839 Nick's talk this morning. It was really 1331 00:53:49,599 --> 00:53:53,359 great. Uh so DNA is a polymer chain made 1332 00:53:51,839 --> 00:53:56,240 up of what we call bases. And each base 1333 00:53:53,359 --> 00:53:57,839 is given a letter A, T, C, and G. And we 1334 00:53:56,240 --> 00:53:59,440 can now sequence DNA very efficiently. 1335 00:53:57,839 --> 00:54:00,800 So here's a picture of a DNA sequencer. 1336 00:53:59,440 --> 00:54:02,079 It's an instrument that fits on a 1337 00:54:00,800 --> 00:54:03,680 benchtop. I found this one on 1338 00:54:02,079 --> 00:54:05,040 AliExpress. I'm not sure if it's any 1339 00:54:03,680 --> 00:54:07,280 good because there weren't any reviews, 1340 00:54:05,040 --> 00:54:08,559 but it uses nanoport technology. So, you 1341 00:54:07,280 --> 00:54:10,240 can use these instruments to read out 1342 00:54:08,559 --> 00:54:11,599 the sequence of any DNA molecule, and we 1343 00:54:10,240 --> 00:54:14,079 usually represent those as text strings 1344 00:54:11,599 --> 00:54:15,280 of AC, C's, and G's. And so, we store 1345 00:54:14,079 --> 00:54:16,559 those text sequences and some 1346 00:54:15,280 --> 00:54:18,559 information that comes off the sequencer 1347 00:54:16,559 --> 00:54:19,760 using a file format called fast Q. But 1348 00:54:18,559 --> 00:54:21,200 usually, we aren't actually really 1349 00:54:19,760 --> 00:54:23,200 interested in the sequences themselves, 1350 00:54:21,200 --> 00:54:25,280 but rather how they are compared against 1351 00:54:23,200 --> 00:54:26,880 another genome or how they're different. 1352 00:54:25,280 --> 00:54:28,640 And so variant calling is the process 1353 00:54:26,880 --> 00:54:29,920 where we take these sequences and we 1354 00:54:28,640 --> 00:54:31,599 compare them against a reference genome 1355 00:54:29,920 --> 00:54:32,880 to identify differences. And when people 1356 00:54:31,599 --> 00:54:34,960 talk about how scientists sequenced the 1357 00:54:32,880 --> 00:54:35,920 human genome in 2003 or so, they're 1358 00:54:34,960 --> 00:54:37,920 talking about the human reference 1359 00:54:35,920 --> 00:54:39,440 genome. And that's me and that's 1360 00:54:37,920 --> 00:54:40,640 represented by this little database icon 1361 00:54:39,440 --> 00:54:42,400 here. And the human reference genome 1362 00:54:40,640 --> 00:54:44,240 isn't one specific person. It's about 1363 00:54:42,400 --> 00:54:45,839 70% of it is an African-American man 1364 00:54:44,240 --> 00:54:48,559 from Buffalo, New York. And the rest is 1365 00:54:45,839 --> 00:54:50,640 other people. Um and so this is the uh 1366 00:54:48,559 --> 00:54:53,520 genome that all all other sequences are 1367 00:54:50,640 --> 00:54:54,960 compared against. and and so um that's 1368 00:54:53,520 --> 00:54:56,480 what we're going to use as the basis for 1369 00:54:54,960 --> 00:54:57,680 the variant calling. It's complicated, 1370 00:54:56,480 --> 00:54:59,359 so we're going to hide it in this magic 1371 00:54:57,680 --> 00:55:00,880 block box. And the output of most 1372 00:54:59,359 --> 00:55:02,079 variant callers is what's called a VCF 1373 00:55:00,880 --> 00:55:03,920 file, which stands for variant call 1374 00:55:02,079 --> 00:55:05,680 format. It is the most cursed file 1375 00:55:03,920 --> 00:55:08,000 format I have ever worked with, and I am 1376 00:55:05,680 --> 00:55:09,119 not going to talk about it anymore. 1377 00:55:08,000 --> 00:55:10,559 But we want to be able to talk about 1378 00:55:09,119 --> 00:55:11,839 individual genetic variants. And so 1379 00:55:10,559 --> 00:55:13,040 that's the change in the genome with 1380 00:55:11,839 --> 00:55:14,160 respect to the reference. And so one of 1381 00:55:13,040 --> 00:55:16,720 the most common formats for doing that 1382 00:55:14,160 --> 00:55:18,559 is this HVS format, which was originally 1383 00:55:16,720 --> 00:55:21,359 defined by the human genome variation 1384 00:55:18,559 --> 00:55:22,800 society. Uh you'll find HTVs everywhere. 1385 00:55:21,359 --> 00:55:24,640 It was in Nick's talk. It's very common 1386 00:55:22,800 --> 00:55:26,240 in clinical reports from genetic tests 1387 00:55:24,640 --> 00:55:28,160 or in scientific papers. You can also 1388 00:55:26,240 --> 00:55:30,800 find it on the AliExpress listing for 1389 00:55:28,160 --> 00:55:32,800 listing page for DNA sequencers. Uh 1390 00:55:30,800 --> 00:55:34,240 here's an HVS string. It has a reference 1391 00:55:32,800 --> 00:55:35,760 accession which is the sequence we are 1392 00:55:34,240 --> 00:55:37,680 indexing into. Here this is human 1393 00:55:35,760 --> 00:55:38,800 chromosome 19. It has a prefix that 1394 00:55:37,680 --> 00:55:40,960 tells us what kind of sequence variant 1395 00:55:38,800 --> 00:55:42,319 it is. Here this is G for genomic. Uh we 1396 00:55:40,960 --> 00:55:43,599 have the position for the sequence and 1397 00:55:42,319 --> 00:55:45,280 then the substitution and the reference 1398 00:55:43,599 --> 00:55:47,760 base. So this is a C to T at whatever 1399 00:55:45,280 --> 00:55:49,040 position that is. Uh HVS can represent a 1400 00:55:47,760 --> 00:55:50,480 lot of variants. Here's the same variant 1401 00:55:49,040 --> 00:55:52,160 in the genome showing with respect to a 1402 00:55:50,480 --> 00:55:53,839 transcript that's a coding coding 1403 00:55:52,160 --> 00:55:56,000 variant and with respect to the protein 1404 00:55:53,839 --> 00:55:57,200 that's these p dot variants. So the DNA 1405 00:55:56,000 --> 00:55:58,400 format as you'll notice is really 1406 00:55:57,200 --> 00:55:59,520 different to the protein format and 1407 00:55:58,400 --> 00:56:01,839 that's by design so that you can't 1408 00:55:59,520 --> 00:56:03,680 easily confuse them. And so HVS is very 1409 00:56:01,839 --> 00:56:05,280 flexible right in fact be too flexible. 1410 00:56:03,680 --> 00:56:06,799 So here's an example where instead of a 1411 00:56:05,280 --> 00:56:08,640 version transcript or something from a 1412 00:56:06,799 --> 00:56:10,160 database we have a gene name. It's not 1413 00:56:08,640 --> 00:56:11,040 specific anymore but it's still valid 1414 00:56:10,160 --> 00:56:12,799 and it's actually much more 1415 00:56:11,040 --> 00:56:14,559 interpretable. The most popular clinical 1416 00:56:12,799 --> 00:56:15,839 reporting software creates HVAC variants 1417 00:56:14,559 --> 00:56:17,520 that look like this since it's much 1418 00:56:15,839 --> 00:56:19,200 easier for our clinicians to see the 1419 00:56:17,520 --> 00:56:20,960 gene name rather than the accession 1420 00:56:19,200 --> 00:56:23,280 number because most people don't rec 1421 00:56:20,960 --> 00:56:25,359 memorize gene accession numbers. Uh 1422 00:56:23,280 --> 00:56:27,200 here's another example of a valid HTVs 1423 00:56:25,359 --> 00:56:29,280 string for a large DNA rearrangement 1424 00:56:27,200 --> 00:56:31,119 involving an insertion and inversion of 1425 00:56:29,280 --> 00:56:32,319 a sequence with uncertain break points. 1426 00:56:31,119 --> 00:56:34,319 You do not want to have to write a 1427 00:56:32,319 --> 00:56:36,319 parser for this. It is very challenging. 1428 00:56:34,319 --> 00:56:37,920 There's an HVS package that parses these 1429 00:56:36,319 --> 00:56:39,920 strings. It's open source. It's written 1430 00:56:37,920 --> 00:56:41,440 in Python. It uses contextf free 1431 00:56:39,920 --> 00:56:43,280 grammarss and a large sequence database 1432 00:56:41,440 --> 00:56:44,880 to do this work. If you are a fan of 1433 00:56:43,280 --> 00:56:46,319 contextf free grammarss and railroad 1434 00:56:44,880 --> 00:56:48,000 diagrams, you are probably at the right 1435 00:56:46,319 --> 00:56:49,119 conference and you will also probably 1436 00:56:48,000 --> 00:56:50,400 enjoy reading their reference 1437 00:56:49,119 --> 00:56:52,160 documentation. There's a lot of 1438 00:56:50,400 --> 00:56:53,440 beautiful stuff in there. Uh to the best 1439 00:56:52,160 --> 00:56:55,119 of my knowledge, there is still no 1440 00:56:53,440 --> 00:56:56,640 software implementation that covers the 1441 00:56:55,119 --> 00:56:57,920 entire spec and I believe the first 1442 00:56:56,640 --> 00:56:59,599 version of the spec was released in 1443 00:56:57,920 --> 00:57:01,839 1996. 1444 00:56:59,599 --> 00:57:04,000 Um it is also very hard to pass this 1445 00:57:01,839 --> 00:57:05,280 around via API and compute on it. I did 1446 00:57:04,000 --> 00:57:06,880 write a regular expressionbased 1447 00:57:05,280 --> 00:57:08,720 implementation of a tiny portion of the 1448 00:57:06,880 --> 00:57:10,480 spec that we needed for our project. I 1449 00:57:08,720 --> 00:57:12,400 think it is terrible. We are still using 1450 00:57:10,480 --> 00:57:14,400 it in production. Also, because we are 1451 00:57:12,400 --> 00:57:17,040 open source software uh developers, 1452 00:57:14,400 --> 00:57:18,880 there is also a PI HTTPS on PI which has 1453 00:57:17,040 --> 00:57:21,280 not been updated I think in 7 years. 1454 00:57:18,880 --> 00:57:22,640 Don't get confused. Now, to try to solve 1455 00:57:21,280 --> 00:57:24,240 the problem to allow us to do things 1456 00:57:22,640 --> 00:57:25,520 like build database APIs that can talk 1457 00:57:24,240 --> 00:57:26,880 to each other more easily, we have a 1458 00:57:25,520 --> 00:57:28,559 different standard called verse or the 1459 00:57:26,880 --> 00:57:30,240 variation representation specification 1460 00:57:28,559 --> 00:57:31,440 which is much more recent. It's from an 1461 00:57:30,240 --> 00:57:33,200 international standards what I call 1462 00:57:31,440 --> 00:57:36,160 G4GH, the Global Alliance for Genomics 1463 00:57:33,200 --> 00:57:37,680 and Health. Um, some when Nick came to 1464 00:57:36,160 --> 00:57:39,520 one of our meetings, he said it reminded 1465 00:57:37,680 --> 00:57:41,440 him of the LE E. I don't know if that's 1466 00:57:39,520 --> 00:57:43,119 good or bad. Um, here's the verse 1467 00:57:41,440 --> 00:57:45,040 representation of that same variant. It 1468 00:57:43,119 --> 00:57:46,319 is punishingly verbose, but it also 1469 00:57:45,040 --> 00:57:48,079 makes it much easier to validate and 1470 00:57:46,319 --> 00:57:49,440 parse these objects. So, the reference 1471 00:57:48,079 --> 00:57:51,040 implementation of verse is also in 1472 00:57:49,440 --> 00:57:52,559 Python. It does not use a context 1473 00:57:51,040 --> 00:57:54,640 grammar. It does not have any railroad 1474 00:57:52,559 --> 00:57:56,559 diagrams. But really complex variants 1475 00:57:54,640 --> 00:57:58,400 can be built up and composed using 1476 00:57:56,559 --> 00:58:00,240 things like JSON schema to make these 1477 00:57:58,400 --> 00:58:01,599 complex variant objects. But you can't 1478 00:58:00,240 --> 00:58:02,960 easily paste this into a clinical 1479 00:58:01,599 --> 00:58:04,400 report. So we still need HTBS for a 1480 00:58:02,960 --> 00:58:05,920 human readable version. And so of course 1481 00:58:04,400 --> 00:58:07,520 there's an HKC for that. But I think 1482 00:58:05,920 --> 00:58:08,799 this is different because it's really an 1483 00:58:07,520 --> 00:58:10,720 example of how we do need different 1484 00:58:08,799 --> 00:58:12,160 standards for different purposes and we 1485 00:58:10,720 --> 00:58:13,680 need standards for people that people 1486 00:58:12,160 --> 00:58:14,960 can read and those should be systematic 1487 00:58:13,680 --> 00:58:16,400 but we need different standards for 1488 00:58:14,960 --> 00:58:17,760 computers. So maybe this problem needing 1489 00:58:16,400 --> 00:58:19,599 to juggle multiple standards for 1490 00:58:17,760 --> 00:58:21,280 different use cases is also true in your 1491 00:58:19,599 --> 00:58:22,720 work that is maybe not in genomics and 1492 00:58:21,280 --> 00:58:26,760 I'm interested in talking more about how 1493 00:58:22,720 --> 00:58:26,760 you manage this. So thank you. 1494 00:58:29,330 --> 00:58:34,559 [Applause] 1495 00:58:31,760 --> 00:58:35,760 Thank you so much Alan. Also as someone 1496 00:58:34,559 --> 00:58:37,440 that has been fighting with Russell 1497 00:58:35,760 --> 00:58:38,720 Keith McGee for the title of the person 1498 00:58:37,440 --> 00:58:39,920 that speaks the fastest in this 1499 00:58:38,720 --> 00:58:42,720 conference I'm worried that the two of 1500 00:58:39,920 --> 00:58:45,920 us have a third contender. Up next on 1501 00:58:42,720 --> 00:58:48,160 this side is unfortunately nobody. 1502 00:58:45,920 --> 00:58:50,480 Oh 1503 00:58:48,160 --> 00:58:52,079 un next on this side is unfortunately 1504 00:58:50,480 --> 00:58:53,520 not a lightning talk presenter. I am 1505 00:58:52,079 --> 00:58:55,520 told that our conference director is not 1506 00:58:53,520 --> 00:58:58,480 nobody because Peter will be closing the 1507 00:58:55,520 --> 00:59:00,960 event. Fortunately there is one more 1508 00:58:58,480 --> 00:59:02,319 lightning talk to go. 1509 00:59:00,960 --> 00:59:05,040 One of the really interesting things 1510 00:59:02,319 --> 00:59:07,200 about lightning talks is some of the 1511 00:59:05,040 --> 00:59:09,520 really like deep metaphors and the ways 1512 00:59:07,200 --> 00:59:11,520 that we can connect technology with the 1513 00:59:09,520 --> 00:59:13,599 rest of our lives. 1514 00:59:11,520 --> 00:59:16,900 G Kid is going to tell us how to get a 1515 00:59:13,599 --> 00:59:22,079 blowfly out of bedroom. 1516 00:59:16,900 --> 00:59:26,040 [Applause] 1517 00:59:22,079 --> 00:59:26,040 How do I follow that? 1518 00:59:26,799 --> 00:59:32,240 Quickly. Right. Thank you, Beno. 1519 00:59:29,920 --> 00:59:34,799 Right. Uh, how to get a blowfly out of a 1520 00:59:32,240 --> 00:59:37,040 bedroom. Um, I am here to tell you how 1521 00:59:34,799 --> 00:59:40,000 to get a blowfly out of a bedroom. Um, I 1522 00:59:37,040 --> 00:59:41,920 regret I was mumble old uh before I 1523 00:59:40,000 --> 00:59:44,559 finally figured this out for myself. Uh, 1524 00:59:41,920 --> 00:59:48,480 quick poll. Um, who here already knows 1525 00:59:44,559 --> 00:59:52,680 how to get a blowfly out of a bedroom? 1526 00:59:48,480 --> 00:59:52,680 Why didn't you tell anyone? 1527 00:59:55,680 --> 01:00:00,640 Right. Um, theory of operation as a 1528 00:59:57,920 --> 01:00:02,079 co-orker of mine might call it. um or uh 1529 01:00:00,640 --> 01:00:05,359 as I've started calling it whenever it's 1530 01:00:02,079 --> 01:00:08,640 a bug, a theory of failure. 1531 01:00:05,359 --> 01:00:10,640 There is a fly here. 1532 01:00:08,640 --> 01:00:13,440 Now, I drew this blue fly. This blowfly, 1533 01:00:10,640 --> 01:00:16,400 uh this blowfly needs work. Um it's a 1534 01:00:13,440 --> 01:00:19,280 bit David Thorne. 1535 01:00:16,400 --> 01:00:21,440 It's only got five legs. 1536 01:00:19,280 --> 01:00:24,559 So, I've asked people to help me with my 1537 01:00:21,440 --> 01:00:27,200 blowflies. Uh thanks, Althia. 1538 01:00:24,559 --> 01:00:30,799 Um but this question needs work. How do 1539 01:00:27,200 --> 01:00:33,040 I get the fly out of my bedroom? Um, 1540 01:00:30,799 --> 01:00:35,359 it's misleading in that it it it sort of 1541 01:00:33,040 --> 01:00:37,200 leads you off into 1542 01:00:35,359 --> 01:00:40,319 like considering methodology before you 1543 01:00:37,200 --> 01:00:42,079 understand the problem. 1544 01:00:40,319 --> 01:00:44,799 A better question is why is the fly 1545 01:00:42,079 --> 01:00:47,359 here? 1546 01:00:44,799 --> 01:00:49,520 Thank you, Lily. Um, and this might just 1547 01:00:47,359 --> 01:00:51,280 be for verbal processing types, but does 1548 01:00:49,520 --> 01:00:53,040 anyone have that thing where they just 1549 01:00:51,280 --> 01:00:54,640 keep mulling over a question with this 1550 01:00:53,040 --> 01:00:55,920 mate and that mate and the other, or if 1551 01:00:54,640 --> 01:00:57,920 they're really unlucky, the same mate 1552 01:00:55,920 --> 01:00:59,440 over and over, 1553 01:00:57,920 --> 01:01:00,799 and they keep asking the same question 1554 01:00:59,440 --> 01:01:03,839 over and over in different ways until 1555 01:01:00,799 --> 01:01:08,280 they finally find themselves expressing 1556 01:01:03,839 --> 01:01:08,280 the problem in terms of the solution? 1557 01:01:09,520 --> 01:01:14,720 This is a much better question. 1558 01:01:12,160 --> 01:01:17,119 Why doesn't the fly get out of my 1559 01:01:14,720 --> 01:01:21,480 bedroom? 1560 01:01:17,119 --> 01:01:21,480 And the answer is regrettably obvious. 1561 01:01:22,079 --> 01:01:25,599 It's dark. 1562 01:01:24,079 --> 01:01:27,599 That's why it keeps flying into the 1563 01:01:25,599 --> 01:01:30,599 walls going 1564 01:01:27,599 --> 01:01:30,599 and 1565 01:01:30,720 --> 01:01:37,040 can't see to get out. It the reason it's 1566 01:01:32,640 --> 01:01:39,760 in our bedroom is it followed us here. 1567 01:01:37,040 --> 01:01:42,000 Or better put, it followed the light 1568 01:01:39,760 --> 01:01:44,960 here. 1569 01:01:42,000 --> 01:01:47,200 And now that you understand 1570 01:01:44,960 --> 01:01:50,640 what happened, the methodology is 1571 01:01:47,200 --> 01:01:52,960 obvious, right? 1572 01:01:50,640 --> 01:01:54,720 Thanks, Maya. Sorry, I'm changing 1573 01:01:52,960 --> 01:01:56,400 blowflies repeatedly and I'm failing to 1574 01:01:54,720 --> 01:01:58,079 give credit. I'll fix that at the end. 1575 01:01:56,400 --> 01:02:00,480 Um, so what you do is you walk out of 1576 01:01:58,079 --> 01:02:02,319 your bedroom to the next room out, you 1577 01:02:00,480 --> 01:02:05,839 turn the light on, and you wait until 1578 01:02:02,319 --> 01:02:09,200 the fly joins you. 1579 01:02:05,839 --> 01:02:10,640 And then you move to the next room along 1580 01:02:09,200 --> 01:02:12,400 and you turn the light on there. And 1581 01:02:10,640 --> 01:02:15,960 then you walk back to the other room and 1582 01:02:12,400 --> 01:02:15,960 you turn the light off. 1583 01:02:16,480 --> 01:02:20,599 Lather, rinse, and repeat. 1584 01:02:24,000 --> 01:02:28,000 I ran out of blowflies at this point. 1585 01:02:26,400 --> 01:02:29,760 This is my blowfly again. You lather, 1586 01:02:28,000 --> 01:02:31,359 rinse, and repeat until you lure the 1587 01:02:29,760 --> 01:02:32,880 blowfly 1588 01:02:31,359 --> 01:02:35,200 to the most distant point of the house 1589 01:02:32,880 --> 01:02:39,240 from your bedroom. 1590 01:02:35,200 --> 01:02:39,240 And then you turn that light off 1591 01:02:39,520 --> 01:02:44,200 and tiptoe back to your bedroom. 1592 01:02:47,760 --> 01:02:54,079 Uh so yeah, too long didn't read. Lure 1593 01:02:50,960 --> 01:02:56,480 it out with light. 1594 01:02:54,079 --> 01:02:58,799 And I'd like to thank my Blowfly 1595 01:02:56,480 --> 01:03:02,599 collaborators 1596 01:02:58,799 --> 01:03:02,599 and thank you for listening. 1597 01:03:07,280 --> 01:03:08,559 You done? 1598 01:03:08,079 --> 01:03:12,839 Oh, yeah. 1599 01:03:08,559 --> 01:03:12,839 Oh, thanks G. That was great. 1600 01:03:15,930 --> 01:03:21,019 [Music]