1 00:00:04,960 --> 00:00:20,000 [Music] 2 00:00:20,439 --> 00:00:25,560 I do love that welcome back to devoops 3 00:00:22,400 --> 00:00:27,400 next up we have sanin who is a former 4 00:00:25,560 --> 00:00:30,279 Computing teacher and an avid fan of 5 00:00:27,400 --> 00:00:32,320 python since 2014 he has a back in 6 00:00:30,279 --> 00:00:34,079 developing programming courses and small 7 00:00:32,320 --> 00:00:36,079 educational applications for use in 8 00:00:34,079 --> 00:00:38,280 schools as one of the creators of the 9 00:00:36,079 --> 00:00:39,879 Victorian coding challenge sun has been 10 00:00:38,280 --> 00:00:42,160 building and maintaining a coding 11 00:00:39,879 --> 00:00:44,200 competition platform that that has 12 00:00:42,160 --> 00:00:47,239 hosted quiz style events Capture the 13 00:00:44,200 --> 00:00:50,520 Flag challenges and in 2014 agent-based 14 00:00:47,239 --> 00:00:53,000 challenges where students sorry 2024 15 00:00:50,520 --> 00:00:55,120 reading agent based challenges where 16 00:00:53,000 --> 00:00:57,239 students program agents to compete in 17 00:00:55,120 --> 00:01:00,520 challenges based on Game Theory please 18 00:00:57,239 --> 00:01:00,520 welcome sanun 19 00:01:00,559 --> 00:01:05,239 hello 20 00:01:02,079 --> 00:01:07,159 um is this mic working yes I think so 21 00:01:05,239 --> 00:01:09,159 works really well so let me tell you a 22 00:01:07,159 --> 00:01:11,680 little bit about the Victorian coding 23 00:01:09,159 --> 00:01:13,840 challenge so this is a competition for 24 00:01:11,680 --> 00:01:16,600 essentially students that find Computing 25 00:01:13,840 --> 00:01:18,200 in school a little bit too easy um it is 26 00:01:16,600 --> 00:01:20,159 funded by the Victorian Department of 27 00:01:18,200 --> 00:01:22,320 Education through the mathematical 28 00:01:20,159 --> 00:01:24,920 Association of Victoria and over the 29 00:01:22,320 --> 00:01:27,280 last five years we've had over 7,000 30 00:01:24,920 --> 00:01:29,159 students participate it takes place over 31 00:01:27,280 --> 00:01:31,040 two stages stage one is an open-ended 32 00:01:29,159 --> 00:01:32,159 problem set stage two is the competition 33 00:01:31,040 --> 00:01:34,520 which is the interesting part which I'll 34 00:01:32,159 --> 00:01:37,399 be talking about so just a quick show of 35 00:01:34,520 --> 00:01:40,079 hands um put your hand up if you found 36 00:01:37,399 --> 00:01:43,119 Computing in school some combination of 37 00:01:40,079 --> 00:01:45,880 too easy or 38 00:01:43,119 --> 00:01:47,479 boring all right you guys would have 39 00:01:45,880 --> 00:01:50,320 been the audience you would have been 40 00:01:47,479 --> 00:01:53,200 the students participating um so here's 41 00:01:50,320 --> 00:01:54,640 the team that makes it all happen danela 42 00:01:53,200 --> 00:01:56,759 who works for the mathematics 43 00:01:54,640 --> 00:01:58,479 Association of Victoria essentially 44 00:01:56,759 --> 00:02:00,320 managed to get the funding deals with 45 00:01:58,479 --> 00:02:02,840 the Department of Education deals with 46 00:02:00,320 --> 00:02:04,600 the schools a million emails Nathan and 47 00:02:02,840 --> 00:02:06,320 I essentially make the problems in the 48 00:02:04,600 --> 00:02:08,000 platform over time I've become more of 49 00:02:06,320 --> 00:02:11,120 the platform person Nathan's become more 50 00:02:08,000 --> 00:02:13,520 of a problems person and uh along with 51 00:02:11,120 --> 00:02:15,280 us there's been probably about another 52 00:02:13,520 --> 00:02:18,200 seven eight different volunteers some of 53 00:02:15,280 --> 00:02:20,319 whom I'm going to mention in the talk so 54 00:02:18,200 --> 00:02:21,800 a little bit about the background of the 55 00:02:20,319 --> 00:02:23,200 the challenge so the first part is like 56 00:02:21,800 --> 00:02:25,360 an open-ended problem set we're 57 00:02:23,200 --> 00:02:27,000 currently up to like 30 plus problems 58 00:02:25,360 --> 00:02:29,400 and the goal here is just to do 59 00:02:27,000 --> 00:02:30,879 something that's a little bit more fun 60 00:02:29,400 --> 00:02:32,879 and more challenging than school is 61 00:02:30,879 --> 00:02:35,640 normally so two examples of problems one 62 00:02:32,879 --> 00:02:38,680 is um it was a it was called I always 63 00:02:35,640 --> 00:02:41,080 win the game of nim that is a Cod game 64 00:02:38,680 --> 00:02:42,640 if you do a binary representation of the 65 00:02:41,080 --> 00:02:45,480 game state for that game you could 66 00:02:42,640 --> 00:02:47,200 basically win 100% at a time so this was 67 00:02:45,480 --> 00:02:49,319 a fun thing that the students built 68 00:02:47,200 --> 00:02:51,159 basically like a card Hustler that they 69 00:02:49,319 --> 00:02:52,720 showed to all their friends a computer 70 00:02:51,159 --> 00:02:55,480 that would win 100% of the time in a 71 00:02:52,720 --> 00:02:56,640 seemingly fair game another challenge 72 00:02:55,480 --> 00:02:59,840 again this is something that kids would 73 00:02:56,640 --> 00:03:01,800 never come across was like this time cap 74 00:02:59,840 --> 00:03:03,799 capsule problem where they get given a 75 00:03:01,800 --> 00:03:05,720 time capsule that'll like reveal on a 76 00:03:03,799 --> 00:03:07,799 certain date and they can either hack it 77 00:03:05,720 --> 00:03:10,159 in various ways you could break the 78 00:03:07,799 --> 00:03:11,959 cryptography you could study the API 79 00:03:10,159 --> 00:03:13,200 code and find a way to like encode the 80 00:03:11,959 --> 00:03:14,720 data in a tricky way where you 81 00:03:13,200 --> 00:03:16,840 manipulate the time stamp so that it 82 00:03:14,720 --> 00:03:19,319 opens early so these are the type of 83 00:03:16,840 --> 00:03:20,840 problems that we put in front of kids um 84 00:03:19,319 --> 00:03:23,480 however when the competition started it 85 00:03:20,840 --> 00:03:25,319 was covid time and this was all pitched 86 00:03:23,480 --> 00:03:28,560 as a live event and we couldn't do a 87 00:03:25,319 --> 00:03:31,560 live event so basically we had to do um 88 00:03:28,560 --> 00:03:34,439 like a remote thing so in 2020 we did a 89 00:03:31,560 --> 00:03:37,120 combination of recommendation engines 90 00:03:34,439 --> 00:03:40,920 and um we gave students the Wikipedia 91 00:03:37,120 --> 00:03:43,439 API and from the get-go we when we got 92 00:03:40,920 --> 00:03:45,439 the the the actual submissions by 93 00:03:43,439 --> 00:03:48,080 students there were about 40 for each 94 00:03:45,439 --> 00:03:50,799 year band we basically Blown Away by the 95 00:03:48,080 --> 00:03:53,360 quality students we had a team build 96 00:03:50,799 --> 00:03:55,159 their own machine learning model that 97 00:03:53,360 --> 00:03:56,959 was making quizzes I mean we didn't even 98 00:03:55,159 --> 00:03:59,280 know how to mark this stuff was it on 99 00:03:56,959 --> 00:04:00,840 the basis of like the most interesting 100 00:03:59,280 --> 00:04:04,400 and the most creative or the most 101 00:04:00,840 --> 00:04:05,959 advanced code so yeah that was uh it was 102 00:04:04,400 --> 00:04:08,480 a really really interesting time going 103 00:04:05,959 --> 00:04:11,680 through all those 104 00:04:08,480 --> 00:04:14,280 2021 2021 was much the same except worse 105 00:04:11,680 --> 00:04:16,440 from our perspective we had a theme of 106 00:04:14,280 --> 00:04:19,320 games the 78s made text-based games 107 00:04:16,440 --> 00:04:23,120 which went really well n910 this is my 108 00:04:19,320 --> 00:04:26,720 total mess up um we chose to use a 3D 109 00:04:23,120 --> 00:04:28,560 game engine in Python that had too high 110 00:04:26,720 --> 00:04:31,479 system requirements given that I was the 111 00:04:28,560 --> 00:04:33,199 one testing it on my computer laptop I 112 00:04:31,479 --> 00:04:34,960 yeah somehow even the school gave me a 113 00:04:33,199 --> 00:04:36,280 very nice laptop and my students a very 114 00:04:34,960 --> 00:04:38,120 nice laptop it never really really 115 00:04:36,280 --> 00:04:39,880 occurred to me that the requirements 116 00:04:38,120 --> 00:04:42,520 were too high we ended up only having 117 00:04:39,880 --> 00:04:44,400 five submissions for 910 so this is the 118 00:04:42,520 --> 00:04:46,680 third year of the project so we had a 119 00:04:44,400 --> 00:04:48,759 three-year Grant and the department 120 00:04:46,680 --> 00:04:50,960 essentially is telling us 121 00:04:48,759 --> 00:04:53,039 hey this year you get to do the live 122 00:04:50,960 --> 00:04:54,479 event we're going to pull the students 123 00:04:53,039 --> 00:04:56,039 and the teachers make sure you give us 124 00:04:54,479 --> 00:04:57,120 feedback and based on that feedback 125 00:04:56,039 --> 00:05:00,280 we're going to decide whether we're 126 00:04:57,120 --> 00:05:02,720 going to renew your um your Grant 127 00:05:00,280 --> 00:05:05,479 so really we were in need of a spectacle 128 00:05:02,720 --> 00:05:07,560 here and here I have another question 129 00:05:05,479 --> 00:05:09,919 for the audience uh show hands if you 130 00:05:07,560 --> 00:05:12,160 know what a CTF 131 00:05:09,919 --> 00:05:13,840 is okay leave your hand up maybe if 132 00:05:12,160 --> 00:05:16,120 you've participated in 133 00:05:13,840 --> 00:05:19,240 one okay maybe I'll do a little bit of 134 00:05:16,120 --> 00:05:20,919 explaining so in this particular class 135 00:05:19,240 --> 00:05:23,080 um so I was a teacher that year I was 136 00:05:20,919 --> 00:05:26,120 teaching at the King David school we 137 00:05:23,080 --> 00:05:29,080 were um learning networking and that 138 00:05:26,120 --> 00:05:30,440 year the theme of the class was uh CTF 139 00:05:29,080 --> 00:05:31,680 so we we 140 00:05:30,440 --> 00:05:32,720 essentially the challenges from 141 00:05:31,680 --> 00:05:36,000 something called 142 00:05:32,720 --> 00:05:38,080 picoctf and I basically took part in 143 00:05:36,000 --> 00:05:40,800 creating problems and little puzzles for 144 00:05:38,080 --> 00:05:43,440 students that they would solve by sshing 145 00:05:40,800 --> 00:05:44,600 into my computer on our local network if 146 00:05:43,440 --> 00:05:46,479 you see there's like a switch in the 147 00:05:44,600 --> 00:05:48,520 middle everybody would come in with a 148 00:05:46,479 --> 00:05:54,280 school issued old teacher computer that 149 00:05:48,520 --> 00:05:56,479 had Ubuntu on it or um a Raspberry Pi 150 00:05:54,280 --> 00:05:58,560 and the students themselves came up with 151 00:05:56,479 --> 00:06:00,400 this scoreboard this live interactive 152 00:05:58,560 --> 00:06:01,960 scoreboard where where they took those 153 00:06:00,400 --> 00:06:04,800 problems and they scored themselves and 154 00:06:01,960 --> 00:06:06,560 they had like live rankings and this was 155 00:06:04,800 --> 00:06:09,000 done by by the way like halfway through 156 00:06:06,560 --> 00:06:11,680 the semester so we spent like I don't 157 00:06:09,000 --> 00:06:13,639 know 10 15 lessons every year students 158 00:06:11,680 --> 00:06:15,280 every class students rushing in and then 159 00:06:13,639 --> 00:06:18,319 like doing problems and having these 160 00:06:15,280 --> 00:06:19,759 rankings on a scoreboard so for me I've 161 00:06:18,319 --> 00:06:21,400 never seen more enthusiasm in a 162 00:06:19,759 --> 00:06:23,199 classroom in my entire life and this was 163 00:06:21,400 --> 00:06:25,400 the idea that I wanted to port to the 164 00:06:23,199 --> 00:06:28,319 Victorian coding challenge the first 165 00:06:25,400 --> 00:06:31,000 thing that I did was um rewrote the 166 00:06:28,319 --> 00:06:32,080 scoreboard program um the initial thing 167 00:06:31,000 --> 00:06:33,840 that you know when you have very 168 00:06:32,080 --> 00:06:35,960 enthusiastic year NS that have a lot of 169 00:06:33,840 --> 00:06:38,120 talent but not a lot of experience it 170 00:06:35,960 --> 00:06:40,479 was like one function with 20 parameters 171 00:06:38,120 --> 00:06:42,680 and God knows how many globals I turned 172 00:06:40,479 --> 00:06:44,599 it into something really simple one 173 00:06:42,680 --> 00:06:46,560 worrying thing because I wanted to keep 174 00:06:44,599 --> 00:06:48,680 it keep the coding basic so all my 175 00:06:46,560 --> 00:06:50,720 students could understand it was that 176 00:06:48,680 --> 00:06:52,199 Json file like there was no database 177 00:06:50,720 --> 00:06:54,000 there was just a whole game state was 178 00:06:52,199 --> 00:06:56,160 one Json file and I was like thinking 179 00:06:54,000 --> 00:07:00,560 that's a ticking time bomb that never 180 00:06:56,160 --> 00:07:03,319 somehow went off um so yeah we used this 181 00:07:00,560 --> 00:07:05,440 for at least like at least 10 lessons 182 00:07:03,319 --> 00:07:07,199 and it worked perfectly so if it ain't 183 00:07:05,440 --> 00:07:08,479 broke don't fix it this is more or less 184 00:07:07,199 --> 00:07:10,759 the program I was going to take to the 185 00:07:08,479 --> 00:07:12,240 Victorian coding challenge in terms of 186 00:07:10,759 --> 00:07:15,680 the challenges really there were only 187 00:07:12,240 --> 00:07:17,319 three types um one was um they would 188 00:07:15,680 --> 00:07:20,440 download a file and they need to solve 189 00:07:17,319 --> 00:07:22,560 something maybe it was like a a um like 190 00:07:20,440 --> 00:07:25,400 a password protected Word file that they 191 00:07:22,560 --> 00:07:27,360 needed to find a tool to crack maybe it 192 00:07:25,400 --> 00:07:29,039 was something coded or encrypted data it 193 00:07:27,360 --> 00:07:30,919 could have been like a zip file with 194 00:07:29,039 --> 00:07:33,639 like a f Bolder jungle where something 195 00:07:30,919 --> 00:07:35,199 was hidden that they had to find uh 196 00:07:33,639 --> 00:07:37,919 another type 197 00:07:35,199 --> 00:07:40,360 was that they would SSH into a python 198 00:07:37,919 --> 00:07:42,479 script so you create a user on Linux and 199 00:07:40,360 --> 00:07:44,560 then like you create a rule in sshd 200 00:07:42,479 --> 00:07:45,800 config and then they SSH into like a 201 00:07:44,560 --> 00:07:48,080 puzzle you created they don't see the 202 00:07:45,800 --> 00:07:50,560 source code they're just like inside 203 00:07:48,080 --> 00:07:52,960 your your sort of text Loop and the last 204 00:07:50,560 --> 00:07:54,639 one was a little bit more elaborate um 205 00:07:52,960 --> 00:07:56,080 have you show hands if you know what a 206 00:07:54,639 --> 00:08:00,800 truth jail 207 00:07:56,080 --> 00:08:02,280 is so like you create essentially like a 208 00:08:00,800 --> 00:08:04,800 not really a virtual environment but 209 00:08:02,280 --> 00:08:07,479 like a folder with all of the necessary 210 00:08:04,800 --> 00:08:10,240 tools and libraries to have a very 211 00:08:07,479 --> 00:08:12,240 restricted like Linux system and in 212 00:08:10,240 --> 00:08:14,199 there they perform a task so those were 213 00:08:12,240 --> 00:08:16,520 the three types of uh challenges in 214 00:08:14,199 --> 00:08:18,120 terms of how this was deployed now this 215 00:08:16,520 --> 00:08:20,680 is terrible I mean people talk about 216 00:08:18,120 --> 00:08:23,720 like being embarrassed by past code like 217 00:08:20,680 --> 00:08:26,280 wait for this so three python files that 218 00:08:23,720 --> 00:08:28,479 do the admin easy so each challenge was 219 00:08:26,280 --> 00:08:30,479 actually the users didn't have accounts 220 00:08:28,479 --> 00:08:33,399 each challenge was a user 221 00:08:30,479 --> 00:08:36,120 so they would SSH into that user you 222 00:08:33,399 --> 00:08:38,039 could have multiple SSH sessions for the 223 00:08:36,120 --> 00:08:40,240 same user from different IPS Linux is 224 00:08:38,039 --> 00:08:42,279 flexible like that they would go in and 225 00:08:40,240 --> 00:08:43,599 try to get a flag then there would be 226 00:08:42,279 --> 00:08:45,640 another user called a scoreboard they 227 00:08:43,599 --> 00:08:46,959 would SSH into that to submit their flag 228 00:08:45,640 --> 00:08:49,640 along with their password and they would 229 00:08:46,959 --> 00:08:52,880 get their scores updated so that's how 230 00:08:49,640 --> 00:08:55,839 it worked and with nine students in my 231 00:08:52,880 --> 00:08:57,360 class it never broke now I did take a 232 00:08:55,839 --> 00:08:59,680 look at other projects that did similar 233 00:08:57,360 --> 00:09:01,000 stuff and they were about at least 234 00:08:59,680 --> 00:09:03,000 magnitude more complicated and I was 235 00:09:01,000 --> 00:09:04,880 wondering like this is so easy I don't 236 00:09:03,000 --> 00:09:07,560 know what why why do people make it 237 00:09:04,880 --> 00:09:09,600 complicated so um in terms of the user 238 00:09:07,560 --> 00:09:11,120 interface was very basic Google site you 239 00:09:09,600 --> 00:09:12,959 can host files there you get the 240 00:09:11,120 --> 00:09:15,480 instructions to the 241 00:09:12,959 --> 00:09:18,279 SSH and then like the challenge went for 242 00:09:15,480 --> 00:09:21,000 three hours every hour we released new 243 00:09:18,279 --> 00:09:23,519 problems and new challenges so this is 244 00:09:21,000 --> 00:09:25,120 the competition day um and let's see how 245 00:09:23,519 --> 00:09:26,839 we're 246 00:09:25,120 --> 00:09:28,680 going so in the morning there's 247 00:09:26,839 --> 00:09:29,920 something called relays like unplugged 248 00:09:28,680 --> 00:09:31,279 problems 249 00:09:29,920 --> 00:09:33,360 the kids smashed that everybody had a 250 00:09:31,279 --> 00:09:35,399 good time at 11:00 I'm standing in front 251 00:09:33,360 --> 00:09:37,640 of a crowd about three times the size 252 00:09:35,399 --> 00:09:39,560 going we're going to do a a systems 253 00:09:37,640 --> 00:09:41,200 check everybody has a flag it's there 254 00:09:39,560 --> 00:09:43,160 it's on paper you're just going to type 255 00:09:41,200 --> 00:09:46,120 in this into your terminal submit and 256 00:09:43,160 --> 00:09:48,640 we're all going to be good turns 257 00:09:46,120 --> 00:09:50,640 out works for about two-thirds of the 258 00:09:48,640 --> 00:09:52,440 teams and then all of a sudden a bunch 259 00:09:50,640 --> 00:09:55,079 of people can't submit it and I have no 260 00:09:52,440 --> 00:09:58,600 idea why luckily this is deployed in in 261 00:09:55,079 --> 00:10:01,800 a in a Leno server that takes less than 262 00:09:58,600 --> 00:10:04,920 90 seconds to restart and so restarting 263 00:10:01,800 --> 00:10:06,640 it fixes the problem and that was my day 264 00:10:04,920 --> 00:10:08,240 like this is a student there looking at 265 00:10:06,640 --> 00:10:10,600 me I'm probably restarting the Leno 266 00:10:08,240 --> 00:10:13,920 server right there and everything 267 00:10:10,600 --> 00:10:16,680 somehow just rolls over the line um 268 00:10:13,920 --> 00:10:19,040 until about 10 minutes to go where I 269 00:10:16,680 --> 00:10:22,560 mentioned sheru jails they are 270 00:10:19,040 --> 00:10:24,560 escapable um the score of the top team 271 00:10:22,560 --> 00:10:26,440 which was winning by a country mile I 272 00:10:24,560 --> 00:10:28,360 mean like they probably risked this 273 00:10:26,440 --> 00:10:31,040 qualification but I was really impressed 274 00:10:28,360 --> 00:10:35,920 just went up by 3 Zer and then it went 275 00:10:31,040 --> 00:10:38,240 down back to normal so yeah I I really 276 00:10:35,920 --> 00:10:40,399 when this all ended I was almost shaking 277 00:10:38,240 --> 00:10:44,040 I really didn't even know how we went 278 00:10:40,399 --> 00:10:46,680 but was the funding lost no we were good 279 00:10:44,040 --> 00:10:48,839 so despite all these technical 280 00:10:46,680 --> 00:10:50,399 issues every team submitted everything 281 00:10:48,839 --> 00:10:52,959 they found in terms of the flags the 282 00:10:50,399 --> 00:10:54,680 feedback from students was amazing and 283 00:10:52,959 --> 00:10:57,560 the teachers did mention some technical 284 00:10:54,680 --> 00:10:59,800 glitches but they were happy to and like 285 00:10:57,560 --> 00:11:03,480 not only did we get our funding renewed 286 00:10:59,800 --> 00:11:06,839 like we actually got way more funding so 287 00:11:03,480 --> 00:11:09,519 this whole thing ended up being thank 288 00:11:06,839 --> 00:11:13,440 you ended up being a big 289 00:11:09,519 --> 00:11:15,360 success um the tech postmortem now this 290 00:11:13,440 --> 00:11:16,600 is the if it ain't broke don't fix it n 291 00:11:15,360 --> 00:11:20,160 student 292 00:11:16,600 --> 00:11:21,560 thing if you open up the sshd config of 293 00:11:20,160 --> 00:11:23,399 any Linux system you're gonna you're 294 00:11:21,560 --> 00:11:25,560 going to find commented out the default 295 00:11:23,399 --> 00:11:28,480 settings and I only would have needed to 296 00:11:25,560 --> 00:11:30,240 change that Max sessions from 10 to 297 00:11:28,480 --> 00:11:31,920 something like 30 298 00:11:30,240 --> 00:11:33,399 that wouldn't have fully fixed it 299 00:11:31,920 --> 00:11:35,279 because there was another problem where 300 00:11:33,399 --> 00:11:38,320 students used like these terminals that 301 00:11:35,279 --> 00:11:41,720 were in the browser and if you close the 302 00:11:38,320 --> 00:11:44,839 browser you don't close the session 303 00:11:41,720 --> 00:11:46,440 so that was a major issue another thing 304 00:11:44,839 --> 00:11:48,279 that could have been a potential issue 305 00:11:46,440 --> 00:11:50,760 was there was a challenge that was 306 00:11:48,279 --> 00:11:53,360 around cracking a hash but they had to 307 00:11:50,760 --> 00:11:55,639 enter a password into an SSH and and and 308 00:11:53,360 --> 00:11:58,680 a team try to brute force that so I 309 00:11:55,639 --> 00:12:00,000 don't know if this Mac startups thing um 310 00:11:58,680 --> 00:12:02,240 that sort of limits the amount of 311 00:12:00,000 --> 00:12:06,200 waiting connections to 10 and then drops 312 00:12:02,240 --> 00:12:07,760 30% after 10 kicked in or not but yeah 313 00:12:06,200 --> 00:12:09,279 the part that keeps blowing my mind 314 00:12:07,760 --> 00:12:11,880 again and again and again is that not 315 00:12:09,279 --> 00:12:14,560 having a database wasn't the issue that 316 00:12:11,880 --> 00:12:16,040 single Json file that was edited just 317 00:12:14,560 --> 00:12:18,199 somehow 318 00:12:16,040 --> 00:12:19,680 worked uh yeah the mega score kid I had 319 00:12:18,199 --> 00:12:21,680 a really good conversation with him he 320 00:12:19,680 --> 00:12:24,399 he actually learned that on the 321 00:12:21,680 --> 00:12:26,360 spot like nobody finished except that 322 00:12:24,399 --> 00:12:28,920 one team and he had enough time to read 323 00:12:26,360 --> 00:12:32,199 a Blog about escaping sh jails and apply 324 00:12:28,920 --> 00:12:35,360 all that so that was 325 00:12:32,199 --> 00:12:39,320 impressive um Lessons 326 00:12:35,360 --> 00:12:43,160 Learned um if it ain't broke try your 327 00:12:39,320 --> 00:12:44,839 best to break it like that's just I I 328 00:12:43,160 --> 00:12:47,360 had that attitude of 329 00:12:44,839 --> 00:12:48,959 like this works in all the circumstances 330 00:12:47,360 --> 00:12:51,240 I tried it but you can actually quite 331 00:12:48,959 --> 00:12:54,639 easily simulate more terrible 332 00:12:51,240 --> 00:12:56,800 circumstances um for me personally the 333 00:12:54,639 --> 00:12:58,480 mix of technical failure and the student 334 00:12:56,800 --> 00:13:00,519 enthusiasm like I've never been more 335 00:12:58,480 --> 00:13:02,959 motivated than at the end of this to try 336 00:13:00,519 --> 00:13:05,320 to work and try to make this a much 337 00:13:02,959 --> 00:13:08,000 better platform so that was the perfect 338 00:13:05,320 --> 00:13:11,160 thing and yeah in a space of two weeks I 339 00:13:08,000 --> 00:13:12,560 had two babies a human one my daughter 340 00:13:11,160 --> 00:13:14,839 was born about a week before the 341 00:13:12,560 --> 00:13:17,160 challenge and then after all this 342 00:13:14,839 --> 00:13:20,800 happened I the project became something 343 00:13:17,160 --> 00:13:23,000 I started to take you know very very 344 00:13:20,800 --> 00:13:26,639 personally and seriously so where to 345 00:13:23,000 --> 00:13:29,120 next um more founding allowed me to step 346 00:13:26,639 --> 00:13:31,440 away from Mostly making problems and 347 00:13:29,120 --> 00:13:33,440 worrying about the 348 00:13:31,440 --> 00:13:35,279 platform now the first thing funnily 349 00:13:33,440 --> 00:13:37,480 enough the first thing I did after this 350 00:13:35,279 --> 00:13:38,800 broke is I probably I spent all of my 351 00:13:37,480 --> 00:13:41,240 free time in the next two months 352 00:13:38,800 --> 00:13:43,639 rebuilding the CTF platform which never 353 00:13:41,240 --> 00:13:44,959 got reused because we ended up deciding 354 00:13:43,639 --> 00:13:47,120 that we're going to step away from the 355 00:13:44,959 --> 00:13:48,560 CTF thing and we're going to try to 356 00:13:47,120 --> 00:13:50,680 build a platform that was more like 357 00:13:48,560 --> 00:13:53,360 Google quizzes so where they we could 358 00:13:50,680 --> 00:13:55,040 ask different types of questions except 359 00:13:53,360 --> 00:13:56,600 that it would incorporate a live 360 00:13:55,040 --> 00:13:59,399 scoreboard because the live scoreboard 361 00:13:56,600 --> 00:14:04,040 was the pretty big deal there 362 00:13:59,399 --> 00:14:06,639 so yeah that was my job to build it and 363 00:14:04,040 --> 00:14:10,839 this is the tool set that I chose based 364 00:14:06,639 --> 00:14:13,320 on the situation based on like a mixture 365 00:14:10,839 --> 00:14:16,880 of what looked interesting to me and 366 00:14:13,320 --> 00:14:19,519 what looked not intimidating to me so I 367 00:14:16,880 --> 00:14:21,680 did teach you know normal CSS uh 368 00:14:19,519 --> 00:14:24,800 JavaScript HTML so it was just vanilla 369 00:14:21,680 --> 00:14:26,120 js on the front end initially SQ light 370 00:14:24,800 --> 00:14:27,440 given that it worked seamlessly with 371 00:14:26,120 --> 00:14:31,560 python was going to be the choice for 372 00:14:27,440 --> 00:14:33,759 the DB fast API now I had some 373 00:14:31,560 --> 00:14:36,639 familiarity with both Jango and flask 374 00:14:33,759 --> 00:14:39,440 before fast API but that fast API seemed 375 00:14:36,639 --> 00:14:41,360 like it just seemed easy and obvious 376 00:14:39,440 --> 00:14:43,040 from the moment I first looked at the 377 00:14:41,360 --> 00:14:46,519 documentation so that was going to be my 378 00:14:43,040 --> 00:14:48,880 back end and uh yeah I was going to do 379 00:14:46,519 --> 00:14:51,360 the serus developer thing with GitHub 380 00:14:48,880 --> 00:14:54,360 you know automated deployment automated 381 00:14:51,360 --> 00:14:57,519 testing for every commit and so on and 382 00:14:54,360 --> 00:15:00,399 going to use uh AWS for the first time 383 00:14:57,519 --> 00:15:03,160 now I only use more or less 384 00:15:00,399 --> 00:15:04,880 these apps but I get built for other 385 00:15:03,160 --> 00:15:08,040 apps I don't know if other people have 386 00:15:04,880 --> 00:15:08,800 similar issues with AWS but like it's 387 00:15:08,040 --> 00:15:11,279 really 388 00:15:08,800 --> 00:15:13,279 annoying 389 00:15:11,279 --> 00:15:15,639 um 390 00:15:13,279 --> 00:15:18,040 so I don't have that much time for 391 00:15:15,639 --> 00:15:20,240 technical detail but this is more or 392 00:15:18,040 --> 00:15:24,240 less how I ended up slowly building a 393 00:15:20,240 --> 00:15:28,560 more robust platform so by April uh in 394 00:15:24,240 --> 00:15:30,399 2023 I had a prototype that just worked 395 00:15:28,560 --> 00:15:32,399 it it all the features that we needed 396 00:15:30,399 --> 00:15:33,360 students could ow short answer questions 397 00:15:32,399 --> 00:15:35,160 multiple 398 00:15:33,360 --> 00:15:37,680 choice 399 00:15:35,160 --> 00:15:38,839 um like I used all of the libraries I 400 00:15:37,680 --> 00:15:42,079 wanted and it was deploying 401 00:15:38,839 --> 00:15:46,079 automatically so that was pretty good um 402 00:15:42,079 --> 00:15:47,920 by September I had added an admin page 403 00:15:46,079 --> 00:15:50,519 which made it easy for us to populate 404 00:15:47,920 --> 00:15:52,600 questions there's also a Junior Day for 405 00:15:50,519 --> 00:15:54,240 years 56 that I was very little involved 406 00:15:52,600 --> 00:15:56,079 in but I made it easy for those guys to 407 00:15:54,240 --> 00:15:59,560 just create questions and put them on 408 00:15:56,079 --> 00:16:02,560 the site and by October with about a 409 00:15:59,560 --> 00:16:04,759 couple weeks to go I had gone to town 410 00:16:02,560 --> 00:16:06,240 with testing I used something called um 411 00:16:04,759 --> 00:16:08,639 show hands if you've heard of locust I 412 00:16:06,240 --> 00:16:12,079 have no idea if this is popular it does 413 00:16:08,639 --> 00:16:13,839 stress testing um basically there was 414 00:16:12,079 --> 00:16:16,920 local testing there was stress testing 415 00:16:13,839 --> 00:16:18,440 and I found every excuse I could to get 416 00:16:16,920 --> 00:16:21,160 every circle of friends every 417 00:16:18,440 --> 00:16:22,600 professional group to try to use the 418 00:16:21,160 --> 00:16:25,120 platform in some other version I 419 00:16:22,600 --> 00:16:27,079 addressed it up as AI trivia look AI is 420 00:16:25,120 --> 00:16:28,440 making these Json files which are trivia 421 00:16:27,079 --> 00:16:29,639 which was just an excuse at that's my 422 00:16:28,440 --> 00:16:32,079 platform 423 00:16:29,639 --> 00:16:34,440 so basically after about three four 424 00:16:32,079 --> 00:16:36,639 successes like I decided to let it go 425 00:16:34,440 --> 00:16:38,120 there were a couple of weeks left this 426 00:16:36,639 --> 00:16:41,000 is Locus by the way that was a 427 00:16:38,120 --> 00:16:43,240 screenshot in the WhatsApp group I was 428 00:16:41,000 --> 00:16:45,160 running about 142 requests per second I 429 00:16:43,240 --> 00:16:48,399 expect the competition only needed about 430 00:16:45,160 --> 00:16:50,800 five so I was like safe in that regard 431 00:16:48,399 --> 00:16:52,360 this is what the competition looked like 432 00:16:50,800 --> 00:16:54,519 these are groups of questions this is 433 00:16:52,360 --> 00:16:56,759 actually a primary question and this is 434 00:16:54,519 --> 00:16:58,360 going to be either like multiple choice 435 00:16:56,759 --> 00:17:00,319 or a short answer they have three 436 00:16:58,360 --> 00:17:01,519 attempts to the short answer there's 437 00:17:00,319 --> 00:17:02,959 going to be scoreboards you're going to 438 00:17:01,519 --> 00:17:07,240 see them on the 439 00:17:02,959 --> 00:17:09,439 pictures um and so yeah a couple of 440 00:17:07,240 --> 00:17:12,240 weeks to go and I have an idea that I've 441 00:17:09,439 --> 00:17:14,760 been thinking about a long long time and 442 00:17:12,240 --> 00:17:17,400 it is the idea for like an agent 443 00:17:14,760 --> 00:17:19,839 competition and the idea here is like 444 00:17:17,400 --> 00:17:21,839 imagine some simple game and the 445 00:17:19,839 --> 00:17:23,600 students would program an agent to play 446 00:17:21,839 --> 00:17:25,079 that game and the Agents would complete 447 00:17:23,600 --> 00:17:26,600 against other agents and then they would 448 00:17:25,079 --> 00:17:29,880 get some feedback and then they would 449 00:17:26,600 --> 00:17:32,600 try to like adjust strategy 450 00:17:29,880 --> 00:17:34,679 so you know this is this is bit of a 451 00:17:32,600 --> 00:17:35,960 technical challenge but I thought that 452 00:17:34,679 --> 00:17:38,000 in the two weeks I could do like a 453 00:17:35,960 --> 00:17:39,039 10-minute preview and show it to the 454 00:17:38,000 --> 00:17:40,720 students like this is what we're going 455 00:17:39,039 --> 00:17:45,039 to do next 456 00:17:40,720 --> 00:17:45,039 year so 457 00:17:45,280 --> 00:17:48,440 yeah like I said I only wanted a 458 00:17:47,360 --> 00:17:52,440 10-minute 459 00:17:48,440 --> 00:17:56,320 demo I mean again student code running 460 00:17:52,440 --> 00:17:58,960 on my server this is a bit of a 461 00:17:56,320 --> 00:18:01,720 challenge but here's what happened in 462 00:17:58,960 --> 00:18:03,039 one day messing around with Chad GPT I 463 00:18:01,720 --> 00:18:05,880 had a proof of 464 00:18:03,039 --> 00:18:07,679 concept and all of the sort of big 465 00:18:05,880 --> 00:18:09,360 challenges I thought I had which was 466 00:18:07,679 --> 00:18:12,240 like making sure that the student code 467 00:18:09,360 --> 00:18:14,400 is properly formatted and you know I 468 00:18:12,240 --> 00:18:17,159 don't have random silly indentation 469 00:18:14,400 --> 00:18:19,640 errors and and and syntax errors was 470 00:18:17,159 --> 00:18:22,440 sorted by something called uh inspect 471 00:18:19,640 --> 00:18:25,039 lib and it was converted to like a 472 00:18:22,440 --> 00:18:28,080 playable game object uh using something 473 00:18:25,039 --> 00:18:30,280 called import lip. util and So within 474 00:18:28,080 --> 00:18:31,840 one day I started thinking well maybe I 475 00:18:30,280 --> 00:18:33,440 could do a little bit more than a 476 00:18:31,840 --> 00:18:35,200 10-minute preview I mean I know it's 477 00:18:33,440 --> 00:18:36,799 really risky but we're going to cage it 478 00:18:35,200 --> 00:18:39,720 in you 479 00:18:36,799 --> 00:18:42,240 know this is experimental might not work 480 00:18:39,720 --> 00:18:44,200 so we basically decided I somehow 481 00:18:42,240 --> 00:18:47,480 convinced everybody else that we should 482 00:18:44,200 --> 00:18:50,840 do a 45 minute mini game with the 483 00:18:47,480 --> 00:18:53,280 students and uh it'll be worth 5% not a 484 00:18:50,840 --> 00:18:55,360 lot of consequence and the student 485 00:18:53,280 --> 00:18:58,320 experience was really really easy so 486 00:18:55,360 --> 00:19:02,280 they played a game called greedy Pig and 487 00:18:58,320 --> 00:19:04,919 greedy pig is a bit like Blackjack in 488 00:19:02,280 --> 00:19:06,360 that there's a dice rolled you keep 489 00:19:04,919 --> 00:19:08,960 adding to your total unless the dice 490 00:19:06,360 --> 00:19:11,559 rolls one so it's about kind of like 491 00:19:08,960 --> 00:19:14,280 knowing when to stop and there is a 492 00:19:11,559 --> 00:19:15,600 statistically correct point to stop but 493 00:19:14,280 --> 00:19:16,919 if you have a game state where you know 494 00:19:15,600 --> 00:19:18,400 where the other players are doing you 495 00:19:16,919 --> 00:19:22,919 can do a much more sophisticated 496 00:19:18,400 --> 00:19:24,600 strategy so this is like they got a a um 497 00:19:22,919 --> 00:19:26,960 they got a reple on a website called 498 00:19:24,600 --> 00:19:29,400 replit they had a working player with a 499 00:19:26,960 --> 00:19:33,240 working strategy and all they had to do 500 00:19:29,400 --> 00:19:35,039 was tweak that in 45 minutes they had 501 00:19:33,240 --> 00:19:36,679 you know we had acted out a game in 502 00:19:35,039 --> 00:19:38,360 front of them with 10 minutes they they 503 00:19:36,679 --> 00:19:40,640 were told what the game was a week in 504 00:19:38,360 --> 00:19:43,440 advance and interestingly enough a lot 505 00:19:40,640 --> 00:19:45,280 of uh Primary students in Australia play 506 00:19:43,440 --> 00:19:48,480 this math gaming class 507 00:19:45,280 --> 00:19:50,440 so yeah like from the student point of 508 00:19:48,480 --> 00:19:52,520 view we knew we were good we knew that 509 00:19:50,440 --> 00:19:53,640 like they could understand it and play 510 00:19:52,520 --> 00:19:58,120 the 511 00:19:53,640 --> 00:20:00,080 game okay um so yeah like essentially 512 00:19:58,120 --> 00:20:01,919 from the student point of view a couple 513 00:20:00,080 --> 00:20:04,799 of if statements if they understand the 514 00:20:01,919 --> 00:20:08,080 game they could Implement a very good 515 00:20:04,799 --> 00:20:11,000 strategy so the live event in 516 00:20:08,080 --> 00:20:16,200 2023 going back to that live platform I 517 00:20:11,000 --> 00:20:18,159 built with fast API SQ light that all 518 00:20:16,200 --> 00:20:21,400 worked perfectly it was tested to the 519 00:20:18,159 --> 00:20:23,240 Max and the only bug we had was in the 520 00:20:21,400 --> 00:20:25,679 competition teams would log in with two 521 00:20:23,240 --> 00:20:27,520 lap stops to the same account and the 522 00:20:25,679 --> 00:20:29,559 scores were added up on the front end 523 00:20:27,520 --> 00:20:31,039 not the back end and so they all had 524 00:20:29,559 --> 00:20:33,240 wrong scores because they were logged in 525 00:20:31,039 --> 00:20:34,679 with two computers other than that 526 00:20:33,240 --> 00:20:36,679 having to tell them what the scores were 527 00:20:34,679 --> 00:20:38,799 we didn't really have any bugs so with 528 00:20:36,679 --> 00:20:41,520 an hour ago it was all smiles so now the 529 00:20:38,799 --> 00:20:44,799 78 day and the 910 day they're about a 530 00:20:41,520 --> 00:20:47,159 week AP pot so with the 78 day I set the 531 00:20:44,799 --> 00:20:49,000 expectations guys this agent games thing 532 00:20:47,159 --> 00:20:51,320 we're about to do is an experiment it'll 533 00:20:49,000 --> 00:20:53,760 probably not 534 00:20:51,320 --> 00:20:55,360 work but let's give it a try this is 535 00:20:53,760 --> 00:20:57,600 what we're going to do next year it's a 536 00:20:55,360 --> 00:21:00,880 really cool concept 537 00:20:57,600 --> 00:21:03,440 and it worked other than like the server 538 00:21:00,880 --> 00:21:06,320 was overloaded with submissions and it 539 00:21:03,440 --> 00:21:07,840 crashed a couple times so I fixed that 540 00:21:06,320 --> 00:21:12,080 over the week for the 541 00:21:07,840 --> 00:21:14,640 n910s I got this um slow API rate 542 00:21:12,080 --> 00:21:17,080 limiter that only allowed one IP to do 543 00:21:14,640 --> 00:21:19,799 three requests a minute and I also added 544 00:21:17,080 --> 00:21:22,200 all these security features for bidding 545 00:21:19,799 --> 00:21:25,039 certain libraries and certain functions 546 00:21:22,200 --> 00:21:26,919 and so for 910 I was confident and the 547 00:21:25,039 --> 00:21:28,679 speech wasn't this is just experimental 548 00:21:26,919 --> 00:21:31,640 probably not going to work guys you're 549 00:21:28,679 --> 00:21:34,080 going to love it the 78s loved it and 550 00:21:31,640 --> 00:21:34,080 here's what 551 00:21:34,200 --> 00:21:40,400 happened that remote 552 00:21:37,080 --> 00:21:45,120 address in a venue which was the library 553 00:21:40,400 --> 00:21:47,120 of the docks somehow every single IP in 554 00:21:45,120 --> 00:21:49,720 the building sorry every single computer 555 00:21:47,120 --> 00:21:52,679 in the building had the same IP so 556 00:21:49,720 --> 00:21:55,080 instead of limiting one team to three 557 00:21:52,679 --> 00:21:57,240 submissions a minute we limited all the 558 00:21:55,080 --> 00:22:00,679 teams to three submissions a 559 00:21:57,240 --> 00:22:02,799 minute and it was like a car crash in 560 00:22:00,679 --> 00:22:05,279 slow motion because it's not like 561 00:22:02,799 --> 00:22:06,720 totally failing ah one team got in one 562 00:22:05,279 --> 00:22:09,159 team got in but we're running out of 563 00:22:06,720 --> 00:22:10,960 time and so we ran out of time and it 564 00:22:09,159 --> 00:22:14,720 was really really really 565 00:22:10,960 --> 00:22:17,120 frustrating but uh yeah still the 566 00:22:14,720 --> 00:22:19,360 feedback of that was oh I really want to 567 00:22:17,120 --> 00:22:21,279 do agent games I really wish that worked 568 00:22:19,360 --> 00:22:24,039 I really wish that worked so like I was 569 00:22:21,279 --> 00:22:26,640 fully committed to uh to doing agent 570 00:22:24,039 --> 00:22:27,880 games right so this is very much exactly 571 00:22:26,640 --> 00:22:29,159 the same thing that happened with the 572 00:22:27,880 --> 00:22:30,520 year before 573 00:22:29,159 --> 00:22:31,960 except this time I'm going to make it an 574 00:22:30,520 --> 00:22:33,480 open source project I'm going to try to 575 00:22:31,960 --> 00:22:35,880 get other people involved the quiz was 576 00:22:33,480 --> 00:22:40,840 staying that was all fine I have another 577 00:22:35,880 --> 00:22:43,440 kid and the history repeats itself um so 578 00:22:40,840 --> 00:22:44,679 making agent games bulletproof having 579 00:22:43,440 --> 00:22:49,120 student 580 00:22:44,679 --> 00:22:51,120 submissions run on my own server the key 581 00:22:49,120 --> 00:22:52,960 here was a mix of 582 00:22:51,120 --> 00:22:54,200 validation which used all of those 583 00:22:52,960 --> 00:22:57,480 things I realized I'm running out of 584 00:22:54,200 --> 00:22:59,559 time really quickly but most importantly 585 00:22:57,480 --> 00:23:02,679 every simulation ever ran in a Docker 586 00:22:59,559 --> 00:23:06,400 container and if your code was overly 587 00:23:02,679 --> 00:23:08,400 analytical overly slow it was rejected 588 00:23:06,400 --> 00:23:11,440 if it managed the simulation against a 589 00:23:08,400 --> 00:23:13,159 bunch of dummy teams in under 3 seconds 590 00:23:11,440 --> 00:23:14,679 your file was saved on our server and we 591 00:23:13,159 --> 00:23:17,720 were going to simulate you and that was 592 00:23:14,679 --> 00:23:20,760 all going to run 593 00:23:17,720 --> 00:23:22,200 so this is what the back end looked like 594 00:23:20,760 --> 00:23:25,720 when we run a 595 00:23:22,200 --> 00:23:28,760 simulation um students and us we get to 596 00:23:25,720 --> 00:23:30,200 see this uh feedback in PDF that they 597 00:23:28,760 --> 00:23:33,120 get to see how they did against other 598 00:23:30,200 --> 00:23:34,320 teams and adjust their strategy based on 599 00:23:33,120 --> 00:23:37,520 that 600 00:23:34,320 --> 00:23:40,240 feedback um in terms of the platform the 601 00:23:37,520 --> 00:23:44,240 coolest thing that I did was I made the 602 00:23:40,240 --> 00:23:45,640 game itself really kind of extensible it 603 00:23:44,240 --> 00:23:47,679 only takes about two to four hours to 604 00:23:45,640 --> 00:23:49,000 make a new game by the way I'll be here 605 00:23:47,679 --> 00:23:51,880 for the developer Sprints and if 606 00:23:49,000 --> 00:23:57,039 anybody's got cool game ideas I would 607 00:23:51,880 --> 00:23:59,240 love to hear them um and yeah 608 00:23:57,039 --> 00:24:01,720 um I'm going to have to skip a whole 609 00:23:59,240 --> 00:24:06,240 bunch of slides but I'll definitely show 610 00:24:01,720 --> 00:24:07,720 you this one the agent games the event 611 00:24:06,240 --> 00:24:10,279 went really well but first we had 612 00:24:07,720 --> 00:24:13,760 prelims and in the prelims we had about 613 00:24:10,279 --> 00:24:15,559 700 submissions and several successful 614 00:24:13,760 --> 00:24:18,120 hacks and teams just beating everybody 615 00:24:15,559 --> 00:24:21,440 with a 100% score the most interesting 616 00:24:18,120 --> 00:24:23,840 of which was the one on the screen 617 00:24:21,440 --> 00:24:25,679 there a kid figured out that we're using 618 00:24:23,840 --> 00:24:29,440 the random 619 00:24:25,679 --> 00:24:31,960 Library he then found a way to Brute 620 00:24:29,440 --> 00:24:34,120 Force random so that every single time 621 00:24:31,960 --> 00:24:39,640 for every single thing he did the dice 622 00:24:34,120 --> 00:24:39,640 roll a six and so even after a thousand 623 00:24:40,080 --> 00:24:44,679 simulations like he stops at a 100 he 624 00:24:42,799 --> 00:24:46,399 stops when he wins he like doesn't 625 00:24:44,679 --> 00:24:48,360 because he only get sixes it was like 626 00:24:46,399 --> 00:24:52,440 the most genius thing I've ever 627 00:24:48,360 --> 00:24:55,399 seen so um yeah I mean I'm GNA fast 628 00:24:52,440 --> 00:24:56,679 forward the competition went well we had 629 00:24:55,399 --> 00:24:59,960 one funny 630 00:24:56,679 --> 00:25:02,080 bug we had a Myst team appear now I 631 00:24:59,960 --> 00:25:03,480 checked all the server logs nobody 632 00:25:02,080 --> 00:25:05,640 logged into the server I was really 633 00:25:03,480 --> 00:25:08,600 paranoid what had happened is because I 634 00:25:05,640 --> 00:25:11,760 had outsourced my vanilla JS front end 635 00:25:08,600 --> 00:25:13,880 to a freelancer who did it in react he 636 00:25:11,760 --> 00:25:16,720 was kind enough to put a sign up button 637 00:25:13,880 --> 00:25:18,960 there um and that was the only security 638 00:25:16,720 --> 00:25:21,640 breach we had thanks to you know get up 639 00:25:18,960 --> 00:25:23,679 automated deployments I uh I got rid of 640 00:25:21,640 --> 00:25:26,440 that in about a minute but I was really 641 00:25:23,679 --> 00:25:27,919 sweating for about an hour a couple of 642 00:25:26,440 --> 00:25:30,559 uh nice things to say about people at 643 00:25:27,919 --> 00:25:33,520 help uh this was the freelancer Muhammad 644 00:25:30,559 --> 00:25:34,520 he wrote the the front end Matthew there 645 00:25:33,520 --> 00:25:37,440 who 646 00:25:34,520 --> 00:25:41,240 is a master student helped me with the 647 00:25:37,440 --> 00:25:43,159 docka um Han who is the head shooter of 648 00:25:41,240 --> 00:25:45,039 the first year subject in Union 649 00:25:43,159 --> 00:25:47,919 Melbourne did a whole lot of testing and 650 00:25:45,039 --> 00:25:49,440 made the agents more secure and Nathan 651 00:25:47,919 --> 00:25:52,240 made the markdown 652 00:25:49,440 --> 00:25:55,640 feedback and this is the 653 00:25:52,240 --> 00:25:58,679 repo and in the future I plan to try to 654 00:25:55,640 --> 00:25:59,919 share this with uni institutions School 655 00:25:58,679 --> 00:26:04,039 other 656 00:25:59,919 --> 00:26:07,919 competitions yeah and uh thank you very 657 00:26:04,039 --> 00:26:10,200 much I had a lot of fun um for the uh 658 00:26:07,919 --> 00:26:12,480 platform if you can help out with any of 659 00:26:10,200 --> 00:26:15,279 these um Docker performance 660 00:26:12,480 --> 00:26:17,520 improvements uh deployment on Windows I 661 00:26:15,279 --> 00:26:19,279 hate windows I wish this thing could 662 00:26:17,520 --> 00:26:21,640 just work on 663 00:26:19,279 --> 00:26:24,559 Windows so if somebody could do that 664 00:26:21,640 --> 00:26:26,440 that would be nice the feedback tends to 665 00:26:24,559 --> 00:26:28,919 be too long uh we need to make that 666 00:26:26,440 --> 00:26:31,279 markdown searchable so yeah those are 667 00:26:28,919 --> 00:26:34,440 some of the issues uh that I'm about to 668 00:26:31,279 --> 00:26:38,510 document nicely on the repo and yeah 669 00:26:34,440 --> 00:26:45,650 that's everything thank you very much 670 00:26:38,510 --> 00:26:45,650 [Applause]