1 00:00:00,539 --> 00:00:03,539 foreign 2 00:00:08,639 --> 00:00:14,700 welcome back to the education student 3 00:00:11,700 --> 00:00:16,320 showcase which if you were a speaker 4 00:00:14,700 --> 00:00:17,460 earlier today just block your ears for a 5 00:00:16,320 --> 00:00:20,100 second is my favorite part of the day 6 00:00:17,460 --> 00:00:23,100 okay cool it's fine done no one no one 7 00:00:20,100 --> 00:00:26,400 no don't tell them don't tell them 8 00:00:23,100 --> 00:00:30,119 um but before we get into the delightful 9 00:00:26,400 --> 00:00:33,180 amazing fantastic chaos that is these 10 00:00:30,119 --> 00:00:35,940 fantastic students we have a word from 11 00:00:33,180 --> 00:00:39,420 our sponsors can I introduce Bruce 12 00:00:35,940 --> 00:00:41,940 fooder who is just a phenomenal human 13 00:00:39,420 --> 00:00:44,280 um yeah that that there's the intro 14 00:00:41,940 --> 00:00:46,559 phenomenal human that works for me thank 15 00:00:44,280 --> 00:00:48,600 you thank you 16 00:00:46,559 --> 00:00:51,239 look it's it's exciting to be here again 17 00:00:48,600 --> 00:00:52,739 uh I remember back when I was working 18 00:00:51,239 --> 00:00:54,239 with Nikki and Amanda at the Australian 19 00:00:52,739 --> 00:00:56,640 Computing Academy 20 00:00:54,239 --> 00:00:58,980 um we came to pycon with the suggestion 21 00:00:56,640 --> 00:01:01,199 of a student Showcase in one of the 22 00:00:58,980 --> 00:01:03,120 years it was being organized and the 23 00:01:01,199 --> 00:01:04,680 pycon organizing committee took a risk 24 00:01:03,120 --> 00:01:06,600 uh decided that they were going to give 25 00:01:04,680 --> 00:01:08,280 it a go and ever since then it's been a 26 00:01:06,600 --> 00:01:10,200 key part of the program on the education 27 00:01:08,280 --> 00:01:12,000 specialist track day and I know everyone 28 00:01:10,200 --> 00:01:15,299 really enjoys it so it's absolutely 29 00:01:12,000 --> 00:01:17,400 phenomenal to be here and to see how the 30 00:01:15,299 --> 00:01:18,979 student showcase continues to thrive at 31 00:01:17,400 --> 00:01:22,020 this conference it really is exciting 32 00:01:18,979 --> 00:01:24,299 I'm here as the chief education officer 33 00:01:22,020 --> 00:01:26,340 at grock Academy for those of you who 34 00:01:24,299 --> 00:01:28,680 don't know who we are we're an education 35 00:01:26,340 --> 00:01:31,320 technology uh charitable not charitable 36 00:01:28,680 --> 00:01:33,240 not for profit and I'm going to give you 37 00:01:31,320 --> 00:01:34,560 a sense of what we do by starting with 38 00:01:33,240 --> 00:01:38,040 our mission 39 00:01:34,560 --> 00:01:41,700 um it's a pretty big audacious purpose 40 00:01:38,040 --> 00:01:43,740 this one what we are aiming to do and 41 00:01:41,700 --> 00:01:46,259 it's the whole reason that we establish 42 00:01:43,740 --> 00:01:48,540 the organization is to basically educate 43 00:01:46,259 --> 00:01:49,920 all all Learners and we don't mind you 44 00:01:48,540 --> 00:01:52,380 know how old you are what your 45 00:01:49,920 --> 00:01:54,479 background is in the transformative 46 00:01:52,380 --> 00:01:57,840 Computing skills knowledge and 47 00:01:54,479 --> 00:01:59,399 dispositions empowering everyone to meet 48 00:01:57,840 --> 00:02:02,579 the challenges and seize the 49 00:01:59,399 --> 00:02:05,579 opportunities of the future so our goal 50 00:02:02,579 --> 00:02:08,220 eventually is to eliminate the need for 51 00:02:05,579 --> 00:02:09,899 our existence but a big part of actually 52 00:02:08,220 --> 00:02:12,060 getting there and being able to make 53 00:02:09,899 --> 00:02:15,300 this happen is supporting teachers in 54 00:02:12,060 --> 00:02:18,060 schools so when the opportunity came to 55 00:02:15,300 --> 00:02:20,520 be a part of this event and to sponsor 56 00:02:18,060 --> 00:02:23,160 the education specialist track we jumped 57 00:02:20,520 --> 00:02:25,260 at the opportunity immediately and it's 58 00:02:23,160 --> 00:02:27,080 just so great to see so many people here 59 00:02:25,260 --> 00:02:29,760 sharing what they're doing with python 60 00:02:27,080 --> 00:02:32,879 how they're educating the students of 61 00:02:29,760 --> 00:02:34,319 Australia and to be here and see some of 62 00:02:32,879 --> 00:02:36,480 the amazing work that's happening in our 63 00:02:34,319 --> 00:02:40,280 classrooms so if you don't know what we 64 00:02:36,480 --> 00:02:42,120 do we offer our online automated 65 00:02:40,280 --> 00:02:44,760 feedback 66 00:02:42,120 --> 00:02:46,860 um activities for students and we offer 67 00:02:44,760 --> 00:02:48,780 those for free I'll talk a little bit 68 00:02:46,860 --> 00:02:50,099 about more about that in a moment we 69 00:02:48,780 --> 00:02:51,720 have a number of unplugged activities 70 00:02:50,099 --> 00:02:53,580 and we've got a lot of expertise in the 71 00:02:51,720 --> 00:02:56,819 team around professional learning and 72 00:02:53,580 --> 00:02:58,319 teacher development as well so we 73 00:02:56,819 --> 00:03:00,540 provide dedicated customer support to 74 00:02:58,319 --> 00:03:02,640 all of our customers it is free and 75 00:03:00,540 --> 00:03:04,500 that's all because of the support we've 76 00:03:02,640 --> 00:03:06,959 received through our industry Partners 77 00:03:04,500 --> 00:03:09,060 in particular wise Tech Global and that 78 00:03:06,959 --> 00:03:10,819 what that means is that no matter where 79 00:03:09,060 --> 00:03:13,379 you're teaching whether you're a student 80 00:03:10,819 --> 00:03:15,000 if you are someone who's out there 81 00:03:13,379 --> 00:03:18,300 working in industry and wants to do some 82 00:03:15,000 --> 00:03:21,060 work with the schools in your area or 83 00:03:18,300 --> 00:03:22,800 provide some mentoring and support there 84 00:03:21,060 --> 00:03:25,080 is no cost to access any of the 85 00:03:22,800 --> 00:03:26,220 materials on the platform so if you are 86 00:03:25,080 --> 00:03:27,900 interested in learning a little bit more 87 00:03:26,220 --> 00:03:30,840 about what we do please come and see me 88 00:03:27,900 --> 00:03:32,640 at some stage we'll find a way to give 89 00:03:30,840 --> 00:03:34,080 you the tools you need or that you're 90 00:03:32,640 --> 00:03:37,080 after to support the work that's going 91 00:03:34,080 --> 00:03:39,000 on in schools and yeah just we're really 92 00:03:37,080 --> 00:03:41,599 excited to be a part of the event that's 93 00:03:39,000 --> 00:03:41,599 it from me 94 00:03:42,420 --> 00:03:45,319 thank you very much 95 00:03:45,540 --> 00:03:51,780 thank you okay 96 00:03:48,120 --> 00:03:53,940 number one while we get Bianca up on 97 00:03:51,780 --> 00:03:55,799 Deck 98 00:03:53,940 --> 00:03:57,299 um I'm going to introduce her would you 99 00:03:55,799 --> 00:03:59,940 like to introduce her with me Alex 100 00:03:57,299 --> 00:04:02,819 Johnny okay all right we've got a guest 101 00:03:59,940 --> 00:04:04,560 star doing the introductions as well 102 00:04:02,819 --> 00:04:07,080 hey 103 00:04:04,560 --> 00:04:09,120 can you say we're happy to welcome 104 00:04:07,080 --> 00:04:12,420 Bianca 105 00:04:09,120 --> 00:04:15,000 well I'm happy to welcome Bianca so 106 00:04:12,420 --> 00:04:16,739 she's going to be talking 107 00:04:15,000 --> 00:04:19,500 magic happening over there about Music 108 00:04:16,739 --> 00:04:21,959 Mate which is a python-based music 109 00:04:19,500 --> 00:04:25,199 recommendation system Bianca has been 110 00:04:21,959 --> 00:04:27,660 programming for about nine years 111 00:04:25,199 --> 00:04:30,000 um her favorite emoji is the goose Emoji 112 00:04:27,660 --> 00:04:32,100 now this is a relevant question back in 113 00:04:30,000 --> 00:04:34,199 the day because we used to I used to 114 00:04:32,100 --> 00:04:36,060 have to do the intros via on online but 115 00:04:34,199 --> 00:04:38,040 I don't have please don't make me do the 116 00:04:36,060 --> 00:04:39,479 honk I don't 117 00:04:38,040 --> 00:04:41,639 um and she recently learned that the 118 00:04:39,479 --> 00:04:42,900 process that a translator goes through 119 00:04:41,639 --> 00:04:44,220 to create I really should have read this 120 00:04:42,900 --> 00:04:46,500 before convert a high-level language 121 00:04:44,220 --> 00:04:49,080 like python into machine load code that 122 00:04:46,500 --> 00:04:51,919 can understand that is fantastic uh 123 00:04:49,080 --> 00:04:51,919 welcome go yes 124 00:04:52,380 --> 00:04:55,520 yeah thank you 125 00:04:56,300 --> 00:05:03,240 now it's on awesome all right so Music 126 00:05:00,600 --> 00:05:05,820 Mate hi hi I'm Bianca 127 00:05:03,240 --> 00:05:07,740 um first of all uh you should know that 128 00:05:05,820 --> 00:05:09,780 I oh my notes on it on here but that's 129 00:05:07,740 --> 00:05:10,860 fine uh we'll free ball 130 00:05:09,780 --> 00:05:14,520 um 131 00:05:10,860 --> 00:05:17,160 um so I am a music like addict and I 132 00:05:14,520 --> 00:05:18,960 also love Python and giving me free 133 00:05:17,160 --> 00:05:21,240 choice is a really bad idea 134 00:05:18,960 --> 00:05:23,820 um so I made Music Mate for my ipt 135 00:05:21,240 --> 00:05:25,440 information processes technology 136 00:05:23,820 --> 00:05:27,539 um final project 137 00:05:25,440 --> 00:05:30,840 um yeah 138 00:05:27,539 --> 00:05:33,840 um basically we had to make a program 139 00:05:30,840 --> 00:05:35,759 that used a database to do literally 140 00:05:33,840 --> 00:05:37,860 anything we wanted 141 00:05:35,759 --> 00:05:40,860 um so I knew that I wanted to make a 142 00:05:37,860 --> 00:05:42,600 music system uh so Music Mate is the 143 00:05:40,860 --> 00:05:45,600 system I made 144 00:05:42,600 --> 00:05:47,639 um so it's a web app that helps to find 145 00:05:45,600 --> 00:05:49,620 and create playlists based on like a 146 00:05:47,639 --> 00:05:52,860 user's Spotify information 147 00:05:49,620 --> 00:05:56,340 um it uses Spotify which is like a API 148 00:05:52,860 --> 00:05:59,699 library for Spotify the Spotify API uses 149 00:05:56,340 --> 00:06:01,979 pythog 2 and it uses flask and I'm gonna 150 00:05:59,699 --> 00:06:03,419 have a bit of a disclaimer there's a lot 151 00:06:01,979 --> 00:06:04,919 that I'd love to talk about but 10 152 00:06:03,419 --> 00:06:08,160 minutes is a really short amount of time 153 00:06:04,919 --> 00:06:09,600 to speak so that's my GitHub There's the 154 00:06:08,160 --> 00:06:11,400 link to the repository if anyone wants 155 00:06:09,600 --> 00:06:15,060 to see it 156 00:06:11,400 --> 00:06:17,880 um yeah so basically the first step to 157 00:06:15,060 --> 00:06:19,320 my project is it needs to get like the 158 00:06:17,880 --> 00:06:21,539 user's track information there's two 159 00:06:19,320 --> 00:06:22,979 sides that's getting the making your own 160 00:06:21,539 --> 00:06:24,720 playlist and finding someone else's 161 00:06:22,979 --> 00:06:26,039 playlist so in order to make your own 162 00:06:24,720 --> 00:06:28,979 you need to get 163 00:06:26,039 --> 00:06:30,660 your first tracks so there are three 164 00:06:28,979 --> 00:06:32,220 there's get getting recent tracks 165 00:06:30,660 --> 00:06:33,600 getting top tracks and getting tracks 166 00:06:32,220 --> 00:06:36,720 from your library they're all basically 167 00:06:33,600 --> 00:06:39,180 the same essentially I make a call to 168 00:06:36,720 --> 00:06:41,100 the API and then it gives me this like 169 00:06:39,180 --> 00:06:43,560 massive response which is really 170 00:06:41,100 --> 00:06:45,900 annoying to go through 171 00:06:43,560 --> 00:06:48,780 um to like by myself which is why I make 172 00:06:45,900 --> 00:06:51,240 my own smaller little dictionary that 173 00:06:48,780 --> 00:06:53,580 has lists and things inside it kind of 174 00:06:51,240 --> 00:06:55,319 looks like Json but it's not it's python 175 00:06:53,580 --> 00:06:56,460 don't be fooled 176 00:06:55,319 --> 00:07:00,360 um 177 00:06:56,460 --> 00:07:02,940 uh so essentially I just I make this I 178 00:07:00,360 --> 00:07:06,300 use uh Spotify for this and then I 179 00:07:02,940 --> 00:07:07,740 return it to my flask main line 180 00:07:06,300 --> 00:07:10,620 um and then I do a similar thing for 181 00:07:07,740 --> 00:07:13,080 getting uh user playlist 182 00:07:10,620 --> 00:07:14,880 um so I do this fun little thing called 183 00:07:13,080 --> 00:07:17,160 stealing user data 184 00:07:14,880 --> 00:07:18,060 um it sounds a bit more serious than it 185 00:07:17,160 --> 00:07:21,300 is 186 00:07:18,060 --> 00:07:24,660 um essentially I in order to service the 187 00:07:21,300 --> 00:07:28,139 second half of my uh project is I need 188 00:07:24,660 --> 00:07:29,880 to find uh songs that have fine 189 00:07:28,139 --> 00:07:32,039 playlists that have a specific song in 190 00:07:29,880 --> 00:07:34,560 them so I thought why not if I'm already 191 00:07:32,039 --> 00:07:36,300 handling what's in a playlist and 192 00:07:34,560 --> 00:07:37,259 playlists in general why not just do it 193 00:07:36,300 --> 00:07:38,940 in this 194 00:07:37,259 --> 00:07:41,880 um do I tell the user I do this no 195 00:07:38,940 --> 00:07:43,860 should I probably will I know 196 00:07:41,880 --> 00:07:46,259 um 197 00:07:43,860 --> 00:07:48,840 um so essentially similar processes 198 00:07:46,259 --> 00:07:50,400 before call the API make my own little 199 00:07:48,840 --> 00:07:54,539 Json 200 00:07:50,400 --> 00:07:57,900 um and then I call a second uh function 201 00:07:54,539 --> 00:08:00,539 to just get the items and then put it in 202 00:07:57,900 --> 00:08:04,319 my postgres database 203 00:08:00,539 --> 00:08:06,599 um onto databases I've got four tables 204 00:08:04,319 --> 00:08:09,720 um I've got one for like a main tracks 205 00:08:06,599 --> 00:08:12,000 our main playlist one to like log user 206 00:08:09,720 --> 00:08:14,099 songs and want to log the songs that are 207 00:08:12,000 --> 00:08:15,599 in playlists 208 00:08:14,099 --> 00:08:18,060 um was there anything I wanted to say 209 00:08:15,599 --> 00:08:19,280 about this not really I had to use um 210 00:08:18,060 --> 00:08:21,539 postgres 211 00:08:19,280 --> 00:08:23,220 I didn't have to but I wanted to because 212 00:08:21,539 --> 00:08:26,460 that's how I knew that's how I knew how 213 00:08:23,220 --> 00:08:28,919 to do SQL so and databasing and stuff so 214 00:08:26,460 --> 00:08:30,479 I did that essentially this is the pi 215 00:08:28,919 --> 00:08:33,120 sock that I have 216 00:08:30,479 --> 00:08:36,479 um it's very similar to normal SQL I 217 00:08:33,120 --> 00:08:40,020 just kind of write my SQL statement and 218 00:08:36,479 --> 00:08:44,039 then I fetch everything and then if the 219 00:08:40,020 --> 00:08:46,140 if the playlist uh if the playlist TR uh 220 00:08:44,039 --> 00:08:48,720 the track wasn't in the playlist or I 221 00:08:46,140 --> 00:08:51,360 didn't have it registered then I would 222 00:08:48,720 --> 00:08:55,200 add it if not I'd Skip and then I'd 223 00:08:51,360 --> 00:08:58,920 return a oh this is finding anyway I'd 224 00:08:55,200 --> 00:09:01,680 find a I'd find it if I had it for the 225 00:08:58,920 --> 00:09:03,420 track I'm losing my track if I thought 226 00:09:01,680 --> 00:09:06,000 but that's fine 227 00:09:03,420 --> 00:09:09,420 um essentially I'd return or playlist 228 00:09:06,000 --> 00:09:11,220 IDs that have a specific track ID in 229 00:09:09,420 --> 00:09:12,360 them I only store the playlist IDs 230 00:09:11,220 --> 00:09:15,360 because that's all I need to store 231 00:09:12,360 --> 00:09:17,640 Spotify has these like massive beefy API 232 00:09:15,360 --> 00:09:19,260 servers I don't I have this little 233 00:09:17,640 --> 00:09:21,600 computer 234 00:09:19,260 --> 00:09:23,160 um so I kind of I give it all the help 235 00:09:21,600 --> 00:09:26,279 it needs 236 00:09:23,160 --> 00:09:28,200 um so python URL uis are really weird um 237 00:09:26,279 --> 00:09:30,240 at least to me 238 00:09:28,200 --> 00:09:32,940 um so I didn't enter up until like three 239 00:09:30,240 --> 00:09:34,440 months ago I had never actually made a 240 00:09:32,940 --> 00:09:35,700 UI before 241 00:09:34,440 --> 00:09:37,740 um I also take software design 242 00:09:35,700 --> 00:09:40,440 development um and I need I use like 243 00:09:37,740 --> 00:09:43,980 tikenta and app jar 244 00:09:40,440 --> 00:09:45,959 um for that uh but that kind of wasn't 245 00:09:43,980 --> 00:09:49,080 really helpful it kind of looked older 246 00:09:45,959 --> 00:09:51,360 than I did so I didn't want to use it 247 00:09:49,080 --> 00:09:54,240 um so then um my software teacher 248 00:09:51,360 --> 00:09:56,459 suggested I used um Anvil which is like 249 00:09:54,240 --> 00:09:57,959 an online form creator that kind of that 250 00:09:56,459 --> 00:10:00,480 didn't let me use external libraries 251 00:09:57,959 --> 00:10:02,040 unless I paid for it and I'm poor so I 252 00:10:00,480 --> 00:10:05,100 didn't want to 253 00:10:02,040 --> 00:10:07,040 um and then so then I moved on to abstra 254 00:10:05,100 --> 00:10:10,560 Dash and that had similar 255 00:10:07,040 --> 00:10:13,500 limitations uh then I tried uh Django 256 00:10:10,560 --> 00:10:15,480 and that was really hard and very scary 257 00:10:13,500 --> 00:10:17,220 um so I abandoned that with a week left 258 00:10:15,480 --> 00:10:19,560 and then I tried flask some of my 259 00:10:17,220 --> 00:10:22,260 friends recommended flask and that 260 00:10:19,560 --> 00:10:24,420 worked awesomely I went to ncss earlier 261 00:10:22,260 --> 00:10:26,459 this year and then we used flask there 262 00:10:24,420 --> 00:10:28,740 and so that was really helpful I kind of 263 00:10:26,459 --> 00:10:30,600 already had a base understanding and 264 00:10:28,740 --> 00:10:32,540 I've been doing HTML for like nine years 265 00:10:30,600 --> 00:10:35,339 so it wasn't too much of a problem 266 00:10:32,540 --> 00:10:37,260 essentially this is my routing 267 00:10:35,339 --> 00:10:38,399 um my like creating playlist and adding 268 00:10:37,260 --> 00:10:39,839 tracks to playlist is the most 269 00:10:38,399 --> 00:10:41,580 interesting 270 00:10:39,839 --> 00:10:44,940 um I essentially 271 00:10:41,580 --> 00:10:46,320 get I I have two ways you could go you 272 00:10:44,940 --> 00:10:47,880 could either click on a playlist to add 273 00:10:46,320 --> 00:10:49,440 it to a pre-existing playlist or you can 274 00:10:47,880 --> 00:10:52,440 make your own 275 00:10:49,440 --> 00:10:53,820 um and then essentially if you're if 276 00:10:52,440 --> 00:10:56,519 you've clicked then you know it's a post 277 00:10:53,820 --> 00:10:59,399 statement and I can just uh get all the 278 00:10:56,519 --> 00:11:02,160 information from the final or from the 279 00:10:59,399 --> 00:11:05,160 last page otherwise I can use Global 280 00:11:02,160 --> 00:11:07,980 variables which I've defined in the 281 00:11:05,160 --> 00:11:09,899 creating which you can vaguely see 282 00:11:07,980 --> 00:11:14,399 um and then I redirect the user to the 283 00:11:09,899 --> 00:11:16,680 ads playlist and then add a uh basically 284 00:11:14,399 --> 00:11:20,040 again if it's a post it knows that it's 285 00:11:16,680 --> 00:11:22,860 just going to get it from the last if 286 00:11:20,040 --> 00:11:25,500 not then it can get from the global and 287 00:11:22,860 --> 00:11:29,459 then it can add use the API to add it in 288 00:11:25,500 --> 00:11:33,959 and then render some nice HTML so demo 289 00:11:29,459 --> 00:11:35,940 time hopefully I can do this I did it 290 00:11:33,959 --> 00:11:37,320 did break like not 10 seconds ago but 291 00:11:35,940 --> 00:11:38,040 that's fine 292 00:11:37,320 --> 00:11:39,959 um 293 00:11:38,040 --> 00:11:43,160 I don't have that going I didn't test 294 00:11:39,959 --> 00:11:43,160 this I'm sorry AV 295 00:11:44,100 --> 00:11:47,940 um 296 00:11:45,000 --> 00:11:50,640 oh well I've got a video why not 297 00:11:47,940 --> 00:11:52,200 and this is why my ipt teacher sold me 298 00:11:50,640 --> 00:11:54,260 to do videos 299 00:11:52,200 --> 00:11:54,260 um 300 00:11:54,420 --> 00:11:58,279 I think I may have broken it 301 00:12:00,000 --> 00:12:05,619 okay 302 00:12:02,460 --> 00:12:05,619 [Applause] 303 00:12:06,660 --> 00:12:11,399 handy dandy video so essentially this is 304 00:12:09,720 --> 00:12:13,440 uh you need to click on a button to log 305 00:12:11,399 --> 00:12:15,480 in it logs in let's do playlists by 306 00:12:13,440 --> 00:12:16,980 recommendation 307 00:12:15,480 --> 00:12:19,800 policy anchor please click on this 308 00:12:16,980 --> 00:12:21,300 faster oh that's why it takes 15 seconds 309 00:12:19,800 --> 00:12:24,000 to load 310 00:12:21,300 --> 00:12:27,000 um because I have to Loop through 75 311 00:12:24,000 --> 00:12:29,220 objects of the 75 items in a dictionary 312 00:12:27,000 --> 00:12:31,140 which takes a really long time because 313 00:12:29,220 --> 00:12:33,360 of course it does 314 00:12:31,140 --> 00:12:34,500 um yay and you can see horizontal 315 00:12:33,360 --> 00:12:37,019 scrolling 316 00:12:34,500 --> 00:12:38,459 um my favorite I love CSS with all my 317 00:12:37,019 --> 00:12:41,519 heart 318 00:12:38,459 --> 00:12:42,899 um so I spent a bit too long on it 319 00:12:41,519 --> 00:12:44,760 um 320 00:12:42,899 --> 00:12:47,399 um so basically you can once you click 321 00:12:44,760 --> 00:12:49,500 on a track you can scroll through all 322 00:12:47,399 --> 00:12:51,420 the recommendations select all fancy 323 00:12:49,500 --> 00:12:52,680 JavaScript we love I stole it from stack 324 00:12:51,420 --> 00:12:53,660 Overflow 325 00:12:52,680 --> 00:12:56,399 um 326 00:12:53,660 --> 00:12:58,260 and then again it takes a bit long to 327 00:12:56,399 --> 00:12:59,760 quite a while to load 328 00:12:58,260 --> 00:13:01,800 um because it's getting all of your 329 00:12:59,760 --> 00:13:05,100 playlist information 330 00:13:01,800 --> 00:13:08,100 but once it's done it does it will 331 00:13:05,100 --> 00:13:10,139 list all your playlists 332 00:13:08,100 --> 00:13:12,300 um which is cool 333 00:13:10,139 --> 00:13:16,079 um and then you can make your own 334 00:13:12,300 --> 00:13:18,600 um I did misspell pycon twice but that's 335 00:13:16,079 --> 00:13:20,399 fine I put a b instead of a p 336 00:13:18,600 --> 00:13:21,480 I don't know how I did that 337 00:13:20,399 --> 00:13:23,100 um they're really far away on the 338 00:13:21,480 --> 00:13:25,560 keyboard if you want you can make it a 339 00:13:23,100 --> 00:13:27,480 public or a private playlist and then 340 00:13:25,560 --> 00:13:29,940 you can create it 341 00:13:27,480 --> 00:13:32,160 um now this is where my technical 342 00:13:29,940 --> 00:13:34,019 abilities are limited because it shares 343 00:13:32,160 --> 00:13:36,480 it I'm supposed to have Spotify up here 344 00:13:34,019 --> 00:13:37,500 but I didn't screen record that so let's 345 00:13:36,480 --> 00:13:39,000 skip 346 00:13:37,500 --> 00:13:41,220 um 347 00:13:39,000 --> 00:13:43,760 um okay well I can't skip 348 00:13:41,220 --> 00:13:43,760 awesome 349 00:13:44,630 --> 00:13:48,330 [Music] 350 00:13:45,230 --> 00:13:48,330 [Applause] 351 00:13:51,740 --> 00:13:58,519 amazing okay well the Applause cards can 352 00:13:55,079 --> 00:13:58,519 show on excellent okay 353 00:13:58,740 --> 00:14:03,360 I I didn't realize we were going to have 354 00:14:00,959 --> 00:14:05,519 a crossover to the API track as well 355 00:14:03,360 --> 00:14:09,019 that's amazing oh I'm sorry I forgot the 356 00:14:05,519 --> 00:14:12,660 Hat I'm sorry yes okay 357 00:14:09,019 --> 00:14:14,820 next up we have Sean who is going to be 358 00:14:12,660 --> 00:14:18,120 talking about automating my School's 359 00:14:14,820 --> 00:14:21,959 attendance form during covert Sean has 360 00:14:18,120 --> 00:14:24,899 been coding for about four years uh 361 00:14:21,959 --> 00:14:26,760 is that the pizza Emoji no it's a comet 362 00:14:24,899 --> 00:14:28,740 Emoji I don't 363 00:14:26,760 --> 00:14:29,639 sense I should yeah 364 00:14:28,740 --> 00:14:31,380 um 365 00:14:29,639 --> 00:14:34,620 recently you learn about the walrus 366 00:14:31,380 --> 00:14:37,019 operator which is super cool 367 00:14:34,620 --> 00:14:38,210 um that's it excellent I've stalled 368 00:14:37,019 --> 00:14:41,359 enough 369 00:14:38,210 --> 00:14:41,359 [Applause] 370 00:14:44,040 --> 00:14:48,360 all right so hi I'm Sean and I'm at your 371 00:14:46,440 --> 00:14:50,300 talkstor from Sydney 372 00:14:48,360 --> 00:14:55,040 um today I'm going to talk about how I 373 00:14:50,300 --> 00:14:55,040 automated my attendance during lockdown 374 00:14:56,040 --> 00:15:01,139 um this is for educational purposes so 375 00:14:58,500 --> 00:15:03,779 if any anyone yeah calls me out on this 376 00:15:01,139 --> 00:15:05,699 I uh is purely hypothetical 377 00:15:03,779 --> 00:15:08,279 all right so background information I'm 378 00:15:05,699 --> 00:15:11,220 sure you guys know but in 2020 and 2021 379 00:15:08,279 --> 00:15:13,740 our schools move to online learning also 380 00:15:11,220 --> 00:15:15,779 during that time that right released a 381 00:15:13,740 --> 00:15:17,220 new FPS game called Battle Run I liked 382 00:15:15,779 --> 00:15:19,399 it a lot so you can see where this is 383 00:15:17,220 --> 00:15:19,399 going 384 00:15:19,560 --> 00:15:25,560 uh yeah so in particular my school had a 385 00:15:23,399 --> 00:15:29,040 attendance form it was a it's a Google 386 00:15:25,560 --> 00:15:32,399 form and like looks something like this 387 00:15:29,040 --> 00:15:34,620 uh yes every period you need you need to 388 00:15:32,399 --> 00:15:36,899 fill this in and I really it's really 389 00:15:34,620 --> 00:15:38,940 annoying I didn't like it I wanted to 390 00:15:36,899 --> 00:15:41,940 take naps play video games 391 00:15:38,940 --> 00:15:44,100 um so so yeah hence the 392 00:15:41,940 --> 00:15:46,980 hence the automation 393 00:15:44,100 --> 00:15:48,720 so the first thing I did was to reverse 394 00:15:46,980 --> 00:15:50,519 engineer the form like to make my own 395 00:15:48,720 --> 00:15:52,320 version of the phone so I can like play 396 00:15:50,519 --> 00:15:55,440 around and test with it uh you can see 397 00:15:52,320 --> 00:15:57,000 there's 41 responses so it adds a lot of 398 00:15:55,440 --> 00:16:01,019 testing 399 00:15:57,000 --> 00:16:02,579 um yeah so so when you own the form you 400 00:16:01,019 --> 00:16:05,040 can make a 401 00:16:02,579 --> 00:16:06,540 pre-filled link that's the second thing 402 00:16:05,040 --> 00:16:07,500 I did 403 00:16:06,540 --> 00:16:10,019 um 404 00:16:07,500 --> 00:16:12,060 the the link of it is the pre-filled 405 00:16:10,019 --> 00:16:14,940 link that comes out uh 406 00:16:12,060 --> 00:16:16,800 and particularly do you want to pay 407 00:16:14,940 --> 00:16:18,000 attention to the purple part um 408 00:16:16,800 --> 00:16:21,240 everything that comes after the question 409 00:16:18,000 --> 00:16:23,699 mark so you can pretty much guess like 410 00:16:21,240 --> 00:16:26,699 I'll go back but oh no no 411 00:16:23,699 --> 00:16:28,440 like they correspond to each entry So 412 00:16:26,699 --> 00:16:30,180 like 413 00:16:28,440 --> 00:16:32,699 um the things that come after the equal 414 00:16:30,180 --> 00:16:34,800 signs are the answers to the entries but 415 00:16:32,699 --> 00:16:36,980 um what we don't know is what the 416 00:16:34,800 --> 00:16:40,680 numbers are like the IDS of each entry 417 00:16:36,980 --> 00:16:44,040 but luckily stack Overflow has the 418 00:16:40,680 --> 00:16:47,120 answer and yeah I'm not the first person 419 00:16:44,040 --> 00:16:51,600 to think of this you know so 420 00:16:47,120 --> 00:16:53,519 uh great like like-minded people 421 00:16:51,600 --> 00:16:57,480 um so one of the answers 422 00:16:53,519 --> 00:17:01,019 as the solution which is yeah inspect 423 00:16:57,480 --> 00:17:01,920 element yes 424 00:17:01,019 --> 00:17:03,600 um 425 00:17:01,920 --> 00:17:06,900 yeah so that's what I did for each one 426 00:17:03,600 --> 00:17:09,600 of them and I right clicked inspect and 427 00:17:06,900 --> 00:17:11,880 I copied the ID in 428 00:17:09,600 --> 00:17:14,819 uh just side note there's a lot of 429 00:17:11,880 --> 00:17:17,880 entries so I'll go back but 430 00:17:14,819 --> 00:17:20,400 uh basically we have two weeks we have 431 00:17:17,880 --> 00:17:21,720 five days and we have six periods so 432 00:17:20,400 --> 00:17:23,640 each one of them has different entries 433 00:17:21,720 --> 00:17:27,240 so that's like 434 00:17:23,640 --> 00:17:29,840 um pretty sure it's around 60 entries uh 435 00:17:27,240 --> 00:17:32,460 that's what I need to to to 436 00:17:29,840 --> 00:17:34,080 figure out but if you think about like 437 00:17:32,460 --> 00:17:36,240 the people who made the forms they're 438 00:17:34,080 --> 00:17:38,580 also like six years in the school so 439 00:17:36,240 --> 00:17:41,340 that's like unlucky for them they need 440 00:17:38,580 --> 00:17:42,000 to make all those forms yeah but these 441 00:17:41,340 --> 00:17:45,120 are 442 00:17:42,000 --> 00:17:46,500 order IDs that I painstakingly copied 443 00:17:45,120 --> 00:17:49,320 out 444 00:17:46,500 --> 00:17:52,380 um yeah and then and then it's pretty 445 00:17:49,320 --> 00:17:54,900 easy from there you just 446 00:17:52,380 --> 00:17:56,820 after the question about so when I coded 447 00:17:54,900 --> 00:17:59,280 this I didn't have any like I was a 448 00:17:56,820 --> 00:18:01,620 beginner at coding so this is 449 00:17:59,280 --> 00:18:04,679 like I just this is just string 450 00:18:01,620 --> 00:18:08,340 concatenation I just you know added them 451 00:18:04,679 --> 00:18:11,299 to the back of the form URL it's yes up 452 00:18:08,340 --> 00:18:13,500 till now this is all very like usual 453 00:18:11,299 --> 00:18:15,299 this is what you learn in Python you 454 00:18:13,500 --> 00:18:17,160 know when you start learning python it's 455 00:18:15,299 --> 00:18:20,520 pretty basic 456 00:18:17,160 --> 00:18:22,799 um but so yeah so what comes out is the 457 00:18:20,520 --> 00:18:24,000 URL which is which is nice you know I 458 00:18:22,799 --> 00:18:25,679 just need to now all I need to do is 459 00:18:24,000 --> 00:18:29,160 just click on it and um 460 00:18:25,679 --> 00:18:32,120 out comes the pre-filled link uh I can 461 00:18:29,160 --> 00:18:32,120 demo I think 462 00:18:41,820 --> 00:18:48,480 uh yeah and I'll just click on this and 463 00:18:46,140 --> 00:18:50,520 oh 464 00:18:48,480 --> 00:18:54,600 but it is something for you but like you 465 00:18:50,520 --> 00:18:54,600 know you have to click on it still uh 466 00:18:55,090 --> 00:18:58,880 [Music] 467 00:18:56,480 --> 00:19:01,860 yeah so 468 00:18:58,880 --> 00:19:02,820 yeah so it's still kind of annoying 469 00:19:01,860 --> 00:19:05,100 because you still need to click on the 470 00:19:02,820 --> 00:19:06,660 link and you still need to uh you need 471 00:19:05,100 --> 00:19:07,320 there's still manual input to it you 472 00:19:06,660 --> 00:19:08,820 know 473 00:19:07,320 --> 00:19:11,220 um so there's a second attempt this is 474 00:19:08,820 --> 00:19:12,960 an improvement on the first one um see I 475 00:19:11,220 --> 00:19:14,400 didn't know anything for I don't know my 476 00:19:12,960 --> 00:19:15,840 my thought process is I need to click on 477 00:19:14,400 --> 00:19:18,000 the link and I need to enter the link so 478 00:19:15,840 --> 00:19:20,760 why do I just how do I open a link in 479 00:19:18,000 --> 00:19:22,260 Python how do I send input on python 480 00:19:20,760 --> 00:19:23,700 which is which led to this you know I 481 00:19:22,260 --> 00:19:28,559 just opened the link with my computer 482 00:19:23,700 --> 00:19:30,660 and then I yeah enter enter the link 483 00:19:28,559 --> 00:19:32,160 um but this is still pretty annoying 484 00:19:30,660 --> 00:19:33,840 because I'm playing video games right I 485 00:19:32,160 --> 00:19:35,880 don't wanna I don't want to open it in 486 00:19:33,840 --> 00:19:40,200 the browser it's gonna distract from my 487 00:19:35,880 --> 00:19:43,200 experience so the third attempt is um 488 00:19:40,200 --> 00:19:46,080 oh [ __ ] at this point at this point I 489 00:19:43,200 --> 00:19:48,120 learned about something called requests 490 00:19:46,080 --> 00:19:49,679 um I'm pretty sure you guys are familiar 491 00:19:48,120 --> 00:19:52,740 with it but everything is apparently 492 00:19:49,679 --> 00:19:55,740 made out of HTTP requests and Google 493 00:19:52,740 --> 00:19:57,539 forms are no different so the things 494 00:19:55,740 --> 00:19:59,400 after the question marks I found was 495 00:19:57,539 --> 00:20:02,460 actually like what they call like a data 496 00:19:59,400 --> 00:20:05,220 payload and you can 497 00:20:02,460 --> 00:20:06,900 you can use request to post to yeah you 498 00:20:05,220 --> 00:20:09,059 can put YouTube's request supposed to 499 00:20:06,900 --> 00:20:11,059 submit the form instead 500 00:20:09,059 --> 00:20:11,059 um 501 00:20:11,640 --> 00:20:15,000 yeah so it's pretty much the same thing 502 00:20:13,980 --> 00:20:16,500 except 503 00:20:15,000 --> 00:20:18,000 the the entries are different because 504 00:20:16,500 --> 00:20:21,000 there's a test form and there's like the 505 00:20:18,000 --> 00:20:22,559 actual form but yeah yeah you see how 506 00:20:21,000 --> 00:20:25,320 they correspond 507 00:20:22,559 --> 00:20:26,640 um but this doesn't work unluckily 508 00:20:25,320 --> 00:20:28,620 because 509 00:20:26,640 --> 00:20:30,720 uh 510 00:20:28,620 --> 00:20:32,460 you need to have a you need to be logged 511 00:20:30,720 --> 00:20:34,620 into your education email when you're 512 00:20:32,460 --> 00:20:36,299 submitting the actual form so it works 513 00:20:34,620 --> 00:20:38,400 my test form because I don't have I made 514 00:20:36,299 --> 00:20:39,600 it with my own email but for for the 515 00:20:38,400 --> 00:20:41,880 actual attendance form you need to be 516 00:20:39,600 --> 00:20:42,480 logged into your education email 517 00:20:41,880 --> 00:20:44,580 um 518 00:20:42,480 --> 00:20:47,039 which is unlucky but you know maybe in 519 00:20:44,580 --> 00:20:49,919 uni when I have I have another Google 520 00:20:47,039 --> 00:20:52,200 form I can just submit it with requests 521 00:20:49,919 --> 00:20:54,240 um but not for this one so 522 00:20:52,200 --> 00:20:57,059 the fourth attempt so my dad told me 523 00:20:54,240 --> 00:20:58,919 about something called selenium uh which 524 00:20:57,059 --> 00:20:59,940 is which is great look at the tagline 525 00:20:58,919 --> 00:21:01,320 you know 526 00:20:59,940 --> 00:21:03,720 um what you do with that power is 527 00:21:01,320 --> 00:21:05,340 entirely up to you borrowing web-based 528 00:21:03,720 --> 00:21:06,960 and administration tasks can be 529 00:21:05,340 --> 00:21:09,900 automated that's great yeah that's what 530 00:21:06,960 --> 00:21:13,980 I'm looking for uh yeah so 531 00:21:09,900 --> 00:21:15,630 that leads to the final product Oh wait 532 00:21:13,980 --> 00:21:17,520 um oh there we go 533 00:21:15,630 --> 00:21:19,500 [Music] 534 00:21:17,520 --> 00:21:21,120 let me just 535 00:21:19,500 --> 00:21:23,340 die yeah so the final product I just 536 00:21:21,120 --> 00:21:25,380 basically log in on the automated 537 00:21:23,340 --> 00:21:28,140 browser log into my email on automated 538 00:21:25,380 --> 00:21:32,539 browser and go take my pre-filled link 539 00:21:28,140 --> 00:21:32,539 and submit it so here it is 540 00:21:46,320 --> 00:21:49,100 yeah I'd say 541 00:21:58,320 --> 00:22:02,240 yeah it's been recorded yeah 542 00:22:06,000 --> 00:22:09,840 I just just so it's just a note like 543 00:22:08,400 --> 00:22:11,760 this is for demonstration purposes but 544 00:22:09,840 --> 00:22:13,440 you can you can have you can disable the 545 00:22:11,760 --> 00:22:14,820 GUI and it'll just run completely in the 546 00:22:13,440 --> 00:22:17,400 background so that's great I can just 547 00:22:14,820 --> 00:22:22,159 yeah I can just play my video again yeah 548 00:22:17,400 --> 00:22:22,159 yeah that's that's about it yeah 549 00:22:25,559 --> 00:22:29,760 try that at home I find myself in the 550 00:22:27,600 --> 00:22:31,140 fun situation of having to tell the 551 00:22:29,760 --> 00:22:33,419 children to remember that this is a 552 00:22:31,140 --> 00:22:35,950 family-friendly event no um okay thank 553 00:22:33,419 --> 00:22:37,760 you so much Sean Rebecca 554 00:22:35,950 --> 00:22:40,860 [Music] 555 00:22:37,760 --> 00:22:43,020 Rebecca's gonna talk about simple Python 556 00:22:40,860 --> 00:22:45,840 simulations she's been coding for about 557 00:22:43,020 --> 00:22:50,039 six years since year six her favorite 558 00:22:45,840 --> 00:22:52,320 emojis include the dancing emoji uh and 559 00:22:50,039 --> 00:22:54,360 she recently learned about the amazing 560 00:22:52,320 --> 00:22:56,280 interconnected fiber optic cables that 561 00:22:54,360 --> 00:22:58,080 make the internet work through the on 562 00:22:56,280 --> 00:22:59,820 the on the surface of the oceans and how 563 00:22:58,080 --> 00:23:01,799 cool is that 564 00:22:59,820 --> 00:23:04,080 I think that's pretty cool 565 00:23:01,799 --> 00:23:06,980 oh more stalling um I've run out of 566 00:23:04,080 --> 00:23:10,640 questions I went too fast okay okay 567 00:23:06,980 --> 00:23:10,640 we're running now 568 00:23:11,700 --> 00:23:17,820 um okay 569 00:23:13,080 --> 00:23:19,620 so first off uh yeah oh okay we're good 570 00:23:17,820 --> 00:23:21,960 um sorry the title sounds scary but I 571 00:23:19,620 --> 00:23:23,760 promise it's really not that fancy 572 00:23:21,960 --> 00:23:26,100 um so hi my name is Rebecca Lamont I go 573 00:23:23,760 --> 00:23:27,539 to Roseville College which is in Sydney 574 00:23:26,100 --> 00:23:29,159 um and I'm here with my friend Bianca 575 00:23:27,539 --> 00:23:31,320 today and today I'm going to talk about 576 00:23:29,159 --> 00:23:33,240 two projects that I recently completed 577 00:23:31,320 --> 00:23:34,380 as part of my year 12 assessments I 578 00:23:33,240 --> 00:23:36,840 don't think I'm gonna have time to go to 579 00:23:34,380 --> 00:23:38,340 the second unfortunately but um hope 580 00:23:36,840 --> 00:23:40,440 maybe I'll be able to show you a demo 581 00:23:38,340 --> 00:23:41,940 quickly at the end so for so first it 582 00:23:40,440 --> 00:23:43,200 was a seating sorter 583 00:23:41,940 --> 00:23:45,000 um which I made as part of my software 584 00:23:43,200 --> 00:23:46,140 design development major project and 585 00:23:45,000 --> 00:23:48,539 second of all 586 00:23:46,140 --> 00:23:51,000 um an oil drop experiment um simulation 587 00:23:48,539 --> 00:23:52,440 that I made as part of a physics task 588 00:23:51,000 --> 00:23:54,600 um I've got a timer here to cut myself 589 00:23:52,440 --> 00:23:56,400 off when it runs over so hopefully that 590 00:23:54,600 --> 00:23:58,440 doesn't happen I do have a penchant for 591 00:23:56,400 --> 00:24:00,000 doing that but anyway so first of all 592 00:23:58,440 --> 00:24:02,700 talking about seating sorta or the 593 00:24:00,000 --> 00:24:04,559 software thing so what is seating sorter 594 00:24:02,700 --> 00:24:06,240 so seating sorter is a tool made for 595 00:24:04,559 --> 00:24:08,159 events and event planners aiming to 596 00:24:06,240 --> 00:24:10,380 solve issues regarding seating guests at 597 00:24:08,159 --> 00:24:12,240 a table as every individual guest has 598 00:24:10,380 --> 00:24:13,860 personal preferences so this is aimed to 599 00:24:12,240 --> 00:24:16,020 like ease the load of like event 600 00:24:13,860 --> 00:24:17,340 planners and event hosts Etc as you know 601 00:24:16,020 --> 00:24:18,539 they want to be organizing everything 602 00:24:17,340 --> 00:24:20,700 else they don't want to be spending 603 00:24:18,539 --> 00:24:21,780 hours upon hours of organizing who wants 604 00:24:20,700 --> 00:24:24,360 to sit next to each other based on like 605 00:24:21,780 --> 00:24:25,919 petty feuds Etc so the program itself 606 00:24:24,360 --> 00:24:27,720 takes input of table shape and 607 00:24:25,919 --> 00:24:29,640 dimensions to produce a visualization of 608 00:24:27,720 --> 00:24:32,039 the table which then corresponds to the 609 00:24:29,640 --> 00:24:34,260 program's output and then it also takes 610 00:24:32,039 --> 00:24:37,260 input of guest preferences as statements 611 00:24:34,260 --> 00:24:39,000 which include requests such as guests 612 00:24:37,260 --> 00:24:40,919 wanting to sit next to or not next to 613 00:24:39,000 --> 00:24:44,039 another guest or wanting to sit at a 614 00:24:40,919 --> 00:24:46,020 particular seat or um anywhere so I'll 615 00:24:44,039 --> 00:24:48,720 quickly just um show you the program 616 00:24:46,020 --> 00:24:50,880 here 617 00:24:48,720 --> 00:24:53,280 um okay let me just this might be a bit 618 00:24:50,880 --> 00:24:55,860 laggy I'm not sure okay so this is the 619 00:24:53,280 --> 00:24:58,919 program itself I use the takinta GUI as 620 00:24:55,860 --> 00:25:00,539 I wasn't aware of like any other GUI 621 00:24:58,919 --> 00:25:02,460 capabilities and I think in hindsight 622 00:25:00,539 --> 00:25:04,140 perhaps using like flask or Django would 623 00:25:02,460 --> 00:25:06,659 have been more suitable as I'll show you 624 00:25:04,140 --> 00:25:08,580 that the like table visualization is 625 00:25:06,659 --> 00:25:10,980 pretty iffy so let's say that I want to 626 00:25:08,580 --> 00:25:12,780 do like a circle shape and I click um do 627 00:25:10,980 --> 00:25:14,880 five for example it's just going to run 628 00:25:12,780 --> 00:25:16,200 the same as the square shape because I 629 00:25:14,880 --> 00:25:17,640 decided to use like a ASCII 630 00:25:16,200 --> 00:25:19,620 multiplication because I couldn't figure 631 00:25:17,640 --> 00:25:23,580 out how to get to kinta to do it itself 632 00:25:19,620 --> 00:25:24,960 which was um so I used the dot grid uh I 633 00:25:23,580 --> 00:25:26,940 don't know functionality to do this 634 00:25:24,960 --> 00:25:28,919 which was originally going to be perfect 635 00:25:26,940 --> 00:25:31,260 in my head but obviously it doesn't 636 00:25:28,919 --> 00:25:32,460 always end up that way 637 00:25:31,260 --> 00:25:33,720 um yeah so then the main functionality 638 00:25:32,460 --> 00:25:35,520 you've obviously got this drop down menu 639 00:25:33,720 --> 00:25:38,520 with the different shapes so let's just 640 00:25:35,520 --> 00:25:39,720 do a rectangle let's do like a like a I 641 00:25:38,520 --> 00:25:42,659 don't know if we do like a bigger number 642 00:25:39,720 --> 00:25:44,880 I'll just show you really quickly 643 00:25:42,659 --> 00:25:46,980 um it kind of gets a bit buggy um I 644 00:25:44,880 --> 00:25:49,740 think is which as expected so here's 645 00:25:46,980 --> 00:25:51,419 text entry for the users let's say that 646 00:25:49,740 --> 00:25:53,480 I want to set 647 00:25:51,419 --> 00:25:53,480 um 648 00:25:53,940 --> 00:25:58,440 wants to oh sorry 649 00:25:56,940 --> 00:25:59,820 sit 650 00:25:58,440 --> 00:26:02,039 um let's just say I want to sit outside 651 00:25:59,820 --> 00:26:04,260 the range really quick say I want to sit 652 00:26:02,039 --> 00:26:06,600 at 13 so it's got automatic like 653 00:26:04,260 --> 00:26:08,520 updating of how many guests just for 654 00:26:06,600 --> 00:26:10,080 ease of use and then if I submit this 655 00:26:08,520 --> 00:26:11,880 it's going to give me an error message 656 00:26:10,080 --> 00:26:14,940 saying I'm sitting outside the range and 657 00:26:11,880 --> 00:26:16,500 these numbers here correspond to the 658 00:26:14,940 --> 00:26:19,440 numbers at the table up there and that's 659 00:26:16,500 --> 00:26:21,299 just the basic functionality of the 660 00:26:19,440 --> 00:26:22,980 program itself and then this is just 661 00:26:21,299 --> 00:26:25,320 props up a help button and I think 662 00:26:22,980 --> 00:26:28,320 that's the end of my demo 663 00:26:25,320 --> 00:26:29,760 um okay so yeah so how was it made 664 00:26:28,320 --> 00:26:31,500 there's three main elements to the 665 00:26:29,760 --> 00:26:33,360 program first off the visual interface 666 00:26:31,500 --> 00:26:35,640 second of all text analysis and third of 667 00:26:33,360 --> 00:26:37,740 all the algorithm itself so I first like 668 00:26:35,640 --> 00:26:39,539 made the algorithm just using text-based 669 00:26:37,740 --> 00:26:41,159 input and then I create the visual 670 00:26:39,539 --> 00:26:43,740 interface and then I integrated them 671 00:26:41,159 --> 00:26:46,140 together by modularizing the 672 00:26:43,740 --> 00:26:48,360 um all the whole thing yeah 673 00:26:46,140 --> 00:26:50,580 and so then just to further like 674 00:26:48,360 --> 00:26:51,960 breakdown of that so I used Python's 675 00:26:50,580 --> 00:26:54,600 object-oriented capabilities 676 00:26:51,960 --> 00:26:56,279 specifically so here on in the top 677 00:26:54,600 --> 00:26:58,020 picture you can see my class attendant 678 00:26:56,279 --> 00:26:59,940 which every guest was created in this 679 00:26:58,020 --> 00:27:02,039 which allowed me to store the attributes 680 00:26:59,940 --> 00:27:03,840 of their name their relation being like 681 00:27:02,039 --> 00:27:05,940 if they're fixed and next to or anywhere 682 00:27:03,840 --> 00:27:07,320 I guess and I used a numerical code for 683 00:27:05,940 --> 00:27:09,120 this instead of 684 00:27:07,320 --> 00:27:11,100 um like a string code because then I was 685 00:27:09,120 --> 00:27:12,779 able to later sort it into lists to then 686 00:27:11,100 --> 00:27:14,760 allow me to do my sequential algorithm 687 00:27:12,779 --> 00:27:15,840 which I'll expand on later 688 00:27:14,760 --> 00:27:17,580 um obviously like personally if they 689 00:27:15,840 --> 00:27:19,080 want to sit which is like where either 690 00:27:17,580 --> 00:27:21,419 the seat number that they want to sit at 691 00:27:19,080 --> 00:27:22,919 or like who they want to or don't want 692 00:27:21,419 --> 00:27:24,659 to sit next to and then negation is so 693 00:27:22,919 --> 00:27:26,460 that it'll it can differentiate between 694 00:27:24,659 --> 00:27:28,380 wanting to sit next to or like not 695 00:27:26,460 --> 00:27:29,880 wanting to sit next to people 696 00:27:28,380 --> 00:27:31,380 um and then the table class which I only 697 00:27:29,880 --> 00:27:33,000 used once because mine only deals with 698 00:27:31,380 --> 00:27:35,159 one table but for future I would like to 699 00:27:33,000 --> 00:27:37,020 expand it to have multiple tables to 700 00:27:35,159 --> 00:27:39,360 allow for like more proper event 701 00:27:37,020 --> 00:27:40,740 planning capabilities such as I don't 702 00:27:39,360 --> 00:27:43,320 know like a formal or like a wedding 703 00:27:40,740 --> 00:27:46,740 where you do have more than one um this 704 00:27:43,320 --> 00:27:49,200 bottom code here is the kind of live 705 00:27:46,740 --> 00:27:50,880 updating that I showed you earlier 706 00:27:49,200 --> 00:27:52,440 um yeah so like lots of modularization 707 00:27:50,880 --> 00:27:55,799 between it because it is like an event 708 00:27:52,440 --> 00:27:58,020 driven process overall 709 00:27:55,799 --> 00:28:00,299 um so yeah then this is like further on 710 00:27:58,020 --> 00:28:01,799 that the text analysis I mentioned 711 00:28:00,299 --> 00:28:03,240 um so it's a lot of like string 712 00:28:01,799 --> 00:28:06,960 manipulation using like replace 713 00:28:03,240 --> 00:28:09,600 functions um and testing stuff like that 714 00:28:06,960 --> 00:28:12,659 and then it um relates to my further 715 00:28:09,600 --> 00:28:14,400 classes and saves them all as inner fat 716 00:28:12,659 --> 00:28:15,900 fist I think 717 00:28:14,400 --> 00:28:18,600 um yeah so then what is this algorithm 718 00:28:15,900 --> 00:28:20,340 I've talked about so the algorithm has 719 00:28:18,600 --> 00:28:21,960 four main steps so first of all it's to 720 00:28:20,340 --> 00:28:22,980 seat the fixed people and these fixed 721 00:28:21,960 --> 00:28:24,900 people 722 00:28:22,980 --> 00:28:27,480 um are those users who have requested it 723 00:28:24,900 --> 00:28:28,919 a specific specific seat second of all 724 00:28:27,480 --> 00:28:30,059 it seats the positive pairs these are 725 00:28:28,919 --> 00:28:31,860 the pairs of people who want to sit 726 00:28:30,059 --> 00:28:33,480 together third of all seats the negative 727 00:28:31,860 --> 00:28:35,220 pairs those who don't want to sit next 728 00:28:33,480 --> 00:28:36,840 to a certain person and fourth of all 729 00:28:35,220 --> 00:28:38,279 seats that anywhere people these people 730 00:28:36,840 --> 00:28:39,659 don't have like a specified seat or 731 00:28:38,279 --> 00:28:40,919 relation so they can literally sit in 732 00:28:39,659 --> 00:28:42,480 any other spot so therefore we want to 733 00:28:40,919 --> 00:28:44,460 put them last because then that's where 734 00:28:42,480 --> 00:28:46,679 the free spots are and they're least 735 00:28:44,460 --> 00:28:48,240 constrained so in this example on the 736 00:28:46,679 --> 00:28:49,500 board Rebecca and Rio would be a 737 00:28:48,240 --> 00:28:51,480 negative pair because they don't want to 738 00:28:49,500 --> 00:28:54,059 sit together Emily would be a fixed 739 00:28:51,480 --> 00:28:55,500 person and Amy would be an anywhere 740 00:28:54,059 --> 00:28:57,720 person 741 00:28:55,500 --> 00:28:59,100 um yeah and then the seating pairs was 742 00:28:57,720 --> 00:29:00,600 like the most difficult part of the 743 00:28:59,100 --> 00:29:02,760 whole process because I had to check 744 00:29:00,600 --> 00:29:04,440 many conditions including if the other 745 00:29:02,760 --> 00:29:06,480 person is already seated if the person 746 00:29:04,440 --> 00:29:08,580 themselves is seated like where there is 747 00:29:06,480 --> 00:29:10,020 free space on the table and then also 748 00:29:08,580 --> 00:29:11,700 having to wrap around the boundaries of 749 00:29:10,020 --> 00:29:13,559 the table so for this example because 750 00:29:11,700 --> 00:29:14,760 it's a circle or it could be a rectangle 751 00:29:13,559 --> 00:29:16,080 square 752 00:29:14,760 --> 00:29:17,460 um one and four would be still 753 00:29:16,080 --> 00:29:18,779 considered next to each other so I had 754 00:29:17,460 --> 00:29:21,000 to make sure that the program could 755 00:29:18,779 --> 00:29:22,740 recognize this I do actually have a 756 00:29:21,000 --> 00:29:24,419 really weird table shape of a line which 757 00:29:22,740 --> 00:29:26,399 is like the only one that doesn't have 758 00:29:24,419 --> 00:29:27,840 this kind of end wrapping embedded 759 00:29:26,399 --> 00:29:30,480 Within 760 00:29:27,840 --> 00:29:32,880 um so on top of this this is kind of the 761 00:29:30,480 --> 00:29:34,320 process itself so just in that order as 762 00:29:32,880 --> 00:29:35,880 you can see at the top it's sorting the 763 00:29:34,320 --> 00:29:37,980 list based on the conditions that I 764 00:29:35,880 --> 00:29:42,000 stored in the objects 765 00:29:37,980 --> 00:29:43,559 um the other instances of the objects 766 00:29:42,000 --> 00:29:45,539 um and then this is just more on to that 767 00:29:43,559 --> 00:29:47,220 and then the seating negations function 768 00:29:45,539 --> 00:29:48,899 which I use for both seeing the positive 769 00:29:47,220 --> 00:29:49,740 and the negative pairs because it ended 770 00:29:48,899 --> 00:29:51,659 up 771 00:29:49,740 --> 00:29:53,279 um being more less the same so that's 772 00:29:51,659 --> 00:29:54,960 like making sure it's wrapping on the 773 00:29:53,279 --> 00:29:57,419 edges and then it's creating a list 774 00:29:54,960 --> 00:29:58,919 which it then um filters of like options 775 00:29:57,419 --> 00:30:00,299 and then it orders the list where 776 00:29:58,919 --> 00:30:02,640 there's the least amount of options and 777 00:30:00,299 --> 00:30:04,080 seats those people first and then like 778 00:30:02,640 --> 00:30:05,580 um should run it again I'm not sure if 779 00:30:04,080 --> 00:30:07,380 it actually does 780 00:30:05,580 --> 00:30:08,700 um and in hindsight I think this problem 781 00:30:07,380 --> 00:30:10,320 could actually be tackled quite 782 00:30:08,700 --> 00:30:13,260 elegantly using like the mathematical 783 00:30:10,320 --> 00:30:14,580 concept of permutations and combinations 784 00:30:13,260 --> 00:30:16,380 um which would allow for like multiple 785 00:30:14,580 --> 00:30:18,419 variations of the given Solution by the 786 00:30:16,380 --> 00:30:20,039 problem as this program currently runs 787 00:30:18,419 --> 00:30:21,899 on the expectation that all problems are 788 00:30:20,039 --> 00:30:23,580 like seatable all of the inputs that is 789 00:30:21,899 --> 00:30:26,220 given by the user are possible to be 790 00:30:23,580 --> 00:30:28,799 seated on like a singular table 791 00:30:26,220 --> 00:30:31,080 um yeah which I think is a limitation of 792 00:30:28,799 --> 00:30:32,700 it itself so then ultimately does this 793 00:30:31,080 --> 00:30:34,200 work I would say it doesn't work 794 00:30:32,700 --> 00:30:36,000 perfectly but it does work to some 795 00:30:34,200 --> 00:30:37,380 extent in terms of what I wanted to 796 00:30:36,000 --> 00:30:38,700 achieve 797 00:30:37,380 --> 00:30:40,080 um obviously there's been issues with 798 00:30:38,700 --> 00:30:41,340 the combination of the interface and 799 00:30:40,080 --> 00:30:44,460 algorithm with like the largest problem 800 00:30:41,340 --> 00:30:47,700 I faced and it would be good to have 801 00:30:44,460 --> 00:30:49,620 like a graphic perhaps use CSS or flask 802 00:30:47,700 --> 00:30:51,419 functionality to be clearer for users 803 00:30:49,620 --> 00:30:52,919 and more accurate 804 00:30:51,419 --> 00:30:54,480 um and then the key learning I'd say is 805 00:30:52,919 --> 00:30:56,039 the importance of significant variable 806 00:30:54,480 --> 00:30:57,539 names because I had multiple variables 807 00:30:56,039 --> 00:30:59,840 with the same name at the end as they 808 00:30:57,539 --> 00:31:02,700 were passing between multiple functions 809 00:30:59,840 --> 00:31:04,679 and modules and stuff and then it made 810 00:31:02,700 --> 00:31:06,360 it really hard for me to bug fix towards 811 00:31:04,679 --> 00:31:07,919 the end so yeah make sure your dot 812 00:31:06,360 --> 00:31:09,659 dictionary is good 813 00:31:07,919 --> 00:31:11,279 um and then for the future like future 814 00:31:09,659 --> 00:31:13,620 plans I'd want to like bug fix the 815 00:31:11,279 --> 00:31:16,200 algorithm improve the visualizations add 816 00:31:13,620 --> 00:31:17,820 multiple tables and be able to like 817 00:31:16,200 --> 00:31:19,200 reuse the program without re-running it 818 00:31:17,820 --> 00:31:20,940 because currently there's some bug in it 819 00:31:19,200 --> 00:31:22,320 that if you click back and like try and 820 00:31:20,940 --> 00:31:23,580 restart the program 821 00:31:22,320 --> 00:31:26,039 um it still has the previous 822 00:31:23,580 --> 00:31:27,419 requirements from the previous running 823 00:31:26,039 --> 00:31:30,179 and then also having more error messages 824 00:31:27,419 --> 00:31:31,799 such as it being not possible and I 825 00:31:30,179 --> 00:31:34,320 think that's all I have time for really 826 00:31:31,799 --> 00:31:35,880 quickly yeah I don't think I've got time 827 00:31:34,320 --> 00:31:37,919 to go over this 828 00:31:35,880 --> 00:31:40,380 um I basically just use Pi game to make 829 00:31:37,919 --> 00:31:42,120 a model of the physics experiment and I 830 00:31:40,380 --> 00:31:43,919 realized pie game is harder than it 831 00:31:42,120 --> 00:31:46,440 looks because of all the class instances 832 00:31:43,919 --> 00:31:47,760 I tried to do this the night before I 833 00:31:46,440 --> 00:31:49,620 submitted it at 3am it was quite 834 00:31:47,760 --> 00:31:52,320 traumatic for me anyway not sure I'm 835 00:31:49,620 --> 00:31:53,760 ever going to do PI game again but the 836 00:31:52,320 --> 00:31:55,980 main point is I had to make my own timer 837 00:31:53,760 --> 00:31:57,419 function because the timer I couldn't 838 00:31:55,980 --> 00:31:59,460 find an inbuilt one which was kind of 839 00:31:57,419 --> 00:32:01,320 tricky and then yeah I was trying to do 840 00:31:59,460 --> 00:32:03,720 like a like an event driven approach but 841 00:32:01,320 --> 00:32:06,480 it's mainly like a time-based 842 00:32:03,720 --> 00:32:08,100 um on Pi game and yeah that is the main 843 00:32:06,480 --> 00:32:09,120 thing that I learned oh also the 844 00:32:08,100 --> 00:32:10,860 importance of planning the project 845 00:32:09,120 --> 00:32:12,659 beforehand because all the issues with 846 00:32:10,860 --> 00:32:14,340 the maths and physics behind it I didn't 847 00:32:12,659 --> 00:32:16,080 have that down pat before I began which 848 00:32:14,340 --> 00:32:17,460 then obviously led to further problems 849 00:32:16,080 --> 00:32:19,679 down the line like the coding itself 850 00:32:17,460 --> 00:32:21,419 wasn't really the main issue in the at 851 00:32:19,679 --> 00:32:23,460 the end of the day so yeah thank you 852 00:32:21,419 --> 00:32:26,880 dancing man 853 00:32:23,460 --> 00:32:28,559 that was amazing 854 00:32:26,880 --> 00:32:30,539 um I think those are fantastic life 855 00:32:28,559 --> 00:32:32,419 lessons that maybe one day we all can 856 00:32:30,539 --> 00:32:36,779 also aspire to learn 857 00:32:32,419 --> 00:32:39,899 plan uh maybe I'll learn one day okay so 858 00:32:36,779 --> 00:32:42,480 next up on Deck we have Izzy Izzy is 859 00:32:39,899 --> 00:32:45,240 going to be talking I this is her title 860 00:32:42,480 --> 00:32:46,740 not mine flask and my terrible major 861 00:32:45,240 --> 00:32:48,840 project 862 00:32:46,740 --> 00:32:50,820 um anyone who is familiar with doing a 863 00:32:48,840 --> 00:32:53,760 major project for the HSC in New South 864 00:32:50,820 --> 00:32:56,520 Wales uh you may be crying right now but 865 00:32:53,760 --> 00:32:59,820 you can all feel that pain Izzy has been 866 00:32:56,520 --> 00:33:03,720 coding for 11 years her favorite emoji 867 00:32:59,820 --> 00:33:05,700 is the cowboy hat emoji and she yeah 868 00:33:03,720 --> 00:33:08,940 it's pretty cool yeah and uh she 869 00:33:05,700 --> 00:33:13,559 recently learned that you can animate 3D 870 00:33:08,940 --> 00:33:15,240 animations in CSS amazing and I'm gonna 871 00:33:13,559 --> 00:33:16,559 remind her that she could take her mask 872 00:33:15,240 --> 00:33:19,140 off if she wants otherwise it's probably 873 00:33:16,559 --> 00:33:21,200 the sound is probably okay 874 00:33:19,140 --> 00:33:21,200 um 875 00:33:21,570 --> 00:33:24,710 [Applause] 876 00:33:30,059 --> 00:33:33,059 right 877 00:33:30,960 --> 00:33:34,380 okay 878 00:33:33,059 --> 00:33:38,640 um 879 00:33:34,380 --> 00:33:41,720 um flask and my terrible project by 880 00:33:38,640 --> 00:33:41,720 Isabella Hogan 881 00:33:42,480 --> 00:33:48,419 all about me hi my name is Izzy and I'm 882 00:33:46,260 --> 00:33:50,840 in year 12 at a high school in New South 883 00:33:48,419 --> 00:33:50,840 Wales 884 00:33:52,260 --> 00:33:56,159 as a part of taking the software 885 00:33:54,120 --> 00:33:58,860 development course in year 12 many 886 00:33:56,159 --> 00:34:01,080 classes will undergo a major project a 887 00:33:58,860 --> 00:34:03,240 major project consists of making and 888 00:34:01,080 --> 00:34:05,880 documenting a large-scale six-month 889 00:34:03,240 --> 00:34:08,040 project of your choosing many students 890 00:34:05,880 --> 00:34:09,960 enter the course with little to no prior 891 00:34:08,040 --> 00:34:12,839 coding knowledge so they will take their 892 00:34:09,960 --> 00:34:16,200 Pro make their project with the language 893 00:34:12,839 --> 00:34:19,020 or in my case framework they were taught 894 00:34:16,200 --> 00:34:21,000 now my class was taught the JavaScript 895 00:34:19,020 --> 00:34:24,060 framework angular 896 00:34:21,000 --> 00:34:29,280 however one thing about me is 897 00:34:24,060 --> 00:34:35,220 oh I forgot that transition oh 898 00:34:29,280 --> 00:34:35,220 one thing about me is I hate angular 899 00:34:42,960 --> 00:34:47,820 we use it in year 11 for our project 900 00:34:44,879 --> 00:34:50,760 that year and honestly I just I hated it 901 00:34:47,820 --> 00:34:53,820 so much I did it so much that I started 902 00:34:50,760 --> 00:34:55,800 looking for any way to not use it and so 903 00:34:53,820 --> 00:34:57,480 with the help of my Tech Teacher mom 904 00:34:55,800 --> 00:34:59,220 shout out to 905 00:34:57,480 --> 00:35:02,940 mom 906 00:34:59,220 --> 00:35:06,300 um I chose flask to build on my python 907 00:35:02,940 --> 00:35:09,300 knowledge now I didn't know any flask at 908 00:35:06,300 --> 00:35:11,280 all but powered by Insane inherent need 909 00:35:09,300 --> 00:35:13,859 to overexert myself 910 00:35:11,280 --> 00:35:15,900 I decided I would learn it and then code 911 00:35:13,859 --> 00:35:16,859 my project and everything was gonna be 912 00:35:15,900 --> 00:35:18,720 great 913 00:35:16,859 --> 00:35:20,700 I was wrong 914 00:35:18,720 --> 00:35:22,940 at this point my to-do list looked like 915 00:35:20,700 --> 00:35:22,940 this 916 00:35:23,400 --> 00:35:30,180 to do one learn flask two do some 917 00:35:27,420 --> 00:35:34,400 documentation three make an amazing 918 00:35:30,180 --> 00:35:34,400 project and four be awesome 919 00:35:35,880 --> 00:35:40,980 so I set about completing step one 920 00:35:38,579 --> 00:35:43,859 this was about six months till the due 921 00:35:40,980 --> 00:35:46,320 date so I had heaps of time 922 00:35:43,859 --> 00:35:49,859 my first step was an online cs50 923 00:35:46,320 --> 00:35:53,160 tutorial cs50 is an online and in-person 924 00:35:49,859 --> 00:35:55,800 coding course that is taught at Harvard 925 00:35:53,160 --> 00:35:57,599 and Yale and anyone can sign up 926 00:35:55,800 --> 00:35:59,940 my mom had heard that there was a flask 927 00:35:57,599 --> 00:36:02,700 lesson in there and signed me up so 928 00:35:59,940 --> 00:36:05,460 after one lecture with a mini project at 929 00:36:02,700 --> 00:36:10,740 the end I counted that as step one done 930 00:36:05,460 --> 00:36:13,200 I had learned flask however this of 931 00:36:10,740 --> 00:36:15,720 course was not enough to make me able to 932 00:36:13,200 --> 00:36:19,020 complete my project but I didn't know 933 00:36:15,720 --> 00:36:20,700 that I however did know that at some 934 00:36:19,020 --> 00:36:22,980 point I would need to implement some 935 00:36:20,700 --> 00:36:24,900 form of database into the project the 936 00:36:22,980 --> 00:36:27,060 problem I hadn't even thought about 937 00:36:24,900 --> 00:36:29,540 databases since year 10 when I made one 938 00:36:27,060 --> 00:36:29,540 in Access 939 00:36:29,880 --> 00:36:33,660 but I filed that under problems of 940 00:36:32,040 --> 00:36:35,460 future Izzy 941 00:36:33,660 --> 00:36:38,880 and started procrastinating my next 942 00:36:35,460 --> 00:36:38,880 problem documentation 943 00:36:39,599 --> 00:36:44,040 my first documentation assessment as 944 00:36:41,700 --> 00:36:46,440 part of the class was a proposal for my 945 00:36:44,040 --> 00:36:48,180 project and in my proposal I needed to 946 00:36:46,440 --> 00:36:49,920 answer the questions 947 00:36:48,180 --> 00:36:52,440 what will it do 948 00:36:49,920 --> 00:36:55,079 who is my audience or client 949 00:36:52,440 --> 00:36:57,200 how do I think it will work and a couple 950 00:36:55,079 --> 00:37:00,380 extras 951 00:36:57,200 --> 00:37:00,380 my project 952 00:37:01,440 --> 00:37:04,800 it's a very long transitions 953 00:37:04,079 --> 00:37:07,440 um 954 00:37:04,800 --> 00:37:10,920 before I go into my project I had to 955 00:37:07,440 --> 00:37:12,960 make a PowerPoint for my proposal and I 956 00:37:10,920 --> 00:37:15,780 spent too much time on it 957 00:37:12,960 --> 00:37:19,020 considering I didn't actually need it 958 00:37:15,780 --> 00:37:20,460 that much so I have a couple slides for 959 00:37:19,020 --> 00:37:21,599 my proposal just because it took too 960 00:37:20,460 --> 00:37:24,140 long 961 00:37:21,599 --> 00:37:24,140 okay 962 00:37:24,490 --> 00:37:29,010 [Music] 963 00:37:29,280 --> 00:37:32,960 that was my logo by the way 964 00:37:34,210 --> 00:37:37,619 [Music] 965 00:37:36,240 --> 00:37:41,420 caffeine 966 00:37:37,619 --> 00:37:41,420 helping you make coffee runs easier 967 00:37:43,320 --> 00:37:47,339 the idea 968 00:37:44,700 --> 00:37:49,619 basically my idea was Center centered 969 00:37:47,339 --> 00:37:51,619 around how difficult it can be to go to 970 00:37:49,619 --> 00:37:54,000 a cafe and order for a group of people 971 00:37:51,619 --> 00:37:56,579 remembering that orders remembering how 972 00:37:54,000 --> 00:37:59,280 much are owed and so on so I created 973 00:37:56,579 --> 00:38:00,780 caffeine to help me with that the reason 974 00:37:59,280 --> 00:38:03,599 I came up with his eyes dear was 975 00:38:00,780 --> 00:38:05,280 actually my parrots every week we go 976 00:38:03,599 --> 00:38:07,320 rock climbing with some family and 977 00:38:05,280 --> 00:38:09,119 friends and at the end we all like to 978 00:38:07,320 --> 00:38:10,920 get coffee or breakfast together 979 00:38:09,119 --> 00:38:12,780 so one person will collect everyone's 980 00:38:10,920 --> 00:38:13,680 orders and then place the orders 981 00:38:12,780 --> 00:38:15,300 together 982 00:38:13,680 --> 00:38:16,980 I always saw the struggle that happened 983 00:38:15,300 --> 00:38:18,720 when trying to collect the orders and 984 00:38:16,980 --> 00:38:21,900 then remembering them while you waited 985 00:38:18,720 --> 00:38:24,119 in line so I decided I could fix it 986 00:38:21,900 --> 00:38:26,940 my main audience was any group of 987 00:38:24,119 --> 00:38:30,859 friends or colleagues that frequently 988 00:38:26,940 --> 00:38:30,859 group ordered coffee at a cafe 989 00:38:31,500 --> 00:38:36,260 sorry the speaker notes have scrolled 990 00:38:33,900 --> 00:38:36,260 too fast 991 00:38:37,200 --> 00:38:41,520 um 992 00:38:37,800 --> 00:38:43,859 oh now I have to get back up 993 00:38:41,520 --> 00:38:46,140 and I plan for it to work similarly to 994 00:38:43,859 --> 00:38:48,240 Google Classroom now for anyone who 995 00:38:46,140 --> 00:38:49,800 hasn't used Google classroom before the 996 00:38:48,240 --> 00:38:51,960 main idea was that there would be one 997 00:38:49,800 --> 00:38:54,839 person who went out to buy coffees or 998 00:38:51,960 --> 00:38:56,940 the runner and when they were about to 999 00:38:54,839 --> 00:38:59,339 leave they would then create a coffee 1000 00:38:56,940 --> 00:39:01,800 run and the app would give them a random 1001 00:38:59,339 --> 00:39:03,900 code now this code would act like a 1002 00:39:01,800 --> 00:39:05,880 password for this coffee run where 1003 00:39:03,900 --> 00:39:08,099 anyone with the code can join and place 1004 00:39:05,880 --> 00:39:09,660 their order and once the runner had 1005 00:39:08,099 --> 00:39:12,060 ordered and delivered all the coffees 1006 00:39:09,660 --> 00:39:14,040 they could simply just press done on the 1007 00:39:12,060 --> 00:39:16,500 run and all of the data about who owes 1008 00:39:14,040 --> 00:39:18,660 what would be sent to the database 1009 00:39:16,500 --> 00:39:21,540 now because I was using flask for my 1010 00:39:18,660 --> 00:39:23,940 project this concept could actually work 1011 00:39:21,540 --> 00:39:26,339 on a large scale with all the data being 1012 00:39:23,940 --> 00:39:28,500 stored on the cloud whereas the rest of 1013 00:39:26,339 --> 00:39:31,140 my class was using angular so they had 1014 00:39:28,500 --> 00:39:33,900 to store everything locally not allowing 1015 00:39:31,140 --> 00:39:36,300 for any network data this was the bit I 1016 00:39:33,900 --> 00:39:38,040 was most proud of because in the end it 1017 00:39:36,300 --> 00:39:40,280 felt like I had actually made a real 1018 00:39:38,040 --> 00:39:40,280 thing 1019 00:39:42,020 --> 00:39:47,400 but what is flask I've talked about my 1020 00:39:45,240 --> 00:39:49,200 project why I chose flask and the setup 1021 00:39:47,400 --> 00:39:51,240 of the software development as a class 1022 00:39:49,200 --> 00:39:52,440 but not really the reason for my talk 1023 00:39:51,240 --> 00:39:55,320 flask 1024 00:39:52,440 --> 00:39:58,680 flask is a python module that makes use 1025 00:39:55,320 --> 00:40:00,839 of python to connect HTML Pages the 1026 00:39:58,680 --> 00:40:03,560 pages are made just like any other HTML 1027 00:40:00,839 --> 00:40:05,640 page but then in the main Python program 1028 00:40:03,560 --> 00:40:08,700 functions are made to connect the pages 1029 00:40:05,640 --> 00:40:10,619 together and with the database this is 1030 00:40:08,700 --> 00:40:13,400 done with routing 1031 00:40:10,619 --> 00:40:15,900 where 1032 00:40:13,400 --> 00:40:18,720 the user is directed to different pages 1033 00:40:15,900 --> 00:40:21,420 with different information packets 1034 00:40:18,720 --> 00:40:23,700 so when the web page redirects a user to 1035 00:40:21,420 --> 00:40:26,040 another page like from the home page to 1036 00:40:23,700 --> 00:40:28,020 the Run page the app will also send 1037 00:40:26,040 --> 00:40:30,599 information that will be displayed on 1038 00:40:28,020 --> 00:40:33,180 this page this is how the page can show 1039 00:40:30,599 --> 00:40:36,240 customized or specific information from 1040 00:40:33,180 --> 00:40:38,760 the database and take input from the 1041 00:40:36,240 --> 00:40:40,680 user back to the database 1042 00:40:38,760 --> 00:40:43,940 now you can see why I needed specific 1043 00:40:40,680 --> 00:40:43,940 database knowledge 1044 00:40:52,859 --> 00:40:57,420 okay 1045 00:40:54,320 --> 00:40:59,099 one month from the due date I started 1046 00:40:57,420 --> 00:41:02,520 writing the pages and their flask 1047 00:40:59,099 --> 00:41:05,760 functions making use of sqlite to create 1048 00:41:02,520 --> 00:41:08,700 add to and search the database keeping 1049 00:41:05,760 --> 00:41:11,099 in mind I didn't know any sqlite before 1050 00:41:08,700 --> 00:41:13,320 this month so with the use of Google 1051 00:41:11,099 --> 00:41:16,020 online tutorials and database 1052 00:41:13,320 --> 00:41:18,240 visualizers I worked my way up to large 1053 00:41:16,020 --> 00:41:20,760 database queries that minimized any 1054 00:41:18,240 --> 00:41:22,680 effort to change the data on my part 1055 00:41:20,760 --> 00:41:24,960 so I wrote the code and it was fully 1056 00:41:22,680 --> 00:41:27,599 completed but time to spare but of 1057 00:41:24,960 --> 00:41:29,520 course something had to go wrong I go to 1058 00:41:27,599 --> 00:41:32,220 class to show my teacher and while yes 1059 00:41:29,520 --> 00:41:33,839 it does work it doesn't complete its 1060 00:41:32,220 --> 00:41:37,140 actual goal as a school assignment 1061 00:41:33,839 --> 00:41:39,599 School assignments really need to just 1062 00:41:37,140 --> 00:41:42,359 show the students knowledge rather than 1063 00:41:39,599 --> 00:41:44,160 be a full completed project 1064 00:41:42,359 --> 00:41:45,599 this was 1065 00:41:44,160 --> 00:41:48,420 the 8th of May 1066 00:41:45,599 --> 00:41:51,060 14 days before the due date of course 1067 00:41:48,420 --> 00:41:54,000 never one to do things in halves I 1068 00:41:51,060 --> 00:41:58,640 decided that this criticism meant that I 1069 00:41:54,000 --> 00:41:58,640 needed to completely restart 1070 00:42:00,839 --> 00:42:05,400 so with two weeks till the due date I 1071 00:42:03,060 --> 00:42:08,280 copied all my code into a text file and 1072 00:42:05,400 --> 00:42:10,380 started again this of course meant that 1073 00:42:08,280 --> 00:42:12,300 by the time the 12 days were up or 14 1074 00:42:10,380 --> 00:42:15,480 days were up 1075 00:42:12,300 --> 00:42:20,720 my code was not done and it didn't work 1076 00:42:15,480 --> 00:42:20,720 after all that work it didn't work 1077 00:42:20,820 --> 00:42:23,579 um 1078 00:42:22,440 --> 00:42:25,640 yeah 1079 00:42:23,579 --> 00:42:28,619 and so 1080 00:42:25,640 --> 00:42:30,720 thus ends the tale of me biting off more 1081 00:42:28,619 --> 00:42:33,240 than I could chew trying to learn too 1082 00:42:30,720 --> 00:42:35,820 much and now I would like to show a 1083 00:42:33,240 --> 00:42:40,260 demonstration if I have time 1084 00:42:35,820 --> 00:42:42,480 of the new and improved fixed project 1085 00:42:40,260 --> 00:42:44,460 Nikki 1086 00:42:42,480 --> 00:42:46,820 got time 1087 00:42:44,460 --> 00:42:46,820 okay 1088 00:42:49,020 --> 00:42:51,560 no 1089 00:42:54,359 --> 00:42:57,680 I'm getting there 1090 00:43:03,060 --> 00:43:07,319 okay 1091 00:43:04,560 --> 00:43:09,900 that's the login screen I also didn't 1092 00:43:07,319 --> 00:43:11,819 know about flask login so I made like 1093 00:43:09,900 --> 00:43:14,160 all of the login functions from scratch 1094 00:43:11,819 --> 00:43:14,760 so 1095 00:43:14,160 --> 00:43:18,200 um 1096 00:43:14,760 --> 00:43:18,200 it works sort of 1097 00:43:20,040 --> 00:43:23,420 oh didn't die 1098 00:43:30,599 --> 00:43:35,880 the Wi-Fi has been really spotty today 1099 00:43:32,520 --> 00:43:37,140 but if it loads this will log in and 1100 00:43:35,880 --> 00:43:39,660 then I will be able to direct you 1101 00:43:37,140 --> 00:43:42,000 through the rest of the app 1102 00:43:39,660 --> 00:43:44,180 otherwise I'm just going to go into the 1103 00:43:42,000 --> 00:43:44,180 code 1104 00:43:48,270 --> 00:43:53,900 [Music] 1105 00:43:50,280 --> 00:43:53,900 so they are Wi-Fi Gods today 1106 00:43:58,619 --> 00:44:04,819 no next okay you can ask Izzy for a demo 1107 00:44:01,680 --> 00:44:07,920 afterwards but continue yeah so 1108 00:44:04,819 --> 00:44:09,000 this is all of the code 1109 00:44:07,920 --> 00:44:12,420 um 1110 00:44:09,000 --> 00:44:14,880 so we did actually go through a flask 1111 00:44:12,420 --> 00:44:16,800 talk earlier that explained pretty much 1112 00:44:14,880 --> 00:44:18,900 all of this 1113 00:44:16,800 --> 00:44:21,240 um but this is the 1114 00:44:18,900 --> 00:44:24,980 the whole thing hang on 1115 00:44:21,240 --> 00:44:24,980 all of those all of those lines 1116 00:44:25,079 --> 00:44:29,099 two weeks remember 1117 00:44:27,180 --> 00:44:30,060 two 1118 00:44:29,099 --> 00:44:32,760 um 1119 00:44:30,060 --> 00:44:34,500 they're 515 lines but actually the best 1120 00:44:32,760 --> 00:44:36,660 bit is the history and I know that we're 1121 00:44:34,500 --> 00:44:37,800 not going to have enough Wi-Fi for it 1122 00:44:36,660 --> 00:44:39,720 but 1123 00:44:37,800 --> 00:44:41,080 if it loads you'll see just how many 1124 00:44:39,720 --> 00:44:42,590 versions there were 1125 00:44:41,080 --> 00:44:48,989 [Music] 1126 00:44:42,590 --> 00:44:48,989 [Applause] 1127 00:44:52,859 --> 00:44:58,020 I think we should 1128 00:44:55,280 --> 00:45:00,720 scream scream that is the right okay are 1129 00:44:58,020 --> 00:45:02,460 we good you're over time yeah I know um 1130 00:45:00,720 --> 00:45:04,500 I did actually have to go through every 1131 00:45:02,460 --> 00:45:07,740 single version just find out when I did 1132 00:45:04,500 --> 00:45:09,119 what because I didn't document but oh I 1133 00:45:07,740 --> 00:45:11,099 shouldn't have disconnected no that's 1134 00:45:09,119 --> 00:45:13,400 okay that's okay um 1135 00:45:11,099 --> 00:45:15,480 foreign 1136 00:45:13,400 --> 00:45:18,480 I'm not sure we should be encouraging 1137 00:45:15,480 --> 00:45:20,160 that many revisions but that was amazing 1138 00:45:18,480 --> 00:45:23,280 um next up we have someone who is not 1139 00:45:20,160 --> 00:45:25,200 here we've got two talks that are remote 1140 00:45:23,280 --> 00:45:27,060 presentations 1141 00:45:25,200 --> 00:45:29,520 um first up is Luke who will be talking 1142 00:45:27,060 --> 00:45:32,460 about recording about is that the verb 1143 00:45:29,520 --> 00:45:34,500 pie Graphica a simple GUI library for 1144 00:45:32,460 --> 00:45:37,260 python Luke has been programming for 1145 00:45:34,500 --> 00:45:38,640 eight years he started in year four and 1146 00:45:37,260 --> 00:45:42,140 he recently learned that in order to 1147 00:45:38,640 --> 00:45:42,140 make class attributes invisible 1148 00:45:42,660 --> 00:45:46,440 from the abyss um invisible from the 1149 00:45:45,060 --> 00:45:48,480 other side of a module you just add two 1150 00:45:46,440 --> 00:45:52,760 under 1151 00:45:48,480 --> 00:45:52,760 okay are we ready let's go 1152 00:45:54,060 --> 00:45:58,560 hello Piper my name is Luke Campbell I'm 1153 00:45:57,060 --> 00:46:00,720 a year 12 student at Saint Andrews 1154 00:45:58,560 --> 00:46:02,339 Cathedral School in Sydney and I'd like 1155 00:46:00,720 --> 00:46:05,220 to share a little bit with my Pro about 1156 00:46:02,339 --> 00:46:08,880 with you about my project pie Graphica 1157 00:46:05,220 --> 00:46:11,520 so pyrographica is a GUI and app 1158 00:46:08,880 --> 00:46:14,400 development Library designed for python 1159 00:46:11,520 --> 00:46:16,200 it's designed to be very accessible to 1160 00:46:14,400 --> 00:46:18,900 all levels of experience particularly 1161 00:46:16,200 --> 00:46:20,280 with beginners in mind because I 1162 00:46:18,900 --> 00:46:22,680 personally when I was learning 1163 00:46:20,280 --> 00:46:23,819 programming uh app development is one of 1164 00:46:22,680 --> 00:46:26,339 the things that I really wanted to learn 1165 00:46:23,819 --> 00:46:28,940 but I struggled with the learning curve 1166 00:46:26,339 --> 00:46:31,800 of some of the existing libraries so 1167 00:46:28,940 --> 00:46:33,780 playgraphica is a library that I 1168 00:46:31,800 --> 00:46:36,960 developed to help fix that and that is 1169 00:46:33,780 --> 00:46:40,099 extremely beginner friendly and 1170 00:46:36,960 --> 00:46:42,060 accessible to all levels of experience 1171 00:46:40,099 --> 00:46:42,720 so 1172 00:46:42,060 --> 00:46:44,339 um 1173 00:46:42,720 --> 00:46:46,560 the first thing I did when I was 1174 00:46:44,339 --> 00:46:49,319 building this library was I started 1175 00:46:46,560 --> 00:46:53,880 experimenting with some low-level 1176 00:46:49,319 --> 00:46:55,859 um GUI libraries like opengl and STL 1177 00:46:53,880 --> 00:46:58,800 um as opposed to higher level libraries 1178 00:46:55,859 --> 00:47:00,780 like Pi game giving into kinta I wanted 1179 00:46:58,800 --> 00:47:02,460 to start with a low-level language that 1180 00:47:00,780 --> 00:47:06,180 I could build up on 1181 00:47:02,460 --> 00:47:09,780 um so both of those opengl and sdl are 1182 00:47:06,180 --> 00:47:11,460 designed for C languages but there are 1183 00:47:09,780 --> 00:47:13,040 python wrappers that allowed me to use 1184 00:47:11,460 --> 00:47:15,420 them in Python 1185 00:47:13,040 --> 00:47:18,480 after a little bit of experimentation 1186 00:47:15,420 --> 00:47:23,400 with both I decided to go with sdl too 1187 00:47:18,480 --> 00:47:27,119 or using the pi sdl to Like Rappers 1188 00:47:23,400 --> 00:47:29,640 um so after I'd chosen the low level low 1189 00:47:27,119 --> 00:47:32,280 level language that I was going to use I 1190 00:47:29,640 --> 00:47:35,280 could start to build the classes for my 1191 00:47:32,280 --> 00:47:38,760 app so it was going to be built using 1192 00:47:35,280 --> 00:47:40,079 kind of an object oriented method 1193 00:47:38,760 --> 00:47:42,540 um 1194 00:47:40,079 --> 00:47:44,640 so I started building one class at a 1195 00:47:42,540 --> 00:47:46,740 time so first I built the window class 1196 00:47:44,640 --> 00:47:48,960 the class that the user would use to 1197 00:47:46,740 --> 00:47:51,240 create their window then I started 1198 00:47:48,960 --> 00:47:53,160 simple with lines and rectangles and I 1199 00:47:51,240 --> 00:47:55,440 built my way all the way out to the 1200 00:47:53,160 --> 00:47:58,200 really complex things like text boxes so 1201 00:47:55,440 --> 00:48:00,300 just kind of as a brief explanation the 1202 00:47:58,200 --> 00:48:02,940 more complex things like text boxes text 1203 00:48:00,300 --> 00:48:04,200 boxes for example required you know it 1204 00:48:02,940 --> 00:48:07,200 drew the rectangle that was the 1205 00:48:04,200 --> 00:48:09,420 background it drew the text onto the 1206 00:48:07,200 --> 00:48:11,700 rectangle it got the kind of keyboard 1207 00:48:09,420 --> 00:48:14,400 details for the mouse you see it saw 1208 00:48:11,700 --> 00:48:16,140 kind of whether where the mouse was 1209 00:48:14,400 --> 00:48:19,319 whether it be clipped so whether it was 1210 00:48:16,140 --> 00:48:21,480 kind of clicked into or clicked out of 1211 00:48:19,319 --> 00:48:24,000 um it saw what key changes had occurred 1212 00:48:21,480 --> 00:48:25,440 So what had been typed there there's 1213 00:48:24,000 --> 00:48:27,420 nothing had been typed there whether it 1214 00:48:25,440 --> 00:48:30,480 needed to display any placeholder text 1215 00:48:27,420 --> 00:48:33,180 and there are a lot of details 1216 00:48:30,480 --> 00:48:35,880 um to kind of all juggle at once which 1217 00:48:33,180 --> 00:48:38,520 is a pain to program every time you want 1218 00:48:35,880 --> 00:48:40,980 a text box but um 1219 00:48:38,520 --> 00:48:42,660 my library kind of presents it in just 1220 00:48:40,980 --> 00:48:44,880 one single line of code you can create a 1221 00:48:42,660 --> 00:48:46,619 text box 1222 00:48:44,880 --> 00:48:48,300 um so once I'd kind of made all the 1223 00:48:46,619 --> 00:48:51,420 classes individually I had to make them 1224 00:48:48,300 --> 00:48:53,280 kind of cross-compatible so all or for 1225 00:48:51,420 --> 00:48:56,640 example all the flight classes use the 1226 00:48:53,280 --> 00:49:01,740 same attribute names for their start 1227 00:48:56,640 --> 00:49:04,800 name coordinates X1 y1 and X2 Y2 and 1228 00:49:01,740 --> 00:49:06,599 that means that you can use a certain 1229 00:49:04,800 --> 00:49:07,920 piece of code on 1230 00:49:06,599 --> 00:49:10,319 any 1231 00:49:07,920 --> 00:49:12,240 any object in that let like let's say 1232 00:49:10,319 --> 00:49:14,040 you want to make yourself function to 1233 00:49:12,240 --> 00:49:16,859 see whether something's been collided 1234 00:49:14,040 --> 00:49:18,720 with then you can put any object into 1235 00:49:16,859 --> 00:49:21,780 that you can put a text object or a text 1236 00:49:18,720 --> 00:49:24,300 box or a rectangle or a line or anything 1237 00:49:21,780 --> 00:49:26,160 and it will go and it you can use the 1238 00:49:24,300 --> 00:49:28,440 same attributes for it 1239 00:49:26,160 --> 00:49:30,180 so once the kind of programming side was 1240 00:49:28,440 --> 00:49:32,819 done I needed to package it to put it on 1241 00:49:30,180 --> 00:49:35,819 Pipeline so this involved kind of all 1242 00:49:32,819 --> 00:49:37,980 the installation details 1243 00:49:35,819 --> 00:49:40,859 um or like the dependencies 1244 00:49:37,980 --> 00:49:45,180 and then various other things like um 1245 00:49:40,859 --> 00:49:47,520 like the like various detail sheets 1246 00:49:45,180 --> 00:49:49,740 um that all needed to be packaged to 1247 00:49:47,520 --> 00:49:52,140 then go put it on pipei 1248 00:49:49,740 --> 00:49:54,660 um then the next stage was create user 1249 00:49:52,140 --> 00:49:56,099 documentation because obviously this was 1250 00:49:54,660 --> 00:49:58,800 not just code for me I wanted everybody 1251 00:49:56,099 --> 00:50:01,200 to be able to use this code so I wrote 1252 00:49:58,800 --> 00:50:04,440 kind of kind of an instruction manual 1253 00:50:01,200 --> 00:50:06,619 for all of the functions and classes in 1254 00:50:04,440 --> 00:50:09,060 there so that anybody could learn that 1255 00:50:06,619 --> 00:50:10,079 and then lastly I release the code on 1256 00:50:09,060 --> 00:50:12,000 GitHub 1257 00:50:10,079 --> 00:50:14,760 um it's all fully commented it's open 1258 00:50:12,000 --> 00:50:15,540 source check it out if you want 1259 00:50:14,760 --> 00:50:19,020 um 1260 00:50:15,540 --> 00:50:20,339 yeah it's on GitHub so check it out 1261 00:50:19,020 --> 00:50:23,579 um I really love doing this product 1262 00:50:20,339 --> 00:50:25,560 project because I learned a lot about 1263 00:50:23,579 --> 00:50:27,420 very a lot of different things so I 1264 00:50:25,560 --> 00:50:30,180 learned a lot about object I'm oriented 1265 00:50:27,420 --> 00:50:32,700 programming I'd use classes and objects 1266 00:50:30,180 --> 00:50:35,339 before but uh through this I learned so 1267 00:50:32,700 --> 00:50:39,300 much more about them 1268 00:50:35,339 --> 00:50:41,940 um I also developed my ability to make 1269 00:50:39,300 --> 00:50:44,099 very user-friendly code as well because 1270 00:50:41,940 --> 00:50:46,500 a lot of code I've written has been just 1271 00:50:44,099 --> 00:50:48,359 for me for my use but now this was 1272 00:50:46,500 --> 00:50:49,859 something that I wanted anybody to be 1273 00:50:48,359 --> 00:50:51,900 able to use so it needed to be extremely 1274 00:50:49,859 --> 00:50:53,760 user friendly 1275 00:50:51,900 --> 00:50:55,619 um and then also about the various 1276 00:50:53,760 --> 00:50:57,240 packaging details and how to put it on 1277 00:50:55,619 --> 00:50:59,760 Pipeline which is a skill that I'll use 1278 00:50:57,240 --> 00:51:03,180 again in the future I'm sure 1279 00:50:59,760 --> 00:51:05,700 um so now I'll just quickly kind of show 1280 00:51:03,180 --> 00:51:07,440 you a little bit of this so it's 1281 00:51:05,700 --> 00:51:10,800 available on Piper so you can download 1282 00:51:07,440 --> 00:51:15,980 it via install but 1283 00:51:10,800 --> 00:51:15,980 if I'll just get my screen recording up 1284 00:51:21,240 --> 00:51:28,140 here we go so 1285 00:51:24,020 --> 00:51:30,119 this is a simple program that I made 1286 00:51:28,140 --> 00:51:32,160 with pie Graphica 1287 00:51:30,119 --> 00:51:34,380 as you can see there's not many lines 1288 00:51:32,160 --> 00:51:36,300 starts off with just an import these are 1289 00:51:34,380 --> 00:51:37,800 various functions draw is where most of 1290 00:51:36,300 --> 00:51:39,900 the functions are kept 1291 00:51:37,800 --> 00:51:43,200 font has a bunch of kind of default 1292 00:51:39,900 --> 00:51:45,720 fonts I think it's got 11 or 12 defaults 1293 00:51:43,200 --> 00:51:48,300 colors as much of default colors of 1294 00:51:45,720 --> 00:51:51,119 course for fonts and colors you can use 1295 00:51:48,300 --> 00:51:53,280 your own if you want but those are there 1296 00:51:51,119 --> 00:51:55,980 to make things easier and then Origins 1297 00:51:53,280 --> 00:51:58,920 you can set your origin to either the 1298 00:51:55,980 --> 00:52:01,980 top left corner top right corner bottom 1299 00:51:58,920 --> 00:52:03,119 left corner bottom right corner or the 1300 00:52:01,980 --> 00:52:05,160 center 1301 00:52:03,119 --> 00:52:06,780 and then you have one line for each 1302 00:52:05,160 --> 00:52:07,619 thing essentially one lines create the 1303 00:52:06,780 --> 00:52:10,859 window 1304 00:52:07,619 --> 00:52:13,260 one line to draw each piece of text one 1305 00:52:10,859 --> 00:52:16,859 line to draw the text box 1306 00:52:13,260 --> 00:52:18,599 um which is particularly annoying in uh 1307 00:52:16,859 --> 00:52:21,180 like drawing text boxes is particularly 1308 00:52:18,599 --> 00:52:23,520 annoying in a lot of libraries like like 1309 00:52:21,180 --> 00:52:27,240 pie game whereas this allows you to do 1310 00:52:23,520 --> 00:52:29,520 that just in one line and then one line 1311 00:52:27,240 --> 00:52:30,720 to draw the text in the button one line 1312 00:52:29,520 --> 00:52:32,700 to draw 1313 00:52:30,720 --> 00:52:36,599 the rectangle around the button this is 1314 00:52:32,700 --> 00:52:38,339 one example of the class attributes so 1315 00:52:36,599 --> 00:52:41,099 to create the rectangle around it 1316 00:52:38,339 --> 00:52:43,380 instead of kind of experimenting to see 1317 00:52:41,099 --> 00:52:45,059 where the end of the text box was 1318 00:52:43,380 --> 00:52:46,740 I simply 1319 00:52:45,059 --> 00:52:48,720 got the coordinates from the class 1320 00:52:46,740 --> 00:52:52,500 itself and then added a little bit of 1321 00:52:48,720 --> 00:52:54,059 margin so it wasn't right around it 1322 00:52:52,500 --> 00:52:56,579 and then 1323 00:52:54,059 --> 00:52:58,319 uh in this this is all more class 1324 00:52:56,579 --> 00:52:59,220 attributes whether it's being hovered 1325 00:52:58,319 --> 00:53:01,380 over 1326 00:52:59,220 --> 00:53:03,680 whether it's been clipped or not and 1327 00:53:01,380 --> 00:53:07,859 then this app.update 1328 00:53:03,680 --> 00:53:08,880 instead of updating every single 1329 00:53:07,859 --> 00:53:11,220 um 1330 00:53:08,880 --> 00:53:13,680 element individually they all get 1331 00:53:11,220 --> 00:53:15,000 updated in this one update and if you 1332 00:53:13,680 --> 00:53:16,619 don't want something to be drawn then 1333 00:53:15,000 --> 00:53:19,740 you can just set it as 1334 00:53:16,619 --> 00:53:24,119 I was doing example box dot 1335 00:53:19,740 --> 00:53:25,800 um visible equals false and then that 1336 00:53:24,119 --> 00:53:26,819 doesn't display anymore and then you can 1337 00:53:25,800 --> 00:53:28,800 turn that off 1338 00:53:26,819 --> 00:53:31,559 back to true if you want to display it 1339 00:53:28,800 --> 00:53:34,859 again so this is a very dodgy looking 1340 00:53:31,559 --> 00:53:37,440 website uh sorry app but it's just an 1341 00:53:34,859 --> 00:53:41,339 example of some of the functions that 1342 00:53:37,440 --> 00:53:43,920 pie Graphica can do so again very 1343 00:53:41,339 --> 00:53:47,940 dodgy but 1344 00:53:43,920 --> 00:53:48,720 it works so now for a slightly more 1345 00:53:47,940 --> 00:53:52,740 um 1346 00:53:48,720 --> 00:53:54,839 interesting demonstration this is an app 1347 00:53:52,740 --> 00:53:56,640 I kind of built as kind of a proof of 1348 00:53:54,839 --> 00:53:57,660 concept that 1349 00:53:56,640 --> 00:54:00,300 um 1350 00:53:57,660 --> 00:54:02,520 it did actually work 1351 00:54:00,300 --> 00:54:05,339 um the pie graphical word I built this 1352 00:54:02,520 --> 00:54:07,380 whole app with biographical this is an 1353 00:54:05,339 --> 00:54:10,500 app it's actually an app for a website 1354 00:54:07,380 --> 00:54:12,720 that I built quite a while ago now CS is 1355 00:54:10,500 --> 00:54:14,940 an online system that kind of allows you 1356 00:54:12,720 --> 00:54:17,579 to play location games like hide and 1357 00:54:14,940 --> 00:54:19,619 seek and tips over much greater areas 1358 00:54:17,579 --> 00:54:21,420 like a whole city for example I've done 1359 00:54:19,619 --> 00:54:22,079 that one it's very fun 1360 00:54:21,420 --> 00:54:25,500 um 1361 00:54:22,079 --> 00:54:27,660 so you sign on you get yourself a game 1362 00:54:25,500 --> 00:54:28,920 it generates a game code for you you can 1363 00:54:27,660 --> 00:54:30,660 send that to your friends they can log 1364 00:54:28,920 --> 00:54:33,059 on to the same game as you 1365 00:54:30,660 --> 00:54:36,240 and then it'll send kind of the location 1366 00:54:33,059 --> 00:54:38,099 of the person you're chasing to you and 1367 00:54:36,240 --> 00:54:40,079 your location will be said to the person 1368 00:54:38,099 --> 00:54:42,780 who's chasing you and therefore you can 1369 00:54:40,079 --> 00:54:44,760 chase them even if they're across the 1370 00:54:42,780 --> 00:54:47,460 other side of a city for example 1371 00:54:44,760 --> 00:54:49,800 uh but that is not the purpose of this 1372 00:54:47,460 --> 00:54:52,200 talk uh this is just an example of 1373 00:54:49,800 --> 00:54:55,319 something you can do with pie Graphica 1374 00:54:52,200 --> 00:54:56,880 this isn't complete obviously but it 1375 00:54:55,319 --> 00:54:59,160 just has some of the 1376 00:54:56,880 --> 00:55:01,440 settings 1377 00:54:59,160 --> 00:55:04,559 and is kind of a proof of concept that 1378 00:55:01,440 --> 00:55:07,040 biographica can crash 1379 00:55:04,559 --> 00:55:07,040 so 1380 00:55:07,380 --> 00:55:11,579 um in the future uh I want to take this 1381 00:55:10,079 --> 00:55:13,140 a little bit further this project is far 1382 00:55:11,579 --> 00:55:15,180 from complete it's kind of it's 1383 00:55:13,140 --> 00:55:16,500 available and it's fully functioning but 1384 00:55:15,180 --> 00:55:19,020 there are more things I want to add to 1385 00:55:16,500 --> 00:55:21,000 it I want to add more functions to kind 1386 00:55:19,020 --> 00:55:23,400 of make it more powerful there's a few 1387 00:55:21,000 --> 00:55:25,800 bits in the code I want to tidy up and 1388 00:55:23,400 --> 00:55:28,020 then obviously I want to finish off the 1389 00:55:25,800 --> 00:55:30,119 now CS app I was making and release that 1390 00:55:28,020 --> 00:55:32,280 to the App Store 1391 00:55:30,119 --> 00:55:33,900 um I hope you've enjoyed hearing about 1392 00:55:32,280 --> 00:55:36,960 biographica 1393 00:55:33,900 --> 00:55:39,900 um please it's available on pie pie so 1394 00:55:36,960 --> 00:55:42,660 just download it pip install and give it 1395 00:55:39,900 --> 00:55:44,819 a shot the user manual is on Piper as 1396 00:55:42,660 --> 00:55:47,760 well or you can check it out on GitHub 1397 00:55:44,819 --> 00:55:50,119 and yeah check it out and thank you for 1398 00:55:47,760 --> 00:55:50,119 listening 1399 00:55:58,619 --> 00:56:03,660 there we go our last speaker then sounds 1400 00:56:01,680 --> 00:56:05,640 like some of my past students who text 1401 00:56:03,660 --> 00:56:08,640 me five years after they'd left school 1402 00:56:05,640 --> 00:56:10,559 to say hi Mrs Mathers just wanted to let 1403 00:56:08,640 --> 00:56:13,099 you know that code that didn't work in 1404 00:56:10,559 --> 00:56:15,359 grade 12 I've been working at it lately 1405 00:56:13,099 --> 00:56:17,880 today I'll be demonstrating and 1406 00:56:15,359 --> 00:56:20,819 showcasing my bbr Cipher which I created 1407 00:56:17,880 --> 00:56:22,319 as a conceptual idea and by the way I'm 1408 00:56:20,819 --> 00:56:25,500 working for the military and I thought 1409 00:56:22,319 --> 00:56:27,119 to myself oh God no they haven't oh I 1410 00:56:25,500 --> 00:56:29,160 have I think they've made a mistake 1411 00:56:27,119 --> 00:56:32,339 because that was one of the naughtiest 1412 00:56:29,160 --> 00:56:35,460 students I've ever had in my life so 1413 00:56:32,339 --> 00:56:38,520 um a second only to the one that got D's 1414 00:56:35,460 --> 00:56:40,880 all the way through and I found out two 1415 00:56:38,520 --> 00:56:44,880 years later that he's a pilot 1416 00:56:40,880 --> 00:56:46,260 for Qantas so I'm one of those sorts of 1417 00:56:44,880 --> 00:56:48,000 teachers who sits there on the plane 1418 00:56:46,260 --> 00:56:50,640 until the Pilot introduces themselves 1419 00:56:48,000 --> 00:56:52,450 before they relax because I know he 1420 00:56:50,640 --> 00:56:55,560 doesn't concentrate 1421 00:56:52,450 --> 00:56:55,560 [Music] 1422 00:56:55,980 --> 00:57:01,020 so our next talker uh the speaker we've 1423 00:56:58,859 --> 00:57:03,660 got a video again and after that we've 1424 00:57:01,020 --> 00:57:07,200 got a couple of more live victims for 1425 00:57:03,660 --> 00:57:11,240 you so this next one is Mark Mann custom 1426 00:57:07,200 --> 00:57:14,460 encryptions is the topic so hacker to be 1427 00:57:11,240 --> 00:57:18,720 I've been programming he says for 10 1428 00:57:14,460 --> 00:57:21,300 years since I was seven 1429 00:57:18,720 --> 00:57:22,920 yeah sounds like an old guy right I 1430 00:57:21,300 --> 00:57:26,280 recently learned about the artificial 1431 00:57:22,920 --> 00:57:29,099 intelligence and data manipulation and 1432 00:57:26,280 --> 00:57:31,800 he puts in Brackets sockets too not sure 1433 00:57:29,099 --> 00:57:33,720 what that means that's beyond me so 1434 00:57:31,800 --> 00:57:36,780 hopefully 1435 00:57:33,720 --> 00:57:38,520 Mark can let us know 1436 00:57:36,780 --> 00:57:41,040 today I'll be demonstrating and 1437 00:57:38,520 --> 00:57:43,200 showcasing my bbr Cipher which I created 1438 00:57:41,040 --> 00:57:44,700 as a conceptual idea three years ago to 1439 00:57:43,200 --> 00:57:46,200 learn about encryption and its different 1440 00:57:44,700 --> 00:57:49,079 methods 1441 00:57:46,200 --> 00:57:50,520 so to start off a bit about me is I've 1442 00:57:49,079 --> 00:57:52,140 been programming for around 10 years 1443 00:57:50,520 --> 00:57:54,000 since I was seven 1444 00:57:52,140 --> 00:57:55,500 I've mostly used python as it was the 1445 00:57:54,000 --> 00:57:58,260 language that my dad introduced me to 1446 00:57:55,500 --> 00:58:00,240 but I've learned HTML JavaScript and a 1447 00:57:58,260 --> 00:58:02,160 little bit of lore along the way 1448 00:58:00,240 --> 00:58:03,900 as of this moment I'm currently learning 1449 00:58:02,160 --> 00:58:05,520 C plus plus in the hopes that I'll be 1450 00:58:03,900 --> 00:58:07,859 able to turn some of my python programs 1451 00:58:05,520 --> 00:58:11,400 into C plus plus programs 1452 00:58:07,859 --> 00:58:13,680 now my program uses base64 to encode the 1453 00:58:11,400 --> 00:58:16,020 data that I input twice 1454 00:58:13,680 --> 00:58:17,880 and then uses a rotation server to take 1455 00:58:16,020 --> 00:58:21,059 an order from the hash password using 1456 00:58:17,880 --> 00:58:22,920 sha 256 to rotate the ordinal of the 1457 00:58:21,059 --> 00:58:25,619 current character in the input by set 1458 00:58:22,920 --> 00:58:27,839 amount so when it rotates I then encode 1459 00:58:25,619 --> 00:58:30,780 that rotation in base 85 and combine 1460 00:58:27,839 --> 00:58:32,160 these using the code 39b gen as that is 1461 00:58:30,780 --> 00:58:34,619 something that is not likely to occur 1462 00:58:32,160 --> 00:58:38,339 all that often it then encodes the 1463 00:58:34,619 --> 00:58:41,640 base85 in base64 and outputs the result 1464 00:58:38,339 --> 00:58:43,200 next pros and cons 1465 00:58:41,640 --> 00:58:45,780 one of the pros is the output 1466 00:58:43,200 --> 00:58:47,880 readability it's not easy to read so you 1467 00:58:45,780 --> 00:58:49,740 can't easily discern that it is Data you 1468 00:58:47,880 --> 00:58:51,240 can recognize it as base64 if you know 1469 00:58:49,740 --> 00:58:53,400 what to look for 1470 00:58:51,240 --> 00:58:55,079 so while it says on the screen it uses 1471 00:58:53,400 --> 00:58:57,119 multiple encryption methods it's more 1472 00:58:55,079 --> 00:58:59,339 like an encryption and a half it's one 1473 00:58:57,119 --> 00:59:01,440 encryption and then four encodings while 1474 00:58:59,339 --> 00:59:03,420 it does increase unreadability it causes 1475 00:59:01,440 --> 00:59:05,640 excessive inflation of data 1476 00:59:03,420 --> 00:59:06,780 the next Pro is the data scrambling from 1477 00:59:05,640 --> 00:59:09,119 the encoding 1478 00:59:06,780 --> 00:59:10,740 the programming codes would be 64 twice 1479 00:59:09,119 --> 00:59:12,660 at the beginning to scramble the data 1480 00:59:10,740 --> 00:59:14,880 encrypts it and then encodes for Bay 1481 00:59:12,660 --> 00:59:15,960 City 5 and base64 to scramble it even 1482 00:59:14,880 --> 00:59:18,299 more 1483 00:59:15,960 --> 00:59:20,460 so for the first con the fine coding to 1484 00:59:18,299 --> 00:59:22,680 cause the data to inflate at around 112 1485 00:59:20,460 --> 00:59:24,180 to 1 which is not a good payoff for 1486 00:59:22,680 --> 00:59:27,359 secure data 1487 00:59:24,180 --> 00:59:29,220 then the separator 39b gem adds some 1488 00:59:27,359 --> 00:59:31,559 recursion people can recognize 1489 00:59:29,220 --> 00:59:33,180 repetition and it makes it insecure but 1490 00:59:31,559 --> 00:59:35,460 it is also inefficient 1491 00:59:33,180 --> 00:59:37,980 so now for an example this is a 1492 00:59:35,460 --> 00:59:41,040 demonstration on my program in action 1493 00:59:37,980 --> 00:59:44,160 so I can open my application 1494 00:59:41,040 --> 00:59:47,940 and it will open a window 1495 00:59:44,160 --> 00:59:50,579 and give me four options encrypt encrypt 1496 00:59:47,940 --> 00:59:52,980 file decrypt and decrypt file 1497 00:59:50,579 --> 00:59:54,299 so when I click encrypt we can put in a 1498 00:59:52,980 --> 00:59:56,099 short phrase 1499 00:59:54,299 --> 00:59:57,180 with an exclamation mark for a special 1500 00:59:56,099 --> 01:00:00,540 character 1501 00:59:57,180 --> 01:00:03,359 and then I can put in the test passcode 1502 01:00:00,540 --> 01:00:04,980 and it will give me some random data if 1503 01:00:03,359 --> 01:00:08,520 I cannot read 1504 01:00:04,980 --> 01:00:11,280 so this data is the encrypted 1505 01:00:08,520 --> 01:00:12,960 information so I can put it into decrypt 1506 01:00:11,280 --> 01:00:15,660 and paste it 1507 01:00:12,960 --> 01:00:17,880 if I were to do the wrong passcode 1508 01:00:15,660 --> 01:00:20,520 it would give me some data that I cannot 1509 01:00:17,880 --> 01:00:24,180 read just two characters because the 1510 01:00:20,520 --> 01:00:27,839 rest is not printable 1511 01:00:24,180 --> 01:00:30,720 so I can decrypt it put in the same data 1512 01:00:27,839 --> 01:00:33,059 but this time did the correct phrase 1513 01:00:30,720 --> 01:00:34,799 and it will give me the output short 1514 01:00:33,059 --> 01:00:38,760 phrase 1515 01:00:34,799 --> 01:00:42,540 so I took the liberty of creating a test 1516 01:00:38,760 --> 01:00:44,760 file with a long phrase with spiritual 1517 01:00:42,540 --> 01:00:46,260 characters and numbers new lines and all 1518 01:00:44,760 --> 01:00:48,540 the characters in the alphabet both 1519 01:00:46,260 --> 01:00:51,839 uppercase and lowercase 1520 01:00:48,540 --> 01:00:52,980 so if I already if I were to run my 1521 01:00:51,839 --> 01:00:57,059 program again 1522 01:00:52,980 --> 01:01:00,240 but this time select encrypt file 1523 01:00:57,059 --> 01:01:02,339 and then select test dot text 1524 01:01:00,240 --> 01:01:06,240 and then I can save it 1525 01:01:02,339 --> 01:01:09,299 and the extensions.bbr because that's 1526 01:01:06,240 --> 01:01:10,740 the name of my program and so that's the 1527 01:01:09,299 --> 01:01:13,220 extension I'm using 1528 01:01:10,740 --> 01:01:16,079 so it will save it to 1529 01:01:13,220 --> 01:01:17,460 encrypted.txt dot bvr so we'll use the 1530 01:01:16,079 --> 01:01:19,799 same passcode 1531 01:01:17,460 --> 01:01:21,299 and it will encrypt and as you can see 1532 01:01:19,799 --> 01:01:24,720 in the background here 1533 01:01:21,299 --> 01:01:27,900 it is showing me the output 1534 01:01:24,720 --> 01:01:32,460 so it says where it's been saved so I 1535 01:01:27,900 --> 01:01:32,460 can open in Notepad encrypted.txt.bbr 1536 01:01:32,940 --> 01:01:37,140 and it is a whole bunch of random data I 1537 01:01:35,880 --> 01:01:39,780 can't read it 1538 01:01:37,140 --> 01:01:41,520 it's got new lines in there because it's 1539 01:01:39,780 --> 01:01:43,380 rotating there's a chance it's going to 1540 01:01:41,520 --> 01:01:45,660 get new lights 1541 01:01:43,380 --> 01:01:47,119 so I can open 1542 01:01:45,660 --> 01:01:49,859 the 1543 01:01:47,119 --> 01:01:53,819 program again 1544 01:01:49,859 --> 01:01:55,200 and select decrypt file 1545 01:01:53,819 --> 01:01:58,200 and then when I select 1546 01:01:55,200 --> 01:01:58,200 encrypted.text.bbr 1547 01:01:58,799 --> 01:02:05,160 and I put in the Run code 1548 01:02:02,579 --> 01:02:07,079 it will attempt error decode failed 1549 01:02:05,160 --> 01:02:10,079 check below for our details incorrect 1550 01:02:07,079 --> 01:02:12,299 padding that's debug purposes 1551 01:02:10,079 --> 01:02:16,559 it obviously would not be safe to have 1552 01:02:12,299 --> 01:02:21,980 that if I were to give it out to people 1553 01:02:16,559 --> 01:02:23,700 so I then select decrypt file 1554 01:02:21,980 --> 01:02:25,799 encrypted.txt.bbr 1555 01:02:23,700 --> 01:02:28,440 open 1556 01:02:25,799 --> 01:02:31,980 and this time do the correct code 1557 01:02:28,440 --> 01:02:34,980 it will decode it and it says decrypted 1558 01:02:31,980 --> 01:02:37,819 as the location 1559 01:02:34,980 --> 01:02:40,260 so now I can open 1560 01:02:37,819 --> 01:02:42,240 encrypted.txt in Notepad 1561 01:02:40,260 --> 01:02:44,099 and it appears the exact same as 1562 01:02:42,240 --> 01:02:47,700 test.txt 1563 01:02:44,099 --> 01:02:50,480 to be sure I'm going to type FC for file 1564 01:02:47,700 --> 01:02:54,059 prepare slash B for binary then 1565 01:02:50,480 --> 01:02:56,280 encrypted.txt and test dot text 1566 01:02:54,059 --> 01:02:59,180 now differences encountered they are 1567 01:02:56,280 --> 01:02:59,180 indeed the exact same 1568 01:03:00,960 --> 01:03:05,280 so as I was working on this project 1569 01:03:02,819 --> 01:03:07,799 there were a series of bugs and logical 1570 01:03:05,280 --> 01:03:10,440 errors such as reading and writing files 1571 01:03:07,799 --> 01:03:12,720 as text rather than as bytes causing it 1572 01:03:10,440 --> 01:03:15,059 to occasionally complain saying invalid 1573 01:03:12,720 --> 01:03:16,500 start lines it was an easy fix by 1574 01:03:15,059 --> 01:03:17,520 changing it to reading and writing as 1575 01:03:16,500 --> 01:03:19,980 bytes 1576 01:03:17,520 --> 01:03:22,559 for The Logical errors one was having it 1577 01:03:19,980 --> 01:03:24,420 encode and decode correctly but give the 1578 01:03:22,559 --> 01:03:26,040 wrong output and the reason for that was 1579 01:03:24,420 --> 01:03:28,500 that it was using some incorrect maths 1580 01:03:26,040 --> 01:03:30,660 and getting thrown off by a small degree 1581 01:03:28,500 --> 01:03:33,240 so what I did for my logical errors was 1582 01:03:30,660 --> 01:03:34,859 I included try catch statements I catch 1583 01:03:33,240 --> 01:03:37,020 the error and I printed out and then 1584 01:03:34,859 --> 01:03:38,400 quiz when I print the error I print the 1585 01:03:37,020 --> 01:03:40,920 type of error as well as the actual 1586 01:03:38,400 --> 01:03:42,720 message and since the program's still 1587 01:03:40,920 --> 01:03:44,040 running I can also print out all 1588 01:03:42,720 --> 01:03:46,140 variables that are currently in use 1589 01:03:44,040 --> 01:03:47,819 allowing me to debug and see where the 1590 01:03:46,140 --> 01:03:50,640 program went well 1591 01:03:47,819 --> 01:03:53,700 so some of the things that went well 1592 01:03:50,640 --> 01:03:55,559 was my planning I put my plans for 1593 01:03:53,700 --> 01:03:57,900 potential algorithms onto paper using my 1594 01:03:55,559 --> 01:03:59,339 calculator for the mats once I was done 1595 01:03:57,900 --> 01:04:01,200 planning I tested on the computer by 1596 01:03:59,339 --> 01:04:02,460 creating a basic program to emulate each 1597 01:04:01,200 --> 01:04:04,380 step 1598 01:04:02,460 --> 01:04:06,000 debugging was fairly easy especially 1599 01:04:04,380 --> 01:04:07,920 with Python's comprehensive error 1600 01:04:06,000 --> 01:04:09,839 messages it tells me what happened and 1601 01:04:07,920 --> 01:04:12,420 where making it very easy for me to 1602 01:04:09,839 --> 01:04:14,579 trace and fix any bugs that popped up 1603 01:04:12,420 --> 01:04:16,740 as for my testing I implemented to try 1604 01:04:14,579 --> 01:04:18,540 cash to help me find some logical errors 1605 01:04:16,740 --> 01:04:20,760 and I'll also helped me print out 1606 01:04:18,540 --> 01:04:22,920 variables 1607 01:04:20,760 --> 01:04:24,420 now because this is three years ago I've 1608 01:04:22,920 --> 01:04:26,640 learned things since 1609 01:04:24,420 --> 01:04:28,380 so if I were to remake this program what 1610 01:04:26,640 --> 01:04:30,420 would I do to make it better 1611 01:04:28,380 --> 01:04:31,980 an example of what I might do is if I 1612 01:04:30,420 --> 01:04:34,559 can experiment with different ciphers 1613 01:04:31,980 --> 01:04:37,500 because as of this moment there is only 1614 01:04:34,559 --> 01:04:39,180 one Cipher in four encodings and it'd be 1615 01:04:37,500 --> 01:04:41,099 great to learn different disciples as 1616 01:04:39,180 --> 01:04:42,599 well as this one 1617 01:04:41,099 --> 01:04:44,520 it'd be nice if I could decrease the 1618 01:04:42,599 --> 01:04:46,140 inflation from 112 to 1 to something 1619 01:04:44,520 --> 01:04:48,359 more reasonable 1620 01:04:46,140 --> 01:04:49,559 because again another learning 1621 01:04:48,359 --> 01:04:51,480 experience 1622 01:04:49,559 --> 01:04:54,720 and I'd also reduce the repetition 1623 01:04:51,480 --> 01:04:57,359 because whilst having 39b gen is great 1624 01:04:54,720 --> 01:04:58,920 because I can split the characters it is 1625 01:04:57,359 --> 01:05:01,799 also inefficient 1626 01:04:58,920 --> 01:05:04,500 so perhaps I will remake this someday 1627 01:05:01,799 --> 01:05:06,240 in summary my program was created as a 1628 01:05:04,500 --> 01:05:07,559 collection of conceptual ideas and a 1629 01:05:06,240 --> 01:05:08,400 mixed match of other methods that I've 1630 01:05:07,559 --> 01:05:09,960 read about 1631 01:05:08,400 --> 01:05:11,520 there's still quite a lot of things I 1632 01:05:09,960 --> 01:05:13,680 can learn from this project so I might 1633 01:05:11,520 --> 01:05:16,380 come back later to redo it overall it 1634 01:05:13,680 --> 01:05:19,339 was an excellent project and lots of fun 1635 01:05:16,380 --> 01:05:19,339 thanks for listening 1636 01:06:26,240 --> 01:06:29,240 thank you 1637 01:06:36,780 --> 01:06:39,780 hey 1638 01:06:43,740 --> 01:06:45,920 okay 1639 01:06:46,020 --> 01:06:50,460 all right so we now have a Sam's side 1640 01:06:49,260 --> 01:06:52,380 bottom 1641 01:06:50,460 --> 01:06:54,900 um Morgan Potter and Joshua 1642 01:06:52,380 --> 01:06:57,240 his norbow okay 1643 01:06:54,900 --> 01:06:59,220 um and we're gonna do uh rather than me 1644 01:06:57,240 --> 01:07:01,920 reading this very terrible spreadsheet 1645 01:06:59,220 --> 01:07:03,900 we're going to do the questions so how 1646 01:07:01,920 --> 01:07:07,500 long have we been programming 1647 01:07:03,900 --> 01:07:09,960 uh five years I think 1648 01:07:07,500 --> 01:07:11,339 approximately seven 1649 01:07:09,960 --> 01:07:15,299 two years 1650 01:07:11,339 --> 01:07:17,099 okay and uh favorite emoji 1651 01:07:15,299 --> 01:07:19,500 I think it's the upside down smiley face 1652 01:07:17,099 --> 01:07:23,220 the shark emoji 1653 01:07:19,500 --> 01:07:25,140 I'm gonna say heart eyes emoji okay and 1654 01:07:23,220 --> 01:07:27,059 where are we from 1655 01:07:25,140 --> 01:07:28,140 all of us yes all of you from the same 1656 01:07:27,059 --> 01:07:29,839 School uh 1657 01:07:28,140 --> 01:07:32,880 you're going to be talking to us about 1658 01:07:29,839 --> 01:07:36,980 how difficult robot dogs are I believe 1659 01:07:32,880 --> 01:07:36,980 yes excellent thank you very much 1660 01:07:38,300 --> 01:07:45,299 [Laughter] 1661 01:07:42,240 --> 01:07:46,799 uh good afternoon uh I'm Sam sidebertham 1662 01:07:45,299 --> 01:07:48,000 this is Morgan Potter and Josh GIS 1663 01:07:46,799 --> 01:07:51,240 milber and we're going to be talking 1664 01:07:48,000 --> 01:07:53,640 about Winston the robot dog 1665 01:07:51,240 --> 01:07:56,039 um so Winston is a backer name and he 1666 01:07:53,640 --> 01:07:58,680 stands for a walking inverse kinematics 1667 01:07:56,039 --> 01:08:01,339 based navigation system transmitted over 1668 01:07:58,680 --> 01:08:01,339 Networks 1669 01:08:02,460 --> 01:08:07,619 as his name suggests he is a walking 1670 01:08:05,160 --> 01:08:09,839 quadruped robot he uses inverse 1671 01:08:07,619 --> 01:08:13,319 kinematics to calculate the movement for 1672 01:08:09,839 --> 01:08:15,599 his legs he has a camera to work out the 1673 01:08:13,319 --> 01:08:17,400 navigation and it uses networks to 1674 01:08:15,599 --> 01:08:19,080 communicate all these ideas to the other 1675 01:08:17,400 --> 01:08:20,880 parts 1676 01:08:19,080 --> 01:08:23,460 um we split this up between us so I was 1677 01:08:20,880 --> 01:08:25,560 doing the physical build of the dog and 1678 01:08:23,460 --> 01:08:28,140 the walking Morgan was doing the camera 1679 01:08:25,560 --> 01:08:29,719 navigation and Josh was doing the 1680 01:08:28,140 --> 01:08:32,580 communication 1681 01:08:29,719 --> 01:08:35,520 I did it in Arduino Morgan used a 1682 01:08:32,580 --> 01:08:38,880 Raspberry Pi and Josh and flask 1683 01:08:35,520 --> 01:08:41,759 so this all started in early last year 1684 01:08:38,880 --> 01:08:43,219 when I saw Boston dynamics's spot for 1685 01:08:41,759 --> 01:08:45,960 the very first time 1686 01:08:43,219 --> 01:08:48,900 30 years of research and development all 1687 01:08:45,960 --> 01:08:50,219 put into one really Advanced robot dog 1688 01:08:48,900 --> 01:08:53,600 and 1689 01:08:50,219 --> 01:08:53,600 I thought I could do that 1690 01:08:54,960 --> 01:09:01,940 so my first attempt in June of last year 1691 01:08:58,199 --> 01:09:04,739 looked a little less Advanced 1692 01:09:01,940 --> 01:09:07,859 his main issue were his stick legs that 1693 01:09:04,739 --> 01:09:10,859 kept falling off I submitted him and 1694 01:09:07,859 --> 01:09:11,270 this was my teacher's feedback 1695 01:09:10,859 --> 01:09:14,479 um 1696 01:09:11,270 --> 01:09:14,479 [Music] 1697 01:09:15,980 --> 01:09:21,839 so I decided to do some better 1698 01:09:18,540 --> 01:09:23,580 development for more advanced legs 1699 01:09:21,839 --> 01:09:25,859 um so I looked at how other robots had 1700 01:09:23,580 --> 01:09:28,799 done it some had Motors placed on the 1701 01:09:25,859 --> 01:09:32,219 knees While others use linear actuators 1702 01:09:28,799 --> 01:09:35,460 and all Motors at the hips and I read a 1703 01:09:32,219 --> 01:09:37,980 few papers as well until I came up with 1704 01:09:35,460 --> 01:09:40,319 this design which mimics the linear 1705 01:09:37,980 --> 01:09:43,799 actuator model both Motors were located 1706 01:09:40,319 --> 01:09:46,679 at the hip but we didn't have any linear 1707 01:09:43,799 --> 01:09:49,859 actuators on hand what we did have were 1708 01:09:46,679 --> 01:09:52,440 spare parts from a broken 3D printer 1709 01:09:49,859 --> 01:09:55,320 which we turned into a pulley system 1710 01:09:52,440 --> 01:09:56,760 it worked reasonably reliably so I 1711 01:09:55,320 --> 01:09:58,739 upscaled it 1712 01:09:56,760 --> 01:10:01,440 and then I went to implement the 1713 01:09:58,739 --> 01:10:03,480 movement controls what we wanted was to 1714 01:10:01,440 --> 01:10:05,340 be able to put an input for the full 1715 01:10:03,480 --> 01:10:06,660 extension and then calculate the angles 1716 01:10:05,340 --> 01:10:08,520 needed to get there 1717 01:10:06,660 --> 01:10:10,739 we could create a triangle using the 1718 01:10:08,520 --> 01:10:13,860 legs and then use some simple maths 1719 01:10:10,739 --> 01:10:16,320 which is definitely coded in Python to 1720 01:10:13,860 --> 01:10:17,520 create a very simple inverse kinematics 1721 01:10:16,320 --> 01:10:20,640 function 1722 01:10:17,520 --> 01:10:22,500 uh this is the dog in its current state 1723 01:10:20,640 --> 01:10:24,300 there are some things you may notice 1724 01:10:22,500 --> 01:10:27,120 like the fact that there's actually 1725 01:10:24,300 --> 01:10:29,340 three Murders At The Hip uh this was 1726 01:10:27,120 --> 01:10:31,080 because while I was looking at it I saw 1727 01:10:29,340 --> 01:10:31,920 you needed one to do actual knee 1728 01:10:31,080 --> 01:10:33,960 movement 1729 01:10:31,920 --> 01:10:35,219 one to move the whole leg and then I 1730 01:10:33,960 --> 01:10:37,560 realized you can also move your leg 1731 01:10:35,219 --> 01:10:40,760 outwards I don't know what purpose it 1732 01:10:37,560 --> 01:10:40,760 serves but I added it anyway 1733 01:10:41,340 --> 01:10:46,620 uh he's also got a hollow body design 1734 01:10:43,620 --> 01:10:48,900 this was mainly to minimize the weight 1735 01:10:46,620 --> 01:10:50,699 load that the legs had to carry there 1736 01:10:48,900 --> 01:10:52,320 was the slight drawback that if you need 1737 01:10:50,699 --> 01:10:54,600 to bring this on a plane from Canberra 1738 01:10:52,320 --> 01:10:56,900 to present it it may look slightly like 1739 01:10:54,600 --> 01:10:56,900 a bomb 1740 01:10:57,600 --> 01:11:01,620 um it's not trust so I will now give it 1741 01:11:00,179 --> 01:11:03,120 to Morgan to talk about the computer 1742 01:11:01,620 --> 01:11:05,540 vision 1743 01:11:03,120 --> 01:11:07,500 uh hello I'm the aforementioned Morgan 1744 01:11:05,540 --> 01:11:10,320 uh yeah I did the computer vision 1745 01:11:07,500 --> 01:11:12,120 opponent of Winston which is a subset of 1746 01:11:10,320 --> 01:11:14,640 the navigation system 1747 01:11:12,120 --> 01:11:17,880 um so basically the goal one of the 1748 01:11:14,640 --> 01:11:19,260 goals of Winston is to have a um 1749 01:11:17,880 --> 01:11:22,500 like 1750 01:11:19,260 --> 01:11:23,880 terrain navigation so say you want to 1751 01:11:22,500 --> 01:11:25,380 move like individual legs so you're 1752 01:11:23,880 --> 01:11:27,540 moving over Rocky terrain you're gonna 1753 01:11:25,380 --> 01:11:30,780 have to like know where to put each leg 1754 01:11:27,540 --> 01:11:34,500 uh yeah which is quite difficult to do 1755 01:11:30,780 --> 01:11:36,360 without a good 3D map of the environment 1756 01:11:34,500 --> 01:11:38,280 um yeah so I chose a stereo Vision 1757 01:11:36,360 --> 01:11:40,860 approach to do this which is essentially 1758 01:11:38,280 --> 01:11:43,739 you uh you can obtain depth from two 1759 01:11:40,860 --> 01:11:46,080 cameras uh through a triangulation uh 1760 01:11:43,739 --> 01:11:47,820 because you know the image point in uh 1761 01:11:46,080 --> 01:11:51,000 both image points 1762 01:11:47,820 --> 01:11:53,100 yeah so the main issue with this is the 1763 01:11:51,000 --> 01:11:55,320 correspondence problem so 1764 01:11:53,100 --> 01:11:56,940 you basically don't know which pixels 1765 01:11:55,320 --> 01:11:58,560 match up with the other pixels in either 1766 01:11:56,940 --> 01:12:01,260 image so 1767 01:11:58,560 --> 01:12:03,300 in this example you don't know that the 1768 01:12:01,260 --> 01:12:04,320 tape measure in the left image is the 1769 01:12:03,300 --> 01:12:07,920 same as the tape measure on the Right 1770 01:12:04,320 --> 01:12:08,640 image without doing some computations 1771 01:12:07,920 --> 01:12:10,620 um 1772 01:12:08,640 --> 01:12:12,840 so I originally chose to uh Harris 1773 01:12:10,620 --> 01:12:16,500 Corner detection approach 1774 01:12:12,840 --> 01:12:19,080 um which is essentially aims to yeah 1775 01:12:16,500 --> 01:12:20,640 um match based on the likelihood that it 1776 01:12:19,080 --> 01:12:22,500 is a corner 1777 01:12:20,640 --> 01:12:24,120 um yeah it's the problem with this is 1778 01:12:22,500 --> 01:12:26,580 It's a sparse matching method meaning 1779 01:12:24,120 --> 01:12:29,040 that there's not many points that get 1780 01:12:26,580 --> 01:12:31,140 um matched between the two images and 1781 01:12:29,040 --> 01:12:33,120 some post-processing techniques will 1782 01:12:31,140 --> 01:12:35,760 like um a ball pivoting algorithm would 1783 01:12:33,120 --> 01:12:38,940 have to be used to be able to get an 1784 01:12:35,760 --> 01:12:43,140 actual uh 3D geometry from it 1785 01:12:38,940 --> 01:12:44,580 so I pivoted to block matching which 1786 01:12:43,140 --> 01:12:47,219 essentially involves 1787 01:12:44,580 --> 01:12:49,260 taking a block from the left image and 1788 01:12:47,219 --> 01:12:52,380 comparing it against a set of blocks in 1789 01:12:49,260 --> 01:12:54,659 the right image and Computing a uh a 1790 01:12:52,380 --> 01:12:56,159 cost function at each of the blocks and 1791 01:12:54,659 --> 01:12:59,060 then you choose the block which has the 1792 01:12:56,159 --> 01:12:59,060 lowest cost 1793 01:12:59,760 --> 01:13:04,560 um this is the camera housing design 1794 01:13:01,940 --> 01:13:06,060 I uh there's two things to note about 1795 01:13:04,560 --> 01:13:07,860 this the 1796 01:13:06,060 --> 01:13:11,280 cameras maintain a constant relative 1797 01:13:07,860 --> 01:13:13,020 position so they don't move and the uh 1798 01:13:11,280 --> 01:13:17,340 they are only displaced horizontally 1799 01:13:13,020 --> 01:13:19,260 meaning that the pixels are aligned uh 1800 01:13:17,340 --> 01:13:21,780 the pixels are aligned vertically uh 1801 01:13:19,260 --> 01:13:23,460 when you get rid of distortion meaning 1802 01:13:21,780 --> 01:13:27,000 you only have to scan in one dimension 1803 01:13:23,460 --> 01:13:30,420 so you can just scan across the yeah uh 1804 01:13:27,000 --> 01:13:32,580 the scan line there in blue 1805 01:13:30,420 --> 01:13:34,980 um so this is the result it's not 1806 01:13:32,580 --> 01:13:35,940 exactly a depth map 1807 01:13:34,980 --> 01:13:38,940 um 1808 01:13:35,940 --> 01:13:41,820 yeah the the main the main issue with 1809 01:13:38,940 --> 01:13:44,040 this is um block matching isn't really a 1810 01:13:41,820 --> 01:13:47,400 modern technique it's a bit old so 1811 01:13:44,040 --> 01:13:49,739 modern techniques use neural networks I 1812 01:13:47,400 --> 01:13:52,560 wanted to do block matching first 1813 01:13:49,739 --> 01:13:54,780 because it um because I needed to get a 1814 01:13:52,560 --> 01:13:56,640 better understanding of it but I will 1815 01:13:54,780 --> 01:13:58,080 try to implement neural networks in the 1816 01:13:56,640 --> 01:14:00,179 future yeah 1817 01:13:58,080 --> 01:14:02,280 and on to Josh 1818 01:14:00,179 --> 01:14:05,580 but hello I'm Josh 1819 01:14:02,280 --> 01:14:08,699 um I put a ton into ton 1820 01:14:05,580 --> 01:14:11,460 um now I my goal here was to connect all 1821 01:14:08,699 --> 01:14:13,800 three projects um we have Sam with his 1822 01:14:11,460 --> 01:14:15,719 movement of Winston and Morgan with his 1823 01:14:13,800 --> 01:14:17,520 computer vision and I was disconnecting 1824 01:14:15,719 --> 01:14:19,800 all three of the projects into one big 1825 01:14:17,520 --> 01:14:21,659 one instead of three minor ones 1826 01:14:19,800 --> 01:14:23,820 um with that I created an access point 1827 01:14:21,659 --> 01:14:25,679 to Winston on the web 1828 01:14:23,820 --> 01:14:27,840 um this was done 1829 01:14:25,679 --> 01:14:30,060 um with the Winston video stream as I 1830 01:14:27,840 --> 01:14:31,560 call the Winston Vision video stream 1831 01:14:30,060 --> 01:14:35,520 um which was Morgan's computer vision 1832 01:14:31,560 --> 01:14:37,800 and and it was all done okay hold on it 1833 01:14:35,520 --> 01:14:40,080 was all done with flask there we go 1834 01:14:37,800 --> 01:14:41,520 um because you know we love python it's 1835 01:14:40,080 --> 01:14:43,560 the best thing ever 1836 01:14:41,520 --> 01:14:45,480 um the primary purpose of this as stated 1837 01:14:43,560 --> 01:14:48,780 was to connect all the projects together 1838 01:14:45,480 --> 01:14:50,880 and this was done through HTTP requests 1839 01:14:48,780 --> 01:14:53,340 and radio 1840 01:14:50,880 --> 01:14:55,020 um yeah radio so radio first Sam's 1841 01:14:53,340 --> 01:14:57,120 Arduino just to connect it all and we 1842 01:14:55,020 --> 01:14:58,980 had HTTP requests from the Raspberry Pi 1843 01:14:57,120 --> 01:15:00,420 with Morgan and this would all display 1844 01:14:58,980 --> 01:15:02,699 on the website 1845 01:15:00,420 --> 01:15:04,980 um with the wins division data stream so 1846 01:15:02,699 --> 01:15:06,840 look pretty much like that 1847 01:15:04,980 --> 01:15:10,080 um you have both eyes and how they would 1848 01:15:06,840 --> 01:15:11,880 be shown with the three streams and then 1849 01:15:10,080 --> 01:15:13,140 you've also got the processed image down 1850 01:15:11,880 --> 01:15:15,300 the bottom 1851 01:15:13,140 --> 01:15:18,060 um which is just giving everyone an idea 1852 01:15:15,300 --> 01:15:20,040 of what the dog is actually doing and 1853 01:15:18,060 --> 01:15:23,040 what it can see and it just provides 1854 01:15:20,040 --> 01:15:24,960 that that access point as stated to what 1855 01:15:23,040 --> 01:15:27,300 Winston is anyway I'm going to pass it 1856 01:15:24,960 --> 01:15:30,120 back to Sam now and what he was done 1857 01:15:27,300 --> 01:15:31,679 yeah so uh where are we at with Winston 1858 01:15:30,120 --> 01:15:33,900 right now 1859 01:15:31,679 --> 01:15:37,040 um we have him here and I will show you 1860 01:15:33,900 --> 01:15:37,040 what he can do 1861 01:15:46,140 --> 01:15:53,130 not a lot 1862 01:15:48,940 --> 01:15:53,130 [Applause] 1863 01:15:53,640 --> 01:15:59,100 um he he does respond to commands but 1864 01:15:56,280 --> 01:16:01,739 not well and he's not walking for a few 1865 01:15:59,100 --> 01:16:03,420 reasons one of which is biomechanics is 1866 01:16:01,739 --> 01:16:06,480 hard 1867 01:16:03,420 --> 01:16:08,580 um if you have too much tension then the 1868 01:16:06,480 --> 01:16:09,900 police will tear themselves apart if you 1869 01:16:08,580 --> 01:16:12,719 have too little then there's too much 1870 01:16:09,900 --> 01:16:17,600 slack for them to move they also 1871 01:16:12,719 --> 01:16:17,600 sometimes don't respond reliably 1872 01:16:17,640 --> 01:16:22,020 and do that 1873 01:16:19,560 --> 01:16:24,300 you can also see that there's a battery 1874 01:16:22,020 --> 01:16:25,760 in a burn bag that's not present on the 1875 01:16:24,300 --> 01:16:29,460 dog which leads into the second reason 1876 01:16:25,760 --> 01:16:32,400 that equipment gets damaged we went 1877 01:16:29,460 --> 01:16:34,560 through the servo driver board because 1878 01:16:32,400 --> 01:16:37,080 we plugged a 12 volt battery even though 1879 01:16:34,560 --> 01:16:38,820 it has six volts Max 1880 01:16:37,080 --> 01:16:40,320 um it's also the last one we had with a 1881 01:16:38,820 --> 01:16:42,600 capacitor so I had to pray that that 1882 01:16:40,320 --> 01:16:44,600 wasn't important 1883 01:16:42,600 --> 01:16:44,600 um 1884 01:16:44,820 --> 01:16:50,400 we also went through two arduinos and a 1885 01:16:47,699 --> 01:16:52,140 Wi-Fi chip we were too busy putting the 1886 01:16:50,400 --> 01:16:53,370 fires out to take photos so here's an 1887 01:16:52,140 --> 01:16:55,440 artist rendition 1888 01:16:53,370 --> 01:16:57,120 [Music] 1889 01:16:55,440 --> 01:16:59,280 um and then the battery that I just 1890 01:16:57,120 --> 01:17:01,620 mentioned if you leave lying around a 1891 01:16:59,280 --> 01:17:03,600 year 11 will find it and find that 1892 01:17:01,620 --> 01:17:07,580 Sparks Fly when you connect ground and 1893 01:17:03,600 --> 01:17:07,580 power and bad stuff happens 1894 01:17:07,800 --> 01:17:13,340 um overall this was a 160 loss 1895 01:17:14,340 --> 01:17:20,159 um but we are optimistic to turn this 1896 01:17:17,580 --> 01:17:22,500 around in the future 1897 01:17:20,159 --> 01:17:24,840 we do plan to continue working on 1898 01:17:22,500 --> 01:17:26,640 Winston this isn't the final project and 1899 01:17:24,840 --> 01:17:29,580 if we've piqued your interest at all we 1900 01:17:26,640 --> 01:17:31,640 do upload posts to the Instagram 1901 01:17:29,580 --> 01:17:31,640 um 1902 01:17:32,400 --> 01:17:37,380 um yeah good and the bad so yeah thank 1903 01:17:35,580 --> 01:17:39,060 you for listening 1904 01:17:37,380 --> 01:17:42,329 um yeah hi 1905 01:17:39,060 --> 01:17:42,329 [Applause] 1906 01:17:47,340 --> 01:17:51,080 and Thomas I think is next 1907 01:17:52,320 --> 01:17:55,159 come on down 1908 01:17:55,800 --> 01:18:00,500 laughs 1909 01:17:58,380 --> 01:18:02,640 [Music] 1910 01:18:00,500 --> 01:18:04,820 I can't hear anything can you hear 1911 01:18:02,640 --> 01:18:04,820 anything 1912 01:18:06,440 --> 01:18:11,360 all right there's a ghost oh that's 1913 01:18:11,760 --> 01:18:17,520 Okay so we've got Thomas you've been 1914 01:18:14,580 --> 01:18:19,800 programming since years seven 1915 01:18:17,520 --> 01:18:22,020 and um look I'm going to read this out 1916 01:18:19,800 --> 01:18:25,679 because Thomas wrote it and it's just a 1917 01:18:22,020 --> 01:18:26,940 spook for ourselves here he used grok 1918 01:18:25,679 --> 01:18:29,520 learning 1919 01:18:26,940 --> 01:18:32,699 to begin his programming knowledge 1920 01:18:29,520 --> 01:18:34,320 career so well done Brock 1921 01:18:32,699 --> 01:18:37,620 yes 1922 01:18:34,320 --> 01:18:40,500 your favorite emoji is 1923 01:18:37,620 --> 01:18:43,260 there a rock face or the moai this is 1924 01:18:40,500 --> 01:18:45,719 you who wrote it not a test I remember 1925 01:18:43,260 --> 01:18:48,420 okay good good good 1926 01:18:45,719 --> 01:18:52,100 um and you like it because it's used on 1927 01:18:48,420 --> 01:18:52,100 social media sites such as Reddit 1928 01:18:53,400 --> 01:18:56,699 the most recent thing that you've 1929 01:18:55,080 --> 01:18:59,219 learned about computers is that 1930 01:18:56,699 --> 01:19:02,340 Microsoft is finally starting to support 1931 01:18:59,219 --> 01:19:04,800 open source projects such as terminal 1932 01:19:02,340 --> 01:19:06,179 which is a really nice thing totally 1933 01:19:04,800 --> 01:19:09,179 right 1934 01:19:06,179 --> 01:19:09,179 and 1935 01:19:10,020 --> 01:19:14,760 oh well done and so here we have Thomas 1936 01:19:12,600 --> 01:19:19,280 speaking about ASCII video player and 1937 01:19:14,760 --> 01:19:19,280 tic tac toe thank you Tom 1938 01:19:23,219 --> 01:19:27,540 ready uh hi I'm Thomas 1939 01:19:25,920 --> 01:19:29,580 um I'd like to show you till my projects 1940 01:19:27,540 --> 01:19:31,920 I've been working on as is mentioned uh 1941 01:19:29,580 --> 01:19:36,600 my ASCII video filter and my noughts and 1942 01:19:31,920 --> 01:19:36,600 Crosses machine learning model first 1943 01:19:36,840 --> 01:19:42,420 I'll talk about my video filter it takes 1944 01:19:39,719 --> 01:19:45,179 either webcam or video input and outputs 1945 01:19:42,420 --> 01:19:48,960 it into a terminal with an amazing 140 1946 01:19:45,179 --> 01:19:51,120 170 by 44 resolution not shown in these 1947 01:19:48,960 --> 01:19:52,920 images it's too small 1948 01:19:51,120 --> 01:19:55,080 um you can either use colors from The 1949 01:19:52,920 --> 01:19:56,699 Source or it can apply a color filter by 1950 01:19:55,080 --> 01:19:59,820 finding the intensity of each pixel 1951 01:19:56,699 --> 01:20:03,260 which is shown in the green python logo 1952 01:19:59,820 --> 01:20:06,199 uh why did I make it other than why not 1953 01:20:03,260 --> 01:20:09,719 so in the early versions of VLC like 1954 01:20:06,199 --> 01:20:11,699 1.0.0 there is an ASCII art filter that 1955 01:20:09,719 --> 01:20:13,520 takes the video being played and outputs 1956 01:20:11,699 --> 01:20:16,920 a grid of colored characters 1957 01:20:13,520 --> 01:20:19,920 and backs them with backgrounds I use a 1958 01:20:16,920 --> 01:20:21,719 list of maybe 16 colors mixes them in 1959 01:20:19,920 --> 01:20:24,540 differing amounts to approximate 1960 01:20:21,719 --> 01:20:26,280 different colors uh for example to 1961 01:20:24,540 --> 01:20:28,679 display a slightly darker shade of green 1962 01:20:26,280 --> 01:20:30,600 it will set the background to green and 1963 01:20:28,679 --> 01:20:32,880 display a small black character over the 1964 01:20:30,600 --> 01:20:35,940 top this can be seen in the top of the 1965 01:20:32,880 --> 01:20:38,880 center on the center of the top 1966 01:20:35,940 --> 01:20:42,120 initially I wanted to close I wanted to 1967 01:20:38,880 --> 01:20:43,860 closely replicate vlc's effect and use 1968 01:20:42,120 --> 01:20:45,780 the 16 colors from Windows command 1969 01:20:43,860 --> 01:20:48,420 prompt and so I was going to set up the 1970 01:20:45,780 --> 01:20:50,880 program to convert each RGB value to its 1971 01:20:48,420 --> 01:20:52,920 closest color in the list what I didn't 1972 01:20:50,880 --> 01:20:55,620 understand at the time is performing 1973 01:20:52,920 --> 01:20:57,719 lots of queries is slow and both Python 1974 01:20:55,620 --> 01:20:58,640 and my computer couldn't do 16 queries 1975 01:20:57,719 --> 01:21:00,739 over 1976 01:20:58,640 --> 01:21:04,800 7480 1977 01:21:00,739 --> 01:21:07,320 7480 pixels at 30 frames a second to try 1978 01:21:04,800 --> 01:21:09,000 and speed up the search I installed a 1979 01:21:07,320 --> 01:21:11,880 python aux trees implementation from 1980 01:21:09,000 --> 01:21:13,980 GitHub not using pip which is kind of 1981 01:21:11,880 --> 01:21:15,900 painful 1982 01:21:13,980 --> 01:21:18,000 so got found out on GitHub manually 1983 01:21:15,900 --> 01:21:19,380 installed it into pycharm took quite a 1984 01:21:18,000 --> 01:21:21,000 while 1985 01:21:19,380 --> 01:21:23,640 um see I was going to use that as I 1986 01:21:21,000 --> 01:21:25,340 realized colors are basically points in 1987 01:21:23,640 --> 01:21:29,100 3D space 1988 01:21:25,340 --> 01:21:32,760 then turns out uh Powershell supports 1989 01:21:29,100 --> 01:21:34,920 are like any RGB value so I wasted my 1990 01:21:32,760 --> 01:21:35,640 time it's kind of sad 1991 01:21:34,920 --> 01:21:38,880 um 1992 01:21:35,640 --> 01:21:40,739 so it got easier but I wasted my time 1993 01:21:38,880 --> 01:21:43,679 it's kind of sad 1994 01:21:40,739 --> 01:21:46,460 um and then from there it was much 1995 01:21:43,679 --> 01:21:46,460 easier as I said 1996 01:21:46,620 --> 01:21:52,920 I installed opencv to resize The Source 1997 01:21:51,120 --> 01:21:55,620 array for either from the webcam or from 1998 01:21:52,920 --> 01:21:58,679 the video using linear interpolation or 1999 01:21:55,620 --> 01:22:00,000 cubic if I'm getting fancy after looking 2000 01:21:58,679 --> 01:22:01,679 at a whole bunch of Stack exchange 2001 01:22:00,000 --> 01:22:05,280 answers found out how to write the 2002 01:22:01,679 --> 01:22:06,719 Escape sequences and I put on a random 2003 01:22:05,280 --> 01:22:07,500 character to complete the hacker Man 2004 01:22:06,719 --> 01:22:09,960 look 2005 01:22:07,500 --> 01:22:11,820 each escaped string was appended to a 2006 01:22:09,960 --> 01:22:13,440 giant string which is to be printed each 2007 01:22:11,820 --> 01:22:14,880 frame along with new lines in the 2008 01:22:13,440 --> 01:22:16,920 correct places 2009 01:22:14,880 --> 01:22:18,780 once the functions were complete I 2010 01:22:16,920 --> 01:22:20,159 tested them in Windows terminal and got 2011 01:22:18,780 --> 01:22:22,920 the string as a literal instead of 2012 01:22:20,159 --> 01:22:25,080 colorful text my advice that myself were 2013 01:22:22,920 --> 01:22:27,179 very confused since the escapes looked 2014 01:22:25,080 --> 01:22:29,219 correct but they were not registering 2015 01:22:27,179 --> 01:22:31,020 eventually we had the idea to print each 2016 01:22:29,219 --> 01:22:33,060 escape sequence separately and that 2017 01:22:31,020 --> 01:22:34,920 worked perfectly 2018 01:22:33,060 --> 01:22:37,159 so I'll give a quick demonstration for 2019 01:22:34,920 --> 01:22:37,159 that one 2020 01:22:42,120 --> 01:22:47,699 and hopefully 2021 01:22:44,580 --> 01:22:48,020 yeah certainly see me 2022 01:22:47,699 --> 01:22:51,309 um 2023 01:22:48,020 --> 01:22:51,309 [Applause] 2024 01:22:57,260 --> 01:23:03,739 that was a smaller project thought 2025 01:22:59,580 --> 01:23:03,739 better run more so my next project 2026 01:23:04,260 --> 01:23:08,460 not that one 2027 01:23:06,900 --> 01:23:10,020 uh 2028 01:23:08,460 --> 01:23:11,699 there we go 2029 01:23:10,020 --> 01:23:15,360 my notes and Crosses machine learning 2030 01:23:11,699 --> 01:23:17,040 model so my other yeah it uses a into my 2031 01:23:15,360 --> 01:23:19,080 interpretation of the Monte Carlo 2032 01:23:17,040 --> 01:23:21,719 research algorithm from its page on 2033 01:23:19,080 --> 01:23:24,360 Wikipedia and a sqlite database which 2034 01:23:21,719 --> 01:23:26,280 contains every possible board State the 2035 01:23:24,360 --> 01:23:29,040 number of times that that state has 2036 01:23:26,280 --> 01:23:30,840 contributed to a win and the Empower and 2037 01:23:29,040 --> 01:23:34,320 how many times it has been used 2038 01:23:30,840 --> 01:23:37,620 started designing this moment I started 2039 01:23:34,320 --> 01:23:39,600 designing uh the mod that is started the 2040 01:23:37,620 --> 01:23:41,460 model in January last year and was first 2041 01:23:39,600 --> 01:23:42,840 working in August making it my longest 2042 01:23:41,460 --> 01:23:45,380 project so far 2043 01:23:42,840 --> 01:23:49,260 as you saw 2044 01:23:45,380 --> 01:23:52,920 it shows a ASCII grid of characters 2045 01:23:49,260 --> 01:23:54,480 um it it's playable so each number is in 2046 01:23:52,920 --> 01:23:57,179 the position that it would be on a 2047 01:23:54,480 --> 01:23:59,460 number pad making it easy to type in 2048 01:23:57,179 --> 01:24:01,920 to make a movie type in a single digit 2049 01:23:59,460 --> 01:24:04,199 press enter and then it'll make a move 2050 01:24:01,920 --> 01:24:06,120 then the computer will go and it'll 2051 01:24:04,199 --> 01:24:08,100 calculate which move is pretty good and 2052 01:24:06,120 --> 01:24:09,300 then output that and then it's your turn 2053 01:24:08,100 --> 01:24:11,340 again 2054 01:24:09,300 --> 01:24:13,980 uh this repeats until the board is 2055 01:24:11,340 --> 01:24:15,060 filled or someone wins 2056 01:24:13,980 --> 01:24:18,060 so 2057 01:24:15,060 --> 01:24:19,620 since each position is a single digit I 2058 01:24:18,060 --> 01:24:21,659 realized I can store the current state 2059 01:24:19,620 --> 01:24:24,060 as a string by appending each player to 2060 01:24:21,659 --> 01:24:26,580 the end for example one of the simplest 2061 01:24:24,060 --> 01:24:28,980 games can be shown as one four two five 2062 01:24:26,580 --> 01:24:31,800 three where in as you can see in this 2063 01:24:28,980 --> 01:24:33,600 example so one two and three are in the 2064 01:24:31,800 --> 01:24:36,179 bottom row and made by the first player 2065 01:24:33,600 --> 01:24:39,000 X and four and five are in the middle 2066 01:24:36,179 --> 01:24:41,820 row made by a second player oh 2067 01:24:39,000 --> 01:24:43,920 now the program would then store each 2068 01:24:41,820 --> 01:24:45,900 state as an identifier in the sqlite 2069 01:24:43,920 --> 01:24:48,600 database 2070 01:24:45,900 --> 01:24:50,699 to decide which move to make the program 2071 01:24:48,600 --> 01:24:52,580 calculates the child States and fetches 2072 01:24:50,699 --> 01:24:54,960 them from from the stats in the table 2073 01:24:52,580 --> 01:24:57,000 the quality of the move is calculated 2074 01:24:54,960 --> 01:24:58,920 from this formula which are which I 2075 01:24:57,000 --> 01:25:02,340 borrowed from the Monte Carlo search 2076 01:24:58,920 --> 01:25:04,620 Wikipedia article so wi as you can see 2077 01:25:02,340 --> 01:25:07,500 up there is how many times that move has 2078 01:25:04,620 --> 01:25:10,440 contributed to a win our small ni is how 2079 01:25:07,500 --> 01:25:12,600 many times it's been used big ni is how 2080 01:25:10,440 --> 01:25:15,540 many times the parent has been used 2081 01:25:12,600 --> 01:25:17,280 like the previous move and C is the 2082 01:25:15,540 --> 01:25:20,400 exploration parameter 2083 01:25:17,280 --> 01:25:21,540 chosen arbitrarily I chose the square 2084 01:25:20,400 --> 01:25:24,440 root of two because that's what 2085 01:25:21,540 --> 01:25:24,440 Wikipedia recommended 2086 01:25:25,440 --> 01:25:31,140 um next 2087 01:25:26,880 --> 01:25:33,960 so and when I first started realized 2088 01:25:31,140 --> 01:25:36,060 um a small ni will be zero before a move 2089 01:25:33,960 --> 01:25:38,940 has been used that leads to a whole 2090 01:25:36,060 --> 01:25:40,980 bunch of Divisions by zero not good 2091 01:25:38,940 --> 01:25:43,800 um so to make sure every move will get 2092 01:25:40,980 --> 01:25:45,480 used I set it to 10 if the move has 2093 01:25:43,800 --> 01:25:47,219 never been used before because that way 2094 01:25:45,480 --> 01:25:48,260 it'll get it's guaranteed to get used at 2095 01:25:47,219 --> 01:25:51,780 some point 2096 01:25:48,260 --> 01:25:54,780 so from there once I calculated every 2097 01:25:51,780 --> 01:25:58,199 possible move realize there are 360 2098 01:25:54,780 --> 01:26:00,300 000 permutations of one to nine to 2099 01:25:58,199 --> 01:26:02,219 reduce that number I removed the history 2100 01:26:00,300 --> 01:26:04,320 from each board by splitting the state 2101 01:26:02,219 --> 01:26:06,179 right by splitting the state string into 2102 01:26:04,320 --> 01:26:06,900 each player's moves then sorted them by 2103 01:26:06,179 --> 01:26:09,480 number 2104 01:26:06,900 --> 01:26:11,219 before sorting each state I checked for 2105 01:26:09,480 --> 01:26:13,260 redundancy by checking if the state was 2106 01:26:11,219 --> 01:26:15,239 one in the previous turn are these 2107 01:26:13,260 --> 01:26:17,280 strategies produce the number of rows in 2108 01:26:15,239 --> 01:26:20,820 the table from more than 360 2109 01:26:17,280 --> 01:26:20,820 000 to 5427.77. 2110 01:26:25,500 --> 01:26:29,340 in my program since I had multiple ways 2111 01:26:27,780 --> 01:26:31,199 of representing the current state of the 2112 01:26:29,340 --> 01:26:32,580 board I made functions to convert 2113 01:26:31,199 --> 01:26:35,340 between them 2114 01:26:32,580 --> 01:26:37,679 to convert to the database name where 2115 01:26:35,340 --> 01:26:39,360 each player's moves are Consolidated the 2116 01:26:37,679 --> 01:26:42,000 function splits the string into odd and 2117 01:26:39,360 --> 01:26:43,980 even index parts then joins them to 2118 01:26:42,000 --> 01:26:45,780 convert back the function splits the 2119 01:26:43,980 --> 01:26:47,880 string into two pieces but the first 2120 01:26:45,780 --> 01:26:49,679 part is either equal in length or one 2121 01:26:47,880 --> 01:26:51,600 larger than the second part then 2122 01:26:49,679 --> 01:26:53,219 interlaces the strings together so the 2123 01:26:51,600 --> 01:26:54,840 string represents a possible gain 2124 01:26:53,219 --> 01:26:58,500 between two players 2125 01:26:54,840 --> 01:27:00,179 but each player's moves are sorted 2126 01:26:58,500 --> 01:27:02,699 to make some of the calculations easier 2127 01:27:00,179 --> 01:27:04,980 I made a 2d vector class which converts 2128 01:27:02,699 --> 01:27:06,120 from the 1D index into a three by three 2129 01:27:04,980 --> 01:27:08,580 space 2130 01:27:06,120 --> 01:27:11,040 oh it was quite helpful 2131 01:27:08,580 --> 01:27:13,139 during the Project's development I got a 2132 01:27:11,040 --> 01:27:15,659 new computer I got this computer 2133 01:27:13,139 --> 01:27:17,040 so I uploaded the files to GitHub so I 2134 01:27:15,659 --> 01:27:20,060 could transfer them between computers 2135 01:27:17,040 --> 01:27:21,620 and so I can share it even with you guys 2136 01:27:20,060 --> 01:27:24,600 unfortunately 2137 01:27:21,620 --> 01:27:26,360 most files downloaded normally except 2138 01:27:24,600 --> 01:27:30,420 for my database which is a bit of a pain 2139 01:27:26,360 --> 01:27:31,620 so that rendered the program unusable to 2140 01:27:30,420 --> 01:27:34,500 get around this I made two more 2141 01:27:31,620 --> 01:27:36,960 functions that takes the data from a 2142 01:27:34,500 --> 01:27:39,420 good copy and then puts that into a text 2143 01:27:36,960 --> 01:27:41,580 file one entry per row and then another 2144 01:27:39,420 --> 01:27:43,800 that reverts it puts it back into a 2145 01:27:41,580 --> 01:27:45,659 different database 2146 01:27:43,800 --> 01:27:49,020 um so once I got the program working 2147 01:27:45,659 --> 01:27:50,820 like at the first part 2148 01:27:49,020 --> 01:27:53,159 um it's around 1am so to spot my 2149 01:27:50,820 --> 01:27:54,780 excitement thought I should go to bed 2150 01:27:53,159 --> 01:27:56,400 um so I set the training program to 2151 01:27:54,780 --> 01:27:58,620 trade 1 million games against itself 2152 01:27:56,400 --> 01:28:00,659 when I woke up I checked the program you 2153 01:27:58,620 --> 01:28:02,520 know the finished training when I played 2154 01:28:00,659 --> 01:28:04,080 against it it was able to stop me from 2155 01:28:02,520 --> 01:28:06,420 winning almost all the time which is 2156 01:28:04,080 --> 01:28:09,000 pretty good unfortunately I realized 2157 01:28:06,420 --> 01:28:11,159 every time the best move is chosen in 2158 01:28:09,000 --> 01:28:13,320 the training it degrades the quality so 2159 01:28:11,159 --> 01:28:15,600 sometimes bad moves will be chosen for a 2160 01:28:13,320 --> 01:28:18,179 while until they do great as well 2161 01:28:15,600 --> 01:28:19,860 so far the only remedy I have to fix the 2162 01:28:18,179 --> 01:28:21,659 bad moves is to train the model for 2163 01:28:19,860 --> 01:28:24,179 another few thousand moves to change 2164 01:28:21,659 --> 01:28:26,280 which move is decided to be the best 2165 01:28:24,179 --> 01:28:28,080 from the complexity and amount of time I 2166 01:28:26,280 --> 01:28:29,940 spent on this project I learned some 2167 01:28:28,080 --> 01:28:32,100 important project management tips such 2168 01:28:29,940 --> 01:28:34,260 as using comments clear naming schemes 2169 01:28:32,100 --> 01:28:36,659 and creating small helper functions to 2170 01:28:34,260 --> 01:28:40,100 complete common tasks so I'll do a quick 2171 01:28:36,659 --> 01:28:40,100 demonstration hopefully 2172 01:28:49,260 --> 01:28:52,340 what's this one up 2173 01:28:52,460 --> 01:28:55,639 this one 2174 01:28:55,920 --> 01:29:00,420 well 2175 01:28:57,300 --> 01:29:01,560 cool so in in this one the computer's 2176 01:29:00,420 --> 01:29:04,500 gone first 2177 01:29:01,560 --> 01:29:07,260 where they so this one and 2178 01:29:04,500 --> 01:29:08,460 yep so this one's um but the default and 2179 01:29:07,260 --> 01:29:11,040 this one there should be an o in there 2180 01:29:08,460 --> 01:29:12,600 somewhere but X we had number eight at 2181 01:29:11,040 --> 01:29:14,520 the top there 2182 01:29:12,600 --> 01:29:16,020 so if I type in a number that isn't 2183 01:29:14,520 --> 01:29:18,239 eight 2184 01:29:16,020 --> 01:29:20,400 say five to go on The Middle 2185 01:29:18,239 --> 01:29:22,260 up it puts my move in the middle and 2186 01:29:20,400 --> 01:29:25,460 then plays another move 2187 01:29:22,260 --> 01:29:25,460 so it's gone down the bottom 2188 01:29:26,520 --> 01:29:30,780 so now what's this one oh it's going to 2189 01:29:28,800 --> 01:29:33,000 top corner so it's really bad at the 2190 01:29:30,780 --> 01:29:35,100 moment because I've replaced it done 2191 01:29:33,000 --> 01:29:37,380 replace the data set for a fresh start 2192 01:29:35,100 --> 01:29:40,860 see what see what would happen 2193 01:29:37,380 --> 01:29:42,780 um so now maybe it might win if I go 2194 01:29:40,860 --> 01:29:44,219 three 2195 01:29:42,780 --> 01:29:46,199 no it's a dog 2196 01:29:44,219 --> 01:29:49,980 watch me 2197 01:29:46,199 --> 01:29:51,600 that one and it did it it won it's very 2198 01:29:49,980 --> 01:29:53,280 it's pretty good 2199 01:29:51,600 --> 01:29:56,120 uh thank you all for listening and hope 2200 01:29:53,280 --> 01:29:56,120 you enjoy the rest of your day 2201 01:29:56,970 --> 01:30:02,300 [Laughter] 2202 01:30:00,000 --> 01:30:06,080 yes 2203 01:30:02,300 --> 01:30:09,320 amazing all right we have 2204 01:30:06,080 --> 01:30:13,020 one last talk 2205 01:30:09,320 --> 01:30:15,900 we can do it we're nearly there uh 2206 01:30:13,020 --> 01:30:18,300 Daniel is coming up on Deck 2207 01:30:15,900 --> 01:30:19,500 um give him a shout out as I yes yeah 2208 01:30:18,300 --> 01:30:22,980 all right Daniel's gonna be talking 2209 01:30:19,500 --> 01:30:24,840 about piano music generation with python 2210 01:30:22,980 --> 01:30:28,199 and he has been programming for two 2211 01:30:24,840 --> 01:30:32,159 years his favorite emoji is the grinning 2212 01:30:28,199 --> 01:30:33,300 smiley face emoji solid Choice solid 2213 01:30:32,159 --> 01:30:35,880 Choice 2214 01:30:33,300 --> 01:30:38,520 um and you recently learned that neural 2215 01:30:35,880 --> 01:30:41,460 networks can contain complex numbers too 2216 01:30:38,520 --> 01:30:42,239 that sounds terrifying 2217 01:30:41,460 --> 01:30:45,300 um 2218 01:30:42,239 --> 01:30:46,020 I wonder what led to that Discovery 2219 01:30:45,300 --> 01:30:49,580 um 2220 01:30:46,020 --> 01:30:49,580 do we have slides on Deck 2221 01:30:53,460 --> 01:30:56,960 um 2222 01:30:54,420 --> 01:30:56,960 hang on 2223 01:30:57,000 --> 01:30:59,960 yeah try 2224 01:31:09,060 --> 01:31:14,120 while that's happening how cool have 2225 01:31:11,340 --> 01:31:14,120 that students been 2226 01:31:15,480 --> 01:31:19,920 phenomenal 2227 01:31:17,400 --> 01:31:22,260 all right 2228 01:31:19,920 --> 01:31:23,520 it's pretty good 2229 01:31:22,260 --> 01:31:25,199 um 2230 01:31:23,520 --> 01:31:27,480 I am a little bit tempted to play with 2231 01:31:25,199 --> 01:31:29,040 the dog 2232 01:31:27,480 --> 01:31:31,739 a little bit concerned it might explode 2233 01:31:29,040 --> 01:31:34,139 if I touch it though so I like I don't 2234 01:31:31,739 --> 01:31:36,960 want to be the cause of more equipment 2235 01:31:34,139 --> 01:31:38,080 damage all right excellent writer 2236 01:31:36,960 --> 01:31:41,600 Applause to Daniel 2237 01:31:38,080 --> 01:31:41,600 [Applause] 2238 01:31:42,239 --> 01:31:45,840 hi my name is Daniel and I'm a year tour 2239 01:31:44,280 --> 01:31:48,179 student at North City boys high school 2240 01:31:45,840 --> 01:31:50,400 over the past nine months I've been 2241 01:31:48,179 --> 01:31:52,080 working on my project called gambioso 2242 01:31:50,400 --> 01:31:54,420 which is an application that generates 2243 01:31:52,080 --> 01:31:55,980 piano music using a type of neural 2244 01:31:54,420 --> 01:31:58,199 network called the generative 2245 01:31:55,980 --> 01:32:00,860 adversarial Network it's a beginner 2246 01:31:58,199 --> 01:32:00,860 demonstration 2247 01:32:08,100 --> 01:32:13,920 so I can just a few parameters here 2248 01:32:11,600 --> 01:32:16,920 the scale 2249 01:32:13,920 --> 01:32:19,080 the dissonance and rate density 2250 01:32:16,920 --> 01:32:22,690 and my press generate it generates both 2251 01:32:19,080 --> 01:32:39,659 sheet music sheet music and audio 2252 01:32:22,690 --> 01:32:42,659 [Music] 2253 01:32:39,659 --> 01:32:42,659 foreign 2254 01:32:45,170 --> 01:32:58,239 [Music] 2255 01:33:15,199 --> 01:33:19,860 Network to generate the music also to 2256 01:33:18,540 --> 01:33:21,000 train the neural network you need a lot 2257 01:33:19,860 --> 01:33:23,400 of data 2258 01:33:21,000 --> 01:33:26,340 for this project I used the Maestro data 2259 01:33:23,400 --> 01:33:27,659 set which consists of 1 300 MIDI files 2260 01:33:26,340 --> 01:33:29,639 of piano music 2261 01:33:27,659 --> 01:33:31,560 midi file looks like this 2262 01:33:29,639 --> 01:33:33,239 and swimming in a bit you can see the 2263 01:33:31,560 --> 01:33:36,179 individual nodes which are represented 2264 01:33:33,239 --> 01:33:38,820 by the white lines the horizontal axis 2265 01:33:36,179 --> 01:33:42,920 represents the time and duration and the 2266 01:33:38,820 --> 01:33:42,920 vertical axis represents the pitch 2267 01:33:44,400 --> 01:33:49,020 by neural network can't process a midi 2268 01:33:46,920 --> 01:33:50,340 file directly the music has to be 2269 01:33:49,020 --> 01:33:53,040 included first 2270 01:33:50,340 --> 01:33:55,500 so I use the V6 engine library to 2271 01:33:53,040 --> 01:33:57,780 extract the data for each node and each 2272 01:33:55,500 --> 01:34:00,060 node can be represented by three numbers 2273 01:33:57,780 --> 01:34:02,159 the offset which is the number of Beats 2274 01:34:00,060 --> 01:34:03,179 that has the labs when the node is first 2275 01:34:02,159 --> 01:34:04,980 played 2276 01:34:03,179 --> 01:34:07,739 the duration which is the number of 2277 01:34:04,980 --> 01:34:10,620 Beats that the note is held down for and 2278 01:34:07,739 --> 01:34:14,239 the pH which is a number corresponding 2279 01:34:10,620 --> 01:34:14,239 to one of the 88 keys on the piano 2280 01:34:14,880 --> 01:34:20,239 so the entire piece can be represented 2281 01:34:17,040 --> 01:34:20,239 by a list of numbers 2282 01:34:22,980 --> 01:34:27,120 so then are using this data 2283 01:34:25,260 --> 01:34:29,060 I encoded each piece as a 2284 01:34:27,120 --> 01:34:31,800 two-dimensional array of series and ones 2285 01:34:29,060 --> 01:34:33,960 which is visualized by this image here 2286 01:34:31,800 --> 01:34:37,760 so the white pixels are ones and the 2287 01:34:33,960 --> 01:34:37,760 black pixels are zeros 2288 01:34:38,040 --> 01:34:44,600 so essentially I turn the midi file into 2289 01:34:40,880 --> 01:34:44,600 an image like this 2290 01:34:45,060 --> 01:34:49,320 and then the images are split into 2291 01:34:47,060 --> 01:34:51,239 smaller sections 2292 01:34:49,320 --> 01:34:53,219 and there are 200 000 of these images 2293 01:34:51,239 --> 01:34:55,910 that are used to train the generative 2294 01:34:53,219 --> 01:34:57,679 adversarial Network 2295 01:34:55,910 --> 01:35:00,239 [Music] 2296 01:34:57,679 --> 01:35:02,100 explain how a generative adversarial 2297 01:35:00,239 --> 01:35:05,040 network works 2298 01:35:02,100 --> 01:35:08,820 uh so it consists of two neural networks 2299 01:35:05,040 --> 01:35:11,060 a generator and a discriminator and each 2300 01:35:08,820 --> 01:35:14,219 training cycle involves a few steps 2301 01:35:11,060 --> 01:35:15,900 firstly real images taken from the piano 2302 01:35:14,219 --> 01:35:18,179 music data set 2303 01:35:15,900 --> 01:35:21,179 and fake images generated by the 2304 01:35:18,179 --> 01:35:22,800 generator are fed into the discriminator 2305 01:35:21,179 --> 01:35:26,100 neural network 2306 01:35:22,800 --> 01:35:28,199 then step two it decides whether the 2307 01:35:26,100 --> 01:35:31,320 image is real or fake by calculating a 2308 01:35:28,199 --> 01:35:33,420 value between 0 and 1. where one means 2309 01:35:31,320 --> 01:35:36,000 that it thinks it's real and three means 2310 01:35:33,420 --> 01:35:38,940 it thinks it's fake and this value is 2311 01:35:36,000 --> 01:35:40,980 used to determine how well the generator 2312 01:35:38,940 --> 01:35:42,500 and discriminator neural networks are 2313 01:35:40,980 --> 01:35:45,300 doing 2314 01:35:42,500 --> 01:35:47,880 then step free the discriminator is 2315 01:35:45,300 --> 01:35:51,480 updated so that it can 2316 01:35:47,880 --> 01:35:53,239 recognize fake images better and the 2317 01:35:51,480 --> 01:35:56,280 generator is updated so that it can 2318 01:35:53,239 --> 01:35:57,659 generate more realistic fake and fake 2319 01:35:56,280 --> 01:35:59,600 images 2320 01:35:57,659 --> 01:36:02,820 these steps are repeated many times 2321 01:35:59,600 --> 01:36:06,860 until the generator is able to generate 2322 01:36:02,820 --> 01:36:06,860 a realistic sounding piano music 2323 01:36:07,400 --> 01:36:12,239 after training the generator can 2324 01:36:09,719 --> 01:36:14,820 generate images like the ones shown here 2325 01:36:12,239 --> 01:36:16,980 and unfortunately the generated images 2326 01:36:14,820 --> 01:36:19,260 aren't as good as the original music 2327 01:36:16,980 --> 01:36:22,139 data set 2328 01:36:19,260 --> 01:36:24,420 so now images containing music of data 2329 01:36:22,139 --> 01:36:25,739 can be generated the next step is to 2330 01:36:24,420 --> 01:36:29,000 attend these into 2331 01:36:25,739 --> 01:36:29,000 sheet music and audio 2332 01:36:30,120 --> 01:36:35,820 so here's a short example of what the 2333 01:36:32,159 --> 01:36:38,520 neural network might generate 2334 01:36:35,820 --> 01:36:41,159 the horizontal axis represents the time 2335 01:36:38,520 --> 01:36:43,340 and the vertical axis represents the 2336 01:36:41,159 --> 01:36:43,340 pitch 2337 01:36:44,580 --> 01:36:49,199 so the image is split into multiple 2338 01:36:46,739 --> 01:36:51,900 sections and each section corresponds to 2339 01:36:49,199 --> 01:36:55,020 one part of music 2340 01:36:51,900 --> 01:36:55,020 [Music] 2341 01:36:55,219 --> 01:37:00,000 then taking out the first example first 2342 01:36:58,139 --> 01:37:02,159 section as the example 2343 01:37:00,000 --> 01:37:05,280 the noise can be encoded once again by 2344 01:37:02,159 --> 01:37:06,960 three numbers the offset which is the 2345 01:37:05,280 --> 01:37:08,580 number of Beats that we laughs when the 2346 01:37:06,960 --> 01:37:10,800 node is first played 2347 01:37:08,580 --> 01:37:12,120 the duration the number of Beats that's 2348 01:37:10,800 --> 01:37:14,520 held down for 2349 01:37:12,120 --> 01:37:17,340 and the pitch which is corresponds to 2350 01:37:14,520 --> 01:37:19,380 the key on the piano 2351 01:37:17,340 --> 01:37:21,780 so in this example you can see that some 2352 01:37:19,380 --> 01:37:24,179 of the notes overlap and this makes the 2353 01:37:21,780 --> 01:37:27,120 process of turning into sheet music and 2354 01:37:24,179 --> 01:37:29,639 audio audio more complicated because it 2355 01:37:27,120 --> 01:37:30,900 means that if I put the notes into one 2356 01:37:29,639 --> 01:37:33,420 sequence 2357 01:37:30,900 --> 01:37:35,219 then only one that can be played at a 2358 01:37:33,420 --> 01:37:38,940 time when there was supposed to be 2359 01:37:35,219 --> 01:37:41,540 multiple notes playing at the same time 2360 01:37:38,940 --> 01:37:44,480 so instead I separate the notes into 2361 01:37:41,540 --> 01:37:47,219 multiple non-overlapping sequences 2362 01:37:44,480 --> 01:37:48,540 represented by the different colors and 2363 01:37:47,219 --> 01:37:50,940 you can see that in each of the 2364 01:37:48,540 --> 01:37:53,580 different sequences the notes do not 2365 01:37:50,940 --> 01:37:55,820 overlap and each sequence is called a 2366 01:37:53,580 --> 01:37:55,820 voice 2367 01:37:57,300 --> 01:38:02,880 so now the notes can be turned into midi 2368 01:38:00,719 --> 01:38:04,860 files for the audio and PDF photoshoot 2369 01:38:02,880 --> 01:38:06,960 music 2370 01:38:04,860 --> 01:38:09,780 so for the media files the notes are 2371 01:38:06,960 --> 01:38:12,120 written as objects let me see 21 no 2372 01:38:09,780 --> 01:38:13,739 objects which contains its pitch and 2373 01:38:12,120 --> 01:38:16,080 duration 2374 01:38:13,739 --> 01:38:20,179 then the music21 library uses these 2375 01:38:16,080 --> 01:38:20,179 notes to generate the BD file 2376 01:38:22,260 --> 01:38:28,500 for the sheet music the notes are 2377 01:38:24,600 --> 01:38:30,600 represented by these strings 2378 01:38:28,500 --> 01:38:33,260 and the number on the end is the is the 2379 01:38:30,600 --> 01:38:33,260 notes duration 2380 01:38:34,380 --> 01:38:39,000 and then the notes are written into 2381 01:38:36,260 --> 01:38:41,340 their own containers and this ensures 2382 01:38:39,000 --> 01:38:43,440 that the notes can overlap and that are 2383 01:38:41,340 --> 01:38:45,900 played at the right time 2384 01:38:43,440 --> 01:38:48,300 and also rest notes of 2385 01:38:45,900 --> 01:38:50,540 uh used to fill in the gaps between no 2386 01:38:48,300 --> 01:38:50,540 it's 2387 01:38:52,080 --> 01:38:56,300 a certain type piece of music looks like 2388 01:38:54,060 --> 01:38:56,300 this 2389 01:38:57,960 --> 01:39:03,179 then to turn these notes into sheet 2390 01:39:00,239 --> 01:39:04,980 music I use the appjat library the agile 2391 01:39:03,179 --> 01:39:07,440 Library wraps the Lily Pawn music 2392 01:39:04,980 --> 01:39:09,780 notation software so it essentially 2393 01:39:07,440 --> 01:39:12,179 passes these musical notes written as 2394 01:39:09,780 --> 01:39:13,560 strings into lillypones which generates 2395 01:39:12,179 --> 01:39:16,880 the sheet music 2396 01:39:13,560 --> 01:39:16,880 so I'll demonstrate again 2397 01:39:18,420 --> 01:39:22,159 I'll change the parameters this time 2398 01:39:27,730 --> 01:39:57,780 [Music] 2399 01:39:54,780 --> 01:39:57,780 foreign 2400 01:40:01,880 --> 01:40:05,900 music in Python thank you 2401 01:40:10,380 --> 01:40:15,380 amazing 2402 01:40:12,600 --> 01:40:15,380 now 2403 01:40:16,860 --> 01:40:23,159 that was not a generated python music 2404 01:40:20,520 --> 01:40:24,840 now there's the fun bit that I spring on 2405 01:40:23,159 --> 01:40:27,840 the students that I didn't think we were 2406 01:40:24,840 --> 01:40:30,480 going to have time for 2407 01:40:27,840 --> 01:40:33,300 we've actually finished with enough time 2408 01:40:30,480 --> 01:40:34,739 to ask questions I think this is the 2409 01:40:33,300 --> 01:40:36,360 first time 2410 01:40:34,739 --> 01:40:38,760 we've managed this we also have 2411 01:40:36,360 --> 01:40:40,380 fantastic mugs they don't get presents 2412 01:40:38,760 --> 01:40:43,040 until they're finished no no no no no no 2413 01:40:40,380 --> 01:40:45,600 no no no no all right here we go 2414 01:40:43,040 --> 01:40:47,340 students can you all come up 2415 01:40:45,600 --> 01:40:48,060 oh 2416 01:40:47,340 --> 01:40:51,620 um 2417 01:40:48,060 --> 01:40:54,659 audience think of some questions 2418 01:40:51,620 --> 01:40:57,300 I'm going to make them all run through 2419 01:40:54,659 --> 01:40:59,880 their name again so just in case you've 2420 01:40:57,300 --> 01:41:02,580 forgotten who did the amazing thing 2421 01:40:59,880 --> 01:41:04,500 um think of your questions here we go oh 2422 01:41:02,580 --> 01:41:06,300 they're even in vague order amazing 2423 01:41:04,500 --> 01:41:07,980 unfortunately the remote students can't 2424 01:41:06,300 --> 01:41:09,960 join us but here we go yeah you can hold 2425 01:41:07,980 --> 01:41:13,440 up yeah for those of you who have much 2426 01:41:09,960 --> 01:41:17,460 better uh eyesight than I do I'm Bianca 2427 01:41:13,440 --> 01:41:20,520 I'm Sean I'm Rebecca I'm Isabella then 2428 01:41:17,460 --> 01:41:23,520 there were some folks online Sam I'm 2429 01:41:20,520 --> 01:41:27,500 Morgan g'day I'm Josh I'm Daniel I'm 2430 01:41:23,520 --> 01:41:27,500 Thomas okay questions 2431 01:41:29,040 --> 01:41:34,260 Thomas 2432 01:41:30,780 --> 01:41:36,560 is your pie charm for real in uh Comic 2433 01:41:34,260 --> 01:41:36,560 Sans 2434 01:41:37,860 --> 01:41:42,500 um I would say no it's in comic mono 2435 01:41:50,100 --> 01:41:55,080 okay everything up here 2436 01:41:52,860 --> 01:41:57,600 sorry to double up on Thomas do you have 2437 01:41:55,080 --> 01:41:59,100 a GitHub for your video thing because I 2438 01:41:57,600 --> 01:42:00,719 totally want that instead of my webcam 2439 01:41:59,100 --> 01:42:01,440 oh yeah 2440 01:42:00,719 --> 01:42:04,980 um 2441 01:42:01,440 --> 01:42:06,060 yeah car block from the screen oh if you 2442 01:42:04,980 --> 01:42:06,780 give me a second car pull up on the 2443 01:42:06,060 --> 01:42:08,520 screen 2444 01:42:06,780 --> 01:42:12,480 oh yeah I'll do that that'll be better 2445 01:42:08,520 --> 01:42:16,040 wait we we can you can put we'll put it 2446 01:42:12,480 --> 01:42:16,040 on the Discord perfect yeah 2447 01:42:17,600 --> 01:42:22,159 definitely no no definitely not yeah 2448 01:42:22,739 --> 01:42:26,400 it's about when are you going to publish 2449 01:42:24,960 --> 01:42:29,060 your website so that I can actually use 2450 01:42:26,400 --> 01:42:29,060 it please 2451 01:42:29,280 --> 01:42:32,360 who was this one too 2452 01:42:32,580 --> 01:42:38,760 um okay so it it is actually like 2453 01:42:36,060 --> 01:42:41,940 at the point where it works it didn't 2454 01:42:38,760 --> 01:42:44,040 work currently because of the Wi-Fi but 2455 01:42:41,940 --> 01:42:46,440 it does work so I would just need to put 2456 01:42:44,040 --> 01:42:49,380 it on an app store 2457 01:42:46,440 --> 01:42:53,159 please do yes 2458 01:42:49,380 --> 01:42:55,920 uh and when you do uh we will ping the 2459 01:42:53,159 --> 01:42:58,159 Discord and let you all know in the 2460 01:42:55,920 --> 01:42:58,159 future 2461 01:42:58,500 --> 01:43:01,860 um so this one's for Sam and Morgan and 2462 01:43:00,900 --> 01:43:02,600 Josh 2463 01:43:01,860 --> 01:43:07,560 um 2464 01:43:02,600 --> 01:43:09,600 have have you looked into it all the 2465 01:43:07,560 --> 01:43:13,260 um the movement and division related to 2466 01:43:09,600 --> 01:43:15,179 uneven terrain at all but just flat 2467 01:43:13,260 --> 01:43:17,639 surfaces is still like that's that's 2468 01:43:15,179 --> 01:43:21,500 very fair I just asked because that's a 2469 01:43:17,639 --> 01:43:21,500 good reason to have hips yes 2470 01:43:21,840 --> 01:43:27,000 yeah so I kind of touched briefly on it 2471 01:43:24,659 --> 01:43:29,340 um yeah so the vision system is kind of 2472 01:43:27,000 --> 01:43:30,719 important to be able to allow movement 2473 01:43:29,340 --> 01:43:32,940 like that 2474 01:43:30,719 --> 01:43:35,820 um yeah so you can get a proper view a 2475 01:43:32,940 --> 01:43:38,219 3D View and then be able to like do 2476 01:43:35,820 --> 01:43:40,679 individual leg movements in like to be 2477 01:43:38,219 --> 01:43:41,760 able to move it in the right way 2478 01:43:40,679 --> 01:43:44,219 um there's obviously a lot of thought 2479 01:43:41,760 --> 01:43:45,659 and constraints that go into that 2480 01:43:44,219 --> 01:43:47,280 um yeah 2481 01:43:45,659 --> 01:43:50,420 um yeah so it's a bit of a ways off but 2482 01:43:47,280 --> 01:43:50,420 we are planning to do that yeah 2483 01:43:52,080 --> 01:43:56,580 hello great presentations everyone 2484 01:43:55,020 --> 01:43:58,260 um I had questions for a lot of you and 2485 01:43:56,580 --> 01:43:59,520 I forgot them halfway through but I 2486 01:43:58,260 --> 01:44:00,719 remembered one of them and that was for 2487 01:43:59,520 --> 01:44:03,900 Sean 2488 01:44:00,719 --> 01:44:05,960 um that was great very theoretical 2489 01:44:03,900 --> 01:44:05,960 um 2490 01:44:07,619 --> 01:44:11,719 do you think you would have spent more 2491 01:44:09,780 --> 01:44:15,320 time writing the program than actually 2492 01:44:11,719 --> 01:44:15,320 submitting your uh 2493 01:44:15,780 --> 01:44:19,679 um 2494 01:44:17,639 --> 01:44:21,540 it's more of like the psychological 2495 01:44:19,679 --> 01:44:24,900 thing you know 2496 01:44:21,540 --> 01:44:26,219 because like on every period I'm filling 2497 01:44:24,900 --> 01:44:29,400 out this form it's like the same thing 2498 01:44:26,219 --> 01:44:31,679 over and over again and I'm just dying 2499 01:44:29,400 --> 01:44:33,780 you know but if you automate this it 2500 01:44:31,679 --> 01:44:35,460 feels like you're hacking the system and 2501 01:44:33,780 --> 01:44:38,520 yeah you just don't need to worry about 2502 01:44:35,460 --> 01:44:40,679 it anymore it's great 2503 01:44:38,520 --> 01:44:42,860 you learned valuable things along the 2504 01:44:40,679 --> 01:44:42,860 way 2505 01:44:43,199 --> 01:44:46,260 there's another question here I'm just 2506 01:44:44,699 --> 01:44:47,520 running 2507 01:44:46,260 --> 01:44:49,560 hi everyone 2508 01:44:47,520 --> 01:44:51,540 um it's like mostly for everyone but 2509 01:44:49,560 --> 01:44:53,340 like who's thinking of sticking with it 2510 01:44:51,540 --> 01:44:55,080 as their main sort of career path and 2511 01:44:53,340 --> 01:44:57,119 who's thinking now like anything but 2512 01:44:55,080 --> 01:45:00,600 right here is the main creator 2513 01:44:57,119 --> 01:45:02,520 we will not uh harass you after 2514 01:45:00,600 --> 01:45:05,100 we promise we'll only do it with love 2515 01:45:02,520 --> 01:45:07,380 it's okay yeah yeah I'm sticking 2516 01:45:05,100 --> 01:45:08,580 yeah 2517 01:45:07,380 --> 01:45:10,800 um I don't know I want to go into more 2518 01:45:08,580 --> 01:45:13,520 applications to engineering of software 2519 01:45:10,800 --> 01:45:13,520 itself yeah 2520 01:45:13,800 --> 01:45:19,320 yeah I want to do software engineering 2521 01:45:16,679 --> 01:45:21,360 yeah I'm going to do robotics 2522 01:45:19,320 --> 01:45:23,820 really computer science yeah 2523 01:45:21,360 --> 01:45:25,020 with a deep voice yeah I'm kind of 2524 01:45:23,820 --> 01:45:26,400 sticking I'm hopefully switching to 2525 01:45:25,020 --> 01:45:30,179 cyber security but still in the IT 2526 01:45:26,400 --> 01:45:32,600 industry sticky yes yes I want to do AI 2527 01:45:30,179 --> 01:45:32,600 research 2528 01:45:32,880 --> 01:45:35,840 I'm sticking 2529 01:45:38,820 --> 01:45:42,300 I really kind of hoped one of you is 2530 01:45:40,440 --> 01:45:45,659 gonna say actually I'm already pursuing 2531 01:45:42,300 --> 01:45:46,619 a career in ballet or something like 2532 01:45:45,659 --> 01:45:49,280 that 2533 01:45:46,619 --> 01:45:51,600 um we have we are very Pro 2534 01:45:49,280 --> 01:45:56,420 multi-disciplinary computer science and 2535 01:45:51,600 --> 01:45:56,420 stuff uh other questions 2536 01:45:56,820 --> 01:46:01,619 um I I was interested in um in Daniel's 2537 01:45:59,940 --> 01:46:05,580 work are you are you thinking of putting 2538 01:46:01,619 --> 01:46:08,100 your your neural network music up as a 2539 01:46:05,580 --> 01:46:10,580 new AI type of thing for the public 2540 01:46:08,100 --> 01:46:10,580 Maybe 2541 01:46:13,280 --> 01:46:18,060 so right now I don't feel good enough 2542 01:46:15,360 --> 01:46:19,440 but once I get it improved then I'll put 2543 01:46:18,060 --> 01:46:22,199 it up 2544 01:46:19,440 --> 01:46:25,440 there's some money to be made there 2545 01:46:22,199 --> 01:46:28,320 I I think maybe that should team up with 2546 01:46:25,440 --> 01:46:30,540 the recommendations and you can get a 2547 01:46:28,320 --> 01:46:33,540 recommended 2548 01:46:30,540 --> 01:46:33,540 collaboration 2549 01:46:34,340 --> 01:46:40,560 that loud um so Daniel listen to you too 2550 01:46:37,739 --> 01:46:42,659 um on that idea of 2551 01:46:40,560 --> 01:46:44,159 um continuing your project 2552 01:46:42,659 --> 01:46:45,600 um do you currently have a functionality 2553 01:46:44,159 --> 01:46:48,900 or could implement the functionality to 2554 01:46:45,600 --> 01:46:51,780 have your music be less randomized and 2555 01:46:48,900 --> 01:46:53,400 more thematically themed like 2556 01:46:51,780 --> 01:46:54,659 around particular things that you're 2557 01:46:53,400 --> 01:46:57,440 trying to achieve particular composers 2558 01:46:54,659 --> 01:46:57,440 all that kind of stuff 2559 01:46:58,679 --> 01:47:03,659 yeah 2560 01:47:01,380 --> 01:47:05,460 I'll say this mostly depends on the 2561 01:47:03,659 --> 01:47:08,100 neural network which right now I'm not 2562 01:47:05,460 --> 01:47:10,380 experienced enough with AI to implement 2563 01:47:08,100 --> 01:47:11,580 like to make it better right now so I 2564 01:47:10,380 --> 01:47:12,960 have to learn more about it first and 2565 01:47:11,580 --> 01:47:16,280 then improve it 2566 01:47:12,960 --> 01:47:16,280 it will take a long time 2567 01:47:16,739 --> 01:47:22,580 you'll have years it's all right okay 2568 01:47:19,739 --> 01:47:22,580 over here 2569 01:47:23,000 --> 01:47:26,880 projects were awesome um I'm wondering 2570 01:47:25,260 --> 01:47:29,580 if we heard you all sticking around to 2571 01:47:26,880 --> 01:47:31,260 do something you know techy related is 2572 01:47:29,580 --> 01:47:32,820 anyone who who's looking to maybe become 2573 01:47:31,260 --> 01:47:35,219 some sort of like entrepreneur and like 2574 01:47:32,820 --> 01:47:36,900 make their own thing and like create a 2575 01:47:35,219 --> 01:47:39,659 startup or something 2576 01:47:36,900 --> 01:47:43,800 keep in mind that you're you're in front 2577 01:47:39,659 --> 01:47:46,020 of a room of potential VCS oh just just 2578 01:47:43,800 --> 01:47:48,300 saying does anyone want to uh yeah smile 2579 01:47:46,020 --> 01:47:50,820 or nod yeah show of hands who want them 2580 01:47:48,300 --> 01:47:52,560 yeah maybe looks like maybe 2581 01:47:50,820 --> 01:47:55,560 Maybe 2582 01:47:52,560 --> 01:47:58,200 oh is this gonna be the next IBO can I 2583 01:47:55,560 --> 01:47:59,820 can I put down my first order now 2584 01:47:58,200 --> 01:48:01,320 [Music] 2585 01:47:59,820 --> 01:48:06,139 yeah maybe you want to start working 2586 01:48:01,320 --> 01:48:06,139 just sell it as a developer kit yeah 2587 01:48:10,920 --> 01:48:16,440 um winding lights 2588 01:48:14,340 --> 01:48:18,179 um I can either neither see nor 2589 01:48:16,440 --> 01:48:20,580 questions nor remember the ones the many 2590 01:48:18,179 --> 01:48:22,800 ones that I had oh yes okay I don't know 2591 01:48:20,580 --> 01:48:26,040 if any of you were in the room earlier 2592 01:48:22,800 --> 01:48:29,219 when we heard about git some of you have 2593 01:48:26,040 --> 01:48:32,400 linked to your GitHub projects others 2594 01:48:29,219 --> 01:48:33,719 haven't yet maybe 2595 01:48:32,400 --> 01:48:35,040 um but one of the things we heard about 2596 01:48:33,719 --> 01:48:37,159 was 2597 01:48:35,040 --> 01:48:40,380 get and maybe 2598 01:48:37,159 --> 01:48:41,699 con contributors could be in the 2599 01:48:40,380 --> 01:48:43,560 audience 2600 01:48:41,699 --> 01:48:45,840 I guess this is more of a question for 2601 01:48:43,560 --> 01:48:48,480 the audience 2602 01:48:45,840 --> 01:48:50,639 um folks would any of you like to 2603 01:48:48,480 --> 01:48:52,739 contribute to some cool students open 2604 01:48:50,639 --> 01:48:55,440 source projects Maybe 2605 01:48:52,739 --> 01:48:56,780 yeah can I get a woo from the people 2606 01:48:55,440 --> 01:48:58,380 with their hands in the air 2607 01:48:56,780 --> 01:49:01,380 [Applause] 2608 01:48:58,380 --> 01:49:02,820 okay well maybe that is a some homework 2609 01:49:01,380 --> 01:49:05,699 for all of you because you all clearly 2610 01:49:02,820 --> 01:49:07,080 need more homework to do 2611 01:49:05,699 --> 01:49:08,639 um 2612 01:49:07,080 --> 01:49:10,920 if you're not on the Discord come and 2613 01:49:08,639 --> 01:49:12,360 talk to me later post your links to your 2614 01:49:10,920 --> 01:49:14,100 githubs up there I'll make sure that 2615 01:49:12,360 --> 01:49:16,679 that all happens if you all want to 2616 01:49:14,100 --> 01:49:19,920 check it out and maybe 2617 01:49:16,679 --> 01:49:22,860 um yeah make more magic happen just in 2618 01:49:19,920 --> 01:49:26,460 case this was insufficient Magic 2619 01:49:22,860 --> 01:49:28,920 can I get one more absolutely massive 2620 01:49:26,460 --> 01:49:32,119 Round of Applause for this entire 2621 01:49:28,920 --> 01:49:32,119 phenomenal team