1 00:00:04,960 --> 00:00:20,000 [Music] 2 00:00:21,199 --> 00:00:24,000 it's the student 3 00:00:27,640 --> 00:00:33,800 showcase I am ridiculously excited this 4 00:00:30,279 --> 00:00:35,360 is definitely the highlight of my year 5 00:00:33,800 --> 00:00:37,640 any other speakers in the room don't 6 00:00:35,360 --> 00:00:38,879 don't don't take offense okay the way 7 00:00:37,640 --> 00:00:41,200 this works we've got a whole bunch of 8 00:00:38,879 --> 00:00:45,440 awesome speakers they're all students 9 00:00:41,200 --> 00:00:50,239 from all across Australia but also local 10 00:00:45,440 --> 00:00:56,879 um we have nine speakers presenting 11 00:00:50,239 --> 00:00:56,879 seven talks 10 minutes one fire 12 00:00:57,640 --> 00:01:01,680 possible we'll find out we're putting 13 00:00:59,760 --> 00:01:03,039 them last so that everyone else gets a 14 00:01:01,680 --> 00:01:06,280 chance to talk in case we all get 15 00:01:03,039 --> 00:01:09,159 evacuated from the building so without 16 00:01:06,280 --> 00:01:13,960 further Ado fire extinguishers maybe 17 00:01:09,159 --> 00:01:16,560 talk next year um okay this is summer uh 18 00:01:13,960 --> 00:01:19,920 she has been programming since she was 19 00:01:16,560 --> 00:01:22,320 nine her favorite emoji is the Space 20 00:01:19,920 --> 00:01:25,280 Invaders 21 00:01:22,320 --> 00:01:26,799 Emoji um and something cool that you 22 00:01:25,280 --> 00:01:28,560 found out about computers recently is 23 00:01:26,799 --> 00:01:31,799 that you learned that computer viruses 24 00:01:28,560 --> 00:01:34,000 weren't originally harmful uh the 25 00:01:31,799 --> 00:01:37,240 creeper in 1971 just displayed I'm the 26 00:01:34,000 --> 00:01:40,680 creeper Catch Me If You Can cool and 27 00:01:37,240 --> 00:01:40,680 this is your talk summer thank you very 28 00:01:42,560 --> 00:01:49,799 much okay hello everyone so this is my 29 00:01:46,240 --> 00:01:52,000 ghost to got Chief first of all hi my 30 00:01:49,799 --> 00:01:54,640 name is Sumer I'm a student at Bergman 31 00:01:52,000 --> 00:01:57,079 Anin school and I'm going to go to UTS 32 00:01:54,640 --> 00:01:59,000 for cyber security next year um I've 33 00:01:57,079 --> 00:02:02,119 done work experience with Microsoft and 34 00:01:59,000 --> 00:02:04,479 examplify I've also am a part of protest 35 00:02:02,119 --> 00:02:06,920 Stars this season and last season um 36 00:02:04,479 --> 00:02:09,720 which is with Blackbird I went to ncss 37 00:02:06,920 --> 00:02:13,480 summer school in Sydney for this year 38 00:02:09,720 --> 00:02:15,800 and I recently won the wick women in ICT 39 00:02:13,480 --> 00:02:17,120 Kate M student encouragement award for 40 00:02:15,800 --> 00:02:20,120 this 41 00:02:17,120 --> 00:02:20,120 year 42 00:02:20,840 --> 00:02:26,680 wo so as an introduction the porogi is 43 00:02:24,879 --> 00:02:29,680 basically this device which was created 44 00:02:26,680 --> 00:02:31,959 by evil socket in 2019 he's a developer 45 00:02:29,680 --> 00:02:34,440 and and security researcher and was 46 00:02:31,959 --> 00:02:37,160 inspired by the popular 1990s toy the 47 00:02:34,440 --> 00:02:39,720 tomag GOI obviously first before you say 48 00:02:37,160 --> 00:02:41,360 anything porn is not a bad word it's 49 00:02:39,720 --> 00:02:43,120 what happens when you try to spell own 50 00:02:41,360 --> 00:02:44,780 but can't and it's a video game thing 51 00:02:43,120 --> 00:02:49,400 from ages ago 52 00:02:44,780 --> 00:02:52,040 [Laughter] 53 00:02:49,400 --> 00:02:55,480 apparently so it's basically a portable 54 00:02:52,040 --> 00:02:57,640 device it's AI powered um and uses used 55 00:02:55,480 --> 00:03:00,920 for Wi-Fi penetration testing it's 56 00:02:57,640 --> 00:03:03,120 operated by capturing WPA and WPA2 57 00:03:00,920 --> 00:03:04,840 handshakes from nearby networks helping 58 00:03:03,120 --> 00:03:07,440 ethical hackers identify potential 59 00:03:04,840 --> 00:03:09,040 security flaws the device stands out 60 00:03:07,440 --> 00:03:11,120 because of its userfriendly design 61 00:03:09,040 --> 00:03:13,920 portability and its interactive 62 00:03:11,120 --> 00:03:15,959 personality it not only educates users 63 00:03:13,920 --> 00:03:17,680 about cyber security but also makes 64 00:03:15,959 --> 00:03:20,280 learning processes engaging through its 65 00:03:17,680 --> 00:03:21,720 tomagotchi inspired interface it's a 66 00:03:20,280 --> 00:03:24,080 compelling tool because of what it can 67 00:03:21,720 --> 00:03:26,319 do and its interactive nature especially 68 00:03:24,080 --> 00:03:27,599 for students and cyber security 69 00:03:26,319 --> 00:03:29,439 enthusiasts 70 00:03:27,599 --> 00:03:31,120 standpoint from an educational 71 00:03:29,439 --> 00:03:33,360 standpoint point the point ofi is highly 72 00:03:31,120 --> 00:03:35,319 appropriate it simplifies complex 73 00:03:33,360 --> 00:03:37,360 security tasks making them accessible to 74 00:03:35,319 --> 00:03:39,760 beginners however its Effectiveness 75 00:03:37,360 --> 00:03:42,080 depends on user responsibility basically 76 00:03:39,760 --> 00:03:42,080 don't be 77 00:03:42,560 --> 00:03:48,519 illegal so the way it works is it uses 78 00:03:45,159 --> 00:03:50,680 AI integration um that learns optimal 79 00:03:48,519 --> 00:03:52,879 strategies from capturing WPA hand 80 00:03:50,680 --> 00:03:55,200 checks it's portable it runs on 81 00:03:52,879 --> 00:03:59,079 lightweight Hardware such as the raspber 82 00:03:55,200 --> 00:04:00,640 pi Z Wave share V4 like I used or the V3 83 00:03:59,079 --> 00:04:01,840 and a battery 84 00:04:00,640 --> 00:04:04,959 it's also interactive through its 85 00:04:01,840 --> 00:04:08,159 displays and shows emotion based 86 00:04:04,959 --> 00:04:10,879 performance here is the interface for my 87 00:04:08,159 --> 00:04:13,360 porag GOI um it's very cute as you can 88 00:04:10,879 --> 00:04:15,639 see uh the porag GOI itself is down the 89 00:04:13,360 --> 00:04:18,120 bottom and the other ones are the web 90 00:04:15,639 --> 00:04:19,560 UI but before we get more into it I just 91 00:04:18,120 --> 00:04:22,400 want to talk about the 92 00:04:19,560 --> 00:04:24,160 importance so cyber secur knowledge is 93 00:04:22,400 --> 00:04:26,360 critical in today's world for 94 00:04:24,160 --> 00:04:28,160 individuals it protects personal data 95 00:04:26,360 --> 00:04:30,360 for organizations it prevents costly 96 00:04:28,160 --> 00:04:32,639 breaches and for society it helps create 97 00:04:30,360 --> 00:04:34,759 a safer digital environment tools like 98 00:04:32,639 --> 00:04:36,880 the pornog GOI make cybercity Concepts 99 00:04:34,759 --> 00:04:38,880 accessible and relatable they Empower 100 00:04:36,880 --> 00:04:40,080 users to take control of their online 101 00:04:38,880 --> 00:04:41,880 security while highlighting the 102 00:04:40,080 --> 00:04:44,199 vulnerabilities we Face 103 00:04:41,880 --> 00:04:46,360 daily this is why learning about cyber 104 00:04:44,199 --> 00:04:48,039 security isn't just for professionals 105 00:04:46,360 --> 00:04:50,880 it's something everyone should care 106 00:04:48,039 --> 00:04:52,840 about the porag Gotti's focus on Wi-Fi 107 00:04:50,880 --> 00:04:55,080 security makes it an interesting entry 108 00:04:52,840 --> 00:04:57,120 point for cyber security education its 109 00:04:55,080 --> 00:04:58,759 Effectiveness depends on how well users 110 00:04:57,120 --> 00:05:00,160 understand and apply its lessons to a 111 00:04:58,759 --> 00:05:02,639 broader context 112 00:05:00,160 --> 00:05:09,960 some statistics there were 113 00:05:02,639 --> 00:05:09,960 2365 cyber attacks in 2023 with 343 mil 114 00:05:28,639 --> 00:05:34,280 338,000 an ethical hacking matters it 115 00:05:32,560 --> 00:05:36,280 identifies vulnerabilities and Wi-Fi 116 00:05:34,280 --> 00:05:38,720 networks raises awareness about 117 00:05:36,280 --> 00:05:41,199 protecting personal organizations and 118 00:05:38,720 --> 00:05:44,160 data encourages proactive defenses 119 00:05:41,199 --> 00:05:46,880 against cyber threats however Simplicity 120 00:05:44,160 --> 00:05:48,680 is the porag Go's double-edge sword 121 00:05:46,880 --> 00:05:51,000 while it lowers the barrier for entry 122 00:05:48,680 --> 00:05:52,960 into cyber security it also requires 123 00:05:51,000 --> 00:05:54,919 users to have a strong ethical 124 00:05:52,960 --> 00:05:56,840 foundation without proper guidance 125 00:05:54,919 --> 00:05:58,880 there's obviously a risk for 126 00:05:56,840 --> 00:06:00,199 misuse there's also learning through the 127 00:05:58,880 --> 00:06:02,319 poroi tool 128 00:06:00,199 --> 00:06:04,440 it offers a hands-on experience Bridges 129 00:06:02,319 --> 00:06:06,800 the gap between theoretical knowledge 130 00:06:04,440 --> 00:06:09,000 and practical application and teaches 131 00:06:06,800 --> 00:06:10,800 critical problem solving skills and of 132 00:06:09,000 --> 00:06:12,080 course we want to raise awareness about 133 00:06:10,800 --> 00:06:15,479 Wi-Fi 134 00:06:12,080 --> 00:06:17,280 security so my project ex itself aimed 135 00:06:15,479 --> 00:06:19,400 to build on the pondi's strengths by 136 00:06:17,280 --> 00:06:22,000 adding gamification features such as 137 00:06:19,400 --> 00:06:23,680 achievements and growth systems these 138 00:06:22,000 --> 00:06:25,520 additions would have increased user 139 00:06:23,680 --> 00:06:28,000 engagement and encourage continuous 140 00:06:25,520 --> 00:06:30,160 learning unfortunately though I fac 141 00:06:28,000 --> 00:06:32,000 significant challenges integrating the 142 00:06:30,160 --> 00:06:34,160 features into the pornog GOI special I 143 00:06:32,000 --> 00:06:35,560 code based and it proved much more 144 00:06:34,160 --> 00:06:37,400 complex than I 145 00:06:35,560 --> 00:06:39,039 anticipated while I couldn't fully 146 00:06:37,400 --> 00:06:40,880 Implement these features I gained 147 00:06:39,039 --> 00:06:41,960 valuable insight into debugging and 148 00:06:40,880 --> 00:06:44,319 software 149 00:06:41,960 --> 00:06:46,280 design this experience highlighted the 150 00:06:44,319 --> 00:06:47,639 importance of planning adaptability and 151 00:06:46,280 --> 00:06:50,000 learning from 152 00:06:47,639 --> 00:06:52,199 failure while my project didn't meet all 153 00:06:50,000 --> 00:06:54,360 its objectives it reinforced the porag 154 00:06:52,199 --> 00:06:55,680 Go's Effectiveness as a learning tool 155 00:06:54,360 --> 00:06:56,560 and I hope to eventually get these 156 00:06:55,680 --> 00:06:58,639 features 157 00:06:56,560 --> 00:07:00,440 working so going back to the actual 158 00:06:58,639 --> 00:07:02,919 pornog GOI itself 159 00:07:00,440 --> 00:07:07,039 again it's very cute but here's a 160 00:07:02,919 --> 00:07:09,120 working video so when the porag GOI says 161 00:07:07,039 --> 00:07:11,039 let's be friends it basically means it 162 00:07:09,120 --> 00:07:14,440 has detected another pornog GOI device 163 00:07:11,039 --> 00:07:16,960 nearby initiating a social interaction 164 00:07:14,440 --> 00:07:19,240 this is basically based of the porogi uh 165 00:07:16,960 --> 00:07:21,919 the tomag GOI like personality 166 00:07:19,240 --> 00:07:24,280 system the channels in the context of a 167 00:07:21,919 --> 00:07:26,199 porogi refers to the Wi-Fi 168 00:07:24,280 --> 00:07:29,199 channels sorry that audio is not 169 00:07:26,199 --> 00:07:30,840 supposed to be working anyway um it 170 00:07:29,199 --> 00:07:33,360 refers first the Wi-Fi channel is used 171 00:07:30,840 --> 00:07:34,800 by wireless networks for communication 172 00:07:33,360 --> 00:07:38,080 um the Wi-Fi channels are specific 173 00:07:34,800 --> 00:07:40,599 frequency ranges within 2.1 GHz and 5 174 00:07:38,080 --> 00:07:42,520 gahz Spectrum used by wireless devices 175 00:07:40,599 --> 00:07:46,120 to communicate the 176 00:07:42,520 --> 00:07:50,560 porogi the porogi usually stays between 177 00:07:46,120 --> 00:07:53,080 1 and 14 as those are 2.4 gahz channels 178 00:07:50,560 --> 00:07:55,039 um they also shows the number of access 179 00:07:53,080 --> 00:07:56,960 points of the top and down the bottom 180 00:07:55,039 --> 00:08:01,159 where it says pawned it is the number of 181 00:07:56,960 --> 00:08:01,159 handshakes during the current session 182 00:08:01,280 --> 00:08:04,960 so first of all I just want to say I 183 00:08:02,840 --> 00:08:07,639 struggled to get the code that I had 184 00:08:04,960 --> 00:08:10,080 made into the poroi operating 185 00:08:07,639 --> 00:08:12,319 system uh these are some of the issues 186 00:08:10,080 --> 00:08:14,159 by the way the reason I don't have the 187 00:08:12,319 --> 00:08:16,919 porag GOI up and running in front of me 188 00:08:14,159 --> 00:08:19,599 at the moment um is Du to the cord being 189 00:08:16,919 --> 00:08:20,840 very very short for the battery system 190 00:08:19,599 --> 00:08:22,440 um because my teacher believes in 191 00:08:20,840 --> 00:08:25,599 something called a budget for some 192 00:08:22,440 --> 00:08:28,680 strange reason 193 00:08:25,599 --> 00:08:33,560 boo um also the original porag GOI ran 194 00:08:28,680 --> 00:08:35,240 from wave sh uh V3 screen but I got a V4 195 00:08:33,560 --> 00:08:37,039 thinking it was the same turns out 196 00:08:35,240 --> 00:08:38,279 they're different and they're different 197 00:08:37,039 --> 00:08:41,200 enough that the libraries don't want to 198 00:08:38,279 --> 00:08:43,839 play nice anymore from this I obviously 199 00:08:41,200 --> 00:08:45,920 learned a lot I've done game development 200 00:08:43,839 --> 00:08:48,839 before and I'm used to working in Python 201 00:08:45,920 --> 00:08:51,399 however I'm not used to working in pi or 202 00:08:48,839 --> 00:08:54,040 Powershell so again it made it a bit 203 00:08:51,399 --> 00:08:56,320 hard so here's some errors as you can 204 00:08:54,040 --> 00:08:59,160 see this eror is the log page where the 205 00:08:56,320 --> 00:09:01,760 poroi would be working but not actually 206 00:08:59,160 --> 00:09:03,240 receiving handshakes um to fix this I 207 00:09:01,760 --> 00:09:05,200 basically had to reflash the whole 208 00:09:03,240 --> 00:09:08,560 system a couple hundred times when 209 00:09:05,200 --> 00:09:10,720 making this this next one was an error 210 00:09:08,560 --> 00:09:12,680 from network connection my computer had 211 00:09:10,720 --> 00:09:14,880 told me that the porag GOI was connected 212 00:09:12,680 --> 00:09:16,800 to my home network but after further 213 00:09:14,880 --> 00:09:19,079 inspection the connection was just way 214 00:09:16,800 --> 00:09:20,839 too weak for the porag GOI to run and it 215 00:09:19,079 --> 00:09:23,880 was just making cute faces not actually 216 00:09:20,839 --> 00:09:23,880 doing any handshake 217 00:09:24,600 --> 00:09:29,600 capturing and lastly we had an updating 218 00:09:27,240 --> 00:09:32,320 issue this was because the porter got 219 00:09:29,600 --> 00:09:36,720 system I was using was so it was much 220 00:09:32,320 --> 00:09:38,279 newer than the original one oh sorry um 221 00:09:36,720 --> 00:09:42,519 and the device didn't want to get the 222 00:09:38,279 --> 00:09:44,480 plugins working so it made a few weird 223 00:09:42,519 --> 00:09:46,240 errors um unfortunately I still haven't 224 00:09:44,480 --> 00:09:48,880 been able to fix this just because again 225 00:09:46,240 --> 00:09:50,959 I can't update the 226 00:09:48,880 --> 00:09:53,560 systems but what I've learned from this 227 00:09:50,959 --> 00:09:56,560 is continuous debugging and researching 228 00:09:53,560 --> 00:09:59,399 actually proved a deeper insight into um 229 00:09:56,560 --> 00:10:01,000 the poi's functionality and even failed 230 00:09:59,399 --> 00:10:02,800 projects contribute to understanding and 231 00:10:01,000 --> 00:10:05,480 skill development and I definitely 232 00:10:02,800 --> 00:10:07,279 learned a lot from this project just for 233 00:10:05,480 --> 00:10:09,200 some insight this is some of the plugins 234 00:10:07,279 --> 00:10:11,519 that I had constructed using basic 235 00:10:09,200 --> 00:10:15,480 python um and it was just a class 236 00:10:11,519 --> 00:10:18,320 structure and some defining of codes um 237 00:10:15,480 --> 00:10:18,320 this was for the 238 00:10:20,800 --> 00:10:25,680 achievements but basically to conclude 239 00:10:23,160 --> 00:10:27,040 the porogi is a small but powerful tool 240 00:10:25,680 --> 00:10:29,560 that demonstrates the importance of 241 00:10:27,040 --> 00:10:32,360 cyber security while its focus is is 242 00:10:29,560 --> 00:10:34,560 narrow it is effective and educates 243 00:10:32,360 --> 00:10:37,279 users about Wi-Fi vulnerabilities and 244 00:10:34,560 --> 00:10:39,160 ethical hacking practices the my project 245 00:10:37,279 --> 00:10:41,120 faced challenges but it underscores the 246 00:10:39,160 --> 00:10:43,600 value of persistence and the importance 247 00:10:41,120 --> 00:10:45,920 of learning through failure tools like 248 00:10:43,600 --> 00:10:47,880 the porag GOI remind us of the need for 249 00:10:45,920 --> 00:10:49,639 proactive security measures and 250 00:10:47,880 --> 00:10:51,519 continuous education in a rapidly 251 00:10:49,639 --> 00:10:53,160 evolving field and I would love to keep 252 00:10:51,519 --> 00:10:58,560 working on this and continue to show you 253 00:10:53,160 --> 00:10:58,560 guys how it updates thank you 254 00:10:59,360 --> 00:11:03,200 was 255 00:11:00,279 --> 00:11:04,920 amazing Brian stop clapping you are up 256 00:11:03,200 --> 00:11:08,000 next I guess I'm going have to kick you 257 00:11:04,920 --> 00:11:09,279 off stage that is fantastic um if you 258 00:11:08,000 --> 00:11:12,079 have 259 00:11:09,279 --> 00:11:14,600 questions keep them in your mind or if 260 00:11:12,079 --> 00:11:16,920 you're as bad as that as I am write them 261 00:11:14,600 --> 00:11:18,800 down because at the end there will 262 00:11:16,920 --> 00:11:22,600 hopefully be some time for questions for 263 00:11:18,800 --> 00:11:23,959 all of the students next up is Brian 264 00:11:22,600 --> 00:11:28,160 Brian 265 00:11:23,959 --> 00:11:31,279 is um Brian's favorite emoji is a thumbs 266 00:11:28,160 --> 00:11:33,560 up emoji nice one that I can actually do 267 00:11:31,279 --> 00:11:37,279 um Brian's been programming for one to 268 00:11:33,560 --> 00:11:40,320 two years and something that Brian has 269 00:11:37,279 --> 00:11:43,000 recently found out about computers is 270 00:11:40,320 --> 00:11:44,160 vectorization specifically you can 271 00:11:43,000 --> 00:11:47,880 actually reduce the amount of 272 00:11:44,160 --> 00:11:50,079 calculations you run by just uh by just 273 00:11:47,880 --> 00:11:54,440 performing operations on an entire array 274 00:11:50,079 --> 00:11:58,120 at a time cool Brian take it 275 00:11:54,440 --> 00:11:59,760 away all right hello everybody uh I will 276 00:11:58,120 --> 00:12:02,760 be here talking to you guys about how I 277 00:11:59,760 --> 00:12:04,399 use Python to find Fibonacci numbers so 278 00:12:02,760 --> 00:12:06,760 for those who don't know if you let F 279 00:12:04,399 --> 00:12:09,360 ofn be the n's Fibonacci number you find 280 00:12:06,760 --> 00:12:12,560 F ofn by adding together F of n minus 281 00:12:09,360 --> 00:12:15,519 one and F of n minus 2 so as a baseline 282 00:12:12,560 --> 00:12:18,240 f of0 is z and F1 and F2 are the same in 283 00:12:15,519 --> 00:12:20,279 that they are both one so the problem 284 00:12:18,240 --> 00:12:23,480 arises with this uh how do you find F 285 00:12:20,279 --> 00:12:25,440 ofn with code now for context at this 286 00:12:23,480 --> 00:12:26,600 point in my life I was in year 11 and I 287 00:12:25,440 --> 00:12:28,680 learned everything that I'm about to 288 00:12:26,600 --> 00:12:30,680 tell you about in this my algorithmics 289 00:12:28,680 --> 00:12:32,240 class and at that point I was finding 290 00:12:30,680 --> 00:12:33,639 the content pretty difficult to 291 00:12:32,240 --> 00:12:35,160 understand I was kind of getting cooked 292 00:12:33,639 --> 00:12:36,880 so hopefully I don't replicate that with 293 00:12:35,160 --> 00:12:38,480 you guys as I go into an explanation of 294 00:12:36,880 --> 00:12:41,720 the first solution which involves a 295 00:12:38,480 --> 00:12:43,720 little something called recursion now uh 296 00:12:41,720 --> 00:12:45,519 as a simple definition recursion is a 297 00:12:43,720 --> 00:12:47,959 tactic where you use simpler versions of 298 00:12:45,519 --> 00:12:49,959 our problem to CC to solve a more 299 00:12:47,959 --> 00:12:51,680 complex variants of our problem and in 300 00:12:49,959 --> 00:12:53,760 programming this normally involves a 301 00:12:51,680 --> 00:12:55,440 function calling itself until it reaches 302 00:12:53,760 --> 00:12:56,959 something called a base case the 303 00:12:55,440 --> 00:12:58,519 simplest iteration of a problem that's 304 00:12:56,959 --> 00:13:01,639 normally so simple that it's a 305 00:12:58,519 --> 00:13:03,800 no-brainer to answer so here is the 306 00:13:01,639 --> 00:13:06,160 first solution for calculating F ofn 307 00:13:03,800 --> 00:13:07,680 I've called it RF of n uh as you can see 308 00:13:06,160 --> 00:13:09,880 those first two if statements up there 309 00:13:07,680 --> 00:13:12,399 represent our base cases F0 equals 0 and 310 00:13:09,880 --> 00:13:14,079 FS1 and FS2 are both one and if we call 311 00:13:12,399 --> 00:13:17,000 anything that's not a base case that's 312 00:13:14,079 --> 00:13:20,800 cool we simply return rfn min-1 plus rfn 313 00:13:17,000 --> 00:13:24,079 minus 2 as a mirror of fnal FN minus1 314 00:13:20,800 --> 00:13:25,720 plus FN minus 2 so this solution works 315 00:13:24,079 --> 00:13:28,240 and it looks pretty elegant but it does 316 00:13:25,720 --> 00:13:31,360 have a weakness namely in its complexity 317 00:13:28,240 --> 00:13:33,040 now uh to put it simply again complexity 318 00:13:31,360 --> 00:13:34,920 complexity basically describes how well 319 00:13:33,040 --> 00:13:37,480 a program will scale in memory usage or 320 00:13:34,920 --> 00:13:39,279 run time as input sizes get bigger for 321 00:13:37,480 --> 00:13:41,600 the purposes of this presentation I will 322 00:13:39,279 --> 00:13:43,560 be analyzing the coming programs in Big 323 00:13:41,600 --> 00:13:45,320 O notation or worst case scenario where 324 00:13:43,560 --> 00:13:46,959 it has to do the most amount of work and 325 00:13:45,320 --> 00:13:50,320 how and I'll be analyzing how runtime 326 00:13:46,959 --> 00:13:52,279 scales alongside this so if we look at 327 00:13:50,320 --> 00:13:54,279 the amount of function calls RF ofn 328 00:13:52,279 --> 00:13:56,440 needs to make with linearly increasing 329 00:13:54,279 --> 00:13:58,800 ends you notice that uh we're starting 330 00:13:56,440 --> 00:13:59,800 to observe sort of an exponential is 331 00:13:58,800 --> 00:14:01,199 growth 332 00:13:59,800 --> 00:14:03,839 with uh the amount of function calls 333 00:14:01,199 --> 00:14:05,279 that I have to make which implies that 334 00:14:03,839 --> 00:14:08,199 the amount of time RF will need to 335 00:14:05,279 --> 00:14:10,440 execute will scale exponentially in size 336 00:14:08,199 --> 00:14:13,000 so to actually prove this what I did was 337 00:14:10,440 --> 00:14:15,639 I made RF of n calculate F0 all the way 338 00:14:13,000 --> 00:14:17,480 to F40 print out how much time it took 339 00:14:15,639 --> 00:14:19,279 for each function to complete SLA down 340 00:14:17,480 --> 00:14:21,720 on Google Sheets and made a little trend 341 00:14:19,279 --> 00:14:24,399 line and I produced these two graphs 342 00:14:21,720 --> 00:14:26,040 right here so to the to the right of the 343 00:14:24,399 --> 00:14:28,440 slide you'd see the output of that 344 00:14:26,040 --> 00:14:30,160 previous program over here uh and to the 345 00:14:28,440 --> 00:14:31,440 left the slide you see a little 346 00:14:30,160 --> 00:14:33,320 calculation that I did which should 347 00:14:31,440 --> 00:14:34,759 measure around how many function calls 348 00:14:33,320 --> 00:14:36,680 that RF needs to actually calculate 349 00:14:34,759 --> 00:14:38,800 given Fibonacci number now both of these 350 00:14:36,680 --> 00:14:41,720 look like exponentials which tell us 351 00:14:38,800 --> 00:14:44,600 that RF has a Time complexity of class 352 00:14:41,720 --> 00:14:45,880 O2 to the^ of n which meaning that if 353 00:14:44,600 --> 00:14:47,240 you plot it out in the graph like this 354 00:14:45,880 --> 00:14:48,920 it looks like an exponential and it will 355 00:14:47,240 --> 00:14:50,440 continue to scale as an exponential as n 356 00:14:48,920 --> 00:14:51,759 increases compared to what we can 357 00:14:50,440 --> 00:14:53,720 actually do with this problem this 358 00:14:51,759 --> 00:14:55,320 solution kind of sucks in terms of time 359 00:14:53,720 --> 00:14:57,320 complexity so I'm going to try my best 360 00:14:55,320 --> 00:14:58,839 to guide you to the logic of the second 361 00:14:57,320 --> 00:15:01,399 solution because this took me a really 362 00:14:58,839 --> 00:15:03,360 long time to understand so if you look 363 00:15:01,399 --> 00:15:04,839 at the process for calculating F of 5 364 00:15:03,360 --> 00:15:06,440 you notice that we have nine function 365 00:15:04,839 --> 00:15:09,920 calls here and you notice that we need 366 00:15:06,440 --> 00:15:12,680 to call F3 twice so if we associate 367 00:15:09,920 --> 00:15:14,279 something here with F3 uh and Define it 368 00:15:12,680 --> 00:15:16,639 the first time we actually calculate it 369 00:15:14,279 --> 00:15:18,040 we can actually substitute its usage its 370 00:15:16,639 --> 00:15:19,560 usage the next time we need it which 371 00:15:18,040 --> 00:15:21,360 takes our function calls down from 9 to 372 00:15:19,560 --> 00:15:22,839 7 which should ideally make our program 373 00:15:21,360 --> 00:15:25,480 a bit faster because it's calling less 374 00:15:22,839 --> 00:15:27,399 functions uh this is the idea behind our 375 00:15:25,480 --> 00:15:29,240 second solution which involves something 376 00:15:27,399 --> 00:15:30,759 called dynamic programming know the 377 00:15:29,240 --> 00:15:32,560 memorization part I do not have enough 378 00:15:30,759 --> 00:15:34,959 time to get into that 379 00:15:32,560 --> 00:15:36,959 so you can think of dynamic programming 380 00:15:34,959 --> 00:15:38,480 as a sort of fancy version of recursion 381 00:15:36,959 --> 00:15:40,800 where instead of just discarding the 382 00:15:38,480 --> 00:15:42,319 simpler cases you are storing them and 383 00:15:40,800 --> 00:15:45,199 using them later on so you don't have to 384 00:15:42,319 --> 00:15:47,040 recalculate them and in certain problems 385 00:15:45,199 --> 00:15:48,800 where these smaller values appear a lot 386 00:15:47,040 --> 00:15:50,920 in calculating these bigger values like 387 00:15:48,800 --> 00:15:52,600 in finding F of n this will save you a 388 00:15:50,920 --> 00:15:55,440 lot of time 389 00:15:52,600 --> 00:15:57,000 so again I just want to Simply preface 390 00:15:55,440 --> 00:15:58,480 that we're simply storing stuff that 391 00:15:57,000 --> 00:15:59,959 we've already done to save time so we 392 00:15:58,480 --> 00:16:02,839 don't have to calculate everything over 393 00:15:59,959 --> 00:16:04,680 and over again so if we let upgraded FIB 394 00:16:02,839 --> 00:16:07,560 be of a function that uses this strategy 395 00:16:04,680 --> 00:16:09,639 to return F ofn we get a function that 396 00:16:07,560 --> 00:16:11,680 looks like this so this looks a bit 397 00:16:09,639 --> 00:16:12,959 complicated to those to those who don't 398 00:16:11,680 --> 00:16:14,800 who haven't really caught on to what I 399 00:16:12,959 --> 00:16:16,040 was explaining but I'll hopefully I can 400 00:16:14,800 --> 00:16:17,720 do a good job at explaining it right 401 00:16:16,040 --> 00:16:19,959 here so here's the storing and 402 00:16:17,720 --> 00:16:21,199 remembering part we Define a record with 403 00:16:19,959 --> 00:16:22,480 all of the Fibonacci numbers that we 404 00:16:21,199 --> 00:16:24,279 currently have of course we start off at 405 00:16:22,480 --> 00:16:25,920 our base cases cuz those are obvious and 406 00:16:24,279 --> 00:16:27,959 the first thing we do when we call our 407 00:16:25,920 --> 00:16:29,680 function is check if it's already in our 408 00:16:27,959 --> 00:16:30,839 record if it's already our record well 409 00:16:29,680 --> 00:16:32,800 that's all cool we can just take it from 410 00:16:30,839 --> 00:16:34,720 our record and return it if not well 411 00:16:32,800 --> 00:16:37,639 that's also cool we can simply perform F 412 00:16:34,720 --> 00:16:39,639 of n = f of n minus1 plus F of n minus 2 413 00:16:37,639 --> 00:16:42,759 shove down our record and return it as 414 00:16:39,639 --> 00:16:45,319 required so to actually figure out its 415 00:16:42,759 --> 00:16:48,000 time complexity what I did was calculate 416 00:16:45,319 --> 00:16:50,880 was make a upgraded FIB calculate F0 all 417 00:16:48,000 --> 00:16:53,959 the way to F 100,000 in increments of 418 00:16:50,880 --> 00:16:55,839 2,500 so doing so gives me these two 419 00:16:53,959 --> 00:16:58,880 graphs uh gives me the graph to the left 420 00:16:55,839 --> 00:17:02,000 over here as you can see uh it takes up 421 00:16:58,880 --> 00:17:04,199 upgraded FIB 0.17 seconds to calculate F 422 00:17:02,000 --> 00:17:06,720 100,000 as opposed to RF taking 10 423 00:17:04,199 --> 00:17:08,760 seconds to calculate F of 40 but I 424 00:17:06,720 --> 00:17:10,280 recognize that we that some of you guys 425 00:17:08,760 --> 00:17:12,240 need a bit more of a mathematically 426 00:17:10,280 --> 00:17:13,880 rigorous way of comparing the two so 427 00:17:12,240 --> 00:17:15,280 let's look at the function calls so 428 00:17:13,880 --> 00:17:18,280 let's look at the function calls as well 429 00:17:15,280 --> 00:17:21,439 so I'm about to run a model which should 430 00:17:18,280 --> 00:17:23,520 uh pretty accurately uh visualize how 431 00:17:21,439 --> 00:17:25,520 many functions that upgraded FIB needs 432 00:17:23,520 --> 00:17:28,520 to call to to calculate a given 433 00:17:25,520 --> 00:17:31,200 Fibonacci number and as you can see here 434 00:17:28,520 --> 00:17:32,440 it mostly like a straight line uh with 435 00:17:31,200 --> 00:17:34,600 if you look at the longest chain of 436 00:17:32,440 --> 00:17:36,440 nodes here with the exception of one of 437 00:17:34,600 --> 00:17:37,679 the base cases down here the actual 438 00:17:36,440 --> 00:17:39,200 Fibonacci number that we're trying to 439 00:17:37,679 --> 00:17:41,960 calculate and the case that we've 440 00:17:39,200 --> 00:17:44,520 already calculated and saved uh most of 441 00:17:41,960 --> 00:17:46,640 these have one branch which tells us 442 00:17:44,520 --> 00:17:48,559 that it's going to scale mostly linearly 443 00:17:46,640 --> 00:17:50,280 in terms of function calls namely if 444 00:17:48,559 --> 00:17:52,360 we're not calling a base case upgraded 445 00:17:50,280 --> 00:17:54,880 FIB is going to call 2 N minus 3 446 00:17:52,360 --> 00:17:58,159 functions which if you plot that on a 447 00:17:54,880 --> 00:18:00,720 graph gives you a gives you a gives you 448 00:17:58,159 --> 00:18:02,880 two graphs that show a similar disparity 449 00:18:00,720 --> 00:18:06,280 with if you compare them with runtime as 450 00:18:02,880 --> 00:18:08,520 well uh it takes upgraded FIB less than 451 00:18:06,280 --> 00:18:12,400 slightly less than 200,000 functions to 452 00:18:08,520 --> 00:18:15,440 calculate F of 100,000 where uh ourf of 453 00:18:12,400 --> 00:18:17,520 n needs like what uh 200 million 454 00:18:15,440 --> 00:18:19,480 function calls to calculate the 40th 455 00:18:17,520 --> 00:18:23,000 Fibonacci number 456 00:18:19,480 --> 00:18:24,960 and analyzing this solution because we 457 00:18:23,000 --> 00:18:27,120 took the because we did the simple 458 00:18:24,960 --> 00:18:29,120 shortcut of just not calculating stuff 459 00:18:27,120 --> 00:18:31,240 that we've already done we have taken an 460 00:18:29,120 --> 00:18:33,440 exponentially scaling solution and we 461 00:18:31,240 --> 00:18:35,480 reduced it down to a linearly scaling 462 00:18:33,440 --> 00:18:38,600 solution to the point where this new 463 00:18:35,480 --> 00:18:42,159 solution in calculating the 100,000 464 00:18:38,600 --> 00:18:45,120 Fibonacci number is 60 times faster than 465 00:18:42,159 --> 00:18:48,640 our old solution calculating the 40th 466 00:18:45,120 --> 00:18:51,400 Fibonacci number so uh I might have 467 00:18:48,640 --> 00:18:54,760 rushed this talk a bit hope that's fine 468 00:18:51,400 --> 00:18:56,880 but uh the moral of the story is that uh 469 00:18:54,760 --> 00:18:58,440 we this this kind of improvement 470 00:18:56,880 --> 00:19:00,320 happened because we took a step back 471 00:18:58,440 --> 00:19:02,039 from because I took a step back from 472 00:19:00,320 --> 00:19:03,679 looking at the Fibonacci numbers problem 473 00:19:02,039 --> 00:19:05,679 realized that these smaller Fibonacci 474 00:19:03,679 --> 00:19:09,240 numbers appeared a lot in calculating 475 00:19:05,679 --> 00:19:11,400 bigger Fibonacci numbers and so and so 476 00:19:09,240 --> 00:19:13,600 adapted to that and so sort of responded 477 00:19:11,400 --> 00:19:15,520 to that aspect of the problem so this 478 00:19:13,600 --> 00:19:17,760 really shows me the importance of 479 00:19:15,520 --> 00:19:19,320 actually thinking things out before 480 00:19:17,760 --> 00:19:20,799 programming something and actually 481 00:19:19,320 --> 00:19:24,120 understanding what you're doing as 482 00:19:20,799 --> 00:19:27,799 opposed to just well uh monkey brain 483 00:19:24,120 --> 00:19:30,080 here's a loop let's hope it goes well uh 484 00:19:27,799 --> 00:19:32,240 I might have rush just a bit too hard 485 00:19:30,080 --> 00:19:35,679 but that's really all I have to say 486 00:19:32,240 --> 00:19:35,679 thank you for listening to my Pon 487 00:19:38,120 --> 00:19:45,200 presentation thank you so much monkey 488 00:19:41,679 --> 00:19:47,840 brain here's a loop Ain't That A vibe 489 00:19:45,200 --> 00:19:50,919 monkey brain here's a 490 00:19:47,840 --> 00:19:55,919 loop I think we've all been there and 491 00:19:50,919 --> 00:20:00,080 may well be again next up is Jun Jun has 492 00:19:55,919 --> 00:20:03,679 been programming for seven years 493 00:20:00,080 --> 00:20:07,360 and his favorite emoji is the I should 494 00:20:03,679 --> 00:20:07,360 make you all guess what this is based 495 00:20:09,200 --> 00:20:17,240 on yes melting oh dedication as I put my 496 00:20:12,559 --> 00:20:19,440 back out okay um uh and something that 497 00:20:17,240 --> 00:20:22,159 Jun recently learned about 498 00:20:19,440 --> 00:20:25,720 computers is that he should be taking 499 00:20:22,159 --> 00:20:30,080 dis backups after his Linux disc 500 00:20:25,720 --> 00:20:32,799 corrupted itself the day before in this 501 00:20:30,080 --> 00:20:36,679 form that's a lesson we all could learn 502 00:20:32,799 --> 00:20:38,720 too take it away J thank you hello so 503 00:20:36,679 --> 00:20:41,080 today I'll be presenting my project 504 00:20:38,720 --> 00:20:44,360 which is um scanning a train with motion 505 00:20:41,080 --> 00:20:46,919 tracking in a phone so um for some 506 00:20:44,360 --> 00:20:49,720 background I was reading Wikipedia once 507 00:20:46,919 --> 00:20:51,880 and I came across this Wikipedia page um 508 00:20:49,720 --> 00:20:54,520 and on this page there was this picture 509 00:20:51,880 --> 00:20:55,760 by the Wikipedia user Theo I found it 510 00:20:54,520 --> 00:20:58,240 really interesting because the 511 00:20:55,760 --> 00:21:00,320 background is really line like filled 512 00:20:58,240 --> 00:21:02,200 with line lines and it has a really 513 00:21:00,320 --> 00:21:05,520 sci-fi shading to it which I wanted to 514 00:21:02,200 --> 00:21:07,120 replicate so how would I do that so 515 00:21:05,520 --> 00:21:08,960 apparently according to the description 516 00:21:07,120 --> 00:21:12,600 this was taken using a technique called 517 00:21:08,960 --> 00:21:15,559 strip photography and it's a technique 518 00:21:12,600 --> 00:21:19,320 where you take one direction space and 519 00:21:15,559 --> 00:21:22,360 One Direction time so what how you do 520 00:21:19,320 --> 00:21:25,200 this is you take a continuous line like 521 00:21:22,360 --> 00:21:26,559 this and then you stack it together into 522 00:21:25,200 --> 00:21:29,200 a full 523 00:21:26,559 --> 00:21:31,440 picture and 524 00:21:29,200 --> 00:21:35,320 this was first done using film so how 525 00:21:31,440 --> 00:21:38,919 you do it with film is you use a slit 526 00:21:35,320 --> 00:21:41,520 um uh yeah you use a slit lens instead 527 00:21:38,919 --> 00:21:43,039 of like a normal lens and this allows 528 00:21:41,520 --> 00:21:46,320 you to 529 00:21:43,039 --> 00:21:50,279 capture single like single lines 530 00:21:46,320 --> 00:21:51,679 together and then like combine them and 531 00:21:50,279 --> 00:21:53,720 this is great and all but I don't have a 532 00:21:51,679 --> 00:21:56,480 film camera so how would I do it with 533 00:21:53,720 --> 00:21:58,799 with my phone um there's also digital 534 00:21:56,480 --> 00:22:02,520 cameras that do this but they cost like 535 00:21:58,799 --> 00:22:05,880 of dollars even like used ones 536 00:22:02,520 --> 00:22:09,559 so I looked I looked at my phone and my 537 00:22:05,880 --> 00:22:12,480 camera um cameras are very expensive my 538 00:22:09,559 --> 00:22:14,720 phone's free my phone can use USB the 539 00:22:12,480 --> 00:22:16,440 line scan camera has to use obscure 540 00:22:14,720 --> 00:22:19,600 interfaces oh by the way um these 541 00:22:16,440 --> 00:22:21,720 cameras are called line scan cameras but 542 00:22:19,600 --> 00:22:24,960 and the problem is they have very high 543 00:22:21,720 --> 00:22:28,400 frame rate and my phone only has 240 544 00:22:24,960 --> 00:22:31,120 frames per second so how do I compensate 545 00:22:28,400 --> 00:22:34,960 for for this well the sensor of my phone 546 00:22:31,120 --> 00:22:36,960 is very wide 4,000 pixels wide much 547 00:22:34,960 --> 00:22:40,880 wider than the one pixel wide line scan 548 00:22:36,960 --> 00:22:44,240 camera so what I decided on doing is 549 00:22:40,880 --> 00:22:47,240 instead of using um single Pixel slices 550 00:22:44,240 --> 00:22:49,960 I take multipixel slices in the middle 551 00:22:47,240 --> 00:22:54,559 and I stack them into a final 552 00:22:49,960 --> 00:22:57,600 picture so this animation so um each of 553 00:22:54,559 --> 00:23:00,480 these uh each of these frames they're 554 00:22:57,600 --> 00:23:02,240 frames in like a video and I can take 555 00:23:00,480 --> 00:23:04,400 slices in the middle and stack them 556 00:23:02,240 --> 00:23:07,279 together into a final picture so I tried 557 00:23:04,400 --> 00:23:08,159 this with a crude python script and this 558 00:23:07,279 --> 00:23:10,720 was the 559 00:23:08,159 --> 00:23:12,679 result it looks very similar to the 560 00:23:10,720 --> 00:23:14,720 first one but you can see there's some 561 00:23:12,679 --> 00:23:17,919 problems for example there's the 562 00:23:14,720 --> 00:23:20,080 contraction in the train in the top part 563 00:23:17,919 --> 00:23:22,320 there's the dilation in the top in the 564 00:23:20,080 --> 00:23:26,120 bottom left and then if you zoom in 565 00:23:22,320 --> 00:23:30,039 further you can see it's not pretty the 566 00:23:26,120 --> 00:23:32,960 the PTV logo is sort of um stretched out 567 00:23:30,039 --> 00:23:35,919 and you can you can maybe see the um 568 00:23:32,960 --> 00:23:39,720 lines in the middle that's because of 569 00:23:35,919 --> 00:23:42,000 that's just because of issues but um so 570 00:23:39,720 --> 00:23:43,919 what I how I ended up fixing this was 571 00:23:42,000 --> 00:23:47,039 using motion tracking but I don't know 572 00:23:43,919 --> 00:23:48,799 how to do motion tracking so I got a 573 00:23:47,039 --> 00:23:53,279 library to do it for 574 00:23:48,799 --> 00:23:55,760 me um this so this is open CV which is a 575 00:23:53,279 --> 00:23:57,559 computer vision uh computer vision 576 00:23:55,760 --> 00:24:01,279 Library it's available for Python and 577 00:23:57,559 --> 00:24:05,480 C++ but I don't know C++ so I use Python 578 00:24:01,279 --> 00:24:08,400 so it um I use the orb key Point finder 579 00:24:05,480 --> 00:24:10,200 The Brute Force keypoint match and I use 580 00:24:08,400 --> 00:24:14,559 I use it also for general image 581 00:24:10,200 --> 00:24:16,240 processing so first with key points so 582 00:24:14,559 --> 00:24:18,840 key points are points in the picture 583 00:24:16,240 --> 00:24:21,400 which are really identifiable and really 584 00:24:18,840 --> 00:24:23,360 easy to find like in multiple pictures 585 00:24:21,400 --> 00:24:26,480 so in this case it's like the rivets on 586 00:24:23,360 --> 00:24:31,279 the front of the train or the um the 587 00:24:26,480 --> 00:24:33,720 dots on the like like the name plate of 588 00:24:31,279 --> 00:24:35,600 the train but it also captures the pass 589 00:24:33,720 --> 00:24:37,080 on the station which is not good because 590 00:24:35,600 --> 00:24:40,840 I don't want the station I want the 591 00:24:37,080 --> 00:24:43,360 train so what open CV allows allows you 592 00:24:40,840 --> 00:24:47,760 to do is it allows you to key Point 593 00:24:43,360 --> 00:24:50,320 match between two frames and with this I 594 00:24:47,760 --> 00:24:54,200 can plot out the distance that key Point 595 00:24:50,320 --> 00:24:57,240 moves like between the frame and 596 00:24:54,200 --> 00:24:58,799 if on on the vertical axis if the 597 00:24:57,240 --> 00:25:00,760 vertical change in position and the 598 00:24:58,799 --> 00:25:04,240 horizontal axis is a horizontal change 599 00:25:00,760 --> 00:25:07,880 in position and you can see it's very 600 00:25:04,240 --> 00:25:10,720 noisy there's a lot of like bad data the 601 00:25:07,880 --> 00:25:12,640 red ones are filtered out by putting an 602 00:25:10,720 --> 00:25:13,799 absolute limit on the vertical axis 603 00:25:12,640 --> 00:25:17,399 because the train doesn't move 604 00:25:13,799 --> 00:25:19,760 vertically it only moves horizontally um 605 00:25:17,399 --> 00:25:22,799 the standard deviation filtering is used 606 00:25:19,760 --> 00:25:25,279 to filter out the horizontal outliers 607 00:25:22,799 --> 00:25:28,000 and what that gives me is the two points 608 00:25:25,279 --> 00:25:29,840 in the middle the blue ones but the blue 609 00:25:28,000 --> 00:25:33,240 dots aren't actually single points there 610 00:25:29,840 --> 00:25:35,399 are a lot of points and you can see 611 00:25:33,240 --> 00:25:38,039 there's two clums the one on the left is 612 00:25:35,399 --> 00:25:39,720 the train because it's moving in the X 613 00:25:38,039 --> 00:25:42,760 Direction you can see the bottom part 614 00:25:39,720 --> 00:25:45,120 shows minus 10 which isus 10 pixels move 615 00:25:42,760 --> 00:25:47,880 this Frame and then the station doesn't 616 00:25:45,120 --> 00:25:49,720 move at all but the train like the 617 00:25:47,880 --> 00:25:51,760 computer doesn't have a concept of a 618 00:25:49,720 --> 00:25:53,840 clump like we do so how do we 619 00:25:51,760 --> 00:25:55,600 distinguish between them so I use a 620 00:25:53,840 --> 00:25:58,360 technique called kernel density 621 00:25:55,600 --> 00:26:01,200 estimation it gives you like a density 622 00:25:58,360 --> 00:26:05,520 graph over the x-axis and you can only 623 00:26:01,200 --> 00:26:07,840 do this with 1D graphs but what um this 624 00:26:05,520 --> 00:26:09,960 allows me to see the peak for the train 625 00:26:07,840 --> 00:26:12,159 and the peak for the station and it's 626 00:26:09,960 --> 00:26:14,120 really easy for my computer to figure 627 00:26:12,159 --> 00:26:16,120 out which Peak is which because the 628 00:26:14,120 --> 00:26:20,159 train Peak is really far away from the 629 00:26:16,120 --> 00:26:22,679 origin compared to the station so anyway 630 00:26:20,159 --> 00:26:25,880 I now that this is done and I can find 631 00:26:22,679 --> 00:26:28,320 the slice Woods to use for every frame I 632 00:26:25,880 --> 00:26:31,440 took I went and took out I went and took 633 00:26:28,320 --> 00:26:33,919 some videos of trains 634 00:26:31,440 --> 00:26:35,840 passing so the top right is the one I 635 00:26:33,919 --> 00:26:37,679 took at huntingdale the bottom right is 636 00:26:35,840 --> 00:26:40,039 the one I took at East pacum with my 637 00:26:37,679 --> 00:26:42,279 friend when the station first opened and 638 00:26:40,039 --> 00:26:45,480 the left bottom left is the one that 639 00:26:42,279 --> 00:26:48,480 took at Edis Veil 640 00:26:45,480 --> 00:26:48,480 so 641 00:26:49,880 --> 00:26:59,279 uh yeah so this is this is a picture I 642 00:26:54,000 --> 00:26:59,279 took it's very um yeah 643 00:26:59,720 --> 00:27:03,240 this one of the four pictures I took 644 00:27:01,279 --> 00:27:05,520 it's probably my least favorite but it 645 00:27:03,240 --> 00:27:05,520 still 646 00:27:05,559 --> 00:27:09,760 works if you zoom in a bit there's like 647 00:27:07,919 --> 00:27:12,480 imperfections but you can't zoom in so 648 00:27:09,760 --> 00:27:12,480 you can't see 649 00:27:13,919 --> 00:27:17,919 them this is another one uh this is 650 00:27:16,440 --> 00:27:20,559 probably my second favorite because of 651 00:27:17,919 --> 00:27:24,480 the coloring it has like a really sandy 652 00:27:20,559 --> 00:27:26,360 beach kind of look to it I like the um 653 00:27:24,480 --> 00:27:29,720 the yellow on the blue and it I think it 654 00:27:26,360 --> 00:27:32,960 looks really nice generally um the 655 00:27:29,720 --> 00:27:36,240 second one the next one is funny because 656 00:27:32,960 --> 00:27:38,799 it actually doesn't fit in this slide 657 00:27:36,240 --> 00:27:41,679 um and the cool thing about this 658 00:27:38,799 --> 00:27:44,159 technique is that the slices can like 659 00:27:41,679 --> 00:27:46,480 just tack arbitrarily long so the 660 00:27:44,159 --> 00:27:51,039 pictures can be arbitarily wide and this 661 00:27:46,480 --> 00:27:54,640 picture is actually 156 pixels W 662 00:27:51,039 --> 00:27:57,679 156,000 pixels wide um it actually 663 00:27:54,640 --> 00:28:00,240 lagged out my slideshow uh slideshow 664 00:27:57,679 --> 00:28:03,200 application when I first opened it so I 665 00:28:00,240 --> 00:28:07,840 had to scale it down 666 00:28:03,200 --> 00:28:09,919 um and my last one is my the one I took 667 00:28:07,840 --> 00:28:11,679 at East packin it's probably my favorite 668 00:28:09,919 --> 00:28:13,799 because the shading worked out so well 669 00:28:11,679 --> 00:28:16,760 it was like sort of foggy on the day so 670 00:28:13,799 --> 00:28:18,399 that reflected well as well and if you 671 00:28:16,760 --> 00:28:21,279 want to try this out for yourself it's 672 00:28:18,399 --> 00:28:24,480 all up on GitHub and you can just 673 00:28:21,279 --> 00:28:28,910 download it and try it if if you want um 674 00:28:24,480 --> 00:28:36,720 you might not want to uh and thank you 675 00:28:28,910 --> 00:28:36,720 [Applause] 676 00:28:37,000 --> 00:28:41,720 that was 677 00:28:38,440 --> 00:28:45,799 amazing wow like shiny shiniest of 678 00:28:41,720 --> 00:28:48,799 trains Zach come on up 679 00:28:45,799 --> 00:28:48,799 here 680 00:28:49,080 --> 00:28:56,279 um awesome all right Zach I'm still 681 00:28:53,440 --> 00:28:58,720 thinking about how shiny those trains 682 00:28:56,279 --> 00:29:03,039 were they're so shiny 683 00:28:58,720 --> 00:29:04,679 okay um Zach has been programming for 684 00:29:03,039 --> 00:29:09,360 almost 5 685 00:29:04,679 --> 00:29:11,720 years um a to guess this Emoji I'm going 686 00:29:09,360 --> 00:29:14,720 to 687 00:29:11,720 --> 00:29:14,720 uh 688 00:29:15,679 --> 00:29:24,200 yeah yes thank you we've got an like 689 00:29:19,240 --> 00:29:28,640 Emoji expert in there yeah I know you um 690 00:29:24,200 --> 00:29:31,159 Zach recently found out which might be a 691 00:29:28,640 --> 00:29:33,039 spoil the opposite of a SPO a nice 692 00:29:31,159 --> 00:29:36,760 throwback to something that Renee said 693 00:29:33,039 --> 00:29:39,360 In This Very Room earlier um that llms 694 00:29:36,760 --> 00:29:42,360 might be very smart smart my words not 695 00:29:39,360 --> 00:29:45,320 not his but they cannot count the number 696 00:29:42,360 --> 00:29:49,480 of letters specified in a word for 697 00:29:45,320 --> 00:29:49,480 example how many RS in 698 00:29:49,640 --> 00:29:58,799 Strawberry Hot yeah like show of hands 699 00:29:52,960 --> 00:30:01,840 it's not to not to um 700 00:29:58,799 --> 00:30:01,840 uh here we 701 00:30:01,880 --> 00:30:08,399 go good you might want to make that 702 00:30:04,480 --> 00:30:10,320 window a bit bigger this yeah yep all 703 00:30:08,399 --> 00:30:12,919 right take it away Zach thank you so 704 00:30:10,320 --> 00:30:12,919 much 705 00:30:15,279 --> 00:30:21,240 big uh my name is Zach ett and today 706 00:30:18,760 --> 00:30:24,880 I'll be presenting the pro rocket League 707 00:30:21,240 --> 00:30:26,919 player game Replay YouTube upload a bot 708 00:30:24,880 --> 00:30:28,760 and that's a very long long Twisted name 709 00:30:26,919 --> 00:30:30,679 but I could not think of a better name 710 00:30:28,760 --> 00:30:31,559 so I'll just explain to you quickly what 711 00:30:30,679 --> 00:30:33,880 that 712 00:30:31,559 --> 00:30:35,440 means so first of all I'll just say what 713 00:30:33,880 --> 00:30:37,240 the bot is and also what is rock league 714 00:30:35,440 --> 00:30:38,840 for anyone that does not know uh rocket 715 00:30:37,240 --> 00:30:42,000 league is an online video game that can 716 00:30:38,840 --> 00:30:44,720 be thought of as as car soccer uh it's 717 00:30:42,000 --> 00:30:46,200 normally played in 2v2 or 3v3 formats 718 00:30:44,720 --> 00:30:48,039 and it's very competitive with many 719 00:30:46,200 --> 00:30:50,159 players playing online with the goals of 720 00:30:48,039 --> 00:30:51,600 climbing the rank system uh these 721 00:30:50,159 --> 00:30:53,840 players can watch professional players 722 00:30:51,600 --> 00:30:55,279 play the game online uh and can learn 723 00:30:53,840 --> 00:30:57,320 from them and improve their own game 724 00:30:55,279 --> 00:30:59,200 play so it's quite common to watch 725 00:30:57,320 --> 00:31:02,039 people a lot better than you to try and 726 00:30:59,200 --> 00:31:03,919 improve uh this is where my bot comes in 727 00:31:02,039 --> 00:31:06,519 which hopes to find the replays of 728 00:31:03,919 --> 00:31:09,279 professional rocket league players uh 729 00:31:06,519 --> 00:31:11,720 download those replays and then upload 730 00:31:09,279 --> 00:31:14,200 them onto a YouTube channel for people 731 00:31:11,720 --> 00:31:16,200 to view publicly so they can learn from 732 00:31:14,200 --> 00:31:18,120 them uh and you can see a little 733 00:31:16,200 --> 00:31:20,639 screenshot of like the YouTube channel I 734 00:31:18,120 --> 00:31:24,080 made uh with videos that's got over a th 735 00:31:20,639 --> 00:31:25,440 videos on there um all right so there 736 00:31:24,080 --> 00:31:27,519 are three main parts of the bot first of 737 00:31:25,440 --> 00:31:29,240 all I need to download the replays uh 738 00:31:27,519 --> 00:31:31,399 once the replays are downloaded I need 739 00:31:29,240 --> 00:31:33,960 to physically record them into an MP4 740 00:31:31,399 --> 00:31:36,200 format uh to upload and then the third 741 00:31:33,960 --> 00:31:38,440 part is uploading to 742 00:31:36,200 --> 00:31:40,840 YouTube uh for the first part which is 743 00:31:38,440 --> 00:31:44,159 downloading the replays uh I first of 744 00:31:40,840 --> 00:31:45,880 all had to use an external API or third 745 00:31:44,159 --> 00:31:48,840 party API because rocket League doesn't 746 00:31:45,880 --> 00:31:50,639 have one uh so I use ball chasing. comom 747 00:31:48,840 --> 00:31:53,240 which many people upload their replays 748 00:31:50,639 --> 00:31:56,720 onto automatically using a plugin for 749 00:31:53,240 --> 00:31:58,360 Rocket league so uh there is loads of 750 00:31:56,720 --> 00:32:00,080 different replays on there so it was no 751 00:31:58,360 --> 00:32:01,480 problem downloading replays of lots of 752 00:32:00,080 --> 00:32:06,120 different professional players off of 753 00:32:01,480 --> 00:32:08,440 there um and I had to use that to 754 00:32:06,120 --> 00:32:10,039 download the replays so I first of all 755 00:32:08,440 --> 00:32:12,639 picked a bunch of pro players I wanted 756 00:32:10,039 --> 00:32:14,200 to play and put them into a uh 757 00:32:12,639 --> 00:32:15,559 dictionary so you can see lots of 758 00:32:14,200 --> 00:32:17,519 different Pro players I've selected and 759 00:32:15,559 --> 00:32:22,240 there steam IDs which I need to pass 760 00:32:17,519 --> 00:32:27,639 into the API to download the replays 761 00:32:22,240 --> 00:32:31,000 so oh sorry um once I have the players I 762 00:32:27,639 --> 00:32:33,639 pi a random player using um just picking 763 00:32:31,000 --> 00:32:35,559 a random one and uh put it through the 764 00:32:33,639 --> 00:32:37,600 API which then downloads onto the 765 00:32:35,559 --> 00:32:39,080 computer and I place into a specific 766 00:32:37,600 --> 00:32:41,279 file that rocket League knows to search 767 00:32:39,080 --> 00:32:41,279 for 768 00:32:41,919 --> 00:32:46,200 replays um once the replays downloaded 769 00:32:44,760 --> 00:32:47,960 and is in the folder it's a bit of a 770 00:32:46,200 --> 00:32:49,919 pain to launch because I need to 771 00:32:47,960 --> 00:32:51,399 physically open it in rocket League to 772 00:32:49,919 --> 00:32:54,799 spectate the replay it's not really in 773 00:32:51,399 --> 00:32:57,120 an MP4 format it's more in a special 774 00:32:54,799 --> 00:33:00,399 format that the game just uses to keep 775 00:32:57,120 --> 00:33:03,039 track of input puts and to replay the it 776 00:33:00,399 --> 00:33:04,960 back to you so you need to really watch 777 00:33:03,039 --> 00:33:07,360 the replay in rocket League to then 778 00:33:04,960 --> 00:33:08,840 record it so I need to actually inside 779 00:33:07,360 --> 00:33:11,240 rocket league with rocket League open on 780 00:33:08,840 --> 00:33:13,559 the computer uh it needs to navigate 781 00:33:11,240 --> 00:33:17,440 through the GUI so I use Pi Auto [ __ ] 782 00:33:13,559 --> 00:33:19,200 which is um a emulation sort of uh 783 00:33:17,440 --> 00:33:22,600 Library which lets you simulate key 784 00:33:19,200 --> 00:33:24,559 presses and uh Mouse inputs so you can 785 00:33:22,600 --> 00:33:26,639 see it navigates through the pause menu 786 00:33:24,559 --> 00:33:28,360 which I've got a picture of up on screen 787 00:33:26,639 --> 00:33:29,880 as well as the replay menu and it just 788 00:33:28,360 --> 00:33:33,200 needs to open the replay that it's just 789 00:33:29,880 --> 00:33:35,559 downloaded using the ballchasing 790 00:33:33,200 --> 00:33:37,559 API uh once the replay is open though 791 00:33:35,559 --> 00:33:40,440 there's another big problem it's 792 00:33:37,559 --> 00:33:42,000 spectating a random player so we 793 00:33:40,440 --> 00:33:44,080 obviously want to watch one specific 794 00:33:42,000 --> 00:33:46,240 player that I've picked beforehand so in 795 00:33:44,080 --> 00:33:48,080 this case we're looking at squishy which 796 00:33:46,240 --> 00:33:52,039 is one of the most popular rocket league 797 00:33:48,080 --> 00:33:53,200 players ever uh we need to make sure 798 00:33:52,039 --> 00:33:54,679 we're actually spectating the correct 799 00:33:53,200 --> 00:33:56,480 player though because in this game here 800 00:33:54,679 --> 00:33:58,120 we can see it's a 2v2 game of Rocket 801 00:33:56,480 --> 00:33:59,960 League you can see four players on the 802 00:33:58,120 --> 00:34:01,320 field we don't know necessarily that 803 00:33:59,960 --> 00:34:02,919 we're going to be spectating the correct 804 00:34:01,320 --> 00:34:05,320 player straight away so we need to 805 00:34:02,919 --> 00:34:07,159 somehow figure out how we know what 806 00:34:05,320 --> 00:34:09,280 player we're currently watching and we 807 00:34:07,159 --> 00:34:11,079 need to switch to a different player if 808 00:34:09,280 --> 00:34:14,240 we're not spectating the correct player 809 00:34:11,079 --> 00:34:16,200 so uh you can see currently I've put a 810 00:34:14,240 --> 00:34:18,280 red box around the name of the current 811 00:34:16,200 --> 00:34:20,839 player was spectating so using the py 812 00:34:18,280 --> 00:34:22,679 Tesseract Library you can take a photo 813 00:34:20,839 --> 00:34:25,800 of somewhere on the screen and then pass 814 00:34:22,679 --> 00:34:27,720 it through uh pesera and it basically 815 00:34:25,800 --> 00:34:29,520 extracts text from it into a string form 816 00:34:27,720 --> 00:34:32,000 format which lets you compare the name 817 00:34:29,520 --> 00:34:34,000 with the pro player you want to spectate 818 00:34:32,000 --> 00:34:36,040 so I just cycle through all of the 819 00:34:34,000 --> 00:34:38,440 players 820 00:34:36,040 --> 00:34:40,399 um I don't know if the video is going to 821 00:34:38,440 --> 00:34:42,480 work it never likes working uh when I'm 822 00:34:40,399 --> 00:34:43,879 in the presentat presentator view 823 00:34:42,480 --> 00:34:45,280 there's another later video which we can 824 00:34:43,879 --> 00:34:46,639 watch but it was just going to be a 825 00:34:45,280 --> 00:34:48,159 video that goes through it so we won't 826 00:34:46,639 --> 00:34:49,520 worry about it for the moment uh it 827 00:34:48,159 --> 00:34:50,720 Cycles through all the players finds the 828 00:34:49,520 --> 00:34:52,480 player we want to watch in this case 829 00:34:50,720 --> 00:34:56,119 it's squishy then it's starts the replay 830 00:34:52,480 --> 00:34:56,119 once it's good to go 831 00:34:58,400 --> 00:35:02,200 uh oh y there you go replay working 832 00:35:00,119 --> 00:35:04,440 never mind uh so you can just see it 833 00:35:02,200 --> 00:35:07,320 quickly Cycles through the players and 834 00:35:04,440 --> 00:35:09,280 then picks the player that it thinks 835 00:35:07,320 --> 00:35:10,680 matches closest with the pro player and 836 00:35:09,280 --> 00:35:12,240 then the actual replay begins and you 837 00:35:10,680 --> 00:35:15,440 can see rocket League starting to play 838 00:35:12,240 --> 00:35:15,440 once it's now spectating 839 00:35:16,680 --> 00:35:22,119 squishy uh uh on to the second part 840 00:35:20,119 --> 00:35:23,440 which is recording the replays so as you 841 00:35:22,119 --> 00:35:24,880 can see there we got up to the part 842 00:35:23,440 --> 00:35:26,760 where the actual rocket League game 843 00:35:24,880 --> 00:35:29,760 started so we need to somehow actually 844 00:35:26,760 --> 00:35:33,280 record the replays into an MP4 format uh 845 00:35:29,760 --> 00:35:35,160 to upload onto YouTube so first of all I 846 00:35:33,280 --> 00:35:36,960 I tried out a lot of different routes 847 00:35:35,160 --> 00:35:38,440 for screen recording so I first of all 848 00:35:36,960 --> 00:35:40,560 used open CV because there 849 00:35:38,440 --> 00:35:42,640 screenshotting functionality as well as 850 00:35:40,560 --> 00:35:45,000 an easy ways to pass the screenshots 851 00:35:42,640 --> 00:35:47,040 into video uh but the issue I had was 852 00:35:45,000 --> 00:35:49,640 none of my replays could go above 10 to 853 00:35:47,040 --> 00:35:52,480 20 frames a second and when you upload 854 00:35:49,640 --> 00:35:55,240 videos onto YouTube normally people 855 00:35:52,480 --> 00:35:56,560 upload at 30 to 60 frames a second so no 856 00:35:55,240 --> 00:35:58,960 one would have any interest in really 857 00:35:56,560 --> 00:36:00,880 watching 10 to 20 frame a second videos 858 00:35:58,960 --> 00:36:01,760 otherwise it just looks too choppy uh 859 00:36:00,880 --> 00:36:03,800 especially when you're watching 860 00:36:01,760 --> 00:36:05,800 fast-paced video games so that wasn't 861 00:36:03,800 --> 00:36:07,359 really going to work for me uh I tried 862 00:36:05,800 --> 00:36:10,440 different combinations of libraries I 863 00:36:07,359 --> 00:36:12,480 tried using pi Auto goey again uh to do 864 00:36:10,440 --> 00:36:14,280 screenshots along with open CV a bunch 865 00:36:12,480 --> 00:36:17,040 of different combinations and just 866 00:36:14,280 --> 00:36:19,079 couldn't get it above really 20 FPS 867 00:36:17,040 --> 00:36:20,400 which wasn't good enough uh also a 868 00:36:19,079 --> 00:36:22,800 library that was specifically made for 869 00:36:20,400 --> 00:36:24,599 screen recording called p screen wreck 870 00:36:22,800 --> 00:36:26,359 uh that still was running very slow and 871 00:36:24,599 --> 00:36:27,960 I couldn't get it working so I was a bit 872 00:36:26,359 --> 00:36:30,720 stuck on this and I had idea how to 873 00:36:27,960 --> 00:36:32,119 screen record in Python uh and I just 874 00:36:30,720 --> 00:36:35,200 couldn't really work it out so I had to 875 00:36:32,119 --> 00:36:37,720 try and create something myself um so I 876 00:36:35,200 --> 00:36:39,760 ended up making my own Library uh called 877 00:36:37,720 --> 00:36:42,000 piast screen cap uh which you can 878 00:36:39,760 --> 00:36:43,400 install using pip uh on screen and 879 00:36:42,000 --> 00:36:45,240 there's also all the code available on 880 00:36:43,400 --> 00:36:47,680 GitHub uh it takes advantage of a 881 00:36:45,240 --> 00:36:49,760 certain screenshotting Library called DX 882 00:36:47,680 --> 00:36:52,440 cam which only works on windows so my 883 00:36:49,760 --> 00:36:56,280 library also sadly only works on Windows 884 00:36:52,440 --> 00:36:57,800 um but my library I managed to use and I 885 00:36:56,280 --> 00:37:00,640 managed to get it to record replay is up 886 00:36:57,800 --> 00:37:03,920 to 90 FPS on the computer which is well 887 00:37:00,640 --> 00:37:06,200 above YouTube's maximum of 60 so I I was 888 00:37:03,920 --> 00:37:09,319 able to use that in my application to 889 00:37:06,200 --> 00:37:12,200 then record replays for 890 00:37:09,319 --> 00:37:16,119 me um on to part three uploading the 891 00:37:12,200 --> 00:37:18,960 replays to YouTube so once my uh library 892 00:37:16,119 --> 00:37:21,599 then up records the whole replays I need 893 00:37:18,960 --> 00:37:23,960 to uh physically upload onto re onto 894 00:37:21,599 --> 00:37:27,240 YouTube so it's in the MP4 format ready 895 00:37:23,960 --> 00:37:29,520 to go um so first of all I had a few 896 00:37:27,240 --> 00:37:31,079 options well I thought I had one option 897 00:37:29,520 --> 00:37:33,160 to start with which was using the 898 00:37:31,079 --> 00:37:36,680 YouTube API which I managed to get 899 00:37:33,160 --> 00:37:39,000 working all the way uh to the point that 900 00:37:36,680 --> 00:37:40,599 uploaded the YouTube videos ready to go 901 00:37:39,000 --> 00:37:42,359 uploaded descriptions uploaded 902 00:37:40,599 --> 00:37:45,319 thumbnails everything was working 903 00:37:42,359 --> 00:37:48,480 perfectly until I realized one problem 904 00:37:45,319 --> 00:37:50,960 which was that you cannot upload public 905 00:37:48,480 --> 00:37:52,640 YouTube videos using the API without 906 00:37:50,960 --> 00:37:54,520 getting permission or without filling 907 00:37:52,640 --> 00:37:56,319 out a form for YouTube so that means the 908 00:37:54,520 --> 00:37:59,040 videos although up on the YouTube 909 00:37:56,319 --> 00:38:00,680 platform could only unlisted or private 910 00:37:59,040 --> 00:38:02,200 meaning that no one could publicly see 911 00:38:00,680 --> 00:38:04,920 them and you couldn't even go in and 912 00:38:02,200 --> 00:38:07,319 manually change it uh and I needed to 913 00:38:04,920 --> 00:38:09,839 fill out a form for YouTube to basically 914 00:38:07,319 --> 00:38:11,599 get that changed uh so this meant either 915 00:38:09,839 --> 00:38:16,079 I could spend 30 minutes filling out an 916 00:38:11,599 --> 00:38:18,040 API form um get it approved maybe takes 917 00:38:16,079 --> 00:38:20,599 a couple days but I once again had all 918 00:38:18,040 --> 00:38:21,960 of the code fully working uh wouldn't 919 00:38:20,599 --> 00:38:23,480 have needed to change anything just 920 00:38:21,960 --> 00:38:25,640 needed to fill out the form get it 921 00:38:23,480 --> 00:38:28,079 approved by YouTube or I could spend 922 00:38:25,640 --> 00:38:30,359 many hours uh dele reading all of the 923 00:38:28,079 --> 00:38:31,880 code that I'd just written uh spending 924 00:38:30,359 --> 00:38:33,640 ages thinking of new ideas of how I was 925 00:38:31,880 --> 00:38:36,079 going to do it and eventually coming to 926 00:38:33,640 --> 00:38:39,520 the conclusion I should just automate it 927 00:38:36,079 --> 00:38:42,160 in a similar way to how I automated the 928 00:38:39,520 --> 00:38:44,200 uh rocket League GUI earlier uh by 929 00:38:42,160 --> 00:38:46,319 simply just moving the mouse around the 930 00:38:44,200 --> 00:38:49,240 screen and just emulating keyboard 931 00:38:46,319 --> 00:38:51,920 presses and mouse presses I think you 932 00:38:49,240 --> 00:38:54,800 can figure out which one I went for uh 933 00:38:51,920 --> 00:38:58,160 here's the choice I made so this is just 934 00:38:54,800 --> 00:39:00,040 uh oh yeah here we go 935 00:38:58,160 --> 00:39:02,280 uh we can just watch what the choice I 936 00:39:00,040 --> 00:39:05,880 made 937 00:39:02,280 --> 00:39:08,000 was not working oh there we go uh so 938 00:39:05,880 --> 00:39:10,079 here's the YouTube Studio page uh you 939 00:39:08,000 --> 00:39:12,760 can see the mouse in the top right uh 940 00:39:10,079 --> 00:39:14,960 it's just selecting file open File 941 00:39:12,760 --> 00:39:17,440 Explorer select the 942 00:39:14,960 --> 00:39:19,359 replay going through waits for the video 943 00:39:17,440 --> 00:39:21,400 to pause this section could have taken a 944 00:39:19,359 --> 00:39:23,079 while so it pauses here for a second so 945 00:39:21,400 --> 00:39:25,520 just give it a couple seconds then it 946 00:39:23,079 --> 00:39:27,800 starts pasting in the title doing all 947 00:39:25,520 --> 00:39:29,800 keyboard presses pasting the information 948 00:39:27,800 --> 00:39:30,680 based on the replay does the same for 949 00:39:29,800 --> 00:39:34,280 the 950 00:39:30,680 --> 00:39:36,119 description uh then Scrolls down need to 951 00:39:34,280 --> 00:39:37,920 say the video is not made for kids so 952 00:39:36,119 --> 00:39:40,960 just check that box really quickly and 953 00:39:37,920 --> 00:39:43,440 show more scroll 954 00:39:40,960 --> 00:39:45,200 down adds in some tags which just helps 955 00:39:43,440 --> 00:39:47,160 with the YouTube 956 00:39:45,200 --> 00:39:49,200 discoverability uh p in a bunch of 957 00:39:47,160 --> 00:39:51,680 different things 958 00:39:49,200 --> 00:39:53,359 there uh click enter a few times and 959 00:39:51,680 --> 00:39:55,640 here we go public video which I couldn't 960 00:39:53,359 --> 00:39:57,400 get before with the API also copies the 961 00:39:55,640 --> 00:39:59,200 video link Just for future thumbnail 962 00:39:57,400 --> 00:40:01,800 uploading which I still actually did use 963 00:39:59,200 --> 00:40:04,190 the YouTube API for uh that's how it 964 00:40:01,800 --> 00:40:09,520 uploads the videos 965 00:40:04,190 --> 00:40:13,440 [Applause] 966 00:40:09,520 --> 00:40:16,960 um uh Frozen that's not 967 00:40:13,440 --> 00:40:20,119 good oh 968 00:40:16,960 --> 00:40:21,680 oh oh there we go um all right uh 969 00:40:20,119 --> 00:40:22,680 there's an other mention though sort of 970 00:40:21,680 --> 00:40:23,920 wanted to make I don't think there's 971 00:40:22,680 --> 00:40:25,800 enough time to talk about it in this 972 00:40:23,920 --> 00:40:28,000 slide but I also need to generate the 973 00:40:25,800 --> 00:40:29,960 thumbnail so he can see an example 974 00:40:28,000 --> 00:40:32,119 thumbnail of one of the YouTube videos 975 00:40:29,960 --> 00:40:35,000 where it uh picks a random car and it 976 00:40:32,119 --> 00:40:36,720 picks a random field and enters in some 977 00:40:35,000 --> 00:40:39,480 of the information based on the replay 978 00:40:36,720 --> 00:40:42,800 so that's an example replay of the pro 979 00:40:39,480 --> 00:40:44,119 player Zen um that's also done in python 980 00:40:42,800 --> 00:40:46,880 as well randomly generating the 981 00:40:44,119 --> 00:40:49,520 thumbnails but uh I think that's a bit 982 00:40:46,880 --> 00:40:52,280 too much to talk about today um lastly 983 00:40:49,520 --> 00:40:56,200 was the project a success 984 00:40:52,280 --> 00:40:57,960 um I left the bot running 24/7 between 985 00:40:56,200 --> 00:41:00,119 mid August to Mid setember last year so 986 00:40:57,960 --> 00:41:02,440 it was running for about 4 weeks uh 987 00:41:00,119 --> 00:41:04,000 straight in towards the end of last year 988 00:41:02,440 --> 00:41:06,000 and it managed to upload over a th000 989 00:41:04,000 --> 00:41:08,720 videos onto the YouTube channel uh 990 00:41:06,000 --> 00:41:10,200 without me interrupting it uh so it was 991 00:41:08,720 --> 00:41:12,640 successful in the fact that it did its 992 00:41:10,200 --> 00:41:14,960 job although it wasn't necessarily the 993 00:41:12,640 --> 00:41:18,800 most popular uh across that month it 994 00:41:14,960 --> 00:41:20,240 gained about 814 views total uh which 995 00:41:18,800 --> 00:41:21,599 like still quite a lot for me doing 996 00:41:20,240 --> 00:41:24,400 absolutely nothing and just leaving it 997 00:41:21,599 --> 00:41:26,680 running but uh that meant like it was 998 00:41:24,400 --> 00:41:28,040 averaging less than a viewer videos so 999 00:41:26,680 --> 00:41:30,400 there were quite a few videos that 1000 00:41:28,040 --> 00:41:33,240 reached probably in the T like probably 1001 00:41:30,400 --> 00:41:35,119 30 40 views but probably 80% of those 1002 00:41:33,240 --> 00:41:37,960 videos didn't even get a single view so 1003 00:41:35,119 --> 00:41:39,760 it was quite successful uh in doing its 1004 00:41:37,960 --> 00:41:42,480 job but not quite successful in many 1005 00:41:39,760 --> 00:41:44,880 people weren't really watching it um 1006 00:41:42,480 --> 00:41:44,880 thank you for 1007 00:41:50,079 --> 00:41:54,640 listening amazing four subscribers 1008 00:41:53,000 --> 00:41:56,040 though four subscribers I think you 1009 00:41:54,640 --> 00:41:58,720 reached five at one point until 1010 00:41:56,040 --> 00:42:00,280 subscribed 1011 00:41:58,720 --> 00:42:01,839 you got to wonder what's happening in 1012 00:42:00,280 --> 00:42:06,000 that that video to make someone 1013 00:42:01,839 --> 00:42:10,319 unsubscribe yeah I thank you so much 1014 00:42:06,000 --> 00:42:13,400 next up we have Annabelle Annabelle is 1015 00:42:10,319 --> 00:42:14,880 has been programming for three years oh 1016 00:42:13,400 --> 00:42:17,839 gosh hang 1017 00:42:14,880 --> 00:42:22,680 on uh this is going to be tricky all 1018 00:42:17,839 --> 00:42:22,680 right this Emoji depending yeah 1019 00:42:25,319 --> 00:42:30,160 it yeah I if if I were green and a lot 1020 00:42:28,480 --> 00:42:32,280 more 1021 00:42:30,160 --> 00:42:36,119 flexible 1022 00:42:32,280 --> 00:42:36,119 um yeah 1023 00:42:36,240 --> 00:42:41,079 Dragon I was really worried about that 1024 00:42:38,400 --> 00:42:42,319 one okay uh Annabelle's favorite emoji 1025 00:42:41,079 --> 00:42:46,240 is the dragon 1026 00:42:42,319 --> 00:42:48,040 Emoji um and the thing that she recently 1027 00:42:46,240 --> 00:42:51,359 learned and wanted to share with us 1028 00:42:48,040 --> 00:42:54,960 about computers which I tested out today 1029 00:42:51,359 --> 00:42:58,640 and can confirm works is that if you 1030 00:42:54,960 --> 00:43:01,040 Google best font ever 1031 00:42:58,640 --> 00:43:04,559 the font of Google changes to does 1032 00:43:01,040 --> 00:43:08,119 anyone want to guess which font comic 1033 00:43:04,559 --> 00:43:10,920 Sands beautiful uh I happen to test this 1034 00:43:08,119 --> 00:43:17,280 while also typoing and it still 1035 00:43:10,920 --> 00:43:19,440 worked so yes good uh good work there um 1036 00:43:17,280 --> 00:43:23,359 are we good 1037 00:43:19,440 --> 00:43:28,880 fantastic um okay can we give Annabelle 1038 00:43:23,359 --> 00:43:28,880 a big round of applause take it away 1039 00:43:30,119 --> 00:43:33,599 hi I'm Annabelle I'm a 16 years old and 1040 00:43:32,280 --> 00:43:35,920 I'm a recent graduate of glenunga 1041 00:43:33,599 --> 00:43:37,920 International High School from adalade 1042 00:43:35,920 --> 00:43:39,359 um I've been programming for three years 1043 00:43:37,920 --> 00:43:40,599 and today I'll be talking about my 1044 00:43:39,359 --> 00:43:43,440 project 1045 00:43:40,599 --> 00:43:45,000 Pythagoras so what is Pythagoras it's 1046 00:43:43,440 --> 00:43:46,760 kind of hard to explain so I'll let this 1047 00:43:45,000 --> 00:43:49,160 demonstrate here's a screenshot of a 1048 00:43:46,760 --> 00:43:50,760 video game Celeste the program analyzes 1049 00:43:49,160 --> 00:43:53,200 the image to determine which colors are 1050 00:43:50,760 --> 00:43:55,440 most similar to the provided SVG that 1051 00:43:53,200 --> 00:43:56,720 pride flag then replaces the colors 1052 00:43:55,440 --> 00:43:58,720 producing the pride flag you see on the 1053 00:43:56,720 --> 00:44:00,720 right hand inside essentially you get a 1054 00:43:58,720 --> 00:44:02,800 nice SVG using the same plette of your 1055 00:44:00,720 --> 00:44:04,640 image more technically it is a 1056 00:44:02,800 --> 00:44:06,680 multiplatform command line interface 1057 00:44:04,640 --> 00:44:08,520 program as well as an installable python 1058 00:44:06,680 --> 00:44:10,839 package all of which can be run entirely 1059 00:44:08,520 --> 00:44:12,599 in your terminal the original reason I 1060 00:44:10,839 --> 00:44:14,640 created it as seen here was to generate 1061 00:44:12,599 --> 00:44:16,440 Pride flags from the predominant colors 1062 00:44:14,640 --> 00:44:18,760 in a photo which leads me to my next 1063 00:44:16,440 --> 00:44:20,559 Point um you may now be thinking what 1064 00:44:18,760 --> 00:44:24,440 the hell am I going to use this for and 1065 00:44:20,559 --> 00:44:26,640 that's totally fair I don't know 1066 00:44:24,440 --> 00:44:28,800 anyways here's a short overview of the 1067 00:44:26,640 --> 00:44:30,880 process used to develop Pythagoras I'll 1068 00:44:28,800 --> 00:44:33,200 talk about a few of them here today um 1069 00:44:30,880 --> 00:44:35,480 using regular expressions numpy and 1070 00:44:33,200 --> 00:44:38,599 pillow to process images and extract 1071 00:44:35,480 --> 00:44:39,960 colors um determining similar colors 1072 00:44:38,599 --> 00:44:41,920 I'll talk about that a bit later 1073 00:44:39,960 --> 00:44:44,559 substituting colors into the final SVG 1074 00:44:41,920 --> 00:44:47,839 and then generating it and producing it 1075 00:44:44,559 --> 00:44:49,640 for the user to use so the first step is 1076 00:44:47,839 --> 00:44:51,920 to obtain a list of the colors from The 1077 00:44:49,640 --> 00:44:54,040 Source image that we can work with as a 1078 00:44:51,920 --> 00:44:56,040 command line program I used ARG paaths 1079 00:44:54,040 --> 00:44:58,240 to interpret the user's input to get the 1080 00:44:56,040 --> 00:45:00,240 path to the image then pillows very 1081 00:44:58,240 --> 00:45:01,440 convenient get colors function to obtain 1082 00:45:00,240 --> 00:45:03,880 a list of 1083 00:45:01,440 --> 00:45:06,559 colors next we do the same thing but 1084 00:45:03,880 --> 00:45:08,480 with SVG svgs are a type of vector image 1085 00:45:06,559 --> 00:45:11,040 format that can be scaled infinitely 1086 00:45:08,480 --> 00:45:12,720 while still um preserving quality so 1087 00:45:11,040 --> 00:45:15,760 they're fairly popular for representing 1088 00:45:12,720 --> 00:45:17,760 icons and in my case flags colors are 1089 00:45:15,760 --> 00:45:19,200 present in svgs as hex codes so the 1090 00:45:17,760 --> 00:45:21,960 question is how do we find all those hex 1091 00:45:19,200 --> 00:45:25,520 codes the answer is unfortunately 1092 00:45:21,960 --> 00:45:27,440 Rex so hex hex codes as we usually know 1093 00:45:25,520 --> 00:45:28,880 them generally take the same form they 1094 00:45:27,440 --> 00:45:30,599 start with a hashtag and they have six 1095 00:45:28,880 --> 00:45:32,400 characters after them so it should be 1096 00:45:30,599 --> 00:45:36,839 pretty easy to find and extract a hex 1097 00:45:32,400 --> 00:45:36,839 code using a regular expression such as 1098 00:45:37,040 --> 00:45:41,359 this so here's a reminder of the Rex I 1099 00:45:39,960 --> 00:45:44,400 developed from the previous slide it 1100 00:45:41,359 --> 00:45:47,000 looks great so let's test this out so 1101 00:45:44,400 --> 00:45:49,359 here we have a have some code for an SVG 1102 00:45:47,000 --> 00:45:52,400 that's filled with a a shade of magenta 1103 00:45:49,359 --> 00:45:54,119 so that one matches great okay so it 1104 00:45:52,400 --> 00:45:55,839 doesn't seem to work with three digit 1105 00:45:54,119 --> 00:45:58,040 hex codes that's because we only check 1106 00:45:55,839 --> 00:46:00,520 for six and 1107 00:45:58,040 --> 00:46:02,720 finally I failed to account for the fact 1108 00:46:00,520 --> 00:46:06,119 that SVG support arbitrary color names 1109 00:46:02,720 --> 00:46:10,559 as fill colors including Papa whip which 1110 00:46:06,119 --> 00:46:10,559 is quite frankly a nonsense name for a 1111 00:46:10,720 --> 00:46:15,319 color so now you need to remember that 1112 00:46:13,520 --> 00:46:16,880 at the time I was making this it was 1113 00:46:15,319 --> 00:46:19,200 originally intended to only be used for 1114 00:46:16,880 --> 00:46:22,040 Pride Flags so I seeded the program with 1115 00:46:19,200 --> 00:46:24,520 an assortment of pride flag SVG files 1116 00:46:22,040 --> 00:46:26,200 that users could use by default this of 1117 00:46:24,520 --> 00:46:28,720 course meant that I had to check if all 1118 00:46:26,200 --> 00:46:30,920 the colors in in my template svgs would 1119 00:46:28,720 --> 00:46:32,440 actually work with my program and they 1120 00:46:30,920 --> 00:46:34,119 weren't affected by any of the three 1121 00:46:32,440 --> 00:46:36,200 issues the issues I saw on the previous 1122 00:46:34,119 --> 00:46:38,160 slide so I thought to myself I'm a 1123 00:46:36,200 --> 00:46:40,920 programmer I can make a quick program to 1124 00:46:38,160 --> 00:46:42,960 like sort that all out instead of being 1125 00:46:40,920 --> 00:46:46,280 boring and reading through all my SVG 1126 00:46:42,960 --> 00:46:47,839 files to exchange them manually so I 1127 00:46:46,280 --> 00:46:49,800 went through each file and exchange it 1128 00:46:47,839 --> 00:46:52,520 man exchange it man manually and you can 1129 00:46:49,800 --> 00:46:55,960 see there bunch of files I changed um 1130 00:46:52,520 --> 00:46:57,640 took me over an hour don't do it so 1131 00:46:55,960 --> 00:46:59,680 later on I went ahead and wrote a 1132 00:46:57,640 --> 00:47:02,359 function this converts all three-digit 1133 00:46:59,680 --> 00:47:05,079 hex codes into six-digit hex codes 1134 00:47:02,359 --> 00:47:07,440 converts um nonsense color names into 1135 00:47:05,079 --> 00:47:09,880 actual hex codes by reading from a Json 1136 00:47:07,440 --> 00:47:12,480 file so it standard basically 1137 00:47:09,880 --> 00:47:15,440 standardizes the svgs to be used 1138 00:47:12,480 --> 00:47:17,280 normally okay next the reason why I 1139 00:47:15,440 --> 00:47:19,839 wanted to extract the hex codes of each 1140 00:47:17,280 --> 00:47:22,200 color is because it's easier to find 1141 00:47:19,839 --> 00:47:24,599 similar colors this way colors can also 1142 00:47:22,200 --> 00:47:26,160 be expressed in an RGB format we can 1143 00:47:24,599 --> 00:47:27,920 show this as a topple consisting of 1144 00:47:26,160 --> 00:47:29,760 three elements the red component the 1145 00:47:27,920 --> 00:47:31,640 green component and the blue component 1146 00:47:29,760 --> 00:47:33,839 if we think of these colors as points in 1147 00:47:31,640 --> 00:47:35,440 3D Vector space then the similarity of 1148 00:47:33,839 --> 00:47:37,520 two colors can be found by determining 1149 00:47:35,440 --> 00:47:40,119 the shortest distance between them or 1150 00:47:37,520 --> 00:47:42,760 like the modulus of the vector between 1151 00:47:40,119 --> 00:47:44,960 them here I use Python's math module to 1152 00:47:42,760 --> 00:47:47,559 find the linear distance between any two 1153 00:47:44,960 --> 00:47:50,079 colors then ultimately identify which 1154 00:47:47,559 --> 00:47:52,680 pairing produced the minimum 1155 00:47:50,079 --> 00:47:54,680 difference theoretically this works the 1156 00:47:52,680 --> 00:47:56,520 problem is that colors that the program 1157 00:47:54,680 --> 00:47:58,440 deems are similar aren't really what we 1158 00:47:56,520 --> 00:48:00,240 would consider the same for instance 1159 00:47:58,440 --> 00:48:01,920 it's generally agreed upon that the 1160 00:48:00,240 --> 00:48:04,040 human eye can distinguish more shades of 1161 00:48:01,920 --> 00:48:06,200 green than anything else and the way 1162 00:48:04,040 --> 00:48:07,800 that each individual person um sees 1163 00:48:06,200 --> 00:48:09,680 color is always going to be different 1164 00:48:07,800 --> 00:48:12,130 even just by a small amount here's an 1165 00:48:09,680 --> 00:48:14,119 example I'm sure many of you 1166 00:48:12,130 --> 00:48:16,200 [Music] 1167 00:48:14,119 --> 00:48:18,079 recognize so one night when searching 1168 00:48:16,200 --> 00:48:19,839 for a solution to this issue I stumbled 1169 00:48:18,079 --> 00:48:21,200 upon this website which provided handy 1170 00:48:19,839 --> 00:48:23,240 conversion for colors into different 1171 00:48:21,200 --> 00:48:25,119 color spaces in particular there's 1172 00:48:23,240 --> 00:48:27,040 something called the cab color space 1173 00:48:25,119 --> 00:48:29,319 which aims to accurately replicate how 1174 00:48:27,040 --> 00:48:31,599 humans observe color by recognizing that 1175 00:48:29,319 --> 00:48:33,440 it's really actually quite nonlinear I 1176 00:48:31,599 --> 00:48:36,240 added a python implementation to convert 1177 00:48:33,440 --> 00:48:38,400 an RGB tle into a cab topple as an 1178 00:48:36,240 --> 00:48:40,559 alternative algorithm to just straight 1179 00:48:38,400 --> 00:48:43,079 Pythagoras's Theorem this generally 1180 00:48:40,559 --> 00:48:44,839 produces more accurate um results in 1181 00:48:43,079 --> 00:48:46,920 terms of color perception but it isn't 1182 00:48:44,839 --> 00:48:49,280 always the 1183 00:48:46,920 --> 00:48:51,160 case Okay a lot of things about this 1184 00:48:49,280 --> 00:48:52,599 project are subjective for instance how 1185 00:48:51,160 --> 00:48:55,160 do you know that the colors the program 1186 00:48:52,599 --> 00:48:58,240 spits out are actually like from my 1187 00:48:55,160 --> 00:48:59,920 image there are two parts of this first 1188 00:48:58,240 --> 00:49:02,359 you log the coordinates of where the 1189 00:48:59,920 --> 00:49:04,599 colors are found numpy lets you do this 1190 00:49:02,359 --> 00:49:06,200 provided you pass it an image you are 1191 00:49:04,599 --> 00:49:08,720 then able to retrieve a two-dimensional 1192 00:49:06,200 --> 00:49:10,839 array where each cell is equivalent to a 1193 00:49:08,720 --> 00:49:12,400 pixel correspondingly each cell 1194 00:49:10,839 --> 00:49:14,480 represents a color from the original 1195 00:49:12,400 --> 00:49:16,440 image all that's left to do is filter 1196 00:49:14,480 --> 00:49:18,520 for the colors that we want then get the 1197 00:49:16,440 --> 00:49:20,079 coordinates from there secondly you have 1198 00:49:18,520 --> 00:49:21,760 to actually actually find a way to 1199 00:49:20,079 --> 00:49:22,839 represent the coordinates on the image 1200 00:49:21,760 --> 00:49:25,280 which is something that we can do with 1201 00:49:22,839 --> 00:49:27,079 pillow I wrote a function to dynamically 1202 00:49:25,280 --> 00:49:28,960 size and draw a surrounding Circle based 1203 00:49:27,079 --> 00:49:30,880 on the size of the original image so if 1204 00:49:28,960 --> 00:49:33,359 you enable the Highlight flag a new 1205 00:49:30,880 --> 00:49:35,079 image will be produced with red circles 1206 00:49:33,359 --> 00:49:37,359 uh you can probably see a couple over 1207 00:49:35,079 --> 00:49:40,160 there um showing where each of the 1208 00:49:37,359 --> 00:49:42,079 similar colors can be found so yeah just 1209 00:49:40,160 --> 00:49:45,240 check over there and each of those red 1210 00:49:42,079 --> 00:49:47,400 circles corresponds to one color on the 1211 00:49:45,240 --> 00:49:50,000 final 1212 00:49:47,400 --> 00:49:51,640 SVG okay I'll be showing a few other 1213 00:49:50,000 --> 00:49:54,920 examples here with brand logos that 1214 00:49:51,640 --> 00:49:56,880 you're probably familiar with um here's 1215 00:49:54,920 --> 00:49:59,119 a quick example using a screenshot my 1216 00:49:56,880 --> 00:50:01,359 terminal and the slack logo using the 1217 00:49:59,119 --> 00:50:04,400 cab algorithm so using it you can see it 1218 00:50:01,359 --> 00:50:06,680 produces a more muted 1219 00:50:04,400 --> 00:50:08,760 color and here's another one that uses a 1220 00:50:06,680 --> 00:50:11,200 picture of alen snakes live bag and the 1221 00:50:08,760 --> 00:50:12,599 Google logo with a low cost approxim 1222 00:50:11,200 --> 00:50:15,599 approximation this is a different 1223 00:50:12,599 --> 00:50:16,920 algorithm um the not noticeable change 1224 00:50:15,599 --> 00:50:18,880 here is that the program has found a 1225 00:50:16,920 --> 00:50:21,280 lighter blue on the source image to be 1226 00:50:18,880 --> 00:50:24,720 most similar to the original 1227 00:50:21,280 --> 00:50:28,040 color um I've got a video demo here but 1228 00:50:24,720 --> 00:50:31,400 I can do a demo uh like a actual live 1229 00:50:28,040 --> 00:50:31,400 demo if that 1230 00:50:33,000 --> 00:50:36,000 works 1231 00:50:36,240 --> 00:50:42,920 okay open my terminal over here feel you 1232 00:50:39,480 --> 00:50:42,920 can see that 1233 00:51:03,119 --> 00:51:08,640 okay that what I feel so um you can see 1234 00:51:06,480 --> 00:51:11,640 there are a couple of things in that um 1235 00:51:08,640 --> 00:51:16,920 pan line aduino PNG represents my source 1236 00:51:11,640 --> 00:51:19,680 image um- F Pyon SVG so I've decided to 1237 00:51:16,920 --> 00:51:21,960 uh see if I can rep replicate the Pyon 1238 00:51:19,680 --> 00:51:24,559 um logo using my image source image 1239 00:51:21,960 --> 00:51:26,680 Arduino PNG and there are two flags 1240 00:51:24,559 --> 00:51:29,160 verose and highlight highlight will 1241 00:51:26,680 --> 00:51:32,119 produce the red circles and verose will 1242 00:51:29,160 --> 00:51:32,119 just log a bunch of 1243 00:51:33,440 --> 00:51:40,200 stuff okay hopefully that 1244 00:51:36,400 --> 00:51:40,200 works yeah so there we 1245 00:51:40,839 --> 00:51:44,119 go and 1246 00:51:44,559 --> 00:51:50,000 now I will open the actual image 1247 00:51:57,119 --> 00:51:59,440 okay 1248 00:52:01,400 --> 00:52:09,520 so don't know if that's opened open 1249 00:52:06,559 --> 00:52:13,079 yourt oh it's opened here 1250 00:52:09,520 --> 00:52:16,000 yeah that is the pon logo that it's 1251 00:52:13,079 --> 00:52:17,480 disappeared again that's the pon logo um 1252 00:52:16,000 --> 00:52:20,680 generated 1253 00:52:17,480 --> 00:52:23,079 from this random picture of an Arduino I 1254 00:52:20,680 --> 00:52:23,079 had lying 1255 00:52:23,160 --> 00:52:29,240 around and if you look at the logo logo 1256 00:52:27,160 --> 00:52:31,240 up here that's the original one and this 1257 00:52:29,240 --> 00:52:33,640 is my new one and this one you can Al 1258 00:52:31,240 --> 00:52:34,440 also see is kind of less saturated than 1259 00:52:33,640 --> 00:52:41,280 the 1260 00:52:34,440 --> 00:52:41,280 original okay um now go back to our 1261 00:52:42,720 --> 00:52:45,720 presentation 1262 00:52:46,160 --> 00:52:50,480 yeah okay so a couple other things about 1263 00:52:48,680 --> 00:52:52,200 this program um I've documented a lot of 1264 00:52:50,480 --> 00:52:54,079 it online and also provided tools for 1265 00:52:52,200 --> 00:52:56,079 debugging and development in an open 1266 00:52:54,079 --> 00:52:58,720 source repository um there are a few 1267 00:52:56,079 --> 00:53:01,160 floors however and that's uh it's quite 1268 00:52:58,720 --> 00:53:03,079 slow when you run it with large um large 1269 00:53:01,160 --> 00:53:05,040 images high resolution images and 1270 00:53:03,079 --> 00:53:07,440 secondly it favors exact color matches 1271 00:53:05,040 --> 00:53:09,160 over the dominant pette of the image so 1272 00:53:07,440 --> 00:53:11,280 it's easier for the program to find 1273 00:53:09,160 --> 00:53:13,520 exact color matches but they don't fully 1274 00:53:11,280 --> 00:53:16,359 like represent the image um lastly it 1275 00:53:13,520 --> 00:53:17,920 doesn't support some more complex svgs I 1276 00:53:16,359 --> 00:53:21,440 haven't looked a bit too much into that 1277 00:53:17,920 --> 00:53:25,559 because I only found about it last night 1278 00:53:21,440 --> 00:53:27,920 and so yeah does it work technically it 1279 00:53:25,559 --> 00:53:30,319 does and you can try it out by typing uh 1280 00:53:27,920 --> 00:53:32,640 pip install Pythagoras wherever you want 1281 00:53:30,319 --> 00:53:34,760 um haven't been haven't tested it on Mac 1282 00:53:32,640 --> 00:53:36,160 though uh so over the course of this 1283 00:53:34,760 --> 00:53:40,079 presentation did I think of any more 1284 00:53:36,160 --> 00:53:42,960 uses for it uh no uh it's essentially a 1285 00:53:40,079 --> 00:53:45,599 novelty tool but did I have fun making 1286 00:53:42,960 --> 00:53:45,599 it 1287 00:53:45,640 --> 00:53:50,240 absolutely 1288 00:53:48,319 --> 00:53:54,640 yeah thank you for 1289 00:53:50,240 --> 00:53:59,000 [Applause] 1290 00:53:54,640 --> 00:54:02,319 listening thank you so much I I um I 1291 00:53:59,000 --> 00:54:03,720 needed to pause and take a photo of that 1292 00:54:02,319 --> 00:54:06,119 uh yeah come on come on Deck come on 1293 00:54:03,720 --> 00:54:07,920 deck of your last de because I'm going 1294 00:54:06,119 --> 00:54:11,280 to be making sure that those links are 1295 00:54:07,920 --> 00:54:12,880 posted in the education track on Discord 1296 00:54:11,280 --> 00:54:16,440 uh because you may not have thought of 1297 00:54:12,880 --> 00:54:19,640 use for this but I guarantee you that in 1298 00:54:16,440 --> 00:54:22,640 the audience you have a lot of people uh 1299 00:54:19,640 --> 00:54:26,079 trying to find and finding good uses for 1300 00:54:22,640 --> 00:54:30,200 this thank you so much next up the 1301 00:54:26,079 --> 00:54:31,720 second last talk is Toby Toby has been 1302 00:54:30,200 --> 00:54:37,920 programming 1303 00:54:31,720 --> 00:54:40,280 for 5 to six years um oh gosh okay his 1304 00:54:37,920 --> 00:54:40,280 favorite 1305 00:54:42,200 --> 00:54:50,200 emoji eyes eyes yes okay 1306 00:54:46,440 --> 00:54:51,920 yeah um and recently he made the mistake 1307 00:54:50,200 --> 00:54:54,559 of learning about pointers and now they 1308 00:54:51,920 --> 00:54:56,680 haunt your 1309 00:54:54,559 --> 00:54:59,920 nightmares we've all been there we've 1310 00:54:56,680 --> 00:55:02,359 all been there Tak it away Toby hello um 1311 00:54:59,920 --> 00:55:04,760 I am Toby and I really like noise 1312 00:55:02,359 --> 00:55:06,680 algorithms I find them really cool the 1313 00:55:04,760 --> 00:55:09,280 fact that a computer can take in some 1314 00:55:06,680 --> 00:55:11,079 random inputs in a vector and return 1315 00:55:09,280 --> 00:55:12,839 value that's like kind of like its 1316 00:55:11,079 --> 00:55:13,799 neighbors but kind of different is 1317 00:55:12,839 --> 00:55:16,319 really 1318 00:55:13,799 --> 00:55:18,440 fascinating um but what is a noise 1319 00:55:16,319 --> 00:55:20,559 function a noise is the name for the 1320 00:55:18,440 --> 00:55:22,559 output from a noise function and will 1321 00:55:20,559 --> 00:55:24,599 typically be a value between 0 and 1 or 1322 00:55:22,559 --> 00:55:27,079 0 and 1323 00:55:24,599 --> 00:55:30,480 255 it can take several forms it can be 1324 00:55:27,079 --> 00:55:32,400 2D 3D 1D or even 4D depending on the 1325 00:55:30,480 --> 00:55:34,520 function many noise functions can 1326 00:55:32,400 --> 00:55:37,440 actually be fairly easily adapted to 1327 00:55:34,520 --> 00:55:39,520 work in any Dimension n uh but yeah 1328 00:55:37,440 --> 00:55:41,960 that's the main three that noise 1329 00:55:39,520 --> 00:55:44,119 functions normally work in uh here's 1330 00:55:41,960 --> 00:55:45,839 some examples of noise functions so a 1331 00:55:44,119 --> 00:55:47,520 lot of noise functions will output 1332 00:55:45,839 --> 00:55:49,839 complex gradients like the ones I'm 1333 00:55:47,520 --> 00:55:51,680 showing now they've got a really large 1334 00:55:49,839 --> 00:55:53,720 amount of use cases I've personally seen 1335 00:55:51,680 --> 00:55:55,280 them be used for train generation where 1336 00:55:53,720 --> 00:55:57,680 the values returned will correspond to 1337 00:55:55,280 --> 00:55:59,520 Heights so we've got pein noise which is 1338 00:55:57,680 --> 00:56:01,720 some fancy product of vector dot 1339 00:55:59,520 --> 00:56:03,920 products uh then fractal pear noise 1340 00:56:01,720 --> 00:56:06,160 where you layer multiple ones Veron 1341 00:56:03,920 --> 00:56:08,559 noise where you get uh random points and 1342 00:56:06,160 --> 00:56:10,839 find the distance to them Simplex noise 1343 00:56:08,559 --> 00:56:13,400 which I have no idea and my one which 1344 00:56:10,839 --> 00:56:15,799 has been colored fractal iterative Point 1345 00:56:13,400 --> 00:56:18,760 averaging um so this sort of thing can 1346 00:56:15,799 --> 00:56:22,280 be seen in games like Minecraft which is 1347 00:56:18,760 --> 00:56:24,319 a 3D sandbox and Terraria a 2d sandbox 1348 00:56:22,280 --> 00:56:26,480 both of these games rely really heavily 1349 00:56:24,319 --> 00:56:29,039 on noise functions to help create the 1350 00:56:26,480 --> 00:56:31,880 random and in Minecraft's case infinite 1351 00:56:29,039 --> 00:56:34,119 or near infinite uh terrain 1352 00:56:31,880 --> 00:56:37,000 generation noise can also be used for 1353 00:56:34,119 --> 00:56:38,880 animated textures and CGI in fact one of 1354 00:56:37,000 --> 00:56:40,920 the first noise functions invented was 1355 00:56:38,880 --> 00:56:42,760 pein noise and it was invented for the 1356 00:56:40,920 --> 00:56:44,680 movie Tron where it was used to create 1357 00:56:42,760 --> 00:56:47,240 land masses cycling textures and 1358 00:56:44,680 --> 00:56:49,680 probably way more but uh it's hard to 1359 00:56:47,240 --> 00:56:52,920 find specific use cases for it in 1360 00:56:49,680 --> 00:56:54,400 it uh I came up with a basic idea behind 1361 00:56:52,920 --> 00:56:57,480 the noise algorithm that I'll be talking 1362 00:56:54,400 --> 00:57:00,319 about back in like April of 1363 00:56:57,480 --> 00:57:02,400 2023 I think and I was still just 1364 00:57:00,319 --> 00:57:03,799 getting the hang of python back then so 1365 00:57:02,400 --> 00:57:06,079 I made the first version of the 1366 00:57:03,799 --> 00:57:07,640 algorithm in scratch and I was going to 1367 00:57:06,079 --> 00:57:10,640 talk about that but it was like 12 1368 00:57:07,640 --> 00:57:12,039 minutes so I cut that bit out um it's 1369 00:57:10,640 --> 00:57:13,799 actually a really simple algorithm 1370 00:57:12,039 --> 00:57:16,559 though uh you start by placing any 1371 00:57:13,799 --> 00:57:18,079 amount of points on like a pixel canvas 1372 00:57:16,559 --> 00:57:20,960 each with a completely random value 1373 00:57:18,079 --> 00:57:22,760 assigned between 0 and 255 next you get 1374 00:57:20,960 --> 00:57:25,640 a list of all the possible coordinates 1375 00:57:22,760 --> 00:57:26,799 shuffle them and then go through uh it 1376 00:57:25,640 --> 00:57:28,359 one by one 1377 00:57:26,799 --> 00:57:30,160 for each element of that list you place 1378 00:57:28,359 --> 00:57:31,680 a point at the specified coordinates 1379 00:57:30,160 --> 00:57:33,839 then Loop over all the points to find 1380 00:57:31,680 --> 00:57:35,400 the two closest points to it the new 1381 00:57:33,839 --> 00:57:37,640 points value is set to the average of 1382 00:57:35,400 --> 00:57:39,720 the two closest points and once that's 1383 00:57:37,640 --> 00:57:41,240 done you move on to the next once you've 1384 00:57:39,720 --> 00:57:42,640 done this for all the points in the list 1385 00:57:41,240 --> 00:57:44,079 you're able to step back and view the 1386 00:57:42,640 --> 00:57:46,920 finished 1387 00:57:44,079 --> 00:57:49,200 texture now the only problem with this 1388 00:57:46,920 --> 00:57:50,960 is that the time it takes to generate is 1389 00:57:49,200 --> 00:57:52,640 proportional to the amount of points or 1390 00:57:50,960 --> 00:57:54,839 the product of the length and the height 1391 00:57:52,640 --> 00:57:56,839 multiplied by themselves so in Big O 1392 00:57:54,839 --> 00:58:00,960 notation that's o of n s 1393 00:57:56,839 --> 00:58:02,680 and we do not like quadratic uh Bigos no 1394 00:58:00,960 --> 00:58:04,760 um so it kind of goes without saying I 1395 00:58:02,680 --> 00:58:07,039 knew I'd have to optimize it eventually 1396 00:58:04,760 --> 00:58:09,720 but to start with I ignored it because I 1397 00:58:07,039 --> 00:58:12,520 didn't know how um I was still getting 1398 00:58:09,720 --> 00:58:14,400 the hang of python at this point and so 1399 00:58:12,520 --> 00:58:16,559 I decided to get it working before I 1400 00:58:14,400 --> 00:58:19,280 tried to fix this uh because you can't 1401 00:58:16,559 --> 00:58:22,799 like make something better if it's not 1402 00:58:19,280 --> 00:58:24,680 there at all um but I had a fix in my 1403 00:58:22,799 --> 00:58:26,720 mind but I had zero clue on how to 1404 00:58:24,680 --> 00:58:28,799 implement it 1405 00:58:26,720 --> 00:58:31,240 uh so this is the first uh sort of 1406 00:58:28,799 --> 00:58:33,280 iteration of the code uh start by 1407 00:58:31,240 --> 00:58:35,160 importing some libraries and defining 1408 00:58:33,280 --> 00:58:37,359 some parameters so we've got starting 1409 00:58:35,160 --> 00:58:39,000 complexity which is the number of random 1410 00:58:37,359 --> 00:58:41,319 points we start off with with completely 1411 00:58:39,000 --> 00:58:43,319 random values uh we've got the 1412 00:58:41,319 --> 00:58:45,240 iterations total number of points to be 1413 00:58:43,319 --> 00:58:47,000 placed because for this one for some 1414 00:58:45,240 --> 00:58:48,839 reason I wasn't doing the shuffling the 1415 00:58:47,000 --> 00:58:50,400 random coordinates I was just placing 1416 00:58:48,839 --> 00:58:52,799 them at random places and hoping it 1417 00:58:50,400 --> 00:58:55,039 worked out uh and then the resolution 1418 00:58:52,799 --> 00:58:56,559 which is the size of the place pixels so 1419 00:58:55,039 --> 00:58:59,039 you can increase the res res olution to 1420 00:58:56,559 --> 00:59:02,119 make it sort of blob and decrease it to 1421 00:58:59,039 --> 00:59:05,880 make it uh not hide the bits it missed 1422 00:59:02,119 --> 00:59:07,640 as much um so the yeah instead of 1423 00:59:05,880 --> 00:59:09,880 randomizing the coordinate list points 1424 00:59:07,640 --> 00:59:11,559 are generated with random coordinates 1425 00:59:09,880 --> 00:59:14,160 and yeah the main problems with that 1426 00:59:11,559 --> 00:59:15,960 approach were that uh one you couldn't 1427 00:59:14,160 --> 00:59:17,799 guarantee that points wouldn't be 1428 00:59:15,960 --> 00:59:18,960 repeated it wouldn't overlap one point 1429 00:59:17,799 --> 00:59:21,520 with another one that had already been 1430 00:59:18,960 --> 00:59:23,920 done and two you couldn't guarantee that 1431 00:59:21,520 --> 00:59:26,960 every point was hit um not sure why I 1432 00:59:23,920 --> 00:59:29,839 did it like that but I did 1433 00:59:26,960 --> 00:59:31,880 uh so yeah changing the resolution can 1434 00:59:29,839 --> 00:59:34,720 compensate for any missed or overlapped 1435 00:59:31,880 --> 00:59:36,599 parts and a final step called Smooth 1436 00:59:34,720 --> 00:59:38,079 iterations involves processing every 1437 00:59:36,599 --> 00:59:40,720 point to set it to the average of its 1438 00:59:38,079 --> 00:59:44,119 neighbors uh average of its nonzero 1439 00:59:40,720 --> 00:59:45,680 neighbors um and you average it onto a 1440 00:59:44,119 --> 00:59:47,000 buffer frame so that you're not 1441 00:59:45,680 --> 00:59:48,240 averaging ones that have already been 1442 00:59:47,000 --> 00:59:49,000 averaged because that can create like 1443 00:59:48,240 --> 00:59:51,880 weird 1444 00:59:49,000 --> 00:59:53,559 smears create Point function uh it will 1445 00:59:51,880 --> 00:59:55,799 generate a random X and Y position 1446 00:59:53,559 --> 00:59:58,680 within the bounds of the screen called 1447 00:59:55,799 --> 01:00:00,720 uh oh GL get closest points and set the 1448 00:59:58,680 --> 01:00:03,520 height to the average and add that to 1449 01:00:00,720 --> 01:00:05,400 the list add that point to the list get 1450 01:00:03,520 --> 01:00:08,200 closest points is such a great function 1451 01:00:05,400 --> 01:00:09,799 that I have no clue how it works um I 1452 01:00:08,200 --> 01:00:11,680 yed it from like stack Overflow or 1453 01:00:09,799 --> 01:00:14,000 something when I was first making this 1454 01:00:11,680 --> 01:00:16,079 because I was using Pythagoras Theorem 1455 01:00:14,000 --> 01:00:18,039 to just find the closest points but that 1456 01:00:16,079 --> 01:00:20,079 was really slow and I wanted to speed it 1457 01:00:18,039 --> 01:00:22,880 up it still took like 6 hours to 1458 01:00:20,079 --> 01:00:24,799 generate like a 1,00 by 1000 pixel thing 1459 01:00:22,880 --> 01:00:27,400 though um so yeah originally used 1460 01:00:24,799 --> 01:00:30,440 Pythagoras theem to find the 1461 01:00:27,400 --> 01:00:32,799 points uh and then for Loops we create 1462 01:00:30,440 --> 01:00:33,760 all the starting points create all the 1463 01:00:32,799 --> 01:00:37,079 point 1464 01:00:33,760 --> 01:00:38,880 points and in the main Loop we have some 1465 01:00:37,079 --> 01:00:41,599 basic uh the main Loop is just one in 1466 01:00:38,880 --> 01:00:43,480 the like bottom rsh sort of corner we 1467 01:00:41,599 --> 01:00:45,119 have some basic P game Necessities cuz 1468 01:00:43,480 --> 01:00:47,000 Pi gamees the library I was using to 1469 01:00:45,119 --> 01:00:49,680 visualize all this so I could update the 1470 01:00:47,000 --> 01:00:52,559 C Level because I am visualizing the 1471 01:00:49,680 --> 01:00:54,400 noise in this one as sort of like red I 1472 01:00:52,559 --> 01:00:56,440 mean blue and green 1473 01:00:54,400 --> 01:00:59,960 Islands um so yeah we Loop over 1474 01:00:56,440 --> 01:01:01,400 everything Set uh each Point's color to 1475 01:00:59,960 --> 01:01:03,000 a function of the sea level and its 1476 01:01:01,400 --> 01:01:05,400 height and then draw a circle of radius 1477 01:01:03,000 --> 01:01:07,280 equal to the resolution I was pretty 1478 01:01:05,400 --> 01:01:08,920 happy with that um I had to leave it 1479 01:01:07,280 --> 01:01:10,280 running in the morning go to school and 1480 01:01:08,920 --> 01:01:13,319 come back and it still wouldn't be 1481 01:01:10,280 --> 01:01:15,160 finished but uh it still worked and that 1482 01:01:13,319 --> 01:01:18,200 was good enough for 1483 01:01:15,160 --> 01:01:20,520 now um eventually though at the start of 1484 01:01:18,200 --> 01:01:22,799 2024 I was working on like a really 1485 01:01:20,520 --> 01:01:24,319 boring assignment for English and I was 1486 01:01:22,799 --> 01:01:26,640 desperate to procrastinate so I opened 1487 01:01:24,319 --> 01:01:29,039 up my python IDE and look through my old 1488 01:01:26,640 --> 01:01:30,480 projects before finding this one again I 1489 01:01:29,039 --> 01:01:32,599 decided I was ready to tackle the 1490 01:01:30,480 --> 01:01:34,760 problem of optimization and my idea for 1491 01:01:32,599 --> 01:01:36,960 this was to use 1492 01:01:34,760 --> 01:01:38,280 trunks at the moment due to the fact 1493 01:01:36,960 --> 01:01:40,280 that I was drawing all the points in a 1494 01:01:38,280 --> 01:01:41,720 single list to find any information 1495 01:01:40,280 --> 01:01:43,520 about the distances to the reference 1496 01:01:41,720 --> 01:01:45,680 point I had to Loop over every single 1497 01:01:43,520 --> 01:01:46,960 point when as a human I'd be able to say 1498 01:01:45,680 --> 01:01:48,280 I don't need to worry about those points 1499 01:01:46,960 --> 01:01:51,599 or those points I can just worry about 1500 01:01:48,280 --> 01:01:53,640 the ones right near it to fix this uh I 1501 01:01:51,599 --> 01:01:56,279 can store each point in a chunk so as 1502 01:01:53,640 --> 01:01:58,319 I've shown there each chunk uh led by 1503 01:01:56,279 --> 01:02:00,319 the S like Boulder lines represents a 1504 01:01:58,319 --> 01:02:02,640 portion of the screen that's X pixels by 1505 01:02:00,319 --> 01:02:03,920 X pixels big and these trunks would be 1506 01:02:02,640 --> 01:02:06,440 arranged in a grid 1507 01:02:03,920 --> 01:02:08,720 pattern I can then access the trunk of 1508 01:02:06,440 --> 01:02:10,400 any specific point shown by the Red Dot 1509 01:02:08,720 --> 01:02:12,520 and only check its trunk and the 1510 01:02:10,400 --> 01:02:13,799 neighboring trunks for close points this 1511 01:02:12,520 --> 01:02:16,079 means that the total amount of points 1512 01:02:13,799 --> 01:02:18,240 I'm looping over for any one point goes 1513 01:02:16,079 --> 01:02:21,799 from n where n is the amount of pixels 1514 01:02:18,240 --> 01:02:23,920 on the sample down to 3 * the chunk size 1515 01:02:21,799 --> 01:02:26,319 squared where C is the size of each 1516 01:02:23,920 --> 01:02:28,480 chunk and because C is a constant that 1517 01:02:26,319 --> 01:02:31,520 doesn't change with the input uh pixel 1518 01:02:28,480 --> 01:02:33,240 um mounts uh this is now a linear 1519 01:02:31,520 --> 01:02:36,760 scaling which is a lot better than 1520 01:02:33,240 --> 01:02:38,839 quadratic yay uh but to implement this I 1521 01:02:36,760 --> 01:02:40,520 needed to create a 2d Matrix of chunks 1522 01:02:38,839 --> 01:02:42,640 where each chunk contained in of itself 1523 01:02:40,520 --> 01:02:45,480 a 2d Matrix of points making for a 40 1524 01:02:42,640 --> 01:02:47,279 Matrix in total um and then I can just 1525 01:02:45,480 --> 01:02:51,240 reference a specific point in The Matrix 1526 01:02:47,279 --> 01:02:53,599 with like Matrix trunk X trunk y point x 1527 01:02:51,240 --> 01:02:54,960 point Y and that's actually it's like 1528 01:02:53,599 --> 01:02:57,160 python is so nice to that sort of thing 1529 01:02:54,960 --> 01:02:59,480 it's so easy 1530 01:02:57,160 --> 01:03:02,480 uh so it starts off the same uh reset 1531 01:02:59,480 --> 01:03:06,559 chunk map just generates a 40 Matrix 1532 01:03:02,480 --> 01:03:09,240 with every Point height set to ne1 we uh 1533 01:03:06,559 --> 01:03:11,799 generate some complexity points more for 1534 01:03:09,240 --> 01:03:14,640 Loops uh check if the random value 1535 01:03:11,799 --> 01:03:16,559 between zero and point Chan is one if so 1536 01:03:14,640 --> 01:03:18,839 it sets that point to a random height so 1537 01:03:16,559 --> 01:03:21,000 so for this version we are starting off 1538 01:03:18,839 --> 01:03:22,799 by putting random uh putting random 1539 01:03:21,000 --> 01:03:25,200 points with a random chance in each 1540 01:03:22,799 --> 01:03:27,160 trunk instead of putting a predetermined 1541 01:03:25,200 --> 01:03:28,240 amount of trunks uh points randomly in 1542 01:03:27,160 --> 01:03:31,400 every 1543 01:03:28,240 --> 01:03:33,920 chunk um and then everything oh I love 1544 01:03:31,400 --> 01:03:34,760 all Chords it's like some monstrosity of 1545 01:03:33,920 --> 01:03:38,559 list 1546 01:03:34,760 --> 01:03:40,039 comprehension um it hurts me to look at 1547 01:03:38,559 --> 01:03:41,319 but I think I probably learned about it 1548 01:03:40,039 --> 01:03:46,319 a couple weeks before and I was like 1549 01:03:41,319 --> 01:03:49,920 this is a great use case um it wasn't 1550 01:03:46,319 --> 01:03:51,119 so yeah uh generate points Loops over 1551 01:03:49,920 --> 01:03:53,240 everything this is all just kind of 1552 01:03:51,119 --> 01:03:56,039 boring generate points is a kind of 1553 01:03:53,240 --> 01:03:58,760 interesting function we uh have d X and 1554 01:03:56,039 --> 01:04:00,200 Dy and they're uh sort of like offsets 1555 01:03:58,760 --> 01:04:02,200 we Loop over them check if they're in 1556 01:04:00,200 --> 01:04:05,960 bounds and then we do some funky maths 1557 01:04:02,200 --> 01:04:07,240 to find the points and yeah um but now 1558 01:04:05,960 --> 01:04:10,359 I'm running out of times so I really 1559 01:04:07,240 --> 01:04:11,119 want to quickly showcase some of the 1560 01:04:10,359 --> 01:04:15,400 cool 1561 01:04:11,119 --> 01:04:17,599 patterns uh this is a 300X 400 one and 1562 01:04:15,400 --> 01:04:19,359 this is a fractal uh iterative Point 1563 01:04:17,599 --> 01:04:21,720 averaging one and it's created by 1564 01:04:19,359 --> 01:04:24,160 getting a large one which uses large 1565 01:04:21,720 --> 01:04:26,720 trunk sizes and a low amount of points 1566 01:04:24,160 --> 01:04:30,240 per trunk and cre creating a small one 1567 01:04:26,720 --> 01:04:34,960 and then overlapping them to create 1568 01:04:30,240 --> 01:04:37,920 this I also made this little uh one uh 1569 01:04:34,960 --> 01:04:39,279 file which will do it all and it will do 1570 01:04:37,920 --> 01:04:42,559 it live but it's showing on the wrong 1571 01:04:39,279 --> 01:04:46,000 display so really quickly no okay well I 1572 01:04:42,559 --> 01:04:48,680 think my time's out so thank you oh no 1573 01:04:46,000 --> 01:04:51,200 go on go on put the 1574 01:04:48,680 --> 01:04:53,119 display get Give It 2 seconds do you 1575 01:04:51,200 --> 01:04:55,960 have the display Give It 2 seconds go on 1576 01:04:53,119 --> 01:04:58,680 go on go on you can't just leave was 1577 01:04:55,960 --> 01:04:58,680 hanging like 1578 01:04:58,880 --> 01:05:08,200 that yeah I can't wait that long your 1579 01:05:03,720 --> 01:05:11,760 Cod and make fix your code 1580 01:05:08,200 --> 01:05:15,680 live love it how hard how hard could 1581 01:05:11,760 --> 01:05:19,079 that be how hard oh ER is Windows P yeah 1582 01:05:15,680 --> 01:05:20,920 I just got a Windows p Ah but the thing 1583 01:05:19,079 --> 01:05:24,599 is it's a collaborative and then 1584 01:05:20,920 --> 01:05:26,599 duplicate debugging session see 1585 01:05:24,599 --> 01:05:29,839 fantastic okay 1586 01:05:26,599 --> 01:05:31,279 pair programming with all of everyone 1587 01:05:29,839 --> 01:05:33,839 now look we get to watch it Place its 1588 01:05:31,279 --> 01:05:33,839 points as it 1589 01:05:37,079 --> 01:05:41,599 goes so 1590 01:05:39,240 --> 01:05:44,799 pretty and I mean it takes a minute but 1591 01:05:41,599 --> 01:05:47,799 I'm like a 100x 100 one in the updated 1592 01:05:44,799 --> 01:05:50,440 version takes uh .9 seconds on average 1593 01:05:47,799 --> 01:05:53,480 whereas in the old version with n s 1594 01:05:50,440 --> 01:05:56,079 complexity it took 70 second uh 77 1595 01:05:53,480 --> 01:05:58,000 seconds which wasn't great 1596 01:05:56,079 --> 01:05:59,920 uh but yeah we'll keep doing that if 1597 01:05:58,000 --> 01:06:03,599 once it's all filled in it will color it 1598 01:05:59,920 --> 01:06:03,599 blue and green depending on the sea 1599 01:06:07,400 --> 01:06:11,880 level I think this is the most Zen I've 1600 01:06:10,160 --> 01:06:14,640 felt in 1601 01:06:11,880 --> 01:06:17,520 months we 1602 01:06:14,640 --> 01:06:20,000 just yeah it's a crackling fire I'm 1603 01:06:17,520 --> 01:06:23,440 getting crackling fire Vibes the new 1604 01:06:20,000 --> 01:06:26,839 screen for everybody yes this is 1605 01:06:23,440 --> 01:06:29,279 definitely the new screen saver yeah 1606 01:06:26,839 --> 01:06:30,720 all right everyone can you take a big 1607 01:06:29,279 --> 01:06:34,520 breath 1608 01:06:30,720 --> 01:06:34,520 in and a big breath 1609 01:06:35,000 --> 01:06:40,200 out I think we felt some Zen yeah 1610 01:06:38,240 --> 01:06:41,599 there's also some like errors around the 1611 01:06:40,200 --> 01:06:43,160 sides with this version I'm not sure 1612 01:06:41,599 --> 01:06:46,000 where they came from but I just want to 1613 01:06:43,160 --> 01:06:47,400 point them out Zen focus on the Zen 1614 01:06:46,000 --> 01:06:50,880 there are no mistakes only happy 1615 01:06:47,400 --> 01:06:54,160 accidents happy accidents indeed can you 1616 01:06:50,880 --> 01:06:57,160 all give Toby a massive Round of 1617 01:06:54,160 --> 01:06:57,160 Applause 1618 01:07:03,200 --> 01:07:08,599 there is one more 1619 01:07:05,910 --> 01:07:12,559 [Music] 1620 01:07:08,599 --> 01:07:20,359 talk there is one more talk and while 1621 01:07:12,559 --> 01:07:20,359 they get set up oh I will intro them and 1622 01:07:20,559 --> 01:07:26,599 my the fear in my voice is not not 1623 01:07:24,520 --> 01:07:30,039 actually because of the potential fire 1624 01:07:26,599 --> 01:07:32,400 risk cool um but actually because now I 1625 01:07:30,039 --> 01:07:35,000 have three separate emoji that I need to 1626 01:07:32,400 --> 01:07:39,400 make you all 1627 01:07:35,000 --> 01:07:43,559 guess no none of them are fire Emoji um 1628 01:07:39,400 --> 01:07:47,680 okay so hang on while we do this now we 1629 01:07:43,559 --> 01:07:52,760 will be joined by Derek wave good don't 1630 01:07:47,680 --> 01:07:55,960 drop the robot um helius hi wave and 1631 01:07:52,760 --> 01:08:00,000 Matthew wave um all right d has been 1632 01:07:55,960 --> 01:08:04,480 programming for 4 years um his favorite 1633 01:08:00,000 --> 01:08:04,480 emoji is 1634 01:08:04,720 --> 01:08:13,720 um yeah shark Emoji excellent uh and he 1635 01:08:09,279 --> 01:08:15,680 has been learning Cur uh reinforcement 1636 01:08:13,720 --> 01:08:16,920 learning for the past year and recently 1637 01:08:15,680 --> 01:08:19,799 discovered how it can be applied to 1638 01:08:16,920 --> 01:08:21,600 train agents to make decisions in real 1639 01:08:19,799 --> 01:08:23,120 life environments it's fascinating to 1640 01:08:21,600 --> 01:08:25,159 see how algorithms can learn through 1641 01:08:23,120 --> 01:08:26,000 trial and error much like humans 1642 01:08:25,159 --> 01:08:29,920 actually 1643 01:08:26,000 --> 01:08:31,400 um yes that is great okay uh hel oh gosh 1644 01:08:29,920 --> 01:08:33,719 helus has been programming for seven 1645 01:08:31,400 --> 01:08:35,679 years heli's favorite emoji oh wait 1646 01:08:33,719 --> 01:08:37,960 you've got you've 1647 01:08:35,679 --> 01:08:40,759 moved I feel like we're having a weird 1648 01:08:37,960 --> 01:08:40,759 mime thing 1649 01:08:41,759 --> 01:08:46,040 now sorry they were I I heard things but 1650 01:08:44,359 --> 01:08:48,319 I didn't hear what they 1651 01:08:46,040 --> 01:08:52,799 were 1652 01:08:48,319 --> 01:08:55,719 uh it's a little bit more green and red 1653 01:08:52,799 --> 01:09:00,159 watermelon yes 1654 01:08:55,719 --> 01:09:04,799 nice nice um and hel is like that most 1655 01:09:00,159 --> 01:09:07,920 webcams can capture infrared light o 1656 01:09:04,799 --> 01:09:09,640 file that away under useful maybe and 1657 01:09:07,920 --> 01:09:12,199 Matthew has been programming for seven 1658 01:09:09,640 --> 01:09:14,279 years as well I asked Matthew about this 1659 01:09:12,199 --> 01:09:17,520 Emoji Choice specifically asked him what 1660 01:09:14,279 --> 01:09:20,159 it was called he said he didn't know he 1661 01:09:17,520 --> 01:09:24,040 just chose it randomly do do you want me 1662 01:09:20,159 --> 01:09:26,480 to choose a different one um so I don't 1663 01:09:24,040 --> 01:09:31,239 I I mean the 1664 01:09:26,480 --> 01:09:34,719 th this is the Emoji the Pinchy 1665 01:09:31,239 --> 01:09:37,159 fingers I yeah I'm this close Okay I get 1666 01:09:34,719 --> 01:09:41,799 okay I'm this close we're this we're 1667 01:09:37,159 --> 01:09:44,319 this close to to this close this big um 1668 01:09:41,799 --> 01:09:45,359 and Matthew recently M wanted to share 1669 01:09:44,319 --> 01:09:47,880 something that he recently learned which 1670 01:09:45,359 --> 01:09:49,359 is the only Windows uh uh the only 1671 01:09:47,880 --> 01:09:52,080 reason that Windows is the standard is 1672 01:09:49,359 --> 01:09:57,080 due to marketing 1673 01:09:52,080 --> 01:09:58,280 um yeah um those those were our Emoji 1674 01:09:57,080 --> 01:10:01,920 thank you for sharing them those were 1675 01:09:58,280 --> 01:10:04,840 our facts thank you for sharing them um 1676 01:10:01,920 --> 01:10:10,480 I get to keep stalling 1677 01:10:04,840 --> 01:10:12,480 until uh we get there um I would but I 1678 01:10:10,480 --> 01:10:13,560 there's something in my like in the 1679 01:10:12,480 --> 01:10:15,800 dance 1680 01:10:13,560 --> 01:10:18,320 area dance down there but it wouldn't be 1681 01:10:15,800 --> 01:10:20,480 captured on the film and it's just it 1682 01:10:18,320 --> 01:10:22,400 would be unfair if I didn't get to share 1683 01:10:20,480 --> 01:10:24,199 you need the tape no good okay maybe I 1684 01:10:22,400 --> 01:10:26,920 will dance down 1685 01:10:24,199 --> 01:10:30,000 here um um maybe we all need just need 1686 01:10:26,920 --> 01:10:33,120 to breathe again and keep Imagining the 1687 01:10:30,000 --> 01:10:38,360 uh the Zen noise we have 1688 01:10:33,120 --> 01:10:41,080 a what's my favorite emoji actually my 1689 01:10:38,360 --> 01:10:45,800 this this sounds like I'm just pandering 1690 01:10:41,080 --> 01:10:45,800 now but my favorite emoji is the parrot 1691 01:10:46,000 --> 01:10:53,440 Emoji because I oh I I just spoiled it 1692 01:10:49,520 --> 01:10:53,440 I'm so sorry I'm like 1693 01:10:54,460 --> 01:10:59,480 [Applause] 1694 01:10:57,400 --> 01:11:03,120 yeah all all the way the through the 1695 01:10:59,480 --> 01:11:03,120 parro Emoji 1696 01:11:04,719 --> 01:11:10,640 um yeah well since we find ourselves 1697 01:11:08,520 --> 01:11:12,600 here in Melbourne and I don't often come 1698 01:11:10,640 --> 01:11:14,440 down to Melbourne maybe I should just 1699 01:11:12,600 --> 01:11:16,719 make a pitch for the girls Programming 1700 01:11:14,440 --> 01:11:19,400 Network which has a chapter here in 1701 01:11:16,719 --> 01:11:23,199 Melbourne and and there are free 1702 01:11:19,400 --> 01:11:25,440 workshops for high school girls to uh 1703 01:11:23,199 --> 01:11:29,040 and gender diverse kids to learn 1704 01:11:25,440 --> 01:11:32,560 programming and have fun and get pizza 1705 01:11:29,040 --> 01:11:35,239 cuz you know yeah yeah come come for the 1706 01:11:32,560 --> 01:11:38,080 pizza stay for the friends um but if 1707 01:11:35,239 --> 01:11:40,280 you're not in Melbourne maybe you're in 1708 01:11:38,080 --> 01:11:42,920 Sydney guess what there's there's a 1709 01:11:40,280 --> 01:11:44,920 chapter for you there too maybe you're 1710 01:11:42,920 --> 01:11:48,639 actually from Perth hey there's a 1711 01:11:44,920 --> 01:11:51,120 chapter there too um canra oh yeah we 1712 01:11:48,639 --> 01:11:53,679 got you covered don't worry com next 1713 01:11:51,120 --> 01:11:56,600 year two more coming next year so many 1714 01:11:53,679 --> 01:11:58,880 so many things Adelaide and 1715 01:11:56,600 --> 01:12:02,560 Brisbane um but if you don't live in any 1716 01:11:58,880 --> 01:12:05,639 of those places and you want a gpn 1717 01:12:02,560 --> 01:12:08,360 network near you and you want to give me 1718 01:12:05,639 --> 01:12:08,360 and Renee more 1719 01:12:10,080 --> 01:12:15,280 work yeah uh and yourself more work as 1720 01:12:13,360 --> 01:12:17,880 well yeah hit us up um does anyone else 1721 01:12:15,280 --> 01:12:22,639 want anything spooked since I'm 1722 01:12:17,880 --> 01:12:25,760 here oh yes we we also need uh fabulous 1723 01:12:22,639 --> 01:12:27,840 volunteers all of the time wonderful um 1724 01:12:25,760 --> 01:12:32,920 have we all been enjoying 1725 01:12:27,840 --> 01:12:35,320 Pon yes did you know you could volunteer 1726 01:12:32,920 --> 01:12:37,400 at Pon as 1727 01:12:35,320 --> 01:12:41,120 well 1728 01:12:37,400 --> 01:12:44,880 um um okay how are we 1729 01:12:41,120 --> 01:12:48,239 going are we good we're good we're good 1730 01:12:44,880 --> 01:12:49,320 maybe rotate the thing away from the CR 1731 01:12:48,239 --> 01:12:52,080 what 1732 01:12:49,320 --> 01:12:56,239 no what do you mean rotate it away from 1733 01:12:52,080 --> 01:12:56,239 the crowd give a fight 1734 01:12:57,440 --> 01:13:03,480 did you just aim it at yourselves 1735 01:13:00,120 --> 01:13:05,360 instead of at the crowd yeah I mean 1736 01:13:03,480 --> 01:13:08,800 replaceable 1737 01:13:05,360 --> 01:13:10,440 yeah I feel like I feel like I'm in I 1738 01:13:08,800 --> 01:13:12,280 feel like I'm at the zoo at the seal 1739 01:13:10,440 --> 01:13:14,480 show and I'm need to warn the crowd that 1740 01:13:12,280 --> 01:13:16,840 the first two rows are the Splash 1741 01:13:14,480 --> 01:13:19,040 Zone but actually is this the Splash 1742 01:13:16,840 --> 01:13:21,560 Zone I I feel like we okay hang on let 1743 01:13:19,040 --> 01:13:23,120 me let me see a view of hands this area 1744 01:13:21,560 --> 01:13:24,120 of the crowd do you want to be the 1745 01:13:23,120 --> 01:13:27,120 Splash 1746 01:13:24,120 --> 01:13:30,280 Zone not if it's fire How likely is it 1747 01:13:27,120 --> 01:13:32,360 going to be fire or confetti I think it 1748 01:13:30,280 --> 01:13:35,000 should be all right I I think we're 1749 01:13:32,360 --> 01:13:36,600 happy to be the Splash Zone yeah come on 1750 01:13:35,000 --> 01:13:39,960 live dangerously let us be the Splash 1751 01:13:36,600 --> 01:13:41,520 Zone okay a aim it towards the camera 1752 01:13:39,960 --> 01:13:44,600 that's right think of the poor people 1753 01:13:41,520 --> 01:13:51,080 watching this later on they want to be 1754 01:13:44,600 --> 01:13:53,600 involved okay I'm not here with o um so 1755 01:13:51,080 --> 01:13:57,040 can I yeah yeah yeah what's duty of care 1756 01:13:53,600 --> 01:13:57,040 I'm not that teacher okay 1757 01:13:57,880 --> 01:14:03,800 so can we welcome last talk up take it 1758 01:14:07,280 --> 01:14:13,080 away hi um we're presenting Bev it is a 1759 01:14:10,400 --> 01:14:14,880 bip bipedal walking confetti ejecting 1760 01:14:13,080 --> 01:14:16,800 robot with voice control it's 1761 01:14:14,880 --> 01:14:18,120 essentially a confetti launcher mounted 1762 01:14:16,800 --> 01:14:19,159 on a pair of legs that follow you around 1763 01:14:18,120 --> 01:14:21,600 and you can talk to it and give it 1764 01:14:19,159 --> 01:14:25,560 commands with voice controls uh so who 1765 01:14:21,600 --> 01:14:27,920 are we I'm Matthew on my next here is 1766 01:14:25,560 --> 01:14:30,239 Derek and then Helios on the very edge 1767 01:14:27,920 --> 01:14:34,040 um Derek has been doing python C++ and 1768 01:14:30,239 --> 01:14:37,719 Lua um he's broken a couple things um so 1769 01:14:34,040 --> 01:14:39,840 was so of all of us really but uh 1770 01:14:37,719 --> 01:14:41,880 yeah um so this is what we've done right 1771 01:14:39,840 --> 01:14:43,560 so Derek was the main legs component 1772 01:14:41,880 --> 01:14:44,800 Helios did the main confetti dispenser 1773 01:14:43,560 --> 01:14:47,400 and that was the voice controls that 1774 01:14:44,800 --> 01:14:50,639 kind of put them together uh first up 1775 01:14:47,400 --> 01:14:50,639 I'll give it to Derek to talk about his 1776 01:14:52,120 --> 01:14:58,080 legs okay so um yeah I made the bipedal 1777 01:14:55,480 --> 01:15:00,080 walking uh robot um using reinforcement 1778 01:14:58,080 --> 01:15:02,400 learning uh if you don't know what 1779 01:15:00,080 --> 01:15:05,960 reinforcement learning is it's basically 1780 01:15:02,400 --> 01:15:07,800 just um a discipline where okay thank 1781 01:15:05,960 --> 01:15:10,239 you it's basically just a discipline 1782 01:15:07,800 --> 01:15:13,159 where it uses uh trial and error to 1783 01:15:10,239 --> 01:15:16,159 figure out like I know why it exists and 1784 01:15:13,159 --> 01:15:17,560 basically like it's like it basically 1785 01:15:16,159 --> 01:15:22,000 tries to figure out what its goal is and 1786 01:15:17,560 --> 01:15:24,520 try to maximize what its goal um wait 1787 01:15:22,000 --> 01:15:26,880 okay to better explain this we can use a 1788 01:15:24,520 --> 01:15:29,480 like a simple example of a dog in an 1789 01:15:26,880 --> 01:15:32,280 entree dog in a yard if we like throw a 1790 01:15:29,480 --> 01:15:34,920 stick the dog will first just like 1791 01:15:32,280 --> 01:15:36,639 explore around for a bit and but 1792 01:15:34,920 --> 01:15:39,159 eventually you'll find the stick and 1793 01:15:36,639 --> 01:15:41,000 bring it back to us um when it brings it 1794 01:15:39,159 --> 01:15:43,280 back to us uh we'll give it a treat or a 1795 01:15:41,000 --> 01:15:45,639 reward and then the next time we throw 1796 01:15:43,280 --> 01:15:47,320 the stick around um the dog won't 1797 01:15:45,639 --> 01:15:49,480 explore around as much but go straight 1798 01:15:47,320 --> 01:15:52,600 to the stick and bring it back to us 1799 01:15:49,480 --> 01:15:55,360 that is the basics of reinforcement Lear 1800 01:15:52,600 --> 01:15:57,120 and um the next thing I'll talk about is 1801 01:15:55,360 --> 01:16:01,440 the the type of reinforcement learning 1802 01:15:57,120 --> 01:16:04,159 algorithm that I chose so I chose 1803 01:16:01,440 --> 01:16:06,679 td3 uh which stands for twin delayed 1804 01:16:04,159 --> 01:16:10,600 deep deterministic policy gradient yeah 1805 01:16:06,679 --> 01:16:12,320 it's a mouthful but uh td3 is basically 1806 01:16:10,600 --> 01:16:15,120 just an algorithm that helps the 1807 01:16:12,320 --> 01:16:19,320 computer program to make um good 1808 01:16:15,120 --> 01:16:22,000 decisions um the T3 has two components 1809 01:16:19,320 --> 01:16:23,920 uh one is the actor uh it's basically 1810 01:16:22,000 --> 01:16:25,639 just like a coach that decides what 1811 01:16:23,920 --> 01:16:28,080 moves to make in a game 1812 01:16:25,639 --> 01:16:30,360 um like it looks at the game and says 1813 01:16:28,080 --> 01:16:32,600 let's try this move and the critic is 1814 01:16:30,360 --> 01:16:36,360 basically just a judge that says that 1815 01:16:32,600 --> 01:16:39,760 was either a good move or was a bad 1816 01:16:36,360 --> 01:16:42,800 move um what's special about td3 it has 1817 01:16:39,760 --> 01:16:44,639 two critics um this is because sometimes 1818 01:16:42,800 --> 01:16:48,679 one judge might be a little too 1819 01:16:44,639 --> 01:16:51,560 optimistic and say a bad move uh is good 1820 01:16:48,679 --> 01:16:53,880 is good but by having two judges the 1821 01:16:51,560 --> 01:16:56,679 agent only listens to the more cautious 1822 01:16:53,880 --> 01:16:58,800 one or safe one and this makes learning 1823 01:16:56,679 --> 01:17:01,320 more steady and 1824 01:16:58,800 --> 01:17:06,440 reliable another thing it utilizes is 1825 01:17:01,320 --> 01:17:11,880 delayed learning so um uh in a game what 1826 01:17:06,440 --> 01:17:15,360 was I saying uh yeah okay um in delay it 1827 01:17:11,880 --> 01:17:18,679 uses delayed learning where um in a 1828 01:17:15,360 --> 01:17:20,679 game it okay I forget forgot what I was 1829 01:17:18,679 --> 01:17:22,080 going to say but it basically just lets 1830 01:17:20,679 --> 01:17:24,920 the actor or the coach change its 1831 01:17:22,080 --> 01:17:26,679 strategy only after a few moves um this 1832 01:17:24,920 --> 01:17:28,960 gives it uh time to learn from better 1833 01:17:26,679 --> 01:17:31,520 feedback uh better feedback from the 1834 01:17:28,960 --> 01:17:35,719 critic uh the next thing it utilizes is 1835 01:17:31,520 --> 01:17:37,920 noise so in a game um uh to better 1836 01:17:35,719 --> 01:17:43,120 explain this we can use a game example 1837 01:17:37,920 --> 01:17:44,960 where um the U the the robot would use 1838 01:17:43,120 --> 01:17:47,400 the exact same strategy every time in 1839 01:17:44,960 --> 01:17:51,199 the game but this is bad because it will 1840 01:17:47,400 --> 01:17:53,000 it reduces exploration and this um stops 1841 01:17:51,199 --> 01:17:56,600 it from learning new strategies or 1842 01:17:53,000 --> 01:17:58,639 better strategies in the long run um td3 1843 01:17:56,600 --> 01:18:00,719 um improves this by adding a little 1844 01:17:58,639 --> 01:18:03,159 noise or Randomness to the moves like 1845 01:18:00,719 --> 01:18:04,480 trying something slightly different to 1846 01:18:03,159 --> 01:18:07,159 discover better 1847 01:18:04,480 --> 01:18:09,440 options and that's a really basic 1848 01:18:07,159 --> 01:18:12,280 rundown of the algorithm now onto the 1849 01:18:09,440 --> 01:18:14,760 build of the robot the robot is built on 1850 01:18:12,280 --> 01:18:17,360 a 3D printer frame where it is connected 1851 01:18:14,760 --> 01:18:20,040 to 10 servos three arduinos and a 1852 01:18:17,360 --> 01:18:22,400 Raspberry Pi uh there's also a camera on 1853 01:18:20,040 --> 01:18:24,920 board um which is again used for 1854 01:18:22,400 --> 01:18:26,920 computer vision um the entire robot is 1855 01:18:24,920 --> 01:18:32,679 powered by an ATX power supply that I 1856 01:18:26,920 --> 01:18:36,880 found at the dump but yeah but yeah 1857 01:18:32,679 --> 01:18:40,520 um uh the the sensors that I used for 1858 01:18:36,880 --> 01:18:44,880 the robot um um well actually let me 1859 01:18:40,520 --> 01:18:46,719 give a example um the senses uh are used 1860 01:18:44,880 --> 01:18:49,320 in the robot so it can learn from its 1861 01:18:46,719 --> 01:18:51,480 environment so it can optimize its goal 1862 01:18:49,320 --> 01:18:53,840 uh the sensors that I used were an MP 1863 01:18:51,480 --> 01:18:55,560 6050 which gives the robot its 1864 01:18:53,840 --> 01:18:57,600 orientation data 1865 01:18:55,560 --> 01:19:00,040 um there was acceleration data but I 1866 01:18:57,600 --> 01:19:03,800 didn't use it for some reason I don't 1867 01:19:00,040 --> 01:19:06,639 know um the next uh the next sensor I 1868 01:19:03,800 --> 01:19:09,960 used was a camera um this uh gives the 1869 01:19:06,639 --> 01:19:12,600 robot data on how far a human is this is 1870 01:19:09,960 --> 01:19:15,800 relevant to his project CU he said oh I 1871 01:19:12,600 --> 01:19:18,320 need the confetti close to a person so 1872 01:19:15,800 --> 01:19:21,679 yeah so I was like okay sure I'll give a 1873 01:19:18,320 --> 01:19:23,840 camera to it um the next uh sensor I 1874 01:19:21,679 --> 01:19:26,000 used was a pressure plate sensor these 1875 01:19:23,840 --> 01:19:27,400 are on the feet of the robot and it's 1876 01:19:26,000 --> 01:19:28,600 basically just two metal plates and when 1877 01:19:27,400 --> 01:19:31,320 you connect them it makes a closed 1878 01:19:28,600 --> 01:19:33,360 circuit it's pretty simple um this allow 1879 01:19:31,320 --> 01:19:34,679 this tells the robot if its Feats feet 1880 01:19:33,360 --> 01:19:36,840 are touching the ground which is like 1881 01:19:34,679 --> 01:19:41,960 extra input for 1882 01:19:36,840 --> 01:19:45,000 learning um the robot has three arduinos 1883 01:19:41,960 --> 01:19:47,239 and one razy piie the first Arduino is 1884 01:19:45,000 --> 01:19:50,400 connected to the mpu 6050 for 1885 01:19:47,239 --> 01:19:52,719 orientation data the second Arduino is 1886 01:19:50,400 --> 01:19:55,320 connected to seros and pressure plate 1887 01:19:52,719 --> 01:19:57,960 data and the third U know is connected 1888 01:19:55,320 --> 01:19:59,920 to my battery backup power supply um all 1889 01:19:57,960 --> 01:20:02,440 it really is is just you can connect two 1890 01:19:59,920 --> 01:20:05,280 batteries it uses a voltage of Auto to 1891 01:20:02,440 --> 01:20:06,800 find how what voltage a battery is at 1892 01:20:05,280 --> 01:20:10,400 and if it's too low it switches to the 1893 01:20:06,800 --> 01:20:13,280 next battery it's pretty simple um all 1894 01:20:10,400 --> 01:20:15,960 the adinos are except for the third uino 1895 01:20:13,280 --> 01:20:18,040 is connected to the Raspberry Pi uh 1896 01:20:15,960 --> 01:20:21,480 which provides the environment data to 1897 01:20:18,040 --> 01:20:25,000 the pi which runs the td3 algorithm and 1898 01:20:21,480 --> 01:20:27,679 I also built this rig out of PVC pipes 1899 01:20:25,000 --> 01:20:32,040 cuz one this robot is not indestructible 1900 01:20:27,679 --> 01:20:35,760 so yeah um and it also helps it 1901 01:20:32,040 --> 01:20:38,760 train uh this is the legs demo 1902 01:20:35,760 --> 01:20:41,520 the yeah I the safety minis wouldn't let 1903 01:20:38,760 --> 01:20:44,239 me allow it to wouldn't allow me to 1904 01:20:41,520 --> 01:20:47,480 power on the thing cuz it's again it's a 1905 01:20:44,239 --> 01:20:49,120 ATX power supply from the dump so they 1906 01:20:47,480 --> 01:20:52,719 so they wouldn't let me power it on but 1907 01:20:49,120 --> 01:20:56,440 there is a video of it working and yeah 1908 01:20:52,719 --> 01:20:56,440 that's all you get 1909 01:20:57,740 --> 01:21:06,480 [Applause] 1910 01:21:03,280 --> 01:21:08,400 all right can can they hear me all right 1911 01:21:06,480 --> 01:21:10,840 all right uh so my name is helus and 1912 01:21:08,400 --> 01:21:12,760 I've um building the confetti dispenser 1913 01:21:10,840 --> 01:21:14,679 part for the project it was supposed to 1914 01:21:12,760 --> 01:21:17,040 go on top of the legs but you know 1915 01:21:14,679 --> 01:21:19,800 didn't right so we're going to quickly 1916 01:21:17,040 --> 01:21:22,239 go through the build of my project so uh 1917 01:21:19,800 --> 01:21:24,960 first thing is uh there's a reloading 1918 01:21:22,239 --> 01:21:27,600 mechanism which uh would be this thing 1919 01:21:24,960 --> 01:21:30,280 if uh it didn't get damaged during 1920 01:21:27,600 --> 01:21:32,000 transport uh basically rotates the sh so 1921 01:21:30,280 --> 01:21:35,000 that new shells can be loaded in the 1922 01:21:32,000 --> 01:21:37,679 chamber and then yeah you're not 1923 01:21:35,000 --> 01:21:39,480 propelled hey and then next we have the 1924 01:21:37,679 --> 01:21:41,600 controller box which is this thing right 1925 01:21:39,480 --> 01:21:44,840 here right it's pretty cool uh there's a 1926 01:21:41,600 --> 01:21:47,360 two fans on it and uh one giant uh 1927 01:21:44,840 --> 01:21:50,159 switch to turn the power on and off look 1928 01:21:47,360 --> 01:21:52,239 on the inside oh and it just fell apart 1929 01:21:50,159 --> 01:21:55,080 should be all right hey uh I'm not sure 1930 01:21:52,239 --> 01:21:58,639 if you can see it very much looks like a 1931 01:21:55,080 --> 01:22:01,159 bomb but I guarantee you it is 1932 01:21:58,639 --> 01:22:03,199 not it was uh pretty hard getting that 1933 01:22:01,159 --> 01:22:06,199 through 1934 01:22:03,199 --> 01:22:06,199 security 1935 01:22:06,320 --> 01:22:11,199 yeah now now we have the actual 1936 01:22:08,880 --> 01:22:13,760 dispenser unit right so it features two 1937 01:22:11,199 --> 01:22:16,679 flyws and a linear actuator to push it 1938 01:22:13,760 --> 01:22:19,840 forward so it actually launches and just 1939 01:22:16,679 --> 01:22:22,080 doesn't sit there right and for GUI it 1940 01:22:19,840 --> 01:22:24,560 is programmed in Python uh which allows 1941 01:22:22,080 --> 01:22:26,960 for the controls such as the safety uh 1942 01:22:24,560 --> 01:22:30,280 Auto aiming and voice 1943 01:22:26,960 --> 01:22:33,679 control oh that was not what happen 1944 01:22:30,280 --> 01:22:35,440 okay yeah okay and for joystick aiming I 1945 01:22:33,679 --> 01:22:37,639 used the py game library to receive an 1946 01:22:35,440 --> 01:22:40,480 input from the Logitech flight stick 1947 01:22:37,639 --> 01:22:43,960 which is uh down there cuz there's not 1948 01:22:40,480 --> 01:22:48,920 enough room on the table uh it was like 1949 01:22:43,960 --> 01:22:51,120 $40 uh some shady website but yeah it it 1950 01:22:48,920 --> 01:22:53,639 works though and for the input Supply I 1951 01:22:51,120 --> 01:22:56,560 decided to use 12 volts at 2.8 amps for 1952 01:22:53,639 --> 01:22:59,920 the flywheel actuator step promotor and 1953 01:22:56,560 --> 01:23:01,600 the servo uh I was stuck at uh 12 FS 1954 01:22:59,920 --> 01:23:04,080 because my teacher said uh no more than 1955 01:23:01,600 --> 01:23:06,400 12 FS so yeah and I would uh fail the 1956 01:23:04,080 --> 01:23:09,639 assignment so 1957 01:23:06,400 --> 01:23:12,360 yeah all right for the infrared tracking 1958 01:23:09,639 --> 01:23:17,000 component uh it's pretty simple I bought 1959 01:23:12,360 --> 01:23:20,480 like a infrared light filter off eBay it 1960 01:23:17,000 --> 01:23:22,679 was like pretty cheap 40 bux uh the 1961 01:23:20,480 --> 01:23:25,840 range is not very good but uh gets the 1962 01:23:22,679 --> 01:23:29,360 job done like TW not 20 meters like two 1963 01:23:25,840 --> 01:23:31,840 meters that's a bit too much honestly uh 1964 01:23:29,360 --> 01:23:34,920 yeah it works by applying a mask over 1965 01:23:31,840 --> 01:23:37,120 the point which is detected uh which is 1966 01:23:34,920 --> 01:23:39,360 normally red and black because yeah 1967 01:23:37,120 --> 01:23:41,520 that's just the color of infrared light 1968 01:23:39,360 --> 01:23:43,760 and then we have a Contours The Contours 1969 01:23:41,520 --> 01:23:45,760 are like for detecting uh what the parts 1970 01:23:43,760 --> 01:23:48,280 actually are I'm not describing it very 1971 01:23:45,760 --> 01:23:50,719 well but uh yeah so it creates like a 1972 01:23:48,280 --> 01:23:53,080 box and then I can calculate the center 1973 01:23:50,719 --> 01:23:54,560 using a bunch of math so and then I 1974 01:23:53,080 --> 01:23:57,880 would normally St values between between 1975 01:23:54,560 --> 01:24:00,360 negative 1 and one so uh the turret can 1976 01:23:57,880 --> 01:24:01,679 aim in its respective Direction like the 1977 01:24:00,360 --> 01:24:04,560 asmf and the 1978 01:24:01,679 --> 01:24:08,199 elevation right for the GUI it uses the 1979 01:24:04,560 --> 01:24:11,400 libraries pame CV2 tter custom tter 1980 01:24:08,199 --> 01:24:13,560 numpy n numpy not numpy uh it features 1981 01:24:11,400 --> 01:24:15,440 an Aiming display in the top right uh 1982 01:24:13,560 --> 01:24:17,480 button controls on the left side and 1983 01:24:15,440 --> 01:24:19,880 button controls include Auto aiming 1984 01:24:17,480 --> 01:24:22,920 safety and voice control so you can 1985 01:24:19,880 --> 01:24:24,920 toggle them on and off and then I've 1986 01:24:22,920 --> 01:24:28,159 utilized a multi threading system for 1987 01:24:24,920 --> 01:24:30,280 the GUI camera control and voice control 1988 01:24:28,159 --> 01:24:32,520 because they all operate at different uh 1989 01:24:30,280 --> 01:24:34,840 timings like for the camera it needs to 1990 01:24:32,520 --> 01:24:37,000 be like decently fast but not too fast 1991 01:24:34,840 --> 01:24:41,239 the GUI who cares it can be like two 1992 01:24:37,000 --> 01:24:42,880 frames per second which yeah it works 1993 01:24:41,239 --> 01:24:45,840 and controller needs to be as fast as 1994 01:24:42,880 --> 01:24:47,560 possible so it actually works and then 1995 01:24:45,840 --> 01:24:50,760 voice control cuz it's just on a wild 1996 01:24:47,560 --> 01:24:54,800 Loop and it wouldn't work all right so I 1997 01:24:50,760 --> 01:24:57,239 have a actual demo here is that sound no 1998 01:24:54,800 --> 01:24:59,800 right uh this was uh before I went on 1999 01:24:57,239 --> 01:25:01,960 the flight and it still 2000 01:24:59,800 --> 01:25:05,280 worked well just me uh testing the 2001 01:25:01,960 --> 01:25:05,280 flight stick you know pretty 2002 01:25:06,520 --> 01:25:11,600 cool uh it gets jammed on a wise a bit 2003 01:25:09,560 --> 01:25:13,800 because I'm not very good at a wire 2004 01:25:11,600 --> 01:25:17,040 management Cable 2005 01:25:13,800 --> 01:25:18,760 Management right yeah you can uh in the 2006 01:25:17,040 --> 01:25:19,800 back you're stuck with wires which I 2007 01:25:18,760 --> 01:25:22,360 found out 2008 01:25:19,800 --> 01:25:23,320 later it goes up and down you know it's 2009 01:25:22,360 --> 01:25:25,760 very 2010 01:25:23,320 --> 01:25:28,080 basic me uh questioning why it doesn't 2011 01:25:25,760 --> 01:25:28,080 work 2012 01:25:28,400 --> 01:25:35,280 here hey any more now uh we'll get to 2013 01:25:32,320 --> 01:25:35,280 good part soon trust 2014 01:25:35,480 --> 01:25:41,440 me it's long I know it's pretty long but 2015 01:25:38,760 --> 01:25:43,520 like will'll get there eventually I I 2016 01:25:41,440 --> 01:25:46,480 would skip ahead but I don't know how uh 2017 01:25:43,520 --> 01:25:49,119 canva works all right so now it actually 2018 01:25:46,480 --> 01:25:54,880 shows you the guy 2019 01:25:49,119 --> 01:25:57,159 right for for like0 two seconds but like 2020 01:25:54,880 --> 01:25:59,760 I'll show you g 2021 01:25:57,159 --> 01:26:02,400 later right let's me uh showing off like 2022 01:25:59,760 --> 01:26:03,840 the chamber and the linear actuator that 2023 01:26:02,400 --> 01:26:06,080 would push a shell forward I haven't 2024 01:26:03,840 --> 01:26:09,320 loaded a shell yet cuz uh there was 2025 01:26:06,080 --> 01:26:11,280 still like an assignment video so 2026 01:26:09,320 --> 01:26:14,600 yeah all 2027 01:26:11,280 --> 01:26:17,360 right was me uh being being a little 2028 01:26:14,600 --> 01:26:18,800 stupid and uh didn't notice that it 2029 01:26:17,360 --> 01:26:22,639 wasn't 2030 01:26:18,800 --> 01:26:24,480 loaded and uh here you go nor normally 2031 01:26:22,639 --> 01:26:27,080 there would be like a confetti in there 2032 01:26:24,480 --> 01:26:29,920 but uh I didn't load it cuz uh I just 2033 01:26:27,080 --> 01:26:32,719 kind of forgot I'll be 2034 01:26:29,920 --> 01:26:35,800 honest 2035 01:26:32,719 --> 01:26:38,800 yeah know this part uh yeah this the 2036 01:26:35,800 --> 01:26:41,040 infrared actual aiming part right so you 2037 01:26:38,800 --> 01:26:44,040 see the Red Dot that's like the infrared 2038 01:26:41,040 --> 01:26:46,880 light emitted from the flashlight it 2039 01:26:44,040 --> 01:26:49,000 automatically uh readjusts uh stops all 2040 01:26:46,880 --> 01:26:51,520 inputs from the 2041 01:26:49,000 --> 01:26:52,880 joystick right it should go down and 2042 01:26:51,520 --> 01:26:55,600 show 2043 01:26:52,880 --> 01:26:58,960 you any moment 2044 01:26:55,600 --> 01:27:03,440 now hey there 2045 01:26:58,960 --> 01:27:03,440 go oh there we go look how cute it 2046 01:27:03,639 --> 01:27:09,040 is it's 2047 01:27:06,280 --> 01:27:11,400 nodding that's enough of my project and 2048 01:27:09,040 --> 01:27:15,000 now we're going to go for uh to Matt 2049 01:27:11,400 --> 01:27:17,800 right yeah so I did the voice controls 2050 01:27:15,000 --> 01:27:19,440 and the screen for the project overall 2051 01:27:17,800 --> 01:27:20,840 um so there were two options for The 2052 01:27:19,440 --> 01:27:22,679 Voice Control you could either have it 2053 01:27:20,840 --> 01:27:24,320 controlling the confetti launcher or you 2054 01:27:22,679 --> 01:27:25,760 could have it as a virtual friend while 2055 01:27:24,320 --> 01:27:27,199 controlling the confetti launcher it 2056 01:27:25,760 --> 01:27:29,560 would use speech recognition python 2057 01:27:27,199 --> 01:27:31,480 Library through the Google speech API 2058 01:27:29,560 --> 01:27:33,080 which then looked for your keywords 2059 01:27:31,480 --> 01:27:34,679 which are the directions up down left 2060 01:27:33,080 --> 01:27:36,960 and right it looked for dispense or it 2061 01:27:34,679 --> 01:27:38,480 looked for voice control on or off uh if 2062 01:27:36,960 --> 01:27:40,159 you didn't have a voice control on for 2063 01:27:38,480 --> 01:27:43,040 the confetti launcher it would go to a 2064 01:27:40,159 --> 01:27:45,480 virtual friend which uses a llama 3.2 2065 01:27:43,040 --> 01:27:47,719 model to engage in conversation with the 2066 01:27:45,480 --> 01:27:49,119 user um uses a python text to speech 2067 01:27:47,719 --> 01:27:51,000 library to actually talk back to you so 2068 01:27:49,119 --> 01:27:52,320 it's not just text and while it's in 2069 01:27:51,000 --> 01:27:54,800 this mode the tracking is done via 2070 01:27:52,320 --> 01:27:56,040 helios's infrared system 2071 01:27:54,800 --> 01:27:58,239 uh these are just to show the commands 2072 01:27:56,040 --> 01:28:00,360 you know up down left right dispense 2073 01:27:58,239 --> 01:28:02,199 voice controls uh it was good to have it 2074 01:28:00,360 --> 01:28:03,400 be able to turn itself off because then 2075 01:28:02,199 --> 01:28:07,239 you know you don't have to go and touch 2076 01:28:03,400 --> 01:28:09,159 the GUI um the screen was used for 2077 01:28:07,239 --> 01:28:10,480 emotions and to give feedback on the 2078 01:28:09,159 --> 01:28:12,400 action so the user knows what they're 2079 01:28:10,480 --> 01:28:16,520 doing um you don't really want to be too 2080 01:28:12,400 --> 01:28:18,440 close in case it launches at you so 2081 01:28:16,520 --> 01:28:22,000 um 2082 01:28:18,440 --> 01:28:24,560 yeah so all this was good at least it 2083 01:28:22,000 --> 01:28:26,280 was the plan until as my friend Helios 2084 01:28:24,560 --> 01:28:28,679 pointed out some things went wrong a 2085 01:28:26,280 --> 01:28:31,480 couple quotes we took from about maybe 3 2086 01:28:28,679 --> 01:28:35,480 hours ago was one why is this not H 2087 01:28:31,480 --> 01:28:39,520 having power two why did it 2088 01:28:35,480 --> 01:28:41,639 snap three why is it in inverted and 2089 01:28:39,520 --> 01:28:43,159 four three out of the four h Bridges 2090 01:28:41,639 --> 01:28:47,840 killed 2091 01:28:43,159 --> 01:28:49,880 itself a um okay let's be real um there 2092 01:28:47,840 --> 01:28:52,679 are a lot of setbacks for this project 2093 01:28:49,880 --> 01:28:54,800 um the first being when you leave your 2094 01:28:52,679 --> 01:28:57,480 legs in the car before you go to the 2095 01:28:54,800 --> 01:29:02,000 airport in the sun and the plastic 3D 2096 01:28:57,480 --> 01:29:05,480 filament ends up melting um here yeah it 2097 01:29:02,000 --> 01:29:07,600 was yep um second thing is when the 2098 01:29:05,480 --> 01:29:11,000 servo screws end up snapping from being 2099 01:29:07,600 --> 01:29:13,880 tight and too tight um kind of a big 2100 01:29:11,000 --> 01:29:16,440 setback that's why it's so much bigger 2101 01:29:13,880 --> 01:29:18,480 originally um third when airplane 2102 01:29:16,440 --> 01:29:22,119 handling may accidentally break part of 2103 01:29:18,480 --> 01:29:26,199 your 3D printing um 2104 01:29:22,119 --> 01:29:28,560 ouch uh four is when 3 your four h 2105 01:29:26,199 --> 01:29:31,520 Bridges blow up and we still don't know 2106 01:29:28,560 --> 01:29:34,560 why um and five when the feeding 2107 01:29:31,520 --> 01:29:34,560 mechanism ends up 2108 01:29:35,360 --> 01:29:39,920 snapping um to start with it was 2109 01:29:38,080 --> 01:29:42,000 originally taller and you can see here 2110 01:29:39,920 --> 01:29:43,360 in the video that we accidentally filmed 2111 01:29:42,000 --> 01:29:46,119 when we accidentally locked our group 2112 01:29:43,360 --> 01:29:46,119 member out of the 2113 01:29:46,280 --> 01:29:51,920 room um you can see using it uh self- 2114 01:29:49,040 --> 01:29:53,520 learning to then try and stand up um it 2115 01:29:51,920 --> 01:29:55,480 also used to be able to turn but as you 2116 01:29:53,520 --> 01:29:57,840 can probably see here it it no longer 2117 01:29:55,480 --> 01:30:00,840 does that 2118 01:29:57,840 --> 01:30:00,840 um 2119 01:30:02,520 --> 01:30:08,239 yeah and then it also used to show faces 2120 01:30:05,480 --> 01:30:10,440 until this uina was in quotes from my 2121 01:30:08,239 --> 01:30:12,199 teacher cannibalized to get the last bit 2122 01:30:10,440 --> 01:30:17,000 working like the very last part of our 2123 01:30:12,199 --> 01:30:17,880 project at least somewhat working um yes 2124 01:30:17,000 --> 01:30:19,440 oh 2125 01:30:17,880 --> 01:30:23,000 you 2126 01:30:19,440 --> 01:30:25,440 um I've been M okay I've been trying my 2127 01:30:23,000 --> 01:30:29,360 hardest to uh make this thing be alive 2128 01:30:25,440 --> 01:30:33,000 again since like uh 9 in the morning uh 2129 01:30:29,360 --> 01:30:35,480 it's very sketchy 2130 01:30:33,000 --> 01:30:39,119 uh 2131 01:30:35,480 --> 01:30:42,080 like let's see if this uh works today 2132 01:30:39,119 --> 01:30:45,040 probably oh that's an 2133 01:30:42,080 --> 01:30:48,239 arrow oh 2134 01:30:45,040 --> 01:30:48,239 yeah all 2135 01:30:49,560 --> 01:30:55,040 right how does this side of the room 2136 01:30:52,440 --> 01:30:57,480 feel I noticed some people ducking down 2137 01:30:55,040 --> 01:31:02,400 a bit no it should it should be all 2138 01:30:57,480 --> 01:31:07,520 right I I should be it should be all 2139 01:31:02,400 --> 01:31:11,080 right uh I don't know let's see if that 2140 01:31:07,520 --> 01:31:11,080 uh died on the way up to the 2141 01:31:11,440 --> 01:31:16,320 stage might might have 2142 01:31:14,679 --> 01:31:18,679 died 2143 01:31:16,320 --> 01:31:22,119 fortunately so you don't get 2144 01:31:18,679 --> 01:31:24,159 splashed all right uh due to unforeseen 2145 01:31:22,119 --> 01:31:26,360 circumstances there won't be a life demo 2146 01:31:24,159 --> 01:31:29,560 actually 2147 01:31:26,360 --> 01:31:31,960 a um and the biggest takeaway is like 2148 01:31:29,560 --> 01:31:35,239 what did we learn from this project 2149 01:31:31,960 --> 01:31:38,360 [Laughter] 2150 01:31:35,239 --> 01:31:40,719 um firstly is don't package things um 2151 01:31:38,360 --> 01:31:42,600 unsafely and even if it is safe don't 2152 01:31:40,719 --> 01:31:43,480 add an additional packet of wires in the 2153 01:31:42,600 --> 01:31:48,480 same 2154 01:31:43,480 --> 01:31:51,920 spot um secondly plastic in cars it um 2155 01:31:48,480 --> 01:31:54,000 it melts uh we learned that the hard way 2156 01:31:51,920 --> 01:31:57,159 uh three contrary to the popular 2157 01:31:54,000 --> 01:32:01,480 engineering belief duct tape can't solve 2158 01:31:57,159 --> 01:32:04,440 everything um especially not last minute 2159 01:32:01,480 --> 01:32:05,520 so uh fourth cooling components is very 2160 01:32:04,440 --> 01:32:07,040 important when you don't have enough 2161 01:32:05,520 --> 01:32:10,320 resistance or it just generally isn't 2162 01:32:07,040 --> 01:32:10,320 cool enough things tend to blow 2163 01:32:10,880 --> 01:32:16,159 up um fifth plastic is not that strong 2164 01:32:13,920 --> 01:32:17,239 so when you're messing around with it um 2165 01:32:16,159 --> 01:32:20,080 it can 2166 01:32:17,239 --> 01:32:22,239 snap uh and sixth have spare parts to 2167 01:32:20,080 --> 01:32:24,520 make last minute adjustments uh we 2168 01:32:22,239 --> 01:32:25,800 didn't have many so um this is the best 2169 01:32:24,520 --> 01:32:29,060 we 2170 01:32:25,800 --> 01:32:32,030 had thank you very 2171 01:32:29,060 --> 01:32:33,200 [Applause] 2172 01:32:32,030 --> 01:32:42,119 [Laughter] 2173 01:32:33,200 --> 01:32:45,199 [Applause] 2174 01:32:42,119 --> 01:32:47,520 much that was amazing okay well I'm a 2175 01:32:45,199 --> 01:32:49,320 little bit sad that we weren't shouting 2176 01:32:47,520 --> 01:32:50,440 confetti but I am glad that I still have 2177 01:32:49,320 --> 01:32:53,679 my 2178 01:32:50,440 --> 01:32:56,280 eyesight nothing caught fire we don't 2179 01:32:53,679 --> 01:32:58,239 have have to get the uh safety team to 2180 01:32:56,280 --> 01:33:01,000 make 2181 01:32:58,239 --> 01:33:03,239 a to to worry about our care and then 2182 01:33:01,000 --> 01:33:09,360 apologize to the venue that could have 2183 01:33:03,239 --> 01:33:13,560 been concerning um we have a few minutes 2184 01:33:09,360 --> 01:33:15,119 but not many for some questions so uh 2185 01:33:13,560 --> 01:33:16,560 students do you want to all kind of 2186 01:33:15,119 --> 01:33:19,320 stand up 2187 01:33:16,560 --> 01:33:22,000 and don't crowd around the robot that's 2188 01:33:19,320 --> 01:33:25,480 not a great idea let's let's let's kind 2189 01:33:22,000 --> 01:33:27,040 of space use some space out here as well 2190 01:33:25,480 --> 01:33:29,800 uh let's let's take the robot off the 2191 01:33:27,040 --> 01:33:32,719 stage I don't want to touch it I'm sorry 2192 01:33:29,800 --> 01:33:34,920 I just got a power supply from the 2193 01:33:32,719 --> 01:33:38,040 dump you didn't tell me this earlier 2194 01:33:34,920 --> 01:33:41,480 about the yeah no I I I feel like I 2195 01:33:38,040 --> 01:33:43,719 learned a lot of things during that talk 2196 01:33:41,480 --> 01:33:46,840 and yet I still have more questions at 2197 01:33:43,719 --> 01:33:50,400 the end of the talk than than during the 2198 01:33:46,840 --> 01:33:50,400 talk pass um 2199 01:33:50,960 --> 01:33:55,679 perfect oh yep components it's all right 2200 01:33:54,159 --> 01:33:59,510 all we're 2201 01:33:55,679 --> 01:34:02,600 good it y yep 2202 01:33:59,510 --> 01:34:02,600 [Music] 2203 01:34:09,000 --> 01:34:15,520 um 2204 01:34:11,080 --> 01:34:17,119 I I look I yeah I'm future me is really 2205 01:34:15,520 --> 01:34:20,480 concerned about the risk assessment that 2206 01:34:17,119 --> 01:34:22,280 I'm going to have to do next year but um 2207 01:34:20,480 --> 01:34:24,280 that's that's future 2208 01:34:22,280 --> 01:34:25,920 that's I just like like to say again 2209 01:34:24,280 --> 01:34:27,220 these are not my students I don't have 2210 01:34:25,920 --> 01:34:30,159 duty of 2211 01:34:27,220 --> 01:34:34,080 [Music] 2212 01:34:30,159 --> 01:34:39,480 care okay um 2213 01:34:34,080 --> 01:34:41,360 so um what questions do we all have also 2214 01:34:39,480 --> 01:34:43,880 while while you're thinking up questions 2215 01:34:41,360 --> 01:34:45,639 um talking talking about it being 2216 01:34:43,880 --> 01:34:47,320 difficult to get this through security 2217 01:34:45,639 --> 01:34:50,080 and convince people that it's not a bomb 2218 01:34:47,320 --> 01:34:54,040 it's basically a 2219 01:34:50,080 --> 01:34:56,320 bomb you're you're setting you're using 2220 01:34:54,040 --> 01:34:57,639 exploding conf that like that sounds 2221 01:34:56,320 --> 01:35:00,960 like yeah okay maybe that's a 2222 01:34:57,639 --> 01:35:05,360 technicality um uh where is the 2223 01:35:00,960 --> 01:35:09,159 microphone uh what what people have 2224 01:35:05,360 --> 01:35:11,679 questions okay hang on come 2225 01:35:09,159 --> 01:35:14,280 down that wasn't a question that was I 2226 01:35:11,679 --> 01:35:16,480 can be your that your a question now uh 2227 01:35:14,280 --> 01:35:17,760 but we've we've only got one microphone 2228 01:35:16,480 --> 01:35:20,360 so we're going to have to run it back 2229 01:35:17,760 --> 01:35:23,320 and forth to theud I'm happy to do the 2230 01:35:20,360 --> 01:35:26,080 running oh very far thank you Evan just 2231 01:35:23,320 --> 01:35:32,400 I need my fitness up today you're 2232 01:35:26,080 --> 01:35:36,800 welcome um for vev the bipedal robot 2233 01:35:32,400 --> 01:35:39,880 team do you uh after your experience 2234 01:35:36,800 --> 01:35:42,520 with robotics and the failures of 2235 01:35:39,880 --> 01:35:44,199 mechanics in the real world do you enjoy 2236 01:35:42,520 --> 01:35:48,360 it more or 2237 01:35:44,199 --> 01:35:52,000 less think think com I'm com com yep yep 2238 01:35:48,360 --> 01:35:55,560 this is like a really bad relay okay all 2239 01:35:52,000 --> 01:35:57,320 right um is it enjoyable yes I mean uh 2240 01:35:55,560 --> 01:36:00,119 is it enjoy enjoyable for my bank 2241 01:35:57,320 --> 01:36:00,119 account not really 2242 01:36:02,719 --> 01:36:08,360 but uh it was pretty fun I mean it just 2243 01:36:05,639 --> 01:36:10,880 took way too long like some librar just 2244 01:36:08,360 --> 01:36:13,360 didn't work for some reason I don't know 2245 01:36:10,880 --> 01:36:14,600 why yeah staying up till like 2: a.m. to 2246 01:36:13,360 --> 01:36:16,560 download a bunch of libraries last 2247 01:36:14,600 --> 01:36:18,000 minute was not fun um I think all the 2248 01:36:16,560 --> 01:36:19,840 fun engineering Parts was actually 2249 01:36:18,000 --> 01:36:22,239 pretty good though probably do it more 2250 01:36:19,840 --> 01:36:25,040 from now on if it's 2251 01:36:22,239 --> 01:36:29,960 safe I feel like that is a loadbearing 2252 01:36:25,040 --> 01:36:32,280 if um are there any other 2253 01:36:29,960 --> 01:36:34,960 questions yes why don't you call and I 2254 01:36:32,280 --> 01:36:34,960 will repeat your 2255 01:36:35,119 --> 01:36:38,600 question question for 2256 01:36:41,159 --> 01:36:46,239 Annabelle question for Annabelle did you 2257 01:36:43,239 --> 01:36:48,960 think of using I need a better memory 2258 01:36:46,239 --> 01:36:52,760 the my God it's been a long day the XML 2259 01:36:48,960 --> 01:36:54,400 Library uh rather than Rex um I have not 2260 01:36:52,760 --> 01:36:57,320 heard of the XML library before but I 2261 01:36:54,400 --> 01:37:00,320 will look into that thank you for the 2262 01:36:57,320 --> 01:37:00,320 recommendation 2263 01:37:04,000 --> 01:37:09,440 uh a question for the 2264 01:37:06,760 --> 01:37:11,600 train let me let me repeat the question 2265 01:37:09,440 --> 01:37:15,600 um how long did you have to stand there 2266 01:37:11,600 --> 01:37:18,280 for the cargo train I filmed was only uh 2267 01:37:15,600 --> 01:37:21,880 2 minutes or so but but but the video 2268 01:37:18,280 --> 01:37:23,679 file is like 800 megabytes so it's it's 2269 01:37:21,880 --> 01:37:24,960 not small 2270 01:37:23,679 --> 01:37:32,360 that is a big 2271 01:37:24,960 --> 01:37:32,360 train um yes yes Nick um 2272 01:37:38,719 --> 01:37:42,679 the that that was a question of for the 2273 01:37:41,239 --> 01:37:45,599 wi-fi hacking was it you who had the 2274 01:37:42,679 --> 01:37:48,520 free candy network available earlier 2275 01:37:45,599 --> 01:37:50,840 today no that was not me but I want to 2276 01:37:48,520 --> 01:37:50,840 know who 2277 01:37:52,239 --> 01:37:57,920 did um 2278 01:37:54,440 --> 01:38:01,239 um if there are more 2279 01:37:57,920 --> 01:38:04,480 questions you can maybe oh there's one 2280 01:38:01,239 --> 01:38:04,480 okay yep shout it 2281 01:38:06,480 --> 01:38:12,360 out it's a compliment ah a compliment 2282 01:38:10,760 --> 01:38:14,520 for Annabelle hang 2283 01:38:12,360 --> 01:38:16,400 on hang on hang on this sounds like it 2284 01:38:14,520 --> 01:38:18,800 needs the microphone where's the 2285 01:38:16,400 --> 01:38:22,199 microphone it's a I know it I know it's 2286 01:38:18,800 --> 01:38:24,599 a comment I don't you could you could 2287 01:38:22,199 --> 01:38:26,119 phrase your question as a question by 2288 01:38:24,599 --> 01:38:29,480 asking everyone by complimenting and 2289 01:38:26,119 --> 01:38:31,920 then saying do you agree room and then 2290 01:38:29,480 --> 01:38:34,400 we could all 2291 01:38:31,920 --> 01:38:37,080 clap um basically for Annabel you know 2292 01:38:34,400 --> 01:38:38,520 what she has done is amazing right so I 2293 01:38:37,080 --> 01:38:40,840 work with the team you know to develop 2294 01:38:38,520 --> 01:38:42,560 applications and we look into the user 2295 01:38:40,840 --> 01:38:45,920 interface and you know um user 2296 01:38:42,560 --> 01:38:47,719 experience and then that's how in an 2297 01:38:45,920 --> 01:38:50,080 application in commercial scale or in 2298 01:38:47,719 --> 01:38:52,320 Enterprise scale what we can do is 2299 01:38:50,080 --> 01:38:54,679 utilize you know similar logic to 2300 01:38:52,320 --> 01:38:57,599 actually give you know look and feel of 2301 01:38:54,679 --> 01:38:59,520 what they like and look you know so ask 2302 01:38:57,599 --> 01:39:01,840 them to you know upload image you like 2303 01:38:59,520 --> 01:39:03,599 and then render the colors you know in 2304 01:39:01,840 --> 01:39:05,239 the in the scheme there you know um 2305 01:39:03,599 --> 01:39:07,560 based on your logic and that's really 2306 01:39:05,239 --> 01:39:09,639 great and so I can see a lot of you know 2307 01:39:07,560 --> 01:39:11,159 Brilliant Minds over here so yeah thank 2308 01:39:09,639 --> 01:39:17,520 you you know thank you very much 2309 01:39:11,159 --> 01:39:17,520 everybody so room do you agree yeah 2310 01:39:17,760 --> 01:39:25,360 yeah hey room do you agree that all of 2311 01:39:21,199 --> 01:39:25,360 our students are amazing 2312 01:39:28,400 --> 01:39:35,520 I do 2313 01:39:30,760 --> 01:39:38,159 um okay I will grab some slides out can 2314 01:39:35,520 --> 01:39:40,080 I get my co-presenters to give all of 2315 01:39:38,159 --> 01:39:42,360 the students a 2316 01:39:40,080 --> 01:39:46,840 mug and now I'm going to make the 2317 01:39:42,360 --> 01:39:46,840 students act out their own favorite 2318 01:39:49,920 --> 01:39:53,920 emoji um 2319 01:39:56,600 --> 01:40:01,120 [Laughter] 2320 01:40:01,360 --> 01:40:05,880 can we get one more massive Round of 2321 01:40:02,719 --> 01:40:09,360 Applause for our fabulous 2322 01:40:05,880 --> 01:40:12,560 students put it down go on shoot go done 2323 01:40:09,360 --> 01:40:12,560 you're done