1 00:00:12,240 --> 00:00:17,199 hello everyone it's lightning 2 00:00:14,799 --> 00:00:18,800 talks time uh finally 3 00:00:17,199 --> 00:00:21,359 uh hey everyone i'm christopher 4 00:00:18,800 --> 00:00:23,519 neugebauer i am coming to you from the 5 00:00:21,359 --> 00:00:26,960 unseated land of the coast miwok people 6 00:00:23,519 --> 00:00:28,800 here in petaluma california uh still uh 7 00:00:26,960 --> 00:00:30,960 annoyingly prevented from being on the 8 00:00:28,800 --> 00:00:33,120 correct time zone for lightning talks 9 00:00:30,960 --> 00:00:34,559 and so as with last year i've adjusted 10 00:00:33,120 --> 00:00:36,880 the timing of lightning talks to my 11 00:00:34,559 --> 00:00:38,399 convenience and not yours thank you all 12 00:00:36,880 --> 00:00:39,920 for joining uh this is going to be 13 00:00:38,399 --> 00:00:41,840 really exciting 14 00:00:39,920 --> 00:00:45,280 today we've got a couple of people 15 00:00:41,840 --> 00:00:47,440 joining me on stage uh libby hello i'm 16 00:00:45,280 --> 00:00:49,840 libby i am trapped in an apartment in 17 00:00:47,440 --> 00:00:51,760 the nunawal country aka the ict in 18 00:00:49,840 --> 00:00:54,239 canberra it is nice to join you and for 19 00:00:51,760 --> 00:00:55,840 a split second you saw my cat bobo uh 20 00:00:54,239 --> 00:00:57,520 prepare for ultimate chaos he will 21 00:00:55,840 --> 00:00:58,800 probably make appearances every now and 22 00:00:57,520 --> 00:01:01,440 then 23 00:00:58,800 --> 00:01:05,199 uh and also joining is our friend 24 00:01:01,440 --> 00:01:05,199 patrick the distant bodied clock 25 00:01:05,840 --> 00:01:10,640 hi patrick thank you thank you 26 00:01:07,680 --> 00:01:10,640 clock the distance 27 00:01:10,720 --> 00:01:17,119 okay uh so as is usually the case we 28 00:01:13,760 --> 00:01:19,840 have a bunch of uh speakers giving 29 00:01:17,119 --> 00:01:21,600 five-minute talks on various topics 30 00:01:19,840 --> 00:01:23,920 which will hopefully be of interest to 31 00:01:21,600 --> 00:01:25,520 all of you uh 32 00:01:23,920 --> 00:01:27,280 we can't really do the finger applause 33 00:01:25,520 --> 00:01:30,000 thing that we do uh when we're all in 34 00:01:27,280 --> 00:01:32,479 person but i will use my trusty yeet 35 00:01:30,000 --> 00:01:34,159 button if people go over five minutes so 36 00:01:32,479 --> 00:01:36,240 uh please keep your talks to five 37 00:01:34,159 --> 00:01:38,240 minutes everybody who's presenting 38 00:01:36,240 --> 00:01:41,360 uh otherwise yeah we won't hear 39 00:01:38,240 --> 00:01:44,720 everything you have to say 40 00:01:41,360 --> 00:01:46,560 our first presenter is tyson klug who is 41 00:01:44,720 --> 00:01:49,920 going to be talking about putting python 42 00:01:46,560 --> 00:01:49,920 in all of the files 43 00:01:50,560 --> 00:01:56,880 hi pycon um in true lightning talk 44 00:01:54,240 --> 00:01:58,560 spirit my tool broke two minutes ago and 45 00:01:56,880 --> 00:02:03,439 i fixed it again so 46 00:01:58,560 --> 00:02:04,719 paid um or yeet all the files this is a 47 00:02:03,439 --> 00:02:06,399 personal project that i started 48 00:02:04,719 --> 00:02:10,560 yesterday lots of fun 49 00:02:06,399 --> 00:02:13,040 um 20 years earlier well we used to use 50 00:02:10,560 --> 00:02:15,200 php and we used to be able to just 51 00:02:13,040 --> 00:02:17,760 insert little bits of code inside a 52 00:02:15,200 --> 00:02:19,680 bigger document it's a really cool trick 53 00:02:17,760 --> 00:02:22,080 because it means that you can just write 54 00:02:19,680 --> 00:02:25,120 for example html or postscript or 55 00:02:22,080 --> 00:02:28,480 whatever you want and then just put code 56 00:02:25,120 --> 00:02:30,480 where you need it which is awesome um 57 00:02:28,480 --> 00:02:32,239 python doesn't really support this i 58 00:02:30,480 --> 00:02:34,319 mean maybe a good thing maybe a bad 59 00:02:32,239 --> 00:02:37,920 thing but in my case i wanted to because 60 00:02:34,319 --> 00:02:39,599 i just wanted to stick in a date into a 61 00:02:37,920 --> 00:02:40,959 postscript file but postscript doesn't 62 00:02:39,599 --> 00:02:41,920 support that 63 00:02:40,959 --> 00:02:44,959 so 64 00:02:41,920 --> 00:02:47,680 yeah php was an option but 65 00:02:44,959 --> 00:02:49,040 i don't want to use php and i certainly 66 00:02:47,680 --> 00:02:50,480 don't want to be writing lots and lots 67 00:02:49,040 --> 00:02:53,440 of python if it's just inserting the 68 00:02:50,480 --> 00:02:56,720 date so uh yeah like i could write lots 69 00:02:53,440 --> 00:02:58,800 of code to do report labing to um inject 70 00:02:56,720 --> 00:03:02,159 a date into my postscript output and a 71 00:02:58,800 --> 00:03:03,120 pdf um or i could just fix this little 72 00:03:02,159 --> 00:03:06,159 thing 73 00:03:03,120 --> 00:03:07,840 so need more curly boy let's see what 74 00:03:06,159 --> 00:03:11,680 can we do 75 00:03:07,840 --> 00:03:13,120 the program um all we need to do is use 76 00:03:11,680 --> 00:03:17,040 paint 77 00:03:13,120 --> 00:03:21,280 uh let's see so it just takes a 78 00:03:17,040 --> 00:03:25,440 file and it turns all of your 79 00:03:21,280 --> 00:03:28,239 source content into compiled python 80 00:03:25,440 --> 00:03:31,360 uh what sort of compiled python well 81 00:03:28,239 --> 00:03:33,200 it starts in like um just like python 82 00:03:31,360 --> 00:03:36,480 it creates this module where it just 83 00:03:33,200 --> 00:03:38,640 prints everything out so nice and simple 84 00:03:36,480 --> 00:03:41,680 um but you then you can put a curly boy 85 00:03:38,640 --> 00:03:43,280 in there woohoo more curly boy uh and 86 00:03:41,680 --> 00:03:46,400 here we go we've got a curly brace and 87 00:03:43,280 --> 00:03:48,400 two snakes that gets us into just plain 88 00:03:46,400 --> 00:03:52,000 python mode spit it out exactly as you 89 00:03:48,400 --> 00:03:54,640 saw it um there's also support for echo 90 00:03:52,000 --> 00:03:57,360 mode which just prints whatever you want 91 00:03:54,640 --> 00:04:00,400 so we can see here that i said oh yeah 92 00:03:57,360 --> 00:04:03,519 assign hello world to some text and then 93 00:04:00,400 --> 00:04:05,280 i told it to use echo mode to output the 94 00:04:03,519 --> 00:04:07,120 text nice and easy 95 00:04:05,280 --> 00:04:09,920 well that means you can do some cool 96 00:04:07,120 --> 00:04:11,760 stuff so you can just use valid python 97 00:04:09,920 --> 00:04:15,200 anywhere in your file 98 00:04:11,760 --> 00:04:17,120 well what is this useful for yeah i was 99 00:04:15,200 --> 00:04:20,479 trying to scratch an itch as i said i 100 00:04:17,120 --> 00:04:22,400 was trying to write some um postscript 101 00:04:20,479 --> 00:04:24,720 yeah i know postscript 102 00:04:22,400 --> 00:04:27,759 so here it was it's basically trying to 103 00:04:24,720 --> 00:04:30,720 put like a watermark onto a file and i 104 00:04:27,759 --> 00:04:31,520 needed to have the date on there 105 00:04:30,720 --> 00:04:34,800 so 106 00:04:31,520 --> 00:04:37,600 here we are i'm using uh let's see so 107 00:04:34,800 --> 00:04:41,120 i'm from date time import date time 108 00:04:37,600 --> 00:04:43,759 and then um that's imported 109 00:04:41,120 --> 00:04:46,560 and now all i have to do is say 110 00:04:43,759 --> 00:04:48,639 use echo mode and put the date in so 111 00:04:46,560 --> 00:04:50,160 let's see does this do what i want it to 112 00:04:48,639 --> 00:04:52,479 do 113 00:04:50,160 --> 00:04:52,479 okay 114 00:04:54,400 --> 00:05:00,720 i run it 115 00:04:56,639 --> 00:05:04,160 hey date time is not defined 116 00:05:00,720 --> 00:05:07,280 anyway uh yes it did actually run um 117 00:05:04,160 --> 00:05:09,120 but broken as always uh so other cool 118 00:05:07,280 --> 00:05:10,320 things let's actually dive into the code 119 00:05:09,120 --> 00:05:11,840 a little bit we've only got a minute and 120 00:05:10,320 --> 00:05:13,919 a half left 121 00:05:11,840 --> 00:05:16,240 what have we got so it's a little state 122 00:05:13,919 --> 00:05:17,919 machine it is actually an encoder uh 123 00:05:16,240 --> 00:05:21,680 sorry a decoder so you can use it to 124 00:05:17,919 --> 00:05:23,360 decode bytes and it decodes bytes into 125 00:05:21,680 --> 00:05:25,520 python 126 00:05:23,360 --> 00:05:29,600 it registers its codec 127 00:05:25,520 --> 00:05:31,759 it does some cool stuff it has a 128 00:05:29,600 --> 00:05:32,639 loader to do um 129 00:05:31,759 --> 00:05:35,520 to 130 00:05:32,639 --> 00:05:38,400 bring it into python land um 131 00:05:35,520 --> 00:05:40,800 it has asynchronous io so it actually 132 00:05:38,400 --> 00:05:42,960 runs in an async i o loop meaning that 133 00:05:40,800 --> 00:05:44,639 in future maybe this could be an async i 134 00:05:42,960 --> 00:05:46,880 o web service like thing and i should 135 00:05:44,639 --> 00:05:47,919 include it into asgi 136 00:05:46,880 --> 00:05:50,800 um 137 00:05:47,919 --> 00:05:52,639 it has some very simple options so all 138 00:05:50,800 --> 00:05:55,840 it does is 139 00:05:52,639 --> 00:05:55,840 loads up um 140 00:05:56,080 --> 00:06:01,520 python module we've got a minute left 141 00:05:58,720 --> 00:06:04,639 great um and it runs things so 142 00:06:01,520 --> 00:06:06,960 uh yeah lots of fun um 143 00:06:04,639 --> 00:06:09,199 lets you do things that you otherwise 144 00:06:06,960 --> 00:06:10,960 couldn't do and be more 145 00:06:09,199 --> 00:06:13,360 uh immediate in the way that you do 146 00:06:10,960 --> 00:06:16,080 stuff uh is there anything else in my 147 00:06:13,360 --> 00:06:18,160 slide deck yes i think there is 148 00:06:16,080 --> 00:06:21,280 only all the things well 149 00:06:18,160 --> 00:06:22,880 in theory you can actually go and put a 150 00:06:21,280 --> 00:06:26,880 new python file 151 00:06:22,880 --> 00:06:29,600 and say that the encoding is um 152 00:06:26,880 --> 00:06:30,479 let's see so you file 153 00:06:29,600 --> 00:06:32,560 well 154 00:06:30,479 --> 00:06:35,440 you know that you can do a codex at the 155 00:06:32,560 --> 00:06:37,919 top like this 156 00:06:35,440 --> 00:06:37,919 coding 157 00:06:38,080 --> 00:06:42,000 eat which means in theory you could 158 00:06:40,160 --> 00:06:44,080 actually put 159 00:06:42,000 --> 00:06:46,319 python code to generate python code 160 00:06:44,080 --> 00:06:48,880 within your python code 161 00:06:46,319 --> 00:06:51,120 have fun with that idea hit me up in the 162 00:06:48,880 --> 00:06:54,479 chat and uh i'll publish this on github 163 00:06:51,120 --> 00:06:56,639 and give you all some links bye 164 00:06:54,479 --> 00:06:58,960 thank you tyson for putting pythons in 165 00:06:56,639 --> 00:07:03,440 our pythons in our pythons 166 00:06:58,960 --> 00:07:05,919 uh up next we have daniel who is going 167 00:07:03,440 --> 00:07:10,240 to be talking to us about racing network 168 00:07:05,919 --> 00:07:10,240 x and tackling code complexity 169 00:07:11,120 --> 00:07:15,360 hello everyone um firstly i acknowledge 170 00:07:13,759 --> 00:07:16,880 the nanga wall people traditional 171 00:07:15,360 --> 00:07:18,960 custodians of the land of which i'm 172 00:07:16,880 --> 00:07:20,720 presenting and pay my respects to their 173 00:07:18,960 --> 00:07:22,080 elders past and present i extend that 174 00:07:20,720 --> 00:07:24,000 respect to aboriginal and torres strait 175 00:07:22,080 --> 00:07:25,440 islander people here today 176 00:07:24,000 --> 00:07:27,360 in this lightning talk i'm going to be 177 00:07:25,440 --> 00:07:30,000 speeding through a journey i took trying 178 00:07:27,360 --> 00:07:31,520 to optimize algorithms in network x i'm 179 00:07:30,000 --> 00:07:32,639 starting here in my jupyter notebook so 180 00:07:31,520 --> 00:07:35,680 that i can run 181 00:07:32,639 --> 00:07:37,280 this cell here 182 00:07:35,680 --> 00:07:38,560 and 183 00:07:37,280 --> 00:07:41,800 we'll come back to that later and see 184 00:07:38,560 --> 00:07:41,800 how it's doing 185 00:07:44,720 --> 00:07:48,720 first of all um so my talk is racing 186 00:07:47,440 --> 00:07:51,280 network x 187 00:07:48,720 --> 00:07:53,120 um so first of all what is networkx it's 188 00:07:51,280 --> 00:07:55,199 the gateway library to graph analysis in 189 00:07:53,120 --> 00:07:56,720 python but it doesn't do everything time 190 00:07:55,199 --> 00:07:58,960 and space limitations make it not very 191 00:07:56,720 --> 00:08:00,400 useful sometimes when playing with large 192 00:07:58,960 --> 00:08:02,400 data sets i still want to be able to 193 00:08:00,400 --> 00:08:04,080 calculate graph metrics but network x 194 00:08:02,400 --> 00:08:06,080 takes too long runs out of memory or 195 00:08:04,080 --> 00:08:08,160 fails to work for other reasons as this 196 00:08:06,080 --> 00:08:10,160 happens i always ask myself or whether i 197 00:08:08,160 --> 00:08:11,919 can figure out how to do it 198 00:08:10,160 --> 00:08:13,199 let's consider a graph metric in this 199 00:08:11,919 --> 00:08:14,960 case we're going to look at something 200 00:08:13,199 --> 00:08:16,960 called eccentricity 201 00:08:14,960 --> 00:08:19,039 what is eccentricity the simplest 202 00:08:16,960 --> 00:08:20,639 explanation is the shortest distance to 203 00:08:19,039 --> 00:08:22,319 the furthest node 204 00:08:20,639 --> 00:08:24,400 for example if i wanted to calculate the 205 00:08:22,319 --> 00:08:26,080 eccentricity of the highlighted circled 206 00:08:24,400 --> 00:08:28,080 node in this picture we need to figure 207 00:08:26,080 --> 00:08:29,599 out how far away all the other nodes are 208 00:08:28,080 --> 00:08:31,280 let's do that by jumping out from that 209 00:08:29,599 --> 00:08:32,880 node until we've reached them all here 210 00:08:31,280 --> 00:08:34,399 we've already started having jumped out 211 00:08:32,880 --> 00:08:36,560 one hop 212 00:08:34,399 --> 00:08:39,360 now we've jumped out two hops 213 00:08:36,560 --> 00:08:41,039 and now three hops 214 00:08:39,360 --> 00:08:42,320 and finally after jumping out four hops 215 00:08:41,039 --> 00:08:44,159 we've reached every other node in the 216 00:08:42,320 --> 00:08:46,160 network so the circled node would have 217 00:08:44,159 --> 00:08:47,920 an eccentricity of four 218 00:08:46,160 --> 00:08:49,200 this is useful because nodes with low 219 00:08:47,920 --> 00:08:51,360 eccentricity will be positioned 220 00:08:49,200 --> 00:08:53,360 centrally on the network nodes that fall 221 00:08:51,360 --> 00:08:55,200 on the outskirts of the net of a network 222 00:08:53,360 --> 00:08:56,720 would have a much higher eccentricity 223 00:08:55,200 --> 00:08:58,160 because they needed to traverse the 224 00:08:56,720 --> 00:08:59,519 entire network in order to reach 225 00:08:58,160 --> 00:09:01,920 everyone 226 00:08:59,519 --> 00:09:04,080 by the way this method of hopping out 227 00:09:01,920 --> 00:09:05,839 being demonstrated is an example of brep 228 00:09:04,080 --> 00:09:07,360 first searching which is great to use if 229 00:09:05,839 --> 00:09:08,640 you don't have a specific destination in 230 00:09:07,360 --> 00:09:10,160 mind 231 00:09:08,640 --> 00:09:11,920 if we think about how most graph query 232 00:09:10,160 --> 00:09:13,360 languages work you typically need to 233 00:09:11,920 --> 00:09:15,120 start somewhere 234 00:09:13,360 --> 00:09:16,560 from somewhere in the network and nodes 235 00:09:15,120 --> 00:09:18,240 with low eccentricity are typically a 236 00:09:16,560 --> 00:09:19,519 good place to start they're more likely 237 00:09:18,240 --> 00:09:20,800 to be highly connected or have 238 00:09:19,519 --> 00:09:22,640 information passing through them as 239 00:09:20,800 --> 00:09:26,640 opposed to our highly eccentric mr burns 240 00:09:22,640 --> 00:09:28,000 node over in the uh edge 241 00:09:26,640 --> 00:09:30,160 so how does network x go with 242 00:09:28,000 --> 00:09:32,240 calculating eccentricity well for one 243 00:09:30,160 --> 00:09:34,000 thing network x's eccentricity algorithm 244 00:09:32,240 --> 00:09:35,519 doesn't work on digraphs or directed 245 00:09:34,000 --> 00:09:37,360 graphs you can convert it to an 246 00:09:35,519 --> 00:09:38,800 undirected graph but it's not a true 247 00:09:37,360 --> 00:09:40,480 reflection of how information is flowing 248 00:09:38,800 --> 00:09:42,480 in the network 249 00:09:40,480 --> 00:09:44,160 network x's eccentricity algorithm also 250 00:09:42,480 --> 00:09:46,000 doesn't work on disconnected graphs you 251 00:09:44,160 --> 00:09:48,000 can cycle through connected components 252 00:09:46,000 --> 00:09:49,680 but as a personal pet peeve network x 253 00:09:48,000 --> 00:09:52,240 moves this package around every single 254 00:09:49,680 --> 00:09:54,640 time it updates 255 00:09:52,240 --> 00:09:56,480 i'm even accounting for these issues if 256 00:09:54,640 --> 00:09:58,800 the data set is too big network x will 257 00:09:56,480 --> 00:10:00,880 just run out of memory or take too long 258 00:09:58,800 --> 00:10:02,240 unfortunately i'm as stubborn as a mule 259 00:10:00,880 --> 00:10:05,040 approximations weren't going to cut it 260 00:10:02,240 --> 00:10:06,240 either i want to calculate uh the real 261 00:10:05,040 --> 00:10:07,920 thing 262 00:10:06,240 --> 00:10:09,360 the stanford network a large network 263 00:10:07,920 --> 00:10:10,399 data set collection is a great place to 264 00:10:09,360 --> 00:10:12,240 pull some large networks for 265 00:10:10,399 --> 00:10:14,160 benchmarking so i downloaded a nice big 266 00:10:12,240 --> 00:10:15,440 graph and began experimenting 267 00:10:14,160 --> 00:10:16,880 i wrote some code to mimic how 268 00:10:15,440 --> 00:10:18,880 information was propagating through the 269 00:10:16,880 --> 00:10:20,720 network in a parallel breadth first 270 00:10:18,880 --> 00:10:22,320 search style you'll notice here that i'm 271 00:10:20,720 --> 00:10:24,480 working with the numeric representation 272 00:10:22,320 --> 00:10:26,399 of the graph the adjacency matrix the 273 00:10:24,480 --> 00:10:28,160 rows and columns of the adjacency matrix 274 00:10:26,399 --> 00:10:29,839 reflect each node and typically the 275 00:10:28,160 --> 00:10:31,360 values of the matrix we won if there's a 276 00:10:29,839 --> 00:10:33,519 direct connection between the row node 277 00:10:31,360 --> 00:10:35,440 and column node or zero if there isn't 278 00:10:33,519 --> 00:10:38,160 sometimes this uh value will represent 279 00:10:35,440 --> 00:10:40,000 the weight of the connection 280 00:10:38,160 --> 00:10:42,160 the ipython magic function time it is 281 00:10:40,000 --> 00:10:43,920 great for overall benchmarking but p run 282 00:10:42,160 --> 00:10:46,320 was invaluable for finding where in the 283 00:10:43,920 --> 00:10:48,480 where the in the code my the bottlenecks 284 00:10:46,320 --> 00:10:49,839 were p run shows you the number of times 285 00:10:48,480 --> 00:10:52,480 functions are called and the times taken 286 00:10:49,839 --> 00:10:54,640 per call and overall um how long things 287 00:10:52,480 --> 00:10:56,399 take which is super handy 288 00:10:54,640 --> 00:10:58,480 other useful tricks include either tools 289 00:10:56,399 --> 00:11:00,399 and more edit tools i found that if i'm 290 00:10:58,480 --> 00:11:01,839 ever looping through anything i have a 291 00:11:00,399 --> 00:11:03,519 look at those libraries and see if what 292 00:11:01,839 --> 00:11:04,959 i'm trying to do is there 293 00:11:03,519 --> 00:11:06,720 another useful thing i learned was a 294 00:11:04,959 --> 00:11:09,120 stitch between c contiguous arrays and 295 00:11:06,720 --> 00:11:11,360 fortran contiguous arrays in numpy 296 00:11:09,120 --> 00:11:14,880 order c is better for row operations and 297 00:11:11,360 --> 00:11:16,720 order f is better for column operations 298 00:11:14,880 --> 00:11:18,720 eventually my approach was faster but 299 00:11:16,720 --> 00:11:20,800 still limited by the space complexity of 300 00:11:18,720 --> 00:11:22,720 the big snap graphs 301 00:11:20,800 --> 00:11:24,320 so i got rid of the dense matrix numpy 302 00:11:22,720 --> 00:11:26,160 stuff because that was taking far too 303 00:11:24,320 --> 00:11:28,480 much memory and started working 304 00:11:26,160 --> 00:11:30,240 exclusively with sci-fi sparse matrices 305 00:11:28,480 --> 00:11:31,760 that helped but the biggest bottleneck 306 00:11:30,240 --> 00:11:34,000 was the matrix dot product 307 00:11:31,760 --> 00:11:36,000 multiplication which is always 308 00:11:34,000 --> 00:11:37,440 computationally very expensive 309 00:11:36,000 --> 00:11:39,200 ultimately i had to do with matrix 310 00:11:37,440 --> 00:11:41,600 algebra altogether and tried replicating 311 00:11:39,200 --> 00:11:43,200 it using binary set operations initially 312 00:11:41,600 --> 00:11:44,959 i used python sets but they still 313 00:11:43,200 --> 00:11:46,160 suffered from space limitations because 314 00:11:44,959 --> 00:11:48,000 you need to store an additional hash 315 00:11:46,160 --> 00:11:50,320 table for lookups the work around there 316 00:11:48,000 --> 00:11:52,320 was to use bit arrows bit arrays are a 317 00:11:50,320 --> 00:11:53,680 very space efficient boolean collection 318 00:11:52,320 --> 00:11:55,200 that could easily represent the graph 319 00:11:53,680 --> 00:11:57,120 adjacency matrix 320 00:11:55,200 --> 00:11:58,880 this created some additional overhead in 321 00:11:57,120 --> 00:12:00,800 the conversion but once that was done my 322 00:11:58,880 --> 00:12:02,320 approach could not only run on the large 323 00:12:00,800 --> 00:12:03,920 snap data set but was faster than other 324 00:12:02,320 --> 00:12:05,600 optimized graph algorithm libraries as 325 00:12:03,920 --> 00:12:07,680 well 326 00:12:05,600 --> 00:12:09,440 go back to here is it finished running 327 00:12:07,680 --> 00:12:11,040 no it hasn't it usually takes 328 00:12:09,440 --> 00:12:14,880 under five minutes but 329 00:12:11,040 --> 00:12:14,880 i'm doing streaming stuff as well thanks 330 00:12:15,519 --> 00:12:17,760 thanks daniel 331 00:12:16,959 --> 00:12:21,839 uh 332 00:12:17,760 --> 00:12:23,360 up next we have jeff who is going to be 333 00:12:21,839 --> 00:12:24,720 taking us 334 00:12:23,360 --> 00:12:27,120 well through something slightly more 335 00:12:24,720 --> 00:12:29,200 relaxing than networks 336 00:12:27,120 --> 00:12:30,639 go ahead jeff thanks so much christopher 337 00:12:29,200 --> 00:12:33,040 uh yeah it is something completely 338 00:12:30,639 --> 00:12:35,040 different uh i want to thank everybody 339 00:12:33,040 --> 00:12:36,480 very quickly for a fantastic conference 340 00:12:35,040 --> 00:12:38,800 but i would also like to invite 341 00:12:36,480 --> 00:12:42,240 everybody for a moment of high 342 00:12:38,800 --> 00:12:44,639 contemplation and apologies for the pun 343 00:12:42,240 --> 00:12:45,920 and uh really what i want to do today in 344 00:12:44,639 --> 00:12:47,279 five minutes is i just want to share 345 00:12:45,920 --> 00:12:49,440 something that's helping me through 346 00:12:47,279 --> 00:12:51,200 these really unusual times that we've 347 00:12:49,440 --> 00:12:54,480 all been sharing 348 00:12:51,200 --> 00:12:56,320 and i will illustrate this through a 349 00:12:54,480 --> 00:12:58,639 really really terrible watercolor and a 350 00:12:56,320 --> 00:13:01,200 story uh so apologies in advance for the 351 00:12:58,639 --> 00:13:02,800 terrible watercolor uh but yeah this 352 00:13:01,200 --> 00:13:05,360 this little fella here we're gonna call 353 00:13:02,800 --> 00:13:08,880 them uh susan the schneck 354 00:13:05,360 --> 00:13:10,880 and uh susan the schneck uh circa 2019 355 00:13:08,880 --> 00:13:12,639 was having a pretty happy life i was 356 00:13:10,880 --> 00:13:14,160 meeting all sorts of other schnecks 357 00:13:12,639 --> 00:13:17,600 potentially in person at conferences 358 00:13:14,160 --> 00:13:18,800 like this uh and then things changed uh 359 00:13:17,600 --> 00:13:22,000 i'm going to draw your attention to the 360 00:13:18,800 --> 00:13:24,560 left to this uh well called the y axis 361 00:13:22,000 --> 00:13:26,480 uh you know vibes were pretty good uh 362 00:13:24,560 --> 00:13:30,079 maybe bushfire is not withstanding vibes 363 00:13:26,480 --> 00:13:32,240 are okay in 2019 and uh we can 364 00:13:30,079 --> 00:13:35,839 potentially argue that vibes are 365 00:13:32,240 --> 00:13:38,320 pretty awful in uh uh 366 00:13:35,839 --> 00:13:40,079 now so so essentially like susan got 367 00:13:38,320 --> 00:13:42,399 thrown into a little box 368 00:13:40,079 --> 00:13:43,519 and over time susan got so caught up 369 00:13:42,399 --> 00:13:45,600 with all the things that susan couldn't 370 00:13:43,519 --> 00:13:48,160 do uh that susan sort of tied herself 371 00:13:45,600 --> 00:13:50,639 into a knot and you could say that this 372 00:13:48,160 --> 00:13:52,399 little axis here the the yellow axis 373 00:13:50,639 --> 00:13:54,560 which is like happiness you can say that 374 00:13:52,399 --> 00:13:56,000 susan probably was a bit miserable at 375 00:13:54,560 --> 00:13:57,519 that point 376 00:13:56,000 --> 00:13:59,600 uh so the method that i'm going to show 377 00:13:57,519 --> 00:14:01,199 you today is just it's a bit to sort of 378 00:13:59,600 --> 00:14:03,760 be aware that you know maybe you're 379 00:14:01,199 --> 00:14:05,440 tying yourself into knots like susan and 380 00:14:03,760 --> 00:14:07,839 even if your external vibes your 381 00:14:05,440 --> 00:14:09,760 external factors don't change uh if you 382 00:14:07,839 --> 00:14:12,480 practice it fairly diligently you might 383 00:14:09,760 --> 00:14:14,240 find yourself getting a lot happier 384 00:14:12,480 --> 00:14:15,920 so let's go away from watercolors and 385 00:14:14,240 --> 00:14:17,199 actually get into the exercise so for 386 00:14:15,920 --> 00:14:20,720 the next two minutes we're going to 387 00:14:17,199 --> 00:14:22,399 close our eyes and focus on our breath 388 00:14:20,720 --> 00:14:24,639 we're not going to try to control our 389 00:14:22,399 --> 00:14:26,079 breath we're just going to remain aware 390 00:14:24,639 --> 00:14:27,760 of our breath 391 00:14:26,079 --> 00:14:30,240 and that means we're going to know when 392 00:14:27,760 --> 00:14:31,920 it comes in and out we might know 393 00:14:30,240 --> 00:14:34,079 whether it's hard or whether it's soft 394 00:14:31,920 --> 00:14:35,279 whether it's fast or whether it's slow 395 00:14:34,079 --> 00:14:36,959 whether it's coming through our nose 396 00:14:35,279 --> 00:14:38,480 whether it's coming through our mouth 397 00:14:36,959 --> 00:14:40,079 really doesn't matter if it's any of 398 00:14:38,480 --> 00:14:41,839 these things it just matters that we're 399 00:14:40,079 --> 00:14:43,279 aware of it 400 00:14:41,839 --> 00:14:45,279 and sometimes placing a hand on your 401 00:14:43,279 --> 00:14:46,399 stomach so you can feel the rise or fall 402 00:14:45,279 --> 00:14:48,880 that helps 403 00:14:46,399 --> 00:14:50,160 or even just trying to focus on 404 00:14:48,880 --> 00:14:52,000 the area around your nostril that can 405 00:14:50,160 --> 00:14:53,760 sometimes also help as well 406 00:14:52,000 --> 00:14:57,120 and even though two minutes is a short 407 00:14:53,760 --> 00:14:59,040 time i guarantee 99 of us including me 408 00:14:57,120 --> 00:15:01,680 will get distracted 409 00:14:59,040 --> 00:15:03,360 so those are the instructions i wish you 410 00:15:01,680 --> 00:15:05,920 the best of success 411 00:15:03,360 --> 00:15:08,160 and yes it doesn't matter if the mind 412 00:15:05,920 --> 00:15:09,760 will wonder this is natural and expected 413 00:15:08,160 --> 00:15:12,800 what matters is that you bring it back 414 00:15:09,760 --> 00:15:14,079 gently without self-reproach 415 00:15:12,800 --> 00:15:15,920 so we're going to do these two minutes 416 00:15:14,079 --> 00:15:17,440 now uh if you want to go and have a look 417 00:15:15,920 --> 00:15:19,680 at the slides later 418 00:15:17,440 --> 00:15:22,880 they've got references right at the end 419 00:15:19,680 --> 00:15:22,880 let's give it a go right now 420 00:15:25,279 --> 00:15:30,120 so two minutes starting now 421 00:16:29,120 --> 00:16:32,440 one minute 422 00:17:26,050 --> 00:17:30,080 [Music] 423 00:17:27,360 --> 00:17:31,120 way to ruin the vibes there with the one 424 00:17:30,080 --> 00:17:33,600 minute 425 00:17:31,120 --> 00:17:36,640 i mean i appreciate that it was a little 426 00:17:33,600 --> 00:17:38,880 bit toned down but i was i was so 427 00:17:36,640 --> 00:17:41,520 relaxed i was so trying to match the 428 00:17:38,880 --> 00:17:44,720 energy in the room 429 00:17:41,520 --> 00:17:47,120 i promise one minute 430 00:17:44,720 --> 00:17:50,799 righto okay next we have 431 00:17:47,120 --> 00:17:54,000 tim who is doing some things with the 432 00:17:50,799 --> 00:17:54,000 pycon au logo 433 00:17:58,160 --> 00:18:03,760 all right so um this is sort of 434 00:18:00,480 --> 00:18:05,919 something that started uh at last pycon 435 00:18:03,760 --> 00:18:07,840 and i uh put up a sort of a 436 00:18:05,919 --> 00:18:09,600 image of this um onto twitter a short 437 00:18:07,840 --> 00:18:11,120 video um and a lot of people have been 438 00:18:09,600 --> 00:18:12,720 asking about it which is sitting over 439 00:18:11,120 --> 00:18:14,000 here in the background 440 00:18:12,720 --> 00:18:16,400 um so there's a bit of elements of 441 00:18:14,000 --> 00:18:18,559 hardware software and woodwork involved 442 00:18:16,400 --> 00:18:20,400 in this little project um so like i said 443 00:18:18,559 --> 00:18:23,280 i started this at last pycon and i 444 00:18:20,400 --> 00:18:25,840 managed to get this far 445 00:18:23,280 --> 00:18:26,960 um it's been sitting on my desk uh sort 446 00:18:25,840 --> 00:18:29,280 of 447 00:18:26,960 --> 00:18:30,960 annoying me ever since and a couple of 448 00:18:29,280 --> 00:18:33,200 weeks ago i sort of looked at this and 449 00:18:30,960 --> 00:18:34,720 thought it's about time i actually 450 00:18:33,200 --> 00:18:36,240 got on to and actually made this into 451 00:18:34,720 --> 00:18:38,080 something for real 452 00:18:36,240 --> 00:18:40,720 so first step is a little bit of 453 00:18:38,080 --> 00:18:40,720 prototyping 454 00:18:41,120 --> 00:18:45,919 i caught my first test that the uh snit 455 00:18:43,600 --> 00:18:48,160 egg uh this is sort of where i tried out 456 00:18:45,919 --> 00:18:50,000 the concept um it's a 457 00:18:48,160 --> 00:18:53,039 potentially drill a hole fill it with 458 00:18:50,000 --> 00:18:55,440 hot glue and and put a led inside and 459 00:18:53,039 --> 00:18:56,480 you get this sort of nice output here 460 00:18:55,440 --> 00:18:58,400 um 461 00:18:56,480 --> 00:19:00,320 this is my second sort of test where we 462 00:18:58,400 --> 00:19:01,840 actually made it into a full uh what i 463 00:19:00,320 --> 00:19:02,880 call a baby snack 464 00:19:01,840 --> 00:19:04,320 and 465 00:19:02,880 --> 00:19:05,520 it started to see you could see the 466 00:19:04,320 --> 00:19:07,280 colors sort of starting to blend and it 467 00:19:05,520 --> 00:19:10,400 looks kind of kind of cool 468 00:19:07,280 --> 00:19:13,360 so moving on to the final build first 469 00:19:10,400 --> 00:19:14,880 stage was uh drilling out or laying out 470 00:19:13,360 --> 00:19:17,440 you can see my sort of marks there where 471 00:19:14,880 --> 00:19:18,559 i've laid it out uh drilling in all the 472 00:19:17,440 --> 00:19:19,919 positioning 473 00:19:18,559 --> 00:19:21,520 and then putting this through onto a 474 00:19:19,919 --> 00:19:23,039 router table to route out the rest of 475 00:19:21,520 --> 00:19:25,200 the 476 00:19:23,039 --> 00:19:27,360 rest of the shape uh putting in the leds 477 00:19:25,200 --> 00:19:29,120 and hot glue uh this is where i ran to 478 00:19:27,360 --> 00:19:33,360 my first problem uh i ran out of hot 479 00:19:29,120 --> 00:19:34,559 glue which is not a useful thing uh 480 00:19:33,360 --> 00:19:37,360 it's sort of a bit of a rush there to 481 00:19:34,559 --> 00:19:39,039 try and get another lot of it in uh 482 00:19:37,360 --> 00:19:40,880 in the middle of a lockdown but i 483 00:19:39,039 --> 00:19:42,320 managed to do that but it does have some 484 00:19:40,880 --> 00:19:44,400 side effects and that you get bubbles 485 00:19:42,320 --> 00:19:47,280 and that starting to come through 486 00:19:44,400 --> 00:19:48,960 from that we move on to wiring 487 00:19:47,280 --> 00:19:50,640 more wiring 488 00:19:48,960 --> 00:19:53,360 crimping 489 00:19:50,640 --> 00:19:54,960 before we get to our first test 490 00:19:53,360 --> 00:19:56,799 and uh we start to see it sort of how 491 00:19:54,960 --> 00:19:58,720 it's going to actually look uh there's a 492 00:19:56,799 --> 00:20:00,240 few sort of uh other points that start 493 00:19:58,720 --> 00:20:01,919 to come out here those the green and red 494 00:20:00,240 --> 00:20:03,760 is very bright um and we're gonna have 495 00:20:01,919 --> 00:20:06,400 to tone those down and we'll comment 496 00:20:03,760 --> 00:20:09,280 exactly how that works next so the 497 00:20:06,400 --> 00:20:11,760 actual hardware the hardware um 498 00:20:09,280 --> 00:20:13,200 yeah there's a lot of wiring and uh as 499 00:20:11,760 --> 00:20:15,840 you expect for these kind of things 500 00:20:13,200 --> 00:20:18,960 where we control every led 501 00:20:15,840 --> 00:20:21,120 most of the control was all done with a 502 00:20:18,960 --> 00:20:22,480 bunch of shift registers 503 00:20:21,120 --> 00:20:24,640 these ones are particularly nice they 504 00:20:22,480 --> 00:20:28,159 can sync 150 milliamps which is perfect 505 00:20:24,640 --> 00:20:30,320 for running leds uh they work by having 506 00:20:28,159 --> 00:20:31,280 three wires coming into them a data a 507 00:20:30,320 --> 00:20:32,720 clock 508 00:20:31,280 --> 00:20:35,039 and a latch wire 509 00:20:32,720 --> 00:20:37,919 you set a value on the data polls the 510 00:20:35,039 --> 00:20:40,640 clock and it will uh shift the the value 511 00:20:37,919 --> 00:20:42,000 in do that repetitively and you'll get 512 00:20:40,640 --> 00:20:44,880 all of your data in 513 00:20:42,000 --> 00:20:46,640 and finally pulse the latch it switches 514 00:20:44,880 --> 00:20:48,320 on to the outputs and you just you know 515 00:20:46,640 --> 00:20:49,919 when you what you want to see comes up 516 00:20:48,320 --> 00:20:52,240 on the display 517 00:20:49,919 --> 00:20:53,919 uh at the moment it's running with a 518 00:20:52,240 --> 00:20:55,440 raspberry pi pico which is sort of 519 00:20:53,919 --> 00:20:58,480 probably my favorite controller at this 520 00:20:55,440 --> 00:20:58,480 particular point in time 521 00:20:58,559 --> 00:21:02,159 how we get into the actual 522 00:21:00,400 --> 00:21:03,280 brightness i was using a technique 523 00:21:02,159 --> 00:21:05,200 called bam 524 00:21:03,280 --> 00:21:08,159 the angle modulation it's a sort of an 525 00:21:05,200 --> 00:21:10,880 alternate to pwm that can be implemented 526 00:21:08,159 --> 00:21:12,640 efficiently in software 527 00:21:10,880 --> 00:21:14,799 in this particular 528 00:21:12,640 --> 00:21:16,000 picture i have the this of the green 529 00:21:14,799 --> 00:21:18,159 which is what the waveforms will look 530 00:21:16,000 --> 00:21:21,760 like from bam and below that is what a 531 00:21:18,159 --> 00:21:22,640 traditional pwm waveform would look like 532 00:21:21,760 --> 00:21:25,120 the 533 00:21:22,640 --> 00:21:26,559 ratio between the on and off states 534 00:21:25,120 --> 00:21:29,200 and runs at a high enough frequency and 535 00:21:26,559 --> 00:21:32,159 you can control brightness 536 00:21:29,200 --> 00:21:34,159 um so micro python turned out really 537 00:21:32,159 --> 00:21:36,720 really good in this particular scenario 538 00:21:34,159 --> 00:21:40,320 here uh the uh 539 00:21:36,720 --> 00:21:42,159 this threading model on on the micro uh 540 00:21:40,320 --> 00:21:43,760 on the pico sorry it was great in that 541 00:21:42,159 --> 00:21:45,200 it would actually use both 542 00:21:43,760 --> 00:21:46,400 cores which mean you can run the 543 00:21:45,200 --> 00:21:48,720 animations 544 00:21:46,400 --> 00:21:49,919 and output on separate uh threads in 545 00:21:48,720 --> 00:21:51,679 parallel 546 00:21:49,919 --> 00:21:54,159 although i did run into some limits here 547 00:21:51,679 --> 00:21:55,120 uh the speed of the of the of micro 548 00:21:54,159 --> 00:21:56,480 python 549 00:21:55,120 --> 00:22:00,080 it just isn't quite up to it so i could 550 00:21:56,480 --> 00:22:02,320 only go run it minutes using 4-bit bam 551 00:22:00,080 --> 00:22:05,679 um meaning you only got 16 levels of 552 00:22:02,320 --> 00:22:08,799 brightness but that's more than enough 553 00:22:05,679 --> 00:22:10,840 so the final result 554 00:22:08,799 --> 00:22:14,159 is this and hopefully it'll 555 00:22:10,840 --> 00:22:15,840 run um which is a bit of an up close uh 556 00:22:14,159 --> 00:22:17,039 someone a nicer effect that came out of 557 00:22:15,840 --> 00:22:19,200 this is that you can kind of see that 558 00:22:17,039 --> 00:22:21,120 the colors blending as it comes out 559 00:22:19,200 --> 00:22:22,799 which uh which was actually quite a nice 560 00:22:21,120 --> 00:22:25,760 sort of side effect of running it 561 00:22:22,799 --> 00:22:29,039 through this glue which was 562 00:22:25,760 --> 00:22:29,039 causing it to diffuse nicely 563 00:22:29,360 --> 00:22:32,000 um 564 00:22:30,240 --> 00:22:34,480 so 565 00:22:32,000 --> 00:22:36,320 what's next um i wouldn't mind porting 566 00:22:34,480 --> 00:22:37,840 this to a different language just to get 567 00:22:36,320 --> 00:22:41,120 a bit more speed out of it probably 568 00:22:37,840 --> 00:22:43,200 laser cut we can reuse the controller 569 00:22:41,120 --> 00:22:44,799 don't run out of glue would be a handy 570 00:22:43,200 --> 00:22:45,600 anything to do here 571 00:22:44,799 --> 00:22:47,600 um 572 00:22:45,600 --> 00:22:49,679 slide some code if you want to read more 573 00:22:47,600 --> 00:22:52,159 about what bam is 574 00:22:49,679 --> 00:22:53,600 there i'd have to also quickly shout out 575 00:22:52,159 --> 00:22:55,840 to jim massad who jumped in from 576 00:22:53,600 --> 00:22:57,679 micropython to help me we'll actually 577 00:22:55,840 --> 00:22:58,880 just listen to me solve my own problems 578 00:22:57,679 --> 00:23:01,679 thank you 579 00:22:58,880 --> 00:23:04,480 oh thank you for that tim it is cool to 580 00:23:01,679 --> 00:23:06,320 see people doing such pretty things with 581 00:23:04,480 --> 00:23:07,520 uh with the mascot of this year 582 00:23:06,320 --> 00:23:11,679 conference 583 00:23:07,520 --> 00:23:14,240 uh up next we have matt sendia 584 00:23:11,679 --> 00:23:16,000 uh who is going to be talking about 585 00:23:14,240 --> 00:23:17,520 what it says on your screen making 586 00:23:16,000 --> 00:23:19,440 welcome 587 00:23:17,520 --> 00:23:21,440 then hi everyone my name is matt um my 588 00:23:19,440 --> 00:23:22,799 pronouns are they and them i'm going to 589 00:23:21,440 --> 00:23:24,559 be talking to you about neurodiversity 590 00:23:22,799 --> 00:23:26,400 today 591 00:23:24,559 --> 00:23:27,919 um i'd like to start by acknowledging 592 00:23:26,400 --> 00:23:29,840 the traditional custodians of the land 593 00:23:27,919 --> 00:23:32,080 from which i'm presenting the waranjari 594 00:23:29,840 --> 00:23:33,520 people of the cooler nation and pay my 595 00:23:32,080 --> 00:23:36,320 respects to their elders past present 596 00:23:33,520 --> 00:23:38,640 and emerging 597 00:23:36,320 --> 00:23:41,520 so i have autism 598 00:23:38,640 --> 00:23:41,520 and adhd 599 00:23:42,000 --> 00:23:45,520 these are both two types of 600 00:23:44,000 --> 00:23:47,200 neurodiversity 601 00:23:45,520 --> 00:23:49,440 which refers to the variation in the 602 00:23:47,200 --> 00:23:51,919 human brain regarding sociability 603 00:23:49,440 --> 00:23:54,080 learning attention and mood and other 604 00:23:51,919 --> 00:23:56,240 mental functions 605 00:23:54,080 --> 00:23:58,320 but they're by no means the only two 606 00:23:56,240 --> 00:24:00,159 types of neurodiversity 607 00:23:58,320 --> 00:24:02,080 i'm recently diagnosed i'm still 608 00:24:00,159 --> 00:24:02,840 learning about my brain 609 00:24:02,080 --> 00:24:05,200 um 610 00:24:02,840 --> 00:24:07,200 i my intent for this talk is to raise 611 00:24:05,200 --> 00:24:09,279 awareness not to claim that i have all 612 00:24:07,200 --> 00:24:11,440 the answers um we have a saying that if 613 00:24:09,279 --> 00:24:13,840 you've met one person with autism you've 614 00:24:11,440 --> 00:24:16,840 met one person with autism we're all 615 00:24:13,840 --> 00:24:19,840 different and these are specifically my 616 00:24:16,840 --> 00:24:21,679 experiences i found a long time ago that 617 00:24:19,840 --> 00:24:22,880 i always struggled with timekeeping and 618 00:24:21,679 --> 00:24:25,200 timesheets 619 00:24:22,880 --> 00:24:27,039 i'd seemingly lose hours of productivity 620 00:24:25,200 --> 00:24:28,159 some days and not know where they went 621 00:24:27,039 --> 00:24:30,720 um 622 00:24:28,159 --> 00:24:32,880 and it made it really challenging to to 623 00:24:30,720 --> 00:24:34,960 build against clients uh and so i ended 624 00:24:32,880 --> 00:24:36,240 up having to use this um 625 00:24:34,960 --> 00:24:38,159 app that a colleague wrote which would 626 00:24:36,240 --> 00:24:39,600 literally pop up every 15 minutes to 627 00:24:38,159 --> 00:24:41,360 help me remember 628 00:24:39,600 --> 00:24:43,520 to timesheet my work and keep track of 629 00:24:41,360 --> 00:24:45,120 what i was doing um 630 00:24:43,520 --> 00:24:47,360 timesheets don't really work for me and 631 00:24:45,120 --> 00:24:49,760 i'm trying to find ways to have jobs 632 00:24:47,360 --> 00:24:51,200 that don't don't involve them so that's 633 00:24:49,760 --> 00:24:53,200 one thing to think about for people who 634 00:24:51,200 --> 00:24:55,120 are neurodiverse 635 00:24:53,200 --> 00:24:57,360 and so now i know why 636 00:24:55,120 --> 00:24:59,120 it's because i hyper focus and sometimes 637 00:24:57,360 --> 00:25:00,720 experience time blindness 638 00:24:59,120 --> 00:25:01,520 i can focus on things for hours which is 639 00:25:00,720 --> 00:25:04,799 like a 640 00:25:01,520 --> 00:25:06,960 next level flow state um 641 00:25:04,799 --> 00:25:09,200 where i can get quite upset if i get 642 00:25:06,960 --> 00:25:11,039 interrupted or i have to context switch 643 00:25:09,200 --> 00:25:13,279 it means i can get a lot done but it 644 00:25:11,039 --> 00:25:15,919 also means that 645 00:25:13,279 --> 00:25:17,200 there is nothing else outside of this um 646 00:25:15,919 --> 00:25:19,840 and it means i can completely lose track 647 00:25:17,200 --> 00:25:22,320 of time and forget important things like 648 00:25:19,840 --> 00:25:24,240 eating 649 00:25:22,320 --> 00:25:27,440 i also experience executive dysfunction 650 00:25:24,240 --> 00:25:29,440 um if things are not interesting 651 00:25:27,440 --> 00:25:30,720 novel or urgent 652 00:25:29,440 --> 00:25:32,000 they don't get done 653 00:25:30,720 --> 00:25:34,240 this talk this talk was written in the 654 00:25:32,000 --> 00:25:36,159 last two hours it hit the urgent the 655 00:25:34,240 --> 00:25:37,520 urgent checkbox 656 00:25:36,159 --> 00:25:39,279 um 657 00:25:37,520 --> 00:25:41,840 i struggle with engagement 658 00:25:39,279 --> 00:25:44,240 sometimes i find that i have to watch 659 00:25:41,840 --> 00:25:46,240 talks at double time occasionally just 660 00:25:44,240 --> 00:25:47,840 to keep keep engaged with them if i can 661 00:25:46,240 --> 00:25:49,200 unless they're written by libra necky or 662 00:25:47,840 --> 00:25:51,360 russell t mcgee in which case they work 663 00:25:49,200 --> 00:25:53,440 just fine 664 00:25:51,360 --> 00:25:55,200 um i find that i'm occasionally 665 00:25:53,440 --> 00:25:57,440 distracted by environmental factors such 666 00:25:55,200 --> 00:25:59,279 as background noises like elevated dings 667 00:25:57,440 --> 00:26:00,480 or fluorescent lighting or movements in 668 00:25:59,279 --> 00:26:02,159 the periphery 669 00:26:00,480 --> 00:26:04,080 so i often need to use noise cancelling 670 00:26:02,159 --> 00:26:05,679 headphones or like work at my home 671 00:26:04,080 --> 00:26:06,960 office where i can 672 00:26:05,679 --> 00:26:09,200 you know 673 00:26:06,960 --> 00:26:11,840 close out those distractions and 674 00:26:09,200 --> 00:26:13,200 focus properly on my work 675 00:26:11,840 --> 00:26:15,039 i find that different communication 676 00:26:13,200 --> 00:26:16,559 styles work differently for me instant 677 00:26:15,039 --> 00:26:19,039 messages 678 00:26:16,559 --> 00:26:21,279 are great for 679 00:26:19,039 --> 00:26:23,760 not putting people on the spot but you 680 00:26:21,279 --> 00:26:25,919 can often lose tone with them um if you 681 00:26:23,760 --> 00:26:28,559 don't take care video 682 00:26:25,919 --> 00:26:30,880 and audio are great um 683 00:26:28,559 --> 00:26:32,559 but because you've got the body language 684 00:26:30,880 --> 00:26:34,960 and the tone but they can be stressful 685 00:26:32,559 --> 00:26:36,240 from a like a timeliness and response 686 00:26:34,960 --> 00:26:38,720 perspective if you feel like you're 687 00:26:36,240 --> 00:26:40,640 getting put on the spot um audio can be 688 00:26:38,720 --> 00:26:43,840 the worst of both worlds sometimes so i 689 00:26:40,640 --> 00:26:46,240 try to avoid phone calls for example 690 00:26:43,840 --> 00:26:48,720 um one thing that i found worked really 691 00:26:46,240 --> 00:26:50,400 well are personal user manuals which are 692 00:26:48,720 --> 00:26:52,080 ways that people can literally write a 693 00:26:50,400 --> 00:26:53,840 document that says here is how i work 694 00:26:52,080 --> 00:26:55,039 and here's how my brain works 695 00:26:53,840 --> 00:26:56,880 um 696 00:26:55,039 --> 00:26:58,559 and i've you know read about workplaces 697 00:26:56,880 --> 00:27:00,400 that have implemented these 698 00:26:58,559 --> 00:27:02,000 as a as an optional thing where you know 699 00:27:00,400 --> 00:27:03,440 they're not required but it's a great 700 00:27:02,000 --> 00:27:04,799 way for people to 701 00:27:03,440 --> 00:27:06,240 communicate about what works best for 702 00:27:04,799 --> 00:27:08,320 them and find accommodations and 703 00:27:06,240 --> 00:27:09,520 compromise 704 00:27:08,320 --> 00:27:11,279 um 705 00:27:09,520 --> 00:27:13,440 so the main takeaways that i've got from 706 00:27:11,279 --> 00:27:16,080 this talk are that 707 00:27:13,440 --> 00:27:19,600 all of our brains work differently and 708 00:27:16,080 --> 00:27:20,880 even people who aren't neurodiverse 709 00:27:19,600 --> 00:27:22,080 require different ways of thinking 710 00:27:20,880 --> 00:27:24,080 sometimes 711 00:27:22,080 --> 00:27:25,919 um so i'd say 712 00:27:24,080 --> 00:27:28,159 be explicit and 713 00:27:25,919 --> 00:27:30,320 open and proactive about working with 714 00:27:28,159 --> 00:27:31,760 people to accommodate the way they work 715 00:27:30,320 --> 00:27:34,399 um as i said this helps both 716 00:27:31,760 --> 00:27:36,799 neurotypical and neurodivergent folks 717 00:27:34,399 --> 00:27:38,559 stay curious and have empathy for you 718 00:27:36,799 --> 00:27:40,960 know the way people think 719 00:27:38,559 --> 00:27:43,360 um and that's all i've got here are some 720 00:27:40,960 --> 00:27:45,600 references which i will put in the um in 721 00:27:43,360 --> 00:27:48,720 the venulis chat in a second thank you 722 00:27:45,600 --> 00:27:51,520 very much 723 00:27:48,720 --> 00:27:53,440 thank you matt that was a uh that was a 724 00:27:51,520 --> 00:27:54,640 really important talk and i i thank you 725 00:27:53,440 --> 00:27:58,000 for giving it 726 00:27:54,640 --> 00:28:01,840 uh up next we have jens 727 00:27:58,000 --> 00:28:05,440 who is going to be talking 728 00:28:01,840 --> 00:28:05,440 grassland in lower saxony 729 00:28:05,679 --> 00:28:10,880 yeah thank you very much um yeah why i 730 00:28:08,320 --> 00:28:13,600 want to give this talk um of course i'd 731 00:28:10,880 --> 00:28:15,840 like to get accutaned with geodata in 732 00:28:13,600 --> 00:28:18,000 agriculture and also from those data 733 00:28:15,840 --> 00:28:20,480 that are used from administrative bodies 734 00:28:18,000 --> 00:28:22,720 for at least in lower saxony 735 00:28:20,480 --> 00:28:24,640 then i'd like to show you a few basic 736 00:28:22,720 --> 00:28:27,440 commands and geopandas you need to know 737 00:28:24,640 --> 00:28:30,799 if you want to process such data 738 00:28:27,440 --> 00:28:33,360 and of course you will be eventually 739 00:28:30,799 --> 00:28:35,440 able to validate administrative land use 740 00:28:33,360 --> 00:28:37,679 statistics so you can check if they are 741 00:28:35,440 --> 00:28:40,159 doing good job or not 742 00:28:37,679 --> 00:28:42,960 first of all i like to show where the 743 00:28:40,159 --> 00:28:45,440 lower section is and by the way yes it 744 00:28:42,960 --> 00:28:47,039 has a horse inside so it's a running gag 745 00:28:45,440 --> 00:28:49,120 of the chat today 746 00:28:47,039 --> 00:28:51,039 and lower sex me is located in northern 747 00:28:49,120 --> 00:28:52,640 western region of germany so it's 748 00:28:51,039 --> 00:28:55,279 between 749 00:28:52,640 --> 00:28:57,440 bremen hamburg there are um 750 00:28:55,279 --> 00:29:00,640 just the neighbors of lower saxony and 751 00:28:57,440 --> 00:29:02,399 yes it's germany and yes it's 3 752 00:29:00,640 --> 00:29:04,000 30 a.m so 753 00:29:02,399 --> 00:29:06,320 if you present those times you should 754 00:29:04,000 --> 00:29:08,960 really know your stuff so 755 00:29:06,320 --> 00:29:10,000 first of all we um importantly both 756 00:29:08,960 --> 00:29:12,320 needed 757 00:29:10,000 --> 00:29:14,080 libraries panners and geopandas i have 758 00:29:12,320 --> 00:29:15,679 marked the versions over here 759 00:29:14,080 --> 00:29:18,480 and then we have to get the data of 760 00:29:15,679 --> 00:29:21,279 course because we want to work with data 761 00:29:18,480 --> 00:29:23,600 and first of all you have to 762 00:29:21,279 --> 00:29:25,679 understand some conditions to use this 763 00:29:23,600 --> 00:29:27,919 data and if you click on this link 764 00:29:25,679 --> 00:29:31,520 you will be able to download it then you 765 00:29:27,919 --> 00:29:34,080 can unzip it and you can import them 766 00:29:31,520 --> 00:29:36,080 be sure to enter this kind of projection 767 00:29:34,080 --> 00:29:38,640 because it's the known projection for 768 00:29:36,080 --> 00:29:40,399 all administrative 769 00:29:38,640 --> 00:29:43,360 um 770 00:29:40,399 --> 00:29:44,240 data sets containing gps coordinates and 771 00:29:43,360 --> 00:29:46,320 those 772 00:29:44,240 --> 00:29:48,240 five uh 773 00:29:46,320 --> 00:29:50,559 lines are the first five lines in the 774 00:29:48,240 --> 00:29:52,640 anti-data set you can see what kind of 775 00:29:50,559 --> 00:29:55,120 uh landed this this is grassland and 776 00:29:52,640 --> 00:29:57,360 this is cropland this is just a shortcut 777 00:29:55,120 --> 00:30:00,159 and this is the name of the year where 778 00:29:57,360 --> 00:30:01,520 this polygon has been input into a data 779 00:30:00,159 --> 00:30:04,480 set 780 00:30:01,520 --> 00:30:06,960 um the first shape is the just a sanity 781 00:30:04,480 --> 00:30:08,720 check how how this 782 00:30:06,960 --> 00:30:11,360 shape will look like and let's look not 783 00:30:08,720 --> 00:30:14,480 too far away from lower saxony 784 00:30:11,360 --> 00:30:16,480 and now i just added the group the kind 785 00:30:14,480 --> 00:30:19,120 of agriculture 786 00:30:16,480 --> 00:30:21,279 indicator and you can see that there 787 00:30:19,120 --> 00:30:23,200 something happens in the northern region 788 00:30:21,279 --> 00:30:26,159 and what is happening in the region you 789 00:30:23,200 --> 00:30:28,000 can see over here there is the grassland 790 00:30:26,159 --> 00:30:29,919 the greenland over here that we are 791 00:30:28,000 --> 00:30:30,880 interested in 792 00:30:29,919 --> 00:30:33,679 and 793 00:30:30,880 --> 00:30:35,919 now we know where the grassland is and 794 00:30:33,679 --> 00:30:38,159 next question is we want to see the 795 00:30:35,919 --> 00:30:39,600 distribution of land size 796 00:30:38,159 --> 00:30:42,320 grouped by the management system 797 00:30:39,600 --> 00:30:44,399 therefore pandas does a good job with 798 00:30:42,320 --> 00:30:47,039 the description function and you can see 799 00:30:44,399 --> 00:30:49,760 here that the grassland over here 800 00:30:47,039 --> 00:30:51,840 average 2.6 hectares it's a very they're 801 00:30:49,760 --> 00:30:54,240 also very tiny patches with less than 802 00:30:51,840 --> 00:30:57,360 thousand square meter but also very big 803 00:30:54,240 --> 00:31:02,720 one and this number is equivalent to 804 00:30:57,360 --> 00:31:04,960 300 soccer pitches in fifa regulation so 805 00:31:02,720 --> 00:31:07,600 it's a very huge one the last thing i'd 806 00:31:04,960 --> 00:31:10,000 like to show of course is the sum 807 00:31:07,600 --> 00:31:10,000 uh the 808 00:31:10,640 --> 00:31:17,360 oh i'm sorry uh the share of uh um 809 00:31:14,399 --> 00:31:20,720 each different agricultural systems the 810 00:31:17,360 --> 00:31:22,159 cropland has more than two-thirds of all 811 00:31:20,720 --> 00:31:23,039 of the oil 812 00:31:22,159 --> 00:31:25,120 uh 813 00:31:23,039 --> 00:31:27,440 imported shapes then grassland is coming 814 00:31:25,120 --> 00:31:30,559 with a bit more than a quarter and the 815 00:31:27,440 --> 00:31:32,960 rest is not that relevant because this 816 00:31:30,559 --> 00:31:34,640 sister does only means you don't not get 817 00:31:32,960 --> 00:31:36,880 any money out of the 818 00:31:34,640 --> 00:31:36,880 um 819 00:31:37,120 --> 00:31:44,080 field and that's for my talk today 820 00:31:41,360 --> 00:31:46,559 i try to not go to sleep thank you very 821 00:31:44,080 --> 00:31:49,200 much for uh your attention and happy 822 00:31:46,559 --> 00:31:51,840 price and happy farming thank you 823 00:31:49,200 --> 00:31:55,760 uh thank you jens for that uh for that 824 00:31:51,840 --> 00:31:57,039 great talk and yeah go go get some sleep 825 00:31:55,760 --> 00:31:59,919 yeah yeah 826 00:31:57,039 --> 00:32:03,039 you can go on 827 00:31:59,919 --> 00:32:04,880 but yeah it's it's a tour 828 00:32:03,039 --> 00:32:07,760 okay um 829 00:32:04,880 --> 00:32:09,360 up next uh i understand this is a python 830 00:32:07,760 --> 00:32:12,559 conference yes 831 00:32:09,360 --> 00:32:15,760 uh but today uh quentin is going to be 832 00:32:12,559 --> 00:32:18,480 talking to us about adders 833 00:32:15,760 --> 00:32:20,399 yes um i'm assuming it can be heard well 834 00:32:18,480 --> 00:32:24,559 um thank you 835 00:32:20,399 --> 00:32:25,840 uh chris so uh my talk today is on 836 00:32:24,559 --> 00:32:28,000 uh 837 00:32:25,840 --> 00:32:29,679 obfuscational logic 838 00:32:28,000 --> 00:32:30,799 making binary outers where they 839 00:32:29,679 --> 00:32:32,880 shouldn't be 840 00:32:30,799 --> 00:32:34,880 a bit about me my name is quentin lovett 841 00:32:32,880 --> 00:32:36,559 i'm a fifth year mechatronic engineering 842 00:32:34,880 --> 00:32:37,679 student at the university of technology 843 00:32:36,559 --> 00:32:38,960 sydney 844 00:32:37,679 --> 00:32:41,840 i work for a 845 00:32:38,960 --> 00:32:43,519 cardio electrophysiology company 846 00:32:41,840 --> 00:32:45,039 and this is my eighth 847 00:32:43,519 --> 00:32:47,600 pipe 848 00:32:45,039 --> 00:32:50,640 so what are binary adders binary adders 849 00:32:47,600 --> 00:32:51,600 are a way of performing 850 00:32:50,640 --> 00:32:54,320 addition 851 00:32:51,600 --> 00:32:56,640 with binary numbers so this is the 852 00:32:54,320 --> 00:32:59,360 simplest binary adder this is a two bit 853 00:32:56,640 --> 00:33:01,600 so you can do uh one plus one or one 854 00:32:59,360 --> 00:33:03,919 plus zero um and so this has an 855 00:33:01,600 --> 00:33:05,360 exclusive or gate um which is one or the 856 00:33:03,919 --> 00:33:08,159 other but not both 857 00:33:05,360 --> 00:33:09,519 and an and gate so the output of this 858 00:33:08,159 --> 00:33:11,679 is a 859 00:33:09,519 --> 00:33:14,480 output bit and a carry bit so one plus 860 00:33:11,679 --> 00:33:17,120 one is zero plus the carry of one and 861 00:33:14,480 --> 00:33:18,960 binary is one zero 862 00:33:17,120 --> 00:33:21,200 so getting a little bit more complicated 863 00:33:18,960 --> 00:33:23,440 than that we here have a full adder and 864 00:33:21,200 --> 00:33:25,360 so this has the carry in bit 865 00:33:23,440 --> 00:33:27,360 and then has the 866 00:33:25,360 --> 00:33:29,519 display and the carry out 867 00:33:27,360 --> 00:33:32,960 and so in python um 868 00:33:29,519 --> 00:33:35,600 we can do this simply with oren and 869 00:33:32,960 --> 00:33:37,039 so if likes cats or likes dogs and likes 870 00:33:35,600 --> 00:33:40,080 cats or 871 00:33:37,039 --> 00:33:43,279 if snake or girly boy and programs 872 00:33:40,080 --> 00:33:46,159 and looking a bit deeper into this um 873 00:33:43,279 --> 00:33:47,519 we have the python boolean 874 00:33:46,159 --> 00:33:48,880 or binary 875 00:33:47,519 --> 00:33:52,080 operators 876 00:33:48,880 --> 00:33:53,840 or being the pipe ampersand the end and 877 00:33:52,080 --> 00:33:55,600 more important and importantly for this 878 00:33:53,840 --> 00:33:58,080 one we have xor 879 00:33:55,600 --> 00:33:59,919 which is the caret 880 00:33:58,080 --> 00:34:02,880 and so why do i care 881 00:33:59,919 --> 00:34:04,880 why i care is uh addition is too easy in 882 00:34:02,880 --> 00:34:08,799 python 883 00:34:04,880 --> 00:34:08,799 so i'm going to just pull up a demo here 884 00:34:09,919 --> 00:34:12,960 um 885 00:34:11,119 --> 00:34:15,520 so when we're doing this edition in 886 00:34:12,960 --> 00:34:19,520 python um open up the python interactive 887 00:34:15,520 --> 00:34:24,720 shell get an int of 9 and into 10 888 00:34:19,520 --> 00:34:24,720 a plus b and 21. perfect 889 00:34:25,520 --> 00:34:28,000 or not 890 00:34:29,280 --> 00:34:33,200 and so when looking at this 891 00:34:31,520 --> 00:34:35,200 i just got to say 892 00:34:33,200 --> 00:34:37,119 that i have been doing some funky stuff 893 00:34:35,200 --> 00:34:39,440 um your python 894 00:34:37,119 --> 00:34:41,760 might not be exactly the same as mine 895 00:34:39,440 --> 00:34:44,159 but um now for something a little bit 896 00:34:41,760 --> 00:34:44,159 different 897 00:34:44,800 --> 00:34:48,800 so we're gonna go 898 00:34:46,480 --> 00:34:50,159 and we're to get al 899 00:34:48,800 --> 00:34:52,879 so we're going to run 900 00:34:50,159 --> 00:34:55,520 a python interactive shell again 901 00:34:52,879 --> 00:34:59,280 and we're going to do a basic uh half 902 00:34:55,520 --> 00:35:01,280 adder so that's our one xor one 903 00:34:59,280 --> 00:35:04,560 or one and one and we're going to bit 904 00:35:01,280 --> 00:35:05,440 shift the carry bit um so that we now 905 00:35:04,560 --> 00:35:06,240 have 906 00:35:05,440 --> 00:35:07,440 uh 907 00:35:06,240 --> 00:35:10,000 that in the 908 00:35:07,440 --> 00:35:12,400 twos column 909 00:35:10,000 --> 00:35:15,200 so um getting a bit more complicated 910 00:35:12,400 --> 00:35:17,040 again um we can do a 911 00:35:15,200 --> 00:35:19,280 a little bit more complicated full adder 912 00:35:17,040 --> 00:35:20,960 we're going to get 9 plus 12 so that's 913 00:35:19,280 --> 00:35:22,960 the binary values 914 00:35:20,960 --> 00:35:25,200 we're going to reverse those so that the 915 00:35:22,960 --> 00:35:26,320 zero bit is in the zero column and we're 916 00:35:25,200 --> 00:35:28,960 just going to type out a little bit of 917 00:35:26,320 --> 00:35:30,560 code it's not too much but i think you 918 00:35:28,960 --> 00:35:32,800 could see that this might might be a 919 00:35:30,560 --> 00:35:34,400 little bit too much to do um 920 00:35:32,800 --> 00:35:36,560 do every time 921 00:35:34,400 --> 00:35:38,960 um 922 00:35:36,560 --> 00:35:41,680 if that's a bit too much for you um that 923 00:35:38,960 --> 00:35:43,280 you don't want to type out all that um 924 00:35:41,680 --> 00:35:45,520 every time you want to do 925 00:35:43,280 --> 00:35:48,480 any form of addition 926 00:35:45,520 --> 00:35:51,200 we have this my piece of resistance 927 00:35:48,480 --> 00:35:53,359 the fruits of my labor 928 00:35:51,200 --> 00:35:56,960 please enter a number one two three four 929 00:35:53,359 --> 00:36:01,200 plus four three two one uh 13 bits of 930 00:35:56,960 --> 00:36:03,599 binary gates calculated for you 931 00:36:01,200 --> 00:36:03,599 thank you 932 00:36:04,480 --> 00:36:08,720 thanks for that quentin 933 00:36:07,200 --> 00:36:10,240 um 934 00:36:08,720 --> 00:36:12,240 yeah and if you want to give a lightning 935 00:36:10,240 --> 00:36:14,640 talk next year about another kind of 936 00:36:12,240 --> 00:36:18,320 snake we haven't had any talks about 937 00:36:14,640 --> 00:36:20,960 asps at this conference so uh you know 938 00:36:18,320 --> 00:36:23,520 if you know about that please sign up to 939 00:36:20,960 --> 00:36:27,119 give a lightning talk next year 940 00:36:23,520 --> 00:36:29,440 right now we have waitama who is going 941 00:36:27,119 --> 00:36:31,200 to be talking about finding parasites 942 00:36:29,440 --> 00:36:32,560 with pythons 943 00:36:31,200 --> 00:36:34,880 uh hi everyone 944 00:36:32,560 --> 00:36:35,920 thanks for having me today um yeah so 945 00:36:34,880 --> 00:36:38,400 i'm going to give this talk about 946 00:36:35,920 --> 00:36:41,760 finding parasites with python 947 00:36:38,400 --> 00:36:43,440 specifically blood parasites in turtles 948 00:36:41,760 --> 00:36:45,040 um so 949 00:36:43,440 --> 00:36:47,280 uh this is a from a project that i 950 00:36:45,040 --> 00:36:49,599 worked on with ike signing in 951 00:36:47,280 --> 00:36:51,599 our phds uh we're both now postdocs at 952 00:36:49,599 --> 00:36:54,480 the doherty institute um just by 953 00:36:51,599 --> 00:36:55,680 coincidence which is cool so this is 954 00:36:54,480 --> 00:36:57,200 from a 955 00:36:55,680 --> 00:36:59,200 um 956 00:36:57,200 --> 00:37:01,920 a project called autoscope and basically 957 00:36:59,200 --> 00:37:04,800 we wanted to build a robotic microscope 958 00:37:01,920 --> 00:37:06,800 um so that we could modify existing 959 00:37:04,800 --> 00:37:08,320 microscopes to programmatically control 960 00:37:06,800 --> 00:37:11,200 the stage so how 961 00:37:08,320 --> 00:37:13,200 how it moves around and the focus knob 962 00:37:11,200 --> 00:37:16,640 and the camera and basically with the 963 00:37:13,200 --> 00:37:18,800 goal to produce digital slides um 964 00:37:16,640 --> 00:37:19,680 for production 965 00:37:18,800 --> 00:37:21,440 for 966 00:37:19,680 --> 00:37:23,119 downstream um machine learning 967 00:37:21,440 --> 00:37:25,520 applications 968 00:37:23,119 --> 00:37:26,800 so this is sort of born out of two memes 969 00:37:25,520 --> 00:37:29,520 my incessant 970 00:37:26,800 --> 00:37:31,680 uh goal to automate everything 971 00:37:29,520 --> 00:37:34,000 um that takes longer than five minutes 972 00:37:31,680 --> 00:37:36,240 and then the fact that if you stare into 973 00:37:34,000 --> 00:37:38,400 a microscope for several hours you're 974 00:37:36,240 --> 00:37:41,280 you basically go blind so we wanted a 975 00:37:38,400 --> 00:37:43,599 way to digitalize this process 976 00:37:41,280 --> 00:37:45,040 um so a little bit about these parasites 977 00:37:43,599 --> 00:37:46,079 so 978 00:37:45,040 --> 00:37:47,440 um 979 00:37:46,079 --> 00:37:48,560 this is a freshwater turtle and they 980 00:37:47,440 --> 00:37:50,160 have this blood parasite called 981 00:37:48,560 --> 00:37:52,160 hemograins 982 00:37:50,160 --> 00:37:53,839 this is a total blood cell this is the 983 00:37:52,160 --> 00:37:55,440 nucleus here and this is the parasite 984 00:37:53,839 --> 00:37:56,880 this hot dog looking thing and we think 985 00:37:55,440 --> 00:37:58,480 they're transmitted by freshwater 986 00:37:56,880 --> 00:38:00,560 leeches but we're not really sure and 987 00:37:58,480 --> 00:38:01,920 basically you take a blood smear and 988 00:38:00,560 --> 00:38:04,160 smear out the blood and then you look 989 00:38:01,920 --> 00:38:05,760 under the microscope in that blood smear 990 00:38:04,160 --> 00:38:07,839 for these parasites so give you a couple 991 00:38:05,760 --> 00:38:09,200 of seconds to find the parasite 992 00:38:07,839 --> 00:38:11,680 in this slide 993 00:38:09,200 --> 00:38:11,680 um 994 00:38:11,839 --> 00:38:14,960 okay i'll give you a hint 995 00:38:13,760 --> 00:38:17,040 there it is 996 00:38:14,960 --> 00:38:19,119 so it can be very difficult to do this 997 00:38:17,040 --> 00:38:20,560 and basically you have to to get a good 998 00:38:19,119 --> 00:38:22,320 level of 999 00:38:20,560 --> 00:38:23,520 paracetamia like the number of parasites 1000 00:38:22,320 --> 00:38:24,800 in the blood cell you have to count 1001 00:38:23,520 --> 00:38:28,160 around 1002 00:38:24,800 --> 00:38:29,920 1500 cells per slide 1003 00:38:28,160 --> 00:38:31,520 so obviously 1004 00:38:29,920 --> 00:38:34,400 this needs some automation 1005 00:38:31,520 --> 00:38:36,560 uh so how do we go about this um 1006 00:38:34,400 --> 00:38:40,000 i designed some 3d printed parts to 1007 00:38:36,560 --> 00:38:42,160 attach to the microscope um 1008 00:38:40,000 --> 00:38:44,400 and then printed them out 1009 00:38:42,160 --> 00:38:47,920 uh the stage is controlled by a stepper 1010 00:38:44,400 --> 00:38:50,160 motor so these 28 byj48 uh stepper 1011 00:38:47,920 --> 00:38:52,320 motors and basically uh these can be 1012 00:38:50,160 --> 00:38:53,680 controlled with a raspberry pi and run 1013 00:38:52,320 --> 00:38:55,520 on the five volt power supply of the 1014 00:38:53,680 --> 00:38:57,520 rossi pi so you don't need to supply a 1015 00:38:55,520 --> 00:39:00,400 separate separate um power supply for 1016 00:38:57,520 --> 00:39:02,320 them and you just send a signal um to 1017 00:39:00,400 --> 00:39:04,560 the channels of the 1018 00:39:02,320 --> 00:39:06,400 stepper motor and you can make it spin 1019 00:39:04,560 --> 00:39:10,800 uh in a set number of steps so you can 1020 00:39:06,400 --> 00:39:14,079 control um the how far the motor turns 1021 00:39:10,800 --> 00:39:15,440 uh for the camera i used opencv the 1022 00:39:14,079 --> 00:39:18,240 python 1023 00:39:15,440 --> 00:39:20,320 interface for that uh and a raspberry pi 1024 00:39:18,240 --> 00:39:21,839 8 megapixel camera that sits on the top 1025 00:39:20,320 --> 00:39:23,280 of um 1026 00:39:21,839 --> 00:39:25,599 the eyepiece 1027 00:39:23,280 --> 00:39:26,880 uh and so we used opencv to extract a 1028 00:39:25,599 --> 00:39:30,400 region of interest from there that we 1029 00:39:26,880 --> 00:39:32,240 could then do our processing on and uh 1030 00:39:30,400 --> 00:39:35,200 using the focus knob you can kind of see 1031 00:39:32,240 --> 00:39:36,720 it uh in this slide here uh 1032 00:39:35,200 --> 00:39:38,160 down the bottom we're able to do some 1033 00:39:36,720 --> 00:39:39,839 autofocusing just by looking at the 1034 00:39:38,160 --> 00:39:42,560 sharpness of the image so moving through 1035 00:39:39,839 --> 00:39:44,960 the x plane of the z plane and looking 1036 00:39:42,560 --> 00:39:47,359 at how sharp the image is 1037 00:39:44,960 --> 00:39:48,720 for the overall architecture for the 1038 00:39:47,359 --> 00:39:51,839 software basically there's this 1039 00:39:48,720 --> 00:39:53,680 sportoscope class that has 1040 00:39:51,839 --> 00:39:55,599 classes for the stage the focus and the 1041 00:39:53,680 --> 00:39:57,599 camera and this has two functions an 1042 00:39:55,599 --> 00:39:59,920 auto focus function 1043 00:39:57,599 --> 00:40:01,440 uh that enables you to focus uh 1044 00:39:59,920 --> 00:40:03,119 automatically focus through the plane of 1045 00:40:01,440 --> 00:40:05,520 the slide and then auto scan which 1046 00:40:03,119 --> 00:40:07,440 basically does this snake like pattern 1047 00:40:05,520 --> 00:40:10,319 um to produce 1048 00:40:07,440 --> 00:40:14,240 uh tiled uh output 1049 00:40:10,319 --> 00:40:14,240 so here's an example of it running 1050 00:40:16,640 --> 00:40:21,119 so yeah you can see the raspberry pi the 1051 00:40:18,240 --> 00:40:25,560 step motor in the background there 1052 00:40:21,119 --> 00:40:25,560 and then this is the slide on the stage 1053 00:40:31,599 --> 00:40:37,119 one minute 1054 00:40:34,240 --> 00:40:40,160 yep and then so it's moving along and so 1055 00:40:37,119 --> 00:40:44,000 to view the slide we use this gdel2 um 1056 00:40:40,160 --> 00:40:46,240 slides and i'll just open this quickly 1057 00:40:44,000 --> 00:40:48,079 so here's the slide 1058 00:40:46,240 --> 00:40:50,960 so you can zoom in here you can see it 1059 00:40:48,079 --> 00:40:52,720 loads there's a parasite and another 1060 00:40:50,960 --> 00:40:55,760 parasite 1061 00:40:52,720 --> 00:40:58,400 um just zoom out so yeah you can see the 1062 00:40:55,760 --> 00:40:58,400 slides there 1063 00:40:59,440 --> 00:41:04,560 so what's next to do take that data to 1064 00:41:01,680 --> 00:41:06,240 some ml so we can automatically use that 1065 00:41:04,560 --> 00:41:08,560 system to identify the parasites and 1066 00:41:06,240 --> 00:41:10,400 then uh train uh 1067 00:41:08,560 --> 00:41:12,720 a model to automatically identify these 1068 00:41:10,400 --> 00:41:14,800 parasites um and so yeah this is all 1069 00:41:12,720 --> 00:41:15,920 open source the code is on github and 1070 00:41:14,800 --> 00:41:18,400 the 3d 1071 00:41:15,920 --> 00:41:21,760 uh components are on thingiverse 1072 00:41:18,400 --> 00:41:24,800 cool thank you 1073 00:41:21,760 --> 00:41:26,480 thank you so much i for one am very glad 1074 00:41:24,800 --> 00:41:28,400 that there is another parasite talk 1075 00:41:26,480 --> 00:41:31,680 happening at lightning talks at like 1076 00:41:28,400 --> 00:41:33,680 online are you um up next we have zach 1077 00:41:31,680 --> 00:41:36,319 he has written code in order to write 1078 00:41:33,680 --> 00:41:36,319 your tests 1079 00:41:37,599 --> 00:41:41,280 thanks everyone i'm joining you from not 1080 00:41:39,440 --> 00:41:43,280 all country in canberra and i'm 1081 00:41:41,280 --> 00:41:44,960 speedrunning a 12-minute live demo in 1082 00:41:43,280 --> 00:41:46,560 five minutes so let's get started 1083 00:41:44,960 --> 00:41:48,480 hypothesis is a tool for people who 1084 00:41:46,560 --> 00:41:50,000 don't like writing tests because coming 1085 00:41:48,480 --> 00:41:52,160 up with all your test data is boring so 1086 00:41:50,000 --> 00:41:53,680 hypothesis does that for you i also got 1087 00:41:52,160 --> 00:41:55,200 bored writing hypothesis tests so i 1088 00:41:53,680 --> 00:41:56,480 wrote code to write hypothesis tests so 1089 00:41:55,200 --> 00:41:58,160 that you don't have to write tests or 1090 00:41:56,480 --> 00:42:00,480 write tests 1091 00:41:58,160 --> 00:42:02,000 to save for a writing test anyway you 1092 00:42:00,480 --> 00:42:03,599 can just tell hypothesis to write tests 1093 00:42:02,000 --> 00:42:05,359 for a sort function and hypothesis will 1094 00:42:03,599 --> 00:42:06,720 tell you there is no sort function if 1095 00:42:05,359 --> 00:42:08,560 you tell a hypothesis to write a test 1096 00:42:06,720 --> 00:42:09,599 for the sort end function it does that 1097 00:42:08,560 --> 00:42:11,599 it tells you that there's three 1098 00:42:09,599 --> 00:42:13,119 arguments here's some default values for 1099 00:42:11,599 --> 00:42:14,880 how to generate it and then it calls it 1100 00:42:13,119 --> 00:42:16,720 but just calling the sort function might 1101 00:42:14,880 --> 00:42:18,079 not crash because the python chord downs 1102 00:42:16,720 --> 00:42:19,599 aren't incompetent so you might want to 1103 00:42:18,079 --> 00:42:20,960 check if you sort the result of sorting 1104 00:42:19,599 --> 00:42:22,480 something it doesn't make any further 1105 00:42:20,960 --> 00:42:24,240 changes you do that just by telling 1106 00:42:22,480 --> 00:42:26,000 hypothesis that sorting is important 1107 00:42:24,240 --> 00:42:27,680 which it should be 1108 00:42:26,000 --> 00:42:28,880 if you want to check something else you 1109 00:42:27,680 --> 00:42:30,160 can check the two functions are 1110 00:42:28,880 --> 00:42:31,920 equivalent and if you want to check that 1111 00:42:30,160 --> 00:42:33,520 the ast.liter level function is 1112 00:42:31,920 --> 00:42:35,280 equivalent to the eval built-in at least 1113 00:42:33,520 --> 00:42:36,960 for all source code strings which 1114 00:42:35,280 --> 00:42:38,640 represent python literals you can tell 1115 00:42:36,960 --> 00:42:40,800 hypothesis to do that with just one 1116 00:42:38,640 --> 00:42:42,720 convenient line of terminal code which 1117 00:42:40,800 --> 00:42:44,319 is great and it tells you this and you 1118 00:42:42,720 --> 00:42:45,520 can see that hypothesis doesn't realize 1119 00:42:44,319 --> 00:42:47,359 that the 1120 00:42:45,520 --> 00:42:49,040 node or string argument is different 1121 00:42:47,359 --> 00:42:50,560 from the source code argument when they 1122 00:42:49,040 --> 00:42:52,000 should be the same so you'd have to edit 1123 00:42:50,560 --> 00:42:52,960 this but it's a great start to the test 1124 00:42:52,000 --> 00:42:55,119 right 1125 00:42:52,960 --> 00:42:56,880 or if you think about property-based 1126 00:42:55,119 --> 00:42:59,200 testing means algebraic properties of 1127 00:42:56,880 --> 00:43:00,640 binary operators like haskell hypothesis 1128 00:42:59,200 --> 00:43:03,440 could do that too i'm not sure why you'd 1129 00:43:00,640 --> 00:43:05,040 want to but it can so that's pretty cool 1130 00:43:03,440 --> 00:43:06,960 the most useful type though are what we 1131 00:43:05,040 --> 00:43:09,040 call ground trip tests where you can 1132 00:43:06,960 --> 00:43:10,640 tell hypothesis that you want to test 1133 00:43:09,040 --> 00:43:12,480 for gzip compression and it will 1134 00:43:10,640 --> 00:43:14,079 automatically work out that if a module 1135 00:43:12,480 --> 00:43:15,920 has a compressed function that also has 1136 00:43:14,079 --> 00:43:17,359 a decompress function if you compress 1137 00:43:15,920 --> 00:43:19,040 something then decompressing it should 1138 00:43:17,359 --> 00:43:20,400 probably give you the same thing back so 1139 00:43:19,040 --> 00:43:22,480 that's pretty cool all you need to do 1140 00:43:20,400 --> 00:43:24,400 here is tell it that data is a byte 1141 00:43:22,480 --> 00:43:26,720 string and that's a great test for g 1142 00:43:24,400 --> 00:43:28,319 compression 1143 00:43:26,720 --> 00:43:31,040 where it gets more complicated though is 1144 00:43:28,319 --> 00:43:32,720 json json it turns out is terrifyingly 1145 00:43:31,040 --> 00:43:35,200 complicated there's so many arguments 1146 00:43:32,720 --> 00:43:36,400 here that i have no idea about really 1147 00:43:35,200 --> 00:43:38,160 and 1148 00:43:36,400 --> 00:43:39,599 i that's a lie i do have some idea about 1149 00:43:38,160 --> 00:43:40,400 them but i don't have time to go into 1150 00:43:39,599 --> 00:43:42,160 them now 1151 00:43:40,400 --> 00:43:43,680 so i wrote a shorter version of this 1152 00:43:42,160 --> 00:43:46,240 test just by deleting a whole bunch of 1153 00:43:43,680 --> 00:43:48,640 arguments and describing json data to 1154 00:43:46,240 --> 00:43:50,640 hypothesis the description of json is 1155 00:43:48,640 --> 00:43:52,800 very simple recursive data the base case 1156 00:43:50,640 --> 00:43:54,720 is either none true or false a number or 1157 00:43:52,800 --> 00:43:56,560 a string or you can have a list of json 1158 00:43:54,720 --> 00:43:57,920 things or you can have a dictionary json 1159 00:43:56,560 --> 00:44:00,000 calls this an object but that's a 1160 00:43:57,920 --> 00:44:02,319 reserved term in python a dictionary 1161 00:44:00,000 --> 00:44:03,839 where you have string keys and json 1162 00:44:02,319 --> 00:44:05,280 values 1163 00:44:03,839 --> 00:44:06,720 and we're just going to tell hypothesis 1164 00:44:05,280 --> 00:44:08,400 that like whether or not we allow nand 1165 00:44:06,720 --> 00:44:10,079 is varied whether we check for circular 1166 00:44:08,400 --> 00:44:12,079 things whether we want ascii or unicode 1167 00:44:10,079 --> 00:44:13,760 output is all variable and then like do 1168 00:44:12,079 --> 00:44:15,119 we want to sort the keys to the objects 1169 00:44:13,760 --> 00:44:16,960 also varied 1170 00:44:15,119 --> 00:44:19,280 so let's see what happens when we run 1171 00:44:16,960 --> 00:44:22,599 this test 1172 00:44:19,280 --> 00:44:22,599 any guesses 1173 00:44:26,960 --> 00:44:30,800 they're on a 30-second delay zach 1174 00:44:46,960 --> 00:44:51,040 it doesn't usually take this 1175 00:44:49,760 --> 00:44:53,599 i guess this is what i get for doing a 1176 00:44:51,040 --> 00:44:53,599 live demo 1177 00:44:55,760 --> 00:44:59,119 yeah anyway let's just uh cancel that 1178 00:44:57,839 --> 00:45:01,200 and 1179 00:44:59,119 --> 00:45:03,040 it it turns out that this fails because 1180 00:45:01,200 --> 00:45:04,800 uh the allowed ad argument also 1181 00:45:03,040 --> 00:45:06,160 disallows infinity because non-finite 1182 00:45:04,800 --> 00:45:07,760 numbers aren't technically allowed by 1183 00:45:06,160 --> 00:45:09,680 the json spec and if you have not a 1184 00:45:07,760 --> 00:45:11,520 number not a number is unequal to itself 1185 00:45:09,680 --> 00:45:13,440 so the test fails so we'll just say that 1186 00:45:11,520 --> 00:45:15,119 we always allow non-finite numbers we're 1187 00:45:13,440 --> 00:45:16,640 default argument name but there we are 1188 00:45:15,119 --> 00:45:18,160 and we'll just assume that's like a 1189 00:45:16,640 --> 00:45:20,400 special assert that tells hypothesis 1190 00:45:18,160 --> 00:45:24,599 it's a bad example that it's equal if we 1191 00:45:20,400 --> 00:45:24,599 run this one hopefully it'll be faster 1192 00:45:44,480 --> 00:45:49,839 one minute 1193 00:45:47,200 --> 00:45:52,079 thanks chris all right so this one fails 1194 00:45:49,839 --> 00:45:53,760 with a really confusing error message it 1195 00:45:52,079 --> 00:45:55,760 turns out that a list containing not a 1196 00:45:53,760 --> 00:45:57,359 number compares equal to itself until 1197 00:45:55,760 --> 00:45:58,720 you round trip it through json and 1198 00:45:57,359 --> 00:46:01,200 that's because there's this list of 1199 00:45:58,720 --> 00:46:03,119 quality performance optimization in c 1200 00:46:01,200 --> 00:46:04,240 python where if a list is the other list 1201 00:46:03,119 --> 00:46:06,000 it doesn't bother checking whether the 1202 00:46:04,240 --> 00:46:08,560 elements are equal and it turns out that 1203 00:46:06,000 --> 00:46:10,160 it also starts by comparing elements by 1204 00:46:08,560 --> 00:46:11,680 identity to avoid deeply nested 1205 00:46:10,160 --> 00:46:13,200 comparisons great performance 1206 00:46:11,680 --> 00:46:15,599 optimization but it totally breaks to 1207 00:46:13,200 --> 00:46:17,040 the presence of dead so the real fix for 1208 00:46:15,599 --> 00:46:18,480 this test is just to tell hypothesis 1209 00:46:17,040 --> 00:46:20,079 that we don't actually want to deal with 1210 00:46:18,480 --> 00:46:21,520 not a number because you never want to 1211 00:46:20,079 --> 00:46:24,000 deal with not a number it's an awful 1212 00:46:21,520 --> 00:46:25,520 value and if we run the final real test 1213 00:46:24,000 --> 00:46:29,480 then this one should pass hopefully 1214 00:46:25,520 --> 00:46:29,480 within the next 19 seconds 1215 00:46:32,480 --> 00:46:35,839 and there we have it that's hypothesis 1216 00:46:34,240 --> 00:46:38,640 you could use it to avoid writing tests 1217 00:46:35,839 --> 00:46:40,240 and still fight bugs thank you very much 1218 00:46:38,640 --> 00:46:42,640 i was waiting for that last one with 1219 00:46:40,240 --> 00:46:44,240 baited breath i'm i'm glad you finished 1220 00:46:42,640 --> 00:46:45,920 within the five minutes today zach good 1221 00:46:44,240 --> 00:46:48,880 job okay 1222 00:46:45,920 --> 00:46:51,520 up next uh we have a 1223 00:46:48,880 --> 00:46:56,079 a slight escalation because riley is 1224 00:46:51,520 --> 00:46:58,400 going to tell us where the stairs are 1225 00:46:56,079 --> 00:47:00,240 alrighty hello pycon i gave a talk last 1226 00:46:58,400 --> 00:47:02,640 year which coincided with the public 1227 00:47:00,240 --> 00:47:05,119 debut of a package called staircase and 1228 00:47:02,640 --> 00:47:07,119 this is a five-minute update a 1229 00:47:05,119 --> 00:47:09,200 where are they now and to be fair who 1230 00:47:07,119 --> 00:47:10,800 amongst us couldn't sum up the last year 1231 00:47:09,200 --> 00:47:12,880 in five minutes 1232 00:47:10,800 --> 00:47:14,400 firstly though let's quickly revisit 1233 00:47:12,880 --> 00:47:16,480 what the package is and for that i'm 1234 00:47:14,400 --> 00:47:19,040 going to focus on one use case which is 1235 00:47:16,480 --> 00:47:20,720 where we have timestamp data now you're 1236 00:47:19,040 --> 00:47:23,839 a python audience so when i say 1237 00:47:20,720 --> 00:47:25,520 timestamp data you probably think pandas 1238 00:47:23,839 --> 00:47:28,160 so to set the scene i'm going to perform 1239 00:47:25,520 --> 00:47:30,800 a monologue from the pandas website 1240 00:47:28,160 --> 00:47:32,800 timestamp data is the most basic time of 1241 00:47:30,800 --> 00:47:35,280 time series data that associates values 1242 00:47:32,800 --> 00:47:38,480 with points in time for pandas objects 1243 00:47:35,280 --> 00:47:40,559 it means using the points in time 1244 00:47:38,480 --> 00:47:42,880 now those points in time are implemented 1245 00:47:40,559 --> 00:47:44,400 in pandas by the time stamp class and 1246 00:47:42,880 --> 00:47:46,160 you can model a time series with a date 1247 00:47:44,400 --> 00:47:48,480 time index which is an index of time 1248 00:47:46,160 --> 00:47:50,960 stamps and a vector of values and we 1249 00:47:48,480 --> 00:47:53,280 commonly assign this to the x and y axis 1250 00:47:50,960 --> 00:47:54,720 respectively but they also have this 1251 00:47:53,280 --> 00:47:56,480 period class which represents a 1252 00:47:54,720 --> 00:47:58,319 particular span of time 1253 00:47:56,480 --> 00:48:00,640 like a particular error or a particular 1254 00:47:58,319 --> 00:48:02,319 day or a particular week and there's 1255 00:48:00,640 --> 00:48:04,400 also this period index and i'm sure you 1256 00:48:02,319 --> 00:48:06,480 can guess what that means now if you're 1257 00:48:04,400 --> 00:48:09,040 pairing a period index with some values 1258 00:48:06,480 --> 00:48:12,160 and the periods don't overlap each other 1259 00:48:09,040 --> 00:48:14,559 then what you have is a step function 1260 00:48:12,160 --> 00:48:16,400 so it's a function over a time domain in 1261 00:48:14,559 --> 00:48:19,359 this case which is piecewise constant 1262 00:48:16,400 --> 00:48:21,760 and it's made up of horizontal lines 1263 00:48:19,359 --> 00:48:24,160 but the periods in a period index are 1264 00:48:21,760 --> 00:48:26,960 all the same size and they're limited to 1265 00:48:24,160 --> 00:48:29,119 specific frequencies like hour or day 1266 00:48:26,960 --> 00:48:32,319 and so you are constrained in what you 1267 00:48:29,119 --> 00:48:34,960 can do but this is where staircase steps 1268 00:48:32,319 --> 00:48:37,599 in pun intended so it doesn't have those 1269 00:48:34,960 --> 00:48:40,480 limits staircase is for step functions 1270 00:48:37,599 --> 00:48:42,559 set functions over a time domain step 1271 00:48:40,480 --> 00:48:45,520 functions over the real numbers 1272 00:48:42,559 --> 00:48:47,680 and assigning values to intervals over 1273 00:48:45,520 --> 00:48:50,559 domain rather than single points opens 1274 00:48:47,680 --> 00:48:52,880 you up to thinking about problems and 1275 00:48:50,559 --> 00:48:55,280 their solutions and analysis in a 1276 00:48:52,880 --> 00:48:56,880 different kind of way 1277 00:48:55,280 --> 00:48:58,800 now there's lots of fun things that you 1278 00:48:56,880 --> 00:49:00,240 can do with step functions much of the 1279 00:48:58,800 --> 00:49:02,400 same things that you can do with 1280 00:49:00,240 --> 00:49:04,640 ordinary time series or functions in 1281 00:49:02,400 --> 00:49:06,079 general you can add them you can divide 1282 00:49:04,640 --> 00:49:07,599 them you can compare them to see which 1283 00:49:06,079 --> 00:49:10,000 one is bigger than another you can 1284 00:49:07,599 --> 00:49:12,000 calculate their mean or median or 1285 00:49:10,000 --> 00:49:12,960 analyze the distribution of values and 1286 00:49:12,000 --> 00:49:15,040 so on 1287 00:49:12,960 --> 00:49:17,280 and you can convert them to an ordinary 1288 00:49:15,040 --> 00:49:18,960 time series if you wish by sampling the 1289 00:49:17,280 --> 00:49:21,119 step function at regular points or 1290 00:49:18,960 --> 00:49:22,480 aggregating it over a sequence of 1291 00:49:21,119 --> 00:49:23,599 periods 1292 00:49:22,480 --> 00:49:24,800 so 1293 00:49:23,599 --> 00:49:27,200 what's new 1294 00:49:24,800 --> 00:49:29,040 there was a major release a month ago 1295 00:49:27,200 --> 00:49:31,440 which saw every part of the library 1296 00:49:29,040 --> 00:49:34,079 rewritten to use pandas and numpy under 1297 00:49:31,440 --> 00:49:36,960 the hood so it's a lot faster it has 1298 00:49:34,079 --> 00:49:38,640 become very closely aligned with pandas 1299 00:49:36,960 --> 00:49:42,000 stylistically and there's a lot of 1300 00:49:38,640 --> 00:49:43,359 features which have analogies in pandas 1301 00:49:42,000 --> 00:49:46,000 for example two of the biggest 1302 00:49:43,359 --> 00:49:48,480 enhancements in version two are slicing 1303 00:49:46,000 --> 00:49:51,359 and masking so with slicing you start 1304 00:49:48,480 --> 00:49:52,640 with a step function you cut it up into 1305 00:49:51,359 --> 00:49:54,319 slices 1306 00:49:52,640 --> 00:49:56,559 and then you perform some calculation 1307 00:49:54,319 --> 00:49:58,800 over the slices and combine the results 1308 00:49:56,559 --> 00:50:01,520 and this is analogous to 1309 00:49:58,800 --> 00:50:04,720 group bias in pandas 1310 00:50:01,520 --> 00:50:07,520 the other is masking which is analogous 1311 00:50:04,720 --> 00:50:09,760 in pandas to masking and 1312 00:50:07,520 --> 00:50:12,240 we all understand what masking is so for 1313 00:50:09,760 --> 00:50:13,359 step functions this means allowing 1314 00:50:12,240 --> 00:50:15,520 intervals 1315 00:50:13,359 --> 00:50:16,880 where the step function is undefined or 1316 00:50:15,520 --> 00:50:18,640 doesn't exist 1317 00:50:16,880 --> 00:50:19,680 and this is a great feature to have for 1318 00:50:18,640 --> 00:50:21,680 example 1319 00:50:19,680 --> 00:50:23,760 i may have a step function which 1320 00:50:21,680 --> 00:50:24,880 represents the heart rate of a patient 1321 00:50:23,760 --> 00:50:26,880 over time 1322 00:50:24,880 --> 00:50:29,280 now if their heart rate never changes 1323 00:50:26,880 --> 00:50:31,200 then this step function is a flat line 1324 00:50:29,280 --> 00:50:33,119 and let's face it it probably has a 1325 00:50:31,200 --> 00:50:34,640 value of zero 1326 00:50:33,119 --> 00:50:36,400 but if they're not flat lining then 1327 00:50:34,640 --> 00:50:38,480 analyzing the distribution of the values 1328 00:50:36,400 --> 00:50:41,359 might be an interesting thing to do and 1329 00:50:38,480 --> 00:50:43,839 this is very easy with staircase 1330 00:50:41,359 --> 00:50:46,240 but maybe i want to exclude the times 1331 00:50:43,839 --> 00:50:48,000 that the patient is asleep 1332 00:50:46,240 --> 00:50:50,559 and that could happen at 1333 00:50:48,000 --> 00:50:52,480 random times for arbitrary intervals 1334 00:50:50,559 --> 00:50:54,880 especially if they're sharing a room in 1335 00:50:52,480 --> 00:50:57,119 a public hospital and if i happen to 1336 00:50:54,880 --> 00:50:58,079 know when the patient was 1337 00:50:57,119 --> 00:50:59,599 sleeping 1338 00:50:58,079 --> 00:51:02,319 and i knew when they were awake like 1339 00:50:59,599 --> 00:51:05,200 some sort of creepy analytical santa 1340 00:51:02,319 --> 00:51:07,599 claus then it's very easy to make to 1341 00:51:05,200 --> 00:51:10,800 mask those intervals of time and ignore 1342 00:51:07,599 --> 00:51:13,920 them when performing the analysis 1343 00:51:10,800 --> 00:51:16,240 so it's a pretty full featured package 1344 00:51:13,920 --> 00:51:18,880 there is always more to be done 1345 00:51:16,240 --> 00:51:20,559 one of today's social events is the 1346 00:51:18,880 --> 00:51:23,119 staircase sprint 1347 00:51:20,559 --> 00:51:25,920 it's not really a sprint because it will 1348 00:51:23,119 --> 00:51:28,240 just go on forever you can join whenever 1349 00:51:25,920 --> 00:51:29,040 you like even tomorrow or the weeks to 1350 00:51:28,240 --> 00:51:31,520 come 1351 00:51:29,040 --> 00:51:34,319 i've put a backlog of tasks many of 1352 00:51:31,520 --> 00:51:36,240 which are beginner friendly um 1353 00:51:34,319 --> 00:51:38,640 in a repository so if you're wanting to 1354 00:51:36,240 --> 00:51:40,800 dip your toe in open source contribution 1355 00:51:38,640 --> 00:51:45,839 and you don't know where to start then 1356 00:51:40,800 --> 00:51:45,839 uh come along and um get wet thank you 1357 00:51:46,000 --> 00:51:52,240 thanks for that riley 1358 00:51:47,920 --> 00:51:55,520 okay up next uh we have evan who is 1359 00:51:52,240 --> 00:51:58,160 going to be telling us about uh email 1360 00:51:55,520 --> 00:51:58,160 apparently 1361 00:51:58,240 --> 00:52:02,079 hello 1362 00:51:59,680 --> 00:52:02,839 uh this is the story of 1363 00:52:02,079 --> 00:52:07,200 my 1364 00:52:02,839 --> 00:52:10,720 email this is my email 1365 00:52:07,200 --> 00:52:12,960 this is also my email 1366 00:52:10,720 --> 00:52:16,079 this one too 1367 00:52:12,960 --> 00:52:19,200 oh and this one as well 1368 00:52:16,079 --> 00:52:20,640 these are all different emails 1369 00:52:19,200 --> 00:52:23,440 and 1370 00:52:20,640 --> 00:52:26,720 they're all my emails 1371 00:52:23,440 --> 00:52:30,160 but i only have one email 1372 00:52:26,720 --> 00:52:32,960 and that is this email 1373 00:52:30,160 --> 00:52:36,559 how are they all my emails 1374 00:52:32,960 --> 00:52:39,200 through the power of plus addressing 1375 00:52:36,559 --> 00:52:40,880 you simply take your email address 1376 00:52:39,200 --> 00:52:42,559 you add a plus 1377 00:52:40,880 --> 00:52:45,599 and your tag 1378 00:52:42,559 --> 00:52:47,839 and it'll appear in your inbox 1379 00:52:45,599 --> 00:52:48,960 and you can even add dots anywhere you 1380 00:52:47,839 --> 00:52:51,520 want 1381 00:52:48,960 --> 00:52:54,000 and they'll all be ignored 1382 00:52:51,520 --> 00:52:56,720 and this isn't just for gmail 1383 00:52:54,000 --> 00:52:58,000 it also works for outlook 1384 00:52:56,720 --> 00:52:59,599 yahoo 1385 00:52:58,000 --> 00:53:01,200 protonmail 1386 00:52:59,599 --> 00:53:03,359 and fastmail 1387 00:53:01,200 --> 00:53:05,599 and many more 1388 00:53:03,359 --> 00:53:07,760 fastmail even supports subdomain 1389 00:53:05,599 --> 00:53:09,760 addressing and they're great because 1390 00:53:07,760 --> 00:53:11,920 they look just like regular email 1391 00:53:09,760 --> 00:53:12,839 addresses 1392 00:53:11,920 --> 00:53:14,480 but 1393 00:53:12,839 --> 00:53:17,440 why 1394 00:53:14,480 --> 00:53:20,400 well these tags let you be in control of 1395 00:53:17,440 --> 00:53:22,160 how you feel to your email regardless of 1396 00:53:20,400 --> 00:53:24,640 who it's from 1397 00:53:22,160 --> 00:53:26,880 and they also let you easily register 1398 00:53:24,640 --> 00:53:29,200 accounts for the same service without 1399 00:53:26,880 --> 00:53:31,280 having to make a whole new email 1400 00:53:29,200 --> 00:53:34,240 meaning that you can sign up for as many 1401 00:53:31,280 --> 00:53:36,319 freebies from that website as you want 1402 00:53:34,240 --> 00:53:38,480 but more importantly it means that you 1403 00:53:36,319 --> 00:53:40,800 can better protect your email from the 1404 00:53:38,480 --> 00:53:43,200 ever increasing companies that leak it 1405 00:53:40,800 --> 00:53:45,440 letting you know who leaked your email 1406 00:53:43,200 --> 00:53:47,680 and giving you the option to filter it 1407 00:53:45,440 --> 00:53:49,599 all to spam 1408 00:53:47,680 --> 00:53:52,880 you can even test if your email has been 1409 00:53:49,599 --> 00:53:53,920 leaked at having beenpwned.com 1410 00:53:52,880 --> 00:53:57,119 you can see 1411 00:53:53,920 --> 00:54:00,079 my email is fine but one day i got a 1412 00:53:57,119 --> 00:54:02,640 spam email and sure enough i confirmed 1413 00:54:00,079 --> 00:54:05,119 that a dodgy website leaked it 1414 00:54:02,640 --> 00:54:07,200 but i don't care because it's not my 1415 00:54:05,119 --> 00:54:09,839 main email 1416 00:54:07,200 --> 00:54:11,760 lastly it's also just really funny to 1417 00:54:09,839 --> 00:54:13,920 just give out your email now 1418 00:54:11,760 --> 00:54:17,200 i've heard on multiple occasions 1419 00:54:13,920 --> 00:54:20,319 wow you made an email just for me 1420 00:54:17,200 --> 00:54:21,280 uh are you sure that's correct 1421 00:54:20,319 --> 00:54:25,280 and 1422 00:54:21,280 --> 00:54:28,079 oh i didn't know you work for us 1423 00:54:25,280 --> 00:54:29,760 there are three things to note though 1424 00:54:28,079 --> 00:54:31,920 you will have to come up with some kind 1425 00:54:29,760 --> 00:54:33,839 of system for generating and remembering 1426 00:54:31,920 --> 00:54:36,160 these tags 1427 00:54:33,839 --> 00:54:38,319 and unfortunately this has been used in 1428 00:54:36,160 --> 00:54:40,640 phishing like scams like this netflix 1429 00:54:38,319 --> 00:54:43,280 one where attackers could sign up with 1430 00:54:40,640 --> 00:54:45,359 someone else's similar email address and 1431 00:54:43,280 --> 00:54:47,520 have the victim think that their own 1432 00:54:45,359 --> 00:54:49,839 account needed updating when in fact it 1433 00:54:47,520 --> 00:54:52,720 was the attackers 1434 00:54:49,839 --> 00:54:54,640 and finally just like people not all 1435 00:54:52,720 --> 00:54:57,839 websites know about this cool trick 1436 00:54:54,640 --> 00:55:00,720 which can be a bit annoying at times 1437 00:54:57,839 --> 00:55:02,960 so spread the word if you're a web dev 1438 00:55:00,720 --> 00:55:05,280 stop rolling your own email validation 1439 00:55:02,960 --> 00:55:07,359 just use a library instead 1440 00:55:05,280 --> 00:55:10,480 and if you're an email dev 1441 00:55:07,359 --> 00:55:11,359 implement subdomain addressing 1442 00:55:10,480 --> 00:55:13,280 oh 1443 00:55:11,359 --> 00:55:14,799 and one more thing 1444 00:55:13,280 --> 00:55:17,280 this 1445 00:55:14,799 --> 00:55:19,680 is not my email 1446 00:55:17,280 --> 00:55:22,079 this is my email 1447 00:55:19,680 --> 00:55:23,760 i don't give out my email publicly and 1448 00:55:22,079 --> 00:55:25,839 neither should you 1449 00:55:23,760 --> 00:55:27,359 that is the best way to protect your 1450 00:55:25,839 --> 00:55:29,760 privacy 1451 00:55:27,359 --> 00:55:29,760 thank you 1452 00:55:30,640 --> 00:55:36,160 thanks for that evan i i was just about 1453 00:55:33,280 --> 00:55:38,400 to ask if evan gmail was your your email 1454 00:55:36,160 --> 00:55:42,319 address and that would explain why 1455 00:55:38,400 --> 00:55:43,920 uh why i had a bounce earlier on but uh 1456 00:55:42,319 --> 00:55:48,920 okay uh 1457 00:55:43,920 --> 00:55:48,920 up next we have apollo 1458 00:55:49,599 --> 00:55:55,119 so let's go 1459 00:55:52,319 --> 00:55:58,000 hello everyone and welcome to my gender 1460 00:55:55,119 --> 00:55:59,359 reveal party my quantum gender reveal 1461 00:55:58,000 --> 00:56:01,680 party 1462 00:55:59,359 --> 00:56:03,920 today i'm going to explain why my gender 1463 00:56:01,680 --> 00:56:05,920 is a quantum mechanical object and then 1464 00:56:03,920 --> 00:56:09,280 we're going to measure it together using 1465 00:56:05,920 --> 00:56:11,599 a real quantum computer 1466 00:56:09,280 --> 00:56:13,599 so some people have a very strong 1467 00:56:11,599 --> 00:56:16,000 internal sense of their gender 1468 00:56:13,599 --> 00:56:17,440 knowing that they're a woman or a man or 1469 00:56:16,000 --> 00:56:19,040 something else 1470 00:56:17,440 --> 00:56:21,440 these genders behave in ways that we're 1471 00:56:19,040 --> 00:56:24,160 used to so i like to think of them as 1472 00:56:21,440 --> 00:56:26,480 the classical genders 1473 00:56:24,160 --> 00:56:28,000 unfortunately my gender has never been 1474 00:56:26,480 --> 00:56:29,520 that simple 1475 00:56:28,000 --> 00:56:31,760 i've been trying to find a nice label to 1476 00:56:29,520 --> 00:56:34,480 slap on it for a few years now and the 1477 00:56:31,760 --> 00:56:36,480 best i've found is gender void 1478 00:56:34,480 --> 00:56:38,640 but even that's not right sometimes my 1479 00:56:36,480 --> 00:56:41,280 gender doesn't feel like a void at all 1480 00:56:38,640 --> 00:56:44,000 sometimes i'm a soft guy 1481 00:56:41,280 --> 00:56:46,319 sometimes a screaming magpie coming for 1482 00:56:44,000 --> 00:56:48,160 your helmet 1483 00:56:46,319 --> 00:56:50,400 before i worked as a tech consultant i 1484 00:56:48,160 --> 00:56:52,400 studied theoretical physics and there i 1485 00:56:50,400 --> 00:56:53,520 discovered the wonderful world of 1486 00:56:52,400 --> 00:56:55,920 quantum 1487 00:56:53,520 --> 00:56:58,799 and my gender 1488 00:56:55,920 --> 00:57:00,720 so what does it mean to be quantum 1489 00:56:58,799 --> 00:57:02,799 quantum mechanics is just a model we use 1490 00:57:00,720 --> 00:57:04,720 in physics to describe really small 1491 00:57:02,799 --> 00:57:06,400 things like atoms 1492 00:57:04,720 --> 00:57:08,720 but there's no reason it couldn't apply 1493 00:57:06,400 --> 00:57:10,480 to bigger things too 1494 00:57:08,720 --> 00:57:12,400 fundamentally something is quantum 1495 00:57:10,480 --> 00:57:14,720 mechanical when it displays strange 1496 00:57:12,400 --> 00:57:16,319 behaviors like superposition and 1497 00:57:14,720 --> 00:57:18,079 entanglement 1498 00:57:16,319 --> 00:57:20,240 unfortunately i only have time to talk 1499 00:57:18,079 --> 00:57:23,599 about superposition for now but feel 1500 00:57:20,240 --> 00:57:26,480 free to ask about entanglement later 1501 00:57:23,599 --> 00:57:28,720 so superposition means you can be in 1502 00:57:26,480 --> 00:57:30,640 multiple states at once 1503 00:57:28,720 --> 00:57:31,520 kind of 1504 00:57:30,640 --> 00:57:33,440 it's 1505 00:57:31,520 --> 00:57:35,839 classically explained using 1506 00:57:33,440 --> 00:57:38,319 schrodinger's cat where his abused cat 1507 00:57:35,839 --> 00:57:41,280 is in a superposition of being alive and 1508 00:57:38,319 --> 00:57:43,359 dead until you open the box and measure 1509 00:57:41,280 --> 00:57:44,480 the cap 1510 00:57:43,359 --> 00:57:46,240 but really 1511 00:57:44,480 --> 00:57:48,960 a better way to think of it is that your 1512 00:57:46,240 --> 00:57:50,400 state is blurred across multiple values 1513 00:57:48,960 --> 00:57:52,880 with different likelihoods of a 1514 00:57:50,400 --> 00:57:55,599 particular state being measured 1515 00:57:52,880 --> 00:57:57,599 this blurry probability blob is called a 1516 00:57:55,599 --> 00:58:01,359 wave function 1517 00:57:57,599 --> 00:58:03,680 now that sounds just like my gender 1518 00:58:01,359 --> 00:58:07,680 i'm blurred across these states a 1519 00:58:03,680 --> 00:58:09,119 probability distribution across genders 1520 00:58:07,680 --> 00:58:11,119 it's important to note that when a 1521 00:58:09,119 --> 00:58:13,520 classical object interacts with a 1522 00:58:11,119 --> 00:58:16,160 quantum object the wave function 1523 00:58:13,520 --> 00:58:19,520 collapses to a classical value 1524 00:58:16,160 --> 00:58:21,440 like when someone calls me seroman 1525 00:58:19,520 --> 00:58:24,000 so now we're going to do something 1526 00:58:21,440 --> 00:58:27,040 similar i'm going to construct an actual 1527 00:58:24,000 --> 00:58:28,160 quantum state on a real quantum computer 1528 00:58:27,040 --> 00:58:30,400 and then we're going to measure that 1529 00:58:28,160 --> 00:58:32,880 quantum state which will collapse it 1530 00:58:30,400 --> 00:58:34,880 into a classical value 1531 00:58:32,880 --> 00:58:38,160 and to do so i'm going to be using 1532 00:58:34,880 --> 00:58:41,760 kisket which is an open source library 1533 00:58:38,160 --> 00:58:44,880 and ibm's free web ui to visually look 1534 00:58:41,760 --> 00:58:47,280 at what's going on in the code 1535 00:58:44,880 --> 00:58:49,520 so what's happening here is on the right 1536 00:58:47,280 --> 00:58:51,760 we have the kisket code and on the left 1537 00:58:49,520 --> 00:58:52,720 we have a visualization of quantum 1538 00:58:51,760 --> 00:58:54,480 circuit 1539 00:58:52,720 --> 00:58:57,359 and then a visualization of the quantum 1540 00:58:54,480 --> 00:58:59,359 state down the bottom 1541 00:58:57,359 --> 00:59:01,839 this quantum state is 1542 00:58:59,359 --> 00:59:04,000 one cubit which is just an atom that's 1543 00:59:01,839 --> 00:59:05,520 been prepared in a fancy way so that it 1544 00:59:04,000 --> 00:59:09,200 can only be 1545 00:59:05,520 --> 00:59:11,119 in two states on off 1546 00:59:09,200 --> 00:59:13,119 so i said earlier that my gender is like 1547 00:59:11,119 --> 00:59:15,599 a superposition so what i'm going to do 1548 00:59:13,119 --> 00:59:18,400 today is i'm going to put that qubit in 1549 00:59:15,599 --> 00:59:20,480 a 50 50 superposition 1550 00:59:18,400 --> 00:59:22,079 of on and off 1551 00:59:20,480 --> 00:59:24,559 although on and off aren't very good 1552 00:59:22,079 --> 00:59:26,559 genders are they hmm i guess we should 1553 00:59:24,559 --> 00:59:27,839 label them something else 1554 00:59:26,559 --> 00:59:30,319 i guess the traditional choice here 1555 00:59:27,839 --> 00:59:32,400 would be male and female but i'd like to 1556 00:59:30,319 --> 00:59:35,680 go with something a bit spicier 1557 00:59:32,400 --> 00:59:38,160 the true original binary the two genders 1558 00:59:35,680 --> 00:59:40,160 fundamentally opposed from each other 1559 00:59:38,160 --> 00:59:42,160 i'm talking of course about pineapple 1560 00:59:40,160 --> 00:59:43,920 and pizza 1561 00:59:42,160 --> 00:59:46,640 so what we're going to do next is we're 1562 00:59:43,920 --> 00:59:48,640 going to measure our qubit which is in a 1563 00:59:46,640 --> 00:59:49,599 50 50 superposition of pineapple and 1564 00:59:48,640 --> 00:59:51,200 pizza 1565 00:59:49,599 --> 00:59:52,480 and this is just a simulated outcome 1566 00:59:51,200 --> 00:59:54,240 down here 1567 00:59:52,480 --> 00:59:55,520 and then we can run it on a quantum 1568 00:59:54,240 --> 00:59:56,799 computer 1569 00:59:55,520 --> 00:59:59,119 over here 1570 00:59:56,799 --> 01:00:01,119 now unfortunately because this is a free 1571 00:59:59,119 --> 01:00:02,480 and open service there's a lot of other 1572 01:00:01,119 --> 01:00:03,839 people trying to use these quantum 1573 01:00:02,480 --> 01:00:05,440 computers which means you can wait 1574 01:00:03,839 --> 01:00:07,520 several hours for your measurement to be 1575 01:00:05,440 --> 01:00:09,839 run but i thought of this in advance and 1576 01:00:07,520 --> 01:00:11,599 i ran the job earlier this morning 1577 01:00:09,839 --> 01:00:13,599 so we have a result here that i haven't 1578 01:00:11,599 --> 01:00:15,119 looked at yet 1579 01:00:13,599 --> 01:00:16,160 so just to quickly rehash over what 1580 01:00:15,119 --> 01:00:19,040 we've done 1581 01:00:16,160 --> 01:00:21,280 uh i set up a qubit in a 50 50 super 1582 01:00:19,040 --> 01:00:23,440 position of pineapple and pizza 1583 01:00:21,280 --> 01:00:26,240 and then i just measured that qubit to 1584 01:00:23,440 --> 01:00:29,839 see which gender it is 1585 01:00:26,240 --> 01:00:29,839 and now we're going to find out 1586 01:00:32,000 --> 01:00:36,640 this is a very tense moment 1587 01:00:34,400 --> 01:00:40,079 here's our histogram down here 1588 01:00:36,640 --> 01:00:42,400 my gender is pineapple yay 1589 01:00:40,079 --> 01:00:44,319 thanks for coming everyone my name is 1590 01:00:42,400 --> 01:00:47,440 apollo my pronouns are they them and my 1591 01:00:44,319 --> 01:00:47,440 gender is pineapple 1592 01:00:48,319 --> 01:00:50,559 thanks apollo 1593 01:00:49,680 --> 01:00:54,000 uh 1594 01:00:50,559 --> 01:00:57,520 right just waiting for patrick to uh to 1595 01:00:54,000 --> 01:00:59,520 get themselves together ah there we are 1596 01:00:57,520 --> 01:01:01,520 okay yep you had an uncertain amount of 1597 01:00:59,520 --> 01:01:04,079 time for for your talk just then apollo 1598 01:01:01,520 --> 01:01:06,480 while uh while patrick had it had a 1599 01:01:04,079 --> 01:01:10,400 slight uh had a slight moment 1600 01:01:06,480 --> 01:01:14,720 hey up next we have david who is going 1601 01:01:10,400 --> 01:01:14,720 to tell us about gets a sorry git 1602 01:01:15,359 --> 01:01:18,559 hi 1603 01:01:16,319 --> 01:01:20,400 i'm davo here are n git commands you 1604 01:01:18,559 --> 01:01:23,040 didn't know about 1605 01:01:20,400 --> 01:01:24,720 diff 3 merge conflict style this adds a 1606 01:01:23,040 --> 01:01:27,520 section to merge conflicts with a 1607 01:01:24,720 --> 01:01:30,000 content with a common ancestor so you 1608 01:01:27,520 --> 01:01:32,240 can actually see what's changed since 1609 01:01:30,000 --> 01:01:35,440 you last branched here is an example 1610 01:01:32,240 --> 01:01:37,839 from my talon voice coding config 1611 01:01:35,440 --> 01:01:39,680 the default diff algorithm can produce 1612 01:01:37,839 --> 01:01:41,680 unreadable gif sometimes 1613 01:01:39,680 --> 01:01:43,920 but we have others 1614 01:01:41,680 --> 01:01:46,400 the patience algorithm 1615 01:01:43,920 --> 01:01:48,319 tries to keep sequences together much 1616 01:01:46,400 --> 01:01:50,319 like the card game which you might 1617 01:01:48,319 --> 01:01:51,920 otherwise know as solitaire 1618 01:01:50,319 --> 01:01:54,160 but my explanation doesn't really do it 1619 01:01:51,920 --> 01:01:55,760 justice so see james coughlin's blog 1620 01:01:54,160 --> 01:01:59,039 post which i've linked there 1621 01:01:55,760 --> 01:02:00,640 uh it is also sometimes slow 1622 01:01:59,039 --> 01:02:01,760 but there is also the histogram 1623 01:02:00,640 --> 01:02:03,280 algorithm which is based on the 1624 01:02:01,760 --> 01:02:05,119 patient's algorithm and it's been 1625 01:02:03,280 --> 01:02:08,480 benchmarked to be faster than the other 1626 01:02:05,119 --> 01:02:10,160 three diff algorithms in git 1627 01:02:08,480 --> 01:02:12,400 you can color move 1628 01:02:10,160 --> 01:02:14,559 lines that have moved in git diff 1629 01:02:12,400 --> 01:02:16,240 here you can see chunks of lines that 1630 01:02:14,559 --> 01:02:18,960 have moved in different colors in my 1631 01:02:16,240 --> 01:02:18,960 vincon peak 1632 01:02:19,359 --> 01:02:23,839 ever forget what a and b refer to when 1633 01:02:21,680 --> 01:02:26,640 you run git diff well you can change 1634 01:02:23,839 --> 01:02:29,200 those so that they give you context uh 1635 01:02:26,640 --> 01:02:30,720 here we have uh i for index w for 1636 01:02:29,200 --> 01:02:33,119 working tree but you can also have c for 1637 01:02:30,720 --> 01:02:33,119 commit 1638 01:02:33,280 --> 01:02:38,160 has your editor get integration failed 1639 01:02:35,680 --> 01:02:40,160 in a merge conflict try get merge tool 1640 01:02:38,160 --> 01:02:42,079 this opens interactive three-way diff 1641 01:02:40,160 --> 01:02:44,160 tools that you have installed 1642 01:02:42,079 --> 01:02:46,720 uh here are a few examples that i've 1643 01:02:44,160 --> 01:02:48,640 used and you can also 1644 01:02:46,720 --> 01:02:50,559 use a diff tool instead of staring at 1645 01:02:48,640 --> 01:02:54,319 git diff 1646 01:02:50,559 --> 01:02:54,319 to open these same tools 1647 01:02:55,680 --> 01:02:59,760 interactive rebase is great you can chop 1648 01:02:57,680 --> 01:03:02,000 and change your history however you want 1649 01:02:59,760 --> 01:03:04,079 here's an example listing you you get 1650 01:03:02,000 --> 01:03:06,400 when you run rebase i 1651 01:03:04,079 --> 01:03:08,720 however you might not need interactive 1652 01:03:06,400 --> 01:03:11,280 rebase 1653 01:03:08,720 --> 01:03:12,480 git rebase auto squash will find 1654 01:03:11,280 --> 01:03:14,400 formatted 1655 01:03:12,480 --> 01:03:17,039 commit messages generated by the fix up 1656 01:03:14,400 --> 01:03:19,200 and squash options to git commit 1657 01:03:17,039 --> 01:03:22,400 these do the same thing as the actions 1658 01:03:19,200 --> 01:03:26,880 of the same name in rebate i 1659 01:03:22,400 --> 01:03:29,680 and you also have the amend 1660 01:03:26,880 --> 01:03:31,920 option to to fix up as well which is 1661 01:03:29,680 --> 01:03:36,319 basically fix up and reword 1662 01:03:31,920 --> 01:03:36,319 much like git commit dash dash admit 1663 01:03:36,480 --> 01:03:40,960 have you ever bought a rebase don't 1664 01:03:38,720 --> 01:03:42,079 worry git makes it really hard to lose 1665 01:03:40,960 --> 01:03:43,920 commitments 1666 01:03:42,079 --> 01:03:46,319 git appends to a log whenever something 1667 01:03:43,920 --> 01:03:49,280 happens you can view this with a git ref 1668 01:03:46,319 --> 01:03:52,640 log or you can refer to entries in this 1669 01:03:49,280 --> 01:03:54,799 log using syntax uh wherever you can use 1670 01:03:52,640 --> 01:03:56,640 a commit hash 1671 01:03:54,799 --> 01:03:57,520 you can count from the most recent or 1672 01:03:56,640 --> 01:03:59,440 you can 1673 01:03:57,520 --> 01:04:02,000 specify dates as well 1674 01:03:59,440 --> 01:04:03,440 this defaults to head which is uh what 1675 01:04:02,000 --> 01:04:06,000 you've checked out as well if you don't 1676 01:04:03,440 --> 01:04:10,559 specify a a branch name 1677 01:04:06,000 --> 01:04:12,160 uh see dang it git for more oh no tips 1678 01:04:10,559 --> 01:04:15,200 thank you here's a link to my slides 1679 01:04:12,160 --> 01:04:18,000 also canva is hiring 1680 01:04:15,200 --> 01:04:22,160 thanks for that dave oh 1681 01:04:18,000 --> 01:04:23,920 uh up next we have paul who uh only 1682 01:04:22,160 --> 01:04:25,520 received his uh 1683 01:04:23,920 --> 01:04:27,520 his acceptance at the last minute i 1684 01:04:25,520 --> 01:04:29,039 apologize for my email configuration 1685 01:04:27,520 --> 01:04:31,359 being terrible 1686 01:04:29,039 --> 01:04:31,359 uh 1687 01:04:31,520 --> 01:04:34,400 let's uh let's go 1688 01:04:34,480 --> 01:04:39,280 uh hello yeah so hopefully you can see 1689 01:04:36,480 --> 01:04:41,039 that slide set um 1690 01:04:39,280 --> 01:04:42,880 yeah this is a link to an electric 1691 01:04:41,039 --> 01:04:44,559 article it says tesla is collecting 1692 01:04:42,880 --> 01:04:47,039 insane amounts of data from its full 1693 01:04:44,559 --> 01:04:50,000 self-driving test fleet for in fact it's 1694 01:04:47,039 --> 01:04:52,240 also collecting uh video data from its 1695 01:04:50,000 --> 01:04:54,640 normal fleet which numbers about a 1696 01:04:52,240 --> 01:04:56,559 million cars um 1697 01:04:54,640 --> 01:05:00,240 what happens is um 1698 01:04:56,559 --> 01:05:02,319 to um to explain things i um have skin 1699 01:05:00,240 --> 01:05:03,440 in the game i actually own a tesla model 1700 01:05:02,319 --> 01:05:06,480 3 1701 01:05:03,440 --> 01:05:09,359 so i'm following this this basically all 1702 01:05:06,480 --> 01:05:12,400 the time to see exactly what's going on 1703 01:05:09,359 --> 01:05:15,200 but what happens is that uh 1704 01:05:12,400 --> 01:05:17,119 the tesla cars have a certain level of 1705 01:05:15,200 --> 01:05:19,359 automation either called autopilot or 1706 01:05:17,119 --> 01:05:22,000 full-self driving 1707 01:05:19,359 --> 01:05:23,680 and within that 1708 01:05:22,000 --> 01:05:25,280 they have a 1709 01:05:23,680 --> 01:05:26,960 training set up 1710 01:05:25,280 --> 01:05:28,720 with neural networks that they're 1711 01:05:26,960 --> 01:05:29,920 continually training on the next version 1712 01:05:28,720 --> 01:05:32,480 of software 1713 01:05:29,920 --> 01:05:34,640 and whenever they get to a point where 1714 01:05:32,480 --> 01:05:36,880 they are 1715 01:05:34,640 --> 01:05:38,480 have some misbehavior that they're 1716 01:05:36,880 --> 01:05:39,920 trying to cure 1717 01:05:38,480 --> 01:05:41,680 they do something called querying the 1718 01:05:39,920 --> 01:05:42,799 fleet they actually ask the fleet to 1719 01:05:41,680 --> 01:05:45,599 send 1720 01:05:42,799 --> 01:05:48,319 video data back to 1721 01:05:45,599 --> 01:05:51,280 the mothership uh in order for that to 1722 01:05:48,319 --> 01:05:53,760 be incorporated into the next neural net 1723 01:05:51,280 --> 01:05:54,960 yay for neural networks and machine 1724 01:05:53,760 --> 01:05:58,720 learning 1725 01:05:54,960 --> 01:06:01,039 the problem with that is that that data 1726 01:05:58,720 --> 01:06:03,520 could potentially be used 1727 01:06:01,039 --> 01:06:06,799 either to identify people or at least 1728 01:06:03,520 --> 01:06:10,000 identify cars or possibly just probe 1729 01:06:06,799 --> 01:06:13,119 into areas which are restricted 1730 01:06:10,000 --> 01:06:15,359 in other words there's definitely issues 1731 01:06:13,119 --> 01:06:17,760 surrounding privacy 1732 01:06:15,359 --> 01:06:18,559 and every time i've queried this privacy 1733 01:06:17,760 --> 01:06:20,799 issue 1734 01:06:18,559 --> 01:06:23,599 basically on youtube 1735 01:06:20,799 --> 01:06:25,440 i'm i'm staring into the void as to what 1736 01:06:23,599 --> 01:06:26,799 it is that's actually being done about 1737 01:06:25,440 --> 01:06:28,960 it 1738 01:06:26,799 --> 01:06:30,960 so a number of things could happen to 1739 01:06:28,960 --> 01:06:32,799 alleviate it to some extent like for 1740 01:06:30,960 --> 01:06:35,520 example having data centers in different 1741 01:06:32,799 --> 01:06:37,839 countries so you don't ship video data 1742 01:06:35,520 --> 01:06:39,760 off to somewhere else 1743 01:06:37,839 --> 01:06:41,039 but i think the ultimate cure would be 1744 01:06:39,760 --> 01:06:43,760 to have 1745 01:06:41,039 --> 01:06:46,079 the neural network in each car 1746 01:06:43,760 --> 01:06:50,640 be able to respond to queries for video 1747 01:06:46,079 --> 01:06:52,720 data in such a way as it obfuscates 1748 01:06:50,640 --> 01:06:55,359 anything which could be used to identify 1749 01:06:52,720 --> 01:06:58,240 people such as people's faces 1750 01:06:55,359 --> 01:07:00,079 or license plate numbers or any of that 1751 01:06:58,240 --> 01:07:02,480 sort of thing 1752 01:07:00,079 --> 01:07:05,039 but so far i haven't seen 1753 01:07:02,480 --> 01:07:08,079 anybody refer to this as 1754 01:07:05,039 --> 01:07:10,960 as a problem specifically with tesla i 1755 01:07:08,079 --> 01:07:14,079 have seen some research 1756 01:07:10,960 --> 01:07:17,359 in terms of the intersection between 1757 01:07:14,079 --> 01:07:21,440 data privacy and video data for training 1758 01:07:17,359 --> 01:07:22,559 data in a neural network so if anybody 1759 01:07:21,440 --> 01:07:24,880 has 1760 01:07:22,559 --> 01:07:28,079 any leads on who is doing that sort of 1761 01:07:24,880 --> 01:07:31,440 research in australia or or elsewhere 1762 01:07:28,079 --> 01:07:34,000 even please uh please hit me up at paul 1763 01:07:31,440 --> 01:07:37,520 leopardy gmail.com 1764 01:07:34,000 --> 01:07:39,440 and uh that's it thanks very much 1765 01:07:37,520 --> 01:07:40,400 thanks for that paul 1766 01:07:39,440 --> 01:07:42,480 i 1767 01:07:40,400 --> 01:07:44,160 always appreciate hearing about teslas 1768 01:07:42,480 --> 01:07:47,680 from tesla owners 1769 01:07:44,160 --> 01:07:53,039 up next we have peter who is going to be 1770 01:07:47,680 --> 01:07:55,200 uh asking us a very very vital question 1771 01:07:53,039 --> 01:07:57,119 thank you very much chris uh hi everyone 1772 01:07:55,200 --> 01:07:58,640 i'm peter and this 1773 01:07:57,119 --> 01:08:00,960 is my alarm clock 1774 01:07:58,640 --> 01:08:02,799 now unfortunately in order to give this 1775 01:08:00,960 --> 01:08:04,480 uh lightning talk i had to unplug my 1776 01:08:02,799 --> 01:08:06,400 alarm clock and plug it in near my 1777 01:08:04,480 --> 01:08:08,559 computer which means it's lost the time 1778 01:08:06,400 --> 01:08:10,160 so my important question is 1779 01:08:08,559 --> 01:08:12,319 can you please help me to set the time 1780 01:08:10,160 --> 01:08:13,200 on my alarm clock i'm sure that between 1781 01:08:12,319 --> 01:08:15,760 me 1782 01:08:13,200 --> 01:08:16,560 and several hundred of the most uh tech 1783 01:08:15,760 --> 01:08:18,560 uh 1784 01:08:16,560 --> 01:08:20,640 knowledgeable people in the world will 1785 01:08:18,560 --> 01:08:22,239 be able to work this out so i'll give 1786 01:08:20,640 --> 01:08:23,679 you a quick rundown there's seven 1787 01:08:22,239 --> 01:08:25,120 buttons so that should be pretty easy to 1788 01:08:23,679 --> 01:08:28,480 work out what everyone does they are 1789 01:08:25,120 --> 01:08:31,839 labeled off slash fm slash am min slash 1790 01:08:28,480 --> 01:08:34,880 down a l1 slash roll minus snooze slash 1791 01:08:31,839 --> 01:08:36,480 sleep al2 slash vol plus 1792 01:08:34,880 --> 01:08:39,120 hour slash up 1793 01:08:36,480 --> 01:08:41,040 and time slash m plus 1794 01:08:39,120 --> 01:08:42,560 now i'm sure that's going to be really 1795 01:08:41,040 --> 01:08:45,520 easy to uh 1796 01:08:42,560 --> 01:08:47,440 to uh configure so uh whenever i try and 1797 01:08:45,520 --> 01:08:48,880 do something please just like shout out 1798 01:08:47,440 --> 01:08:50,640 what you think the button i should press 1799 01:08:48,880 --> 01:08:51,759 is and if you get it right you can feel 1800 01:08:50,640 --> 01:08:52,480 smart 1801 01:08:51,759 --> 01:08:54,560 so 1802 01:08:52,480 --> 01:08:56,000 let's start by setting the time so uh 1803 01:08:54,560 --> 01:08:57,359 i've done this before on other clocks so 1804 01:08:56,000 --> 01:08:59,199 i know that to set the time you press 1805 01:08:57,359 --> 01:09:01,759 the time button first so let's press the 1806 01:08:59,199 --> 01:09:03,040 time button hey it stopped uh 1807 01:09:01,759 --> 01:09:05,600 it stopped flashing so it's done 1808 01:09:03,040 --> 01:09:07,520 something let's try the hour button or 1809 01:09:05,600 --> 01:09:09,199 the minute button that's going out uh no 1810 01:09:07,520 --> 01:09:11,679 hour minute no 1811 01:09:09,199 --> 01:09:14,000 hour and minute didn't do anything 1812 01:09:11,679 --> 01:09:16,319 i'm going to try the time button again 1813 01:09:14,000 --> 01:09:17,279 let's see what happens time 1814 01:09:16,319 --> 01:09:19,359 nothing 1815 01:09:17,279 --> 01:09:20,640 hour nothing minute 1816 01:09:19,359 --> 01:09:23,199 nothing 1817 01:09:20,640 --> 01:09:25,199 all right if you guessed do a long press 1818 01:09:23,199 --> 01:09:26,960 of the time button 1819 01:09:25,199 --> 01:09:28,560 hey it started flashing now i'm going to 1820 01:09:26,960 --> 01:09:29,839 be able to do something 1821 01:09:28,560 --> 01:09:31,520 all right long pressure that the time 1822 01:09:29,839 --> 01:09:34,880 button was oh it stopped flashing all 1823 01:09:31,520 --> 01:09:38,400 right minute no hour no all right 1824 01:09:34,880 --> 01:09:38,400 long press of the time button 1825 01:09:38,880 --> 01:09:43,040 is it working oh long press hey there we 1826 01:09:41,359 --> 01:09:45,040 go started flashing press minutes 1827 01:09:43,040 --> 01:09:47,040 straight away how australia hey it works 1828 01:09:45,040 --> 01:09:48,239 all right the time is now 114 i don't 1829 01:09:47,040 --> 01:09:50,159 make the rules if you don't believe me 1830 01:09:48,239 --> 01:09:51,920 check my clock 1831 01:09:50,159 --> 01:09:54,960 so now that we have the time set we are 1832 01:09:51,920 --> 01:09:58,000 going to try and tune the radio so i 1833 01:09:54,960 --> 01:09:59,840 have off slash fm slash am so i'm going 1834 01:09:58,000 --> 01:10:01,440 to try and put us into fm let's see what 1835 01:09:59,840 --> 01:10:02,400 happens 1836 01:10:01,440 --> 01:10:04,960 fm 1837 01:10:02,400 --> 01:10:08,960 we have a frequency oh we have static 1838 01:10:04,960 --> 01:10:10,080 let's try up to tune it 1839 01:10:08,960 --> 01:10:11,840 oh 1840 01:10:10,080 --> 01:10:13,520 all right i'm doing a long press to see 1841 01:10:11,840 --> 01:10:15,440 if it'll automatically tune and i don't 1842 01:10:13,520 --> 01:10:16,719 have to try and guess what frequency i 1843 01:10:15,440 --> 01:10:18,400 want 1844 01:10:16,719 --> 01:10:21,440 let's see 1845 01:10:18,400 --> 01:10:23,280 do we have a station 1846 01:10:21,440 --> 01:10:25,280 hey we do all right let's turn it off 1847 01:10:23,280 --> 01:10:27,040 now uh there's an off button i'm 1848 01:10:25,280 --> 01:10:28,960 pressing it 1849 01:10:27,040 --> 01:10:31,520 and it sent me to am 1850 01:10:28,960 --> 01:10:34,080 well it is off slash fm am so let's try 1851 01:10:31,520 --> 01:10:36,960 it again to get to off 1852 01:10:34,080 --> 01:10:39,199 uh took me back to fm 1853 01:10:36,960 --> 01:10:40,560 all right if your guess was do a long 1854 01:10:39,199 --> 01:10:42,480 press of the off button you got it 1855 01:10:40,560 --> 01:10:44,400 correct congratulations 1856 01:10:42,480 --> 01:10:46,880 all right we have the time set we have 1857 01:10:44,400 --> 01:10:48,719 the radio set now we are going to set 1858 01:10:46,880 --> 01:10:51,040 the alarm so i'm going to press the 1859 01:10:48,719 --> 01:10:52,480 alarm one a little light came on i'm 1860 01:10:51,040 --> 01:10:55,760 going to press it again because i want a 1861 01:10:52,480 --> 01:10:57,360 radio alarm and i'm going to set it for 1862 01:10:55,760 --> 01:10:59,280 a one 1863 01:10:57,360 --> 01:11:01,360 minute and 1864 01:10:59,280 --> 01:11:02,640 i think we'll go for i can't remember 1865 01:11:01,360 --> 01:11:04,320 what time it said on my clock i should 1866 01:11:02,640 --> 01:11:07,360 have checked let's go for 11 past and 1867 01:11:04,320 --> 01:11:07,360 see if that looks right 1868 01:11:07,520 --> 01:11:11,280 oh the current time is 15 past all right 1869 01:11:09,360 --> 01:11:12,719 let's change that to 16 pass so that it 1870 01:11:11,280 --> 01:11:15,520 actually goes off while the lightning 1871 01:11:12,719 --> 01:11:15,520 talk is happening 1872 01:11:15,920 --> 01:11:20,080 there we go we have an alarm set for 16 1873 01:11:18,640 --> 01:11:21,520 past 1874 01:11:20,080 --> 01:11:23,440 so hey 1875 01:11:21,520 --> 01:11:25,120 good i've got a minute 30 so that will 1876 01:11:23,440 --> 01:11:26,480 probably go off with enough time to 1877 01:11:25,120 --> 01:11:28,239 spare 1878 01:11:26,480 --> 01:11:29,840 so i got this alarm clock a few years 1879 01:11:28,239 --> 01:11:31,760 back because i really wanted one that 1880 01:11:29,840 --> 01:11:33,040 had red colored numbers on it because 1881 01:11:31,760 --> 01:11:34,880 i've heard that having red lights in 1882 01:11:33,040 --> 01:11:37,040 your bedroom is less disruptive for your 1883 01:11:34,880 --> 01:11:39,040 sleep than having any other color 1884 01:11:37,040 --> 01:11:40,719 and i gotta say it certainly has red 1885 01:11:39,040 --> 01:11:42,000 lights and i really wish i'd just 1886 01:11:40,719 --> 01:11:43,600 actually tried out all the buttons to 1887 01:11:42,000 --> 01:11:45,120 see how to program it first because this 1888 01:11:43,600 --> 01:11:47,840 thing has been confusing 1889 01:11:45,120 --> 01:11:49,360 hey the alarm came off this is great it 1890 01:11:47,840 --> 01:11:51,280 showed me the frequency let's turn it 1891 01:11:49,360 --> 01:11:53,760 off now i remember how to do that it's a 1892 01:11:51,280 --> 01:11:55,920 long press of one 1893 01:11:53,760 --> 01:11:58,880 gonna hold that down and we are going to 1894 01:11:55,920 --> 01:12:00,480 see that the alarm has turned off 1895 01:11:58,880 --> 01:12:02,239 and oh it stayed off all right that's a 1896 01:12:00,480 --> 01:12:03,600 surprise i spent like an hour trying to 1897 01:12:02,239 --> 01:12:05,120 work out how to make this thing not 1898 01:12:03,600 --> 01:12:06,400 always work because it's extremely 1899 01:12:05,120 --> 01:12:08,159 unreliable 1900 01:12:06,400 --> 01:12:09,760 uh sometimes when you do a long press of 1901 01:12:08,159 --> 01:12:12,880 the off button it turns off and then 1902 01:12:09,760 --> 01:12:15,840 turns on again and i get really confused 1903 01:12:12,880 --> 01:12:17,360 but we got there in the end so 1904 01:12:15,840 --> 01:12:19,120 back to me 1905 01:12:17,360 --> 01:12:21,840 thank you very much for helping me set 1906 01:12:19,120 --> 01:12:23,440 my clock i hope you uh had an easy time 1907 01:12:21,840 --> 01:12:26,480 of uh setting the time tuning the radio 1908 01:12:23,440 --> 01:12:29,199 and setting the alarm the lesson here is 1909 01:12:26,480 --> 01:12:31,600 if you are ever uh trying to design a 1910 01:12:29,199 --> 01:12:33,360 user interface for something please do a 1911 01:12:31,600 --> 01:12:35,280 test of your user interface get your 1912 01:12:33,360 --> 01:12:36,800 actual users to try it out see what they 1913 01:12:35,280 --> 01:12:38,560 think and ask them when you have just 1914 01:12:36,800 --> 01:12:40,080 woken up do you want to see the 1915 01:12:38,560 --> 01:12:41,840 frequency of the station you've tuned to 1916 01:12:40,080 --> 01:12:43,760 or do you care about the time i'm not 1917 01:12:41,840 --> 01:12:46,400 sure ask your users 1918 01:12:43,760 --> 01:12:48,560 thank you very much chris and lily 1919 01:12:46,400 --> 01:12:50,800 thanks for that peter i 1920 01:12:48,560 --> 01:12:52,880 i did end up yanking my earpiece out of 1921 01:12:50,800 --> 01:12:53,679 my ear when that am static came on it 1922 01:12:52,880 --> 01:12:55,600 was 1923 01:12:53,679 --> 01:12:58,320 the most painful lightning talk i've 1924 01:12:55,600 --> 01:13:00,560 experienced at this point but uh nothing 1925 01:12:58,320 --> 01:13:02,080 like the pain of actually trying to set 1926 01:13:00,560 --> 01:13:04,880 that thing uh 1927 01:13:02,080 --> 01:13:06,719 yeah i'm glad that there was a very good 1928 01:13:04,880 --> 01:13:08,480 lesson at the end of this because 1929 01:13:06,719 --> 01:13:10,080 otherwise it was just going to be five 1930 01:13:08,480 --> 01:13:12,960 minutes of let me show you this 1931 01:13:10,080 --> 01:13:15,520 incredibly cursed clock which i mean is 1932 01:13:12,960 --> 01:13:16,800 also entertaining in and of its own 1933 01:13:15,520 --> 01:13:20,640 right so 1934 01:13:16,800 --> 01:13:23,679 anyway next up we have caitlin mcleod 1935 01:13:20,640 --> 01:13:25,520 who is going to teach us some lessons 1936 01:13:23,679 --> 01:13:27,199 about speed running 1937 01:13:25,520 --> 01:13:29,040 when they were working on this talk we 1938 01:13:27,199 --> 01:13:31,760 were chatting in the discord and they 1939 01:13:29,040 --> 01:13:33,920 mentioned to me wait libby 1940 01:13:31,760 --> 01:13:36,159 i can't swear in these lightning talks 1941 01:13:33,920 --> 01:13:37,440 to which i responded uh 1942 01:13:36,159 --> 01:13:40,000 and they said 1943 01:13:37,440 --> 01:13:42,080 libby this is suddenly very difficult i 1944 01:13:40,000 --> 01:13:43,360 did say the f word when i said that time 1945 01:13:42,080 --> 01:13:44,880 starts 1946 01:13:43,360 --> 01:13:47,040 all right time starts hello i'm kate 1947 01:13:44,880 --> 01:13:48,320 kate latte oh caitlin uh i use shio they 1948 01:13:47,040 --> 01:13:50,800 pronouns both are good today we're 1949 01:13:48,320 --> 01:13:52,480 having speedrun lessons hello uh if you 1950 01:13:50,800 --> 01:13:54,400 haven't played celeste before this is a 1951 01:13:52,480 --> 01:13:56,239 game about an anxious trans girl called 1952 01:13:54,400 --> 01:13:58,880 madeline who finds an ancient abandoned 1953 01:13:56,239 --> 01:14:00,159 cursed mountain and uh wins 1954 01:13:58,880 --> 01:14:01,280 uh so some of the lessons that i've 1955 01:14:00,159 --> 01:14:03,520 learned while speed running this game 1956 01:14:01,280 --> 01:14:05,040 for the past like five months uh are as 1957 01:14:03,520 --> 01:14:06,719 follows 1958 01:14:05,040 --> 01:14:09,280 heck okay 1959 01:14:06,719 --> 01:14:09,280 great start 1960 01:14:09,440 --> 01:14:12,800 oh no 1961 01:14:11,280 --> 01:14:14,400 oh no 1962 01:14:12,800 --> 01:14:16,080 uh the first one that i want to really 1963 01:14:14,400 --> 01:14:18,239 talk about is to be honest about what 1964 01:14:16,080 --> 01:14:20,640 drives you so um myself i'm a very 1965 01:14:18,239 --> 01:14:21,840 people and community focused person 1966 01:14:20,640 --> 01:14:23,280 uh but there are a lot of people on 1967 01:14:21,840 --> 01:14:24,800 speedrunning who are very competitive 1968 01:14:23,280 --> 01:14:26,400 and they just wanna like get better at 1969 01:14:24,800 --> 01:14:27,360 the game they wanna show off how cool 1970 01:14:26,400 --> 01:14:29,440 they are 1971 01:14:27,360 --> 01:14:31,199 and they want to beat their friends uh 1972 01:14:29,440 --> 01:14:33,440 that's not always sustainable 1973 01:14:31,199 --> 01:14:34,400 um there's a lot of people who burn out 1974 01:14:33,440 --> 01:14:36,239 because 1975 01:14:34,400 --> 01:14:38,159 they just can't beat the people who are 1976 01:14:36,239 --> 01:14:39,840 very good at the game 1977 01:14:38,159 --> 01:14:41,120 um but there's also a lot of people 1978 01:14:39,840 --> 01:14:42,960 who've stayed in there for a long time 1979 01:14:41,120 --> 01:14:45,920 so that's pretty nice 1980 01:14:42,960 --> 01:14:45,920 um the oh 1981 01:14:46,719 --> 01:14:50,239 i'm just gonna get past the screen there 1982 01:14:48,400 --> 01:14:52,159 we go 1983 01:14:50,239 --> 01:14:54,640 the other big one uh that i really love 1984 01:14:52,159 --> 01:14:56,960 about celeste is and about python as 1985 01:14:54,640 --> 01:14:58,560 well is how welcoming communities really 1986 01:14:56,960 --> 01:15:00,560 bring in fresh blood 1987 01:14:58,560 --> 01:15:02,800 um 1988 01:15:00,560 --> 01:15:04,320 you don't really think about it uh 1989 01:15:02,800 --> 01:15:06,560 when you you're involved in these 1990 01:15:04,320 --> 01:15:08,320 communities for so long but compared to 1991 01:15:06,560 --> 01:15:09,520 other speed running communities and 1992 01:15:08,320 --> 01:15:11,440 especially 1993 01:15:09,520 --> 01:15:13,840 um celeste is really friendly when i 1994 01:15:11,440 --> 01:15:14,960 started playing on twitch um 1995 01:15:13,840 --> 01:15:18,560 and when other people started 1996 01:15:14,960 --> 01:15:20,560 speedrunning on twitch uh before i did 1997 01:15:18,560 --> 01:15:22,320 uh speedrunners just hang out in new 1998 01:15:20,560 --> 01:15:24,560 speedrunners chats and tell them like 1999 01:15:22,320 --> 01:15:27,040 cool strats and it's really cute 2000 01:15:24,560 --> 01:15:28,719 um and python we've got a lot of good oh 2001 01:15:27,040 --> 01:15:30,560 i'm i'm quite nervous i'm messing up a 2002 01:15:28,719 --> 01:15:32,480 lot 2003 01:15:30,560 --> 01:15:34,320 we've got a lot of good uh ways to get 2004 01:15:32,480 --> 01:15:35,920 new people on to the community and the 2005 01:15:34,320 --> 01:15:37,280 best thing about that is that even 2006 01:15:35,920 --> 01:15:39,280 though people are burning out and like 2007 01:15:37,280 --> 01:15:41,360 moving out into other areas they've got 2008 01:15:39,280 --> 01:15:43,280 fresh people coming in and playing with 2009 01:15:41,360 --> 01:15:45,040 new strats and coming up with new ideas 2010 01:15:43,280 --> 01:15:46,320 about how to save time in the game and 2011 01:15:45,040 --> 01:15:47,840 that's really good 2012 01:15:46,320 --> 01:15:49,280 it's really healthy to have that kind of 2013 01:15:47,840 --> 01:15:50,719 community and i'm really glad that we've 2014 01:15:49,280 --> 01:15:53,600 got that 2015 01:15:50,719 --> 01:15:55,360 the next lesson that we have is 2016 01:15:53,600 --> 01:15:57,120 uh practice to practice and practice 2017 01:15:55,360 --> 01:15:58,560 some more oh my cat really wants to 2018 01:15:57,120 --> 01:16:00,960 leave the room okay 2019 01:15:58,560 --> 01:16:00,960 you can't 2020 01:16:01,440 --> 01:16:04,719 uh 2021 01:16:03,040 --> 01:16:06,320 and celeste like 2022 01:16:04,719 --> 01:16:07,520 a lot of this is muscle memory right you 2023 01:16:06,320 --> 01:16:08,880 really need to get it into your muscle 2024 01:16:07,520 --> 01:16:10,159 memory you really need to learn the 2025 01:16:08,880 --> 01:16:12,400 strats 2026 01:16:10,159 --> 01:16:13,120 and learn to get better at the game 2027 01:16:12,400 --> 01:16:14,880 and 2028 01:16:13,120 --> 01:16:16,400 if you're 2029 01:16:14,880 --> 01:16:18,159 i'm sorry if my camera goes out he's 2030 01:16:16,400 --> 01:16:21,840 just nudged the cable 2031 01:16:18,159 --> 01:16:21,840 oh really mickey 2032 01:16:21,920 --> 01:16:26,320 if you are uh 2033 01:16:24,320 --> 01:16:28,080 burnt out from practicing the same level 2034 01:16:26,320 --> 01:16:31,199 again and again and again and or you're 2035 01:16:28,080 --> 01:16:32,480 burnt out from only having one focus uh 2036 01:16:31,199 --> 01:16:34,800 at work 2037 01:16:32,480 --> 01:16:37,199 uh and in your uh programming things 2038 01:16:34,800 --> 01:16:39,520 it's good to try and practice something 2039 01:16:37,199 --> 01:16:40,719 else uh there are other categories 2040 01:16:39,520 --> 01:16:42,400 there are other tools you could give 2041 01:16:40,719 --> 01:16:43,920 machine learning a try for example in 2042 01:16:42,400 --> 01:16:45,199 python they're all options that you've 2043 01:16:43,920 --> 01:16:47,600 got 2044 01:16:45,199 --> 01:16:49,679 um so just yeah have it have an eye on 2045 01:16:47,600 --> 01:16:51,600 it practice is really good and it's 2046 01:16:49,679 --> 01:16:53,280 really good to be able to spend time on 2047 01:16:51,600 --> 01:16:55,920 the things that you love 2048 01:16:53,280 --> 01:16:55,920 but also 2049 01:16:56,800 --> 01:17:00,719 there we go 2050 01:16:58,800 --> 01:17:03,120 uh you really want to keep an eye on 2051 01:17:00,719 --> 01:17:04,719 your uh like 2052 01:17:03,120 --> 01:17:06,719 how you're feeling about the thing if 2053 01:17:04,719 --> 01:17:08,000 it's feeling like a drag 2054 01:17:06,719 --> 01:17:09,280 then you're not going to be as effective 2055 01:17:08,000 --> 01:17:10,800 at it 2056 01:17:09,280 --> 01:17:12,719 and obviously celeste is a video game 2057 01:17:10,800 --> 01:17:14,800 right like it's designed to be fun 2058 01:17:12,719 --> 01:17:15,760 uh instead of a troll or something that 2059 01:17:14,800 --> 01:17:18,320 you missed 2060 01:17:15,760 --> 01:17:18,320 heck me 2061 01:17:19,440 --> 01:17:22,880 thank you okay 2062 01:17:21,520 --> 01:17:25,120 it's something that you necessarily do 2063 01:17:22,880 --> 01:17:26,960 for money um 2064 01:17:25,120 --> 01:17:29,120 but that can be it another thing that 2065 01:17:26,960 --> 01:17:30,960 i've really loved about celeste is how 2066 01:17:29,120 --> 01:17:32,960 generous the community is 2067 01:17:30,960 --> 01:17:34,800 not just with their time but also with 2068 01:17:32,960 --> 01:17:37,600 the money there's a lot of speed running 2069 01:17:34,800 --> 01:17:39,760 marathons that raise a lot of cash for 2070 01:17:37,600 --> 01:17:42,239 important charities like trans lifeline 2071 01:17:39,760 --> 01:17:44,719 transliberation one minute 2072 01:17:42,239 --> 01:17:46,640 one minute oh that's fine we might 2073 01:17:44,719 --> 01:17:48,560 finish the level we might not i did mess 2074 01:17:46,640 --> 01:17:50,800 up a bit 2075 01:17:48,560 --> 01:17:50,800 oh 2076 01:17:51,520 --> 01:17:56,280 i'm just gonna focus for this screen oh 2077 01:17:53,280 --> 01:17:56,280 no 2078 01:17:59,199 --> 01:18:03,360 um but also collaboration has been 2079 01:18:00,960 --> 01:18:05,120 really important in this community 2080 01:18:03,360 --> 01:18:06,960 i was part of a celeste speedrunning 2081 01:18:05,120 --> 01:18:09,600 tournament um which had really 2082 01:18:06,960 --> 01:18:12,000 impressive technical capabilities for 2083 01:18:09,600 --> 01:18:14,159 restreaming so many different people and 2084 01:18:12,000 --> 01:18:15,840 recording their runs and their races 2085 01:18:14,159 --> 01:18:16,719 we're gonna finish 2086 01:18:15,840 --> 01:18:18,880 um 2087 01:18:16,719 --> 01:18:20,800 the most important uh speedrunning tip 2088 01:18:18,880 --> 01:18:22,560 that i've got for you all however is to 2089 01:18:20,800 --> 01:18:23,840 just fast bubble every single bubble so 2090 01:18:22,560 --> 01:18:26,400 you don't lose your speed thank you very 2091 01:18:23,840 --> 01:18:27,920 much that was a 407 within 6 seconds of 2092 01:18:26,400 --> 01:18:29,040 my pv that's pretty good 2093 01:18:27,920 --> 01:18:30,880 and i just want to get to this part of 2094 01:18:29,040 --> 01:18:32,239 the cutscene 2095 01:18:30,880 --> 01:18:35,040 and this is theater falling down from a 2096 01:18:32,239 --> 01:18:35,040 cliff nine 2097 01:18:36,239 --> 01:18:41,280 we nailed it thank you very much 2098 01:18:38,960 --> 01:18:43,760 okay thank you for that caitlyn 2099 01:18:41,280 --> 01:18:46,960 hey it's time for our last lightning 2100 01:18:43,760 --> 01:18:50,000 talk uh after caitlyn interrupted our 2101 01:18:46,960 --> 01:18:52,320 stream of peter and paul we've now got 2102 01:18:50,000 --> 01:18:53,360 marius who's going to be telling us 2103 01:18:52,320 --> 01:18:55,760 about 2104 01:18:53,360 --> 01:18:57,440 something extremely important with 2105 01:18:55,760 --> 01:19:00,080 tensorflow 2106 01:18:57,440 --> 01:19:02,800 yeah hi um i'm coming to you from diary 2107 01:19:00,080 --> 01:19:04,640 country in southwest sydney today 2108 01:19:02,800 --> 01:19:06,640 um yeah and i was just going to talk 2109 01:19:04,640 --> 01:19:08,640 people through my latest you know 2110 01:19:06,640 --> 01:19:10,239 weekend projects my weekend projects 2111 01:19:08,640 --> 01:19:11,679 never take a weekend they're always a 2112 01:19:10,239 --> 01:19:14,000 bit longer 2113 01:19:11,679 --> 01:19:16,000 but basically this was uh the idea of 2114 01:19:14,000 --> 01:19:17,679 generating metal band names using 2115 01:19:16,000 --> 01:19:20,080 machine learning 2116 01:19:17,679 --> 01:19:22,719 so using python and tensorflow 2117 01:19:20,080 --> 01:19:24,960 um yeah so i'm a data scientist at work 2118 01:19:22,719 --> 01:19:26,800 and a metal fan at home 2119 01:19:24,960 --> 01:19:28,800 um and i thought metal band names were 2120 01:19:26,800 --> 01:19:31,040 kind of a fun thing to play around with 2121 01:19:28,800 --> 01:19:33,199 with some kind of data science tools 2122 01:19:31,040 --> 01:19:35,120 because if you're a fan of the genre you 2123 01:19:33,199 --> 01:19:37,679 sort of know that there's kind of some 2124 01:19:35,120 --> 01:19:39,679 correlation between band names and all 2125 01:19:37,679 --> 01:19:42,640 these hyper-specific sub-genres that 2126 01:19:39,679 --> 01:19:45,280 people use like atmospheric black metal 2127 01:19:42,640 --> 01:19:46,880 um but it's not really easy to pin down 2128 01:19:45,280 --> 01:19:49,360 so it's sort of fun to play around in 2129 01:19:46,880 --> 01:19:51,679 that space and see if you can kind of 2130 01:19:49,360 --> 01:19:52,960 approximate that kind of fuzzy feeling 2131 01:19:51,679 --> 01:19:55,600 of how some 2132 01:19:52,960 --> 01:19:56,400 band names are sort of suited to some 2133 01:19:55,600 --> 01:19:58,880 um 2134 01:19:56,400 --> 01:20:01,520 certain genres so i think you know blood 2135 01:19:58,880 --> 01:20:04,719 incantation great death metal band name 2136 01:20:01,520 --> 01:20:06,320 um they love these four syllable words 2137 01:20:04,719 --> 01:20:08,080 but yeah some of the other things are a 2138 01:20:06,320 --> 01:20:10,639 little bit harder to pin down you can't 2139 01:20:08,080 --> 01:20:12,719 necessarily spell out rules for why 2140 01:20:10,639 --> 01:20:14,880 bands are called certain things you just 2141 01:20:12,719 --> 01:20:17,280 sort of know it when you see them 2142 01:20:14,880 --> 01:20:18,800 um yeah so it's kind of a complex 2143 01:20:17,280 --> 01:20:21,199 influence space with some kind of 2144 01:20:18,800 --> 01:20:23,120 structure of correlation to it 2145 01:20:21,199 --> 01:20:24,960 there's lots of labeled examples to it 2146 01:20:23,120 --> 01:20:26,000 because there's obsessive people on the 2147 01:20:24,960 --> 01:20:27,840 internet 2148 01:20:26,000 --> 01:20:29,840 cataloging all these bands and listing 2149 01:20:27,840 --> 01:20:31,920 all their genres 2150 01:20:29,840 --> 01:20:34,159 you can check that the generative model 2151 01:20:31,920 --> 01:20:38,080 you're using is working based on kind of 2152 01:20:34,159 --> 01:20:40,639 the vibe and the wrong answers are funny 2153 01:20:38,080 --> 01:20:42,400 yeah and obviously even if your machine 2154 01:20:40,639 --> 01:20:44,639 learning model goes really wrong you're 2155 01:20:42,400 --> 01:20:46,960 probably not going to come up with this 2156 01:20:44,639 --> 01:20:48,960 they are a genuinely good band but the 2157 01:20:46,960 --> 01:20:50,719 name is kind of intentionally 2158 01:20:48,960 --> 01:20:51,920 unpronounceable 2159 01:20:50,719 --> 01:20:54,800 um 2160 01:20:51,920 --> 01:20:56,800 yeah so for my weekend projects in order 2161 01:20:54,800 --> 01:20:58,560 to actually get them done i try to keep 2162 01:20:56,800 --> 01:21:00,480 them simple and just 2163 01:20:58,560 --> 01:21:02,159 you know use what's already out there 2164 01:21:00,480 --> 01:21:03,199 rather than trying to do everything from 2165 01:21:02,159 --> 01:21:05,760 scratch 2166 01:21:03,199 --> 01:21:08,880 um so in this project you know there's 2167 01:21:05,760 --> 01:21:11,440 scraping the encyclopedia metallic 2168 01:21:08,880 --> 01:21:13,199 you can use scrape by or requests or 2169 01:21:11,440 --> 01:21:15,760 whatever else i think what ended up 2170 01:21:13,199 --> 01:21:17,840 working was just doing requests 2171 01:21:15,760 --> 01:21:20,719 it's really not a dev friendly site it 2172 01:21:17,840 --> 01:21:22,080 has no particularly nice api i sort of 2173 01:21:20,719 --> 01:21:24,880 had to look at scripts people had 2174 01:21:22,080 --> 01:21:26,800 already written and modify them a bit 2175 01:21:24,880 --> 01:21:29,600 and it was a bit of a nightmare 2176 01:21:26,800 --> 01:21:31,600 um and then yeah you've got numpy pandas 2177 01:21:29,600 --> 01:21:34,320 jupiter lab your kind of standard data 2178 01:21:31,600 --> 01:21:35,920 science tr um stack for 2179 01:21:34,320 --> 01:21:37,920 going through the initial data and kind 2180 01:21:35,920 --> 01:21:40,159 of figuring out what's there 2181 01:21:37,920 --> 01:21:41,840 um and then what really helped out this 2182 01:21:40,159 --> 01:21:43,760 off the ground is 2183 01:21:41,840 --> 01:21:46,320 someone's written this python package 2184 01:21:43,760 --> 01:21:48,800 called textgen rnn 2185 01:21:46,320 --> 01:21:50,639 and what it has is it has pre-trained 2186 01:21:48,800 --> 01:21:52,560 text generation models that have already 2187 01:21:50,639 --> 01:21:54,880 been trained on 2188 01:21:52,560 --> 01:21:57,520 huge batches of text so they sort of 2189 01:21:54,880 --> 01:21:59,760 already know how text works 2190 01:21:57,520 --> 01:22:01,520 yeah and training ml models from scratch 2191 01:21:59,760 --> 01:22:02,800 is not always fun it's not necessarily 2192 01:22:01,520 --> 01:22:04,239 something you want to be doing on your 2193 01:22:02,800 --> 01:22:05,840 weekends 2194 01:22:04,239 --> 01:22:06,960 and this gives you a really good base to 2195 01:22:05,840 --> 01:22:07,920 start from 2196 01:22:06,960 --> 01:22:10,159 um 2197 01:22:07,920 --> 01:22:11,920 and then the other thing that helped was 2198 01:22:10,159 --> 01:22:13,679 i wanted to put this up on the web so 2199 01:22:11,920 --> 01:22:15,840 people i could actually see it 2200 01:22:13,679 --> 01:22:18,560 and it turns out tensorflow models are 2201 01:22:15,840 --> 01:22:20,560 pretty easy to transfer from python um 2202 01:22:18,560 --> 01:22:23,199 once you've traded them up 2203 01:22:20,560 --> 01:22:25,440 and import them into tensorflow.js where 2204 01:22:23,199 --> 01:22:26,960 they can run in the browser 2205 01:22:25,440 --> 01:22:28,800 um 2206 01:22:26,960 --> 01:22:31,120 so what i actually ended up with for a 2207 01:22:28,800 --> 01:22:32,639 machine learning model that generates 2208 01:22:31,120 --> 01:22:34,880 metal band names 2209 01:22:32,639 --> 01:22:38,159 um it's mostly just using 2210 01:22:34,880 --> 01:22:40,400 texture and rnn's model architecture so 2211 01:22:38,159 --> 01:22:42,239 it's a recurrent neural network 2212 01:22:40,400 --> 01:22:43,440 using long short term memory for the 2213 01:22:42,239 --> 01:22:46,239 band names 2214 01:22:43,440 --> 01:22:49,120 um and then in order to kind of add in 2215 01:22:46,239 --> 01:22:51,280 this extra wrinkle of genre information 2216 01:22:49,120 --> 01:22:53,600 um we're feeding that in as kind of a 2217 01:22:51,280 --> 01:22:55,600 vector of binary values for each band 2218 01:22:53,600 --> 01:22:57,120 each band can have multiple different 2219 01:22:55,600 --> 01:22:58,639 genres 2220 01:22:57,120 --> 01:23:00,880 and that required some slight 2221 01:22:58,639 --> 01:23:03,120 modification of the text gen model 2222 01:23:00,880 --> 01:23:05,120 but that's sort of really one of what i 2223 01:23:03,120 --> 01:23:06,800 really wanted to focus on 2224 01:23:05,120 --> 01:23:09,679 so it's trained on all the bands that 2225 01:23:06,800 --> 01:23:11,520 were available in the encyclopedia motel 2226 01:23:09,679 --> 01:23:13,679 and it only needed five training epochs 2227 01:23:11,520 --> 01:23:15,840 to get good results 2228 01:23:13,679 --> 01:23:17,360 it's up on the web that was relatively 2229 01:23:15,840 --> 01:23:19,040 easy to do although i'm not great at 2230 01:23:17,360 --> 01:23:21,920 javascript 2231 01:23:19,040 --> 01:23:23,440 and what you end up with is some 2232 01:23:21,920 --> 01:23:25,679 code that generates potentially 2233 01:23:23,440 --> 01:23:27,040 offensive names so i'm not going to run 2234 01:23:25,679 --> 01:23:28,639 it live 2235 01:23:27,040 --> 01:23:30,480 but you should try it out for yourself 2236 01:23:28,639 --> 01:23:31,760 and it comes up with all these fun names 2237 01:23:30,480 --> 01:23:32,800 like this 2238 01:23:31,760 --> 01:23:35,199 um 2239 01:23:32,800 --> 01:23:37,360 yeah so that is playing around with 2240 01:23:35,199 --> 01:23:39,360 generative ml models at home and 2241 01:23:37,360 --> 01:23:40,800 something i'd encourage people to check 2242 01:23:39,360 --> 01:23:44,800 out 2243 01:23:40,800 --> 01:23:48,159 uh and thank you oh thank you marius 2244 01:23:44,800 --> 01:23:50,480 okay well that is all of the lightning 2245 01:23:48,159 --> 01:23:53,840 talks that we have this year 2246 01:23:50,480 --> 01:23:57,120 uh i'm as sad as all of you are as well 2247 01:23:53,840 --> 01:23:58,320 oh hi bobo hi i all know what you're 2248 01:23:57,120 --> 01:24:01,360 here for 2249 01:23:58,320 --> 01:24:03,440 hey hey hey hey hey hey what's this 2250 01:24:01,360 --> 01:24:06,159 what's this this over here over here 2251 01:24:03,440 --> 01:24:07,520 over here over here oh my god 2252 01:24:06,159 --> 01:24:10,159 you're an adult it's right that you were 2253 01:24:07,520 --> 01:24:10,159 looking at it 2254 01:24:10,480 --> 01:24:14,560 it's everyone's favorite treat ignoring 2255 01:24:12,639 --> 01:24:16,400 horse 2256 01:24:14,560 --> 01:24:18,320 right uh so yeah that brings us to the 2257 01:24:16,400 --> 01:24:22,159 end of the lightning talks for this year 2258 01:24:18,320 --> 01:24:24,960 uh i'm sad uh i'm sure you're all sad as 2259 01:24:22,159 --> 01:24:26,960 well but uh you've got a whole year 2260 01:24:24,960 --> 01:24:28,800 hopefully not spent in lockdown to come 2261 01:24:26,960 --> 01:24:31,040 up with your next idea for lightning 2262 01:24:28,800 --> 01:24:32,000 talks which you can present at next 2263 01:24:31,040 --> 01:24:34,159 year's 2264 01:24:32,000 --> 01:24:36,400 pycon au 2265 01:24:34,159 --> 01:24:39,120 wherever that ends up being 2266 01:24:36,400 --> 01:24:40,159 either where you are right now or online 2267 01:24:39,120 --> 01:24:43,199 uh 2268 01:24:40,159 --> 01:24:45,360 as usual i would love to thank the great 2269 01:24:43,199 --> 01:24:47,679 av crew who make this thing work 2270 01:24:45,360 --> 01:24:49,360 including ryan who has been backstage 2271 01:24:47,679 --> 01:24:51,600 for the entire thing and won't let me 2272 01:24:49,360 --> 01:24:54,000 bring him on stage 2273 01:24:51,600 --> 01:24:55,520 jack who has been doing all the tech 2274 01:24:54,000 --> 01:24:59,360 checks to make sure that people actually 2275 01:24:55,520 --> 01:25:01,920 join stream yard without things breaking 2276 01:24:59,360 --> 01:25:03,760 and of course patrick the disembodied 2277 01:25:01,920 --> 01:25:06,080 clock 2278 01:25:03,760 --> 01:25:08,320 thank you disembodied clock 2279 01:25:06,080 --> 01:25:10,800 and of course thanks to libby berry who 2280 01:25:08,320 --> 01:25:12,719 has been wrangling all of the speakers 2281 01:25:10,800 --> 01:25:13,760 as well as bobo for today's lightning 2282 01:25:12,719 --> 01:25:16,320 talks 2283 01:25:13,760 --> 01:25:16,320 he helps 2284 01:25:16,560 --> 01:25:20,159 and is that what's going on right now oh 2285 01:25:18,639 --> 01:25:22,800 yeah 2286 01:25:20,159 --> 01:25:24,719 that is definitely helping okay so yeah 2287 01:25:22,800 --> 01:25:27,520 thank you libby and thank you to all of 2288 01:25:24,719 --> 01:25:30,639 our presenters uh i love these lightning 2289 01:25:27,520 --> 01:25:31,920 talks uh at every pike on eu and i'm 2290 01:25:30,639 --> 01:25:34,880 really looking forward to seeing what 2291 01:25:31,920 --> 01:25:36,719 you all have next year um 2292 01:25:34,880 --> 01:25:38,719 see you then and maybe see you in mario 2293 01:25:36,719 --> 01:25:40,400 kart in a bit if uh if you're playing 2294 01:25:38,719 --> 01:25:44,480 hey byron heck yeah 2295 01:25:40,400 --> 01:25:44,480 all right take care everyone stay safe 2296 01:25:46,239 --> 01:25:50,400 i presume how long are we waving for 2297 01:25:49,280 --> 01:25:52,840 are we off 2298 01:25:50,400 --> 01:25:54,960 i have no idea tell us 2299 01:25:52,840 --> 01:25:57,280 about hey bobo do you want to attack the 2300 01:25:54,960 --> 01:26:01,159 dead cat again that was a lot of fun do 2301 01:25:57,280 --> 01:26:01,159 it great thanks patrick