1 00:00:11,599 --> 00:00:17,920 hello and welcome back 2 00:00:14,400 --> 00:00:17,920 to pike online 3 00:00:19,359 --> 00:00:23,920 it's been so good 4 00:00:20,880 --> 00:00:25,840 fantastic it's like yeah 5 00:00:23,920 --> 00:00:27,680 i've had an absolute blast 6 00:00:25,840 --> 00:00:31,119 i've lost for words i'm lost for words 7 00:00:27,680 --> 00:00:32,800 i've lost my words they're all gone um 8 00:00:31,119 --> 00:00:35,520 but that's okay because i don't have to 9 00:00:32,800 --> 00:00:36,559 talk right now we get to introduce 10 00:00:35,520 --> 00:00:38,399 um 11 00:00:36,559 --> 00:00:40,719 the i can't say it's the coolest part of 12 00:00:38,399 --> 00:00:43,280 the day because it's just one of the 13 00:00:40,719 --> 00:00:45,039 coolest parts of the coolest day 14 00:00:43,280 --> 00:00:46,960 yes 15 00:00:45,039 --> 00:00:48,320 amanda tell me about the student 16 00:00:46,960 --> 00:00:51,039 showcase 17 00:00:48,320 --> 00:00:52,800 okay so a couple of years ago when pycon 18 00:00:51,039 --> 00:00:55,680 was in sydney 19 00:00:52,800 --> 00:00:58,559 we had a couple of very keen students 20 00:00:55,680 --> 00:01:00,800 sign up for the main track of 21 00:00:58,559 --> 00:01:02,079 pycon which is a really exciting thing 22 00:01:00,800 --> 00:01:04,080 and um 23 00:01:02,079 --> 00:01:05,760 we thought maybe 24 00:01:04,080 --> 00:01:07,439 we should find a way to encourage this 25 00:01:05,760 --> 00:01:08,400 to happen more often 26 00:01:07,439 --> 00:01:12,000 indeed 27 00:01:08,400 --> 00:01:13,680 and so we invented the education track 28 00:01:12,000 --> 00:01:15,920 and we put it out to teachers in our 29 00:01:13,680 --> 00:01:18,720 network and tried to get as many people 30 00:01:15,920 --> 00:01:20,240 to enter as possible and it's just grown 31 00:01:18,720 --> 00:01:22,240 from there and we had the most i think 32 00:01:20,240 --> 00:01:23,439 we had the most applicants ever this 33 00:01:22,240 --> 00:01:26,560 year 34 00:01:23,439 --> 00:01:29,520 which was fantastic and terrible it's 35 00:01:26,560 --> 00:01:33,040 fantastic and terrible that's right 36 00:01:29,520 --> 00:01:35,360 we have such an awesome lineup of kids 37 00:01:33,040 --> 00:01:38,000 uh who want to talk to us today 38 00:01:35,360 --> 00:01:41,759 and these students have made fantastic 39 00:01:38,000 --> 00:01:43,200 things using python with python um 40 00:01:41,759 --> 00:01:44,479 they're going to tell us about all of 41 00:01:43,200 --> 00:01:46,079 the things that went right all the 42 00:01:44,479 --> 00:01:49,119 things that went wrong 43 00:01:46,079 --> 00:01:50,159 um some of them will be with us in the 44 00:01:49,119 --> 00:01:51,759 chat 45 00:01:50,159 --> 00:01:53,759 uh 46 00:01:51,759 --> 00:01:54,560 i can never tell which side it will be 47 00:01:53,759 --> 00:01:57,840 on 48 00:01:54,560 --> 00:02:00,079 um so you can ask questions there 49 00:01:57,840 --> 00:02:02,399 it's one of these directions 50 00:02:00,079 --> 00:02:02,399 um 51 00:02:04,159 --> 00:02:08,000 they're just so good 52 00:02:05,840 --> 00:02:09,280 yeah the kids are so good the talks are 53 00:02:08,000 --> 00:02:10,560 so good the kids are all right i think 54 00:02:09,280 --> 00:02:12,000 that's what i'm trying to say amanda the 55 00:02:10,560 --> 00:02:14,000 kids are all right they must have some 56 00:02:12,000 --> 00:02:15,680 pretty good teachers or something 57 00:02:14,000 --> 00:02:16,959 um i don't know i'm not just saying that 58 00:02:15,680 --> 00:02:19,120 because i know some of them are in the 59 00:02:16,959 --> 00:02:21,120 audience now um and i'm not just saying 60 00:02:19,120 --> 00:02:23,520 that in order to to spruik 61 00:02:21,120 --> 00:02:25,520 next year when the student showcase will 62 00:02:23,520 --> 00:02:28,239 also happen teachers 63 00:02:25,520 --> 00:02:30,800 get thinking now um 64 00:02:28,239 --> 00:02:32,720 the rules are that you have to be a high 65 00:02:30,800 --> 00:02:34,840 school student and you have to have done 66 00:02:32,720 --> 00:02:37,840 a thing that involves 67 00:02:34,840 --> 00:02:40,480 python that's it that's pretty low bar 68 00:02:37,840 --> 00:02:43,599 we can fall over that bar in indeed 69 00:02:40,480 --> 00:02:45,840 indeed um so while you are all sitting 70 00:02:43,599 --> 00:02:48,720 at home reclining watching these amazing 71 00:02:45,840 --> 00:02:50,080 kids talk about their amazing projects 72 00:02:48,720 --> 00:02:52,239 think about 73 00:02:50,080 --> 00:02:54,160 what you dear viewer or 74 00:02:52,239 --> 00:02:56,640 student or teacher could do for next 75 00:02:54,160 --> 00:02:58,640 year to perhaps 76 00:02:56,640 --> 00:03:02,080 see yourselves or your students 77 00:02:58,640 --> 00:03:02,080 presenting right here 78 00:03:02,239 --> 00:03:06,480 without further ado i'm going to let 79 00:03:04,640 --> 00:03:09,200 these fantastic students introduce 80 00:03:06,480 --> 00:03:12,080 themselves by which i mean 81 00:03:09,200 --> 00:03:15,200 i'm going to throw to past nicki 82 00:03:12,080 --> 00:03:19,720 uh to to make my current life easier all 83 00:03:15,200 --> 00:03:19,720 right uh thanks past nikki 84 00:03:24,720 --> 00:03:28,640 thanks future nikki 85 00:03:26,400 --> 00:03:30,239 our first speaker today is liv and 86 00:03:28,640 --> 00:03:31,519 she'll be talking about renewable 87 00:03:30,239 --> 00:03:33,440 hearing 88 00:03:31,519 --> 00:03:35,040 liv has been programming for eight years 89 00:03:33,440 --> 00:03:37,280 and when i asked what her favorite emoji 90 00:03:35,040 --> 00:03:39,760 is she said it's the saturn emoji or the 91 00:03:37,280 --> 00:03:41,519 ringed planet emoji 92 00:03:39,760 --> 00:03:43,519 liv has recently been learning about 93 00:03:41,519 --> 00:03:45,680 machine learning and data analysis and 94 00:03:43,519 --> 00:03:46,400 i'm really excited to hear her talk 95 00:03:45,680 --> 00:03:48,480 hi 96 00:03:46,400 --> 00:03:50,480 my name is liv and i'm a student at 97 00:03:48,480 --> 00:03:53,280 lorry novala steiner school i have been 98 00:03:50,480 --> 00:03:54,799 programming python for eight years now 99 00:03:53,280 --> 00:03:56,000 it started when i broke my foot when i 100 00:03:54,799 --> 00:03:58,879 was 11 101 00:03:56,000 --> 00:04:01,200 and i couldn't walk for a few weeks 102 00:03:58,879 --> 00:04:03,599 so i started learning python from a book 103 00:04:01,200 --> 00:04:05,599 and started creating projects like guess 104 00:04:03,599 --> 00:04:06,799 the number and choose your own adventure 105 00:04:05,599 --> 00:04:08,799 style games 106 00:04:06,799 --> 00:04:10,640 at my school in our final year we 107 00:04:08,799 --> 00:04:12,959 undertake a major work 108 00:04:10,640 --> 00:04:14,879 this means we choose a topic to study in 109 00:04:12,959 --> 00:04:16,959 depth and then presented at the end of 110 00:04:14,879 --> 00:04:19,359 the year we complete a practical 111 00:04:16,959 --> 00:04:21,359 physical component and a written thesis 112 00:04:19,359 --> 00:04:24,680 of eight to ten thousand words and a 113 00:04:21,359 --> 00:04:24,680 final presentation 114 00:04:32,720 --> 00:04:36,960 i chose to study engineering because in 115 00:04:35,199 --> 00:04:40,080 a world where everything is increasingly 116 00:04:36,960 --> 00:04:42,639 digital i believe that technology holds 117 00:04:40,080 --> 00:04:44,960 the key to an equal and sustainable 118 00:04:42,639 --> 00:04:46,960 future the physical component of my 119 00:04:44,960 --> 00:04:50,000 major works is a solar-powered hearing 120 00:04:46,960 --> 00:04:52,240 aid in my own experience hearing aids go 121 00:04:50,000 --> 00:04:54,080 through batteries every two weeks having 122 00:04:52,240 --> 00:04:55,919 worn a hearing aid since i was about 123 00:04:54,080 --> 00:04:59,120 eight years old that means that i've 124 00:04:55,919 --> 00:05:02,800 already gone through 286 batteries and 125 00:04:59,120 --> 00:05:04,960 over 2500 over my entire life 126 00:05:02,800 --> 00:05:06,960 the impact of batteries on wildlife is 127 00:05:04,960 --> 00:05:08,720 incredibly detrimental 128 00:05:06,960 --> 00:05:11,360 battery sent to landfills will leak 129 00:05:08,720 --> 00:05:13,520 toxic substances into the ground which 130 00:05:11,360 --> 00:05:14,880 affects the nearby ecosystems and 131 00:05:13,520 --> 00:05:16,800 waterways 132 00:05:14,880 --> 00:05:18,240 carelessly discarding batteries will 133 00:05:16,800 --> 00:05:21,120 result in 134 00:05:18,240 --> 00:05:24,479 animals such as birds mistakingly eating 135 00:05:21,120 --> 00:05:26,320 the batteries and poisoning themselves 136 00:05:24,479 --> 00:05:28,800 the financial cost of batteries can get 137 00:05:26,320 --> 00:05:30,560 expensive replacing them every two weeks 138 00:05:28,800 --> 00:05:32,880 with batteries costing up to ten dollars 139 00:05:30,560 --> 00:05:35,360 a pack of eight batteries 140 00:05:32,880 --> 00:05:38,400 using a single rechargeable battery cuts 141 00:05:35,360 --> 00:05:40,080 this cost entirely my thesis focuses on 142 00:05:38,400 --> 00:05:42,240 how hearing loss affects indigenous 143 00:05:40,080 --> 00:05:44,400 australians as their rates of hearing 144 00:05:42,240 --> 00:05:46,880 loss are nearly three times that of 145 00:05:44,400 --> 00:05:49,120 non-indigenous people this statistic is 146 00:05:46,880 --> 00:05:51,199 particularly prevalent in children as 147 00:05:49,120 --> 00:05:53,199 they are more likely to contract otitis 148 00:05:51,199 --> 00:05:55,600 media an ear infection that can have 149 00:05:53,199 --> 00:05:57,440 lifelong after effects numerous studies 150 00:05:55,600 --> 00:06:00,479 have found that hearing loss at a young 151 00:05:57,440 --> 00:06:02,720 formative age impacts social mental and 152 00:06:00,479 --> 00:06:04,479 cognitive wellbeing the development of 153 00:06:02,720 --> 00:06:06,560 higher cognitive thinking and 154 00:06:04,479 --> 00:06:09,280 interpersonal relationships occurs from 155 00:06:06,560 --> 00:06:12,639 early childhood to adolescence and 156 00:06:09,280 --> 00:06:14,160 hearing loss can severely impact this 157 00:06:12,639 --> 00:06:16,639 the hearing aid is specifically built 158 00:06:14,160 --> 00:06:18,720 with indigenous populations in mind 159 00:06:16,639 --> 00:06:20,560 as remote communities may not have 160 00:06:18,720 --> 00:06:22,800 access to batteries or be able to afford 161 00:06:20,560 --> 00:06:24,960 them the original development of the 162 00:06:22,800 --> 00:06:27,280 hearing aid was on a raspberry pi picot 163 00:06:24,960 --> 00:06:30,639 board the board was very new being 164 00:06:27,280 --> 00:06:32,960 released in january 2021 but had very 165 00:06:30,639 --> 00:06:35,039 high processing speed i coded it in 166 00:06:32,960 --> 00:06:37,360 circuit python as i needed some more 167 00:06:35,039 --> 00:06:39,280 heavy duty libraries i started by 168 00:06:37,360 --> 00:06:41,759 calculating the decibels and then of 169 00:06:39,280 --> 00:06:43,440 course a basic blink script 170 00:06:41,759 --> 00:06:45,680 of course i would need to do a little 171 00:06:43,440 --> 00:06:47,440 more for a functioning hearing aid since 172 00:06:45,680 --> 00:06:49,199 not every deaf person has the same 173 00:06:47,440 --> 00:06:51,840 degree of hearing loss i would need to 174 00:06:49,199 --> 00:06:54,160 perform a fast fourier transform 175 00:06:51,840 --> 00:06:56,960 hearing loss is not uniform in severity 176 00:06:54,160 --> 00:06:58,639 or range some may be able to hear higher 177 00:06:56,960 --> 00:07:01,199 frequencies better than lower 178 00:06:58,639 --> 00:07:03,599 frequencies or vice versa to create the 179 00:07:01,199 --> 00:07:05,759 most beneficial hearing aid i would need 180 00:07:03,599 --> 00:07:08,319 to target the frequencies that the 181 00:07:05,759 --> 00:07:09,599 person couldn't hear 182 00:07:08,319 --> 00:07:11,680 to do this 183 00:07:09,599 --> 00:07:13,440 i needed to separate the frequencies in 184 00:07:11,680 --> 00:07:15,360 each audio sample 185 00:07:13,440 --> 00:07:18,000 a fourier transform essentially breaks 186 00:07:15,360 --> 00:07:20,000 down frequencies into their sine waves 187 00:07:18,000 --> 00:07:22,240 it helps to determine which frequencies 188 00:07:20,000 --> 00:07:25,440 in a sample i'm going to target needless 189 00:07:22,240 --> 00:07:26,479 to say it was very hard to quote one of 190 00:07:25,440 --> 00:07:28,080 my 191 00:07:26,479 --> 00:07:30,000 favorite books by josh barrows on 192 00:07:28,080 --> 00:07:32,720 fourier transforms 193 00:07:30,000 --> 00:07:34,639 don't ask really don't ask unless you're 194 00:07:32,720 --> 00:07:36,479 willing to put in a couple years of 195 00:07:34,639 --> 00:07:37,680 degree level maps i still have 196 00:07:36,479 --> 00:07:40,560 nightmares 197 00:07:37,680 --> 00:07:43,120 to be honest i still don't understand it 198 00:07:40,560 --> 00:07:44,960 after about two months i finally got it 199 00:07:43,120 --> 00:07:46,800 the microphone was picking up sound and 200 00:07:44,960 --> 00:07:49,199 calculating the transform of certain 201 00:07:46,800 --> 00:07:50,800 frequencies i couldn't believe it now 202 00:07:49,199 --> 00:07:53,599 all i had to do was send it to the 203 00:07:50,800 --> 00:07:56,879 output that's where i was wrong the pico 204 00:07:53,599 --> 00:07:59,840 even with a dual core arm cortex mo plus 205 00:07:56,879 --> 00:08:02,400 processor with 264 kilobytes internal 206 00:07:59,840 --> 00:08:03,440 ram and support for up to 60 megabytes 207 00:08:02,400 --> 00:08:06,000 of off 208 00:08:03,440 --> 00:08:09,199 chip flash it just didn't have the power 209 00:08:06,000 --> 00:08:11,599 to do proper audio processing 210 00:08:09,199 --> 00:08:13,599 i could do everything separately but as 211 00:08:11,599 --> 00:08:15,360 soon as i tried to put it all together 212 00:08:13,599 --> 00:08:17,360 it just didn't work 213 00:08:15,360 --> 00:08:19,599 i rang around in hopes that there might 214 00:08:17,360 --> 00:08:21,840 be something i could do but no 215 00:08:19,599 --> 00:08:24,720 everyone told me that i had to move on 216 00:08:21,840 --> 00:08:27,280 to something called the tinsy 217 00:08:24,720 --> 00:08:28,720 i was a little bit upset 218 00:08:27,280 --> 00:08:31,120 i had spent months trying to get it to 219 00:08:28,720 --> 00:08:33,039 work on python and figured out how to do 220 00:08:31,120 --> 00:08:34,719 a fourier transform only to find that it 221 00:08:33,039 --> 00:08:37,599 failed at the last step 222 00:08:34,719 --> 00:08:39,680 but there was no time to be sad so i 223 00:08:37,599 --> 00:08:41,839 bought a tendency and an audio shield 224 00:08:39,680 --> 00:08:44,880 and immediately blew them both up but 225 00:08:41,839 --> 00:08:49,810 there was no time to be sad so i bought 226 00:08:44,880 --> 00:09:24,669 another tinsy and this time it worked 227 00:08:49,810 --> 00:09:24,669 [Music] 228 00:09:27,260 --> 00:10:05,849 [Music] 229 00:10:08,890 --> 00:10:33,990 [Music] 230 00:10:35,600 --> 00:10:40,320 using the handy audio library built for 231 00:10:37,920 --> 00:10:42,640 tinsy and the graphic interface for 232 00:10:40,320 --> 00:10:44,720 writing code i managed to build 233 00:10:42,640 --> 00:10:47,440 something resembling a hearing aid the 234 00:10:44,720 --> 00:10:50,160 code for the fourier transform was so 235 00:10:47,440 --> 00:10:51,680 easy with the audio design system it was 236 00:10:50,160 --> 00:10:53,920 my saving grace 237 00:10:51,680 --> 00:10:55,920 i was able to send the audio via 238 00:10:53,920 --> 00:10:58,560 bluetooth to a receiver that sits in the 239 00:10:55,920 --> 00:11:01,360 air using an old hearing aid speaker i 240 00:10:58,560 --> 00:11:03,279 had lying around building a hearing aid 241 00:11:01,360 --> 00:11:04,959 from scratch wasn't easy but i never 242 00:11:03,279 --> 00:11:06,480 expected it to be 243 00:11:04,959 --> 00:11:09,120 growing up with hearing loss i 244 00:11:06,480 --> 00:11:11,600 understand how important it is to have 245 00:11:09,120 --> 00:11:13,279 the resources available so that i have 246 00:11:11,600 --> 00:11:15,279 the same chance as everyone else around 247 00:11:13,279 --> 00:11:17,600 me to go to school partake in 248 00:11:15,279 --> 00:11:20,240 discussions about my health and develop 249 00:11:17,600 --> 00:11:24,810 a sustainable and equal future and that 250 00:11:20,240 --> 00:11:29,120 is why i built renewable hearing 251 00:11:24,810 --> 00:11:30,880 [Music] 252 00:11:29,120 --> 00:11:32,240 okay thanks 253 00:11:30,880 --> 00:11:34,079 bye 254 00:11:32,240 --> 00:11:36,720 thank you so much liv 255 00:11:34,079 --> 00:11:38,959 up next is jonty jonty's talking about 256 00:11:36,720 --> 00:11:40,320 python meta programming through bytecode 257 00:11:38,959 --> 00:11:41,680 and has been learning to program for 258 00:11:40,320 --> 00:11:43,680 three years now 259 00:11:41,680 --> 00:11:45,920 his favorite emoji is the smiley face 260 00:11:43,680 --> 00:11:48,320 emoji although technically he sent 261 00:11:45,920 --> 00:11:50,800 through a colon in a bracket but i think 262 00:11:48,320 --> 00:11:52,160 i'm being a little pedantic here 263 00:11:50,800 --> 00:11:54,000 when i asked what he's been recently 264 00:11:52,160 --> 00:11:55,839 learning about computers he said he's 265 00:11:54,000 --> 00:11:57,360 been learning about the axioms of 266 00:11:55,839 --> 00:12:00,240 natural deduction 267 00:11:57,360 --> 00:12:03,279 let's hear his talk i am john t deakin 268 00:12:00,240 --> 00:12:06,000 and this is my project by code macro 269 00:12:03,279 --> 00:12:07,600 it's a look at intermediate languages in 270 00:12:06,000 --> 00:12:09,279 meta programming 271 00:12:07,600 --> 00:12:12,480 specifically in the context of like 272 00:12:09,279 --> 00:12:14,320 fourth and lisp macros um 273 00:12:12,480 --> 00:12:15,680 yeah so this is just a cool example i 274 00:12:14,320 --> 00:12:17,200 thought i'd flash up at the start we'll 275 00:12:15,680 --> 00:12:19,519 go through it um 276 00:12:17,200 --> 00:12:20,959 so i'm gonna go through some of the 277 00:12:19,519 --> 00:12:22,240 you know intermediate languages and meta 278 00:12:20,959 --> 00:12:24,320 programming stuff just make sure we're 279 00:12:22,240 --> 00:12:25,680 all on the same page before i start 280 00:12:24,320 --> 00:12:27,440 talking about 281 00:12:25,680 --> 00:12:29,440 the bytecode macro 282 00:12:27,440 --> 00:12:33,200 library itself um 283 00:12:29,440 --> 00:12:34,000 so intermediate languages what are they 284 00:12:33,200 --> 00:12:36,000 when 285 00:12:34,000 --> 00:12:37,920 a compiler runs it doesn't just run the 286 00:12:36,000 --> 00:12:39,440 string directly you know that would be 287 00:12:37,920 --> 00:12:41,360 insane it goes through a few steps 288 00:12:39,440 --> 00:12:43,040 beforehand 289 00:12:41,360 --> 00:12:45,200 and you know in this example here we've 290 00:12:43,040 --> 00:12:48,000 got is a string going through alexa to 291 00:12:45,200 --> 00:12:50,079 be uh to become tokens which is then 292 00:12:48,000 --> 00:12:52,240 passed to become an ast which is then 293 00:12:50,079 --> 00:12:53,839 compiled to become bytecode and then the 294 00:12:52,240 --> 00:12:56,079 by code's interpreted 295 00:12:53,839 --> 00:12:57,760 later um and it's that by code that's 296 00:12:56,079 --> 00:12:59,440 what we're looking at today 297 00:12:57,760 --> 00:13:01,440 um well there's not always by code this 298 00:12:59,440 --> 00:13:03,200 is just a overview of python itself it 299 00:13:01,440 --> 00:13:05,519 does you know changes from compiler to 300 00:13:03,200 --> 00:13:07,200 compiler 301 00:13:05,519 --> 00:13:10,240 but yeah so in python it's a byte code 302 00:13:07,200 --> 00:13:13,279 and a bytecode is like a series of bytes 303 00:13:10,240 --> 00:13:14,800 that is a shortened representation of 304 00:13:13,279 --> 00:13:16,720 the code and simplified and shortened 305 00:13:14,800 --> 00:13:18,079 representation of the code you can do 306 00:13:16,720 --> 00:13:20,160 some cool things but it's way easier to 307 00:13:18,079 --> 00:13:21,760 interpret and you can do some cool 308 00:13:20,160 --> 00:13:23,519 optimizations uh 309 00:13:21,760 --> 00:13:25,839 not so much with stack based by code 310 00:13:23,519 --> 00:13:28,160 which python is um and so a stack based 311 00:13:25,839 --> 00:13:29,360 back code is a byte code that primarily 312 00:13:28,160 --> 00:13:31,120 acts upon 313 00:13:29,360 --> 00:13:33,040 a stack 314 00:13:31,120 --> 00:13:34,720 a data set you know just all the other 315 00:13:33,040 --> 00:13:36,480 kinds of sex but mostly data's right the 316 00:13:34,720 --> 00:13:39,040 data sets what we're talking about um 317 00:13:36,480 --> 00:13:40,399 and so in this case we've got it loading 318 00:13:39,040 --> 00:13:42,800 uh on the right side here we've got it 319 00:13:40,399 --> 00:13:45,040 loading a string hello world onto the 320 00:13:42,800 --> 00:13:46,880 stack uh and then you can pop that 321 00:13:45,040 --> 00:13:48,800 string into send it out 322 00:13:46,880 --> 00:13:51,360 using the print command right 323 00:13:48,800 --> 00:13:52,880 um and so that's you know how python by 324 00:13:51,360 --> 00:13:54,639 code mostly works just a lot of these 325 00:13:52,880 --> 00:13:55,760 cool stack operations 326 00:13:54,639 --> 00:13:56,959 um 327 00:13:55,760 --> 00:13:57,839 and 328 00:13:56,959 --> 00:13:59,519 uh 329 00:13:57,839 --> 00:14:00,880 yeah and so we'll get into meta 330 00:13:59,519 --> 00:14:03,519 programming now 331 00:14:00,880 --> 00:14:05,199 meta programming is you know code acting 332 00:14:03,519 --> 00:14:06,720 upon code it's actually everywhere i i 333 00:14:05,199 --> 00:14:08,720 didn't realize this before it's checked 334 00:14:06,720 --> 00:14:10,079 but it's like almost every language is 335 00:14:08,720 --> 00:14:12,480 made up for some meta programming 336 00:14:10,079 --> 00:14:14,160 capabilities uh you know java c-sharp 337 00:14:12,480 --> 00:14:16,720 has reflection 338 00:14:14,160 --> 00:14:19,600 julie uh python has meta classes c plus 339 00:14:16,720 --> 00:14:21,360 plus famously template meta programming 340 00:14:19,600 --> 00:14:24,320 uh and fourth 341 00:14:21,360 --> 00:14:26,880 fourth uh lisp and julia 342 00:14:24,320 --> 00:14:29,360 all have this really cool kind of macros 343 00:14:26,880 --> 00:14:31,440 thing i mean fourth and julia are based 344 00:14:29,360 --> 00:14:33,199 you know inspired by this but 345 00:14:31,440 --> 00:14:34,320 they all have a really cool macro system 346 00:14:33,199 --> 00:14:35,279 where you can 347 00:14:34,320 --> 00:14:37,360 take 348 00:14:35,279 --> 00:14:40,000 uh any code you can take some code and 349 00:14:37,360 --> 00:14:41,839 then transform it into new code 350 00:14:40,000 --> 00:14:44,079 uh and 351 00:14:41,839 --> 00:14:46,240 you know you can extend the language you 352 00:14:44,079 --> 00:14:48,000 can write shorthands for some stuff you 353 00:14:46,240 --> 00:14:49,920 know with code reuse uh you can even 354 00:14:48,000 --> 00:14:52,320 like take it so far as to write domain 355 00:14:49,920 --> 00:14:54,399 specific languages in other language in 356 00:14:52,320 --> 00:14:56,560 your own language i think it's very cool 357 00:14:54,399 --> 00:14:59,519 uh so for example like in fixed maths 358 00:14:56,560 --> 00:15:01,760 you can do infinix maths in lisp 359 00:14:59,519 --> 00:15:03,600 some guys done that i think it's cool 360 00:15:01,760 --> 00:15:05,600 and for this project i specifically was 361 00:15:03,600 --> 00:15:06,800 looking mostly at fourth macros just 362 00:15:05,600 --> 00:15:08,560 because i think 363 00:15:06,800 --> 00:15:11,040 they've applied better and you know 364 00:15:08,560 --> 00:15:13,040 that's what i was learning at the time 365 00:15:11,040 --> 00:15:15,440 and the question is why if these are so 366 00:15:13,040 --> 00:15:16,720 cool and such as you know they're very 367 00:15:15,440 --> 00:15:19,120 beloved by 368 00:15:16,720 --> 00:15:21,199 list programmers especially macros very 369 00:15:19,120 --> 00:15:23,519 much loved by list programmers um 370 00:15:21,199 --> 00:15:25,519 and if they're so great why aren't they 371 00:15:23,519 --> 00:15:27,519 in other languages as much 372 00:15:25,519 --> 00:15:29,920 and i think in my opinion at least it's 373 00:15:27,519 --> 00:15:32,000 mostly because lisp has such a beautiful 374 00:15:29,920 --> 00:15:34,000 like regular syntax 375 00:15:32,000 --> 00:15:36,079 uh that it makes it a really easy 376 00:15:34,000 --> 00:15:37,600 interface to be manipulating through the 377 00:15:36,079 --> 00:15:39,839 meta programming right 378 00:15:37,600 --> 00:15:41,759 you know it's all lists embed lists and 379 00:15:39,839 --> 00:15:43,839 lists you know just recursive lists it's 380 00:15:41,759 --> 00:15:46,079 very easy to iterate through that kind 381 00:15:43,839 --> 00:15:48,000 of stuff same thing with fourth 382 00:15:46,079 --> 00:15:49,680 and that's why 383 00:15:48,000 --> 00:15:51,360 it works so well and i think that's 384 00:15:49,680 --> 00:15:52,399 where a lot of the libraries that try to 385 00:15:51,360 --> 00:15:54,399 implement this kind of stuff in 386 00:15:52,399 --> 00:15:55,759 languages that weren't designed for it 387 00:15:54,399 --> 00:15:57,680 like fall down 388 00:15:55,759 --> 00:15:59,360 because they're trying to use the ast 389 00:15:57,680 --> 00:16:02,000 representation that lisp uses in other 390 00:15:59,360 --> 00:16:03,279 languages with a really complex ast 391 00:16:02,000 --> 00:16:04,880 and it makes it you know just makes it 392 00:16:03,279 --> 00:16:06,880 confusing and hard to 393 00:16:04,880 --> 00:16:08,079 reason about in my opinion at least um 394 00:16:06,880 --> 00:16:10,959 and and so that's what i was trying to 395 00:16:08,079 --> 00:16:13,519 do with this project was to capture that 396 00:16:10,959 --> 00:16:15,360 simplicity in the interface that lisp 397 00:16:13,519 --> 00:16:17,279 has that makes it so good 398 00:16:15,360 --> 00:16:20,880 uh and so yeah speaking of we're gonna 399 00:16:17,279 --> 00:16:20,880 get into bytecode macro 400 00:16:20,959 --> 00:16:28,720 so how bytecode macro works is it takes 401 00:16:25,759 --> 00:16:31,279 you know it's a decorator that takes a 402 00:16:28,720 --> 00:16:33,440 macro function and the function to apply 403 00:16:31,279 --> 00:16:35,199 that macro to 404 00:16:33,440 --> 00:16:37,680 converts that 405 00:16:35,199 --> 00:16:41,519 function it passed in this case test to 406 00:16:37,680 --> 00:16:43,519 a list of tuples or tuples 407 00:16:41,519 --> 00:16:45,920 uh and 408 00:16:43,519 --> 00:16:46,880 you know those tuples are instructions 409 00:16:45,920 --> 00:16:48,959 in the bike 410 00:16:46,880 --> 00:16:51,279 in the in the in the buy code right it's 411 00:16:48,959 --> 00:16:53,759 a simplified human readable version 412 00:16:51,279 --> 00:16:54,959 of that by code and it passes this list 413 00:16:53,759 --> 00:16:56,320 of tuples 414 00:16:54,959 --> 00:16:59,680 to the 415 00:16:56,320 --> 00:17:02,480 macro function in this case macro trace 416 00:16:59,680 --> 00:17:04,400 and then that macro function can 417 00:17:02,480 --> 00:17:06,400 modify that by code 418 00:17:04,400 --> 00:17:08,079 that linear list of tuples to be 419 00:17:06,400 --> 00:17:10,000 whatever it wanted 420 00:17:08,079 --> 00:17:12,640 so in this case we've changed hello 421 00:17:10,000 --> 00:17:15,520 world to hellofrance 422 00:17:12,640 --> 00:17:16,959 and then you return this newly modified 423 00:17:15,520 --> 00:17:19,199 list of tuples 424 00:17:16,959 --> 00:17:20,640 and it will execute this as if it was 425 00:17:19,199 --> 00:17:23,039 the original function 426 00:17:20,640 --> 00:17:24,640 um and there we go this is saying hello 427 00:17:23,039 --> 00:17:26,480 friends at the end 428 00:17:24,640 --> 00:17:27,839 um and this 429 00:17:26,480 --> 00:17:29,520 i think that's really cool and that's 430 00:17:27,839 --> 00:17:30,799 that's how it works is very simple i 431 00:17:29,520 --> 00:17:32,880 think it's you know easy enough to 432 00:17:30,799 --> 00:17:34,400 understand and this is the 433 00:17:32,880 --> 00:17:36,880 macro that was used to produce the 434 00:17:34,400 --> 00:17:39,919 visualizations we saw just 435 00:17:36,880 --> 00:17:42,160 last slide uh it takes in the tuples and 436 00:17:39,919 --> 00:17:45,280 then 4n in the tuples of prince enzo 437 00:17:42,160 --> 00:17:46,720 prints each tuple in a line 438 00:17:45,280 --> 00:17:47,440 and then it returns it without changing 439 00:17:46,720 --> 00:17:49,840 it 440 00:17:47,440 --> 00:17:52,400 so that's how we can see you know 441 00:17:49,840 --> 00:17:54,240 what the tuple representation of the 442 00:17:52,400 --> 00:17:55,840 above function is 443 00:17:54,240 --> 00:17:57,440 uh 444 00:17:55,840 --> 00:17:59,280 and you know we can move on here's the 445 00:17:57,440 --> 00:18:01,039 go to example we saw right at the start 446 00:17:59,280 --> 00:18:03,200 that i thought was really cool 447 00:18:01,039 --> 00:18:04,720 um just take a little bit it doesn't 448 00:18:03,200 --> 00:18:06,480 matter too much it just works like a 449 00:18:04,720 --> 00:18:08,160 go-to right 450 00:18:06,480 --> 00:18:09,440 and here's the macro implementation it 451 00:18:08,160 --> 00:18:11,200 looks a little scary but it's really 452 00:18:09,440 --> 00:18:13,679 simple um 453 00:18:11,200 --> 00:18:15,360 and so what it does is it checks if 454 00:18:13,679 --> 00:18:18,080 there is a string 455 00:18:15,360 --> 00:18:20,400 which has goto in it 456 00:18:18,080 --> 00:18:23,039 and then if it does it replaces the 457 00:18:20,400 --> 00:18:24,880 string loading command with 458 00:18:23,039 --> 00:18:27,039 a command that 459 00:18:24,880 --> 00:18:28,880 a jump command here with the wherever 460 00:18:27,039 --> 00:18:30,720 the go to was targeting 461 00:18:28,880 --> 00:18:32,400 and if there's a string 462 00:18:30,720 --> 00:18:34,720 which has a 463 00:18:32,400 --> 00:18:36,720 colon at the end or like a label then it 464 00:18:34,720 --> 00:18:38,640 replaces that instruction with a label 465 00:18:36,720 --> 00:18:41,520 instruction 466 00:18:38,640 --> 00:18:44,080 with whatever the label was uh and then 467 00:18:41,520 --> 00:18:46,240 otherwise it's just you know appends 468 00:18:44,080 --> 00:18:48,880 through normally and that's how the go 469 00:18:46,240 --> 00:18:51,360 to macro works i think it works so 470 00:18:48,880 --> 00:18:53,039 simply because there i added um 471 00:18:51,360 --> 00:18:55,679 because there is 472 00:18:53,039 --> 00:18:58,000 jump commands in 473 00:18:55,679 --> 00:19:00,160 uh the original bytecode and it is worth 474 00:18:58,000 --> 00:19:01,919 mentioning that this isn't an exact one 475 00:19:00,160 --> 00:19:03,600 to one of the original by code in human 476 00:19:01,919 --> 00:19:04,640 readable form i've made a few small 477 00:19:03,600 --> 00:19:07,440 changes 478 00:19:04,640 --> 00:19:09,440 just to make it better um but yeah it's 479 00:19:07,440 --> 00:19:10,799 pretty cool i think 480 00:19:09,440 --> 00:19:12,160 and then here's the last one which is a 481 00:19:10,799 --> 00:19:14,400 little complicated it took me a while to 482 00:19:12,160 --> 00:19:16,720 get my head around after i wrote it uh 483 00:19:14,400 --> 00:19:18,640 what it does it is just a 484 00:19:16,720 --> 00:19:20,559 an example to try to show that it's got 485 00:19:18,640 --> 00:19:22,080 so much power and you can really do 486 00:19:20,559 --> 00:19:23,360 anything you want with this you don't 487 00:19:22,080 --> 00:19:26,000 have to do something that already exists 488 00:19:23,360 --> 00:19:28,400 you can let your mind run three so to 489 00:19:26,000 --> 00:19:31,200 speak um and so heads one works is 490 00:19:28,400 --> 00:19:33,039 within the join and block 491 00:19:31,200 --> 00:19:35,919 it it takes the output of the previous 492 00:19:33,039 --> 00:19:37,200 line and feeds it in as the first input 493 00:19:35,919 --> 00:19:40,080 on the 494 00:19:37,200 --> 00:19:41,440 of the function on the next line um and 495 00:19:40,080 --> 00:19:42,960 and n equals three doesn't return 496 00:19:41,440 --> 00:19:45,039 anything in python 497 00:19:42,960 --> 00:19:47,440 uh but i've made it return like a walrus 498 00:19:45,039 --> 00:19:48,240 operator just to make it uh just make 499 00:19:47,440 --> 00:19:50,480 this 500 00:19:48,240 --> 00:19:52,240 this whole thing work but so for this 501 00:19:50,480 --> 00:19:54,320 example right it goes from range three 502 00:19:52,240 --> 00:19:55,440 to six and then it sums that range from 503 00:19:54,320 --> 00:19:57,840 three to six 504 00:19:55,440 --> 00:19:59,919 and then it times it by two and then it 505 00:19:57,840 --> 00:20:01,120 prints that output and which does print 506 00:19:59,919 --> 00:20:02,880 twenty four and then you can see the 507 00:20:01,120 --> 00:20:03,840 maths just here 508 00:20:02,880 --> 00:20:05,200 um 509 00:20:03,840 --> 00:20:07,200 and i think that's really cool this is 510 00:20:05,200 --> 00:20:08,559 just you know i think that's it's pretty 511 00:20:07,200 --> 00:20:09,280 crazy 512 00:20:08,559 --> 00:20:11,440 so 513 00:20:09,280 --> 00:20:14,080 uh just miscellaneous 514 00:20:11,440 --> 00:20:16,320 should you use this in your code um i i 515 00:20:14,080 --> 00:20:17,760 would i hope you wouldn't i think it's 516 00:20:16,320 --> 00:20:19,440 you know it's really bad meta 517 00:20:17,760 --> 00:20:21,280 programming a lot of times 518 00:20:19,440 --> 00:20:22,720 not optimal to using your code at all it 519 00:20:21,280 --> 00:20:24,159 can lead to some very hard to read crow 520 00:20:22,720 --> 00:20:26,799 which we see before 521 00:20:24,159 --> 00:20:30,400 um and i think fundamentally 522 00:20:26,799 --> 00:20:32,080 it's it's kind of anti-pythonic it's not 523 00:20:30,400 --> 00:20:34,880 it's it's against the principles of 524 00:20:32,080 --> 00:20:36,080 python um and so i've got the zener 525 00:20:34,880 --> 00:20:39,120 python here 526 00:20:36,080 --> 00:20:42,159 the zen of python the python poem that 527 00:20:39,120 --> 00:20:44,720 explains exactly 528 00:20:42,159 --> 00:20:47,760 uh the the core design principles of 529 00:20:44,720 --> 00:20:50,720 python and i think you can see that it's 530 00:20:47,760 --> 00:20:52,400 it's just against most of it right um 531 00:20:50,720 --> 00:20:54,559 you know explicit is better than 532 00:20:52,400 --> 00:20:57,440 implicit that's that's the whole idea 533 00:20:54,559 --> 00:21:00,799 isn't it right to try to build 534 00:20:57,440 --> 00:21:02,400 uh implicit changes to python 535 00:21:00,799 --> 00:21:04,159 and then you know 536 00:21:02,400 --> 00:21:05,919 what's the other one oh yeah 537 00:21:04,159 --> 00:21:07,840 if the implementation is hard to explain 538 00:21:05,919 --> 00:21:09,280 it's a bad idea i think that's that's a 539 00:21:07,840 --> 00:21:10,559 given right i spent a whole 10 minutes 540 00:21:09,280 --> 00:21:13,200 trying to explain it 541 00:21:10,559 --> 00:21:14,960 um and then the last one being special 542 00:21:13,200 --> 00:21:16,320 cases aren't special enough to break the 543 00:21:14,960 --> 00:21:18,400 rules right that's the whole point we're 544 00:21:16,320 --> 00:21:20,640 trying to break the rules of python in 545 00:21:18,400 --> 00:21:22,480 order to account for these special cases 546 00:21:20,640 --> 00:21:24,960 right um 547 00:21:22,480 --> 00:21:27,440 and yeah so then you're probably asking 548 00:21:24,960 --> 00:21:29,360 why did you do this then you know what's 549 00:21:27,440 --> 00:21:30,880 what's the whole point and i think you 550 00:21:29,360 --> 00:21:32,559 know you can't do the stuff that list 551 00:21:30,880 --> 00:21:34,480 macros allow you to do you can extend 552 00:21:32,559 --> 00:21:36,559 python syntax you can even write domain 553 00:21:34,480 --> 00:21:38,400 specific languages if you really want to 554 00:21:36,559 --> 00:21:39,440 there's some element of code reuses but 555 00:21:38,400 --> 00:21:41,280 i think 556 00:21:39,440 --> 00:21:43,280 at the end of the day it's just a lot of 557 00:21:41,280 --> 00:21:44,720 fun it was fun to make and i think it's 558 00:21:43,280 --> 00:21:45,919 fun to mess around with the internals of 559 00:21:44,720 --> 00:21:47,360 python 560 00:21:45,919 --> 00:21:49,440 and it's fun to extend language like 561 00:21:47,360 --> 00:21:51,120 this i think it's you know i i enjoyed i 562 00:21:49,440 --> 00:21:52,559 enjoyed doing it and you know i hope you 563 00:21:51,120 --> 00:21:55,120 would enjoy messing around with the 564 00:21:52,559 --> 00:21:57,280 library a little bit uh and yeah so 565 00:21:55,120 --> 00:21:59,200 that's the end of my talk here are the 566 00:21:57,280 --> 00:22:01,440 links around the biker so if you want to 567 00:21:59,200 --> 00:22:02,559 check out the github you can here's a 568 00:22:01,440 --> 00:22:04,159 link 569 00:22:02,559 --> 00:22:07,039 uh and if you want to just install the 570 00:22:04,159 --> 00:22:08,480 library go ahead uh you know just do it 571 00:22:07,039 --> 00:22:09,520 instantly like this 572 00:22:08,480 --> 00:22:12,799 there's the 573 00:22:09,520 --> 00:22:14,159 installation and command is on pip 574 00:22:12,799 --> 00:22:16,000 but i would recommend reading through 575 00:22:14,159 --> 00:22:17,679 the documentation on github if you do 576 00:22:16,000 --> 00:22:18,799 want to give this library a little bit 577 00:22:17,679 --> 00:22:20,400 of a try 578 00:22:18,799 --> 00:22:22,960 uh thank you 579 00:22:20,400 --> 00:22:25,440 fantastic thanks so much 580 00:22:22,960 --> 00:22:27,760 our next talk is a group talk we'll be 581 00:22:25,440 --> 00:22:30,080 hearing from emilia dahlia vyan and 582 00:22:27,760 --> 00:22:31,919 elizabeth about building cooker berry 583 00:22:30,080 --> 00:22:33,600 apps for learning and they've been 584 00:22:31,919 --> 00:22:34,720 programming just since the beginning of 585 00:22:33,600 --> 00:22:36,799 this year 586 00:22:34,720 --> 00:22:39,520 when i asked their favorite emoji it was 587 00:22:36,799 --> 00:22:42,960 a 50 50 split between the rolling eyes 588 00:22:39,520 --> 00:22:45,039 emoji and the sun emoji a dangerous mix 589 00:22:42,960 --> 00:22:46,480 i hope you've got sunnies too 590 00:22:45,039 --> 00:22:48,080 when i asked what they recently learned 591 00:22:46,480 --> 00:22:50,320 about computing they said they've been 592 00:22:48,080 --> 00:22:52,880 learning about caesar ciphers encoding 593 00:22:50,320 --> 00:22:55,520 and decoding and also about the general 594 00:22:52,880 --> 00:22:56,799 concept of computers not having a human 595 00:22:55,520 --> 00:22:59,200 language 596 00:22:56,799 --> 00:23:00,720 it's a deep rabbit hole to go down but 597 00:22:59,200 --> 00:23:03,520 an interesting one 598 00:23:00,720 --> 00:23:03,520 let's hear their talk 599 00:23:03,600 --> 00:23:08,320 hi i'm amelia 600 00:23:05,520 --> 00:23:10,000 elizabeth 601 00:23:08,320 --> 00:23:12,640 dalia 602 00:23:10,000 --> 00:23:14,080 and we're in u9 at plc sydney 603 00:23:12,640 --> 00:23:15,760 and we are the cambridge computer 604 00:23:14,080 --> 00:23:18,240 science class 605 00:23:15,760 --> 00:23:20,000 i've been coding for about seven months 606 00:23:18,240 --> 00:23:22,400 started this year 607 00:23:20,000 --> 00:23:24,080 since the start of this year around 608 00:23:22,400 --> 00:23:25,919 seven months 609 00:23:24,080 --> 00:23:27,840 i got involved in computer science 610 00:23:25,919 --> 00:23:29,600 because i believe that if i learn about 611 00:23:27,840 --> 00:23:31,679 something that keeps evolving it will 612 00:23:29,600 --> 00:23:33,120 help me in the future 613 00:23:31,679 --> 00:23:34,320 i think it is important to know about 614 00:23:33,120 --> 00:23:37,120 because the time we are living in 615 00:23:34,320 --> 00:23:38,640 revolves more and more around computers 616 00:23:37,120 --> 00:23:40,960 i believe that computer science will be 617 00:23:38,640 --> 00:23:42,559 a helpful tool in our future 618 00:23:40,960 --> 00:23:44,559 and i thought it would be interesting to 619 00:23:42,559 --> 00:23:46,559 learn 620 00:23:44,559 --> 00:23:48,080 for our assignment our teacher ms noble 621 00:23:46,559 --> 00:23:49,600 challenged us to design and code 622 00:23:48,080 --> 00:23:50,960 programs in python that will help with 623 00:23:49,600 --> 00:23:52,720 learning 624 00:23:50,960 --> 00:23:55,120 to complete the challenge we got to use 625 00:23:52,720 --> 00:23:56,720 cooker berries an embedded device coded 626 00:23:55,120 --> 00:23:58,799 in micro python 627 00:23:56,720 --> 00:24:01,520 they have lots of inputs and outputs 628 00:23:58,799 --> 00:24:04,720 like buttons screens and speakers that 629 00:24:01,520 --> 00:24:06,400 we could use to create our programs 630 00:24:04,720 --> 00:24:08,400 together we came up with seven apps to 631 00:24:06,400 --> 00:24:12,159 help with practicing music and studying 632 00:24:08,400 --> 00:24:12,159 for school that we'll show you today 633 00:24:14,960 --> 00:24:18,720 i created two apps to help with language 634 00:24:16,640 --> 00:24:20,080 learning and organization i chose to 635 00:24:18,720 --> 00:24:21,440 create programs for this area of 636 00:24:20,080 --> 00:24:22,880 learning because i personally struggled 637 00:24:21,440 --> 00:24:24,960 with organizing myself and finding 638 00:24:22,880 --> 00:24:26,320 myself wanting to study i started by 639 00:24:24,960 --> 00:24:27,440 thinking about what i would want in a 640 00:24:26,320 --> 00:24:28,720 learning app and thought it would be 641 00:24:27,440 --> 00:24:30,720 good if i could use technology to 642 00:24:28,720 --> 00:24:33,120 emulate that so i decided to make my 643 00:24:30,720 --> 00:24:34,799 calendar and flashcard cookieberry apps 644 00:24:33,120 --> 00:24:36,480 my first app was my calendar app and i 645 00:24:34,799 --> 00:24:38,559 started off by working on the design and 646 00:24:36,480 --> 00:24:40,080 features i wanted my original idea was 647 00:24:38,559 --> 00:24:41,679 to have a large timetable template 648 00:24:40,080 --> 00:24:43,520 similar to a school timetable with all 649 00:24:41,679 --> 00:24:44,799 the days of the week however i realized 650 00:24:43,520 --> 00:24:46,320 this would not be possible since the 651 00:24:44,799 --> 00:24:48,240 cookberry pixels are quite large and 652 00:24:46,320 --> 00:24:49,600 there would not be enough space i came 653 00:24:48,240 --> 00:24:51,600 up with a new design that fit the screen 654 00:24:49,600 --> 00:24:53,919 which only showed one day at a time once 655 00:24:51,600 --> 00:24:55,440 i had my design i needed to start coding 656 00:24:53,919 --> 00:24:57,520 i first coded the lines that would make 657 00:24:55,440 --> 00:24:58,799 up the timetable boxes there's a lot of 658 00:24:57,520 --> 00:25:00,159 python to learn because this is the 659 00:24:58,799 --> 00:25:01,840 first time i'd encountered code for 660 00:25:00,159 --> 00:25:03,760 displaying boxes and shapes on the kooky 661 00:25:01,840 --> 00:25:05,440 berry getting it to look like my design 662 00:25:03,760 --> 00:25:06,720 took a lot of trial and error i also had 663 00:25:05,440 --> 00:25:07,919 a lot of lists of data to organize to 664 00:25:06,720 --> 00:25:10,159 ensure that different study sessions 665 00:25:07,919 --> 00:25:11,679 would associate with their day 666 00:25:10,159 --> 00:25:13,279 i also needed to do things like get the 667 00:25:11,679 --> 00:25:14,880 week to loop back round to the start 668 00:25:13,279 --> 00:25:17,200 when using buttons to click the days in 669 00:25:14,880 --> 00:25:18,960 the timetable i needed to use a special 670 00:25:17,200 --> 00:25:20,480 case when i reached the end of the week 671 00:25:18,960 --> 00:25:22,240 so i could get back to the data stored 672 00:25:20,480 --> 00:25:24,080 in my list for the start of the week 673 00:25:22,240 --> 00:25:26,240 when i run my app it opens to sunday and 674 00:25:24,080 --> 00:25:29,200 the task that day to go the next day 675 00:25:26,240 --> 00:25:30,640 click d to go the previous day click c 676 00:25:29,200 --> 00:25:32,080 for my second app i thought about how 677 00:25:30,640 --> 00:25:33,760 flashcards are helpful tool when 678 00:25:32,080 --> 00:25:34,720 learning so i thought a flashcard app 679 00:25:33,760 --> 00:25:37,200 would be a good choice for this 680 00:25:34,720 --> 00:25:38,559 assignment i wanted to be able to show a 681 00:25:37,200 --> 00:25:40,159 word in one language and then have the 682 00:25:38,559 --> 00:25:42,640 user click to find out and memorize the 683 00:25:40,159 --> 00:25:44,240 translation it ended up working so if a 684 00:25:42,640 --> 00:25:46,240 is pressed it will display a word to 685 00:25:44,240 --> 00:25:48,480 memorize in this case i chose various 686 00:25:46,240 --> 00:25:51,279 french words if b is pressed the english 687 00:25:48,480 --> 00:25:52,960 is shown if d is pressed the next card 688 00:25:51,279 --> 00:25:54,640 is shown with the english option i 689 00:25:52,960 --> 00:25:56,240 wanted to make sure that it would be 690 00:25:54,640 --> 00:25:57,679 able to go backwards through the cards 691 00:25:56,240 --> 00:25:59,600 as well but i couldn't figure out how 692 00:25:57,679 --> 00:26:01,120 with the time i had when the final words 693 00:25:59,600 --> 00:26:02,880 are reached and d is pressed to go to 694 00:26:01,120 --> 00:26:04,480 the next one a congratulatory message 695 00:26:02,880 --> 00:26:06,559 appears as well as the vocab that should 696 00:26:04,480 --> 00:26:09,520 be memorized the user has the option to 697 00:26:06,559 --> 00:26:11,039 repeat the system by clicking a 698 00:26:09,520 --> 00:26:12,240 the hardest part of this app was finding 699 00:26:11,039 --> 00:26:13,679 a way to switch between the cards 700 00:26:12,240 --> 00:26:15,520 because there were multiple bits of data 701 00:26:13,679 --> 00:26:17,760 associated with each screen 702 00:26:15,520 --> 00:26:19,360 i really enjoyed learning about these 703 00:26:17,760 --> 00:26:21,039 new ways to use python because i never 704 00:26:19,360 --> 00:26:22,480 encountered them before 705 00:26:21,039 --> 00:26:24,320 in the future i hope to utilize what 706 00:26:22,480 --> 00:26:27,600 i've learned so i can find ways to 707 00:26:24,320 --> 00:26:27,600 improve my programming skills 708 00:26:29,440 --> 00:26:33,919 i created an app to help with studying 709 00:26:32,159 --> 00:26:35,919 i chose to create a program for this 710 00:26:33,919 --> 00:26:37,279 area of learning because it helps lots 711 00:26:35,919 --> 00:26:40,159 of people when they are studying for 712 00:26:37,279 --> 00:26:42,080 multiple subjects at one given time 713 00:26:40,159 --> 00:26:44,080 i started out by thinking about how i 714 00:26:42,080 --> 00:26:45,840 could use programming and the features 715 00:26:44,080 --> 00:26:48,720 of the kookaberry like the buttons and 716 00:26:45,840 --> 00:26:51,919 screen to help students learn 717 00:26:48,720 --> 00:26:54,159 and so i decided to make a pop quiz app 718 00:26:51,919 --> 00:26:56,080 to do this i first had to come up with a 719 00:26:54,159 --> 00:26:58,320 plan of what questions to put in the 720 00:26:56,080 --> 00:27:01,440 quiz as well as coming up with both the 721 00:26:58,320 --> 00:27:04,159 correct and incorrect answers 722 00:27:01,440 --> 00:27:06,559 to code the actual quiz i had to use a 723 00:27:04,159 --> 00:27:08,880 lot of lists for storing the question 724 00:27:06,559 --> 00:27:10,400 the multiple choice answers as well as a 725 00:27:08,880 --> 00:27:12,640 list that says which is the correct 726 00:27:10,400 --> 00:27:14,480 answer for each question 727 00:27:12,640 --> 00:27:16,080 getting it to work was tricky because 728 00:27:14,480 --> 00:27:18,720 sometimes the question wouldn't match up 729 00:27:16,080 --> 00:27:20,559 with the corresponding answer but once i 730 00:27:18,720 --> 00:27:23,200 made sure my lists were in the right 731 00:27:20,559 --> 00:27:25,360 order of answers and questions and that 732 00:27:23,200 --> 00:27:26,640 i was using the right indexes it all 733 00:27:25,360 --> 00:27:28,640 worked 734 00:27:26,640 --> 00:27:31,360 along the way i changed the design of my 735 00:27:28,640 --> 00:27:32,960 project like including more questions 736 00:27:31,360 --> 00:27:34,799 since i thought this would be useful to 737 00:27:32,960 --> 00:27:37,440 give the user more questions to test 738 00:27:34,799 --> 00:27:37,440 themselves on 739 00:27:38,159 --> 00:27:42,640 in the end i got an app that works by 740 00:27:40,240 --> 00:27:44,880 pressing a to start it and then when the 741 00:27:42,640 --> 00:27:48,559 question and answer options appear you 742 00:27:44,880 --> 00:27:50,399 select an answer using buttons a to d 743 00:27:48,559 --> 00:27:52,159 once you have chosen your answer it 744 00:27:50,399 --> 00:27:54,799 tells you if you are correct or not and 745 00:27:52,159 --> 00:27:56,640 lets you proceed to the next question 746 00:27:54,799 --> 00:27:58,640 in the future i hope to code this app 747 00:27:56,640 --> 00:28:00,799 again so i can improve some features of 748 00:27:58,640 --> 00:28:03,120 it like more questions and maybe a score 749 00:28:00,799 --> 00:28:06,159 tally at the end and continue adding to 750 00:28:03,120 --> 00:28:06,159 it to make it better 751 00:28:10,640 --> 00:28:14,559 to do this project i started out by 752 00:28:12,640 --> 00:28:16,320 thinking about what activities i do for 753 00:28:14,559 --> 00:28:18,640 school and who could help me with my own 754 00:28:16,320 --> 00:28:20,880 learning i played musical instrument in 755 00:28:18,640 --> 00:28:22,640 school so i decided to make an app that 756 00:28:20,880 --> 00:28:23,840 would make it easier to practice music 757 00:28:22,640 --> 00:28:26,000 from home 758 00:28:23,840 --> 00:28:28,240 so i decided to make two apps a 759 00:28:26,000 --> 00:28:29,919 metronome that helps you play in time 760 00:28:28,240 --> 00:28:32,240 and an app that keeps track of how many 761 00:28:29,919 --> 00:28:34,159 times you've practiced different songs 762 00:28:32,240 --> 00:28:35,760 for my metronome app i used a cooker 763 00:28:34,159 --> 00:28:38,080 berry with the speaker module to play 764 00:28:35,760 --> 00:28:40,399 the beat to code my app i had to think 765 00:28:38,080 --> 00:28:42,159 about how people would interact with it 766 00:28:40,399 --> 00:28:44,480 and i decided to use four buttons on the 767 00:28:42,159 --> 00:28:47,200 cooker berry for different functions on 768 00:28:44,480 --> 00:28:49,360 off faster and slower 769 00:28:47,200 --> 00:28:51,600 to reuse the metronome you click a to 770 00:28:49,360 --> 00:28:53,919 start it once a is clicked the beat will 771 00:28:51,600 --> 00:28:56,240 start coming from the speaker if you 772 00:28:53,919 --> 00:28:58,240 click c the tempo will become slower and 773 00:28:56,240 --> 00:29:02,480 if you click d the tempo will become 774 00:28:58,240 --> 00:29:02,480 faster to stop the metronome click b 775 00:29:03,279 --> 00:29:08,240 because i wanted to be able to vary the 776 00:29:05,440 --> 00:29:10,240 speed of my metronome gaining the timing 777 00:29:08,240 --> 00:29:12,480 was tricky i had to have two different 778 00:29:10,240 --> 00:29:14,240 time values so that it would stay in b 779 00:29:12,480 --> 00:29:16,399 for the length of the b and the time 780 00:29:14,240 --> 00:29:18,640 between beats but once i understood how 781 00:29:16,399 --> 00:29:20,640 to get the time right i could add two or 782 00:29:18,640 --> 00:29:23,520 subtract from the variables to change 783 00:29:20,640 --> 00:29:25,679 the tempo to get it working 784 00:29:23,520 --> 00:29:27,039 once i had my metronome working i wanted 785 00:29:25,679 --> 00:29:29,279 a way to track the songs i was 786 00:29:27,039 --> 00:29:31,039 practicing i started out by coding a 787 00:29:29,279 --> 00:29:33,760 list of all the names of the songs i 788 00:29:31,039 --> 00:29:35,919 wanted to track to practice on 789 00:29:33,760 --> 00:29:37,679 once i had done that i created another 790 00:29:35,919 --> 00:29:39,840 list that would keep a tally for each 791 00:29:37,679 --> 00:29:42,559 song so that we would have a different 792 00:29:39,840 --> 00:29:44,000 count for each songs in the first list 793 00:29:42,559 --> 00:29:45,919 getting the tally to match up with 794 00:29:44,000 --> 00:29:48,080 correct song was tricky because it would 795 00:29:45,919 --> 00:29:50,240 keep the same tally but then go to the 796 00:29:48,080 --> 00:29:53,120 next song but once i worked out the 797 00:29:50,240 --> 00:29:55,440 indexes i got it working 798 00:29:53,120 --> 00:29:58,159 my finished app looked like this 799 00:29:55,440 --> 00:30:00,240 you can click a and b to move backwards 800 00:29:58,159 --> 00:30:02,880 and forwards between different songs and 801 00:30:00,240 --> 00:30:05,520 click c and d to add or 802 00:30:02,880 --> 00:30:07,279 take away from the tally i even added an 803 00:30:05,520 --> 00:30:09,840 extra feature where once the tally 804 00:30:07,279 --> 00:30:11,760 reaches 5 on the song this neopixel 805 00:30:09,840 --> 00:30:14,960 light display will flash to congratulate 806 00:30:11,760 --> 00:30:17,120 you for you reaching your goal 807 00:30:14,960 --> 00:30:19,120 i really enjoyed making my apps because 808 00:30:17,120 --> 00:30:21,120 i could put my skills to use and create 809 00:30:19,120 --> 00:30:23,840 something of my own rather than copying 810 00:30:21,120 --> 00:30:23,840 from a booklet 811 00:30:27,440 --> 00:30:31,279 i created two wraps to help with study i 812 00:30:29,600 --> 00:30:32,880 chose to create programs for this area 813 00:30:31,279 --> 00:30:34,799 of learning because i do not have a good 814 00:30:32,880 --> 00:30:36,960 study routine and never feel motivated 815 00:30:34,799 --> 00:30:38,720 to study 816 00:30:36,960 --> 00:30:40,159 i started out by thinking about the ways 817 00:30:38,720 --> 00:30:42,000 that have helped me to study and thought 818 00:30:40,159 --> 00:30:45,120 it'd be good if i could use technology 819 00:30:42,000 --> 00:30:47,200 to make study time in quota so first i 820 00:30:45,120 --> 00:30:49,279 decided to make an automatic pomodoro 821 00:30:47,200 --> 00:30:51,679 method timer which is a method that is 822 00:30:49,279 --> 00:30:53,919 25 minutes of study and a five minute 823 00:30:51,679 --> 00:30:55,840 break and this continues 824 00:30:53,919 --> 00:30:58,080 and once i've done that i made an app 825 00:30:55,840 --> 00:30:59,840 that displays inspirational quotes to 826 00:30:58,080 --> 00:31:01,519 keep me motivated 827 00:30:59,840 --> 00:31:03,760 the first thing i did was work out how 828 00:31:01,519 --> 00:31:05,760 my study time should work my first 829 00:31:03,760 --> 00:31:07,519 version of the project was an app that 830 00:31:05,760 --> 00:31:09,200 would start when you press button a and 831 00:31:07,519 --> 00:31:11,279 it would start counting down from 25 832 00:31:09,200 --> 00:31:13,039 minutes for the study session and once 833 00:31:11,279 --> 00:31:15,519 that finished it would count down from 834 00:31:13,039 --> 00:31:17,600 five minutes for the break time 835 00:31:15,519 --> 00:31:19,919 i then added on extra features like 836 00:31:17,600 --> 00:31:21,519 doing multiple sessions in a row adding 837 00:31:19,919 --> 00:31:24,320 a speaker to make sounds at the end of 838 00:31:21,519 --> 00:31:26,080 each set each session the ability to end 839 00:31:24,320 --> 00:31:28,240 the session and account for how many 840 00:31:26,080 --> 00:31:30,000 sessions you've done in a row 841 00:31:28,240 --> 00:31:32,159 the trickiest thing about making the 842 00:31:30,000 --> 00:31:34,159 time was that the coco really long by 843 00:31:32,159 --> 00:31:35,760 the end and i needed to keep adding to 844 00:31:34,159 --> 00:31:37,679 and editing lots of different parts of 845 00:31:35,760 --> 00:31:39,760 the code to create my new features 846 00:31:37,679 --> 00:31:41,679 because it was all connected but with 847 00:31:39,760 --> 00:31:42,880 the help of my teacher i managed to work 848 00:31:41,679 --> 00:31:43,840 out how to code it all and get it 849 00:31:42,880 --> 00:31:45,919 working 850 00:31:43,840 --> 00:31:47,679 my motivational quote was much more 851 00:31:45,919 --> 00:31:49,919 straightforward to make it wasn't 852 00:31:47,679 --> 00:31:51,919 particularly hard to code since i just 853 00:31:49,919 --> 00:31:56,720 started to learn how to code it was 854 00:31:51,919 --> 00:31:56,720 tricky to locate and fix syntax errors 855 00:31:56,799 --> 00:32:00,880 using my app is also straightforward you 856 00:31:58,799 --> 00:32:02,720 can just press button a this will make a 857 00:32:00,880 --> 00:32:04,000 random code display on the screen of the 858 00:32:02,720 --> 00:32:05,679 quicker berry 859 00:32:04,000 --> 00:32:08,559 you can press button every time you want 860 00:32:05,679 --> 00:32:10,559 a new quote to read 861 00:32:08,559 --> 00:32:12,159 i really enjoy creating my own apps 862 00:32:10,559 --> 00:32:15,120 because i was able to code without a 863 00:32:12,159 --> 00:32:17,120 step-by-step guide in future i hope to 864 00:32:15,120 --> 00:32:18,720 code more apps again so i can implement 865 00:32:17,120 --> 00:32:20,799 what i've learned from this from the 866 00:32:18,720 --> 00:32:24,000 beginning of this year up until now and 867 00:32:20,799 --> 00:32:24,000 create even better apps 868 00:32:26,720 --> 00:32:30,320 i really enjoyed making these apps 869 00:32:28,559 --> 00:32:32,320 because it helped me understand what 870 00:32:30,320 --> 00:32:34,240 goes on inside a computer when using a 871 00:32:32,320 --> 00:32:36,159 similar app 872 00:32:34,240 --> 00:32:38,000 using python for this project was good 873 00:32:36,159 --> 00:32:39,679 because i learned most of the basics of 874 00:32:38,000 --> 00:32:41,360 python at the beginning of the year so i 875 00:32:39,679 --> 00:32:43,679 was able to understand the layout of the 876 00:32:41,360 --> 00:32:45,679 code and how to code my apps with cooker 877 00:32:43,679 --> 00:32:47,279 berry 878 00:32:45,679 --> 00:32:48,960 in the future i hope to use the cooker 879 00:32:47,279 --> 00:32:51,200 barrier again so i can create more apps 880 00:32:48,960 --> 00:32:53,200 with better coding 881 00:32:51,200 --> 00:32:54,960 using python for these products was good 882 00:32:53,200 --> 00:32:56,720 because we had spent the year learning 883 00:32:54,960 --> 00:32:58,399 about python which is relatively easy 884 00:32:56,720 --> 00:32:59,919 for a beginner and i look forward to 885 00:32:58,399 --> 00:33:02,320 creating more projects with python in 886 00:32:59,919 --> 00:33:02,320 the future 887 00:33:06,080 --> 00:33:11,200 that was fantastic consoles look out 888 00:33:09,039 --> 00:33:13,200 there are new games in town and here's 889 00:33:11,200 --> 00:33:14,880 another one to talk about 890 00:33:13,200 --> 00:33:17,279 samuel is talking about making an 891 00:33:14,880 --> 00:33:19,200 isometric game from scratch in python 892 00:33:17,279 --> 00:33:21,039 using pygame 893 00:33:19,200 --> 00:33:24,159 samuel's been programming for about six 894 00:33:21,039 --> 00:33:25,919 years so since year six and his favorite 895 00:33:24,159 --> 00:33:29,039 emoji is the 896 00:33:25,919 --> 00:33:30,720 glasses emoji glasses represent 897 00:33:29,039 --> 00:33:32,320 when i asked what he's recently learned 898 00:33:30,720 --> 00:33:34,159 about computers he replied that 899 00:33:32,320 --> 00:33:36,720 computers are bad at maths with 900 00:33:34,159 --> 00:33:39,279 fractions floating point errors occur 901 00:33:36,720 --> 00:33:41,760 when computers round numbers and they 902 00:33:39,279 --> 00:33:43,360 are quite scary these errors when they 903 00:33:41,760 --> 00:33:45,919 add up 904 00:33:43,360 --> 00:33:47,519 let's hear more about his talk 905 00:33:45,919 --> 00:33:49,760 good afternoon 906 00:33:47,519 --> 00:33:52,559 welcome to my talk on how i implemented 907 00:33:49,760 --> 00:33:54,240 isometric 3d in python's pie game 908 00:33:52,559 --> 00:33:55,840 by way of introductions my name is 909 00:33:54,240 --> 00:33:57,440 samuel price i go to san andreas 910 00:33:55,840 --> 00:34:00,080 cathedral school and i've been 911 00:33:57,440 --> 00:34:02,480 programming since grade six so about six 912 00:34:00,080 --> 00:34:04,000 to six years now and in those six years 913 00:34:02,480 --> 00:34:07,200 something i've always really wanted to 914 00:34:04,000 --> 00:34:08,800 do was develop a system for 3d 915 00:34:07,200 --> 00:34:10,320 i've very much always been able to 916 00:34:08,800 --> 00:34:12,240 believe that the best way to learn about 917 00:34:10,320 --> 00:34:13,520 something is to do it yourself i started 918 00:34:12,240 --> 00:34:16,000 off coding 919 00:34:13,520 --> 00:34:17,679 some text-based rpgs moved on to 2d 920 00:34:16,000 --> 00:34:19,280 games and i 921 00:34:17,679 --> 00:34:20,560 made a clone of 922 00:34:19,280 --> 00:34:23,599 quite a few 923 00:34:20,560 --> 00:34:26,159 uh 2d games if you can think of one 924 00:34:23,599 --> 00:34:28,960 i've probably done it 925 00:34:26,159 --> 00:34:31,359 but one day i really really wanted to do 926 00:34:28,960 --> 00:34:32,560 something in 3d the best system i could 927 00:34:31,359 --> 00:34:35,839 think of 928 00:34:32,560 --> 00:34:37,919 for me to implement was isometric 3d 929 00:34:35,839 --> 00:34:40,320 now if you remember your math math 930 00:34:37,919 --> 00:34:42,399 classes from grades one and two 931 00:34:40,320 --> 00:34:44,240 what you get is these little series of 932 00:34:42,399 --> 00:34:46,720 dots and you can connect them up to make 933 00:34:44,240 --> 00:34:49,040 shapes um essentially when it works if 934 00:34:46,720 --> 00:34:52,079 you want to travel say one unit in the x 935 00:34:49,040 --> 00:34:54,639 axis you draw one of these lines in this 936 00:34:52,079 --> 00:34:56,720 direction one of the y you do one of 937 00:34:54,639 --> 00:34:57,680 these lines here one with z one of those 938 00:34:56,720 --> 00:34:59,280 ones 939 00:34:57,680 --> 00:35:00,880 and you train those together to get 940 00:34:59,280 --> 00:35:02,800 different points and to make two 941 00:35:00,880 --> 00:35:04,800 different shapes 942 00:35:02,800 --> 00:35:06,880 which all works pretty well and you can 943 00:35:04,800 --> 00:35:08,079 see here that this is an implementation 944 00:35:06,880 --> 00:35:10,400 of that model 945 00:35:08,079 --> 00:35:11,520 it's just a little c where the ripples 946 00:35:10,400 --> 00:35:13,359 come out 947 00:35:11,520 --> 00:35:14,960 and you can you can see the depth you 948 00:35:13,359 --> 00:35:16,640 can understand how it functions in three 949 00:35:14,960 --> 00:35:17,760 dimensions you can see the rotation as 950 00:35:16,640 --> 00:35:20,480 well 951 00:35:17,760 --> 00:35:23,520 however the depth is also one problem of 952 00:35:20,480 --> 00:35:26,400 this see in orthographic 3d which is 953 00:35:23,520 --> 00:35:27,920 what we see in real life perspective 3d 954 00:35:26,400 --> 00:35:29,680 when something's further away you see a 955 00:35:27,920 --> 00:35:30,480 smaller when it's closer you see it is 956 00:35:29,680 --> 00:35:32,480 bigger 957 00:35:30,480 --> 00:35:34,640 but in isometric that's not quite how it 958 00:35:32,480 --> 00:35:36,640 works if you have just a series of dots 959 00:35:34,640 --> 00:35:38,160 it doesn't matter if you draw it on one 960 00:35:36,640 --> 00:35:40,400 place or another it's always going to be 961 00:35:38,160 --> 00:35:42,960 the same size 962 00:35:40,400 --> 00:35:45,200 and so you can see here in this game a 963 00:35:42,960 --> 00:35:47,359 small clone of temple run that i've 964 00:35:45,200 --> 00:35:48,320 found a way to overcome this 965 00:35:47,359 --> 00:35:50,640 see 966 00:35:48,320 --> 00:35:53,359 normally if you're jumping say from the 967 00:35:50,640 --> 00:35:54,800 left most lane be hard to tell if you're 968 00:35:53,359 --> 00:35:56,160 actually jumping from that lane or if 969 00:35:54,800 --> 00:35:58,160 you're just in another lane staying 970 00:35:56,160 --> 00:36:00,960 still 971 00:35:58,160 --> 00:36:03,680 which is why i implemented a shadow 972 00:36:00,960 --> 00:36:05,839 so you can see it shows under the player 973 00:36:03,680 --> 00:36:07,599 to add a sense of immersion and not 974 00:36:05,839 --> 00:36:10,240 break the suspension to disbelieve a 975 00:36:07,599 --> 00:36:12,000 player has when playing a game 976 00:36:10,240 --> 00:36:13,839 which is obviously quite useful for my 977 00:36:12,000 --> 00:36:15,119 purposes 978 00:36:13,839 --> 00:36:17,440 but 979 00:36:15,119 --> 00:36:19,359 another success and 980 00:36:17,440 --> 00:36:22,560 arguably another implementation of this 981 00:36:19,359 --> 00:36:22,560 model can be seen here 982 00:36:23,440 --> 00:36:27,520 now these shoot among you may notice 983 00:36:25,440 --> 00:36:28,640 that there is a slight problem with this 984 00:36:27,520 --> 00:36:30,079 clip 985 00:36:28,640 --> 00:36:32,960 and that is that 986 00:36:30,079 --> 00:36:35,040 it actually slightly overlaps in 987 00:36:32,960 --> 00:36:37,599 a few of the frames 988 00:36:35,040 --> 00:36:39,839 um which is to say that the shapes don't 989 00:36:37,599 --> 00:36:42,160 draw in the right order now thinking 990 00:36:39,839 --> 00:36:44,400 about draw or ordering 991 00:36:42,160 --> 00:36:48,160 this is the system i came up with to do 992 00:36:44,400 --> 00:36:51,040 it in isometric if you think uh you as 993 00:36:48,160 --> 00:36:52,800 the audience looking at me and this pen 994 00:36:51,040 --> 00:36:54,720 if you want to draw those to render in 995 00:36:52,800 --> 00:36:56,400 the correct order if i'm in the back you 996 00:36:54,720 --> 00:36:59,839 have to draw me first in a second so 997 00:36:56,400 --> 00:37:00,720 this shows over me rather than behind me 998 00:36:59,839 --> 00:37:03,280 and 999 00:37:00,720 --> 00:37:05,040 in order to do this i think of having a 1000 00:37:03,280 --> 00:37:06,560 line that goes straight from your vision 1001 00:37:05,040 --> 00:37:10,000 straight forward you don't have to care 1002 00:37:06,560 --> 00:37:13,359 about left or right or up or down 1003 00:37:10,000 --> 00:37:15,440 but if you look at me and then this pen 1004 00:37:13,359 --> 00:37:17,680 you think about this pen is actually 1005 00:37:15,440 --> 00:37:20,160 closer on that line going straight to 1006 00:37:17,680 --> 00:37:22,000 you than i am which is why this pen is 1007 00:37:20,160 --> 00:37:23,200 closer to you and should be rendered 1008 00:37:22,000 --> 00:37:25,200 last 1009 00:37:23,200 --> 00:37:26,960 and that's essentially what i did by 1010 00:37:25,200 --> 00:37:30,160 making a function that gives you the 1011 00:37:26,960 --> 00:37:32,160 normal to the to the uh camera for the 1012 00:37:30,160 --> 00:37:35,280 isometrics in 3d or for the 1013 00:37:32,160 --> 00:37:36,880 mathematically uninitiated of you and i 1014 00:37:35,280 --> 00:37:38,320 hope you look forward to that math i 1015 00:37:36,880 --> 00:37:40,320 certainly did 1016 00:37:38,320 --> 00:37:42,079 effectively just a line that goes 1017 00:37:40,320 --> 00:37:43,520 straight out from you like i was talking 1018 00:37:42,079 --> 00:37:47,599 about 1019 00:37:43,520 --> 00:37:49,520 i was able to sort shapes and points 1020 00:37:47,599 --> 00:37:50,720 to render in the correct order 1021 00:37:49,520 --> 00:37:53,040 however 1022 00:37:50,720 --> 00:37:55,280 in saying shapes it only really works 1023 00:37:53,040 --> 00:37:57,920 for points you can see in this example 1024 00:37:55,280 --> 00:37:59,200 here that this terrain that's generated 1025 00:37:57,920 --> 00:38:01,359 you can 1026 00:37:59,200 --> 00:38:02,880 see it drawn in the correct aura quarter 1027 00:38:01,359 --> 00:38:04,560 as the mountain moves closer to the 1028 00:38:02,880 --> 00:38:05,839 camera everything behind it is not 1029 00:38:04,560 --> 00:38:07,200 visible to you 1030 00:38:05,839 --> 00:38:09,520 and 1031 00:38:07,200 --> 00:38:11,359 that's exactly as you'd expect but then 1032 00:38:09,520 --> 00:38:13,040 why with those rectangular prisms does 1033 00:38:11,359 --> 00:38:16,079 it not always work 1034 00:38:13,040 --> 00:38:18,960 and as i understand it that's simply 1035 00:38:16,079 --> 00:38:21,599 a problem with discrete mathematics see 1036 00:38:18,960 --> 00:38:24,079 my formula is just built for working out 1037 00:38:21,599 --> 00:38:25,839 uh the position that it has in that line 1038 00:38:24,079 --> 00:38:27,599 which is only a point 1039 00:38:25,839 --> 00:38:28,720 not something that has width and height 1040 00:38:27,599 --> 00:38:30,400 and depth 1041 00:38:28,720 --> 00:38:31,920 um and that's definitely something i'm 1042 00:38:30,400 --> 00:38:33,520 going to be working on in the future to 1043 00:38:31,920 --> 00:38:34,640 try and overcome that or work a way 1044 00:38:33,520 --> 00:38:36,960 around it 1045 00:38:34,640 --> 00:38:39,599 but enough of these limitations 1046 00:38:36,960 --> 00:38:42,000 here's something i actually made with it 1047 00:38:39,599 --> 00:38:43,920 what you see here on the screen is my 1048 00:38:42,000 --> 00:38:45,599 year 12 major work for software design 1049 00:38:43,920 --> 00:38:48,240 and development 1050 00:38:45,599 --> 00:38:50,640 this is called ecosim as it is a 1051 00:38:48,240 --> 00:38:54,079 simulator of ecosystems you have plants 1052 00:38:50,640 --> 00:38:55,599 and animals interacting eating drinking 1053 00:38:54,079 --> 00:38:57,440 all that stuff 1054 00:38:55,599 --> 00:39:00,880 and the best way to think of to deliver 1055 00:38:57,440 --> 00:39:03,119 that was an isometric 3d to give it 2d 1056 00:39:00,880 --> 00:39:05,680 would mean have to flatten out animals 1057 00:39:03,119 --> 00:39:07,680 or have them represented by a character 1058 00:39:05,680 --> 00:39:09,520 i'm all that works i do value the 1059 00:39:07,680 --> 00:39:12,320 immersion even if it is only the 1060 00:39:09,520 --> 00:39:13,040 immersion offered by a voxelized model 1061 00:39:12,320 --> 00:39:16,880 like 1062 00:39:13,040 --> 00:39:16,880 minecraft or terrarium for example 1063 00:39:16,960 --> 00:39:21,200 but in doing this you can rotate the 1064 00:39:18,880 --> 00:39:22,640 models in 3d you can see them moving 1065 00:39:21,200 --> 00:39:24,079 around and even where they're going to 1066 00:39:22,640 --> 00:39:25,359 move as they point in that direction 1067 00:39:24,079 --> 00:39:27,920 when they walk 1068 00:39:25,359 --> 00:39:30,160 and you can notice the view ordering is 1069 00:39:27,920 --> 00:39:32,560 almost correct as when something walks 1070 00:39:30,160 --> 00:39:35,440 behind a tree it does actually go behind 1071 00:39:32,560 --> 00:39:38,240 it and in front of it when it's in front 1072 00:39:35,440 --> 00:39:40,720 which is definitely a success 1073 00:39:38,240 --> 00:39:42,960 however in saying that this did require 1074 00:39:40,720 --> 00:39:44,720 significant optimization 1075 00:39:42,960 --> 00:39:46,400 now for any of you that have tried to 1076 00:39:44,720 --> 00:39:48,880 make a rather significant project in 1077 00:39:46,400 --> 00:39:51,280 python probably well-known does not 1078 00:39:48,880 --> 00:39:54,079 always run the fastest 1079 00:39:51,280 --> 00:39:56,240 and a lot of that is definitely on me i 1080 00:39:54,079 --> 00:39:57,440 am not by any means the most experienced 1081 00:39:56,240 --> 00:39:58,560 programmer 1082 00:39:57,440 --> 00:40:00,640 um 1083 00:39:58,560 --> 00:40:03,119 and what i ended up coming up with was 1084 00:40:00,640 --> 00:40:06,079 two ways to optimize it the first way is 1085 00:40:03,119 --> 00:40:07,839 thinking of um as you see on the screen 1086 00:40:06,079 --> 00:40:09,440 here there are only certain tiles that 1087 00:40:07,839 --> 00:40:10,960 are actually visible to you you can 1088 00:40:09,440 --> 00:40:13,119 imagine that whole bunch of childs are 1089 00:40:10,960 --> 00:40:14,640 off screen that aren't and drawing those 1090 00:40:13,119 --> 00:40:17,200 is a waste of processing power 1091 00:40:14,640 --> 00:40:20,319 especially if you are trying to do that 1092 00:40:17,200 --> 00:40:22,880 60 times a second 1093 00:40:20,319 --> 00:40:26,480 so i i have done that by thinking of 1094 00:40:22,880 --> 00:40:28,160 each row as a line and doing some linear 1095 00:40:26,480 --> 00:40:30,160 algebra you can work out when the line 1096 00:40:28,160 --> 00:40:31,520 travels off the screen and that's the 1097 00:40:30,160 --> 00:40:33,680 wellington 1098 00:40:31,520 --> 00:40:35,440 but what if you were to zoom out you 1099 00:40:33,680 --> 00:40:37,760 would still be seeing everything and 1100 00:40:35,440 --> 00:40:40,079 optimization wouldn't help you there 1101 00:40:37,760 --> 00:40:42,000 because there's nothing off screen 1102 00:40:40,079 --> 00:40:45,359 so the next idea i had was just to 1103 00:40:42,000 --> 00:40:47,520 pre-render the sprite so turn a 3d map 1104 00:40:45,359 --> 00:40:49,599 into a 2d sprite which you can draw on 1105 00:40:47,520 --> 00:40:52,240 the screen each frame a lot more easily 1106 00:40:49,599 --> 00:40:53,760 than you can render every single tile 1107 00:40:52,240 --> 00:40:55,440 and that's what i ended up going with so 1108 00:40:53,760 --> 00:40:58,880 in this game there is a loading screen 1109 00:40:55,440 --> 00:41:01,280 as you open it up to pre-referendum 1110 00:40:58,880 --> 00:41:02,480 but moving into the future what i really 1111 00:41:01,280 --> 00:41:04,319 hope to do 1112 00:41:02,480 --> 00:41:05,599 is 1113 00:41:04,319 --> 00:41:08,480 to 1114 00:41:05,599 --> 00:41:10,400 kind of chunk these pre-renderings so to 1115 00:41:08,480 --> 00:41:14,720 pre-render every eight by eight for 1116 00:41:10,400 --> 00:41:17,920 example tile map and then uh 1117 00:41:14,720 --> 00:41:20,800 draw that as a texture-mapped 1118 00:41:17,920 --> 00:41:23,440 block of its own which i think is an 1119 00:41:20,800 --> 00:41:26,240 achievable goal for the future 1120 00:41:23,440 --> 00:41:28,480 although it may take me years if i am to 1121 00:41:26,240 --> 00:41:29,920 do it all myself but enough about all 1122 00:41:28,480 --> 00:41:31,680 that 1123 00:41:29,920 --> 00:41:33,680 for those among you that are interested 1124 00:41:31,680 --> 00:41:35,680 as i know i certainly would be 1125 00:41:33,680 --> 00:41:38,640 this is the mathematics for this this 1126 00:41:35,680 --> 00:41:40,000 transformation of turning um the real 1127 00:41:38,640 --> 00:41:41,680 in-game coordinates into drawing 1128 00:41:40,000 --> 00:41:43,359 coordinates as you can see on the screen 1129 00:41:41,680 --> 00:41:44,560 here 1130 00:41:43,359 --> 00:41:47,200 what you have 1131 00:41:44,560 --> 00:41:48,960 is first off you have your decode as 1132 00:41:47,200 --> 00:41:51,200 your drawing coordinates your arc as 1133 00:41:48,960 --> 00:41:53,359 your real or in-game coordinates add for 1134 00:41:51,200 --> 00:41:56,640 the camera offset or add 1135 00:41:53,359 --> 00:41:58,720 as in addition uh zoom for how zoomed in 1136 00:41:56,640 --> 00:42:00,720 the camera is 1137 00:41:58,720 --> 00:42:02,400 and then what you have is the real 1138 00:42:00,720 --> 00:42:04,480 coordinate 1139 00:42:02,400 --> 00:42:06,319 time the real x coordinate times sine of 1140 00:42:04,480 --> 00:42:08,079 theta plus the real life water times cos 1141 00:42:06,319 --> 00:42:11,200 of theta and you're talking about your 1142 00:42:08,079 --> 00:42:13,200 horizontal drawn coordinate and then for 1143 00:42:11,200 --> 00:42:14,480 the horizontal vertical component you 1144 00:42:13,200 --> 00:42:15,520 have 1145 00:42:14,480 --> 00:42:17,599 the real 1146 00:42:15,520 --> 00:42:21,280 in game x times cos of theta minus the 1147 00:42:17,599 --> 00:42:22,960 real y times sine of theta and you may 1148 00:42:21,280 --> 00:42:25,200 be wondering why i have a different sine 1149 00:42:22,960 --> 00:42:26,319 theta and closely or different lines and 1150 00:42:25,200 --> 00:42:27,839 to put it 1151 00:42:26,319 --> 00:42:29,680 more or less simply 1152 00:42:27,839 --> 00:42:31,520 that's basically a 90 degree rotation 1153 00:42:29,680 --> 00:42:33,760 because if you're looking straight down 1154 00:42:31,520 --> 00:42:35,040 a square is always supposed to have a 1155 00:42:33,760 --> 00:42:36,720 right angle 1156 00:42:35,040 --> 00:42:39,440 and i wanted to guarantee you that but 1157 00:42:36,720 --> 00:42:42,000 you might also be thinking well 1158 00:42:39,440 --> 00:42:44,079 what's this other cause and sign 1159 00:42:42,000 --> 00:42:45,119 and that 1160 00:42:44,079 --> 00:42:47,280 is 1161 00:42:45,119 --> 00:42:49,119 the vertical angle so if you're looking 1162 00:42:47,280 --> 00:42:52,400 at something from the side something 1163 00:42:49,119 --> 00:42:53,920 horizontal as you get closer to 90 1164 00:42:52,400 --> 00:42:56,480 degrees you don't see it at all it 1165 00:42:53,920 --> 00:42:58,880 becomes invisible it goes to zero much 1166 00:42:56,480 --> 00:43:01,440 like how cos of any angle goes to zero 1167 00:42:58,880 --> 00:43:04,800 at ninety degrees and similarly for your 1168 00:43:01,440 --> 00:43:06,160 real z times sine of alpha 1169 00:43:04,800 --> 00:43:07,839 it's much the same as you look from 1170 00:43:06,160 --> 00:43:10,800 directly above 1171 00:43:07,839 --> 00:43:14,400 well as you approach zero 1172 00:43:10,800 --> 00:43:17,040 goes to zero which is why you have sign 1173 00:43:14,400 --> 00:43:18,720 so thank you very much all for listening 1174 00:43:17,040 --> 00:43:20,480 i'll be in the comments if you have any 1175 00:43:18,720 --> 00:43:22,319 questions and thank you all to my family 1176 00:43:20,480 --> 00:43:24,839 my amazing teachers miss hogan and mr 1177 00:43:22,319 --> 00:43:27,040 till and i'll see you all 1178 00:43:24,839 --> 00:43:29,040 soon thank you 1179 00:43:27,040 --> 00:43:31,040 very much for listening and have a great 1180 00:43:29,040 --> 00:43:32,960 python 1181 00:43:31,040 --> 00:43:35,280 see you around 1182 00:43:32,960 --> 00:43:38,079 fantastic thanks so much 1183 00:43:35,280 --> 00:43:40,000 now bella is our next speaker and she is 1184 00:43:38,079 --> 00:43:42,240 a repeat offender on the student 1185 00:43:40,000 --> 00:43:44,720 showcase lineup this year we'll be 1186 00:43:42,240 --> 00:43:46,800 hearing about tweet aware using ai to 1187 00:43:44,720 --> 00:43:48,400 deconstruct your twitter timeline 1188 00:43:46,800 --> 00:43:50,240 when i asked bella how long she'd been 1189 00:43:48,400 --> 00:43:53,280 programming she replied nine years in 1190 00:43:50,240 --> 00:43:55,599 total but six years properly 1191 00:43:53,280 --> 00:43:57,920 i'm not sure what designates proper 1192 00:43:55,599 --> 00:44:01,200 programming i assume from improper 1193 00:43:57,920 --> 00:44:02,640 programming but maybe i'll learn one day 1194 00:44:01,200 --> 00:44:05,520 when i asked bella what her favorite 1195 00:44:02,640 --> 00:44:07,920 emoji is she said heart's face which is 1196 00:44:05,520 --> 00:44:09,520 definitely something i can get behind 1197 00:44:07,920 --> 00:44:12,480 when i asked what she's learned recently 1198 00:44:09,520 --> 00:44:15,040 about computing she replied that almost 1199 00:44:12,480 --> 00:44:18,240 90 percent of the world's currency only 1200 00:44:15,040 --> 00:44:20,640 exists on computers so our physical cash 1201 00:44:18,240 --> 00:44:22,560 reserves are only 10 1202 00:44:20,640 --> 00:44:24,560 that's really interesting and i'm really 1203 00:44:22,560 --> 00:44:26,720 interested to hear her talk 1204 00:44:24,560 --> 00:44:28,240 hi my name's bella ryan i'm a year 12 1205 00:44:26,720 --> 00:44:29,920 student at roseville college i'm here 1206 00:44:28,240 --> 00:44:31,599 today to talk about my software design 1207 00:44:29,920 --> 00:44:34,240 development major project 1208 00:44:31,599 --> 00:44:37,760 tweet aware which is a python program 1209 00:44:34,240 --> 00:44:39,599 that uses the twitter api to conduct 1210 00:44:37,760 --> 00:44:40,480 sentiment analysis funding users twitter 1211 00:44:39,599 --> 00:44:43,359 feed 1212 00:44:40,480 --> 00:44:46,240 a bit of background to the project the 1213 00:44:43,359 --> 00:44:49,280 whole idea of this project was to find 1214 00:44:46,240 --> 00:44:51,040 a system either manual or automated 1215 00:44:49,280 --> 00:44:53,440 and find a way that you can 1216 00:44:51,040 --> 00:44:55,200 significantly improve the system 1217 00:44:53,440 --> 00:44:57,119 so 1218 00:44:55,200 --> 00:44:58,720 when it comes to twitter it's not that i 1219 00:44:57,119 --> 00:45:00,880 necessarily found a problem with it it's 1220 00:44:58,720 --> 00:45:03,440 more like an opportunity as we 1221 00:45:00,880 --> 00:45:05,520 increasingly use social media 1222 00:45:03,440 --> 00:45:07,440 to connect with people as it becomes 1223 00:45:05,520 --> 00:45:09,599 more integral in our lives in terms of 1224 00:45:07,440 --> 00:45:12,720 education as well reflection and 1225 00:45:09,599 --> 00:45:15,280 analysis of what we are taking on 1226 00:45:12,720 --> 00:45:19,359 using these platforms becomes more and 1227 00:45:15,280 --> 00:45:20,880 more important uh in 2021 there are 192 1228 00:45:19,359 --> 00:45:23,200 million people actively using twitter in 1229 00:45:20,880 --> 00:45:24,800 the world and out of that user base 500 1230 00:45:23,200 --> 00:45:28,160 million tweets are posted every day 1231 00:45:24,800 --> 00:45:29,280 which is approximately 5 787 points per 1232 00:45:28,160 --> 00:45:30,480 second 1233 00:45:29,280 --> 00:45:32,160 so 1234 00:45:30,480 --> 00:45:33,920 the whole idea is that for each one of 1235 00:45:32,160 --> 00:45:36,800 those tweets there's at least one person 1236 00:45:33,920 --> 00:45:37,839 who's taking on the information so how 1237 00:45:36,800 --> 00:45:39,359 can i 1238 00:45:37,839 --> 00:45:40,160 improve twitter 1239 00:45:39,359 --> 00:45:42,640 to 1240 00:45:40,160 --> 00:45:44,079 give you a better idea of all right this 1241 00:45:42,640 --> 00:45:47,119 is what i'm taking on in terms of the 1242 00:45:44,079 --> 00:45:49,359 idea but reflect on whether 1243 00:45:47,119 --> 00:45:51,040 the way that that idea is put across is 1244 00:45:49,359 --> 00:45:53,040 positive negative or neutral so that you 1245 00:45:51,040 --> 00:45:55,200 can further reflect on how that might 1246 00:45:53,040 --> 00:45:58,000 impact 1247 00:45:55,200 --> 00:45:58,960 other aspects of the information 1248 00:45:58,000 --> 00:46:01,119 so 1249 00:45:58,960 --> 00:46:03,920 first off i started just using the web 1250 00:46:01,119 --> 00:46:06,720 documentation between development uh and 1251 00:46:03,920 --> 00:46:08,240 i found a get request and it was a get 1252 00:46:06,720 --> 00:46:09,760 request for user's timeline i was super 1253 00:46:08,240 --> 00:46:11,680 keen i was like yes this is exactly what 1254 00:46:09,760 --> 00:46:14,640 i'm looking for ran it through with all 1255 00:46:11,680 --> 00:46:16,640 my authentication all of that and i got 1256 00:46:14,640 --> 00:46:18,480 this i was like sweet tweet text it's 1257 00:46:16,640 --> 00:46:20,480 working this is amazing 1258 00:46:18,480 --> 00:46:21,839 uh then when i went across to the 1259 00:46:20,480 --> 00:46:23,920 account that i used it on which was 1260 00:46:21,839 --> 00:46:25,599 twitterdev i realized that what i was 1261 00:46:23,920 --> 00:46:27,119 actually getting was 1262 00:46:25,599 --> 00:46:30,480 all of their tweets read tweets and 1263 00:46:27,119 --> 00:46:33,200 comments so twitter the twitter api 1264 00:46:30,480 --> 00:46:34,960 doesn't actually support you 1265 00:46:33,200 --> 00:46:37,280 just putting in someone's handle and 1266 00:46:34,960 --> 00:46:39,599 then being able to get the feed as they 1267 00:46:37,280 --> 00:46:42,400 see it so i had to recreate 1268 00:46:39,599 --> 00:46:44,480 it and instead model the fade 1269 00:46:42,400 --> 00:46:46,480 uh this is one i used onto postman which 1270 00:46:44,480 --> 00:46:48,160 is an absolutely fabulous 1271 00:46:46,480 --> 00:46:49,920 program to use if you're trying to 1272 00:46:48,160 --> 00:46:52,000 figure out how to use an api especially 1273 00:46:49,920 --> 00:46:54,000 if the people who developed the api have 1274 00:46:52,000 --> 00:46:57,040 created a dashboard like this 1275 00:46:54,000 --> 00:46:59,599 um using that i was able to figure out 1276 00:46:57,040 --> 00:47:01,599 the order of apis i'd need to use to 1277 00:46:59,599 --> 00:47:03,119 recreate someone's feed 1278 00:47:01,599 --> 00:47:04,640 so to do this 1279 00:47:03,119 --> 00:47:07,040 i take on 1280 00:47:04,640 --> 00:47:08,880 someone's i take in input from the user 1281 00:47:07,040 --> 00:47:11,280 which is the handle which i then send to 1282 00:47:08,880 --> 00:47:13,040 the api and i get back their user id 1283 00:47:11,280 --> 00:47:15,119 which i then send to the api again to 1284 00:47:13,040 --> 00:47:16,000 get a list of every um user that they 1285 00:47:15,119 --> 00:47:16,960 follow 1286 00:47:16,000 --> 00:47:19,280 i 1287 00:47:16,960 --> 00:47:21,200 send a request for every single user on 1288 00:47:19,280 --> 00:47:23,680 that list to get all their ids and then 1289 00:47:21,200 --> 00:47:24,720 i use the timeline request that i showed 1290 00:47:23,680 --> 00:47:25,520 earlier 1291 00:47:24,720 --> 00:47:27,200 to 1292 00:47:25,520 --> 00:47:29,040 get their 1293 00:47:27,200 --> 00:47:31,760 um five most recent tweets from their 1294 00:47:29,040 --> 00:47:34,240 account obviously that poses floor 1295 00:47:31,760 --> 00:47:36,000 floors with the model of how i'm 1296 00:47:34,240 --> 00:47:37,359 recreating people's feeds because if 1297 00:47:36,000 --> 00:47:39,200 you've got someone who does two tweets 1298 00:47:37,359 --> 00:47:41,599 in their lifetime versus a journalist 1299 00:47:39,200 --> 00:47:42,640 who does two tweets every five minutes 1300 00:47:41,599 --> 00:47:43,680 uh 1301 00:47:42,640 --> 00:47:46,400 their 1302 00:47:43,680 --> 00:47:49,040 representation in the data 1303 00:47:46,400 --> 00:47:51,359 is not is skewed in a way that's not 1304 00:47:49,040 --> 00:47:55,599 represented representative of an actual 1305 00:47:51,359 --> 00:47:57,119 feed which is why it's a model um i then 1306 00:47:55,599 --> 00:47:58,240 send it through 1307 00:47:57,119 --> 00:48:00,400 a 1308 00:47:58,240 --> 00:48:03,520 scrubbing program that takes out things 1309 00:48:00,400 --> 00:48:05,520 like new lines and other html css 1310 00:48:03,520 --> 00:48:08,319 elements that sometimes comes through in 1311 00:48:05,520 --> 00:48:10,480 the tweet text that are fantastic for 1312 00:48:08,319 --> 00:48:12,720 displaying it on twitter but not very 1313 00:48:10,480 --> 00:48:15,520 useful for the purpose 1314 00:48:12,720 --> 00:48:17,119 of sentiment analysis 1315 00:48:15,520 --> 00:48:18,960 next i send it through the sentiment 1316 00:48:17,119 --> 00:48:21,200 analysis algorithm 1317 00:48:18,960 --> 00:48:25,280 for this i use text blob 1318 00:48:21,200 --> 00:48:26,640 and so i have a list of all of the 1319 00:48:25,280 --> 00:48:29,280 clean tweets 1320 00:48:26,640 --> 00:48:31,920 and i send each tweet through 1321 00:48:29,280 --> 00:48:35,599 text blog which then i use the sentiment 1322 00:48:31,920 --> 00:48:37,440 polarity function to 1323 00:48:35,599 --> 00:48:38,960 give them h a value of either positive 1324 00:48:37,440 --> 00:48:41,040 neutral or negative 1325 00:48:38,960 --> 00:48:42,640 and then when they're outputted from 1326 00:48:41,040 --> 00:48:44,800 that function 1327 00:48:42,640 --> 00:48:47,119 uh they're all input into a dictionary 1328 00:48:44,800 --> 00:48:49,440 where the key is the tweet itself and 1329 00:48:47,119 --> 00:48:50,880 then the value is the 1330 00:48:49,440 --> 00:48:53,440 sentiment of 1331 00:48:50,880 --> 00:48:56,480 mutual and negative 1332 00:48:53,440 --> 00:48:58,880 next is output so i have three kinds of 1333 00:48:56,480 --> 00:49:03,520 output for this project i had a 1334 00:48:58,880 --> 00:49:05,359 txt file that had the percentages 1335 00:49:03,520 --> 00:49:08,160 of positive negative and neutral within 1336 00:49:05,359 --> 00:49:11,119 the data set i had a 1337 00:49:08,160 --> 00:49:12,960 png which is the pie graph that you see 1338 00:49:11,119 --> 00:49:14,160 there of again positive negative and 1339 00:49:12,960 --> 00:49:17,910 neutral 1340 00:49:14,160 --> 00:49:19,280 and then i also had output within the 1341 00:49:17,910 --> 00:49:22,160 [Music] 1342 00:49:19,280 --> 00:49:23,280 command line interface which was the 1343 00:49:22,160 --> 00:49:24,960 five 1344 00:49:23,280 --> 00:49:26,559 the first five in each list of positive 1345 00:49:24,960 --> 00:49:29,920 and negative tweets 1346 00:49:26,559 --> 00:49:33,040 um for the user to look at each time 1347 00:49:29,920 --> 00:49:37,200 they run the program for each handle 1348 00:49:33,040 --> 00:49:38,960 uh from this you i decided to 1349 00:49:37,200 --> 00:49:39,839 run again with a real world example of 1350 00:49:38,960 --> 00:49:42,480 how 1351 00:49:39,839 --> 00:49:45,280 this program could be taken a little bit 1352 00:49:42,480 --> 00:49:47,599 further so as we're in lockdown now a 1353 00:49:45,280 --> 00:49:49,680 lot of us are receiving news through 1354 00:49:47,599 --> 00:49:51,520 social media whether 1355 00:49:49,680 --> 00:49:54,160 it's the um 1356 00:49:51,520 --> 00:49:55,920 11am live stream on facebook 1357 00:49:54,160 --> 00:49:57,520 or it's the little 1358 00:49:55,920 --> 00:49:59,200 uh little bits that have had through 1359 00:49:57,520 --> 00:50:02,720 instagram or twitter in forms of 1360 00:49:59,200 --> 00:50:05,119 infographics and so on so using my 1361 00:50:02,720 --> 00:50:07,920 testing twitter account i followed a 1362 00:50:05,119 --> 00:50:12,400 bunch of australian 1363 00:50:07,920 --> 00:50:15,280 news platforms and then ran them through 1364 00:50:12,400 --> 00:50:17,440 and got the outfit of five most recent 1365 00:50:15,280 --> 00:50:20,160 positive tweets negative tweets tweet 1366 00:50:17,440 --> 00:50:21,920 percentages and then the paragraph 1367 00:50:20,160 --> 00:50:22,720 um 1368 00:50:21,920 --> 00:50:24,559 which 1369 00:50:22,720 --> 00:50:26,079 i think reflects 1370 00:50:24,559 --> 00:50:27,280 the next step where i want this project 1371 00:50:26,079 --> 00:50:29,040 to go 1372 00:50:27,280 --> 00:50:31,280 which is 1373 00:50:29,040 --> 00:50:31,280 uh 1374 00:50:31,520 --> 00:50:34,960 more 1375 00:50:32,400 --> 00:50:38,000 more kind of data visualization so word 1376 00:50:34,960 --> 00:50:40,559 clouds um 1377 00:50:38,000 --> 00:50:43,440 and things like that looking at data 1378 00:50:40,559 --> 00:50:45,359 historically so month to month 1379 00:50:43,440 --> 00:50:47,839 what sentiment scores you're getting 1380 00:50:45,359 --> 00:50:50,079 through your feed and also going back to 1381 00:50:47,839 --> 00:50:51,599 the original plan for my project which 1382 00:50:50,079 --> 00:50:53,839 was to have 1383 00:50:51,599 --> 00:50:56,400 live sentiment analysis on the feed 1384 00:50:53,839 --> 00:50:58,160 itself i think i could achieve that that 1385 00:50:56,400 --> 00:50:59,040 would be really awesome 1386 00:50:58,160 --> 00:51:00,960 uh 1387 00:50:59,040 --> 00:51:02,800 yeah so thank you for listening to my 1388 00:51:00,960 --> 00:51:05,040 presentation i guess the main takeaway 1389 00:51:02,800 --> 00:51:07,119 that i want from this is when you're 1390 00:51:05,040 --> 00:51:08,800 given the chance to do a project in 1391 00:51:07,119 --> 00:51:10,000 school pick something that you love and 1392 00:51:08,800 --> 00:51:11,839 pick something that you can keep on 1393 00:51:10,000 --> 00:51:13,680 working on because 1394 00:51:11,839 --> 00:51:16,240 during the hard knock times of the 1395 00:51:13,680 --> 00:51:18,319 project itself it kind of prompts you to 1396 00:51:16,240 --> 00:51:20,079 actually continue working on the project 1397 00:51:18,319 --> 00:51:21,760 but afterwards it gives you a fantastic 1398 00:51:20,079 --> 00:51:22,800 springboard to jump off into your next 1399 00:51:21,760 --> 00:51:24,480 project 1400 00:51:22,800 --> 00:51:26,880 thank you so much 1401 00:51:24,480 --> 00:51:28,960 now our final speaker today is menindra 1402 00:51:26,880 --> 00:51:31,200 who'll be talking about de-blurring with 1403 00:51:28,960 --> 00:51:32,319 deep learning which is perhaps more of a 1404 00:51:31,200 --> 00:51:34,160 tongue twister than i should have 1405 00:51:32,319 --> 00:51:36,079 finished today on 1406 00:51:34,160 --> 00:51:38,880 meninja has been programming for three 1407 00:51:36,079 --> 00:51:41,119 years and his favorite emoji is the dead 1408 00:51:38,880 --> 00:51:43,760 face emoji specifically he said he 1409 00:51:41,119 --> 00:51:45,680 thinks it's quite funny 1410 00:51:43,760 --> 00:51:47,040 when i asked what recent topic of 1411 00:51:45,680 --> 00:51:49,520 computer science he's been learning 1412 00:51:47,040 --> 00:51:51,440 about he said machine learning deep 1413 00:51:49,520 --> 00:51:53,680 learning and specifically supervised 1414 00:51:51,440 --> 00:51:57,040 learning with neural networks 1415 00:51:53,680 --> 00:51:59,760 i'm really excited to hear his talk 1416 00:51:57,040 --> 00:52:01,440 hello pycon my name is melinda de mel 1417 00:51:59,760 --> 00:52:04,480 and i'd like to present my project d 1418 00:52:01,440 --> 00:52:06,079 blurring with deep learning so i first 1419 00:52:04,480 --> 00:52:08,079 began the year writing a report on back 1420 00:52:06,079 --> 00:52:09,839 propagation and the report presents an 1421 00:52:08,079 --> 00:52:11,599 intuitive and comprehensive analysis on 1422 00:52:09,839 --> 00:52:13,280 the algorithm it was a lot of fun to 1423 00:52:11,599 --> 00:52:14,720 write 1424 00:52:13,280 --> 00:52:15,839 so i then wanted to extend my newly 1425 00:52:14,720 --> 00:52:18,640 found knowledge under a couple of 1426 00:52:15,839 --> 00:52:20,800 project ideas so i thought of q learning 1427 00:52:18,640 --> 00:52:22,640 the genetic algorithm neat machine 1428 00:52:20,800 --> 00:52:23,760 learning with robotics quantum machine 1429 00:52:22,640 --> 00:52:25,760 learning 1430 00:52:23,760 --> 00:52:27,599 i thought of fluid simulation binary 1431 00:52:25,760 --> 00:52:29,359 systems 1432 00:52:27,599 --> 00:52:31,359 but then i realized that all of these 1433 00:52:29,359 --> 00:52:33,280 ideas were kind of irrelevant to back 1434 00:52:31,359 --> 00:52:34,480 propagation and out of scope for my 1435 00:52:33,280 --> 00:52:36,720 project 1436 00:52:34,480 --> 00:52:38,240 so i then moved on to computer vision 1437 00:52:36,720 --> 00:52:39,599 and of computer vision i chose image 1438 00:52:38,240 --> 00:52:41,040 restoration 1439 00:52:39,599 --> 00:52:42,880 i chose it mainly because it was 1440 00:52:41,040 --> 00:52:44,160 relevant to back propagation and 1441 00:52:42,880 --> 00:52:45,839 actually initially i was going to 1442 00:52:44,160 --> 00:52:47,920 restore color into black and white 1443 00:52:45,839 --> 00:52:49,839 images but then i realized this is kind 1444 00:52:47,920 --> 00:52:52,160 of deprecated because no one takes black 1445 00:52:49,839 --> 00:52:53,760 on my photos these days so then uh i 1446 00:52:52,160 --> 00:52:55,280 moved on to d blurring and i realized 1447 00:52:53,760 --> 00:52:57,760 it's more relevant because people do 1448 00:52:55,280 --> 00:52:59,599 take blurred photos these days and there 1449 00:52:57,760 --> 00:53:02,319 aren't many implementations of solutions 1450 00:52:59,599 --> 00:53:04,160 out there to resolve this 1451 00:53:02,319 --> 00:53:06,720 i'll now go through a brief overview of 1452 00:53:04,160 --> 00:53:08,559 how deep learning works so first we have 1453 00:53:06,720 --> 00:53:10,640 neural networks and neural networks are 1454 00:53:08,559 --> 00:53:12,079 modeled off of the human brain where we 1455 00:53:10,640 --> 00:53:14,000 can think of our brain as a bunch of 1456 00:53:12,079 --> 00:53:15,839 neurons connected to other neurons 1457 00:53:14,000 --> 00:53:18,000 through axioms 1458 00:53:15,839 --> 00:53:19,920 and similarly in neural networks we have 1459 00:53:18,000 --> 00:53:21,440 layers of neurons 1460 00:53:19,920 --> 00:53:22,240 that connect to other layers of neurons 1461 00:53:21,440 --> 00:53:23,920 with 1462 00:53:22,240 --> 00:53:26,079 weights where the blue ones are positive 1463 00:53:23,920 --> 00:53:29,359 and the red ones are negative and they 1464 00:53:26,079 --> 00:53:31,599 all affect each other accordingly 1465 00:53:29,359 --> 00:53:33,839 we also have biases which are associated 1466 00:53:31,599 --> 00:53:36,000 with each neuron and they just help with 1467 00:53:33,839 --> 00:53:37,520 the training process 1468 00:53:36,000 --> 00:53:39,760 so here's what a neuron might look like 1469 00:53:37,520 --> 00:53:43,119 we have the weights the bias the 1470 00:53:39,760 --> 00:53:44,480 activation and the way to calculate it 1471 00:53:43,119 --> 00:53:46,480 and here's what the network might look 1472 00:53:44,480 --> 00:53:48,880 like we have the layers 1473 00:53:46,480 --> 00:53:51,359 and the layer sizes and we also have a 1474 00:53:48,880 --> 00:53:55,880 way to generate the initial uh 1475 00:53:51,359 --> 00:53:55,880 weights connecting layers together 1476 00:53:56,079 --> 00:54:00,079 propagation uh 1477 00:53:57,520 --> 00:54:03,200 for progression simply put it's just 1478 00:54:00,079 --> 00:54:05,520 taking an input and then applying uh the 1479 00:54:03,200 --> 00:54:07,920 weights and biases from each layer and 1480 00:54:05,520 --> 00:54:10,800 then passing it to the network uh in 1481 00:54:07,920 --> 00:54:13,040 real life this could be compared to um 1482 00:54:10,800 --> 00:54:15,359 taking an input from our environment our 1483 00:54:13,040 --> 00:54:18,160 brain processing it and giving us an 1484 00:54:15,359 --> 00:54:20,000 up an output 1485 00:54:18,160 --> 00:54:21,760 so initially for a neural network this 1486 00:54:20,000 --> 00:54:24,240 causes high error between the expected 1487 00:54:21,760 --> 00:54:25,920 output and the network's output but once 1488 00:54:24,240 --> 00:54:28,880 it's been trained 1489 00:54:25,920 --> 00:54:30,640 it's actually what's used to predict uh 1490 00:54:28,880 --> 00:54:33,040 non-blood images in my case or the 1491 00:54:30,640 --> 00:54:33,040 answer 1492 00:54:33,920 --> 00:54:37,520 for propagation 1493 00:54:35,680 --> 00:54:39,440 this is what it would look like in code 1494 00:54:37,520 --> 00:54:40,960 so we have 1495 00:54:39,440 --> 00:54:42,319 we go through each layer and we go 1496 00:54:40,960 --> 00:54:44,559 through each node in the layer and we 1497 00:54:42,319 --> 00:54:46,319 pass it the previous layer 1498 00:54:44,559 --> 00:54:48,640 and then we 1499 00:54:46,319 --> 00:54:50,000 calculate all the weights and all the 1500 00:54:48,640 --> 00:54:52,000 activations from the previous layer and 1501 00:54:50,000 --> 00:54:55,280 we find an activation for that node in 1502 00:54:52,000 --> 00:54:55,280 the next layer 1503 00:54:55,599 --> 00:55:00,079 so this is what the network might look 1504 00:54:56,799 --> 00:55:01,440 like so we could uh take the input we 1505 00:55:00,079 --> 00:55:03,040 pass it to 1506 00:55:01,440 --> 00:55:05,040 the processing layer or the hidden layer 1507 00:55:03,040 --> 00:55:06,240 and get an activation and then from this 1508 00:55:05,040 --> 00:55:08,400 we pass through the next layer the 1509 00:55:06,240 --> 00:55:10,960 output and we get activations for all 1510 00:55:08,400 --> 00:55:12,960 these accordingly 1511 00:55:10,960 --> 00:55:15,040 uh back propagation so back propagation 1512 00:55:12,960 --> 00:55:18,240 really is the focus of my algorithm it's 1513 00:55:15,040 --> 00:55:20,480 like the uh heart of the algorithm where 1514 00:55:18,240 --> 00:55:23,119 without it it won't be able to function 1515 00:55:20,480 --> 00:55:25,040 uh the structure of uh 1516 00:55:23,119 --> 00:55:26,400 the neural network itself uh would 1517 00:55:25,040 --> 00:55:28,000 effectively be useless without back 1518 00:55:26,400 --> 00:55:29,440 propagation because you won't be able to 1519 00:55:28,000 --> 00:55:30,319 learn 1520 00:55:29,440 --> 00:55:32,240 so 1521 00:55:30,319 --> 00:55:34,079 here's the mathematics for it so 1522 00:55:32,240 --> 00:55:35,520 i don't want to read any of it but this 1523 00:55:34,079 --> 00:55:37,599 is for my report and i just want you to 1524 00:55:35,520 --> 00:55:40,160 acknowledge it it was a lot of fun to uh 1525 00:55:37,599 --> 00:55:41,599 learn about read about and write about 1526 00:55:40,160 --> 00:55:42,720 and essentially what we're going to take 1527 00:55:41,599 --> 00:55:44,720 is this 1528 00:55:42,720 --> 00:55:45,760 uh derivative or 1529 00:55:44,720 --> 00:55:46,799 um 1530 00:55:45,760 --> 00:55:49,200 equation 1531 00:55:46,799 --> 00:55:51,920 per se so you want to find the rate of 1532 00:55:49,200 --> 00:55:54,799 change of the cost with respect to each 1533 00:55:51,920 --> 00:55:57,599 weight and bias of the network so the 1534 00:55:54,799 --> 00:55:58,640 cost is the overall error of the network 1535 00:55:57,599 --> 00:56:00,960 it's the 1536 00:55:58,640 --> 00:56:02,960 network's output and the expected output 1537 00:56:00,960 --> 00:56:05,760 and the difference and basically we want 1538 00:56:02,960 --> 00:56:07,680 to minimize this to make the network get 1539 00:56:05,760 --> 00:56:09,359 the expected output 1540 00:56:07,680 --> 00:56:11,599 and so effectively what do we apply the 1541 00:56:09,359 --> 00:56:13,440 chain rule to each meter as major aspect 1542 00:56:11,599 --> 00:56:14,720 of the 1543 00:56:13,440 --> 00:56:17,680 neural network 1544 00:56:14,720 --> 00:56:20,000 and then we uh 1545 00:56:17,680 --> 00:56:22,400 find how each rate and bias 1546 00:56:20,000 --> 00:56:24,079 affect the overall cost and we can see 1547 00:56:22,400 --> 00:56:26,319 these how this is written in the code so 1548 00:56:24,079 --> 00:56:27,280 we have these highlighted boxes and you 1549 00:56:26,319 --> 00:56:29,040 can see 1550 00:56:27,280 --> 00:56:30,319 the yellow blocks we take the overall 1551 00:56:29,040 --> 00:56:33,280 cost respect to the output of the 1552 00:56:30,319 --> 00:56:35,359 network in the blue box we take the 1553 00:56:33,280 --> 00:56:36,960 output layer with respect to all the 1554 00:56:35,359 --> 00:56:39,680 previous layers 1555 00:56:36,960 --> 00:56:42,160 and then for each neuron in the previous 1556 00:56:39,680 --> 00:56:44,559 layers we take the neuron with respect 1557 00:56:42,160 --> 00:56:46,720 to each made and bias and we get the 1558 00:56:44,559 --> 00:56:49,040 each uh each weight and biases error on 1559 00:56:46,720 --> 00:56:50,240 the overall cost 1560 00:56:49,040 --> 00:56:52,960 and so this is what it might look like 1561 00:56:50,240 --> 00:56:55,359 so we have uh the input and then these 1562 00:56:52,960 --> 00:56:57,440 numbers are the effect on the overall 1563 00:56:55,359 --> 00:56:59,599 cost so this neuron here has a negative 1564 00:56:57,440 --> 00:57:01,040 effect on the overall cost and then this 1565 00:56:59,599 --> 00:57:02,799 neuron has a positive effect on your 1566 00:57:01,040 --> 00:57:04,960 overall cost and basically you want to 1567 00:57:02,799 --> 00:57:08,400 make this as close as possible to zero 1568 00:57:04,960 --> 00:57:10,400 so we get the expected output 1569 00:57:08,400 --> 00:57:13,680 and so once we have these errors and 1570 00:57:10,400 --> 00:57:15,119 these costs for each neuron we can 1571 00:57:13,680 --> 00:57:16,720 affect the 1572 00:57:15,119 --> 00:57:19,280 rates and biases accordingly by 1573 00:57:16,720 --> 00:57:22,000 increasing them up or down to reduce 1574 00:57:19,280 --> 00:57:22,000 this cost 1575 00:57:22,160 --> 00:57:27,440 and so once the network has been trained 1576 00:57:23,839 --> 00:57:29,760 we can then um save these the the 1577 00:57:27,440 --> 00:57:32,000 parameters or the weights and biases and 1578 00:57:29,760 --> 00:57:34,400 then we can use for propagation to 1579 00:57:32,000 --> 00:57:35,760 simply pass an input and get a predicted 1580 00:57:34,400 --> 00:57:37,119 output which hopefully is really 1581 00:57:35,760 --> 00:57:39,119 accurate 1582 00:57:37,119 --> 00:57:40,720 so here's some training data so here 1583 00:57:39,119 --> 00:57:43,760 here we have the error or the cost on 1584 00:57:40,720 --> 00:57:46,400 the y-axis and we have the iterations uh 1585 00:57:43,760 --> 00:57:47,760 the training process and we can see we 1586 00:57:46,400 --> 00:57:49,839 want to minimize this cost and it's 1587 00:57:47,760 --> 00:57:50,960 doing this but it's still relatively 1588 00:57:49,839 --> 00:57:53,520 high 1589 00:57:50,960 --> 00:57:55,760 and you can see in this one as well 1590 00:57:53,520 --> 00:57:58,720 it goes down but it's still like above 1591 00:57:55,760 --> 00:58:01,200 20 and this is quite bad and you can see 1592 00:57:58,720 --> 00:58:03,839 the result of this as well so 1593 00:58:01,200 --> 00:58:06,400 we have our blurred image we have our 1594 00:58:03,839 --> 00:58:09,280 sharpen image and then we have 1595 00:58:06,400 --> 00:58:11,440 an output so this is a complete mess 1596 00:58:09,280 --> 00:58:12,559 it's completely unrecognizable from the 1597 00:58:11,440 --> 00:58:15,200 other two 1598 00:58:12,559 --> 00:58:16,559 and so i figured that maybe these images 1599 00:58:15,200 --> 00:58:18,880 were too big 1600 00:58:16,559 --> 00:58:20,720 their dimensions were like 500 by 637 1601 00:58:18,880 --> 00:58:23,280 pixels which is a lot of way to biases 1602 00:58:20,720 --> 00:58:26,480 to compute so i moved to a smaller data 1603 00:58:23,280 --> 00:58:28,720 set and i use the mnist the blurring set 1604 00:58:26,480 --> 00:58:31,119 for digits handwritten digits and we can 1605 00:58:28,720 --> 00:58:33,599 see a blurred six a sharpen six 1606 00:58:31,119 --> 00:58:35,280 and the network's output which again is 1607 00:58:33,599 --> 00:58:36,640 still pretty bad but you can see that 1608 00:58:35,280 --> 00:58:39,440 like the bottom right half is being 1609 00:58:36,640 --> 00:58:41,280 sharpened which is kind of good 1610 00:58:39,440 --> 00:58:43,359 and then i realized that maybe it's due 1611 00:58:41,280 --> 00:58:46,160 to the training method so i changed from 1612 00:58:43,359 --> 00:58:48,240 stochastic going by each row 1613 00:58:46,160 --> 00:58:50,480 uh row by row sorry and then i just 1614 00:58:48,240 --> 00:58:53,119 posted the whole image to the network 1615 00:58:50,480 --> 00:58:56,000 and we saw that the 1616 00:58:53,119 --> 00:58:58,799 loss or the cost on the error decreased 1617 00:58:56,000 --> 00:59:01,280 very fast it went from like 200 to like 1618 00:58:58,799 --> 00:59:02,559 below 10 in like the first iteration and 1619 00:59:01,280 --> 00:59:05,680 it stayed there which is really really 1620 00:59:02,559 --> 00:59:07,280 good and we can see we get some results 1621 00:59:05,680 --> 00:59:09,839 from this so we have a blurred five and 1622 00:59:07,280 --> 00:59:11,839 a sharpen five a couple of results i got 1623 00:59:09,839 --> 00:59:13,359 and these are very sharp you can see the 1624 00:59:11,839 --> 00:59:14,880 network really picked up on the edges 1625 00:59:13,359 --> 00:59:16,160 and the curves of the fives 1626 00:59:14,880 --> 00:59:20,240 you can see some more examples of 1627 00:59:16,160 --> 00:59:22,400 blurred five we have these um 1628 00:59:20,240 --> 00:59:24,079 some more fives these are 1629 00:59:22,400 --> 00:59:26,000 some of the better ones i had especially 1630 00:59:24,079 --> 00:59:28,000 this one really got the shape of the fly 1631 00:59:26,000 --> 00:59:30,720 if not if it's actually better than the 1632 00:59:28,000 --> 00:59:33,760 answer in my opinion 1633 00:59:30,720 --> 00:59:36,000 and so now i have two demos to show my 1634 00:59:33,760 --> 00:59:38,079 uh project so the first demo is the 1635 00:59:36,000 --> 00:59:39,680 training process 1636 00:59:38,079 --> 00:59:42,079 so we have a video here 1637 00:59:39,680 --> 00:59:44,079 so we have the blurred seven we have the 1638 00:59:42,079 --> 00:59:45,680 sharpen seven and then we have the 1639 00:59:44,079 --> 00:59:47,680 network output down here and we can have 1640 00:59:45,680 --> 00:59:49,520 the graph showing the error with respect 1641 00:59:47,680 --> 00:59:52,000 to each training iteration and we can 1642 00:59:49,520 --> 00:59:54,720 see as it goes it slowly 1643 00:59:52,000 --> 00:59:57,440 the error slowly decreases and slowly 1644 00:59:54,720 --> 00:59:59,359 the server uh the network finds 1645 00:59:57,440 --> 01:00:01,280 a really good seven after a couple 1646 00:59:59,359 --> 01:00:04,079 iterations 1647 01:00:01,280 --> 01:00:06,160 like that and you can see again blurred 1648 01:00:04,079 --> 01:00:07,680 sharpen and a really really good output 1649 01:00:06,160 --> 01:00:09,599 right here 1650 01:00:07,680 --> 01:00:12,000 and my second 1651 01:00:09,599 --> 01:00:13,920 demo is going to be a network output so 1652 01:00:12,000 --> 01:00:15,599 we can see we have a blurred floor here 1653 01:00:13,920 --> 01:00:17,440 a sharpened floor here and if i just 1654 01:00:15,599 --> 01:00:20,240 fall propagate through a network 1655 01:00:17,440 --> 01:00:22,240 and pass it this blurred four 1656 01:00:20,240 --> 01:00:24,720 just like so 1657 01:00:22,240 --> 01:00:25,920 and then pass it right here 1658 01:00:24,720 --> 01:00:26,880 you can see 1659 01:00:25,920 --> 01:00:29,200 boom 1660 01:00:26,880 --> 01:00:31,280 blood fall sharpen floor and then our 1661 01:00:29,200 --> 01:00:33,280 network output which again is really 1662 01:00:31,280 --> 01:00:34,559 sharp like it's almost it's actually 1663 01:00:33,280 --> 01:00:37,359 better than the 1664 01:00:34,559 --> 01:00:39,680 actual answer 1665 01:00:37,359 --> 01:00:42,400 and so now 1666 01:00:39,680 --> 01:00:46,000 um 1667 01:00:42,400 --> 01:00:47,920 we have that's our pro my project so 1668 01:00:46,000 --> 01:00:50,240 overall this project was a lot of fun to 1669 01:00:47,920 --> 01:00:51,599 write uh write the code for it was a lot 1670 01:00:50,240 --> 01:00:54,640 of fun to learn about it was a good 1671 01:00:51,599 --> 01:00:55,920 experience i had a lot of fun 1672 01:00:54,640 --> 01:00:57,040 and i recommend it to anyone out there 1673 01:00:55,920 --> 01:00:58,480 who wants to start machine learning 1674 01:00:57,040 --> 01:01:00,720 because this is my machine first machine 1675 01:00:58,480 --> 01:01:02,240 learning project and if anyone has any 1676 01:01:00,720 --> 01:01:04,400 questions about a project or how it 1677 01:01:02,240 --> 01:01:07,280 works just leave it in the chat and 1678 01:01:04,400 --> 01:01:09,440 thank you for watching my presentation 1679 01:01:07,280 --> 01:01:11,599 thank you so much for joining me and 1680 01:01:09,440 --> 01:01:13,599 thank you again to our fantastic 1681 01:01:11,599 --> 01:01:15,359 speakers and i will pass it back to 1682 01:01:13,599 --> 01:01:17,119 future nikki 1683 01:01:15,359 --> 01:01:18,720 to quote one of my 1684 01:01:17,119 --> 01:01:20,640 favorite books by josh barrows on 1685 01:01:18,720 --> 01:01:23,359 fourier transforms 1686 01:01:20,640 --> 01:01:25,280 don't ask really don't ask unless you're 1687 01:01:23,359 --> 01:01:27,119 willing to put in a couple years of 1688 01:01:25,280 --> 01:01:28,319 degree level maths i still have 1689 01:01:27,119 --> 01:01:31,200 nightmares 1690 01:01:28,319 --> 01:01:33,760 to be honest i still don't understand it 1691 01:01:31,200 --> 01:01:35,599 after about two months i finally got it 1692 01:01:33,760 --> 01:01:37,440 the microphone was picking up sound and 1693 01:01:35,599 --> 01:01:39,839 calculating the transform of certain 1694 01:01:37,440 --> 01:01:41,440 frequencies i couldn't believe it now 1695 01:01:39,839 --> 01:01:44,240 all i had to do was send it to the 1696 01:01:41,440 --> 01:01:47,520 output that's where i was wrong the pico 1697 01:01:44,240 --> 01:01:50,480 even with a dual core arm cortex mo plus 1698 01:01:47,520 --> 01:01:53,040 processor with 264 kilobytes internal 1699 01:01:50,480 --> 01:01:54,079 ram and support for up to 60 megabytes 1700 01:01:53,040 --> 01:01:56,640 of off 1701 01:01:54,079 --> 01:01:59,839 chip flash it just didn't have the power 1702 01:01:56,640 --> 01:02:02,160 to do proper audio processing 1703 01:01:59,839 --> 01:02:04,240 i could do everything separately but as 1704 01:02:02,160 --> 01:02:07,200 soon as i tried to put it all together 1705 01:02:04,240 --> 01:02:08,559 it just didn't work i rang around in 1706 01:02:07,200 --> 01:02:10,240 hopes that there might be something i 1707 01:02:08,559 --> 01:02:12,480 could do but no 1708 01:02:10,240 --> 01:02:15,359 everyone told me that i had to move on 1709 01:02:12,480 --> 01:02:17,920 to something called potency 1710 01:02:15,359 --> 01:02:19,359 i was a little bit upset 1711 01:02:17,920 --> 01:02:21,760 i had spent months trying to get it to 1712 01:02:19,359 --> 01:02:23,680 work on python and figured out how to do 1713 01:02:21,760 --> 01:02:25,359 a fourier transform only to find that it 1714 01:02:23,680 --> 01:02:27,359 failed at the last step 1715 01:02:25,359 --> 01:02:30,319 but there was no time to be sad 1716 01:02:27,359 --> 01:02:32,480 so i bought a teensy and an audio shield 1717 01:02:30,319 --> 01:02:35,520 and immediately blew them both up but 1718 01:02:32,480 --> 01:02:40,440 there was no time to be sad so i bought 1719 01:02:35,520 --> 01:03:55,999 another tinsy and this time it worked 1720 01:02:40,440 --> 01:03:55,999 [Music] 1721 01:03:59,520 --> 01:04:24,619 [Music] 1722 01:04:26,160 --> 01:04:30,960 using the handy audio library built for 1723 01:04:28,559 --> 01:04:33,280 tinsy and the graphic interface for 1724 01:04:30,960 --> 01:04:35,359 writing code i managed to build 1725 01:04:33,280 --> 01:04:38,079 something resembling a hearing aid the 1726 01:04:35,359 --> 01:04:40,799 code for the fourier transform was so 1727 01:04:38,079 --> 01:04:42,319 easy with the audio design system it was 1728 01:04:40,799 --> 01:04:44,559 my saving grace 1729 01:04:42,319 --> 01:04:46,559 i was able to send the audio via 1730 01:04:44,559 --> 01:04:49,200 bluetooth to a receiver that sits in the 1731 01:04:46,559 --> 01:04:50,799 air using an old hearing aid speaker i 1732 01:04:49,200 --> 01:04:52,640 had lying around 1733 01:04:50,799 --> 01:04:54,720 building a hearing aid from scratch 1734 01:04:52,640 --> 01:04:55,599 wasn't easy but i never expected it to 1735 01:04:54,720 --> 01:04:57,119 be 1736 01:04:55,599 --> 01:04:59,760 growing up with hearing loss i 1737 01:04:57,119 --> 01:05:02,240 understand how important it is to have 1738 01:04:59,760 --> 01:05:03,920 the resources available so that i have 1739 01:05:02,240 --> 01:05:05,920 the same chance as everyone else around 1740 01:05:03,920 --> 01:05:08,240 me to go to school partake in 1741 01:05:05,920 --> 01:05:10,880 discussions about my health and develop 1742 01:05:08,240 --> 01:05:15,440 a sustainable and equal future and that 1743 01:05:10,880 --> 01:05:19,839 is why i built renewable hearing 1744 01:05:15,440 --> 01:05:20,640 [Music] 1745 01:05:19,839 --> 01:05:22,880 okay 1746 01:05:20,640 --> 01:05:24,720 thanks bye 1747 01:05:22,880 --> 01:05:27,359 thank you so much liv 1748 01:05:24,720 --> 01:05:29,599 up next is jonty jonty's talking about 1749 01:05:27,359 --> 01:05:30,960 python meta programming through bytecode 1750 01:05:29,599 --> 01:05:32,319 and has been learning to program for 1751 01:05:30,960 --> 01:05:34,240 three years now 1752 01:05:32,319 --> 01:05:36,559 his favorite emoji is the smiley face 1753 01:05:34,240 --> 01:05:38,720 emoji although technically he sent 1754 01:05:36,559 --> 01:05:41,440 through a colon and a bracket but i 1755 01:05:38,720 --> 01:05:42,799 think i'm being a little pedantic here 1756 01:05:41,440 --> 01:05:44,640 when i asked what he's been recently 1757 01:05:42,799 --> 01:05:46,480 learning about computers he said he's 1758 01:05:44,640 --> 01:05:48,000 been learning about the axioms of 1759 01:05:46,480 --> 01:05:50,880 natural deduction 1760 01:05:48,000 --> 01:05:52,559 let's hear his talk i'm uh john t deakin 1761 01:05:50,880 --> 01:05:53,599 and this is a smart project by code 1762 01:05:52,559 --> 01:05:56,480 macro 1763 01:05:53,599 --> 01:05:58,960 uh it's a look at intermediate languages 1764 01:05:56,480 --> 01:06:00,960 and meta programming uh specifically in 1765 01:05:58,960 --> 01:06:03,039 the context of like fourth and lisp 1766 01:06:00,960 --> 01:06:04,960 macros um 1767 01:06:03,039 --> 01:06:06,319 yeah so this is just a cool example i 1768 01:06:04,960 --> 01:06:07,839 thought i'd flash up at the start we'll 1769 01:06:06,319 --> 01:06:10,160 go through it um 1770 01:06:07,839 --> 01:06:11,599 so i'm gonna go through some of the 1771 01:06:10,160 --> 01:06:12,880 you know intermediate languages and meta 1772 01:06:11,599 --> 01:06:14,960 programming stuff just make sure we're 1773 01:06:12,880 --> 01:06:16,240 all on the same page uh before i start 1774 01:06:14,960 --> 01:06:20,079 talking about 1775 01:06:16,240 --> 01:06:22,400 the bytecode macro library itself um 1776 01:06:20,079 --> 01:06:23,760 so intermediate languages what are they 1777 01:06:22,400 --> 01:06:24,640 uh 1778 01:06:23,760 --> 01:06:26,640 when 1779 01:06:24,640 --> 01:06:28,559 a compiler runs it doesn't just run the 1780 01:06:26,640 --> 01:06:30,079 string directly you know that would be 1781 01:06:28,559 --> 01:06:32,000 insane it goes through a few steps 1782 01:06:30,079 --> 01:06:33,680 beforehand 1783 01:06:32,000 --> 01:06:35,839 and you know in this example here we've 1784 01:06:33,680 --> 01:06:38,640 got is a string going through alexa to 1785 01:06:35,839 --> 01:06:40,720 be uh to become tokens which is then 1786 01:06:38,640 --> 01:06:42,880 passed to become an ast which is then 1787 01:06:40,720 --> 01:06:44,480 compiled to become bytecode and then the 1788 01:06:42,880 --> 01:06:46,880 by code's interpreted 1789 01:06:44,480 --> 01:06:48,400 later and it's that by code that's what 1790 01:06:46,880 --> 01:06:50,079 we're looking at today 1791 01:06:48,400 --> 01:06:52,079 um well there's not always by code this 1792 01:06:50,079 --> 01:06:53,680 is just a overview of python itself it 1793 01:06:52,079 --> 01:06:54,960 does you know it changes from compiler 1794 01:06:53,680 --> 01:06:56,160 to compiler 1795 01:06:54,960 --> 01:06:57,839 uh 1796 01:06:56,160 --> 01:07:00,880 but yeah so in python it's a byte code 1797 01:06:57,839 --> 01:07:03,920 and a bytecode is like a series of bytes 1798 01:07:00,880 --> 01:07:05,440 that is a shortened representation of 1799 01:07:03,920 --> 01:07:07,280 the code and simplified and shortened 1800 01:07:05,440 --> 01:07:08,559 representation of the code you can do 1801 01:07:07,280 --> 01:07:10,799 some cool things with it it's way easier 1802 01:07:08,559 --> 01:07:12,400 to interpret and you can do some cool 1803 01:07:10,799 --> 01:07:14,160 optimizations uh 1804 01:07:12,400 --> 01:07:16,480 not so much with stack base by code 1805 01:07:14,160 --> 01:07:18,799 which python is um and so stack based 1806 01:07:16,480 --> 01:07:20,000 back code is a byte code that primarily 1807 01:07:18,799 --> 01:07:21,520 acts upon 1808 01:07:20,000 --> 01:07:23,520 a stack 1809 01:07:21,520 --> 01:07:25,039 uh a data set you know just all the 1810 01:07:23,520 --> 01:07:26,319 other kinds of things but mostly data 1811 01:07:25,039 --> 01:07:27,119 right the data sets what we're talking 1812 01:07:26,319 --> 01:07:30,000 about 1813 01:07:27,119 --> 01:07:30,960 and so in this case we've got it loading 1814 01:07:30,000 --> 01:07:33,440 on the right side here we've got it 1815 01:07:30,960 --> 01:07:34,559 loading a string hello world onto the 1816 01:07:33,440 --> 01:07:36,400 stack 1817 01:07:34,559 --> 01:07:38,640 and then you can pop that string into 1818 01:07:36,400 --> 01:07:39,680 standard out using the print command 1819 01:07:38,640 --> 01:07:42,000 right 1820 01:07:39,680 --> 01:07:43,520 and so that's you know how python by 1821 01:07:42,000 --> 01:07:45,280 code mostly works just a lot of these 1822 01:07:43,520 --> 01:07:46,319 cool stack operations 1823 01:07:45,280 --> 01:07:47,599 um 1824 01:07:46,319 --> 01:07:48,480 and 1825 01:07:47,599 --> 01:07:50,079 uh 1826 01:07:48,480 --> 01:07:51,520 yeah and so we'll get into meta 1827 01:07:50,079 --> 01:07:54,160 programming now 1828 01:07:51,520 --> 01:07:55,839 meta programming is you know code acting 1829 01:07:54,160 --> 01:07:57,359 upon code it's actually everywhere i i 1830 01:07:55,839 --> 01:07:59,359 didn't realize this before it's checked 1831 01:07:57,359 --> 01:08:00,720 but it's like almost every language is 1832 01:07:59,359 --> 01:08:03,119 made up for some meta programming 1833 01:08:00,720 --> 01:08:04,799 capabilities uh you know java c-sharp 1834 01:08:03,119 --> 01:08:07,280 has reflection 1835 01:08:04,799 --> 01:08:10,240 julie uh python has meta classes c plus 1836 01:08:07,280 --> 01:08:12,000 plus famously template meta programming 1837 01:08:10,240 --> 01:08:14,960 uh and fourth 1838 01:08:12,000 --> 01:08:17,520 fourth uh lisp and julia 1839 01:08:14,960 --> 01:08:20,000 all have this really cool kind of macros 1840 01:08:17,520 --> 01:08:22,080 thing i mean fourth and julia are based 1841 01:08:20,000 --> 01:08:23,839 you know inspired by this but 1842 01:08:22,080 --> 01:08:24,960 they all have a really cool macro system 1843 01:08:23,839 --> 01:08:25,920 where you can 1844 01:08:24,960 --> 01:08:28,000 take 1845 01:08:25,920 --> 01:08:30,640 uh any co you can take some code and 1846 01:08:28,000 --> 01:08:32,000 then transform it into new code 1847 01:08:30,640 --> 01:08:34,640 uh and 1848 01:08:32,000 --> 01:08:36,799 uh you know you can extend the language 1849 01:08:34,640 --> 01:08:38,640 you can write shorthands for some stuff 1850 01:08:36,799 --> 01:08:40,560 you know with code reuse you can even 1851 01:08:38,640 --> 01:08:42,880 like take it so far as to write domain 1852 01:08:40,560 --> 01:08:45,040 specific languages in other language in 1853 01:08:42,880 --> 01:08:47,199 your own language i think it's very cool 1854 01:08:45,040 --> 01:08:50,159 uh so for example like in fixed maths 1855 01:08:47,199 --> 01:08:52,400 you can do infinix maths in lisp 1856 01:08:50,159 --> 01:08:54,239 some guys done that i think it's cool uh 1857 01:08:52,400 --> 01:08:56,239 and for this project i specifically was 1858 01:08:54,239 --> 01:08:57,440 looking mostly at fourth macros just 1859 01:08:56,239 --> 01:08:59,120 because i think 1860 01:08:57,440 --> 01:09:01,199 they've applied better and you know 1861 01:08:59,120 --> 01:09:03,440 that's what i was learning at the time 1862 01:09:01,199 --> 01:09:05,920 uh and the question is why if these are 1863 01:09:03,440 --> 01:09:07,359 so cool and such as you know they're 1864 01:09:05,920 --> 01:09:09,759 very beloved by 1865 01:09:07,359 --> 01:09:11,839 list programmers especially macros very 1866 01:09:09,759 --> 01:09:14,159 much loved by list programmers um 1867 01:09:11,839 --> 01:09:16,400 and if they're so great why aren't they 1868 01:09:14,159 --> 01:09:18,560 in other languages as much uh and i 1869 01:09:16,400 --> 01:09:20,799 think in my opinion at least it's mostly 1870 01:09:18,560 --> 01:09:22,560 because lisp has such a beautiful like 1871 01:09:20,799 --> 01:09:24,640 regular syntax 1872 01:09:22,560 --> 01:09:26,719 uh that it makes it a really easy 1873 01:09:24,640 --> 01:09:28,239 interface to be manipulating through the 1874 01:09:26,719 --> 01:09:30,480 meta programming right 1875 01:09:28,239 --> 01:09:32,400 you know it's all lists embed lists and 1876 01:09:30,480 --> 01:09:34,480 lists you know just recursive lists it's 1877 01:09:32,400 --> 01:09:36,719 very easy to iterate through that kind 1878 01:09:34,480 --> 01:09:38,640 of stuff same thing with fourth um 1879 01:09:36,719 --> 01:09:40,319 and that's why 1880 01:09:38,640 --> 01:09:42,000 it works so well and i think that's 1881 01:09:40,319 --> 01:09:43,040 where a lot of the libraries that try to 1882 01:09:42,000 --> 01:09:45,040 implement this kind of stuff in 1883 01:09:43,040 --> 01:09:46,400 languages that weren't designed for it 1884 01:09:45,040 --> 01:09:48,319 like fall down 1885 01:09:46,400 --> 01:09:50,000 because they're trying to use the ast 1886 01:09:48,319 --> 01:09:52,640 representation that lisp uses in other 1887 01:09:50,000 --> 01:09:53,920 languages with a really complex ast 1888 01:09:52,640 --> 01:09:55,520 and it makes it you know just makes it 1889 01:09:53,920 --> 01:09:57,520 confusing and hard to 1890 01:09:55,520 --> 01:09:58,719 reason about in my opinion at least um 1891 01:09:57,520 --> 01:10:01,600 and and so that's what i was trying to 1892 01:09:58,719 --> 01:10:04,159 do with this project was to capture that 1893 01:10:01,600 --> 01:10:06,320 simplicity in the interface that lisp 1894 01:10:04,159 --> 01:10:07,920 has that makes it so good 1895 01:10:06,320 --> 01:10:11,520 and so yeah speaking of we're going to 1896 01:10:07,920 --> 01:10:11,520 get into bytecode macro 1897 01:10:11,600 --> 01:10:16,480 so 1898 01:10:12,320 --> 01:10:19,360 how bytecode macro works is it takes you 1899 01:10:16,480 --> 01:10:21,840 know it's a decorator that takes a 1900 01:10:19,360 --> 01:10:24,080 macro function and the function to apply 1901 01:10:21,840 --> 01:10:25,840 that macro to 1902 01:10:24,080 --> 01:10:28,320 converts that 1903 01:10:25,840 --> 01:10:32,159 function it passed in this case test to 1904 01:10:28,320 --> 01:10:34,159 a list of tuples or tuples 1905 01:10:32,159 --> 01:10:36,480 uh and 1906 01:10:34,159 --> 01:10:38,800 you know those tuples are instructions 1907 01:10:36,480 --> 01:10:40,560 in the bytecode in in the in the buy 1908 01:10:38,800 --> 01:10:41,920 code right it's a simplified human 1909 01:10:40,560 --> 01:10:44,320 readable version 1910 01:10:41,920 --> 01:10:45,600 of that by code and it passes this list 1911 01:10:44,320 --> 01:10:46,880 of tuples 1912 01:10:45,600 --> 01:10:49,679 to the 1913 01:10:46,880 --> 01:10:53,120 macro function in this case macro trace 1914 01:10:49,679 --> 01:10:56,400 uh and then that macro function can 1915 01:10:53,120 --> 01:10:58,719 modify that by code that linear list of 1916 01:10:56,400 --> 01:11:00,640 tuples to be whatever it wanted um 1917 01:10:58,719 --> 01:11:03,199 so in this case we've changed hello 1918 01:11:00,640 --> 01:11:05,679 world to hello friends 1919 01:11:03,199 --> 01:11:07,600 and then you've returned this newly 1920 01:11:05,679 --> 01:11:09,840 modified list of tuples 1921 01:11:07,600 --> 01:11:11,280 and it will execute this as if it was 1922 01:11:09,840 --> 01:11:13,679 the original function 1923 01:11:11,280 --> 01:11:15,280 um and there we go this is saying hello 1924 01:11:13,679 --> 01:11:17,120 friends at the end 1925 01:11:15,280 --> 01:11:18,480 um and this 1926 01:11:17,120 --> 01:11:20,159 i think that's really cool and that's 1927 01:11:18,480 --> 01:11:21,440 that's how it works is very simple i 1928 01:11:20,159 --> 01:11:23,520 think it's you know easy enough to 1929 01:11:21,440 --> 01:11:25,040 understand and this is the 1930 01:11:23,520 --> 01:11:27,520 macro that was used to produce the 1931 01:11:25,040 --> 01:11:30,560 visualizations we saw just 1932 01:11:27,520 --> 01:11:32,719 last slide uh it takes in the tuples and 1933 01:11:30,560 --> 01:11:35,840 then 4n in the tuples of prince enso 1934 01:11:32,719 --> 01:11:37,360 prints each tuple in a line 1935 01:11:35,840 --> 01:11:38,080 and then it returns it without changing 1936 01:11:37,360 --> 01:11:40,480 it 1937 01:11:38,080 --> 01:11:43,040 so that's how we can see you know 1938 01:11:40,480 --> 01:11:44,800 what the type of representation of the 1939 01:11:43,040 --> 01:11:46,480 above function is 1940 01:11:44,800 --> 01:11:48,080 uh 1941 01:11:46,480 --> 01:11:49,920 and you know we can move on here's the 1942 01:11:48,080 --> 01:11:51,679 go to example we saw right at the side 1943 01:11:49,920 --> 01:11:53,840 that i thought was really cool 1944 01:11:51,679 --> 01:11:55,280 um just take a little bit it doesn't 1945 01:11:53,840 --> 01:11:56,800 matter too much it just works like a 1946 01:11:55,280 --> 01:11:58,800 go-to right 1947 01:11:56,800 --> 01:12:00,080 uh and here's the macro implementation 1948 01:11:58,800 --> 01:12:01,760 looks a little scary but it's really 1949 01:12:00,080 --> 01:12:04,400 simple um 1950 01:12:01,760 --> 01:12:06,000 and so what it does is it checks if 1951 01:12:04,400 --> 01:12:08,480 there is a string 1952 01:12:06,000 --> 01:12:11,040 which has goto in it 1953 01:12:08,480 --> 01:12:13,679 uh and then if it does it replaces the 1954 01:12:11,040 --> 01:12:15,520 string loading command with 1955 01:12:13,679 --> 01:12:17,920 a command that 1956 01:12:15,520 --> 01:12:19,520 a jump command here with wherever the go 1957 01:12:17,920 --> 01:12:21,360 to was targeting 1958 01:12:19,520 --> 01:12:23,040 and if there is a string 1959 01:12:21,360 --> 01:12:25,360 which has a 1960 01:12:23,040 --> 01:12:27,360 colon at the end or like a label then it 1961 01:12:25,360 --> 01:12:28,640 replaces that instruction with a label 1962 01:12:27,360 --> 01:12:31,920 instruction 1963 01:12:28,640 --> 01:12:34,239 um with whatever the label was 1964 01:12:31,920 --> 01:12:36,560 and then otherwise it's just you know 1965 01:12:34,239 --> 01:12:39,280 appends through normally and that's how 1966 01:12:36,560 --> 01:12:41,920 the go-to macro works i think it works 1967 01:12:39,280 --> 01:12:43,600 so simply because there i added um 1968 01:12:41,920 --> 01:12:46,320 it because there is 1969 01:12:43,600 --> 01:12:48,320 jump commands in 1970 01:12:46,320 --> 01:12:50,159 uh the original byte code and it is 1971 01:12:48,320 --> 01:12:52,239 worth mentioning that this isn't an 1972 01:12:50,159 --> 01:12:53,920 exact one to one of the original by code 1973 01:12:52,239 --> 01:12:55,280 in human readable form i've made a few 1974 01:12:53,920 --> 01:12:58,080 small changes 1975 01:12:55,280 --> 01:12:59,760 just to make it better um but yeah it's 1976 01:12:58,080 --> 01:13:01,360 pretty cool i think 1977 01:12:59,760 --> 01:13:02,719 uh and then here's the last one which is 1978 01:13:01,360 --> 01:13:04,719 a little complicated it took me a while 1979 01:13:02,719 --> 01:13:07,360 to get my head around after i wrote it 1980 01:13:04,719 --> 01:13:09,280 uh what it does it is just a 1981 01:13:07,360 --> 01:13:11,120 an example to try to show that it's got 1982 01:13:09,280 --> 01:13:12,719 so much power and you can really do 1983 01:13:11,120 --> 01:13:14,000 anything you want with this you don't 1984 01:13:12,719 --> 01:13:16,320 have to do something that already exists 1985 01:13:14,000 --> 01:13:19,040 you can let your mind run through 1986 01:13:16,320 --> 01:13:21,760 so to speak um and so heads one works is 1987 01:13:19,040 --> 01:13:23,679 within the join and block 1988 01:13:21,760 --> 01:13:26,560 it's it takes the output of the previous 1989 01:13:23,679 --> 01:13:27,760 line and feeds it in as the first input 1990 01:13:26,560 --> 01:13:30,719 on the 1991 01:13:27,760 --> 01:13:32,080 of the function on the next line um and 1992 01:13:30,719 --> 01:13:33,600 and n equals three doesn't return 1993 01:13:32,080 --> 01:13:35,600 anything in python 1994 01:13:33,600 --> 01:13:38,080 uh but i've made it return like a walrus 1995 01:13:35,600 --> 01:13:38,880 operator just to make it uh just to make 1996 01:13:38,080 --> 01:13:41,120 this 1997 01:13:38,880 --> 01:13:42,880 this whole thing work but so for this 1998 01:13:41,120 --> 01:13:44,960 example right it goes from range three 1999 01:13:42,880 --> 01:13:48,080 to six and then it sums that range from 2000 01:13:44,960 --> 01:13:49,840 three to six and then it times it by two 2001 01:13:48,080 --> 01:13:52,400 and then it prints that output and which 2002 01:13:49,840 --> 01:13:53,520 does print 24 and you can see the maths 2003 01:13:52,400 --> 01:13:54,480 just here 2004 01:13:53,520 --> 01:13:55,840 um 2005 01:13:54,480 --> 01:13:57,840 and i think that's really cool this is 2006 01:13:55,840 --> 01:13:59,120 just you know i think that's it's pretty 2007 01:13:57,840 --> 01:14:02,080 crazy 2008 01:13:59,120 --> 01:14:04,719 so uh just miscellaneous 2009 01:14:02,080 --> 01:14:06,880 should you use this in your code um i i 2010 01:14:04,719 --> 01:14:08,320 would i hope you wouldn't i think it's 2011 01:14:06,880 --> 01:14:10,080 you know it's really bad meta 2012 01:14:08,320 --> 01:14:11,920 programming a lot of the time is 2013 01:14:10,080 --> 01:14:13,360 not optimal to using your code at all it 2014 01:14:11,920 --> 01:14:14,800 can lead to some very hard to read code 2015 01:14:13,360 --> 01:14:17,440 which we see before 2016 01:14:14,800 --> 01:14:21,040 um and i think fundamentally 2017 01:14:17,440 --> 01:14:22,719 it's it's kind of anti-pythonic it's not 2018 01:14:21,040 --> 01:14:24,560 it's it's against the principles of 2019 01:14:22,719 --> 01:14:26,719 python um and 2020 01:14:24,560 --> 01:14:29,760 so i've got the zener python here 2021 01:14:26,719 --> 01:14:32,800 the of python the python poem that 2022 01:14:29,760 --> 01:14:35,360 explains exactly 2023 01:14:32,800 --> 01:14:38,400 uh the the core design principles of 2024 01:14:35,360 --> 01:14:41,360 python and i think you can see that it's 2025 01:14:38,400 --> 01:14:43,040 it's just against most of it right um 2026 01:14:41,360 --> 01:14:45,199 you know explicit is better than 2027 01:14:43,040 --> 01:14:48,080 implicit that's that's the whole idea 2028 01:14:45,199 --> 01:14:51,440 isn't it right to try to build 2029 01:14:48,080 --> 01:14:53,040 uh implicit changes to python 2030 01:14:51,440 --> 01:14:54,800 and then you know 2031 01:14:53,040 --> 01:14:56,560 what's the other one oh yeah 2032 01:14:54,800 --> 01:14:58,400 if the implementation is hard to explain 2033 01:14:56,560 --> 01:14:59,920 it's a bad idea i think that's that's a 2034 01:14:58,400 --> 01:15:01,199 given right i spent a whole 10 minutes 2035 01:14:59,920 --> 01:15:03,840 trying to explain it 2036 01:15:01,199 --> 01:15:05,600 um and then the last one being special 2037 01:15:03,840 --> 01:15:06,960 cases aren't special enough to break the 2038 01:15:05,600 --> 01:15:09,040 rules right that's the whole point we're 2039 01:15:06,960 --> 01:15:11,199 trying to break the rules of python in 2040 01:15:09,040 --> 01:15:13,120 order to account for these special cases 2041 01:15:11,199 --> 01:15:15,600 right um 2042 01:15:13,120 --> 01:15:18,080 and yeah so then you're probably asking 2043 01:15:15,600 --> 01:15:20,000 why did you do this then you know what's 2044 01:15:18,080 --> 01:15:21,520 what's the whole point and i think you 2045 01:15:20,000 --> 01:15:23,199 know you can do the stuff that list 2046 01:15:21,520 --> 01:15:25,120 macros allow you to do you can extend 2047 01:15:23,199 --> 01:15:26,560 python syntax you can even write domain 2048 01:15:25,120 --> 01:15:28,880 specific languages if you really wanted 2049 01:15:26,560 --> 01:15:30,080 to there's some element of code reuses 2050 01:15:28,880 --> 01:15:31,920 but i think 2051 01:15:30,080 --> 01:15:33,920 at the end of the day it's just a lot of 2052 01:15:31,920 --> 01:15:35,360 fun it was fun to make and i think it's 2053 01:15:33,920 --> 01:15:36,560 fun to mess around with the internals of 2054 01:15:35,360 --> 01:15:38,000 python 2055 01:15:36,560 --> 01:15:40,080 and it's fun to extend language like 2056 01:15:38,000 --> 01:15:41,760 this i think it's you know i i enjoyed i 2057 01:15:40,080 --> 01:15:43,199 enjoyed doing it and you know i hope you 2058 01:15:41,760 --> 01:15:45,760 would enjoy messing around with the 2059 01:15:43,199 --> 01:15:47,920 library a little bit uh and yeah so 2060 01:15:45,760 --> 01:15:49,840 that's the end of my talk here are the 2061 01:15:47,920 --> 01:15:51,120 links around the biker so if you want to 2062 01:15:49,840 --> 01:15:53,440 check out the github 2063 01:15:51,120 --> 01:15:54,800 you can here's a link 2064 01:15:53,440 --> 01:15:57,679 and if you want to just install the 2065 01:15:54,800 --> 01:15:59,120 library go ahead uh you know just do it 2066 01:15:57,679 --> 01:16:00,080 instantly like this 2067 01:15:59,120 --> 01:16:03,440 there's the 2068 01:16:00,080 --> 01:16:04,800 installation and command it's on pip 2069 01:16:03,440 --> 01:16:06,640 but i would recommend reading through 2070 01:16:04,800 --> 01:16:08,320 the documentation on github if you do 2071 01:16:06,640 --> 01:16:09,360 want to give this library a little bit 2072 01:16:08,320 --> 01:16:10,960 of a try 2073 01:16:09,360 --> 01:16:13,520 uh thank you 2074 01:16:10,960 --> 01:16:16,080 fantastic thanks so much 2075 01:16:13,520 --> 01:16:18,400 our next talk is a group talk we'll be 2076 01:16:16,080 --> 01:16:20,719 hearing from amelia dalia vyan and 2077 01:16:18,400 --> 01:16:22,560 elizabeth about building cooker berry 2078 01:16:20,719 --> 01:16:24,239 apps for learning and they've been 2079 01:16:22,560 --> 01:16:25,280 programming just since the beginning of 2080 01:16:24,239 --> 01:16:27,440 this year 2081 01:16:25,280 --> 01:16:30,159 when i asked their favorite emoji it was 2082 01:16:27,440 --> 01:16:33,600 a 50 50 split between the rolling eyes 2083 01:16:30,159 --> 01:16:35,679 emoji and the sun emoji a dangerous mix 2084 01:16:33,600 --> 01:16:37,120 i hope you've got sunnies too 2085 01:16:35,679 --> 01:16:38,719 when i asked what they recently learned 2086 01:16:37,120 --> 01:16:40,960 about computing they said they've been 2087 01:16:38,719 --> 01:16:43,520 learning about caesar ciphers encoding 2088 01:16:40,960 --> 01:16:46,159 and decoding and also about the general 2089 01:16:43,520 --> 01:16:47,440 concept of computers not having a human 2090 01:16:46,159 --> 01:16:49,760 language 2091 01:16:47,440 --> 01:16:51,360 it's a deep rabbit hole to go down but 2092 01:16:49,760 --> 01:16:54,159 an interesting one 2093 01:16:51,360 --> 01:16:54,159 let's hear their talk 2094 01:16:54,239 --> 01:16:57,520 hi i'm emilia 2095 01:16:56,159 --> 01:16:58,960 elizabeth 2096 01:16:57,520 --> 01:17:00,560 leon 2097 01:16:58,960 --> 01:17:03,280 dalia 2098 01:17:00,560 --> 01:17:04,719 and we're in year 9 at plc sydney 2099 01:17:03,280 --> 01:17:06,400 and we are the cambridge computer 2100 01:17:04,719 --> 01:17:08,880 science class 2101 01:17:06,400 --> 01:17:10,640 i've been coding for about seven months 2102 01:17:08,880 --> 01:17:12,719 started this year 2103 01:17:10,640 --> 01:17:14,719 since the start of this year 2104 01:17:12,719 --> 01:17:16,560 around seven months 2105 01:17:14,719 --> 01:17:18,480 i got involved in computer science 2106 01:17:16,560 --> 01:17:20,239 because i believe that if i learn about 2107 01:17:18,480 --> 01:17:22,320 something that keeps evolving it will 2108 01:17:20,239 --> 01:17:23,760 help me in the future 2109 01:17:22,320 --> 01:17:24,960 i think it is important to know about 2110 01:17:23,760 --> 01:17:27,760 because the time we are living in 2111 01:17:24,960 --> 01:17:29,280 revolves more and more around computers 2112 01:17:27,760 --> 01:17:31,600 i believe that computer science will be 2113 01:17:29,280 --> 01:17:33,199 a helpful tool in our future 2114 01:17:31,600 --> 01:17:35,120 and i thought it would be interesting to 2115 01:17:33,199 --> 01:17:37,199 learn 2116 01:17:35,120 --> 01:17:38,719 for our assignment our teacher mrs noble 2117 01:17:37,199 --> 01:17:40,320 challenged us to design and code 2118 01:17:38,719 --> 01:17:41,520 programs in python that will help with 2119 01:17:40,320 --> 01:17:43,360 learning 2120 01:17:41,520 --> 01:17:45,679 to complete the challenge we got to use 2121 01:17:43,360 --> 01:17:47,360 cooker berries an embedded device coded 2122 01:17:45,679 --> 01:17:49,440 in micro python 2123 01:17:47,360 --> 01:17:52,159 they have lots of inputs and outputs 2124 01:17:49,440 --> 01:17:55,360 like buttons screens and speakers that 2125 01:17:52,159 --> 01:17:57,040 we could use to create our programs 2126 01:17:55,360 --> 01:17:59,040 together we came up with seven apps to 2127 01:17:57,040 --> 01:18:02,800 help with practicing music and studying 2128 01:17:59,040 --> 01:18:02,800 for school that we'll show you today 2129 01:18:05,600 --> 01:18:09,360 i created two apps to help with language 2130 01:18:07,280 --> 01:18:10,719 learning and organization i chose to 2131 01:18:09,360 --> 01:18:12,080 create programs for this area of 2132 01:18:10,719 --> 01:18:13,520 learning because i personally struggle 2133 01:18:12,080 --> 01:18:15,600 with organizing myself and finding 2134 01:18:13,520 --> 01:18:16,960 myself wanting to study i started by 2135 01:18:15,600 --> 01:18:18,000 thinking about what i would want in a 2136 01:18:16,960 --> 01:18:19,360 learning app and thought it would be 2137 01:18:18,000 --> 01:18:21,360 good if i could use technology to 2138 01:18:19,360 --> 01:18:23,760 emulate that so i decided to make my 2139 01:18:21,360 --> 01:18:25,440 calendar and flashcard cookieberry apps 2140 01:18:23,760 --> 01:18:27,120 my first app was my calendar app and i 2141 01:18:25,440 --> 01:18:29,199 started off by working on the design and 2142 01:18:27,120 --> 01:18:30,719 features i wanted my original idea was 2143 01:18:29,199 --> 01:18:32,320 to have a large timetable template 2144 01:18:30,719 --> 01:18:34,159 similar to a school timetable with all 2145 01:18:32,320 --> 01:18:35,440 the days of the week however i realized 2146 01:18:34,159 --> 01:18:36,960 this would not be possible since the 2147 01:18:35,440 --> 01:18:38,880 kookaburra pixels are quite large and 2148 01:18:36,960 --> 01:18:40,239 there would not be enough space i came 2149 01:18:38,880 --> 01:18:42,239 up with a new design that fit the screen 2150 01:18:40,239 --> 01:18:44,560 which only showed one day at a time once 2151 01:18:42,239 --> 01:18:46,080 i had my design i needed to start coding 2152 01:18:44,560 --> 01:18:48,159 i first coded the lines that would make 2153 01:18:46,080 --> 01:18:49,440 up the timetable boxes there's a lot of 2154 01:18:48,159 --> 01:18:50,800 python to learn because this is the 2155 01:18:49,440 --> 01:18:52,159 first time i've encountered code for 2156 01:18:50,800 --> 01:18:54,159 displaying boxes and shapes on the 2157 01:18:52,159 --> 01:18:55,679 kookaberry getting it to look like my 2158 01:18:54,159 --> 01:18:56,960 design took a lot of trial and error i 2159 01:18:55,679 --> 01:18:58,239 also had a lot of lists of data to 2160 01:18:56,960 --> 01:19:00,800 organize to ensure that different study 2161 01:18:58,239 --> 01:19:02,320 sessions would associate with their day 2162 01:19:00,800 --> 01:19:03,920 i also needed to do things like at the 2163 01:19:02,320 --> 01:19:05,199 week to loop back round to the start 2164 01:19:03,920 --> 01:19:07,520 when using buttons to click through the 2165 01:19:05,199 --> 01:19:09,280 days in the timetable i needed to use a 2166 01:19:07,520 --> 01:19:10,800 special case when i reached the end of 2167 01:19:09,280 --> 01:19:12,159 the week so i could get back to the data 2168 01:19:10,800 --> 01:19:14,239 stored in my list for the start of the 2169 01:19:12,159 --> 01:19:16,400 week when i run my app it opens to 2170 01:19:14,239 --> 01:19:18,320 sunday and the task that day to go the 2171 01:19:16,400 --> 01:19:19,840 next day click d to go the previous day 2172 01:19:18,320 --> 01:19:21,280 click c 2173 01:19:19,840 --> 01:19:22,719 for my second app i thought about how 2174 01:19:21,280 --> 01:19:24,400 flashcards are helpful tool when 2175 01:19:22,719 --> 01:19:25,360 learning so i thought a flashcard app 2176 01:19:24,400 --> 01:19:27,840 would be a good choice for this 2177 01:19:25,360 --> 01:19:29,199 assignment i wanted to be able to show a 2178 01:19:27,840 --> 01:19:30,800 word in one language and then have the 2179 01:19:29,199 --> 01:19:33,280 user click to find out and memorize the 2180 01:19:30,800 --> 01:19:34,880 translation it ended up working so if a 2181 01:19:33,280 --> 01:19:36,880 is pressed it will display a word to 2182 01:19:34,880 --> 01:19:39,120 memorize in this case i chose various 2183 01:19:36,880 --> 01:19:41,920 french words if b is pressed the english 2184 01:19:39,120 --> 01:19:43,600 is shown if d is pressed the next card 2185 01:19:41,920 --> 01:19:45,280 is shown with the english option i 2186 01:19:43,600 --> 01:19:46,880 wanted to make sure that it would be 2187 01:19:45,280 --> 01:19:48,320 able to go backwards through the cards 2188 01:19:46,880 --> 01:19:50,239 as well but i couldn't figure out how 2189 01:19:48,320 --> 01:19:51,760 with the time i had when the final words 2190 01:19:50,239 --> 01:19:53,520 are reached and d is pressed to go to 2191 01:19:51,760 --> 01:19:55,120 the next one a congratulatory message 2192 01:19:53,520 --> 01:19:57,199 appears as well as the vocab that should 2193 01:19:55,120 --> 01:20:00,159 be memorized the user has the option to 2194 01:19:57,199 --> 01:20:01,440 repeat the system by clicking a 2195 01:20:00,159 --> 01:20:02,560 the hardest part for this app was 2196 01:20:01,440 --> 01:20:03,920 finding a way to switch between the 2197 01:20:02,560 --> 01:20:06,159 cards because there were multiple bits 2198 01:20:03,920 --> 01:20:08,400 of data associated with each screen 2199 01:20:06,159 --> 01:20:10,000 i really enjoyed learning about these 2200 01:20:08,400 --> 01:20:11,679 new ways to use python because i never 2201 01:20:10,000 --> 01:20:13,120 encountered them before 2202 01:20:11,679 --> 01:20:14,960 in the future i hope to utilize what 2203 01:20:13,120 --> 01:20:18,840 i've learned so i can find ways to 2204 01:20:14,960 --> 01:20:18,840 improve my programming skills 2205 01:20:20,080 --> 01:20:24,560 i created an app to help with studying 2206 01:20:22,800 --> 01:20:26,560 i chose to create a program for this 2207 01:20:24,560 --> 01:20:27,920 area of learning because it helps lots 2208 01:20:26,560 --> 01:20:30,800 of people when they are studying for 2209 01:20:27,920 --> 01:20:32,719 multiple subjects at one given time 2210 01:20:30,800 --> 01:20:34,719 i started out by thinking about how i 2211 01:20:32,719 --> 01:20:36,480 could use programming and the features 2212 01:20:34,719 --> 01:20:39,360 of the kookaburry like the buttons and 2213 01:20:36,480 --> 01:20:42,560 screen to help students learn 2214 01:20:39,360 --> 01:20:44,800 and so i decided to make a pop quiz app 2215 01:20:42,560 --> 01:20:46,719 to do this i first had to come up with a 2216 01:20:44,800 --> 01:20:48,960 plan of what questions to put in the 2217 01:20:46,719 --> 01:20:52,080 quiz as well as coming up with both the 2218 01:20:48,960 --> 01:20:54,800 correct and incorrect answers 2219 01:20:52,080 --> 01:20:57,199 to code the actual quiz i had to use a 2220 01:20:54,800 --> 01:20:59,520 lot of lists for storing the question 2221 01:20:57,199 --> 01:21:01,040 the multiple choice answers as well as a 2222 01:20:59,520 --> 01:21:03,280 list that says which is the correct 2223 01:21:01,040 --> 01:21:05,120 answer for each question 2224 01:21:03,280 --> 01:21:06,719 getting it to work was tricky because 2225 01:21:05,120 --> 01:21:09,280 sometimes the question wouldn't match up 2226 01:21:06,719 --> 01:21:11,199 with the corresponding answer but once i 2227 01:21:09,280 --> 01:21:13,840 made sure my lists were in the right 2228 01:21:11,199 --> 01:21:16,000 order of answers and questions and that 2229 01:21:13,840 --> 01:21:17,280 i was using the right indexes it all 2230 01:21:16,000 --> 01:21:19,280 worked 2231 01:21:17,280 --> 01:21:22,000 along the way i changed the design of my 2232 01:21:19,280 --> 01:21:23,600 project like including more questions 2233 01:21:22,000 --> 01:21:25,360 since i thought this would be useful to 2234 01:21:23,600 --> 01:21:28,800 give the user more questions to test 2235 01:21:25,360 --> 01:21:30,880 themselves on 2236 01:21:28,800 --> 01:21:33,280 in the end i got an app that works by 2237 01:21:30,880 --> 01:21:35,520 pressing a to start it and then when the 2238 01:21:33,280 --> 01:21:39,199 question and answer options appear you 2239 01:21:35,520 --> 01:21:41,040 select an answer using buttons a to d 2240 01:21:39,199 --> 01:21:42,800 once you have chosen your answer it 2241 01:21:41,040 --> 01:21:45,360 tells you if you are correct or not and 2242 01:21:42,800 --> 01:21:47,280 lets you proceed to the next question 2243 01:21:45,360 --> 01:21:49,280 in the future i hope to code this app 2244 01:21:47,280 --> 01:21:51,440 again so i can improve some features of 2245 01:21:49,280 --> 01:21:53,760 it like more questions and maybe a score 2246 01:21:51,440 --> 01:21:57,400 tally at the end and continue adding to 2247 01:21:53,760 --> 01:21:57,400 it to make it better 2248 01:22:01,280 --> 01:22:05,199 to do this project i started out by 2249 01:22:03,280 --> 01:22:06,960 thinking about what activities i do for 2250 01:22:05,199 --> 01:22:09,280 school and who could help with my own 2251 01:22:06,960 --> 01:22:11,520 learning i play a musical instrument in 2252 01:22:09,280 --> 01:22:13,280 school so i decided to make an app that 2253 01:22:11,520 --> 01:22:14,480 would make it easier to practice music 2254 01:22:13,280 --> 01:22:16,639 from home 2255 01:22:14,480 --> 01:22:18,880 so i decided to make two apps a 2256 01:22:16,639 --> 01:22:20,560 metronome that helps you play in time 2257 01:22:18,880 --> 01:22:22,880 and an app that keeps track of how many 2258 01:22:20,560 --> 01:22:24,719 times you've practiced different songs 2259 01:22:22,880 --> 01:22:26,400 for my metronome app i used a cooker 2260 01:22:24,719 --> 01:22:27,280 berry with the speaker module to play 2261 01:22:26,400 --> 01:22:29,520 the beat 2262 01:22:27,280 --> 01:22:31,280 to code my app i had to think about how 2263 01:22:29,520 --> 01:22:32,800 people would interact with it and i 2264 01:22:31,280 --> 01:22:35,120 decided to use four buttons on the 2265 01:22:32,800 --> 01:22:36,840 cooker berry for different functions on 2266 01:22:35,120 --> 01:22:39,520 off faster and 2267 01:22:36,840 --> 01:22:42,080 slower to reuse the metronome you click 2268 01:22:39,520 --> 01:22:44,400 a to start it once a is clicked the beat 2269 01:22:42,080 --> 01:22:46,639 will start coming from the speaker if 2270 01:22:44,400 --> 01:22:48,880 you click c the tempo will become slower 2271 01:22:46,639 --> 01:22:53,840 and if you click d the tempo will become 2272 01:22:48,880 --> 01:22:53,840 faster to stop the metronome click b 2273 01:22:53,920 --> 01:22:58,880 because i wanted to be able to vary the 2274 01:22:56,080 --> 01:23:00,880 speed of my metronome gaining the timing 2275 01:22:58,880 --> 01:23:03,120 was tricky i had to have two different 2276 01:23:00,880 --> 01:23:04,880 time values so that it would stay in b 2277 01:23:03,120 --> 01:23:07,040 for the length of the b and the time 2278 01:23:04,880 --> 01:23:09,280 between beats but once i understood how 2279 01:23:07,040 --> 01:23:11,280 to get the time right i could add two or 2280 01:23:09,280 --> 01:23:14,159 subtract from the variables to change 2281 01:23:11,280 --> 01:23:16,320 the tempo to get it working 2282 01:23:14,159 --> 01:23:17,679 once i had my metronome working i wanted 2283 01:23:16,320 --> 01:23:19,920 a way to track the songs i was 2284 01:23:17,679 --> 01:23:21,679 practicing i started out by coding a 2285 01:23:19,920 --> 01:23:24,400 list of all the names of the songs i 2286 01:23:21,679 --> 01:23:26,560 wanted to track to practice on 2287 01:23:24,400 --> 01:23:28,320 once i had done that i created another 2288 01:23:26,560 --> 01:23:30,480 list that would keep a tally for each 2289 01:23:28,320 --> 01:23:33,199 song so that we would have a different 2290 01:23:30,480 --> 01:23:34,639 count for each songs in the first list 2291 01:23:33,199 --> 01:23:36,560 getting the tally to match up with 2292 01:23:34,639 --> 01:23:38,639 correct song was tricky because it would 2293 01:23:36,560 --> 01:23:40,880 keep the same tally but then go to the 2294 01:23:38,639 --> 01:23:43,760 next song but once i worked out the 2295 01:23:40,880 --> 01:23:46,080 indexes i got it working 2296 01:23:43,760 --> 01:23:48,800 my finished app looked like this 2297 01:23:46,080 --> 01:23:50,880 you can click a and b to move backwards 2298 01:23:48,800 --> 01:23:52,159 and forwards between different songs and 2299 01:23:50,880 --> 01:23:53,520 click c and d 2300 01:23:52,159 --> 01:23:56,159 to add or 2301 01:23:53,520 --> 01:23:57,920 take away from the tally i even added an 2302 01:23:56,159 --> 01:24:00,480 extra feature where once the tally 2303 01:23:57,920 --> 01:24:02,400 reaches five on the song this neopixel 2304 01:24:00,480 --> 01:24:05,600 light display will flash to congratulate 2305 01:24:02,400 --> 01:24:07,760 you for reaching your goal 2306 01:24:05,600 --> 01:24:09,760 i really enjoyed making my apps because 2307 01:24:07,760 --> 01:24:11,760 i could put my skills to use and create 2308 01:24:09,760 --> 01:24:15,080 something of my own rather than copying 2309 01:24:11,760 --> 01:24:15,080 from a booklet 2310 01:24:18,000 --> 01:24:21,840 i created two wraps to help with study i 2311 01:24:20,239 --> 01:24:23,520 chose to create programs for this area 2312 01:24:21,840 --> 01:24:25,440 of learning because i do not have a good 2313 01:24:23,520 --> 01:24:27,600 study routine and never feel motivated 2314 01:24:25,440 --> 01:24:29,360 to study 2315 01:24:27,600 --> 01:24:30,800 i started out by thinking about the ways 2316 01:24:29,360 --> 01:24:32,639 that have helped me to study and thought 2317 01:24:30,800 --> 01:24:34,960 it'd be good if i could use technology 2318 01:24:32,639 --> 01:24:37,280 to make study time and quota 2319 01:24:34,960 --> 01:24:39,600 so first i decided to make an automatic 2320 01:24:37,280 --> 01:24:42,000 pomodoro method timer which is a method 2321 01:24:39,600 --> 01:24:44,560 that is 25 minutes of study and a five 2322 01:24:42,000 --> 01:24:46,480 minute break and this continues 2323 01:24:44,560 --> 01:24:48,719 and once i had done that i made an app 2324 01:24:46,480 --> 01:24:50,480 that displays inspirational quotes to 2325 01:24:48,719 --> 01:24:52,159 keep me motivated 2326 01:24:50,480 --> 01:24:54,400 the first thing i did was work out how 2327 01:24:52,159 --> 01:24:56,400 my study time should work my first 2328 01:24:54,400 --> 01:24:58,159 version of the project was an app that 2329 01:24:56,400 --> 01:24:59,840 would start when you press button a and 2330 01:24:58,159 --> 01:25:01,920 it would start counting down from 25 2331 01:24:59,840 --> 01:25:03,840 minutes for the study session and once 2332 01:25:01,920 --> 01:25:06,159 that finished it would count down from 5 2333 01:25:03,840 --> 01:25:08,239 minutes for the break time 2334 01:25:06,159 --> 01:25:10,560 i then added on extra features like 2335 01:25:08,239 --> 01:25:12,159 doing multiple sessions in a row adding 2336 01:25:10,560 --> 01:25:14,960 a speaker to make sounds at the end of 2337 01:25:12,159 --> 01:25:16,719 each set each session the ability to end 2338 01:25:14,960 --> 01:25:18,880 the session and account for how many 2339 01:25:16,719 --> 01:25:20,639 sessions you've done in a row 2340 01:25:18,880 --> 01:25:22,560 the trickiest thing about making the 2341 01:25:20,639 --> 01:25:24,480 time was that the code got really long 2342 01:25:22,560 --> 01:25:26,320 by the end and i needed to keep adding 2343 01:25:24,480 --> 01:25:28,320 to and editing lots of different parts 2344 01:25:26,320 --> 01:25:30,400 of the code to create my new features 2345 01:25:28,320 --> 01:25:32,239 because it was all connected but with 2346 01:25:30,400 --> 01:25:33,520 the help of my teacher i managed to work 2347 01:25:32,239 --> 01:25:34,480 out how to code it all and get it 2348 01:25:33,520 --> 01:25:36,560 working 2349 01:25:34,480 --> 01:25:38,320 my motivational quote was much more 2350 01:25:36,560 --> 01:25:40,560 straightforward to make it wasn't 2351 01:25:38,320 --> 01:25:42,560 particularly hard to code since i just 2352 01:25:40,560 --> 01:25:47,360 started to learn how to code it was 2353 01:25:42,560 --> 01:25:47,360 tricky to locate and fix syntax areas 2354 01:25:47,440 --> 01:25:51,520 using my app is also straightforward you 2355 01:25:49,440 --> 01:25:53,360 can just press button a this will make a 2356 01:25:51,520 --> 01:25:54,639 random code display on the screen of the 2357 01:25:53,360 --> 01:25:56,159 cooker berry 2358 01:25:54,639 --> 01:25:59,199 you can press button a every time you 2359 01:25:56,159 --> 01:26:01,199 want a new quote to read 2360 01:25:59,199 --> 01:26:02,800 i really enjoyed creating my own apps 2361 01:26:01,199 --> 01:26:05,760 because i was able to code without a 2362 01:26:02,800 --> 01:26:07,760 step-by-step guide in future i hope to 2363 01:26:05,760 --> 01:26:09,360 code more apps again so i can implement 2364 01:26:07,760 --> 01:26:11,440 what i've learned from this from the 2365 01:26:09,360 --> 01:26:14,639 beginning of this year up until now and 2366 01:26:11,440 --> 01:26:14,639 create even better apps 2367 01:26:17,360 --> 01:26:21,199 i really enjoyed making these apps 2368 01:26:19,199 --> 01:26:22,960 because it helps me understand what goes 2369 01:26:21,199 --> 01:26:24,880 on inside a computer when using a 2370 01:26:22,960 --> 01:26:26,800 similar app 2371 01:26:24,880 --> 01:26:28,639 using python for this project was good 2372 01:26:26,800 --> 01:26:30,320 because i learned most of the basics of 2373 01:26:28,639 --> 01:26:32,000 python at the beginning of the year so i 2374 01:26:30,320 --> 01:26:34,000 was able to understand the layout of the 2375 01:26:32,000 --> 01:26:36,320 code and how to code my apps for the 2376 01:26:34,000 --> 01:26:37,920 quicker berry 2377 01:26:36,320 --> 01:26:39,600 in the future i hope to use the cooker 2378 01:26:37,920 --> 01:26:41,840 barrier again so i can create more apps 2379 01:26:39,600 --> 01:26:43,840 with better coding 2380 01:26:41,840 --> 01:26:45,600 using python for these products was good 2381 01:26:43,840 --> 01:26:47,360 because we had spent the year learning 2382 01:26:45,600 --> 01:26:49,040 about python which is relatively easy 2383 01:26:47,360 --> 01:26:50,560 for a beginner and i look forward to 2384 01:26:49,040 --> 01:26:52,960 creating more projects with python in 2385 01:26:50,560 --> 01:26:52,960 the future 2386 01:26:56,719 --> 01:27:01,840 that was fantastic consoles look out 2387 01:26:59,679 --> 01:27:04,480 there are new games in town and here's 2388 01:27:01,840 --> 01:27:06,400 another one to talk about samuel is 2389 01:27:04,480 --> 01:27:09,840 talking about making an isometric game 2390 01:27:06,400 --> 01:27:11,679 from scratch in python using pygame 2391 01:27:09,840 --> 01:27:14,800 samuel's been programming for about six 2392 01:27:11,679 --> 01:27:16,560 years so since year six and his favorite 2393 01:27:14,800 --> 01:27:19,679 emoji is the 2394 01:27:16,560 --> 01:27:21,360 glasses emoji glasses represent 2395 01:27:19,679 --> 01:27:22,960 when i asked what he's recently learned 2396 01:27:21,360 --> 01:27:24,800 about computers he replied that 2397 01:27:22,960 --> 01:27:27,360 computers are bad at maths with 2398 01:27:24,800 --> 01:27:29,520 fractions floating point errors occur 2399 01:27:27,360 --> 01:27:32,080 when computers round numbers 2400 01:27:29,520 --> 01:27:34,000 and they are quite scary these errors 2401 01:27:32,080 --> 01:27:36,560 when they add up 2402 01:27:34,000 --> 01:27:38,159 let's hear more about his talk 2403 01:27:36,560 --> 01:27:40,400 good afternoon 2404 01:27:38,159 --> 01:27:43,199 welcome to my talk on how i implemented 2405 01:27:40,400 --> 01:27:44,880 isometric 3d in python's pie game 2406 01:27:43,199 --> 01:27:46,480 by way of introductions my name is 2407 01:27:44,880 --> 01:27:48,080 samuel price i go to san andreas 2408 01:27:46,480 --> 01:27:50,800 cathedral school and i've been 2409 01:27:48,080 --> 01:27:53,120 programming since grade six so about six 2410 01:27:50,800 --> 01:27:54,639 six years now and in those six years 2411 01:27:53,120 --> 01:27:57,840 something i've always really wanted to 2412 01:27:54,639 --> 01:27:59,440 do was develop a system for 3d 2413 01:27:57,840 --> 01:28:00,960 i've very much always been able to 2414 01:27:59,440 --> 01:28:02,880 believe that the best way to learn about 2415 01:28:00,960 --> 01:28:04,159 something is to do it yourself i started 2416 01:28:02,880 --> 01:28:06,639 off coding 2417 01:28:04,159 --> 01:28:08,320 some text-based rpgs moved on to 2d 2418 01:28:06,639 --> 01:28:09,920 games and i 2419 01:28:08,320 --> 01:28:11,199 made a clone of 2420 01:28:09,920 --> 01:28:14,480 quite a few 2421 01:28:11,199 --> 01:28:16,800 uh 2d games if you can think of one i've 2422 01:28:14,480 --> 01:28:19,600 probably done it 2423 01:28:16,800 --> 01:28:22,000 but one day i really really wanted to do 2424 01:28:19,600 --> 01:28:23,199 something in 3d the best system i could 2425 01:28:22,000 --> 01:28:26,480 think of 2426 01:28:23,199 --> 01:28:28,560 for me to implement was isometric 3d 2427 01:28:26,480 --> 01:28:30,960 now if you remember your math math 2428 01:28:28,560 --> 01:28:33,040 classes from grades one and two 2429 01:28:30,960 --> 01:28:34,880 what you get is these little series of 2430 01:28:33,040 --> 01:28:35,760 dots and you can connect them up to make 2431 01:28:34,880 --> 01:28:37,679 shapes 2432 01:28:35,760 --> 01:28:40,639 um essentially that works if you want to 2433 01:28:37,679 --> 01:28:42,719 travel say one unit in the x axis you 2434 01:28:40,639 --> 01:28:45,280 draw one of these lines in this 2435 01:28:42,719 --> 01:28:48,239 direction one of the y you do one of 2436 01:28:45,280 --> 01:28:49,840 these lines here one z one of those ones 2437 01:28:48,239 --> 01:28:51,520 and you chain those together to get 2438 01:28:49,840 --> 01:28:53,440 different points and to make two 2439 01:28:51,520 --> 01:28:55,440 different shapes 2440 01:28:53,440 --> 01:28:57,440 which all works pretty well and you can 2441 01:28:55,440 --> 01:28:58,719 see here that this is an implementation 2442 01:28:57,440 --> 01:29:01,040 of that model 2443 01:28:58,719 --> 01:29:02,159 it's just a little c where the ripples 2444 01:29:01,040 --> 01:29:04,000 come out 2445 01:29:02,159 --> 01:29:05,600 and you can you can see the depth you 2446 01:29:04,000 --> 01:29:07,280 can understand how it functions in three 2447 01:29:05,600 --> 01:29:08,400 dimensions you can see the rotation as 2448 01:29:07,280 --> 01:29:11,120 well 2449 01:29:08,400 --> 01:29:14,159 however the depth is also one problem of 2450 01:29:11,120 --> 01:29:17,040 this see in orthographic 3d which is 2451 01:29:14,159 --> 01:29:18,560 what we see in real life perspective 3d 2452 01:29:17,040 --> 01:29:20,320 when something's further away to your 2453 01:29:18,560 --> 01:29:22,800 smaller when it's closer you see it is 2454 01:29:20,320 --> 01:29:24,880 bigger but in isometric that's not quite 2455 01:29:22,800 --> 01:29:26,400 how it works if you have just a series 2456 01:29:24,880 --> 01:29:28,480 of dots it doesn't matter if you draw it 2457 01:29:26,400 --> 01:29:31,040 on one place or another it's always 2458 01:29:28,480 --> 01:29:33,600 going to be the same size 2459 01:29:31,040 --> 01:29:35,840 and so you can see here in this game a 2460 01:29:33,600 --> 01:29:38,960 small clone of temple run that i've 2461 01:29:35,840 --> 01:29:41,280 found a way to overcome this see 2462 01:29:38,960 --> 01:29:44,000 normally if you're jumping say from the 2463 01:29:41,280 --> 01:29:45,360 left most lane be hard to tell if you're 2464 01:29:44,000 --> 01:29:46,800 actually jumping from that lane or if 2465 01:29:45,360 --> 01:29:48,719 you're just in another lane staying 2466 01:29:46,800 --> 01:29:51,600 still 2467 01:29:48,719 --> 01:29:54,320 which is why i implemented a shadow 2468 01:29:51,600 --> 01:29:56,480 so you can see it shows under the player 2469 01:29:54,320 --> 01:29:58,239 to add a sense of immersion and not 2470 01:29:56,480 --> 01:30:00,880 break the suspension to disbelieve a 2471 01:29:58,239 --> 01:30:02,639 player has when playing a game 2472 01:30:00,880 --> 01:30:04,480 which is obviously quite useful for my 2473 01:30:02,639 --> 01:30:05,760 purposes 2474 01:30:04,480 --> 01:30:08,080 but 2475 01:30:05,760 --> 01:30:10,000 another success and 2476 01:30:08,080 --> 01:30:13,199 arguably another implementation of this 2477 01:30:10,000 --> 01:30:13,199 model can be seen here 2478 01:30:14,080 --> 01:30:18,159 now these shoot among you may notice 2479 01:30:16,080 --> 01:30:19,280 that there is a slight problem with this 2480 01:30:18,159 --> 01:30:20,719 clip 2481 01:30:19,280 --> 01:30:23,600 and that is that 2482 01:30:20,719 --> 01:30:25,679 it actually slightly overlaps in 2483 01:30:23,600 --> 01:30:28,239 a few of the frames 2484 01:30:25,679 --> 01:30:30,480 um which is to say that the shapes don't 2485 01:30:28,239 --> 01:30:32,800 draw in the right order now thinking 2486 01:30:30,480 --> 01:30:35,040 about draw or ordering 2487 01:30:32,800 --> 01:30:38,800 this is the system i came up with to do 2488 01:30:35,040 --> 01:30:41,440 it in isometric if you think uh you as 2489 01:30:38,800 --> 01:30:43,280 the audience looking at me and this pen 2490 01:30:41,440 --> 01:30:45,199 uh if you want to draw those to render 2491 01:30:43,280 --> 01:30:47,040 in the correct order if i'm in the back 2492 01:30:45,199 --> 01:30:50,480 you have to draw me first in a second so 2493 01:30:47,040 --> 01:30:51,360 this shows over me rather than behind me 2494 01:30:50,480 --> 01:30:52,880 and 2495 01:30:51,360 --> 01:30:54,560 in order to do this 2496 01:30:52,880 --> 01:30:56,000 i think of having a line that goes 2497 01:30:54,560 --> 01:30:57,440 straight from your vision straight 2498 01:30:56,000 --> 01:30:59,679 forward you don't have to care about 2499 01:30:57,440 --> 01:31:00,639 left or right or up or down 2500 01:30:59,679 --> 01:31:04,000 um 2501 01:31:00,639 --> 01:31:06,080 but if you look at me and then this pen 2502 01:31:04,000 --> 01:31:08,320 you think about this pen is actually 2503 01:31:06,080 --> 01:31:10,800 closer on that line going straight to 2504 01:31:08,320 --> 01:31:12,639 you than i am which is why this pen is 2505 01:31:10,800 --> 01:31:13,840 closer to you and should be rendered 2506 01:31:12,639 --> 01:31:15,840 last 2507 01:31:13,840 --> 01:31:17,600 and that's essentially what i did by 2508 01:31:15,840 --> 01:31:20,800 making a function that gives you the 2509 01:31:17,600 --> 01:31:22,800 normal to the to the uh camera for the 2510 01:31:20,800 --> 01:31:25,920 isometrics in 3d or for the 2511 01:31:22,800 --> 01:31:27,520 mathematically uninitiated of you and i 2512 01:31:25,920 --> 01:31:28,960 hope you look forward to that math i 2513 01:31:27,520 --> 01:31:30,960 certainly did 2514 01:31:28,960 --> 01:31:32,719 effectively just a line that goes 2515 01:31:30,960 --> 01:31:34,159 straight out from you like i was talking 2516 01:31:32,719 --> 01:31:38,239 about 2517 01:31:34,159 --> 01:31:40,159 i was able to sort shapes and points 2518 01:31:38,239 --> 01:31:41,360 to render in the correct order 2519 01:31:40,159 --> 01:31:43,679 however 2520 01:31:41,360 --> 01:31:45,920 in saying shapes it only really works 2521 01:31:43,679 --> 01:31:48,560 for points you can see in this example 2522 01:31:45,920 --> 01:31:49,840 here that this terrain that's generated 2523 01:31:48,560 --> 01:31:51,920 you can 2524 01:31:49,840 --> 01:31:53,520 see it drawn in the correct aura order 2525 01:31:51,920 --> 01:31:55,199 as the mountain moves closer to the 2526 01:31:53,520 --> 01:31:57,840 camera everything behind it is not 2527 01:31:55,199 --> 01:32:00,159 visible to you 2528 01:31:57,840 --> 01:32:02,000 that's exactly as you'd expect but then 2529 01:32:00,159 --> 01:32:03,600 why with those rectangular prisms does 2530 01:32:02,000 --> 01:32:06,719 it not always work 2531 01:32:03,600 --> 01:32:09,600 and as i understand it that's simply 2532 01:32:06,719 --> 01:32:12,480 a problem with discrete mathematics see 2533 01:32:09,600 --> 01:32:14,719 my formula is just built for working out 2534 01:32:12,480 --> 01:32:16,480 the position that it has in that line 2535 01:32:14,719 --> 01:32:18,239 which is only a point 2536 01:32:16,480 --> 01:32:19,920 not something that has width and height 2537 01:32:18,239 --> 01:32:21,040 and depth 2538 01:32:19,920 --> 01:32:22,560 and that's definitely something i'm 2539 01:32:21,040 --> 01:32:24,560 going to be working on in the future to 2540 01:32:22,560 --> 01:32:25,280 try and overcome that or work way around 2541 01:32:24,560 --> 01:32:27,600 it 2542 01:32:25,280 --> 01:32:30,239 but enough of these limitations 2543 01:32:27,600 --> 01:32:32,639 here's something i actually made with it 2544 01:32:30,239 --> 01:32:34,560 what you see here on the screen is my 2545 01:32:32,639 --> 01:32:36,239 year 12 major work for software design 2546 01:32:34,560 --> 01:32:38,880 and development 2547 01:32:36,239 --> 01:32:41,280 this is called ecosim as it is a 2548 01:32:38,880 --> 01:32:44,719 simulator of ecosystems you have plants 2549 01:32:41,280 --> 01:32:46,239 and animals interacting eating drinking 2550 01:32:44,719 --> 01:32:48,000 all that stuff 2551 01:32:46,239 --> 01:32:51,520 and the best way to think of to deliver 2552 01:32:48,000 --> 01:32:53,760 that was an isometric 3d to give it 2d 2553 01:32:51,520 --> 01:32:55,440 would mean have to flatten out animals 2554 01:32:53,760 --> 01:32:57,840 or have them very represented by a 2555 01:32:55,440 --> 01:33:00,000 character and while that works i do 2556 01:32:57,840 --> 01:33:02,960 value the immersion even if it is only 2557 01:33:00,000 --> 01:33:03,679 the emotion offered by a voxelized model 2558 01:33:02,960 --> 01:33:07,520 like 2559 01:33:03,679 --> 01:33:07,520 minecraft or terrarium for example 2560 01:33:07,600 --> 01:33:11,840 but in doing this you can rotate the 2561 01:33:09,520 --> 01:33:13,280 models in 3d you can see them moving 2562 01:33:11,840 --> 01:33:14,719 around and even where they're going to 2563 01:33:13,280 --> 01:33:16,000 move as they point in that direction 2564 01:33:14,719 --> 01:33:18,560 when they walk 2565 01:33:16,000 --> 01:33:20,800 and you can notice the view ordering is 2566 01:33:18,560 --> 01:33:22,800 almost correct as when something walks 2567 01:33:20,800 --> 01:33:24,719 behind the tree it does actually go 2568 01:33:22,800 --> 01:33:26,080 behind it and in front of it when it's 2569 01:33:24,719 --> 01:33:28,880 in front 2570 01:33:26,080 --> 01:33:31,360 which is definitely a success 2571 01:33:28,880 --> 01:33:33,600 however in saying that this did require 2572 01:33:31,360 --> 01:33:35,280 significant optimization 2573 01:33:33,600 --> 01:33:36,960 now for any of you that have tried to 2574 01:33:35,280 --> 01:33:39,520 make a rather significant project in 2575 01:33:36,960 --> 01:33:41,920 python probably well-known does not 2576 01:33:39,520 --> 01:33:44,719 always run the fastest 2577 01:33:41,920 --> 01:33:46,880 and a lot of that is definitely on me i 2578 01:33:44,719 --> 01:33:48,080 am not by any means the most experienced 2579 01:33:46,880 --> 01:33:49,199 programmer 2580 01:33:48,080 --> 01:33:51,280 um 2581 01:33:49,199 --> 01:33:53,760 and what i ended up coming up with was 2582 01:33:51,280 --> 01:33:56,639 two ways to optimize it the first way is 2583 01:33:53,760 --> 01:33:58,400 thinking of um as you see on the screen 2584 01:33:56,639 --> 01:34:00,000 here there are only certain tiles that 2585 01:33:58,400 --> 01:34:01,600 are actually visible to you you can 2586 01:34:00,000 --> 01:34:03,760 imagine that whole bunch of files are 2587 01:34:01,600 --> 01:34:05,280 off screen that aren't and drawing those 2588 01:34:03,760 --> 01:34:07,840 is a waste of processing power 2589 01:34:05,280 --> 01:34:10,639 especially if you are trying to do that 2590 01:34:07,840 --> 01:34:13,520 60 times a second 2591 01:34:10,639 --> 01:34:17,360 um so i i have done that by thinking of 2592 01:34:13,520 --> 01:34:18,800 each row as a line and doing some linear 2593 01:34:17,360 --> 01:34:20,800 but you can work out when the line 2594 01:34:18,800 --> 01:34:22,159 travels off the screen and that's the 2595 01:34:20,800 --> 01:34:24,320 wellington 2596 01:34:22,159 --> 01:34:26,080 but what if you were to zoom out you 2597 01:34:24,320 --> 01:34:28,320 would still be seeing everything and 2598 01:34:26,080 --> 01:34:30,719 optimization wouldn't help you there 2599 01:34:28,320 --> 01:34:32,639 because there's nothing off screen 2600 01:34:30,719 --> 01:34:35,920 so the next idea i had was just to 2601 01:34:32,639 --> 01:34:38,159 pre-render the sprite so turn a 3d map 2602 01:34:35,920 --> 01:34:40,239 into a 2d sprite which you can draw on 2603 01:34:38,159 --> 01:34:42,880 the screen each frame a lot more easily 2604 01:34:40,239 --> 01:34:44,400 than you can render every single tile 2605 01:34:42,880 --> 01:34:46,080 and that's what i ended up going with so 2606 01:34:44,400 --> 01:34:49,440 in this game there is a loading screen 2607 01:34:46,080 --> 01:34:51,920 as you open it up to pre-referendum 2608 01:34:49,440 --> 01:34:53,119 but moving into the future what i really 2609 01:34:51,920 --> 01:34:54,960 hope to do 2610 01:34:53,119 --> 01:34:56,239 is 2611 01:34:54,960 --> 01:34:57,840 to 2612 01:34:56,239 --> 01:35:00,320 kind of chunk these pre-rendered 2613 01:34:57,840 --> 01:35:03,360 renderings so to pre-render every eight 2614 01:35:00,320 --> 01:35:05,360 by eight for example tile map and then 2615 01:35:03,360 --> 01:35:08,560 uh 2616 01:35:05,360 --> 01:35:10,560 draw that as a texture-mapped 2617 01:35:08,560 --> 01:35:12,320 block of its own 2618 01:35:10,560 --> 01:35:14,080 which i think is an achievable goal for 2619 01:35:12,320 --> 01:35:16,880 the future 2620 01:35:14,080 --> 01:35:19,119 although it may take me years if i am to 2621 01:35:16,880 --> 01:35:20,560 do it all myself but enough about all 2622 01:35:19,119 --> 01:35:22,320 that 2623 01:35:20,560 --> 01:35:24,320 for those among you that are interested 2624 01:35:22,320 --> 01:35:26,320 as i know i certainly would be 2625 01:35:24,320 --> 01:35:29,280 this is the mathematics for this this 2626 01:35:26,320 --> 01:35:30,639 transformation of turning um the real 2627 01:35:29,280 --> 01:35:32,320 in-game coordinates into drawing 2628 01:35:30,639 --> 01:35:34,000 coordinates as you can see on the screen 2629 01:35:32,320 --> 01:35:35,199 here 2630 01:35:34,000 --> 01:35:37,840 what you have 2631 01:35:35,199 --> 01:35:39,600 is first off you have your decode as 2632 01:35:37,840 --> 01:35:41,840 your drawing coordinates your arco as 2633 01:35:39,600 --> 01:35:44,000 your real or in-game coordinates add for 2634 01:35:41,840 --> 01:35:46,800 the camera offset or add 2635 01:35:44,000 --> 01:35:49,360 as in addition uh zoom for how the 2636 01:35:46,800 --> 01:35:51,360 zoomed in the camera is 2637 01:35:49,360 --> 01:35:52,960 and then what you have is the real 2638 01:35:51,360 --> 01:35:55,119 coordinate 2639 01:35:52,960 --> 01:35:57,119 time the real x coordinate times sine of 2640 01:35:55,119 --> 01:35:58,719 theta plus the real y order times cos of 2641 01:35:57,119 --> 01:36:01,840 theta and you're talking about your 2642 01:35:58,719 --> 01:36:03,840 horizontal drawn coordinate and then for 2643 01:36:01,840 --> 01:36:05,119 the horizontal vertical component you 2644 01:36:03,840 --> 01:36:06,159 have 2645 01:36:05,119 --> 01:36:08,239 the real 2646 01:36:06,159 --> 01:36:11,920 in game x times cos of theta minus the 2647 01:36:08,239 --> 01:36:13,600 real y times sine of theta and you may 2648 01:36:11,920 --> 01:36:15,840 be wondering why i have a different sine 2649 01:36:13,600 --> 01:36:16,960 theta and closely on different lines and 2650 01:36:15,840 --> 01:36:18,480 to put it 2651 01:36:16,960 --> 01:36:20,320 moral assembly 2652 01:36:18,480 --> 01:36:22,159 that's basically a 90 degree rotation 2653 01:36:20,320 --> 01:36:24,400 because if you're looking straight down 2654 01:36:22,159 --> 01:36:25,679 a square is always supposed to have a 2655 01:36:24,400 --> 01:36:27,360 right angle 2656 01:36:25,679 --> 01:36:30,080 and i wanted to guarantee you that but 2657 01:36:27,360 --> 01:36:32,639 you might also be thinking well 2658 01:36:30,080 --> 01:36:34,719 what's this other cause and sign 2659 01:36:32,639 --> 01:36:35,760 and that 2660 01:36:34,719 --> 01:36:37,920 is 2661 01:36:35,760 --> 01:36:39,760 the vertical angle so if you're looking 2662 01:36:37,920 --> 01:36:43,040 at something from the side something 2663 01:36:39,760 --> 01:36:44,560 horizontal as you get closer to 90 2664 01:36:43,040 --> 01:36:47,119 degrees you don't see it at all it 2665 01:36:44,560 --> 01:36:49,520 becomes invisible it goes to zero much 2666 01:36:47,119 --> 01:36:52,080 like how cos of any angle goes to zero 2667 01:36:49,520 --> 01:36:55,440 at ninety degrees and similarly for your 2668 01:36:52,080 --> 01:36:56,800 real z times sine of alpha 2669 01:36:55,440 --> 01:36:58,480 it's much the same as you look from 2670 01:36:56,800 --> 01:37:01,440 directly above 2671 01:36:58,480 --> 01:37:05,040 well as you approach zero 2672 01:37:01,440 --> 01:37:07,679 goes to zero which is why you have sine 2673 01:37:05,040 --> 01:37:09,360 so thank you very much all for listening 2674 01:37:07,679 --> 01:37:11,119 i'll be in the comments if you have any 2675 01:37:09,360 --> 01:37:12,960 questions and thank you all to my family 2676 01:37:11,119 --> 01:37:13,760 my amazing teachers miss hogan and mr 2677 01:37:12,960 --> 01:37:16,719 till 2678 01:37:13,760 --> 01:37:17,679 and i'll see you all soon 2679 01:37:16,719 --> 01:37:19,679 thank you 2680 01:37:17,679 --> 01:37:21,679 very much for listening and have a great 2681 01:37:19,679 --> 01:37:23,600 python 2682 01:37:21,679 --> 01:37:25,920 see you around 2683 01:37:23,600 --> 01:37:28,719 fantastic thanks so much 2684 01:37:25,920 --> 01:37:30,639 now bella is our next speaker and she is 2685 01:37:28,719 --> 01:37:32,880 a repeat offender on the student 2686 01:37:30,639 --> 01:37:35,360 showcase lineup this year we'll be 2687 01:37:32,880 --> 01:37:37,440 hearing about tweet aware using ai to 2688 01:37:35,360 --> 01:37:38,960 deconstruct your twitter timeline 2689 01:37:37,440 --> 01:37:40,880 when i asked bella how long she'd been 2690 01:37:38,960 --> 01:37:43,840 programming she replied nine years in 2691 01:37:40,880 --> 01:37:46,239 total but six years properly 2692 01:37:43,840 --> 01:37:48,560 i'm not sure what designates proper 2693 01:37:46,239 --> 01:37:51,840 programming i assume from improper 2694 01:37:48,560 --> 01:37:53,280 programming but maybe i'll learn one day 2695 01:37:51,840 --> 01:37:56,159 when i asked bella what her favorite 2696 01:37:53,280 --> 01:37:58,560 emoji is she said heart's face which is 2697 01:37:56,159 --> 01:38:00,080 definitely something i can get behind 2698 01:37:58,560 --> 01:38:03,119 when i asked what she's learned recently 2699 01:38:00,080 --> 01:38:05,679 about computing she replied that almost 2700 01:38:03,119 --> 01:38:08,880 90 percent of the world's currency only 2701 01:38:05,679 --> 01:38:11,280 exists on computers so our physical cash 2702 01:38:08,880 --> 01:38:13,199 reserves are only 10 2703 01:38:11,280 --> 01:38:15,199 that's really interesting and i'm really 2704 01:38:13,199 --> 01:38:17,360 interested to hear her talk 2705 01:38:15,199 --> 01:38:18,880 hi my name's bella ryan i'm a year 12 2706 01:38:17,360 --> 01:38:20,560 student at roseville college i'm here 2707 01:38:18,880 --> 01:38:22,239 today to talk about my software design 2708 01:38:20,560 --> 01:38:24,880 development major project 2709 01:38:22,239 --> 01:38:26,960 tweet aware which is a python program 2710 01:38:24,880 --> 01:38:29,280 that uses the twitter 2711 01:38:26,960 --> 01:38:31,119 api to conduct sentiment analysis 2712 01:38:29,280 --> 01:38:34,000 funding users twitter feed 2713 01:38:31,119 --> 01:38:36,880 a bit of background to the project the 2714 01:38:34,000 --> 01:38:39,840 whole idea of this project was to find 2715 01:38:36,880 --> 01:38:41,679 a system either manual or automated 2716 01:38:39,840 --> 01:38:45,840 and find a way that you can 2717 01:38:41,679 --> 01:38:47,760 significantly improve the system so 2718 01:38:45,840 --> 01:38:49,360 when it comes to twitter it's not that i 2719 01:38:47,760 --> 01:38:51,520 necessarily found a problem with it it's 2720 01:38:49,360 --> 01:38:54,080 more like an opportunity as we 2721 01:38:51,520 --> 01:38:56,159 increasingly use social media 2722 01:38:54,080 --> 01:38:58,080 to connect with people as it becomes 2723 01:38:56,159 --> 01:39:00,239 more integral in our lives in terms of 2724 01:38:58,080 --> 01:39:03,360 education as well reflection and 2725 01:39:00,239 --> 01:39:05,920 analysis of what we are taking on 2726 01:39:03,360 --> 01:39:10,000 using these platforms becomes more and 2727 01:39:05,920 --> 01:39:11,520 more important uh in 2021 there are 192 2728 01:39:10,000 --> 01:39:13,840 million people actively using twitter in 2729 01:39:11,520 --> 01:39:15,440 the world and out of that user base 500 2730 01:39:13,840 --> 01:39:17,080 million tweets are posted every day 2731 01:39:15,440 --> 01:39:19,920 which is approximately 2732 01:39:17,080 --> 01:39:21,119 5787 tweets per second 2733 01:39:19,920 --> 01:39:22,800 so 2734 01:39:21,119 --> 01:39:24,560 the whole idea is that for each one of 2735 01:39:22,800 --> 01:39:26,400 those tweets there's at least one person 2736 01:39:24,560 --> 01:39:28,480 who's taking on the information 2737 01:39:26,400 --> 01:39:30,000 so how can i 2738 01:39:28,480 --> 01:39:30,719 improve twitter 2739 01:39:30,000 --> 01:39:33,280 to 2740 01:39:30,719 --> 01:39:34,719 give you a better idea of all right this 2741 01:39:33,280 --> 01:39:37,760 is what i'm taking on in terms of the 2742 01:39:34,719 --> 01:39:40,000 idea but reflect on whether 2743 01:39:37,760 --> 01:39:41,679 the way that that idea is put across is 2744 01:39:40,000 --> 01:39:43,679 positive negative or neutral so that you 2745 01:39:41,679 --> 01:39:45,840 can further reflect on how that might 2746 01:39:43,679 --> 01:39:48,639 impact 2747 01:39:45,840 --> 01:39:49,600 other aspects of the information 2748 01:39:48,639 --> 01:39:51,760 so 2749 01:39:49,600 --> 01:39:54,560 first off i started just using the web 2750 01:39:51,760 --> 01:39:57,360 documentation between development uh and 2751 01:39:54,560 --> 01:39:58,800 i found a get request and it was a get 2752 01:39:57,360 --> 01:40:00,320 request for user's timeline i was super 2753 01:39:58,800 --> 01:40:02,320 keen i was like yes this is exactly what 2754 01:40:00,320 --> 01:40:04,639 i'm looking for ran it through with all 2755 01:40:02,320 --> 01:40:06,639 my bearer authentication all of that 2756 01:40:04,639 --> 01:40:09,119 and i got this i was like sweet tweet 2757 01:40:06,639 --> 01:40:11,119 text it's working this is amazing 2758 01:40:09,119 --> 01:40:12,480 uh then when i went across to the 2759 01:40:11,119 --> 01:40:14,480 account that i used it on which was 2760 01:40:12,480 --> 01:40:16,239 twitterdev i realized that what i was 2761 01:40:14,480 --> 01:40:17,760 actually getting was 2762 01:40:16,239 --> 01:40:18,800 all of their tweets read tweets and 2763 01:40:17,760 --> 01:40:21,440 comments 2764 01:40:18,800 --> 01:40:23,840 so twitter the twitter api doesn't 2765 01:40:21,440 --> 01:40:25,600 actually support you 2766 01:40:23,840 --> 01:40:27,840 just putting in someone's handle and 2767 01:40:25,600 --> 01:40:30,239 then being able to get the feed as they 2768 01:40:27,840 --> 01:40:33,040 see it so i had to recreate 2769 01:40:30,239 --> 01:40:35,119 it and instead model the feed 2770 01:40:33,040 --> 01:40:37,119 uh this is one i used onto postman which 2771 01:40:35,119 --> 01:40:38,800 is an absolutely fabulous 2772 01:40:37,119 --> 01:40:40,560 program to use if you're trying to 2773 01:40:38,800 --> 01:40:42,639 figure out how to use an api especially 2774 01:40:40,560 --> 01:40:44,639 if the people who developed the api have 2775 01:40:42,639 --> 01:40:47,679 created a dashboard like this 2776 01:40:44,639 --> 01:40:50,239 um using that i was able to figure out 2777 01:40:47,679 --> 01:40:52,239 the order of apis i'd need to use to 2778 01:40:50,239 --> 01:40:53,760 recreate someone's feed 2779 01:40:52,239 --> 01:40:55,280 so to do this 2780 01:40:53,760 --> 01:40:57,679 i take on 2781 01:40:55,280 --> 01:40:59,440 someone's i take in input from the user 2782 01:40:57,679 --> 01:41:01,920 which is their handle which i then send 2783 01:40:59,440 --> 01:41:03,679 to the api and i get back their user id 2784 01:41:01,920 --> 01:41:05,760 which i then send to the api again to 2785 01:41:03,679 --> 01:41:06,639 get a list of every um user that they 2786 01:41:05,760 --> 01:41:07,600 follow 2787 01:41:06,639 --> 01:41:09,920 i 2788 01:41:07,600 --> 01:41:11,840 send a request for every single user on 2789 01:41:09,920 --> 01:41:14,320 that list to get all their ids and then 2790 01:41:11,840 --> 01:41:15,360 i use the timeline request that i showed 2791 01:41:14,320 --> 01:41:16,159 earlier 2792 01:41:15,360 --> 01:41:19,440 to 2793 01:41:16,159 --> 01:41:21,679 get their um five most recent tweets 2794 01:41:19,440 --> 01:41:24,880 from their account obviously that poses 2795 01:41:21,679 --> 01:41:26,639 floor floors with the model of how i'm 2796 01:41:24,880 --> 01:41:28,000 recreating people's feeds because if 2797 01:41:26,639 --> 01:41:29,360 you've got someone who does two tweets 2798 01:41:28,000 --> 01:41:31,040 in their lifetime versus say a 2799 01:41:29,360 --> 01:41:33,199 journalist who does two tweets every 2800 01:41:31,040 --> 01:41:34,239 five minutes uh 2801 01:41:33,199 --> 01:41:37,040 their 2802 01:41:34,239 --> 01:41:39,679 representation in the data 2803 01:41:37,040 --> 01:41:42,000 is not is skewed in a way that's not 2804 01:41:39,679 --> 01:41:46,159 represented representative of an actual 2805 01:41:42,000 --> 01:41:47,679 feed which is why it's a model um i then 2806 01:41:46,159 --> 01:41:48,880 send it through 2807 01:41:47,679 --> 01:41:51,040 a 2808 01:41:48,880 --> 01:41:54,159 scrubbing program that takes out things 2809 01:41:51,040 --> 01:41:56,159 like new lines and other html css 2810 01:41:54,159 --> 01:41:58,960 elements that sometimes come through in 2811 01:41:56,159 --> 01:42:01,119 the tweet text that are fantastic for 2812 01:41:58,960 --> 01:42:03,360 displaying it on twitter but not very 2813 01:42:01,119 --> 01:42:06,159 useful for the purpose 2814 01:42:03,360 --> 01:42:07,760 of sentiment analysis 2815 01:42:06,159 --> 01:42:09,600 next i send it through the sentiment 2816 01:42:07,760 --> 01:42:11,840 analysis algorithm 2817 01:42:09,600 --> 01:42:15,920 for this i use text blob 2818 01:42:11,840 --> 01:42:17,280 and so i have a list of all of the um 2819 01:42:15,920 --> 01:42:19,920 clean tweets 2820 01:42:17,280 --> 01:42:22,560 and i send each tweet through 2821 01:42:19,920 --> 01:42:24,560 text blog which then i use the sentiment 2822 01:42:22,560 --> 01:42:25,520 polarity function 2823 01:42:24,560 --> 01:42:27,679 to 2824 01:42:25,520 --> 01:42:29,600 um give them h a value of either 2825 01:42:27,679 --> 01:42:31,679 positive mutual or negative 2826 01:42:29,600 --> 01:42:33,199 and then when they're outputted from 2827 01:42:31,679 --> 01:42:35,440 that function 2828 01:42:33,199 --> 01:42:37,760 uh they're all input into a dictionary 2829 01:42:35,440 --> 01:42:40,000 where the key is the tweet itself and 2830 01:42:37,760 --> 01:42:43,199 then the value is the 2831 01:42:40,000 --> 01:42:44,080 sentiment of positive mutual or negative 2832 01:42:43,199 --> 01:42:47,119 um 2833 01:42:44,080 --> 01:42:49,520 next is output so i have three kinds of 2834 01:42:47,119 --> 01:42:54,159 output for this project i had a 2835 01:42:49,520 --> 01:42:56,000 txt file that had the percentages 2836 01:42:54,159 --> 01:42:58,800 of positive negative and neutral within 2837 01:42:56,000 --> 01:43:01,760 the data set i had a 2838 01:42:58,800 --> 01:43:03,600 png which is the pie graph that you see 2839 01:43:01,760 --> 01:43:04,800 there of again positive negative and 2840 01:43:03,600 --> 01:43:08,840 neutral 2841 01:43:04,800 --> 01:43:12,800 and then i also had output within 2842 01:43:08,840 --> 01:43:13,920 the command line interface which was the 2843 01:43:12,800 --> 01:43:15,600 five 2844 01:43:13,920 --> 01:43:17,199 the first five in each list of positive 2845 01:43:15,600 --> 01:43:20,560 and negative tweets 2846 01:43:17,199 --> 01:43:23,600 um for the user to look at each time 2847 01:43:20,560 --> 01:43:24,400 they run the program for each handle 2848 01:43:23,600 --> 01:43:27,840 uh 2849 01:43:24,400 --> 01:43:29,600 from this you i decided to 2850 01:43:27,840 --> 01:43:30,480 run again with a real world example of 2851 01:43:29,600 --> 01:43:33,119 how 2852 01:43:30,480 --> 01:43:35,840 this program could be taken a little bit 2853 01:43:33,119 --> 01:43:38,239 further so as we're in lockdown now 2854 01:43:35,840 --> 01:43:40,320 a lot of us are receiving news through 2855 01:43:38,239 --> 01:43:42,159 social media whether 2856 01:43:40,320 --> 01:43:44,800 it's the um 2857 01:43:42,159 --> 01:43:46,560 11am livestream on facebook 2858 01:43:44,800 --> 01:43:48,239 or it's the little 2859 01:43:46,560 --> 01:43:49,840 uh little bits that have had through 2860 01:43:48,239 --> 01:43:53,360 instagram or twitter in forms of 2861 01:43:49,840 --> 01:43:55,760 infographics and so on so using my 2862 01:43:53,360 --> 01:43:58,560 testing twitter account i followed a 2863 01:43:55,760 --> 01:44:03,040 bunch of australian 2864 01:43:58,560 --> 01:44:05,920 news platforms and then ran them through 2865 01:44:03,040 --> 01:44:08,080 and got the outfit of five most recent 2866 01:44:05,920 --> 01:44:10,800 positive tweets negative tweets tweet 2867 01:44:08,080 --> 01:44:12,560 percentages and then the paragraph 2868 01:44:10,800 --> 01:44:13,360 um 2869 01:44:12,560 --> 01:44:15,199 which 2870 01:44:13,360 --> 01:44:16,719 i think reflects 2871 01:44:15,199 --> 01:44:17,920 the next step before i want this project 2872 01:44:16,719 --> 01:44:18,840 to go 2873 01:44:17,920 --> 01:44:21,920 which 2874 01:44:18,840 --> 01:44:21,920 is uh 2875 01:44:22,159 --> 01:44:25,600 more 2876 01:44:23,040 --> 01:44:28,639 more kind of data visualization so word 2877 01:44:25,600 --> 01:44:30,880 clouds um 2878 01:44:28,639 --> 01:44:34,719 and things like that looking at 2879 01:44:30,880 --> 01:44:36,239 data historically so month to month what 2880 01:44:34,719 --> 01:44:38,880 sentiment scores you're getting through 2881 01:44:36,239 --> 01:44:40,880 your feed and also going back to the 2882 01:44:38,880 --> 01:44:42,239 original plan for my project which was 2883 01:44:40,880 --> 01:44:44,480 to have 2884 01:44:42,239 --> 01:44:47,040 live sentiment analysis on the feed 2885 01:44:44,480 --> 01:44:48,800 itself i think i could achieve that that 2886 01:44:47,040 --> 01:44:49,679 would be really awesome 2887 01:44:48,800 --> 01:44:51,600 uh 2888 01:44:49,679 --> 01:44:53,440 yeah so thank you for listening to my 2889 01:44:51,600 --> 01:44:55,679 presentation i guess the main takeaway 2890 01:44:53,440 --> 01:44:57,760 that i want from this is when you're 2891 01:44:55,679 --> 01:44:59,440 given the chance to do a project in 2892 01:44:57,760 --> 01:45:00,639 school pick something that you love and 2893 01:44:59,440 --> 01:45:02,400 pick something that you can keep on 2894 01:45:00,639 --> 01:45:04,320 working on because 2895 01:45:02,400 --> 01:45:06,880 during the hard knock times of the 2896 01:45:04,320 --> 01:45:08,880 project itself it kind of prompts you to 2897 01:45:06,880 --> 01:45:10,719 actually continue working on the project 2898 01:45:08,880 --> 01:45:12,400 but afterwards it gives you a fantastic 2899 01:45:10,719 --> 01:45:13,440 springboard to jump off into your next 2900 01:45:12,400 --> 01:45:15,040 project 2901 01:45:13,440 --> 01:45:17,520 thank you so much 2902 01:45:15,040 --> 01:45:19,600 now our final speaker today is menindra 2903 01:45:17,520 --> 01:45:21,840 who'll be talking about de-blurring with 2904 01:45:19,600 --> 01:45:22,960 deep learning which is perhaps more of a 2905 01:45:21,840 --> 01:45:24,800 tongue twister than i should have 2906 01:45:22,960 --> 01:45:26,719 finished today on 2907 01:45:24,800 --> 01:45:29,440 menindra has been programming for three 2908 01:45:26,719 --> 01:45:31,760 years and his favorite emoji is the dead 2909 01:45:29,440 --> 01:45:34,320 face emoji specifically he said he 2910 01:45:31,760 --> 01:45:36,320 thinks it's quite funny 2911 01:45:34,320 --> 01:45:37,679 when i asked what recent topic of 2912 01:45:36,320 --> 01:45:40,159 computer science he's been learning 2913 01:45:37,679 --> 01:45:42,080 about he said machine learning deep 2914 01:45:40,159 --> 01:45:44,639 learning and specifically supervised 2915 01:45:42,080 --> 01:45:47,679 learning with neural networks and i'm 2916 01:45:44,639 --> 01:45:50,400 really excited to hear his talk 2917 01:45:47,679 --> 01:45:52,080 hello pycon my name is melinda de mel 2918 01:45:50,400 --> 01:45:54,639 and i'd like to present my project d 2919 01:45:52,080 --> 01:45:56,080 blurring with deep learning 2920 01:45:54,639 --> 01:45:57,920 so i first began the year writing a 2921 01:45:56,080 --> 01:45:59,280 report on back propagation and the 2922 01:45:57,920 --> 01:46:01,199 report presents an intuitive and 2923 01:45:59,280 --> 01:46:03,920 comprehensive analysis on the algorithm 2924 01:46:01,199 --> 01:46:05,360 it was a lot of fun to write 2925 01:46:03,920 --> 01:46:06,480 so i then wanted to extend my newly 2926 01:46:05,360 --> 01:46:09,280 found knowledge under a couple of 2927 01:46:06,480 --> 01:46:11,440 project ideas so i thought of q learning 2928 01:46:09,280 --> 01:46:13,280 the genetic algorithm neat machine 2929 01:46:11,440 --> 01:46:14,400 learning with robotics quantum machine 2930 01:46:13,280 --> 01:46:16,400 learning 2931 01:46:14,400 --> 01:46:18,239 i thought of fluid simulation binary 2932 01:46:16,400 --> 01:46:20,000 systems 2933 01:46:18,239 --> 01:46:22,080 but then i realized that all of these 2934 01:46:20,000 --> 01:46:23,920 ideas were kind of irrelevant to bad 2935 01:46:22,080 --> 01:46:25,119 propagation and out of scope for my 2936 01:46:23,920 --> 01:46:27,360 project 2937 01:46:25,119 --> 01:46:28,880 so i then moved on to computer vision 2938 01:46:27,360 --> 01:46:30,239 and of computer vision i chose image 2939 01:46:28,880 --> 01:46:31,679 restoration 2940 01:46:30,239 --> 01:46:33,520 i chose it mainly because it was 2941 01:46:31,679 --> 01:46:34,800 relevant to back propagation and 2942 01:46:33,520 --> 01:46:36,480 actually initially i was going to 2943 01:46:34,800 --> 01:46:38,560 restore color into black and white 2944 01:46:36,480 --> 01:46:40,480 images but then i realized this is kind 2945 01:46:38,560 --> 01:46:43,040 of deprecated because no one takes like 2946 01:46:40,480 --> 01:46:44,480 on my photos these days so i then moved 2947 01:46:43,040 --> 01:46:46,239 on to deep blurring and i realized it's 2948 01:46:44,480 --> 01:46:48,400 more relevant because people do take 2949 01:46:46,239 --> 01:46:50,239 blurred photos these days and there 2950 01:46:48,400 --> 01:46:52,880 aren't many implementations or solutions 2951 01:46:50,239 --> 01:46:54,800 out there to resolve this 2952 01:46:52,880 --> 01:46:57,280 i'll now go through a brief overview of 2953 01:46:54,800 --> 01:46:59,199 how deep learning works so first we have 2954 01:46:57,280 --> 01:47:01,280 neural networks and neural networks are 2955 01:46:59,199 --> 01:47:02,719 modeled off of the human brain where we 2956 01:47:01,280 --> 01:47:04,639 can think of our brain as a bunch of 2957 01:47:02,719 --> 01:47:06,480 neurons uh connected to other neurons 2958 01:47:04,639 --> 01:47:08,639 through axioms 2959 01:47:06,480 --> 01:47:11,040 and similarly in neural networks we have 2960 01:47:08,639 --> 01:47:12,880 layers of neurons uh they're connected 2961 01:47:11,040 --> 01:47:14,560 to other layers of neurons with 2962 01:47:12,880 --> 01:47:16,719 weights where the blue ones are positive 2963 01:47:14,560 --> 01:47:19,920 and the red ones are negative and they 2964 01:47:16,719 --> 01:47:22,239 all affect each other accordingly 2965 01:47:19,920 --> 01:47:24,480 we also have biases which are associated 2966 01:47:22,239 --> 01:47:26,639 with each neuron and they just help with 2967 01:47:24,480 --> 01:47:28,159 the training process 2968 01:47:26,639 --> 01:47:30,400 so here's what a neuron might look like 2969 01:47:28,159 --> 01:47:33,760 we have the weights the bias the 2970 01:47:30,400 --> 01:47:35,040 activation and the way to calculate it 2971 01:47:33,760 --> 01:47:37,119 and here's what the network might look 2972 01:47:35,040 --> 01:47:39,520 like we have the layers 2973 01:47:37,119 --> 01:47:42,000 and the layer sizes and we also have a 2974 01:47:39,520 --> 01:47:46,000 way to generate the initial uh 2975 01:47:42,000 --> 01:47:46,000 rates connecting layers together 2976 01:47:46,480 --> 01:47:50,719 for propagation uh 2977 01:47:48,159 --> 01:47:53,840 for progression simply put it's just 2978 01:47:50,719 --> 01:47:56,159 taking an input and then applying the 2979 01:47:53,840 --> 01:47:58,480 weights and biases from each layer and 2980 01:47:56,159 --> 01:48:00,480 then passing it through the network uh 2981 01:47:58,480 --> 01:48:01,360 in real life this could be compared to 2982 01:48:00,480 --> 01:48:03,600 um 2983 01:48:01,360 --> 01:48:06,000 taking an input from our environment our 2984 01:48:03,600 --> 01:48:08,800 brain processing it and giving us an 2985 01:48:06,000 --> 01:48:10,639 up an output 2986 01:48:08,800 --> 01:48:12,400 so initially for a neural network this 2987 01:48:10,639 --> 01:48:14,480 causes high error between the expected 2988 01:48:12,400 --> 01:48:16,560 output and the network's output 2989 01:48:14,480 --> 01:48:19,520 but once it's been trained um 2990 01:48:16,560 --> 01:48:21,280 it's actually what's used to predict uh 2991 01:48:19,520 --> 01:48:23,679 non-blood images in my case or the 2992 01:48:21,280 --> 01:48:23,679 answer 2993 01:48:24,239 --> 01:48:27,679 uh for propagation 2994 01:48:25,920 --> 01:48:30,800 uh this is what it would look like in 2995 01:48:27,679 --> 01:48:32,320 code so we have um we go through each 2996 01:48:30,800 --> 01:48:35,119 layer and we go through each node in the 2997 01:48:32,320 --> 01:48:36,960 layer and we pass it the previous layer 2998 01:48:35,119 --> 01:48:39,280 and then we 2999 01:48:36,960 --> 01:48:40,639 calculate uh all the weights and all the 3000 01:48:39,280 --> 01:48:42,639 activations from the previous layer and 3001 01:48:40,639 --> 01:48:43,360 we find an activation for that node in 3002 01:48:42,639 --> 01:48:44,840 the 3003 01:48:43,360 --> 01:48:47,280 next 3004 01:48:44,840 --> 01:48:50,239 layer so this is what the network might 3005 01:48:47,280 --> 01:48:52,880 look like so we could uh take the input 3006 01:48:50,239 --> 01:48:54,159 uh we pass it to uh the processing layer 3007 01:48:52,880 --> 01:48:56,000 or the hidden layer and get an 3008 01:48:54,159 --> 01:48:57,760 activation and then from this we pass 3009 01:48:56,000 --> 01:48:59,199 through the next layer the output and we 3010 01:48:57,760 --> 01:49:01,600 get activations for all these 3011 01:48:59,199 --> 01:49:03,600 accordingly 3012 01:49:01,600 --> 01:49:05,679 uh back propagation so back propagation 3013 01:49:03,600 --> 01:49:07,199 really is the focus of my algorithm it's 3014 01:49:05,679 --> 01:49:09,440 like the 3015 01:49:07,199 --> 01:49:11,600 heart of the algorithm where without it 3016 01:49:09,440 --> 01:49:13,760 it won't be able to function uh the 3017 01:49:11,600 --> 01:49:15,679 structure of 3018 01:49:13,760 --> 01:49:17,040 the new network itself uh would 3019 01:49:15,679 --> 01:49:18,639 effectively be useless without back 3020 01:49:17,040 --> 01:49:20,080 propagation because you won't be able to 3021 01:49:18,639 --> 01:49:20,960 learn 3022 01:49:20,080 --> 01:49:22,880 so 3023 01:49:20,960 --> 01:49:24,560 here's the mathematics for it so 3024 01:49:22,880 --> 01:49:25,920 i don't want to read any of it but 3025 01:49:24,560 --> 01:49:27,199 this is for my report and i just want 3026 01:49:25,920 --> 01:49:30,080 you to acknowledge it was a lot of fun 3027 01:49:27,199 --> 01:49:31,760 to learn about read about and write 3028 01:49:30,080 --> 01:49:33,599 about and essentially what we're going 3029 01:49:31,760 --> 01:49:36,320 to take is this 3030 01:49:33,599 --> 01:49:37,360 derivative or 3031 01:49:36,320 --> 01:49:38,800 equation 3032 01:49:37,360 --> 01:49:40,320 per se so 3033 01:49:38,800 --> 01:49:43,119 you want to find the rate of change of 3034 01:49:40,320 --> 01:49:46,800 the cost with respect to each weight and 3035 01:49:43,119 --> 01:49:49,280 bias of the network so the cost is the 3036 01:49:46,800 --> 01:49:51,599 overall error of the network it's the 3037 01:49:49,280 --> 01:49:53,599 network's output and the expected output 3038 01:49:51,599 --> 01:49:56,400 and the difference and basically we want 3039 01:49:53,599 --> 01:49:58,320 to minimize this to make the network get 3040 01:49:56,400 --> 01:49:59,920 the expected output 3041 01:49:58,320 --> 01:50:02,159 and so effectively what do we apply the 3042 01:49:59,920 --> 01:50:04,080 chain rule to each meter as major aspect 3043 01:50:02,159 --> 01:50:05,360 of the 3044 01:50:04,080 --> 01:50:08,239 new network 3045 01:50:05,360 --> 01:50:08,239 and then we 3046 01:50:08,320 --> 01:50:13,040 find how each rate and bias 3047 01:50:10,560 --> 01:50:14,719 affect the overall cost and we can see 3048 01:50:13,040 --> 01:50:16,960 these how this is written in the code so 3049 01:50:14,719 --> 01:50:17,920 we have these highlighted boxes and you 3050 01:50:16,960 --> 01:50:19,599 can see 3051 01:50:17,920 --> 01:50:20,960 the yellow blocks we take the overall 3052 01:50:19,599 --> 01:50:23,920 cost respect to the output of the 3053 01:50:20,960 --> 01:50:26,000 network in the blue box we take the 3054 01:50:23,920 --> 01:50:27,599 output layer with respect to all the 3055 01:50:26,000 --> 01:50:30,320 previous layers 3056 01:50:27,599 --> 01:50:32,400 and then for each neuron in the previous 3057 01:50:30,320 --> 01:50:34,960 layers we take the uh neuron with 3058 01:50:32,400 --> 01:50:37,199 respect to each mate and bias and we get 3059 01:50:34,960 --> 01:50:39,679 the each uh each weight and biases error 3060 01:50:37,199 --> 01:50:40,800 on the overall cost 3061 01:50:39,679 --> 01:50:42,239 and so this is what it might look like 3062 01:50:40,800 --> 01:50:44,800 so we have 3063 01:50:42,239 --> 01:50:46,960 the input and then these numbers are the 3064 01:50:44,800 --> 01:50:48,639 effect on the overall cost so this 3065 01:50:46,960 --> 01:50:50,800 neuron here has negative effect on the 3066 01:50:48,639 --> 01:50:52,800 overall cost and then this neuron has a 3067 01:50:50,800 --> 01:50:54,080 positive effect on your overall cost and 3068 01:50:52,800 --> 01:50:56,320 basically you want to make these as 3069 01:50:54,080 --> 01:50:59,040 close as possible to zero so we get the 3070 01:50:56,320 --> 01:51:00,960 expected output 3071 01:50:59,040 --> 01:51:03,360 and so once we have these errors and 3072 01:51:00,960 --> 01:51:04,320 these costs for each neuron 3073 01:51:03,360 --> 01:51:05,760 we can 3074 01:51:04,320 --> 01:51:07,360 affect the 3075 01:51:05,760 --> 01:51:09,920 rates and biases accordingly by 3076 01:51:07,360 --> 01:51:12,639 increasing them up or down to reduce 3077 01:51:09,920 --> 01:51:12,639 this cost 3078 01:51:12,800 --> 01:51:16,560 and so once the network has been trained 3079 01:51:14,480 --> 01:51:17,760 we can then um 3080 01:51:16,560 --> 01:51:20,239 save the 3081 01:51:17,760 --> 01:51:22,480 the parameters or the weights and biases 3082 01:51:20,239 --> 01:51:24,560 and then we can use forward propagation 3083 01:51:22,480 --> 01:51:26,080 to simply pass an input and get a 3084 01:51:24,560 --> 01:51:27,760 predicted output which hopefully is 3085 01:51:26,080 --> 01:51:29,760 really accurate 3086 01:51:27,760 --> 01:51:31,360 so here's some training data so we have 3087 01:51:29,760 --> 01:51:34,400 here we have the error or the cost on 3088 01:51:31,360 --> 01:51:37,040 the y-axis and we have the iterations uh 3089 01:51:34,400 --> 01:51:38,400 the training process and we can see we 3090 01:51:37,040 --> 01:51:40,480 want to minimize this cost and it's 3091 01:51:38,400 --> 01:51:41,599 doing this but it's still relatively 3092 01:51:40,480 --> 01:51:44,239 high 3093 01:51:41,599 --> 01:51:46,400 and you can see in this one as well 3094 01:51:44,239 --> 01:51:49,360 it goes down but it's still like above 3095 01:51:46,400 --> 01:51:51,840 20 and this is quite bad and you can see 3096 01:51:49,360 --> 01:51:54,480 the result of this as well so 3097 01:51:51,840 --> 01:51:56,639 we have our blood image we have our 3098 01:51:54,480 --> 01:51:59,920 sharpen image and then we have 3099 01:51:56,639 --> 01:52:02,080 uh an output so this is a complete mess 3100 01:51:59,920 --> 01:52:03,199 it's completely unrecognizable from the 3101 01:52:02,080 --> 01:52:05,840 other two 3102 01:52:03,199 --> 01:52:07,119 and so i figured that maybe these images 3103 01:52:05,840 --> 01:52:09,520 were too big 3104 01:52:07,119 --> 01:52:10,960 their dimensions were like 500 by 637 3105 01:52:09,520 --> 01:52:12,639 pixels which is a lot of weights of 3106 01:52:10,960 --> 01:52:15,119 biases to compute 3107 01:52:12,639 --> 01:52:17,280 so i moved to a smaller data set and i 3108 01:52:15,119 --> 01:52:19,520 use the mnist the blurring set for 3109 01:52:17,280 --> 01:52:21,760 digits handwritten digits and we can see 3110 01:52:19,520 --> 01:52:24,000 a blurred six sharpen six 3111 01:52:21,760 --> 01:52:25,920 and the networks output which again 3112 01:52:24,000 --> 01:52:27,280 is still pretty bad but you can see that 3113 01:52:25,920 --> 01:52:30,560 like the bottom right half is being 3114 01:52:27,280 --> 01:52:32,320 sharpened which is kind of good and then 3115 01:52:30,560 --> 01:52:33,920 i realized that maybe this is due to the 3116 01:52:32,320 --> 01:52:37,199 training method so i changed from 3117 01:52:33,920 --> 01:52:39,280 stochastic going by each row 3118 01:52:37,199 --> 01:52:41,119 row by row sorry and then i just passed 3119 01:52:39,280 --> 01:52:43,760 the whole image to the network 3120 01:52:41,119 --> 01:52:46,639 and we saw that the 3121 01:52:43,760 --> 01:52:49,440 loss or the cost and the error decreased 3122 01:52:46,639 --> 01:52:51,920 very fast it went from like 200 to like 3123 01:52:49,440 --> 01:52:53,199 below 10 in like the first iteration and 3124 01:52:51,920 --> 01:52:54,639 it stayed there which is really really 3125 01:52:53,199 --> 01:52:56,480 good 3126 01:52:54,639 --> 01:52:58,080 and we can see we get some results from 3127 01:52:56,480 --> 01:53:00,480 this so we have a blurred five and a 3128 01:52:58,080 --> 01:53:02,480 sharpen five a couple of results i got 3129 01:53:00,480 --> 01:53:03,920 and these are very sharp you can see the 3130 01:53:02,480 --> 01:53:05,520 network really picked up on the edges 3131 01:53:03,920 --> 01:53:06,800 and the curves of the fives 3132 01:53:05,520 --> 01:53:08,000 you can see some more examples we have 3133 01:53:06,800 --> 01:53:10,880 blurred five 3134 01:53:08,000 --> 01:53:13,040 we have these um 3135 01:53:10,880 --> 01:53:14,719 some more fives that these are 3136 01:53:13,040 --> 01:53:16,639 some of the better ones i had especially 3137 01:53:14,719 --> 01:53:18,639 this one really got the shape of the fly 3138 01:53:16,639 --> 01:53:21,360 if not if it's actually better than the 3139 01:53:18,639 --> 01:53:24,639 answer in my opinion 3140 01:53:21,360 --> 01:53:26,639 and so now i have two demos to show my 3141 01:53:24,639 --> 01:53:28,719 project so the first demo is the 3142 01:53:26,639 --> 01:53:30,320 training process 3143 01:53:28,719 --> 01:53:32,639 so we have a video here 3144 01:53:30,320 --> 01:53:34,719 so we have the blurred seven we have the 3145 01:53:32,639 --> 01:53:36,480 sharpen seven and then we have uh the 3146 01:53:34,719 --> 01:53:38,480 network output down here and we have the 3147 01:53:36,480 --> 01:53:40,320 graph showing the error with respect to 3148 01:53:38,480 --> 01:53:42,960 each training iteration and we can see 3149 01:53:40,320 --> 01:53:45,360 as it goes it slowly 3150 01:53:42,960 --> 01:53:48,080 the error slowly decreases and slowly 3151 01:53:45,360 --> 01:53:50,000 the server uh the network finds 3152 01:53:48,080 --> 01:53:51,920 a really good seven after a couple 3153 01:53:50,000 --> 01:53:54,719 iterations 3154 01:53:51,920 --> 01:53:56,800 like that and we can see again blurred 3155 01:53:54,719 --> 01:53:58,320 sharpen and a really really good output 3156 01:53:56,800 --> 01:54:01,520 right here 3157 01:53:58,320 --> 01:54:03,840 and my second um demo is going to be in 3158 01:54:01,520 --> 01:54:05,360 a network output so we can see we have a 3159 01:54:03,840 --> 01:54:08,080 blurred four here a sharpened floor here 3160 01:54:05,360 --> 01:54:10,880 and if i just for propagate to a network 3161 01:54:08,080 --> 01:54:12,880 and pass it this blood for 3162 01:54:10,880 --> 01:54:15,360 just like so 3163 01:54:12,880 --> 01:54:16,560 and then pass it right here 3164 01:54:15,360 --> 01:54:17,520 you can see 3165 01:54:16,560 --> 01:54:19,840 boom 3166 01:54:17,520 --> 01:54:21,920 blood fall sharpen floor and then our 3167 01:54:19,840 --> 01:54:23,920 network output which again is really 3168 01:54:21,920 --> 01:54:25,119 sharp like it's almost it's actually 3169 01:54:23,920 --> 01:54:28,000 better than the 3170 01:54:25,119 --> 01:54:30,320 actual answer 3171 01:54:28,000 --> 01:54:32,560 and so now 3172 01:54:30,320 --> 01:54:32,560 um 3173 01:54:32,960 --> 01:54:38,560 we have that's our probe my project so 3174 01:54:36,639 --> 01:54:40,880 overall this project was a lot of fun to 3175 01:54:38,560 --> 01:54:42,239 write uh write the code for it was a lot 3176 01:54:40,880 --> 01:54:44,239 of fun to learn about it was a good 3177 01:54:42,239 --> 01:54:45,280 experience i had a lot of fun 3178 01:54:44,239 --> 01:54:46,560 um 3179 01:54:45,280 --> 01:54:47,679 and i recommend it to anyone out there 3180 01:54:46,560 --> 01:54:49,119 who wants to start machine learning 3181 01:54:47,679 --> 01:54:51,360 because this is my machine first machine 3182 01:54:49,119 --> 01:54:52,880 learning project and if anyone has any 3183 01:54:51,360 --> 01:54:55,040 questions about a project or how it 3184 01:54:52,880 --> 01:54:57,920 works i'll just leave it in the chat and 3185 01:54:55,040 --> 01:55:00,080 thank you for watching my presentation 3186 01:54:57,920 --> 01:55:02,239 thank you so much for joining me and 3187 01:55:00,080 --> 01:55:04,239 thank you again to our fantastic 3188 01:55:02,239 --> 01:55:06,639 speakers and i will pass it back to 3189 01:55:04,239 --> 01:55:08,560 future nikki 3190 01:55:06,639 --> 01:55:12,159 yeah absolutely 3191 01:55:08,560 --> 01:55:14,480 so uh please we want we want a really 3192 01:55:12,159 --> 01:55:17,040 big range from beginner to absolute 3193 01:55:14,480 --> 01:55:19,679 expert in student slam downs in the 3194 01:55:17,040 --> 01:55:21,599 future 3195 01:55:19,679 --> 01:55:23,840 we don't want to we want to encourage 3196 01:55:21,599 --> 01:55:26,639 people and build them up and this is a 3197 01:55:23,840 --> 01:55:30,159 fantastic way to do it yes and and thank 3198 01:55:26,639 --> 01:55:33,760 you all everyone who has been in the 3199 01:55:30,159 --> 01:55:36,480 um in the chat for showing so much um 3200 01:55:33,760 --> 01:55:39,920 love and support for these fantastic 3201 01:55:36,480 --> 01:55:41,840 students um students you're all amazing 3202 01:55:39,920 --> 01:55:43,840 i hope you knew that already but in case 3203 01:55:41,840 --> 01:55:45,199 you didn't you're amazing you've done 3204 01:55:43,840 --> 01:55:48,000 amazing stuff 3205 01:55:45,199 --> 01:55:50,560 um students who are watching this 3206 01:55:48,000 --> 01:55:52,800 recording and thinking i could never be 3207 01:55:50,560 --> 01:55:55,599 like that 3208 01:55:52,800 --> 01:55:58,000 what what do we do what what what advice 3209 01:55:55,599 --> 01:56:00,480 should we give them amanda 3210 01:55:58,000 --> 01:56:02,000 i think i think that um everybody has a 3211 01:56:00,480 --> 01:56:05,040 different take on things and that you 3212 01:56:02,000 --> 01:56:06,960 can bring something uh any student uh 3213 01:56:05,040 --> 01:56:09,440 can bring something new to this 3214 01:56:06,960 --> 01:56:11,599 conversation about uh the journey that 3215 01:56:09,440 --> 01:56:14,159 they took and the pitfalls that they had 3216 01:56:11,599 --> 01:56:15,040 and and that's encouraging to people and 3217 01:56:14,159 --> 01:56:18,000 also 3218 01:56:15,040 --> 01:56:20,159 um when you do get a little bit um you 3219 01:56:18,000 --> 01:56:23,040 know obsessed about a project in a good 3220 01:56:20,159 --> 01:56:25,520 way then you learn in a way that you 3221 01:56:23,040 --> 01:56:28,400 just don't learn otherwise i think that 3222 01:56:25,520 --> 01:56:30,880 kind of immersion is so important for 3223 01:56:28,400 --> 01:56:32,239 these projects absolutely and i should 3224 01:56:30,880 --> 01:56:36,000 say 3225 01:56:32,239 --> 01:56:38,880 we love hearing about things that didn't 3226 01:56:36,000 --> 01:56:40,800 work just as much as as we love hearing 3227 01:56:38,880 --> 01:56:42,960 about things that did work 3228 01:56:40,800 --> 01:56:45,920 because i think that's something that 3229 01:56:42,960 --> 01:56:48,560 everyone who has tried to make something 3230 01:56:45,920 --> 01:56:51,520 code or otherwise can relate to um and 3231 01:56:48,560 --> 01:56:53,599 it turns out that sharing information 3232 01:56:51,520 --> 01:56:56,480 um of what not to do 3233 01:56:53,599 --> 01:56:57,280 is really hard and really valuable 3234 01:56:56,480 --> 01:56:59,280 yeah 3235 01:56:57,280 --> 01:57:01,040 yeah yeah so if you've got a project 3236 01:56:59,280 --> 01:57:03,280 that you've been working on 3237 01:57:01,040 --> 01:57:05,280 student in the audience listening now 3238 01:57:03,280 --> 01:57:07,440 and everything went wrong and you want 3239 01:57:05,280 --> 01:57:09,280 to tell us the tale of woes 3240 01:57:07,440 --> 01:57:10,480 then you've got two options one is 3241 01:57:09,280 --> 01:57:12,080 submit it to next year's student 3242 01:57:10,480 --> 01:57:14,800 showcase or you can submit it directly 3243 01:57:12,080 --> 01:57:16,480 to the dev oops track which is another 3244 01:57:14,800 --> 01:57:19,840 track that's going on 3245 01:57:16,480 --> 01:57:20,800 um uh but but no stay with us we're cool 3246 01:57:19,840 --> 01:57:22,159 um 3247 01:57:20,800 --> 01:57:24,320 i i just 3248 01:57:22,159 --> 01:57:25,760 amazing these kids are amazing you the 3249 01:57:24,320 --> 01:57:26,639 kids are all right 3250 01:57:25,760 --> 01:57:28,639 yes 3251 01:57:26,639 --> 01:57:30,080 they are all right 3252 01:57:28,639 --> 01:57:31,280 i think we're all right i think i'm 3253 01:57:30,080 --> 01:57:33,280 mostly all right 3254 01:57:31,280 --> 01:57:35,760 thank you to all the teachers who are 3255 01:57:33,280 --> 01:57:37,840 fostering these amazing minds uh out 3256 01:57:35,760 --> 01:57:41,280 there in the world we appreciate you 3257 01:57:37,840 --> 01:57:43,119 there was a lot of love um for specific 3258 01:57:41,280 --> 01:57:44,719 teachers for teachers in general for 3259 01:57:43,119 --> 01:57:46,880 schooling a lot of people wanting a 3260 01:57:44,719 --> 01:57:49,199 refund and wanting to go back to school 3261 01:57:46,880 --> 01:57:52,000 now please i'd like to do the school 3262 01:57:49,199 --> 01:57:53,599 thing again please um i can't say i 3263 01:57:52,000 --> 01:57:55,679 blame them 3264 01:57:53,599 --> 01:57:57,520 yeah yeah 3265 01:57:55,679 --> 01:58:01,360 um teachers 3266 01:57:57,520 --> 01:58:03,840 you are all fantastic um thank you 3267 01:58:01,360 --> 01:58:05,599 so much to everyone who has joined us 3268 01:58:03,840 --> 01:58:07,199 today um 3269 01:58:05,599 --> 01:58:08,800 any last words of wisdom you have about 3270 01:58:07,199 --> 01:58:10,159 the student showcase and then we'll get 3271 01:58:08,800 --> 01:58:13,199 on to some 3272 01:58:10,159 --> 01:58:14,000 closing stuff 3273 01:58:13,199 --> 01:58:17,040 and 3274 01:58:14,000 --> 01:58:20,560 just the most important part 3275 01:58:17,040 --> 01:58:23,040 the duck dance party to get uh to get 3276 01:58:20,560 --> 01:58:24,400 students in person again next year uh 3277 01:58:23,040 --> 01:58:26,080 like i'm 3278 01:58:24,400 --> 01:58:28,239 well fingers crossed like we're going to 3279 01:58:26,080 --> 01:58:31,599 do a dance party to the 3280 01:58:28,239 --> 01:58:33,920 to the gods of of covert um because we 3281 01:58:31,599 --> 01:58:35,360 really do want we really do enjoy 3282 01:58:33,920 --> 01:58:36,800 bringing these students from different 3283 01:58:35,360 --> 01:58:39,760 parts of australia and from different 3284 01:58:36,800 --> 01:58:42,560 walks of life together uh in a sort of 3285 01:58:39,760 --> 01:58:45,119 mini network so that they can um go out 3286 01:58:42,560 --> 01:58:46,800 and and spread the word in the rest of 3287 01:58:45,119 --> 01:58:48,159 the world of their lives yeah i think 3288 01:58:46,800 --> 01:58:50,480 it's really important to get them 3289 01:58:48,159 --> 01:58:52,560 together so i really like how inclusive 3290 01:58:50,480 --> 01:58:53,760 the chat is and how the students have 3291 01:58:52,560 --> 01:58:55,440 been 3292 01:58:53,760 --> 01:58:57,840 asked questions like experts and we 3293 01:58:55,440 --> 01:58:59,920 really appreciate how supportive this 3294 01:58:57,840 --> 01:59:01,199 community is but i'm really looking 3295 01:58:59,920 --> 01:59:03,280 forward to some 3296 01:59:01,199 --> 01:59:05,040 uh face-to-face action 3297 01:59:03,280 --> 01:59:06,159 indeed indeed 3298 01:59:05,040 --> 01:59:07,360 um 3299 01:59:06,159 --> 01:59:09,360 all right 3300 01:59:07,360 --> 01:59:10,719 but don't take that as a 3301 01:59:09,360 --> 01:59:12,719 oh well i'm not sure if i could get 3302 01:59:10,719 --> 01:59:14,480 there so i won't go ahead and try and 3303 01:59:12,719 --> 01:59:15,440 build that cool thing because i don't 3304 01:59:14,480 --> 01:59:17,520 even know 3305 01:59:15,440 --> 01:59:20,480 just go and build the cool thing 3306 01:59:17,520 --> 01:59:23,199 build it anyway and tell us about it 3307 01:59:20,480 --> 01:59:25,920 yeah logistics logistics are next year's 3308 01:59:23,199 --> 01:59:28,800 problem and i please everyone go and 3309 01:59:25,920 --> 01:59:31,040 make that a really horrible challenging 3310 01:59:28,800 --> 01:59:32,159 problem for us um that would be 3311 01:59:31,040 --> 01:59:32,960 amazing 3312 01:59:32,159 --> 01:59:34,000 yeah 3313 01:59:32,960 --> 01:59:35,360 you know next year we're just going to 3314 01:59:34,000 --> 01:59:36,400 have to cancel all of our talks and the 3315 01:59:35,360 --> 01:59:38,719 whole thing is going to be student 3316 01:59:36,400 --> 01:59:40,000 showcase so it's like 3317 01:59:38,719 --> 01:59:42,150 we can't do that i learned too much 3318 01:59:40,000 --> 01:59:45,870 today i have to sit down 3319 01:59:42,150 --> 01:59:45,870 [Laughter]