0 00:00:00,000 --> 00:00:30,000 Dear viewer, these subtitles were generated by a machine via the service Trint and therefore are (very) buggy. If you are capable, please help us to create good quality subtitles: https://c3subtitles.de/talk/2173 Thanks! 1 00:00:29,070 --> 00:00:29,969 Hello again. 2 00:00:29,970 --> 00:00:32,609 On the remote Congress, 3 00:00:32,610 --> 00:00:35,099 another day in the Hexham Stream, 4 00:00:35,100 --> 00:00:37,259 the following talk will be with David 5 00:00:37,260 --> 00:00:39,389 Nicolai, the main developer of 6 00:00:39,390 --> 00:00:41,849 work at Ventrell the Little World. 7 00:00:41,850 --> 00:00:44,309 The whole Congress is happening in 8 00:00:44,310 --> 00:00:46,469 some May watching about inside 9 00:00:46,470 --> 00:00:49,109 the stream, and some may become 10 00:00:49,110 --> 00:00:50,489 around in the world. 11 00:00:50,490 --> 00:00:53,219 And David will tell us some details 12 00:00:53,220 --> 00:00:55,379 about at Ventrell how to hack it 13 00:00:55,380 --> 00:00:57,389 to a halt to make unexpected things 14 00:00:57,390 --> 00:00:59,459 inside and 15 00:00:59,460 --> 00:01:01,109 have a lot of fun and the talk. 16 00:01:01,110 --> 00:01:03,269 And there will be a Q&A later 17 00:01:03,270 --> 00:01:05,699 on in the room again. 18 00:01:05,700 --> 00:01:06,700 You will 19 00:01:08,130 --> 00:01:11,279 have the link in the 20 00:01:11,280 --> 00:01:12,599 end of the talk. Thank you. 21 00:01:15,450 --> 00:01:16,559 Hi, everybody. 22 00:01:16,560 --> 00:01:18,089 I'm really happy to be here with you 23 00:01:18,090 --> 00:01:20,609 today as we will be talking 24 00:01:20,610 --> 00:01:22,949 on how we can Huk walk 25 00:01:22,950 --> 00:01:25,649 adventure for fun and profit, 26 00:01:25,650 --> 00:01:28,019 so I'm pretty sure you all know what 27 00:01:28,020 --> 00:01:30,089 work adventure is about because it 28 00:01:30,090 --> 00:01:32,189 is a virtual universe that is 29 00:01:32,190 --> 00:01:33,480 taking place, 30 00:01:34,920 --> 00:01:37,349 whether US history world is taking 31 00:01:37,350 --> 00:01:38,609 place right now. 32 00:01:38,610 --> 00:01:40,829 So the little characters 33 00:01:40,830 --> 00:01:42,899 moving into the virtual universe is based 34 00:01:42,900 --> 00:01:44,759 on what convention? 35 00:01:44,760 --> 00:01:46,530 So today we're going to see 36 00:01:48,270 --> 00:01:50,459 how what convention was billed 37 00:01:50,460 --> 00:01:53,219 as an open platform and what it means. 38 00:01:53,220 --> 00:01:55,709 It means that we can try generating 39 00:01:55,710 --> 00:01:57,959 dynamic maps, but also we can 40 00:01:57,960 --> 00:02:00,539 try scripting maps and 41 00:02:00,540 --> 00:02:02,729 cryptic maps sometimes has limitations, 42 00:02:02,730 --> 00:02:05,039 so we're going to see how we can hack 43 00:02:05,040 --> 00:02:07,349 around those limitations to open more 44 00:02:07,350 --> 00:02:08,609 possibilities. 45 00:02:08,610 --> 00:02:09,610 Cool. 46 00:02:10,199 --> 00:02:11,459 A quick note about me. 47 00:02:11,460 --> 00:02:13,499 My name is David n°. 48 00:02:13,500 --> 00:02:16,109 I'm the dad of 49 00:02:16,110 --> 00:02:18,509 work, and I'm sure I started the project 50 00:02:18,510 --> 00:02:21,139 like one year and a half ago during 51 00:02:21,140 --> 00:02:23,459 the French lockdown, 52 00:02:25,170 --> 00:02:27,269 and I'm 53 00:02:27,270 --> 00:02:28,379 solidly the developer. 54 00:02:30,510 --> 00:02:32,729 So what does it mean 55 00:02:32,730 --> 00:02:34,379 for working as I'm sure to be an open 56 00:02:34,380 --> 00:02:35,579 platform? 57 00:02:35,580 --> 00:02:37,379 Well, apart from having the code on 58 00:02:37,380 --> 00:02:38,380 GitHub, 59 00:02:39,960 --> 00:02:42,269 the look at should've been designing 60 00:02:42,270 --> 00:02:44,999 maps for walk adventure for 61 00:02:45,000 --> 00:02:46,559 us this free world. 62 00:02:46,560 --> 00:02:48,839 You had to submit the maps 63 00:02:48,840 --> 00:02:51,959 and they had to be validated because 64 00:02:51,960 --> 00:02:54,449 art history wanted to have a coherent 65 00:02:54,450 --> 00:02:55,450 experience. 66 00:02:56,520 --> 00:02:57,870 But the fact is that 67 00:02:58,920 --> 00:03:01,109 when you're doing a short 68 00:03:01,110 --> 00:03:02,220 walk adventure mean 69 00:03:03,270 --> 00:03:06,059 you don't have this acceptance 70 00:03:06,060 --> 00:03:07,889 and you need to validate anything. 71 00:03:07,890 --> 00:03:10,169 And actually, if you look at the URL 72 00:03:10,170 --> 00:03:12,619 of a map, it looks like that. 73 00:03:12,620 --> 00:03:15,539 Here you've got what 74 00:03:15,540 --> 00:03:17,729 what looks like a URL 75 00:03:17,730 --> 00:03:20,399 inside you are right? 76 00:03:20,400 --> 00:03:22,739 And that, well, it's 77 00:03:22,740 --> 00:03:25,109 this you are really here is actually 78 00:03:25,110 --> 00:03:27,359 the URL of the map that 79 00:03:27,360 --> 00:03:29,789 is going to be loaded by what convention? 80 00:03:29,790 --> 00:03:31,679 So how does it work? 81 00:03:31,680 --> 00:03:34,379 There is a cover of there is a browser 82 00:03:34,380 --> 00:03:36,599 running walk adventure, and 83 00:03:36,600 --> 00:03:38,849 they both load the up 84 00:03:38,850 --> 00:03:41,219 from any web server anywhere 85 00:03:41,220 --> 00:03:42,929 in the world. So if you want to design 86 00:03:42,930 --> 00:03:45,149 them up, you take time that this 87 00:03:45,150 --> 00:03:46,919 is the map editor. 88 00:03:46,920 --> 00:03:49,559 It generates a JSON file 89 00:03:49,560 --> 00:03:51,899 and this JSON file, you can put it in 90 00:03:51,900 --> 00:03:53,309 any web server. 91 00:03:53,310 --> 00:03:55,529 And the only thing is that the web server 92 00:03:55,530 --> 00:03:57,929 here must, of course, 93 00:03:57,930 --> 00:03:59,789 properly set. 94 00:03:59,790 --> 00:04:01,889 This is really important 95 00:04:01,890 --> 00:04:03,959 because otherwise the browser will 96 00:04:03,960 --> 00:04:06,389 not be able to do and if such a request 97 00:04:06,390 --> 00:04:07,379 to the server. 98 00:04:07,380 --> 00:04:09,659 But as soon as those are set, 99 00:04:09,660 --> 00:04:12,329 you can really put your map anywhere. 100 00:04:12,330 --> 00:04:14,699 One of the things is that 101 00:04:14,700 --> 00:04:16,799 you can actually use GitHub 102 00:04:16,800 --> 00:04:18,328 because it has a service called guitar 103 00:04:18,329 --> 00:04:20,549 pages that acts as 104 00:04:20,550 --> 00:04:22,169 a free web server. 105 00:04:22,170 --> 00:04:23,979 So if you don't have a web server or 106 00:04:23,980 --> 00:04:26,159 Raspberry Pi at home, you can 107 00:04:26,160 --> 00:04:28,169 just get the pages. And since it's on 108 00:04:28,170 --> 00:04:31,109 GitHub, you can also use 109 00:04:31,110 --> 00:04:33,089 git workflows like making pull requests 110 00:04:33,090 --> 00:04:35,369 and stuff like that to work 111 00:04:35,370 --> 00:04:37,679 as a team on your map. 112 00:04:37,680 --> 00:04:39,839 But this is really static 113 00:04:39,840 --> 00:04:42,059 files, and since you 114 00:04:42,060 --> 00:04:43,679 can host your map anywhere and the 115 00:04:43,680 --> 00:04:46,079 request will be made, you could also 116 00:04:46,080 --> 00:04:47,819 generate your map dynamically. 117 00:04:48,990 --> 00:04:50,640 And this is where the fun is, actually. 118 00:04:52,380 --> 00:04:54,479 So you can take any web server, 119 00:04:54,480 --> 00:04:56,639 Node.js, HP, 120 00:04:56,640 --> 00:04:59,279 Python, whatever and 121 00:04:59,280 --> 00:05:02,519 generate a file. 122 00:05:02,520 --> 00:05:04,589 So in order to generate this file, 123 00:05:04,590 --> 00:05:07,079 the first thing you have to know is, 124 00:05:07,080 --> 00:05:09,179 well, how to generate it 125 00:05:09,180 --> 00:05:10,979 and what is the JSON format for this 126 00:05:10,980 --> 00:05:13,289 file? But hopefully this is 127 00:05:13,290 --> 00:05:15,449 well explained in the 128 00:05:15,450 --> 00:05:17,729 documentation of 129 00:05:17,730 --> 00:05:18,629 Tile. 130 00:05:18,630 --> 00:05:20,759 So sure, I put a link to the 131 00:05:20,760 --> 00:05:21,929 documentation. It's quite 132 00:05:21,930 --> 00:05:23,019 self-explanatory. 133 00:05:23,020 --> 00:05:25,619 You've got layers, you've got 134 00:05:25,620 --> 00:05:28,109 the tiles, you've got tile sets. 135 00:05:28,110 --> 00:05:30,269 It's actually kind 136 00:05:30,270 --> 00:05:31,529 of quite easy to use. 137 00:05:32,790 --> 00:05:34,919 And once you understood that 138 00:05:34,920 --> 00:05:36,929 based on file format, what can you do 139 00:05:36,930 --> 00:05:39,269 with it? Well, this is where 140 00:05:39,270 --> 00:05:41,179 the fun part is, and you have to figure 141 00:05:41,180 --> 00:05:42,179 it out, actually. 142 00:05:42,180 --> 00:05:44,039 But for instance, you could try to 143 00:05:44,040 --> 00:05:46,110 generate a map that is based 144 00:05:47,370 --> 00:05:49,679 that is changing, whether it's raining 145 00:05:49,680 --> 00:05:51,720 or the weather outside the Senate, 146 00:05:52,740 --> 00:05:54,809 you could generate a map 147 00:05:54,810 --> 00:05:56,999 from OpenStreetMap data. 148 00:05:57,000 --> 00:05:59,159 You could make a map that 149 00:05:59,160 --> 00:06:01,259 contains an art collection based 150 00:06:01,260 --> 00:06:03,119 on and if you've got, I don't know, 151 00:06:04,560 --> 00:06:05,939 really, it's up to you to find 152 00:06:07,230 --> 00:06:08,610 a clever hack, actually. 153 00:06:10,590 --> 00:06:12,689 But there is a few things you need 154 00:06:12,690 --> 00:06:14,669 to know since. 155 00:06:14,670 --> 00:06:17,190 What show is loading them up once? 156 00:06:19,260 --> 00:06:21,419 Well, if the map is modified after 157 00:06:21,420 --> 00:06:23,529 it has been loaded, what kind of 158 00:06:23,530 --> 00:06:25,709 control will not notice since the 159 00:06:25,710 --> 00:06:27,509 map is uploaded that none of those are 160 00:06:27,510 --> 00:06:28,409 whatsoever? 161 00:06:28,410 --> 00:06:30,959 So if there are any changes, you will 162 00:06:30,960 --> 00:06:33,539 need to refresh your page 163 00:06:33,540 --> 00:06:35,729 so that the map is redundant. 164 00:06:35,730 --> 00:06:38,039 And also, this means 165 00:06:38,040 --> 00:06:40,229 that you could try to present 166 00:06:40,230 --> 00:06:42,149 different maps to different players, 167 00:06:43,650 --> 00:06:45,779 and they would set different 168 00:06:45,780 --> 00:06:48,149 maps and still be moving 169 00:06:48,150 --> 00:06:50,549 on to parallel 170 00:06:50,550 --> 00:06:51,599 universe. 171 00:06:51,600 --> 00:06:53,369 You can actually take advantage of that 172 00:06:53,370 --> 00:06:55,649 if you want, for instance, to open 173 00:06:55,650 --> 00:06:57,749 a door for some users and close it for 174 00:06:57,750 --> 00:06:58,750 us. 175 00:07:01,110 --> 00:07:03,419 But yes, these are kind of limitations. 176 00:07:03,420 --> 00:07:05,789 Still, you can do pretty amazing things. 177 00:07:05,790 --> 00:07:08,099 And this year I've got an open 178 00:07:08,100 --> 00:07:10,259 map the most that has been 179 00:07:10,260 --> 00:07:12,569 developed by Jonathan Angel, which 180 00:07:12,570 --> 00:07:14,220 is a really, really cool hacker. 181 00:07:15,990 --> 00:07:17,519 The guy is absolutely awesome 182 00:07:18,570 --> 00:07:20,490 and, well, let me show you. 183 00:07:21,580 --> 00:07:22,589 Sarah, I'm connecting. 184 00:07:24,390 --> 00:07:26,579 And oh, OK, so I've 185 00:07:26,580 --> 00:07:29,069 got my little Pacman character. 186 00:07:30,120 --> 00:07:32,059 Well, if I move to. 187 00:07:33,890 --> 00:07:36,499 In a place 188 00:07:36,500 --> 00:07:38,869 where you can see that all this data 189 00:07:38,870 --> 00:07:41,240 is actually fetched from 190 00:07:42,620 --> 00:07:44,839 from OpenStreetMap, and if you have 191 00:07:44,840 --> 00:07:47,269 a look at what is really, really fun, 192 00:07:47,270 --> 00:07:49,309 I've got a latitude and longitude 193 00:07:49,310 --> 00:07:50,629 parameter here. 194 00:07:50,630 --> 00:07:52,850 And finally, title's a little bit. 195 00:07:54,950 --> 00:07:56,299 And if I refresh the page. 196 00:07:58,040 --> 00:07:59,420 Dynamically switch data 197 00:08:00,740 --> 00:08:03,079 from another place, so it's running on 198 00:08:03,080 --> 00:08:05,209 his Raspberry Pi at home, this 199 00:08:05,210 --> 00:08:07,669 map, so it's a bit slow, but hey, 200 00:08:07,670 --> 00:08:10,069 look, I've got another 201 00:08:10,070 --> 00:08:12,349 place and schedule desert base 202 00:08:12,350 --> 00:08:14,539 where you can actually put entries 203 00:08:14,540 --> 00:08:16,669 and exits a bit everywhere. 204 00:08:16,670 --> 00:08:18,739 So yeah, it's a really, really nice 205 00:08:18,740 --> 00:08:19,969 hack. 206 00:08:19,970 --> 00:08:22,099 And the I was pretty amazed when 207 00:08:22,100 --> 00:08:23,100 I saw that. 208 00:08:25,540 --> 00:08:26,540 Yeah. 209 00:08:27,280 --> 00:08:29,379 I've been thinking about 210 00:08:29,380 --> 00:08:31,839 putting entries and exits 211 00:08:31,840 --> 00:08:32,840 just before 212 00:08:34,120 --> 00:08:36,339 you saw that from one point I could go 213 00:08:36,340 --> 00:08:38,558 to another map and in what can ensure 214 00:08:38,559 --> 00:08:41,049 we do that by actually putting 215 00:08:42,100 --> 00:08:44,529 a property which we call exit euro 216 00:08:44,530 --> 00:08:46,689 inside the map? So on this 217 00:08:46,690 --> 00:08:48,879 ledger here, when I work here, I 218 00:08:48,880 --> 00:08:49,959 will go here. 219 00:08:49,960 --> 00:08:52,119 And this actually is, if 220 00:08:52,120 --> 00:08:54,489 you think about it, pretty much looking 221 00:08:54,490 --> 00:08:56,290 like an hypertext link 222 00:08:57,370 --> 00:09:00,519 on a webpage and 223 00:09:00,520 --> 00:09:01,659 even more. 224 00:09:01,660 --> 00:09:03,749 But we've got what we call 225 00:09:03,750 --> 00:09:06,009 the zones that 226 00:09:06,010 --> 00:09:08,379 we defined using stuff your property 227 00:09:08,380 --> 00:09:09,639 and as the name of the ledger. 228 00:09:09,640 --> 00:09:12,429 Here it is down to this test. 229 00:09:12,430 --> 00:09:14,589 And if I go on the web page 230 00:09:14,590 --> 00:09:17,019 and I'm adding Dash 231 00:09:17,020 --> 00:09:19,419 Dunzo stuff here, I'm I'm 232 00:09:19,420 --> 00:09:22,689 actually entering the page 233 00:09:22,690 --> 00:09:24,909 at the very position of the ledger, 234 00:09:24,910 --> 00:09:27,039 which is kind of fun because 235 00:09:27,040 --> 00:09:28,040 if you think about it. 236 00:09:29,170 --> 00:09:31,419 Well, what kind of map 237 00:09:31,420 --> 00:09:34,179 are JSON files that can be hosted 238 00:09:34,180 --> 00:09:36,369 anywhere on the web, just like 239 00:09:36,370 --> 00:09:38,059 Edge similar webpages? 240 00:09:38,060 --> 00:09:40,209 And is it an untruth in what 241 00:09:40,210 --> 00:09:41,559 conventional map? 242 00:09:41,560 --> 00:09:43,929 They are my mapping hypertext 243 00:09:43,930 --> 00:09:46,569 links and anchors on the web. 244 00:09:46,570 --> 00:09:48,699 And so that leads me to 245 00:09:48,700 --> 00:09:50,979 think of Walken's onshore not 246 00:09:50,980 --> 00:09:53,619 only as a platform, 247 00:09:53,620 --> 00:09:55,179 but rather as a browser. 248 00:09:55,180 --> 00:09:57,339 I see it as a browser of maps 249 00:09:57,340 --> 00:09:59,199 that could be anywhere on the web. 250 00:09:59,200 --> 00:10:01,509 A bit like a web browser 251 00:10:01,510 --> 00:10:03,759 enables you to navigate 252 00:10:03,760 --> 00:10:04,899 its similar web pages. 253 00:10:06,640 --> 00:10:09,009 And this was actually the state of 254 00:10:09,010 --> 00:10:11,710 work in Hunter in December 2020 255 00:10:12,820 --> 00:10:14,919 when we did the previews of 256 00:10:14,920 --> 00:10:15,920 history. 257 00:10:16,810 --> 00:10:19,539 And it wasn't really like that. 258 00:10:19,540 --> 00:10:20,559 The fact is that 259 00:10:21,610 --> 00:10:23,709 since last year, a lot of things happened 260 00:10:23,710 --> 00:10:25,779 and the first of things that happened 261 00:10:25,780 --> 00:10:27,879 is that we had a lot 262 00:10:27,880 --> 00:10:30,069 of good contributions thanks to the 263 00:10:30,070 --> 00:10:32,139 Chaos Computer Club, because it 264 00:10:32,140 --> 00:10:34,149 provided us a lot of visibility. 265 00:10:34,150 --> 00:10:36,190 A lot of people started hacking around 266 00:10:37,420 --> 00:10:39,039 making pull requests on the main 267 00:10:39,040 --> 00:10:41,499 repository and 268 00:10:41,500 --> 00:10:44,019 basically it, yeah, it 269 00:10:44,020 --> 00:10:45,069 blew up. 270 00:10:45,070 --> 00:10:47,109 We had a ton of new features. 271 00:10:47,110 --> 00:10:49,539 People provided us with zones 272 00:10:49,540 --> 00:10:51,549 where you could they sound some music? 273 00:10:51,550 --> 00:10:53,799 Oh, animations and maps. 274 00:10:53,800 --> 00:10:55,959 Images of components got some 275 00:10:55,960 --> 00:10:58,449 looks cool and actually 276 00:10:58,450 --> 00:11:00,519 been implemented at all, but 277 00:11:00,520 --> 00:11:02,589 by the community at large and 278 00:11:02,590 --> 00:11:04,119 some of it, some some guy 279 00:11:06,100 --> 00:11:08,439 came and said, Look, 280 00:11:08,440 --> 00:11:09,609 I've got this excellent 281 00:11:10,960 --> 00:11:13,029 pull request and 282 00:11:13,030 --> 00:11:15,279 it allows you to play animations 283 00:11:15,280 --> 00:11:18,099 when you get next to near an object 284 00:11:18,100 --> 00:11:20,299 and the CGI animation can optionally play 285 00:11:20,300 --> 00:11:22,389 backwards. And I was like, Whoa. 286 00:11:23,650 --> 00:11:26,439 And the funny thing is that 287 00:11:26,440 --> 00:11:28,419 the rest of the community was like, Oh, 288 00:11:28,420 --> 00:11:29,769 yes, yes, yes, this is a really, really 289 00:11:29,770 --> 00:11:30,770 good idea. 290 00:11:31,270 --> 00:11:33,639 Actually, what this was going to do 291 00:11:33,640 --> 00:11:36,039 was like when you woke up 292 00:11:36,040 --> 00:11:37,929 on the grass, the grass can move. 293 00:11:37,930 --> 00:11:40,089 So it's cool effect 294 00:11:40,090 --> 00:11:41,409 and it wasn't that cool. 295 00:11:41,410 --> 00:11:43,599 But for me, it was also kind 296 00:11:43,600 --> 00:11:46,299 of a problem because, 297 00:11:46,300 --> 00:11:48,429 well, as a maintainer 298 00:11:48,430 --> 00:11:50,439 of an open source solution, if I was 299 00:11:50,440 --> 00:11:52,599 accepting too much things, I would have 300 00:11:52,600 --> 00:11:55,089 to maintain them and especially because 301 00:11:55,090 --> 00:11:57,669 I started hosting a walk adventure 302 00:11:57,670 --> 00:11:59,979 software as a service solution online. 303 00:12:01,060 --> 00:12:03,279 I could not afford to do any breaking 304 00:12:03,280 --> 00:12:05,589 changes because my users, 305 00:12:05,590 --> 00:12:07,269 if I change the format of the maps, they 306 00:12:07,270 --> 00:12:08,270 won't be happy, I thought. 307 00:12:09,880 --> 00:12:13,179 So basically, 308 00:12:13,180 --> 00:12:14,229 you should think about it. 309 00:12:14,230 --> 00:12:15,879 The needs that the developers were 310 00:12:15,880 --> 00:12:18,009 expressing was they wanted to be able 311 00:12:18,010 --> 00:12:20,289 to create cool stuff was what kind of. 312 00:12:20,290 --> 00:12:22,659 And I had a need to restrict 313 00:12:22,660 --> 00:12:23,660 a bit 314 00:12:24,760 --> 00:12:27,099 the number of 315 00:12:27,100 --> 00:12:28,509 pull requests I was accepting. 316 00:12:28,510 --> 00:12:30,819 Otherwise it would get 317 00:12:30,820 --> 00:12:31,820 difficult. 318 00:12:32,650 --> 00:12:34,719 So how how did with 319 00:12:34,720 --> 00:12:37,329 the you remember this 320 00:12:37,330 --> 00:12:39,819 comparison between what conventional 321 00:12:39,820 --> 00:12:41,049 and the web browser? 322 00:12:41,050 --> 00:12:43,579 Well, there is something with a web. 323 00:12:43,580 --> 00:12:45,829 Oh, it's like 324 00:12:45,830 --> 00:12:47,989 actually, you can modify the JavaScript 325 00:12:47,990 --> 00:12:50,089 with Adam and in the walk, as 326 00:12:50,090 --> 00:12:52,309 I'm sure that we could not do 327 00:12:52,310 --> 00:12:55,249 at all, and this was a real problem. 328 00:12:55,250 --> 00:12:57,439 So what I wanted 329 00:12:57,440 --> 00:12:59,939 actually to do was to open the ability 330 00:12:59,940 --> 00:13:02,149 here for people 331 00:13:02,150 --> 00:13:04,219 to add scripts in to 332 00:13:04,220 --> 00:13:07,069 the map, to be able to build cool stuff. 333 00:13:07,070 --> 00:13:09,589 And with scripting 334 00:13:09,590 --> 00:13:11,929 that could be really creative 335 00:13:11,930 --> 00:13:14,029 without having to add new properties 336 00:13:14,030 --> 00:13:15,030 all the time. OK. 337 00:13:16,070 --> 00:13:19,219 But in order to do scripting, 338 00:13:19,220 --> 00:13:21,289 I had an issue that I have 339 00:13:21,290 --> 00:13:23,569 a big need to isolate 340 00:13:23,570 --> 00:13:25,699 isolate as the context is 341 00:13:25,700 --> 00:13:27,769 basically if someone is providing a map 342 00:13:27,770 --> 00:13:30,469 and if I'm running a 343 00:13:30,470 --> 00:13:33,049 script from the map in Sidewalk 344 00:13:33,050 --> 00:13:35,419 Adventure, well, 345 00:13:35,420 --> 00:13:37,609 I'm running JavaScript 346 00:13:37,610 --> 00:13:40,039 into my webpage and it could definitely 347 00:13:40,040 --> 00:13:42,229 be accessed across 348 00:13:42,230 --> 00:13:44,569 South Scripting Issue, 349 00:13:44,570 --> 00:13:45,829 which is not good. 350 00:13:45,830 --> 00:13:47,989 So I need to protect myself against that. 351 00:13:47,990 --> 00:13:49,639 So how did we do? 352 00:13:49,640 --> 00:13:51,049 Well, we used iPhones. 353 00:13:53,250 --> 00:13:55,489 Because when you run 354 00:13:55,490 --> 00:13:57,509 inside the nighttime, it's isolated from 355 00:13:57,510 --> 00:13:59,039 the mainland, right? 356 00:13:59,040 --> 00:14:01,169 So you should think about 357 00:14:01,170 --> 00:14:02,170 it. 358 00:14:02,580 --> 00:14:04,289 You've got the browser here. 359 00:14:04,290 --> 00:14:07,019 There is a map and on the map 360 00:14:07,020 --> 00:14:08,999 I'm hiding a very, very small. 361 00:14:09,000 --> 00:14:10,769 I found it's one pixel by one pixel 362 00:14:10,770 --> 00:14:12,809 transparent. Nobody can see it, but it's 363 00:14:12,810 --> 00:14:15,539 here, and the iPhone can contain 364 00:14:15,540 --> 00:14:17,639 JavaScript code that is run. 365 00:14:17,640 --> 00:14:19,709 And the fact is 366 00:14:19,710 --> 00:14:20,789 JavaScript. 367 00:14:20,790 --> 00:14:23,339 The iPhone can communicate 368 00:14:23,340 --> 00:14:25,619 with the browser using what we call 369 00:14:25,620 --> 00:14:27,959 the first message API, which is a native 370 00:14:27,960 --> 00:14:30,179 API that is available in 371 00:14:30,180 --> 00:14:32,489 any browser, and it's a communication 372 00:14:32,490 --> 00:14:34,819 communication mechanism between 373 00:14:34,820 --> 00:14:36,239 iPhones. 374 00:14:36,240 --> 00:14:37,240 So 375 00:14:38,340 --> 00:14:40,049 you should look at it. It's really is it. 376 00:14:40,050 --> 00:14:42,209 You can send messages in windows. 377 00:14:42,210 --> 00:14:44,639 The first message you put any JSON 378 00:14:44,640 --> 00:14:47,239 message here and 379 00:14:47,240 --> 00:14:49,019 you want to receive a message on the 380 00:14:49,020 --> 00:14:51,329 other in the other frame, you just 381 00:14:51,330 --> 00:14:53,429 other. It's not on the message isn't. 382 00:14:53,430 --> 00:14:55,109 And you get that message back. 383 00:14:55,110 --> 00:14:58,049 And since this is our JSON messages, 384 00:14:58,050 --> 00:14:59,050 well, there 385 00:15:00,990 --> 00:15:02,819 you can build a format and check the 386 00:15:02,820 --> 00:15:05,039 format, and the communication is 387 00:15:05,040 --> 00:15:06,040 clear and 388 00:15:07,620 --> 00:15:10,169 well-defined, which is important 389 00:15:10,170 --> 00:15:11,669 when you want to do something that is 390 00:15:11,670 --> 00:15:12,779 secure. 391 00:15:12,780 --> 00:15:14,819 But I still had the problem. 392 00:15:14,820 --> 00:15:17,099 The item I was quitting 393 00:15:17,100 --> 00:15:19,229 could access zadam of the 394 00:15:19,230 --> 00:15:21,389 parental element because it 395 00:15:21,390 --> 00:15:23,129 was all in the same domain. 396 00:15:23,130 --> 00:15:25,409 OK, my iPhone is treated on the fly 397 00:15:25,410 --> 00:15:27,539 by my application, so it 398 00:15:27,540 --> 00:15:29,699 is all in the same domain, which means 399 00:15:29,700 --> 00:15:32,069 that because of the same origin 400 00:15:32,070 --> 00:15:33,070 policy, 401 00:15:34,170 --> 00:15:35,970 the ultram could access 402 00:15:37,040 --> 00:15:39,299 as a parent, as a parent, trim, 403 00:15:39,300 --> 00:15:41,609 insert a script tag and so 404 00:15:41,610 --> 00:15:43,829 basically will 405 00:15:43,830 --> 00:15:45,209 open an excess 406 00:15:46,350 --> 00:15:48,179 flow in my application. 407 00:15:48,180 --> 00:15:50,489 So I had to protect myself from that. 408 00:15:50,490 --> 00:15:52,949 And the solution to that, it's 409 00:15:52,950 --> 00:15:55,349 little known that the A-frame 410 00:15:55,350 --> 00:15:57,479 you can use an attribute such is called 411 00:15:57,480 --> 00:15:59,639 some books and 412 00:15:59,640 --> 00:16:00,750 some books attribute. 413 00:16:01,790 --> 00:16:04,099 It lets you decide what a nation 414 00:16:04,100 --> 00:16:06,319 can do or not as soon 415 00:16:06,320 --> 00:16:08,119 as you put the sandbox attribute family 416 00:16:08,120 --> 00:16:10,399 is really restricted and then you open 417 00:16:10,400 --> 00:16:11,389 what it is allowed to do. 418 00:16:11,390 --> 00:16:13,609 So I'm allowing to run 419 00:16:13,610 --> 00:16:15,019 scripts because I want to allow 420 00:16:15,020 --> 00:16:16,039 JavaScript. 421 00:16:16,040 --> 00:16:18,309 But is justice the 422 00:16:18,310 --> 00:16:20,569 friend is losing its origin? 423 00:16:20,570 --> 00:16:23,089 OK. It does not have any domain anymore, 424 00:16:23,090 --> 00:16:25,219 which means that if it does not have any 425 00:16:25,220 --> 00:16:26,539 domain, well, 426 00:16:27,770 --> 00:16:30,019 the same origin applies again. 427 00:16:30,020 --> 00:16:32,089 I cannot accept the apparently from and 428 00:16:32,090 --> 00:16:33,349 I'm good to go. 429 00:16:33,350 --> 00:16:34,369 And this is critical. 430 00:16:35,540 --> 00:16:37,909 So what you can remember from this 431 00:16:37,910 --> 00:16:39,949 is that you should use the first message 432 00:16:39,950 --> 00:16:42,979 API and entrance that the some. 433 00:16:42,980 --> 00:16:45,109 You can actually run into your 434 00:16:45,110 --> 00:16:47,419 application set particle. 435 00:16:47,420 --> 00:16:49,639 So particle the code that is coming from 436 00:16:49,640 --> 00:16:52,609 someone else in a sexual way 437 00:16:52,610 --> 00:16:55,069 and without the code risking 438 00:16:55,070 --> 00:16:56,070 to 439 00:16:57,800 --> 00:17:00,619 have too many impacts 440 00:17:00,620 --> 00:17:03,379 are on your 441 00:17:03,380 --> 00:17:04,380 application. 442 00:17:05,420 --> 00:17:07,848 So what we did after was hiding the 443 00:17:07,849 --> 00:17:09,769 complexity of the window, that's the 444 00:17:09,770 --> 00:17:11,868 first message behind a flip 445 00:17:11,869 --> 00:17:14,179 from the API, and the result 446 00:17:14,180 --> 00:17:15,180 is this 447 00:17:16,880 --> 00:17:18,108 is a sample script. 448 00:17:18,109 --> 00:17:19,309 I've got this W 449 00:17:20,480 --> 00:17:22,789 object that is while 450 00:17:22,790 --> 00:17:25,098 a global object, and this year I'm 451 00:17:25,099 --> 00:17:27,289 listening when I'm entering the zone, 452 00:17:27,290 --> 00:17:29,089 which is then a clock which is here. 453 00:17:29,090 --> 00:17:31,039 And when this happened, I'm opening a pop 454 00:17:31,040 --> 00:17:32,869 up that this is the time. 455 00:17:32,870 --> 00:17:34,969 So, OK, so it's a small example of what 456 00:17:34,970 --> 00:17:37,309 it's possible to do with this scripting 457 00:17:37,310 --> 00:17:38,310 API. 458 00:17:39,050 --> 00:17:40,999 So yeah, it's pretty cool. 459 00:17:41,000 --> 00:17:43,249 And there are already many 460 00:17:43,250 --> 00:17:45,059 things you can do. You can read the map, 461 00:17:45,060 --> 00:17:46,129 you can show and highlight. 462 00:17:46,130 --> 00:17:48,259 Yes, it literally just what the title 463 00:17:48,260 --> 00:17:49,640 on the looked at and said 464 00:17:50,840 --> 00:17:51,840 a lot of stuff. 465 00:17:53,090 --> 00:17:55,159 And it's all 466 00:17:55,160 --> 00:17:56,869 still a lot of things that are missing 467 00:17:56,870 --> 00:17:58,369 and that we are adding every day. 468 00:17:58,370 --> 00:18:00,499 And so community at large is helping 469 00:18:00,500 --> 00:18:01,500 us. 470 00:18:01,820 --> 00:18:03,679 But there is one thing I want to stress 471 00:18:03,680 --> 00:18:06,289 out is that because the script 472 00:18:06,290 --> 00:18:08,779 is executed in the browser, 473 00:18:08,780 --> 00:18:11,059 some changes that are applied are 474 00:18:11,060 --> 00:18:13,549 applied only locally and especially 475 00:18:13,550 --> 00:18:15,679 if you edit a layer issue at the 476 00:18:15,680 --> 00:18:16,759 or something like that. 477 00:18:16,760 --> 00:18:19,339 By default, this is not shared 478 00:18:19,340 --> 00:18:21,019 with other players. 479 00:18:21,020 --> 00:18:23,209 So we need to add 480 00:18:23,210 --> 00:18:25,279 a communication mechanism 481 00:18:25,280 --> 00:18:27,709 between my player and 482 00:18:27,710 --> 00:18:30,049 other players in order 483 00:18:30,050 --> 00:18:32,299 to dispatch messages 484 00:18:32,300 --> 00:18:34,429 and so that people can see the same 485 00:18:34,430 --> 00:18:36,889 map and to do this 486 00:18:36,890 --> 00:18:39,259 well. When we added 487 00:18:39,260 --> 00:18:41,150 officials at the school valuables, 488 00:18:42,260 --> 00:18:44,389 so valuable thought was stuff like 489 00:18:44,390 --> 00:18:46,459 that live on the server 490 00:18:46,460 --> 00:18:48,859 and that in a browser 491 00:18:48,860 --> 00:18:51,229 when you use a w a 492 00:18:51,230 --> 00:18:53,089 state object, 493 00:18:54,470 --> 00:18:57,379 anything that you set here will be shared 494 00:18:57,380 --> 00:19:00,709 with with 495 00:19:00,710 --> 00:19:02,839 other browsers. What happens actually, is 496 00:19:02,840 --> 00:19:05,269 that when you call this 497 00:19:05,270 --> 00:19:07,729 the food that equals the bar, a 498 00:19:07,730 --> 00:19:09,829 message is sent Zappa's message 499 00:19:09,830 --> 00:19:11,899 API to the browser workers 500 00:19:11,900 --> 00:19:13,939 unsure when this addresses to the server, 501 00:19:13,940 --> 00:19:15,859 which will dispatch the message to other 502 00:19:15,860 --> 00:19:16,860 pages. 503 00:19:17,390 --> 00:19:19,429 Which will send the message back to the 504 00:19:19,430 --> 00:19:22,039 other eye, friends and hey, 505 00:19:22,040 --> 00:19:24,229 Siri, are states assured, shared and we 506 00:19:24,230 --> 00:19:26,299 have the same values 507 00:19:26,300 --> 00:19:28,189 in both places. 508 00:19:28,190 --> 00:19:30,230 And additionally, you can even 509 00:19:31,610 --> 00:19:33,889 listen to changes using unavoidable 510 00:19:33,890 --> 00:19:36,019 change here, which allows you to 511 00:19:36,020 --> 00:19:38,329 fire a callback 512 00:19:38,330 --> 00:19:39,919 when available is changed. 513 00:19:39,920 --> 00:19:42,589 So with this, we can share a state 514 00:19:42,590 --> 00:19:44,149 and display. 515 00:19:44,150 --> 00:19:46,039 For instance, if I've got the door, it 516 00:19:46,040 --> 00:19:48,169 can be open or closed, depending 517 00:19:48,170 --> 00:19:50,389 on the state of the variable, which will 518 00:19:50,390 --> 00:19:51,739 actually show or hide a. 519 00:19:54,440 --> 00:19:56,629 We have a lot of things to add in 520 00:19:56,630 --> 00:19:57,859 the scripting API. 521 00:19:57,860 --> 00:19:59,959 We need still to be able to track other 522 00:19:59,960 --> 00:20:00,960 players 523 00:20:02,120 --> 00:20:03,529 really, really a lot of things to do. 524 00:20:03,530 --> 00:20:05,359 And but the cool thing is that the 525 00:20:05,360 --> 00:20:07,459 community understood that and 526 00:20:07,460 --> 00:20:09,649 that most of the pull request received 527 00:20:09,650 --> 00:20:11,809 from the community are now made to 528 00:20:11,810 --> 00:20:14,089 change the scripting 529 00:20:14,090 --> 00:20:16,519 API and to allow everybody to 530 00:20:16,520 --> 00:20:18,739 want to have fun and to build cool 531 00:20:18,740 --> 00:20:19,740 stuff with it. 532 00:20:20,880 --> 00:20:23,159 Still, there 533 00:20:23,160 --> 00:20:25,319 are some limitations, as I 534 00:20:25,320 --> 00:20:27,539 told you, there are some books 535 00:20:27,540 --> 00:20:29,640 is, well, often getting in the way 536 00:20:31,020 --> 00:20:32,439 because there are some books. 537 00:20:32,440 --> 00:20:34,889 Ephraim does not have an origin, 538 00:20:34,890 --> 00:20:37,619 so it cannot make and 539 00:20:37,620 --> 00:20:39,989 calls because when I do an exceptional 540 00:20:39,990 --> 00:20:42,149 call, I need an origin and I 541 00:20:42,150 --> 00:20:43,409 can't do that anymore. 542 00:20:43,410 --> 00:20:45,539 And this is really a problem because 543 00:20:45,540 --> 00:20:47,159 often when you script them up, you want 544 00:20:47,160 --> 00:20:49,769 to be able to connect to something else. 545 00:20:49,770 --> 00:20:51,359 So is it really possible? 546 00:20:51,360 --> 00:20:53,429 Well, I'll show you how you can 547 00:20:53,430 --> 00:20:55,199 hack around this limitation. 548 00:20:56,520 --> 00:20:58,739 And the first trick is actually using 549 00:20:58,740 --> 00:21:01,349 web sockets because surprisingly 550 00:21:01,350 --> 00:21:03,449 enough, I was not aware of that. 551 00:21:03,450 --> 00:21:05,190 But web sockets are not 552 00:21:06,660 --> 00:21:08,789 bound to the same origin policy 553 00:21:08,790 --> 00:21:11,549 as anywhere 554 00:21:11,550 --> 00:21:12,719 in any webpage. 555 00:21:12,720 --> 00:21:14,189 If you open the web socket, you can 556 00:21:14,190 --> 00:21:16,289 connect to absolutely anywhere, which is 557 00:21:16,290 --> 00:21:17,290 pretty cool. 558 00:21:17,850 --> 00:21:19,739 So it means that from the scripting API 559 00:21:19,740 --> 00:21:22,019 here, if I open the web socket, 560 00:21:22,020 --> 00:21:24,179 I can connect to any server here. 561 00:21:24,180 --> 00:21:25,920 So a server I hold 562 00:21:27,030 --> 00:21:29,169 and it was just there to get data, 563 00:21:29,170 --> 00:21:31,559 whatever, but I can do this 564 00:21:31,560 --> 00:21:33,539 on the web socket instead of doing this 565 00:21:33,540 --> 00:21:34,540 with Accenture. 566 00:21:36,180 --> 00:21:38,329 The second trick, which is actually made 567 00:21:38,330 --> 00:21:40,649 it easier, is to use embedded 568 00:21:40,650 --> 00:21:41,650 iPhones. 569 00:21:42,420 --> 00:21:44,279 Since a few months. You can create old 570 00:21:44,280 --> 00:21:46,559 friends and put them inside maps, 571 00:21:47,730 --> 00:21:49,949 and those 572 00:21:49,950 --> 00:21:51,120 items actually 573 00:21:52,160 --> 00:21:54,769 buys those iPhones, actually. 574 00:21:55,920 --> 00:21:56,920 Well. 575 00:21:58,040 --> 00:22:00,629 They are posted on the website, 576 00:22:00,630 --> 00:22:02,749 but they are not in the same 577 00:22:02,750 --> 00:22:05,269 website as what adventure is. 578 00:22:05,270 --> 00:22:07,099 Which means that because of the same 579 00:22:07,100 --> 00:22:08,809 origin policy, so are not in the same 580 00:22:08,810 --> 00:22:10,639 domain. They cannot access the foreign 581 00:22:10,640 --> 00:22:12,769 frame and don't access 582 00:22:12,770 --> 00:22:13,819 apparent friend. 583 00:22:13,820 --> 00:22:16,159 I don't have to put 584 00:22:16,160 --> 00:22:18,499 the same books attributes on this iPhone, 585 00:22:18,500 --> 00:22:19,969 and if I don't have to put the sandbox 586 00:22:19,970 --> 00:22:22,249 attributes, you keep your own origin and 587 00:22:22,250 --> 00:22:24,669 you can do an actual request 588 00:22:24,670 --> 00:22:26,029 really easily. 589 00:22:26,030 --> 00:22:28,219 So my advice is actually, if 590 00:22:28,220 --> 00:22:30,469 you are building a script 591 00:22:30,470 --> 00:22:32,419 with walk alone, rather than using the 592 00:22:32,420 --> 00:22:34,639 native script feature, you 593 00:22:34,640 --> 00:22:36,859 put a really, really small I friend, 594 00:22:36,860 --> 00:22:38,329 you hide it in size and up. 595 00:22:38,330 --> 00:22:40,429 You put a script inside the atrium 596 00:22:40,430 --> 00:22:42,619 and you will be able to get to make 597 00:22:42,620 --> 00:22:44,689 much more sense with the native 598 00:22:44,690 --> 00:22:46,789 solution, which is kind of 599 00:22:46,790 --> 00:22:47,790 interesting. 600 00:22:48,470 --> 00:22:50,119 OK, quickly move. 601 00:22:51,410 --> 00:22:53,839 The first one is done by 602 00:22:53,840 --> 00:22:55,189 Jonathan. 603 00:22:55,190 --> 00:22:57,409 Again, it's a minesweeper. 604 00:22:57,410 --> 00:22:59,389 I would never have expected someone to do 605 00:22:59,390 --> 00:23:01,729 something like that, but well, 606 00:23:01,730 --> 00:23:03,979 as you can see this Typekit 607 00:23:03,980 --> 00:23:05,150 space probe. 608 00:23:06,520 --> 00:23:08,759 I can sit here. 609 00:23:08,760 --> 00:23:10,689 Well, I can play a minesweeper and I can, 610 00:23:10,690 --> 00:23:12,130 of course, blue on the mind, 611 00:23:14,440 --> 00:23:16,419 which is kind of fun, and this has been 612 00:23:16,420 --> 00:23:18,039 completely done with the scripting API 613 00:23:18,040 --> 00:23:19,989 and I designed that to open and close 614 00:23:19,990 --> 00:23:21,729 doors and suddenly I've got a full game 615 00:23:21,730 --> 00:23:24,009 in it and all I find is actually 616 00:23:24,010 --> 00:23:25,539 pretty, pretty cool. 617 00:23:25,540 --> 00:23:28,359 And the other remote is a wet one, 618 00:23:28,360 --> 00:23:30,639 which is done by Chuck Wood 619 00:23:30,640 --> 00:23:31,809 and Russell. 620 00:23:31,810 --> 00:23:32,810 And 621 00:23:34,360 --> 00:23:37,659 you can play the video at this point. 622 00:23:37,660 --> 00:23:40,269 And well, as you can see, 623 00:23:40,270 --> 00:23:43,059 well, it's a backgammon club 624 00:23:43,060 --> 00:23:44,060 where you can eat 625 00:23:45,580 --> 00:23:48,159 bugs and you can. 626 00:23:48,160 --> 00:23:49,119 It's a multiplayer game. 627 00:23:49,120 --> 00:23:51,219 And if you if a 628 00:23:51,220 --> 00:23:53,789 ghost is catching you, well, you left. 629 00:23:53,790 --> 00:23:55,959 Yeah. And this has 630 00:23:55,960 --> 00:23:57,579 been done well. 631 00:23:57,580 --> 00:23:59,769 Also completed with the scripting API and 632 00:23:59,770 --> 00:24:02,379 a lot of cool hacks to 633 00:24:02,380 --> 00:24:03,909 overcome the shortcomings of the 634 00:24:03,910 --> 00:24:04,910 scripting attack. 635 00:24:05,770 --> 00:24:07,359 So, yeah, so tomorrow. 636 00:24:07,360 --> 00:24:09,519 But well, what are we going to 637 00:24:09,520 --> 00:24:10,449 do? 638 00:24:10,450 --> 00:24:12,519 Well, I very much would like to make 639 00:24:12,520 --> 00:24:14,559 what content shows the ultimate sandbox, 640 00:24:14,560 --> 00:24:16,599 so I'll try to keep working on this API 641 00:24:16,600 --> 00:24:18,669 and opening more possibilities. 642 00:24:18,670 --> 00:24:20,700 And if you want to 643 00:24:21,980 --> 00:24:24,279 to play it with me. 644 00:24:24,280 --> 00:24:26,469 Well, you're welcome. 645 00:24:26,470 --> 00:24:29,199 Everything is on GitHub, and 646 00:24:29,200 --> 00:24:30,609 I would be really, really 647 00:24:32,080 --> 00:24:34,299 happy to see what amazing hacks 648 00:24:34,300 --> 00:24:36,669 you can come up with. 649 00:24:36,670 --> 00:24:37,670 So that's it. 650 00:24:38,680 --> 00:24:40,869 Well, I hope you enjoyed 651 00:24:40,870 --> 00:24:41,870 the. 652 00:24:42,220 --> 00:24:44,649 I'd be really I would be really happy to 653 00:24:44,650 --> 00:24:46,869 to to speak with you about it on the US 654 00:24:46,870 --> 00:24:48,999 ROG. If you're looking 655 00:24:49,000 --> 00:24:51,099 at a replay of the video. 656 00:24:51,100 --> 00:24:53,469 I'm also in my virtual office, usually 657 00:24:53,470 --> 00:24:55,929 at work and functions that are remote. 658 00:24:55,930 --> 00:24:58,029 And if you want to come and talk, 659 00:24:58,030 --> 00:25:00,219 I'm usually there so well, don't 660 00:25:00,220 --> 00:25:01,239 hesitate. 661 00:25:01,240 --> 00:25:02,749 So actually very much for watching, and 662 00:25:02,750 --> 00:25:04,209 that's OK. 663 00:25:04,210 --> 00:25:05,210 Bye bye. 664 00:25:08,990 --> 00:25:10,579 Yes, thank you, David, for this 665 00:25:10,580 --> 00:25:12,799 interesting talk about 666 00:25:12,800 --> 00:25:14,359 book adventure. 667 00:25:14,360 --> 00:25:16,579 Oh, a lot of 668 00:25:16,580 --> 00:25:19,189 people, we are creating the world 669 00:25:19,190 --> 00:25:22,009 we are inside this Congress, 670 00:25:22,010 --> 00:25:24,619 walking around, experience interesting 671 00:25:24,620 --> 00:25:26,959 places or working 672 00:25:26,960 --> 00:25:28,009 on that all the time. 673 00:25:28,010 --> 00:25:29,869 And now we have some advanced 674 00:25:29,870 --> 00:25:30,889 information. 675 00:25:30,890 --> 00:25:32,959 We can make this place even better 676 00:25:32,960 --> 00:25:35,209 if you need another virtual event 677 00:25:35,210 --> 00:25:37,669 of all, let people take place 678 00:25:37,670 --> 00:25:39,139 over the internet. 679 00:25:39,140 --> 00:25:41,299 Oh, you can join the Q&A if 680 00:25:41,300 --> 00:25:43,819 you have further questions on this 681 00:25:43,820 --> 00:25:46,099 on events dot 682 00:25:46,100 --> 00:25:48,289 Hexham dot org 683 00:25:49,460 --> 00:25:51,799 slash awesome don 684 00:25:51,800 --> 00:25:52,800 slash ADA. 685 00:25:53,870 --> 00:25:54,870 So please 686 00:25:56,330 --> 00:25:58,339 contact us in our Q&A. 687 00:25:58,340 --> 00:26:00,439 You can also use a QR code 688 00:26:00,440 --> 00:26:03,289 to get inside, and 689 00:26:03,290 --> 00:26:05,419 we will change over here right now. 690 00:26:05,420 --> 00:26:06,420 Thank you very much.