1 00:00:00,000 --> 00:00:08,469 foreign 2 00:00:00,500 --> 00:00:08,469 [Music] 3 00:00:11,219 --> 00:00:18,060 welcome back everybody now this morning 4 00:00:13,980 --> 00:00:20,240 we have got Andy here and he started 5 00:00:18,060 --> 00:00:22,920 hacking as a teenager with micro 6 00:00:20,240 --> 00:00:24,539 microprocessors were first available you 7 00:00:22,920 --> 00:00:26,820 had to build your own personal computer 8 00:00:24,539 --> 00:00:29,820 which was Quite a feat back then 9 00:00:26,820 --> 00:00:31,260 since the start of 2016 Andy's developed 10 00:00:29,820 --> 00:00:34,260 machine learning applications for 11 00:00:31,260 --> 00:00:36,480 Robotics and drones today they'll be 12 00:00:34,260 --> 00:00:38,760 talking about an open source distributed 13 00:00:36,480 --> 00:00:41,460 embedded framework that consolidates 14 00:00:38,760 --> 00:00:44,340 artificial intelligence robotics The 15 00:00:41,460 --> 00:00:46,440 Internet of Things media streaming and 16 00:00:44,340 --> 00:00:48,860 machine learning pipelines into a single 17 00:00:46,440 --> 00:00:50,850 cohesive platform 18 00:00:48,860 --> 00:00:52,820 thank you 19 00:00:50,850 --> 00:00:55,199 [Applause] 20 00:00:52,820 --> 00:00:56,760 hello everyone it's really fantastic to 21 00:00:55,199 --> 00:00:58,440 see everyone sort of it's a bit dark 22 00:00:56,760 --> 00:01:00,020 although I really wish I was sitting 23 00:00:58,440 --> 00:01:02,280 with you not not up here 24 00:01:00,020 --> 00:01:03,780 listening to the title author and I 25 00:01:02,280 --> 00:01:06,060 thought gosh that sounds a bit arrogant 26 00:01:03,780 --> 00:01:09,060 and ambitious but um well having having 27 00:01:06,060 --> 00:01:11,460 a good work at it I think my slides are 28 00:01:09,060 --> 00:01:13,500 probably a little bit text dense usual 29 00:01:11,460 --> 00:01:15,960 engineering fault um that URL at the 30 00:01:13,500 --> 00:01:18,600 bottom in yellow that's the slide so if 31 00:01:15,960 --> 00:01:21,479 you have a mobile device now jump on 32 00:01:18,600 --> 00:01:23,400 jump on that Tony URL and uh you might 33 00:01:21,479 --> 00:01:25,560 be able to see the sides close up 34 00:01:23,400 --> 00:01:27,900 so I've been working on this project 35 00:01:25,560 --> 00:01:31,560 with several people for a long long time 36 00:01:27,900 --> 00:01:33,840 now and one of the aspirations was to uh 37 00:01:31,560 --> 00:01:35,460 be able to have it used commercially 38 00:01:33,840 --> 00:01:37,259 because it's so hard to do 39 00:01:35,460 --> 00:01:39,540 um you know open source development you 40 00:01:37,259 --> 00:01:41,640 know just in nights and weekends and so 41 00:01:39,540 --> 00:01:44,340 um well the good news is uh last Friday 42 00:01:41,640 --> 00:01:46,860 the company I worked for soap on agreed 43 00:01:44,340 --> 00:01:48,119 to a big open source so you know if you 44 00:01:46,860 --> 00:01:49,979 do like what you're here today you'll be 45 00:01:48,119 --> 00:01:52,439 able to have a bit of a play 46 00:01:49,979 --> 00:01:54,119 but before I start should um welcome to 47 00:01:52,439 --> 00:01:56,700 the country I begin today by 48 00:01:54,119 --> 00:01:58,740 acknowledging the jury Warren people of 49 00:01:56,700 --> 00:02:00,180 the cooling Nation the traditional 50 00:01:58,740 --> 00:02:02,460 custodians of land on which We Gather 51 00:02:00,180 --> 00:02:04,320 today I pay my respects to their Elders 52 00:02:02,460 --> 00:02:05,759 past and present I extend their respect 53 00:02:04,320 --> 00:02:08,600 to Aboriginal and Torres Strait Islander 54 00:02:05,759 --> 00:02:08,600 pupils here today 55 00:02:09,360 --> 00:02:14,819 so uh just uh taking Hughes lead 56 00:02:12,239 --> 00:02:16,920 um uh Back in the Day live playing a bit 57 00:02:14,819 --> 00:02:18,900 Micro Control microprocessors and still 58 00:02:16,920 --> 00:02:21,959 do now so this is one of my background 59 00:02:18,900 --> 00:02:24,239 projects it's a 6502 60 00:02:21,959 --> 00:02:25,800 um but rather than an original 61 00:02:24,239 --> 00:02:27,900 um chip that you can get these days and 62 00:02:25,800 --> 00:02:29,760 get 40 megahertz chips um you know throw 63 00:02:27,900 --> 00:02:31,560 a lot of ram at it up on the top left 64 00:02:29,760 --> 00:02:34,379 there's a little digital oscilloscope so 65 00:02:31,560 --> 00:02:37,379 I can look at the clocks and um and also 66 00:02:34,379 --> 00:02:39,900 using a Arduino from from John that uh 67 00:02:37,379 --> 00:02:43,500 basically can load the Ram with programs 68 00:02:39,900 --> 00:02:45,780 I can move the clock from from zero up 69 00:02:43,500 --> 00:02:47,519 to a few megahertz and also monitor the 70 00:02:45,780 --> 00:02:49,019 address bus so just so much easier today 71 00:02:47,519 --> 00:02:51,300 you know to play with this stuff 72 00:02:49,019 --> 00:02:52,980 compared to where it used to be and uh 73 00:02:51,300 --> 00:02:54,660 yeah and we're on C compile it's got a 74 00:02:52,980 --> 00:02:56,280 little lisp interpreter it's a lot of 75 00:02:54,660 --> 00:02:58,620 fun 76 00:02:56,280 --> 00:03:00,060 and uh and this is how I guess many of 77 00:02:58,620 --> 00:03:02,099 us in the room room started you could 78 00:03:00,060 --> 00:03:03,959 really um it's very tangible you could 79 00:03:02,099 --> 00:03:05,400 um you write code and also play with the 80 00:03:03,959 --> 00:03:07,080 hardware and uh I think these days 81 00:03:05,400 --> 00:03:09,780 there's many layers of attraction that 82 00:03:07,080 --> 00:03:11,400 sort of keep us away from that 83 00:03:09,780 --> 00:03:13,560 um mother Mother's or hobby is uh 84 00:03:11,400 --> 00:03:16,260 playing playing the Astra and uh and 85 00:03:13,560 --> 00:03:17,580 dogs sorry robot dogs 86 00:03:16,260 --> 00:03:19,019 um so this is very much a work in 87 00:03:17,580 --> 00:03:20,760 progress but heading heading towards 88 00:03:19,019 --> 00:03:23,760 these things to bring this Confluence of 89 00:03:20,760 --> 00:03:26,640 um our iot devices plus robotics plus 90 00:03:23,760 --> 00:03:28,260 plus video nml so um just yeah just to 91 00:03:26,640 --> 00:03:29,580 play games at home and also actually 92 00:03:28,260 --> 00:03:31,560 hopefully do something valuable in the 93 00:03:29,580 --> 00:03:34,980 world 94 00:03:31,560 --> 00:03:36,360 okay so here's this morning to um show 95 00:03:34,980 --> 00:03:38,099 off this piece of work called Ico 96 00:03:36,360 --> 00:03:40,379 services this framework 97 00:03:38,099 --> 00:03:42,480 um I I did cheat and use chat CPT just 98 00:03:40,379 --> 00:03:44,340 just to pick a three-word title for this 99 00:03:42,480 --> 00:03:45,659 slide and that was that was it 100 00:03:44,340 --> 00:03:47,159 um but but I've got to keep up with the 101 00:03:45,659 --> 00:03:49,220 cool kids 102 00:03:47,159 --> 00:03:49,220 um 103 00:03:50,760 --> 00:03:53,940 um I work I work at Silver Pond which is 104 00:03:52,560 --> 00:03:55,680 fantastic place 105 00:03:53,940 --> 00:03:58,140 um the business team and the engineer 106 00:03:55,680 --> 00:04:00,780 Engineers are great we basically make 107 00:03:58,140 --> 00:04:02,760 machine learning products and I'm a 108 00:04:00,780 --> 00:04:04,440 systems engineer and I basically do the 109 00:04:02,760 --> 00:04:08,280 infrastructure of support and those sort 110 00:04:04,440 --> 00:04:10,580 of things and as often as I can hang out 111 00:04:08,280 --> 00:04:12,659 with friends at the hackerspace and 112 00:04:10,580 --> 00:04:14,519 basically play of devices and robots 113 00:04:12,659 --> 00:04:17,639 there in my spare time 114 00:04:14,519 --> 00:04:18,900 uh so today we'll trust this embedded 115 00:04:17,639 --> 00:04:21,540 framework I'm trying to give you some 116 00:04:18,900 --> 00:04:23,280 context I was thinking at first I'll 117 00:04:21,540 --> 00:04:24,600 just you know just big lead up and the 118 00:04:23,280 --> 00:04:26,340 big demonstration at the end I thought 119 00:04:24,600 --> 00:04:27,900 no that'd be the worst why does give you 120 00:04:26,340 --> 00:04:29,820 the give the demonstration the start and 121 00:04:27,900 --> 00:04:31,860 if you like it you can stay 122 00:04:29,820 --> 00:04:33,120 um we're gonna Crash and Burn early 123 00:04:31,860 --> 00:04:35,820 um try and cover what this framework 124 00:04:33,120 --> 00:04:37,620 might be good for how it differs try and 125 00:04:35,820 --> 00:04:40,139 give some technical details but not no 126 00:04:37,620 --> 00:04:41,220 not try to boil your death 127 00:04:40,139 --> 00:04:43,259 um although I couldn't tell if you're 128 00:04:41,220 --> 00:04:45,240 sleeping or not and then I also just 129 00:04:43,259 --> 00:04:46,860 covered some of the aspects of uh of 130 00:04:45,240 --> 00:04:48,540 trying to get a Synergy or the best 131 00:04:46,860 --> 00:04:50,880 outcome of working both commercially and 132 00:04:48,540 --> 00:04:52,080 and as a community developer and then 133 00:04:50,880 --> 00:04:53,699 maybe discuss a little bit about what 134 00:04:52,080 --> 00:04:55,440 next 135 00:04:53,699 --> 00:04:58,139 Okay so 136 00:04:55,440 --> 00:05:00,720 you know it goes about saying it's been 137 00:04:58,139 --> 00:05:03,360 an extraordinary time over the last 60 138 00:05:00,720 --> 00:05:04,740 years 30 years 10 years 139 00:05:03,360 --> 00:05:06,720 um you know all the software could 140 00:05:04,740 --> 00:05:07,919 possibly want just there at a touch of a 141 00:05:06,720 --> 00:05:09,600 button 142 00:05:07,919 --> 00:05:10,740 um you know or and for those fortunate 143 00:05:09,600 --> 00:05:12,600 enough we'd say basically have you know 144 00:05:10,740 --> 00:05:14,400 we're connected all the time out of our 145 00:05:12,600 --> 00:05:15,600 devices in our home in our pockets and 146 00:05:14,400 --> 00:05:17,100 so on 147 00:05:15,600 --> 00:05:19,560 um the hardware we have now is amazing 148 00:05:17,100 --> 00:05:20,820 now just looking at the numbers 149 00:05:19,560 --> 00:05:22,919 um you know the transistor count so 150 00:05:20,820 --> 00:05:24,840 looking back to that first slide that 151 00:05:22,919 --> 00:05:25,800 microprocessors knows today's like 6502 152 00:05:24,840 --> 00:05:27,419 about three and a half thousand 153 00:05:25,800 --> 00:05:29,580 transistors 154 00:05:27,419 --> 00:05:32,400 um a clock rate of megahertz and uh yeah 155 00:05:29,580 --> 00:05:34,199 one core uh these days 156 00:05:32,400 --> 00:05:36,419 um the clock the transistor count is 157 00:05:34,199 --> 00:05:37,979 about six orders magnitude greater the 158 00:05:36,419 --> 00:05:39,600 clock three sort of actually greater and 159 00:05:37,979 --> 00:05:41,940 the the cores you know maybe a magnet 160 00:05:39,600 --> 00:05:44,639 about a thousand times fold so it comes 161 00:05:41,940 --> 00:05:47,039 to about 10 to the 12 increase in uh in 162 00:05:44,639 --> 00:05:50,100 I guess raw horsepower it's pretty crazy 163 00:05:47,039 --> 00:05:53,520 but that's that's what's enabling uh AI 164 00:05:50,100 --> 00:05:56,220 with its um insatiable need for our data 165 00:05:53,520 --> 00:05:58,380 and and compute and it goes about saying 166 00:05:56,220 --> 00:06:01,800 that last year was um pretty amazing in 167 00:05:58,380 --> 00:06:04,020 the way that just from a website pretty 168 00:06:01,800 --> 00:06:05,340 much anyone who's connected Can can play 169 00:06:04,020 --> 00:06:07,259 with these tools now and Achieve 170 00:06:05,340 --> 00:06:10,620 extraordinary results and uh just 171 00:06:07,259 --> 00:06:13,080 yesterday open AI I did a case a bit of 172 00:06:10,620 --> 00:06:15,600 a preview on gpt4 which might be out for 173 00:06:13,080 --> 00:06:16,740 a few months it sounds like but yeah 174 00:06:15,600 --> 00:06:18,300 there's a link there for anyone who's 175 00:06:16,740 --> 00:06:21,360 interested it's just um just a short 176 00:06:18,300 --> 00:06:22,860 demo by this the co-founder and 177 00:06:21,360 --> 00:06:25,800 basically they just lifted the game on 178 00:06:22,860 --> 00:06:30,539 most mostly what it does 179 00:06:25,800 --> 00:06:31,680 okay so you hear that um if uh if you 180 00:06:30,539 --> 00:06:33,120 sort of can describe the problem you're 181 00:06:31,680 --> 00:06:34,440 halfway to a solution 182 00:06:33,120 --> 00:06:36,360 um and sometimes it feels like that but 183 00:06:34,440 --> 00:06:38,340 other times just go no it still seems 184 00:06:36,360 --> 00:06:40,979 like a ton of work to do but anyone 185 00:06:38,340 --> 00:06:42,900 who's um Works any of these domains of 186 00:06:40,979 --> 00:06:44,100 innovative things I might work with 187 00:06:42,900 --> 00:06:45,539 media 188 00:06:44,100 --> 00:06:47,340 um yeah you're in there more space or 189 00:06:45,539 --> 00:06:48,660 robotics each of these things pretty 190 00:06:47,340 --> 00:06:50,100 much you know more than a career's worth 191 00:06:48,660 --> 00:06:52,860 and they will have different Frameworks 192 00:06:50,100 --> 00:06:55,500 and tooling and and it's um you know it 193 00:06:52,860 --> 00:06:56,460 can be quite a difficult you want to 194 00:06:55,500 --> 00:06:59,940 pull your hair out and try to integrate 195 00:06:56,460 --> 00:07:01,680 these Technologies and so um yeah the 196 00:06:59,940 --> 00:07:02,880 hardware is different the uh you know 197 00:07:01,680 --> 00:07:04,199 your concerns when doing media are 198 00:07:02,880 --> 00:07:06,600 different from when you're when you're 199 00:07:04,199 --> 00:07:07,979 doing machine learning and uh and and 200 00:07:06,600 --> 00:07:09,180 yet if you want to build these um some 201 00:07:07,979 --> 00:07:11,699 Modern applications you need to bring 202 00:07:09,180 --> 00:07:13,080 all these things together coherently and 203 00:07:11,699 --> 00:07:15,139 on top of that there's also just all the 204 00:07:13,080 --> 00:07:16,979 other concerns you have in terms of um 205 00:07:15,139 --> 00:07:18,240 failure and security 206 00:07:16,979 --> 00:07:19,199 um you know how to configure how do you 207 00:07:18,240 --> 00:07:20,220 persist 208 00:07:19,199 --> 00:07:22,319 um you know if you've got multiple 209 00:07:20,220 --> 00:07:23,880 programming languages so it's pretty 210 00:07:22,319 --> 00:07:25,500 challenging to um you know to Google 211 00:07:23,880 --> 00:07:28,139 systems these days whether they're 212 00:07:25,500 --> 00:07:29,460 reasonably reliable robust secure and so 213 00:07:28,139 --> 00:07:31,800 on 214 00:07:29,460 --> 00:07:34,740 let's check to check 215 00:07:31,800 --> 00:07:36,599 cool all right so yeah so I'm just going 216 00:07:34,740 --> 00:07:39,419 to head off start off with the demo 217 00:07:36,599 --> 00:07:40,919 um uh I was very kindly allowed to to 218 00:07:39,419 --> 00:07:42,599 use this even though you know business 219 00:07:40,919 --> 00:07:44,220 people know are very very concerned 220 00:07:42,599 --> 00:07:45,780 about how an engineer presents stuff 221 00:07:44,220 --> 00:07:48,240 because you know we don't we don't mind 222 00:07:45,780 --> 00:07:50,099 things being a bit ratty and daggy and 223 00:07:48,240 --> 00:07:52,940 this is really just here to show off the 224 00:07:50,099 --> 00:07:55,860 The Open Source framework 225 00:07:52,940 --> 00:07:57,660 uh yeah so I said I worked for a local 226 00:07:55,860 --> 00:08:00,599 machine Learning Company 227 00:07:57,660 --> 00:08:02,639 um and we've done the classic pivot from 228 00:08:00,599 --> 00:08:04,979 Consulting over the years to to try and 229 00:08:02,639 --> 00:08:07,979 productize what we do and that's uh it 230 00:08:04,979 --> 00:08:09,900 can be quite challenging and and the 231 00:08:07,979 --> 00:08:11,460 actual product itself is much much more 232 00:08:09,900 --> 00:08:14,759 than uh the the piece of work I'm 233 00:08:11,460 --> 00:08:16,199 showing you today uh but uh but this is 234 00:08:14,759 --> 00:08:19,020 probably the best demonstration of what 235 00:08:16,199 --> 00:08:21,780 I can do in terms of um the uh you know 236 00:08:19,020 --> 00:08:24,479 using webrtc for video 237 00:08:21,780 --> 00:08:26,699 um capturing data from a device either a 238 00:08:24,479 --> 00:08:28,199 camera or in this case a little Ikea 239 00:08:26,699 --> 00:08:29,099 train 240 00:08:28,199 --> 00:08:31,259 um 241 00:08:29,099 --> 00:08:33,959 and uh yeah so I have to have to show 242 00:08:31,259 --> 00:08:35,459 and also when you um when you're doing 243 00:08:33,959 --> 00:08:37,440 commercial work you you're confronted 244 00:08:35,459 --> 00:08:39,599 with problems that um you know you may 245 00:08:37,440 --> 00:08:42,180 not get when just doing your hobbyist 246 00:08:39,599 --> 00:08:43,260 work uh because when you're um I know 247 00:08:42,180 --> 00:08:44,459 when I'm doing my own projects I 248 00:08:43,260 --> 00:08:45,779 particularly try and do the things I I 249 00:08:44,459 --> 00:08:47,459 know I think it will I'll be able to get 250 00:08:45,779 --> 00:08:49,320 away with you know basically tail of my 251 00:08:47,459 --> 00:08:51,860 my efforts to something I think will be 252 00:08:49,320 --> 00:08:54,060 doable where it's often cut clients or 253 00:08:51,860 --> 00:08:56,880 give you such a situation which you go 254 00:08:54,060 --> 00:08:58,019 oh man it's so hard to do something a 255 00:08:56,880 --> 00:08:59,459 little bit easier 256 00:08:58,019 --> 00:09:00,540 um but it is a good opportunity to 257 00:08:59,459 --> 00:09:03,060 really make sure your work is Battle 258 00:09:00,540 --> 00:09:04,920 tested and uh and I believe very 259 00:09:03,060 --> 00:09:07,200 strongly that um there's good synergies 260 00:09:04,920 --> 00:09:08,940 between commercial and community that um 261 00:09:07,200 --> 00:09:10,560 you know we just have to look around you 262 00:09:08,940 --> 00:09:13,019 today to know how the quality of people 263 00:09:10,560 --> 00:09:14,700 uh they're out there in in our community 264 00:09:13,019 --> 00:09:17,160 and around the world 265 00:09:14,700 --> 00:09:19,140 um and uh and also but but you also know 266 00:09:17,160 --> 00:09:21,120 we're always struggling for funds and uh 267 00:09:19,140 --> 00:09:24,360 and an opportunity of people finding 268 00:09:21,120 --> 00:09:27,380 work and so on so I think um they bring 269 00:09:24,360 --> 00:09:29,519 these two two different um I guess 270 00:09:27,380 --> 00:09:31,980 organizations you know the 271 00:09:29,519 --> 00:09:33,200 the community or commercial is really 272 00:09:31,980 --> 00:09:36,000 important 273 00:09:33,200 --> 00:09:38,279 so what I found is uh I've been working 274 00:09:36,000 --> 00:09:41,040 as a very very long time and actually 275 00:09:38,279 --> 00:09:42,660 conceptually so it's been used on nearly 276 00:09:41,040 --> 00:09:45,480 four projects now through my career just 277 00:09:42,660 --> 00:09:48,540 as I've gone from from job to job and uh 278 00:09:45,480 --> 00:09:49,440 and it's gradually got better and uh but 279 00:09:48,540 --> 00:09:51,959 one one thing that sort of happened 280 00:09:49,440 --> 00:09:53,339 during lockdown was um yeah we normally 281 00:09:51,959 --> 00:09:56,160 try and Achieve work-life balance you 282 00:09:53,339 --> 00:09:57,899 know be social and family and stay 283 00:09:56,160 --> 00:09:59,339 healthy and so on and just for 284 00:09:57,899 --> 00:10:01,580 enrollment at least for at least about a 285 00:09:59,339 --> 00:10:04,380 year and a half is like nup 286 00:10:01,580 --> 00:10:06,000 uh there's a very unfortunate situation 287 00:10:04,380 --> 00:10:07,500 but I was thinking to myself well if I 288 00:10:06,000 --> 00:10:08,940 can't get this project done now when I'm 289 00:10:07,500 --> 00:10:11,640 not allowed to leave the house 290 00:10:08,940 --> 00:10:13,740 and and that's the stuff I will I'll 291 00:10:11,640 --> 00:10:14,880 never get it done so um I thought you 292 00:10:13,740 --> 00:10:16,440 know this might take you know six months 293 00:10:14,880 --> 00:10:18,000 to a year and here we are three and a 294 00:10:16,440 --> 00:10:20,519 half years later and uh yeah it's still 295 00:10:18,000 --> 00:10:21,660 a lot to do but but it's true if it 296 00:10:20,519 --> 00:10:24,300 wasn't for 297 00:10:21,660 --> 00:10:25,560 um being locked away in my own home for 298 00:10:24,300 --> 00:10:26,760 for many months that would never 299 00:10:25,560 --> 00:10:29,279 happened 300 00:10:26,760 --> 00:10:31,680 okay so and then just to give some 301 00:10:29,279 --> 00:10:33,540 context uh this is a little bit of 302 00:10:31,680 --> 00:10:35,700 framework basically performs uh sort of 303 00:10:33,540 --> 00:10:36,839 the infrastructure for um a bigger 304 00:10:35,700 --> 00:10:38,220 product at work at least in terms of 305 00:10:36,839 --> 00:10:41,459 some of the back end and some of the 306 00:10:38,220 --> 00:10:43,620 distributed computing aspects and um and 307 00:10:41,459 --> 00:10:45,180 uh what this it's been often when you're 308 00:10:43,620 --> 00:10:47,220 um work in your organization have to do 309 00:10:45,180 --> 00:10:48,240 that thing today yeah you don't have two 310 00:10:47,220 --> 00:10:49,680 weeks to get it right you have to 311 00:10:48,240 --> 00:10:51,240 basically you know do something for a 312 00:10:49,680 --> 00:10:52,800 client that you know that you um have to 313 00:10:51,240 --> 00:10:54,600 immediately about give me all the 314 00:10:52,800 --> 00:10:57,120 thought it needs whereas um sometimes 315 00:10:54,600 --> 00:10:58,380 we've um you know without open source 316 00:10:57,120 --> 00:11:00,540 working here we can take you can take 317 00:10:58,380 --> 00:11:02,459 the time overnight or weekend to um 318 00:11:00,540 --> 00:11:03,800 to think through that design or 319 00:11:02,459 --> 00:11:05,820 basically 320 00:11:03,800 --> 00:11:07,079 improve some of that Tech debt and how 321 00:11:05,820 --> 00:11:09,240 it really sucks but you'll never have 322 00:11:07,079 --> 00:11:12,060 the priority to do on Monday 323 00:11:09,240 --> 00:11:14,760 okay so this is a bit of a conceptual 324 00:11:12,060 --> 00:11:16,560 view of the overall a product basically 325 00:11:14,760 --> 00:11:17,339 the idea is to take uh data from the 326 00:11:16,560 --> 00:11:20,519 field 327 00:11:17,339 --> 00:11:22,560 um it could be uh devices and things out 328 00:11:20,519 --> 00:11:24,240 you know basically maybe cameras in the 329 00:11:22,560 --> 00:11:26,100 city like looking after the road system 330 00:11:24,240 --> 00:11:29,279 or could be in rural basically looking 331 00:11:26,100 --> 00:11:31,800 after um cows surprisingly cockroaches I 332 00:11:29,279 --> 00:11:33,720 think but yeah but basically um where's 333 00:11:31,800 --> 00:11:36,060 your livestock or basically Resource 334 00:11:33,720 --> 00:11:37,560 Management all the oceans so one project 335 00:11:36,060 --> 00:11:39,120 we've worked on is basically fish fish 336 00:11:37,560 --> 00:11:41,160 counting to make sure that the state of 337 00:11:39,120 --> 00:11:43,260 the fish stock and helping marine 338 00:11:41,160 --> 00:11:45,200 biologists so that comes in as a series 339 00:11:43,260 --> 00:11:47,700 of Rich data and streams it could be um 340 00:11:45,200 --> 00:11:48,720 GPS location it could be lighter it 341 00:11:47,700 --> 00:11:50,579 could be video it could be hyper 342 00:11:48,720 --> 00:11:51,899 spectral and then you basically want to 343 00:11:50,579 --> 00:11:54,360 um send that through data center 344 00:11:51,899 --> 00:11:55,200 pipelines and one one of the advantages 345 00:11:54,360 --> 00:11:57,839 of 346 00:11:55,200 --> 00:11:59,339 um doing things the data center is uh is 347 00:11:57,839 --> 00:12:00,660 that you get the information from all of 348 00:11:59,339 --> 00:12:04,019 your devices in the field so basically 349 00:12:00,660 --> 00:12:05,459 get this more um of omnisone sort of 350 00:12:04,019 --> 00:12:06,779 overview and make decisions that you 351 00:12:05,459 --> 00:12:07,740 can't make as an individual device on 352 00:12:06,779 --> 00:12:10,380 the edge 353 00:12:07,740 --> 00:12:11,820 and then that goes through we basically 354 00:12:10,380 --> 00:12:13,920 integrate to our other people's 355 00:12:11,820 --> 00:12:17,700 Enterprise systems they can which they 356 00:12:13,920 --> 00:12:21,180 can uh make sense today themselves and 357 00:12:17,700 --> 00:12:21,839 also basically use ontology or taxonomy 358 00:12:21,180 --> 00:12:22,459 to 359 00:12:21,839 --> 00:12:25,019 um 360 00:12:22,459 --> 00:12:25,980 break down the uh I guess the 361 00:12:25,019 --> 00:12:27,540 relationships between the things you're 362 00:12:25,980 --> 00:12:29,160 seeing in the world so that's sort of 363 00:12:27,540 --> 00:12:31,200 what it's saying to do 364 00:12:29,160 --> 00:12:34,079 okay so what about shows um this is a 365 00:12:31,200 --> 00:12:36,680 bit more of a complex view the 366 00:12:34,079 --> 00:12:39,240 the blue bits are basically about webrtc 367 00:12:36,680 --> 00:12:41,640 webrtc is pretty amazing and basically 368 00:12:39,240 --> 00:12:43,200 allows you to have bi-directional audio 369 00:12:41,640 --> 00:12:44,480 video and data that gets through 370 00:12:43,200 --> 00:12:47,639 firewalls 371 00:12:44,480 --> 00:12:50,160 and anyone's using it as a result of 372 00:12:47,639 --> 00:12:54,180 covert on the earlier on Zoom meetings 373 00:12:50,160 --> 00:12:55,019 so so there's a a part of this race you 374 00:12:54,180 --> 00:12:56,820 have to set up the web artistic 375 00:12:55,019 --> 00:12:58,500 connection all the white bits they're 376 00:12:56,820 --> 00:13:00,360 all they're all services that are where 377 00:12:58,500 --> 00:13:02,459 we basically sit on this framework of 378 00:13:00,360 --> 00:13:04,800 sending messages to each other and the 379 00:13:02,459 --> 00:13:06,600 uh because the uh the green the green 380 00:13:04,800 --> 00:13:08,880 bits is just the underlying um mosquito 381 00:13:06,600 --> 00:13:10,380 so what we end up with is a a web 382 00:13:08,880 --> 00:13:13,320 browser is going to 383 00:13:10,380 --> 00:13:14,579 um over websockets talk to the back end 384 00:13:13,320 --> 00:13:15,720 to the registrar find out what sort of 385 00:13:14,579 --> 00:13:17,339 services they are they're particularly 386 00:13:15,720 --> 00:13:19,320 interest in the data sources like like 387 00:13:17,339 --> 00:13:21,180 the cam the camera from the train an 388 00:13:19,320 --> 00:13:23,279 rtsp camera in our office which I should 389 00:13:21,180 --> 00:13:26,040 have checked before I'm presenting today 390 00:13:23,279 --> 00:13:28,740 and also I'd like to see a camera on my 391 00:13:26,040 --> 00:13:30,480 laptop uh it's the selected data source 392 00:13:28,740 --> 00:13:32,700 which that allows the web browser to go 393 00:13:30,480 --> 00:13:35,040 to the signaling server uh to set up the 394 00:13:32,700 --> 00:13:36,959 webrtc connection uh once that's good at 395 00:13:35,040 --> 00:13:38,160 the web server can then talk sorry the 396 00:13:36,959 --> 00:13:40,560 web browsing and talk to the back end 397 00:13:38,160 --> 00:13:43,260 webrtc manager to then set up a session 398 00:13:40,560 --> 00:13:44,940 client and then once that's all good the 399 00:13:43,260 --> 00:13:48,120 data stream soon ends up going to the ml 400 00:13:44,940 --> 00:13:50,220 model then back to back to your laptop 401 00:13:48,120 --> 00:13:51,839 um photos is worth mentioning 402 00:13:50,220 --> 00:13:54,000 um oh and also interestingly enough um 403 00:13:51,839 --> 00:13:55,560 the it's what the web browser workers 404 00:13:54,000 --> 00:13:57,420 all in go 405 00:13:55,560 --> 00:13:58,980 um on top of azim which is very very 406 00:13:57,420 --> 00:14:00,959 cool so basically the same run the same 407 00:13:58,980 --> 00:14:03,360 code in the browser as the back end okay 408 00:14:00,959 --> 00:14:04,680 well let's see if I can bring this 409 00:14:03,360 --> 00:14:06,959 together 410 00:14:04,680 --> 00:14:09,300 so 411 00:14:06,959 --> 00:14:11,480 I'll just just refresh this 412 00:14:09,300 --> 00:14:14,639 so this is the web browser view 413 00:14:11,480 --> 00:14:17,639 what you'll notice is up in the top left 414 00:14:14,639 --> 00:14:19,980 is a number of services the the mock 415 00:14:17,639 --> 00:14:22,139 train the live office camera and face 416 00:14:19,980 --> 00:14:24,120 detection in the middle is the chart so 417 00:14:22,139 --> 00:14:26,060 having found the services so I'm just a 418 00:14:24,120 --> 00:14:29,700 quick look at one 419 00:14:26,060 --> 00:14:31,920 so using eventual consistency of over um 420 00:14:29,700 --> 00:14:33,779 effectively over mqt all the data about 421 00:14:31,920 --> 00:14:36,720 that train is coming coming back to here 422 00:14:33,779 --> 00:14:38,339 like it's location at speed and also it 423 00:14:36,720 --> 00:14:40,079 also provides UI hints it says look go 424 00:14:38,339 --> 00:14:42,660 and put the put my GPS coordinates on a 425 00:14:40,079 --> 00:14:44,279 map put my speed on a chart so just off 426 00:14:42,660 --> 00:14:46,560 the screen here there's some chart 427 00:14:44,279 --> 00:14:49,820 information for all those devices 428 00:14:46,560 --> 00:14:51,839 and just to show you on the back end 429 00:14:49,820 --> 00:14:52,920 you can see that's the actual devices 430 00:14:51,839 --> 00:14:54,180 they've got a little dashboard which 431 00:14:52,920 --> 00:14:55,500 I'll talk more about later and if we 432 00:14:54,180 --> 00:14:57,779 look at that train we can actually see 433 00:14:55,500 --> 00:14:59,220 the same GPS coordinates here in that 434 00:14:57,779 --> 00:15:01,440 middle View 435 00:14:59,220 --> 00:15:03,720 so so one of the goals the system is to 436 00:15:01,440 --> 00:15:05,040 make um complex systems be able to 437 00:15:03,720 --> 00:15:06,300 inspect any part of them and see what's 438 00:15:05,040 --> 00:15:08,699 going on 439 00:15:06,300 --> 00:15:11,120 so let's uh let's see if this works 440 00:15:08,699 --> 00:15:11,120 um right 441 00:15:11,519 --> 00:15:15,060 it's my presentation here's the real 442 00:15:13,380 --> 00:15:17,160 thing 443 00:15:15,060 --> 00:15:19,019 okay 444 00:15:17,160 --> 00:15:20,940 so this is basically taking a 445 00:15:19,019 --> 00:15:23,490 pre-recorded video file because um the 446 00:15:20,940 --> 00:15:26,559 Train the train is here today 447 00:15:23,490 --> 00:15:26,559 [Music] 448 00:15:27,959 --> 00:15:33,740 like what I can do is I can check the 449 00:15:30,000 --> 00:15:33,740 check the back end see why it's 450 00:15:35,519 --> 00:15:38,420 a refresh 451 00:15:38,940 --> 00:15:43,440 oh here we go yeah your team 452 00:15:41,220 --> 00:15:44,880 so that that's video that's being sent 453 00:15:43,440 --> 00:15:46,920 uh sent through the back end to the 454 00:15:44,880 --> 00:15:48,959 front end with webrtc 455 00:15:46,920 --> 00:15:51,720 um on normal stances so be going through 456 00:15:48,959 --> 00:15:54,720 the ml model and uh and if it checks uh 457 00:15:51,720 --> 00:15:57,000 signs or buildings or or um trees that 458 00:15:54,720 --> 00:16:00,120 let you know so that's sort of the first 459 00:15:57,000 --> 00:16:02,100 thing now the second thing I'd do is um 460 00:16:00,120 --> 00:16:03,360 and go up to here and I can send a 461 00:16:02,100 --> 00:16:05,160 command through to the train from the 462 00:16:03,360 --> 00:16:07,500 web browser just saying just saying stop 463 00:16:05,160 --> 00:16:09,000 and so we can see that we don't have 464 00:16:07,500 --> 00:16:10,920 video stop and so it's one of the trains 465 00:16:09,000 --> 00:16:12,959 and if we look at the back if we look at 466 00:16:10,920 --> 00:16:14,519 the back end we can see the the trains 467 00:16:12,959 --> 00:16:16,920 also stopped in its actual state has 468 00:16:14,519 --> 00:16:18,839 gone from from running to false 469 00:16:16,920 --> 00:16:19,500 there we go and if I wanted to I could 470 00:16:18,839 --> 00:16:23,100 um 471 00:16:19,500 --> 00:16:25,800 just from this dashboard I can go and uh 472 00:16:23,100 --> 00:16:27,540 they make that true 473 00:16:25,800 --> 00:16:30,060 and hopefully hip trains going again 474 00:16:27,540 --> 00:16:32,820 fantastic and soft up but the video 475 00:16:30,060 --> 00:16:34,339 isn't I think I know why I forgot to 476 00:16:32,820 --> 00:16:37,980 then 477 00:16:34,339 --> 00:16:40,259 use a slot user in Facebook that should 478 00:16:37,980 --> 00:16:41,759 that should start the video up again 479 00:16:40,259 --> 00:16:43,380 the second thing I'm going to do now 480 00:16:41,759 --> 00:16:45,480 I'll just have to do a refresh is to 481 00:16:43,380 --> 00:16:48,019 just see if I can show the the camera's 482 00:16:45,480 --> 00:16:48,019 live stream 483 00:16:50,220 --> 00:16:52,940 the office camera 484 00:16:54,959 --> 00:16:57,540 so this is in a building it's actually 485 00:16:56,339 --> 00:16:59,820 looking over the river just up the 486 00:16:57,540 --> 00:17:01,620 street from us and so you could almost 487 00:16:59,820 --> 00:17:04,140 but not quite see where we are there's 488 00:17:01,620 --> 00:17:06,559 the that's that bridge on the far right 489 00:17:04,140 --> 00:17:10,260 is just uh just across the river from us 490 00:17:06,559 --> 00:17:12,480 so that's an rtsp camera in office and 491 00:17:10,260 --> 00:17:13,679 I'm hoping to do the with the ml 492 00:17:12,480 --> 00:17:16,439 Engineers is 493 00:17:13,679 --> 00:17:18,600 um is a trainer model that recognizes 494 00:17:16,439 --> 00:17:20,880 you know boats and trains and and things 495 00:17:18,600 --> 00:17:24,240 like that just just count traffic 496 00:17:20,880 --> 00:17:25,620 basically to demonstrate 497 00:17:24,240 --> 00:17:27,179 um I was actually running this last 498 00:17:25,620 --> 00:17:28,140 night just in case I've had a failure 499 00:17:27,179 --> 00:17:31,799 today 500 00:17:28,140 --> 00:17:34,260 um and every hour the across the casinos 501 00:17:31,799 --> 00:17:37,380 got these um little gas towers and they 502 00:17:34,260 --> 00:17:39,059 um and the Senate little gas balls um 503 00:17:37,380 --> 00:17:40,799 it's global warming 504 00:17:39,059 --> 00:17:43,440 um but uh 505 00:17:40,799 --> 00:17:45,480 um it's been doing that for decades uh 506 00:17:43,440 --> 00:17:48,720 lots of fried pigeon I believe 507 00:17:45,480 --> 00:17:49,980 um and uh I don't know I might take a 508 00:17:48,720 --> 00:17:51,419 few seconds and say oh maybe a bit later 509 00:17:49,980 --> 00:17:53,160 to show you the view because they've got 510 00:17:51,419 --> 00:17:54,840 these massive gas ports over the river 511 00:17:53,160 --> 00:17:57,179 which was pretty impressive in black and 512 00:17:54,840 --> 00:17:58,740 white okay the last thing I'll show you 513 00:17:57,179 --> 00:18:00,780 while we're on a roll 514 00:17:58,740 --> 00:18:02,340 is um 515 00:18:00,780 --> 00:18:04,320 so in some ways this is not that 516 00:18:02,340 --> 00:18:06,059 exciting because we see video and stuff 517 00:18:04,320 --> 00:18:07,919 going to browsers all day every day 518 00:18:06,059 --> 00:18:09,299 these days um but it's really more the 519 00:18:07,919 --> 00:18:10,200 architecture that was put in place to 520 00:18:09,299 --> 00:18:11,640 make hopefully make this a little bit 521 00:18:10,200 --> 00:18:12,299 more moderate and easier I guess is the 522 00:18:11,640 --> 00:18:14,100 point 523 00:18:12,299 --> 00:18:17,160 oh hang on so I've opened and showed the 524 00:18:14,100 --> 00:18:19,940 same same thing again sorry 525 00:18:17,160 --> 00:18:22,559 nice fast internet fantastic 526 00:18:19,940 --> 00:18:25,799 thanks there thanks Steve 527 00:18:22,559 --> 00:18:27,780 he's uh the uh all the volunteers are 528 00:18:25,799 --> 00:18:29,400 awesome as always now this takes a 529 00:18:27,780 --> 00:18:32,100 little bit longer because um the ml 530 00:18:29,400 --> 00:18:34,580 model takes about 10 seconds to um to 531 00:18:32,100 --> 00:18:36,660 load up maybe a bit longer and 532 00:18:34,580 --> 00:18:37,980 there's a little problem because I have 533 00:18:36,660 --> 00:18:39,419 distributed leases in the lease time was 534 00:18:37,980 --> 00:18:40,679 also about 10 seconds saying if we don't 535 00:18:39,419 --> 00:18:41,580 hear back 536 00:18:40,679 --> 00:18:44,160 um 537 00:18:41,580 --> 00:18:46,140 uh assume there's a problem or not but I 538 00:18:44,160 --> 00:18:47,880 have actually extend the lease out so I 539 00:18:46,140 --> 00:18:49,559 should be that should be up now here we 540 00:18:47,880 --> 00:18:51,059 go no hang on 541 00:18:49,559 --> 00:18:52,500 oh sorry it's I keep going back to My 542 00:18:51,059 --> 00:18:54,660 Demo page oh here we go that's actually 543 00:18:52,500 --> 00:18:58,320 working reasonably well uh yeah so this 544 00:18:54,660 --> 00:18:59,820 is um just round trip from the camera 545 00:18:58,320 --> 00:19:01,140 does everyone can see it okay 546 00:18:59,820 --> 00:19:02,880 um yeah 547 00:19:01,140 --> 00:19:04,320 and the nice thing about we're about to 548 00:19:02,880 --> 00:19:07,980 see we should be able to get roughly um 549 00:19:04,320 --> 00:19:09,660 less than a second latency so from from 550 00:19:07,980 --> 00:19:12,780 this camera up to the data center and 551 00:19:09,660 --> 00:19:14,340 then back and back down again so wow 552 00:19:12,780 --> 00:19:16,760 the time I worked we can all go we can 553 00:19:14,340 --> 00:19:16,760 all go home 554 00:19:18,720 --> 00:19:21,740 Okay so 555 00:19:22,440 --> 00:19:25,460 it's actually going to 556 00:19:25,860 --> 00:19:31,260 that's what I want all right so um I 557 00:19:29,280 --> 00:19:33,179 have to speed this up a bit so there's 558 00:19:31,260 --> 00:19:35,400 been lots of influences so one is the 559 00:19:33,179 --> 00:19:38,039 the actor model it's a model for doing 560 00:19:35,400 --> 00:19:39,600 concurrent computation with distributed 561 00:19:38,039 --> 00:19:43,500 systems you know everything is an actor 562 00:19:39,600 --> 00:19:46,080 it was created back in 74 and Guy Steele 563 00:19:43,500 --> 00:19:47,880 was curious about whether it could 564 00:19:46,080 --> 00:19:50,160 actually be not just Theory but work in 565 00:19:47,880 --> 00:19:51,600 the invented scheme specifically and 566 00:19:50,160 --> 00:19:53,520 that for other reasons or to test out 567 00:19:51,600 --> 00:19:55,440 the actor model and along the way 568 00:19:53,520 --> 00:19:56,580 invented call by continuations and I 569 00:19:55,440 --> 00:19:57,720 think he's probably like 21 or something 570 00:19:56,580 --> 00:20:00,840 like that 571 00:19:57,720 --> 00:20:02,660 a bit scary but also erlang is probably 572 00:20:00,840 --> 00:20:06,840 the most famous use of the actor model 573 00:20:02,660 --> 00:20:07,980 the erlang language uh powers or did 574 00:20:06,840 --> 00:20:09,480 power a lot of the world's 575 00:20:07,980 --> 00:20:11,220 telecommunication networks very very 576 00:20:09,480 --> 00:20:13,440 reliably and also the links used in 577 00:20:11,220 --> 00:20:15,179 WhatsApp and WeChat who knew 578 00:20:13,440 --> 00:20:16,679 um so the actor models um maybe not 579 00:20:15,179 --> 00:20:18,960 everyone's over it's pretty successful 580 00:20:16,679 --> 00:20:20,700 another influence for me was the uh it 581 00:20:18,960 --> 00:20:22,679 was a genie which was a stupid system 582 00:20:20,700 --> 00:20:25,620 that um a little Breakaway group in 583 00:20:22,679 --> 00:20:27,299 Sunrise which I'm super well designed by 584 00:20:25,620 --> 00:20:29,820 some very very smart people for 585 00:20:27,299 --> 00:20:31,980 experienced fully asynchronous service 586 00:20:29,820 --> 00:20:33,539 based they can just use Java interfaces 587 00:20:31,980 --> 00:20:35,360 so you didn't have to worry about any 588 00:20:33,539 --> 00:20:38,100 stubs or 589 00:20:35,360 --> 00:20:39,480 marching or marshalling but wow the out 590 00:20:38,100 --> 00:20:40,919 of box experience was just really really 591 00:20:39,480 --> 00:20:42,179 tough it was very challenging to use so 592 00:20:40,919 --> 00:20:44,160 unfortunately it's the function now but 593 00:20:42,179 --> 00:20:47,960 it was a great great thing to learn from 594 00:20:44,160 --> 00:20:50,340 but just just briefly on actors 595 00:20:47,960 --> 00:20:52,580 actors can do three things they can 596 00:20:50,340 --> 00:20:55,140 basically send messages to other actors 597 00:20:52,580 --> 00:20:57,419 they can create other actors and they 598 00:20:55,140 --> 00:20:58,919 can also change their state which means 599 00:20:57,419 --> 00:21:01,200 that there their behavior on the next 600 00:20:58,919 --> 00:21:03,419 message will change and the great thing 601 00:21:01,200 --> 00:21:05,760 about actors compared to other just 602 00:21:03,419 --> 00:21:07,980 having a whole Myriad of services it's 603 00:21:05,760 --> 00:21:09,419 just easy to to um reason about them 604 00:21:07,980 --> 00:21:11,179 about your network you know just 605 00:21:09,419 --> 00:21:14,100 simplifies things 606 00:21:11,179 --> 00:21:15,419 but without compromising being able to 607 00:21:14,100 --> 00:21:17,460 get stuff done 608 00:21:15,419 --> 00:21:20,940 so some more inferences uh yeah everyone 609 00:21:17,460 --> 00:21:22,260 knows I love lisp you know um and uh in 610 00:21:20,940 --> 00:21:23,340 this system we've actually used list for 611 00:21:22,260 --> 00:21:24,419 the for the messages I think if 612 00:21:23,340 --> 00:21:25,980 everything as being a function call 613 00:21:24,419 --> 00:21:28,679 which can just translate directly to a 614 00:21:25,980 --> 00:21:30,059 lisp s expression and what's great is 615 00:21:28,679 --> 00:21:31,620 that allows you to do mobile code you 616 00:21:30,059 --> 00:21:32,760 know it could that s expression could be 617 00:21:31,620 --> 00:21:33,900 data structure but also could be a 618 00:21:32,760 --> 00:21:36,480 filter so you basically say to another 619 00:21:33,900 --> 00:21:37,860 another notary Network or another actor 620 00:21:36,480 --> 00:21:39,240 in a network here's this filter we're 621 00:21:37,860 --> 00:21:41,280 going to apply so I can make very easily 622 00:21:39,240 --> 00:21:42,840 move your computation around the network 623 00:21:41,280 --> 00:21:44,640 um of course you know keeping security 624 00:21:42,840 --> 00:21:46,260 concerns in mind 625 00:21:44,640 --> 00:21:47,700 um but great thing about Bliss machines 626 00:21:46,260 --> 00:21:49,200 back in the day was everything was 627 00:21:47,700 --> 00:21:51,240 enlisted have they had Hardware 628 00:21:49,200 --> 00:21:52,799 instructions uh the operating system GUI 629 00:21:51,240 --> 00:21:54,120 applications it was just Turtles all the 630 00:21:52,799 --> 00:21:56,700 way down it just showed you what could 631 00:21:54,120 --> 00:21:58,679 be done the other um inspiration is 632 00:21:56,700 --> 00:22:00,360 Small Talk which is 633 00:21:58,679 --> 00:22:02,580 um uh Alan K say look you always 634 00:22:00,360 --> 00:22:04,679 intended that uh it really should be 635 00:22:02,580 --> 00:22:06,539 message oriented not object oriented um 636 00:22:04,679 --> 00:22:08,940 but yeah basically about small talk is 637 00:22:06,539 --> 00:22:10,440 even the language itself is where you 638 00:22:08,940 --> 00:22:11,820 basically send the messages to other 639 00:22:10,440 --> 00:22:13,500 parts so your if statement is actually 640 00:22:11,820 --> 00:22:16,080 it's performed through sending messages 641 00:22:13,500 --> 00:22:19,440 to the the true block or the the false 642 00:22:16,080 --> 00:22:20,760 Block it's um and if you've seen a small 643 00:22:19,440 --> 00:22:22,020 talk um or if you haven't actually 644 00:22:20,760 --> 00:22:24,780 haven't seen small 2 you can download 645 00:22:22,020 --> 00:22:27,179 squeak and it runs on Modern up your 646 00:22:24,780 --> 00:22:28,620 operating systems and you basically see 647 00:22:27,179 --> 00:22:30,179 what an amazing system this was where 648 00:22:28,620 --> 00:22:31,500 you can you can click on a window and 649 00:22:30,179 --> 00:22:33,000 it'll take you to the source code 650 00:22:31,500 --> 00:22:34,440 browser and you can change the behavior 651 00:22:33,000 --> 00:22:38,039 in the system on the fly without without 652 00:22:34,440 --> 00:22:39,539 rebooting in fact The Story Goes which 653 00:22:38,039 --> 00:22:41,820 is true because in CCTV jobs talking 654 00:22:39,539 --> 00:22:43,799 about this on YouTube when um the small 655 00:22:41,820 --> 00:22:45,480 talk team invited a number of companies 656 00:22:43,799 --> 00:22:46,860 in to see what they've done because no 657 00:22:45,480 --> 00:22:50,100 one had ever seen no one had really ever 658 00:22:46,860 --> 00:22:51,480 seen a graphics using a face before with 659 00:22:50,100 --> 00:22:54,559 a Windows and mys except a few 660 00:22:51,480 --> 00:22:58,140 researchers and angle bar of course 661 00:22:54,559 --> 00:22:59,520 and uh they they they showed they showed 662 00:22:58,140 --> 00:23:00,360 that they showed him about six things he 663 00:22:59,520 --> 00:23:02,520 said look 664 00:23:00,360 --> 00:23:03,539 um I was so blown away by you know what 665 00:23:02,520 --> 00:23:05,940 the first thing I saw which is the 666 00:23:03,539 --> 00:23:07,440 windows which even obviously took back 667 00:23:05,940 --> 00:23:10,080 to Apple he totally forgot about what 668 00:23:07,440 --> 00:23:12,840 those other things were ethernet laser 669 00:23:10,080 --> 00:23:15,179 printing yeah but the thing that 670 00:23:12,840 --> 00:23:18,419 captures imagination was according to 671 00:23:15,179 --> 00:23:19,980 the Xerox research was how they did 672 00:23:18,419 --> 00:23:22,020 select was really ugly it basically just 673 00:23:19,980 --> 00:23:24,539 blocked out the whole text and it was 674 00:23:22,020 --> 00:23:25,620 ugly and and Steve asked him well that's 675 00:23:24,539 --> 00:23:27,000 just terrible you know what can you do 676 00:23:25,620 --> 00:23:28,860 about it and then the engineer said look 677 00:23:27,000 --> 00:23:31,919 hang on give me a sec I found that you 678 00:23:28,860 --> 00:23:33,780 found the uh the small talk method 679 00:23:31,919 --> 00:23:35,220 um I said look if we subtract this 680 00:23:33,780 --> 00:23:37,320 rectangle from this rectangle basically 681 00:23:35,220 --> 00:23:39,000 this nice outline did that in about a 682 00:23:37,320 --> 00:23:40,200 minute uh didn't stop the system and 683 00:23:39,000 --> 00:23:43,260 then he basically had like almost like 684 00:23:40,200 --> 00:23:45,900 moving Arts like type thing 685 00:23:43,260 --> 00:23:48,360 um yeah that's what that's right Mr jobs 686 00:23:45,900 --> 00:23:50,460 forgot about all the other things anyway 687 00:23:48,360 --> 00:23:52,500 um moving on because that's right so 688 00:23:50,460 --> 00:23:54,299 some overall design principles 689 00:23:52,500 --> 00:23:55,620 um I've completely stands through 690 00:23:54,299 --> 00:23:56,700 messages 691 00:23:55,620 --> 00:23:58,020 um I want these things to be very 692 00:23:56,700 --> 00:24:00,419 lightweight so they can run on embedded 693 00:23:58,020 --> 00:24:02,039 systems and I really want to think about 694 00:24:00,419 --> 00:24:02,760 in terms of things as function calls you 695 00:24:02,039 --> 00:24:04,320 know 696 00:24:02,760 --> 00:24:06,360 um so basically you say I'm just calling 697 00:24:04,320 --> 00:24:07,799 functions between my um actors locally 698 00:24:06,360 --> 00:24:09,179 or remotely and not have to worry about 699 00:24:07,799 --> 00:24:12,000 marshalling on marshalling all those 700 00:24:09,179 --> 00:24:13,679 things and something about just simple 701 00:24:12,000 --> 00:24:16,080 human readable messages is so easy to 702 00:24:13,679 --> 00:24:18,360 debug especially if using mqtt basically 703 00:24:16,080 --> 00:24:19,980 just do a mosquito Pub to basically do 704 00:24:18,360 --> 00:24:22,140 some injection testing to go hey let's 705 00:24:19,980 --> 00:24:24,179 um just exercise that actor or device or 706 00:24:22,140 --> 00:24:25,260 whatever and you can just also subscribe 707 00:24:24,179 --> 00:24:27,419 and see what's going on in your system 708 00:24:25,260 --> 00:24:28,740 so it's really great but of course that 709 00:24:27,419 --> 00:24:30,480 does collapse a bit when you've got lots 710 00:24:28,740 --> 00:24:32,100 and lots of things going on 711 00:24:30,480 --> 00:24:34,320 um so in the system pretty much trying 712 00:24:32,100 --> 00:24:36,059 to use a lisp and NPC everywhere but uh 713 00:24:34,320 --> 00:24:38,520 the applications if you want to 714 00:24:36,059 --> 00:24:39,659 um you know this often have good reasons 715 00:24:38,520 --> 00:24:42,539 or pressure to basically you know use 716 00:24:39,659 --> 00:24:43,980 use Json and Avro for the foundation or 717 00:24:42,539 --> 00:24:45,480 protobufs or whatever that's that's fine 718 00:24:43,980 --> 00:24:47,940 too 719 00:24:45,480 --> 00:24:49,919 um think about uh when you have a fully 720 00:24:47,940 --> 00:24:51,720 estimated system is you can't really do 721 00:24:49,919 --> 00:24:53,640 blocking calls you know to like do RPC 722 00:24:51,720 --> 00:24:54,960 we make a call a request and expect back 723 00:24:53,640 --> 00:24:56,640 a response 724 00:24:54,960 --> 00:24:58,620 um so pretty simple rule is that 725 00:24:56,640 --> 00:25:00,240 functions don't return values 726 00:24:58,620 --> 00:25:01,919 um which makes uh much easier to do a 727 00:25:00,240 --> 00:25:03,720 consumer system but also makes it a 728 00:25:01,919 --> 00:25:05,280 little bit more difficult to program in 729 00:25:03,720 --> 00:25:06,600 terms of you know do you do callbacks uh 730 00:25:05,280 --> 00:25:08,280 what if you're going to create something 731 00:25:06,600 --> 00:25:09,900 and you want to get great get its 732 00:25:08,280 --> 00:25:12,000 reference back that becomes really hard 733 00:25:09,900 --> 00:25:13,980 but there are ways around that for 734 00:25:12,000 --> 00:25:17,159 example using eventual consisting cases 735 00:25:13,980 --> 00:25:19,740 you can basically say uh uh I'm 736 00:25:17,159 --> 00:25:21,419 interested in this uh in this state uh 737 00:25:19,740 --> 00:25:24,000 over the network like this reference or 738 00:25:21,419 --> 00:25:25,260 it's computation or result and that just 739 00:25:24,000 --> 00:25:28,860 lands an occasion we're seeing somebody 740 00:25:25,260 --> 00:25:30,600 just do a local get that value so the 741 00:25:28,860 --> 00:25:31,919 problem is if you're only doing if 742 00:25:30,600 --> 00:25:33,779 you're fundamentally got a request 743 00:25:31,919 --> 00:25:35,520 response system based around HTTP or 744 00:25:33,779 --> 00:25:36,960 rest or all the graphical all these 745 00:25:35,520 --> 00:25:38,400 things is you just go all the students 746 00:25:36,960 --> 00:25:40,260 what is asynchronous system things will 747 00:25:38,400 --> 00:25:42,360 need speed it becomes a special hard 748 00:25:40,260 --> 00:25:43,559 case if you tackle it early on and say 749 00:25:42,360 --> 00:25:45,360 no we'll just make or just try and make 750 00:25:43,559 --> 00:25:47,340 it easy from start while those problems 751 00:25:45,360 --> 00:25:49,200 go away the other thing we use is um 752 00:25:47,340 --> 00:25:50,820 Dynamics proxy objects so we can have 753 00:25:49,200 --> 00:25:52,679 layers of abstraction so we can abstract 754 00:25:50,820 --> 00:25:54,360 out different um different third-party 755 00:25:52,679 --> 00:25:59,940 things so we can have you know amputes 756 00:25:54,360 --> 00:26:02,400 of Transport or Roz or um or or a hard 757 00:25:59,940 --> 00:26:04,919 graphical going over HTTP so or we can 758 00:26:02,400 --> 00:26:07,860 um swap in different security models 759 00:26:04,919 --> 00:26:10,080 um and so on by by doing that and uh 760 00:26:07,860 --> 00:26:12,900 just as an aside there's a great talk by 761 00:26:10,080 --> 00:26:15,600 Kevin Greer around the phone group at 762 00:26:12,900 --> 00:26:17,820 Google and uh and he just is comparing 763 00:26:15,600 --> 00:26:18,960 uh the advantages that Unix had over 764 00:26:17,820 --> 00:26:20,460 mortex because they did what's called 765 00:26:18,960 --> 00:26:22,440 coding the perimeter they basically 766 00:26:20,460 --> 00:26:24,059 looked at their cross-cutting concerns 767 00:26:22,440 --> 00:26:26,279 and you basically say we've got 768 00:26:24,059 --> 00:26:28,679 functionality on one axis and we've got 769 00:26:26,279 --> 00:26:30,000 um uh I guess I think things must be 770 00:26:28,679 --> 00:26:32,100 like persistence and configuration or 771 00:26:30,000 --> 00:26:32,940 communication on the other axis instead 772 00:26:32,100 --> 00:26:34,260 of basically trying to for each 773 00:26:32,940 --> 00:26:36,000 individual program and figure those 774 00:26:34,260 --> 00:26:36,900 things out over and over again in Unix 775 00:26:36,000 --> 00:26:38,940 because we're having you know we 776 00:26:36,900 --> 00:26:40,620 construct things of pipes and so on and 777 00:26:38,940 --> 00:26:43,799 small composable pieces 778 00:26:40,620 --> 00:26:45,120 um Dennis Ritchie and uh and Ken 779 00:26:43,799 --> 00:26:47,220 Thompson were able to move much faster 780 00:26:45,120 --> 00:26:50,299 because they were on the perimeter they 781 00:26:47,220 --> 00:26:50,299 won't try to fill in the whole area 782 00:26:51,419 --> 00:26:56,820 um so just about how that looks um very 783 00:26:54,900 --> 00:26:59,159 quickly is I've got a couple of actors 784 00:26:56,820 --> 00:27:00,600 here so actor zero wants to create actor 785 00:26:59,159 --> 00:27:02,820 one so it's going to talk to a livestock 786 00:27:00,600 --> 00:27:04,140 manager do that so the the blue bits the 787 00:27:02,820 --> 00:27:05,880 blue message is around 788 00:27:04,140 --> 00:27:07,919 um creating the actor so active zero 789 00:27:05,880 --> 00:27:09,240 says look create an act of the livestock 790 00:27:07,919 --> 00:27:10,500 manager the livestock manager will 791 00:27:09,240 --> 00:27:12,539 create that 792 00:27:10,500 --> 00:27:13,980 um that actor actor one that that 793 00:27:12,539 --> 00:27:15,659 reference gets back to actor zero and 794 00:27:13,980 --> 00:27:18,419 then back to Zurich and then say Okay 795 00:27:15,659 --> 00:27:20,340 pause run delete whatever you want and 796 00:27:18,419 --> 00:27:22,260 so the main thing I want to show here is 797 00:27:20,340 --> 00:27:25,200 that the in the within the actors you're 798 00:27:22,260 --> 00:27:27,539 just using function calls uh whether 799 00:27:25,200 --> 00:27:28,980 using the dynamic proxy we can just turn 800 00:27:27,539 --> 00:27:30,419 those into into best expressions and 801 00:27:28,980 --> 00:27:33,840 send those across the network and ask 802 00:27:30,419 --> 00:27:35,340 them for you and uh and so you'd have to 803 00:27:33,840 --> 00:27:36,960 worry about all the machinery and the 804 00:27:35,340 --> 00:27:38,400 other thing is the the uh the green bit 805 00:27:36,960 --> 00:27:39,779 that's the case that's the caching we're 806 00:27:38,400 --> 00:27:42,720 basically using eventual consistency so 807 00:27:39,779 --> 00:27:45,600 just one one uh one effectively class of 808 00:27:42,720 --> 00:27:47,520 uh in station for a producer just wrap 809 00:27:45,600 --> 00:27:49,380 your state and the same thing on the on 810 00:27:47,520 --> 00:27:51,179 the other side we just have a consumer 811 00:27:49,380 --> 00:27:52,380 that says look um this is the state I 812 00:27:51,179 --> 00:27:53,760 want you can filter that state so you 813 00:27:52,380 --> 00:27:55,140 don't get all of the state just just a 814 00:27:53,760 --> 00:27:57,059 bit you need and then what you just do 815 00:27:55,140 --> 00:27:59,940 is you step in into your local cache and 816 00:27:57,059 --> 00:28:01,679 uh and and get the most recent value so 817 00:27:59,940 --> 00:28:03,179 hopefully that gives a bit of conceptual 818 00:28:01,679 --> 00:28:04,799 View 819 00:28:03,179 --> 00:28:05,880 all right so some distributed design 820 00:28:04,799 --> 00:28:07,320 principles 821 00:28:05,880 --> 00:28:09,659 um 822 00:28:07,320 --> 00:28:11,640 uh back in the 90s um at some 823 00:28:09,659 --> 00:28:13,740 Microsystems uh there was this list of 824 00:28:11,640 --> 00:28:15,299 things that are basically fallacies if 825 00:28:13,740 --> 00:28:16,320 you believe that um the network is 826 00:28:15,299 --> 00:28:18,000 viable 827 00:28:16,320 --> 00:28:19,320 um yeah your application is not going to 828 00:28:18,000 --> 00:28:20,400 not going to be reliable and they had a 829 00:28:19,320 --> 00:28:24,059 list of seven of these and then James 830 00:28:20,400 --> 00:28:26,159 Gosling had the out of the eighth um uh 831 00:28:24,059 --> 00:28:27,659 even though uh Java entered back the 832 00:28:26,159 --> 00:28:30,000 network looked a bit homogeneous back in 833 00:28:27,659 --> 00:28:31,620 the 90s for a while it's not true all 834 00:28:30,000 --> 00:28:34,440 the devices we have these days are quite 835 00:28:31,620 --> 00:28:35,880 different so these are things if you 836 00:28:34,440 --> 00:28:38,100 make any of these assumptions 837 00:28:35,880 --> 00:28:40,860 um in your in your architectural design 838 00:28:38,100 --> 00:28:42,440 you're going to um you know come kind of 839 00:28:40,860 --> 00:28:44,820 hit some potholes for sure 840 00:28:42,440 --> 00:28:46,860 uh and I'm not trying to basically try 841 00:28:44,820 --> 00:28:48,720 and cover all Distribution Systems uh 842 00:28:46,860 --> 00:28:50,100 theory in a few minutes but sort of or 843 00:28:48,720 --> 00:28:51,720 if you mentioned a few other things so 844 00:28:50,100 --> 00:28:53,820 it's cap theorem which basically says 845 00:28:51,720 --> 00:28:55,700 three things you can only have two which 846 00:28:53,820 --> 00:28:57,659 is um 847 00:28:55,700 --> 00:28:59,940 partition part tolerance is like in 848 00:28:57,659 --> 00:29:01,200 handle Network failure uh consistency do 849 00:28:59,940 --> 00:29:02,520 you want when you I mean we do rights 850 00:29:01,200 --> 00:29:04,740 and reads does everything have the same 851 00:29:02,520 --> 00:29:06,960 value and availability you know can you 852 00:29:04,740 --> 00:29:09,059 see can you see the that piece of 853 00:29:06,960 --> 00:29:12,360 information from a from a from another 854 00:29:09,059 --> 00:29:15,179 part of the system things like databases 855 00:29:12,360 --> 00:29:16,440 which do acid they really work hard to 856 00:29:15,179 --> 00:29:18,179 make sure that no matter what you have 857 00:29:16,440 --> 00:29:19,980 availability consistency 858 00:29:18,179 --> 00:29:22,559 um but the problem with that is you've 859 00:29:19,980 --> 00:29:24,419 got to do a network failure always so 860 00:29:22,559 --> 00:29:26,100 that was about 20 odd years ago as the 861 00:29:24,419 --> 00:29:28,440 cap theorem in the last dozen or so 862 00:29:26,100 --> 00:29:30,360 years there's what's called Pac ELC 863 00:29:28,440 --> 00:29:32,880 which says not only do you have to worry 864 00:29:30,360 --> 00:29:34,740 about cap which is basically you choose 865 00:29:32,880 --> 00:29:36,600 to have partition tolerance and then 866 00:29:34,740 --> 00:29:38,580 worry about about consistency even if 867 00:29:36,600 --> 00:29:40,020 even if that was it was good you still 868 00:29:38,580 --> 00:29:42,600 have to choose between whether you want 869 00:29:40,020 --> 00:29:43,620 to have um good latency or you want 870 00:29:42,600 --> 00:29:45,600 everything to be consistent because 871 00:29:43,620 --> 00:29:48,659 there's a bit of a trade-off there so um 872 00:29:45,600 --> 00:29:50,779 in um uh I go Services what I've done is 873 00:29:48,659 --> 00:29:53,580 I said look you have to worry about uh 874 00:29:50,779 --> 00:29:56,220 Network partition and what to do when 875 00:29:53,580 --> 00:29:57,960 the network fails but then after that 876 00:29:56,220 --> 00:29:59,100 um basically using a form of a or 877 00:29:57,960 --> 00:30:00,960 slightly stronger performance 878 00:29:59,100 --> 00:30:02,399 consistency which is effectively called 879 00:30:00,960 --> 00:30:04,140 sequential consistency where you still 880 00:30:02,399 --> 00:30:06,059 preserve the right order and you and 881 00:30:04,140 --> 00:30:07,320 basically the the data will be available 882 00:30:06,059 --> 00:30:08,520 eventually 883 00:30:07,320 --> 00:30:10,320 the other thing we use is something 884 00:30:08,520 --> 00:30:13,440 called distributed leases 885 00:30:10,320 --> 00:30:15,179 um so when if you basically uh done some 886 00:30:13,440 --> 00:30:16,980 operation that requires basically causes 887 00:30:15,179 --> 00:30:19,799 another part of the system to consider 888 00:30:16,980 --> 00:30:21,240 to acquire some resources maybe made a 889 00:30:19,799 --> 00:30:23,880 database connection you've now got a 890 00:30:21,240 --> 00:30:25,200 connection there how long should This 891 00:30:23,880 --> 00:30:26,700 Server hold on to that and if you 892 00:30:25,200 --> 00:30:28,799 haven't agreed up front in the network 893 00:30:26,700 --> 00:30:30,240 files you've got no way of um carrying 894 00:30:28,799 --> 00:30:31,860 on the conversation like closing out 895 00:30:30,240 --> 00:30:33,419 properly so the thing about leases you 896 00:30:31,860 --> 00:30:35,059 can say look I'm going to list for five 897 00:30:33,419 --> 00:30:37,500 minutes and if you don't hear from me 898 00:30:35,059 --> 00:30:40,380 both sides can assume it's done and over 899 00:30:37,500 --> 00:30:41,940 so even a network partition uh the two 900 00:30:40,380 --> 00:30:43,200 parties can will know what the situation 901 00:30:41,940 --> 00:30:44,460 is you know five minutes went past you 902 00:30:43,200 --> 00:30:46,740 haven't heard from each other that's all 903 00:30:44,460 --> 00:30:48,659 it's all over very powerful very simple 904 00:30:46,740 --> 00:30:52,860 but very powerful technique 905 00:30:48,659 --> 00:30:53,460 okay so um people who've come on to the 906 00:30:52,860 --> 00:30:55,440 um 907 00:30:53,460 --> 00:30:56,640 otmc have know that we've used sync 908 00:30:55,440 --> 00:30:58,380 called the Arco engine which is a micro 909 00:30:56,640 --> 00:31:00,179 bit of micropython code for the you know 910 00:30:58,380 --> 00:31:01,320 like the swag badge and other things so 911 00:31:00,179 --> 00:31:03,779 what's the difference between services 912 00:31:01,320 --> 00:31:05,460 and the engine basically the engine was 913 00:31:03,779 --> 00:31:07,460 really about providing a little bit of 914 00:31:05,460 --> 00:31:09,720 an event based model some little 915 00:31:07,460 --> 00:31:11,880 peripheral drivers for um you know 916 00:31:09,720 --> 00:31:13,740 buttons and screens and networking and 917 00:31:11,880 --> 00:31:15,960 so on uh just purely about the device 918 00:31:13,740 --> 00:31:17,159 but the services framework I'm 919 00:31:15,960 --> 00:31:19,020 discussing today so that's sort of the 920 00:31:17,159 --> 00:31:20,640 difference and uh so the services 921 00:31:19,020 --> 00:31:21,840 basically says here's the definition of 922 00:31:20,640 --> 00:31:25,020 all the protocols provides a reference 923 00:31:21,840 --> 00:31:27,360 implementation and then the engine 924 00:31:25,020 --> 00:31:29,640 um uh can I do everything you need on 925 00:31:27,360 --> 00:31:31,260 the device or wherever and and then says 926 00:31:29,640 --> 00:31:33,320 oh and here's how we can use services to 927 00:31:31,260 --> 00:31:35,700 interconnect 928 00:31:33,320 --> 00:31:38,419 up now 929 00:31:35,700 --> 00:31:38,419 okay just check out 930 00:31:41,520 --> 00:31:46,460 okay so this this is um how archive 931 00:31:44,820 --> 00:31:49,980 servers look from from a very high level 932 00:31:46,460 --> 00:31:51,779 uh the um there's the main the main 933 00:31:49,980 --> 00:31:54,120 Services the registrar so the registrar 934 00:31:51,779 --> 00:31:55,740 allows you to um discover join and 935 00:31:54,120 --> 00:31:57,480 discover all the other services so in 936 00:31:55,740 --> 00:31:59,340 this case we just have two services on 937 00:31:57,480 --> 00:32:01,440 the bottom one and two they both add 938 00:31:59,340 --> 00:32:02,640 themselves to the registrar with an its 939 00:32:01,440 --> 00:32:04,919 expression which is basically just add 940 00:32:02,640 --> 00:32:06,539 and a bit of detail a few details so and 941 00:32:04,919 --> 00:32:08,460 then um and then it allows to find each 942 00:32:06,539 --> 00:32:10,559 other by querying the Registrar of 943 00:32:08,460 --> 00:32:12,000 course and then then uh service one 944 00:32:10,559 --> 00:32:13,340 confined service to and do output so 945 00:32:12,000 --> 00:32:16,200 it's not nothing nothing too 946 00:32:13,340 --> 00:32:18,539 revolutionary there 947 00:32:16,200 --> 00:32:20,220 um right so what is the service 948 00:32:18,539 --> 00:32:23,100 um well pretty much like I've asked a 949 00:32:20,220 --> 00:32:24,960 definite service so a service can um Can 950 00:32:23,100 --> 00:32:28,140 can join the network can be discovered 951 00:32:24,960 --> 00:32:29,460 by other components uh it can uh then uh 952 00:32:28,140 --> 00:32:30,899 receive receive messages through 953 00:32:29,460 --> 00:32:33,000 subscription they can publish some 954 00:32:30,899 --> 00:32:36,240 submissions but uh that's what I've done 955 00:32:33,000 --> 00:32:37,620 it in Ico is um is also to find some 956 00:32:36,240 --> 00:32:40,200 additional things the Surfers have most 957 00:32:37,620 --> 00:32:41,340 importantly is topic prefix so in name 958 00:32:40,200 --> 00:32:42,600 contain other messaging systems you 959 00:32:41,340 --> 00:32:44,159 always choose topics and often you do 960 00:32:42,600 --> 00:32:46,380 that by saying oh what's the temperature 961 00:32:44,159 --> 00:32:48,720 inside the topic will be kitchen slash 962 00:32:46,380 --> 00:32:50,760 temperature in this in this case our 963 00:32:48,720 --> 00:32:52,679 coach Auto generates a topic which is 964 00:32:50,760 --> 00:32:54,059 based on your namespace so it can 965 00:32:52,679 --> 00:32:55,980 basically partition things for reasons 966 00:32:54,059 --> 00:32:57,779 for security or testing whatever so you 967 00:32:55,980 --> 00:33:00,299 get these different name spaces the host 968 00:32:57,779 --> 00:33:01,679 that you're on the processity on the 969 00:33:00,299 --> 00:33:03,779 service IDs those things give you a 970 00:33:01,679 --> 00:33:05,520 unique topic path which is also useful 971 00:33:03,779 --> 00:33:06,779 because I say oh what host is my service 972 00:33:05,520 --> 00:33:07,919 running on or what process if you want 973 00:33:06,779 --> 00:33:09,720 if you want to kill it so it's going to 974 00:33:07,919 --> 00:33:11,640 be useful that way and it also means 975 00:33:09,720 --> 00:33:13,740 there's no collisions and what the the 976 00:33:11,640 --> 00:33:16,799 service or device can do is it can then 977 00:33:13,740 --> 00:33:18,480 just append additional initial strings 978 00:33:16,799 --> 00:33:21,360 saying I want an input for an apple 979 00:33:18,480 --> 00:33:23,279 topic or or logging or whatever I also 980 00:33:21,360 --> 00:33:25,140 can name the services the protocol 981 00:33:23,279 --> 00:33:26,580 defines what what Implement what 982 00:33:25,140 --> 00:33:28,380 interfaces the service Implement so it 983 00:33:26,580 --> 00:33:30,659 could be okay it's always going to be a 984 00:33:28,380 --> 00:33:32,100 service possibly an actor who could also 985 00:33:30,659 --> 00:33:34,679 be a temperature sensor or it could be 986 00:33:32,100 --> 00:33:36,120 something it's a category of group of 987 00:33:34,679 --> 00:33:37,860 other things so the interfaces to say 988 00:33:36,120 --> 00:33:39,419 well all those things that you um you 989 00:33:37,860 --> 00:33:40,740 are which is also another way of finding 990 00:33:39,419 --> 00:33:42,779 something so basically could say I find 991 00:33:40,740 --> 00:33:45,480 all the um you know find all the 992 00:33:42,779 --> 00:33:47,940 persistence stores you know or databases 993 00:33:45,480 --> 00:33:49,559 we also have the transport which means 994 00:33:47,940 --> 00:33:52,380 we can swap in other transports like 995 00:33:49,559 --> 00:33:53,700 rock Ross not CBT and the tags are 996 00:33:52,380 --> 00:33:55,019 really how you can find things like 997 00:33:53,700 --> 00:33:57,360 likely with an email you can basically 998 00:33:55,019 --> 00:34:00,120 Tag Services and say you know create new 999 00:33:57,360 --> 00:34:01,440 keywords and give them values so right 1000 00:34:00,120 --> 00:34:03,539 now using that for eventual consistency 1001 00:34:01,440 --> 00:34:05,519 you can say e s equals two ten minutes 1002 00:34:03,539 --> 00:34:07,620 is cool I better speed this up 1003 00:34:05,519 --> 00:34:10,379 um to to um to basically say you support 1004 00:34:07,620 --> 00:34:11,820 Venture consistency UI for UI hints and 1005 00:34:10,379 --> 00:34:14,220 and so on 1006 00:34:11,820 --> 00:34:15,659 okay so the register is 1007 00:34:14,220 --> 00:34:16,800 um we support primary and secondary 1008 00:34:15,659 --> 00:34:18,540 registrars 1009 00:34:16,800 --> 00:34:20,760 um and that's just the messages that you 1010 00:34:18,540 --> 00:34:24,000 can send to a registrar so add add 1011 00:34:20,760 --> 00:34:26,580 remove uh hyper failure share allows you 1012 00:34:24,000 --> 00:34:28,379 to say look um I want to have a filter 1013 00:34:26,580 --> 00:34:30,300 that's all the stars are wild cards for 1014 00:34:28,379 --> 00:34:31,440 the various um service Fields here's the 1015 00:34:30,300 --> 00:34:33,540 service Fields I want you to filter on 1016 00:34:31,440 --> 00:34:36,480 and um 1017 00:34:33,540 --> 00:34:38,099 uh and that those messages those 1018 00:34:36,480 --> 00:34:39,839 missions come back into your case 1019 00:34:38,099 --> 00:34:42,480 um so you can initiate that the other 1020 00:34:39,839 --> 00:34:43,919 thing we do is use by the Dashboard is 1021 00:34:42,480 --> 00:34:45,060 um it's also get the history so the red 1022 00:34:43,919 --> 00:34:46,080 strike keeps the history of services 1023 00:34:45,060 --> 00:34:47,820 have gone away so you might have a 1024 00:34:46,080 --> 00:34:49,080 service that starts up dies and goes 1025 00:34:47,820 --> 00:34:50,580 away you want to be able to at least 1026 00:34:49,080 --> 00:34:52,560 know that it ran and also be able to 1027 00:34:50,580 --> 00:34:53,820 look at its logs 1028 00:34:52,560 --> 00:34:55,500 okay so I'll quickly show you the 1029 00:34:53,820 --> 00:34:56,700 dashboard it's a bit like so you saw 1030 00:34:55,500 --> 00:34:58,680 briefly before it's a bit like top 1031 00:34:56,700 --> 00:35:00,240 interacts the registrar shows you all 1032 00:34:58,680 --> 00:35:01,740 your services 1033 00:35:00,240 --> 00:35:04,020 um it allows you to interrogate and 1034 00:35:01,740 --> 00:35:05,460 check all the variables and logging and 1035 00:35:04,020 --> 00:35:08,060 so on so let's see if I can just quickly 1036 00:35:05,460 --> 00:35:08,060 show that again 1037 00:35:16,560 --> 00:35:21,300 all right cool this is just running uh 1038 00:35:18,960 --> 00:35:22,740 on my my Home Server that's uh that's so 1039 00:35:21,300 --> 00:35:25,920 we've got the register up there we've 1040 00:35:22,740 --> 00:35:28,380 got two um uh swag badges 1041 00:35:25,920 --> 00:35:29,880 um set csp32s but I could just look 1042 00:35:28,380 --> 00:35:34,400 because I can just add another 1043 00:35:29,880 --> 00:35:34,400 um another just another service if I uh 1044 00:35:40,859 --> 00:35:46,260 samples 1045 00:35:43,680 --> 00:35:49,460 so this is the equivalent hello world 1046 00:35:46,260 --> 00:35:49,460 hopefully that's going to work for me 1047 00:35:50,640 --> 00:35:54,480 fun of doing things ah actually ah I 1048 00:35:53,220 --> 00:35:57,480 know what's happened there wrong screen 1049 00:35:54,480 --> 00:36:00,000 this adds up my backend server 1050 00:35:57,480 --> 00:36:01,260 whoops 1051 00:36:00,000 --> 00:36:04,260 um let me just do it on the local 1052 00:36:01,260 --> 00:36:07,260 machine now yeah so 1053 00:36:04,260 --> 00:36:09,740 it's like SSH but worse 1054 00:36:07,260 --> 00:36:09,740 hang on 1055 00:36:12,839 --> 00:36:16,560 okay so let's have a little about much 1056 00:36:14,339 --> 00:36:18,599 faster yeah 18. 1057 00:36:16,560 --> 00:36:19,980 um and so we can see the various 1058 00:36:18,599 --> 00:36:21,839 variables like it's life cycle State 1059 00:36:19,980 --> 00:36:23,700 it's ready you can change your log level 1060 00:36:21,839 --> 00:36:25,740 we can change that log level to to debug 1061 00:36:23,700 --> 00:36:28,220 for example does that sound you can now 1062 00:36:25,740 --> 00:36:30,720 change the debug 1063 00:36:28,220 --> 00:36:32,040 dictionaries and so on another one I do 1064 00:36:30,720 --> 00:36:33,900 is have the version number and the 1065 00:36:32,040 --> 00:36:35,339 source code for the service they uh so 1066 00:36:33,900 --> 00:36:36,599 the audio just click on that will take 1067 00:36:35,339 --> 00:36:38,640 you the source code for that that 1068 00:36:36,599 --> 00:36:40,980 service and you also see the tags so 1069 00:36:38,640 --> 00:36:42,420 this um this service supports eventual 1070 00:36:40,980 --> 00:36:43,760 consistency 1071 00:36:42,420 --> 00:36:46,260 um and what should be able to do is um 1072 00:36:43,760 --> 00:36:48,300 go to a log you'll be able to see be 1073 00:36:46,260 --> 00:36:50,040 able to see the logs as well which um 1074 00:36:48,300 --> 00:36:51,839 I've probably got time to show that but 1075 00:36:50,040 --> 00:36:55,140 I just have a dashboard allows you to 1076 00:36:51,839 --> 00:36:59,820 inspect pretty much inspect everything 1077 00:36:55,140 --> 00:37:02,280 all right um about 20 I'm 24 so what's 1078 00:36:59,820 --> 00:37:04,680 the speed up bit so um 1079 00:37:02,280 --> 00:37:06,359 so mqt is great it's um support wildly 1080 00:37:04,680 --> 00:37:09,480 support it's very lightweight um but we 1081 00:37:06,359 --> 00:37:12,119 can swap it out for those transports 1082 00:37:09,480 --> 00:37:13,260 um Services versus actors so swap back 1083 00:37:12,119 --> 00:37:14,820 into controls between the two but 1084 00:37:13,260 --> 00:37:16,260 Services pretty much all you do anything 1085 00:37:14,820 --> 00:37:18,480 like this it can be multi-thread there's 1086 00:37:16,260 --> 00:37:20,280 no constraints whereas actors um because 1087 00:37:18,480 --> 00:37:21,960 of the actor model have got constraints 1088 00:37:20,280 --> 00:37:23,760 that make them um you know easier to 1089 00:37:21,960 --> 00:37:25,020 reason with they have an inbox of 1090 00:37:23,760 --> 00:37:27,780 incoming messages which they walk 1091 00:37:25,020 --> 00:37:31,140 through one at a time and then and that 1092 00:37:27,780 --> 00:37:33,619 prevents um Sr race conditions and so on 1093 00:37:31,140 --> 00:37:35,760 so you can um have um 1094 00:37:33,619 --> 00:37:37,440 basically very lightweight in scale we'd 1095 00:37:35,760 --> 00:37:38,700 have one service per process which can 1096 00:37:37,440 --> 00:37:40,560 be quite heavy weight or you can have 1097 00:37:38,700 --> 00:37:42,960 multiple Services per process so just to 1098 00:37:40,560 --> 00:37:44,160 show you that very quickly 1099 00:37:42,960 --> 00:37:48,300 um I'll just go back to the hello world 1100 00:37:44,160 --> 00:37:50,460 example if I say make 20 of these 1101 00:37:48,300 --> 00:37:52,140 okay we've now got 20 hello world set 1102 00:37:50,460 --> 00:37:54,180 they're all in the same services in the 1103 00:37:52,140 --> 00:37:56,160 same process so my aim is to basically 1104 00:37:54,180 --> 00:37:58,380 be able to scale up to a million 1105 00:37:56,160 --> 00:37:59,339 services on a single machine 1106 00:37:58,380 --> 00:38:00,900 um the other thing I might be able to 1107 00:37:59,339 --> 00:38:02,099 quickly show is if you've got lifecycle 1108 00:38:00,900 --> 00:38:04,619 manager 1109 00:38:02,099 --> 00:38:06,599 site in that's that's just using the 1110 00:38:04,619 --> 00:38:07,980 livestock manager take create 10 clients 1111 00:38:06,599 --> 00:38:09,720 and you can see that they're on 1112 00:38:07,980 --> 00:38:12,000 different processes because their their 1113 00:38:09,720 --> 00:38:13,619 process ID is different so yeah so we 1114 00:38:12,000 --> 00:38:15,900 support those sort of things and these 1115 00:38:13,619 --> 00:38:17,280 these features are a little bit small 1116 00:38:15,900 --> 00:38:18,540 components so you can you can compose 1117 00:38:17,280 --> 00:38:20,700 into your service so we don't have to 1118 00:38:18,540 --> 00:38:22,440 write these caches and uh these are 1119 00:38:20,700 --> 00:38:25,140 creating other actors all the time just 1120 00:38:22,440 --> 00:38:26,780 uh it's all being done uh so finally 1121 00:38:25,140 --> 00:38:29,040 we've got uh pipelines 1122 00:38:26,780 --> 00:38:30,240 pipelines allow us to create data flow 1123 00:38:29,040 --> 00:38:32,820 architectures that's what we use for the 1124 00:38:30,240 --> 00:38:36,240 machine machine learning and also for 1125 00:38:32,820 --> 00:38:39,720 our gstream media media pipelines and 1126 00:38:36,240 --> 00:38:40,560 the pipelines are just actors so you 1127 00:38:39,720 --> 00:38:43,020 just then you just link them together 1128 00:38:40,560 --> 00:38:44,640 through the topics and also the uh the 1129 00:38:43,020 --> 00:38:46,020 pythons themselves are pipeline elements 1130 00:38:44,640 --> 00:38:48,000 and so you basically you can have a 1131 00:38:46,020 --> 00:38:50,099 hierarchy of pipelines that consist of 1132 00:38:48,000 --> 00:38:52,079 other pipelines and so on 1133 00:38:50,099 --> 00:38:53,460 so it ends up looking a little bit like 1134 00:38:52,079 --> 00:38:54,780 this so up the top left you've got a 1135 00:38:53,460 --> 00:38:56,820 process manager which can use those 1136 00:38:54,780 --> 00:38:58,320 green lines to create all the actors and 1137 00:38:56,820 --> 00:38:59,339 then they all they all they all then 1138 00:38:58,320 --> 00:39:01,500 discover them so they ought to go and 1139 00:38:59,339 --> 00:39:04,520 join the registrar and the pipeline 1140 00:39:01,500 --> 00:39:04,520 managing and hook them all together 1141 00:39:04,560 --> 00:39:08,460 or four thanks very much okay so 1142 00:39:06,900 --> 00:39:10,079 hopefully let's give you a bit of 1143 00:39:08,460 --> 00:39:12,540 insight to how I hope this Tech this 1144 00:39:10,079 --> 00:39:14,339 framework can um uh bring all these 1145 00:39:12,540 --> 00:39:17,280 different domains into the site into the 1146 00:39:14,339 --> 00:39:19,800 site that make them consistent to use as 1147 00:39:17,280 --> 00:39:23,099 a application developer so devices are 1148 00:39:19,800 --> 00:39:24,960 Services uh pipelines are linked 1149 00:39:23,099 --> 00:39:27,420 basically data flow of services Samsung 1150 00:39:24,960 --> 00:39:28,980 for the ml models and and other 1151 00:39:27,420 --> 00:39:30,420 Frameworks like rise and you'll probably 1152 00:39:28,980 --> 00:39:32,339 have done this for the play framework it 1153 00:39:30,420 --> 00:39:36,359 can just be abstractions uh transport 1154 00:39:32,339 --> 00:39:37,800 extraction so um we've hired that away 1155 00:39:36,359 --> 00:39:41,040 um so I was going to talk a little bit 1156 00:39:37,800 --> 00:39:43,560 about uh why our buy versus build 1157 00:39:41,040 --> 00:39:45,540 um it's often comes up as Engineers we 1158 00:39:43,560 --> 00:39:47,460 want to build we want to build new stuff 1159 00:39:45,540 --> 00:39:49,619 but you want to make sure that um what 1160 00:39:47,460 --> 00:39:51,420 you're doing is um you know there isn't 1161 00:39:49,619 --> 00:39:52,740 already an answer out there already that 1162 00:39:51,420 --> 00:39:54,480 um that the existing Solutions are 1163 00:39:52,740 --> 00:39:56,460 definitely not good enough and also 1164 00:39:54,480 --> 00:39:58,020 internally have um good support from 1165 00:39:56,460 --> 00:39:59,040 your business engineering team and 1166 00:39:58,020 --> 00:40:01,079 you're able to support yourself long 1167 00:39:59,040 --> 00:40:02,280 term for um you know supporting the 1168 00:40:01,079 --> 00:40:05,280 community and so on and you're actually 1169 00:40:02,280 --> 00:40:07,020 doing an advantage hopefully hopefully 1170 00:40:05,280 --> 00:40:09,420 we'll try to compensate it internally 1171 00:40:07,020 --> 00:40:11,940 here the other is open source that's um 1172 00:40:09,420 --> 00:40:14,339 quite a challenge to convince your um 1173 00:40:11,940 --> 00:40:15,240 the business people to um allow you to 1174 00:40:14,339 --> 00:40:16,680 do this 1175 00:40:15,240 --> 00:40:18,000 um there are there are benefits but also 1176 00:40:16,680 --> 00:40:19,740 concerns around our giving away 1177 00:40:18,000 --> 00:40:21,960 competitive advantage and losing control 1178 00:40:19,740 --> 00:40:24,240 of the terminology and so on but really 1179 00:40:21,960 --> 00:40:26,820 I believe it's a virtuous circle that um 1180 00:40:24,240 --> 00:40:28,800 they actually put things that businesses 1181 00:40:26,820 --> 00:40:30,540 pretty much have entirely depending upon 1182 00:40:28,800 --> 00:40:33,660 open source and if they don't contribute 1183 00:40:30,540 --> 00:40:35,280 back that's obviously not a good thing 1184 00:40:33,660 --> 00:40:38,160 so here's a quick list of what comes up 1185 00:40:35,280 --> 00:40:40,200 next so um incorporating Roz actually 1186 00:40:38,160 --> 00:40:41,760 documentation examples um there's few 1187 00:40:40,200 --> 00:40:43,980 people like Thomas figaroid himself 1188 00:40:41,760 --> 00:40:45,240 without documentation but go Thomas yeah 1189 00:40:43,980 --> 00:40:46,980 I was just one night okay hang on 1190 00:40:45,240 --> 00:40:48,660 there's a device I don't recognize that 1191 00:40:46,980 --> 00:40:52,920 device on my network because I'm 1192 00:40:48,660 --> 00:40:55,619 Thomas's swag patch however an Adelaide 1193 00:40:52,920 --> 00:40:57,000 um and uh just quickly um I've been 1194 00:40:55,619 --> 00:40:58,740 chatting to John 1195 00:40:57,000 --> 00:41:00,119 um about whether we should finally 1196 00:40:58,740 --> 00:41:02,280 tackle our open Hardware conference so 1197 00:41:00,119 --> 00:41:03,720 if anyone thinks this is a not a totally 1198 00:41:02,280 --> 00:41:05,040 insane idea please come and come and 1199 00:41:03,720 --> 00:41:07,800 chat to us I'm going to be heading over 1200 00:41:05,040 --> 00:41:09,660 to the open Harbor Summit and see how 1201 00:41:07,800 --> 00:41:11,280 how they do it in the other side on the 1202 00:41:09,660 --> 00:41:13,140 outside of the planet 1203 00:41:11,280 --> 00:41:14,820 uh anyway but it'll also be bringing in 1204 00:41:13,140 --> 00:41:16,380 other languages and uh and also 1205 00:41:14,820 --> 00:41:19,079 incorporate bringing in some of our 1206 00:41:16,380 --> 00:41:21,720 previous origin C projects 1207 00:41:19,079 --> 00:41:24,599 uh support your local hacker space 1208 00:41:21,720 --> 00:41:26,460 um they're great places and uh we lost 1209 00:41:24,599 --> 00:41:28,560 the future in during covert but I'm the 1210 00:41:26,460 --> 00:41:30,240 ones that have survived are fantastic so 1211 00:41:28,560 --> 00:41:32,099 there's probably one near you or you 1212 00:41:30,240 --> 00:41:33,420 should perhaps start one 1213 00:41:32,099 --> 00:41:34,619 um and just like to thank everyone you 1214 00:41:33,420 --> 00:41:36,599 know people have the people in the 1215 00:41:34,619 --> 00:41:38,400 community uh trying to join around at 1216 00:41:36,599 --> 00:41:40,020 work um you know likes Australia and all 1217 00:41:38,400 --> 00:41:41,220 your volunteers I think give you guys 1218 00:41:40,020 --> 00:41:43,320 some of the followers because you put us 1219 00:41:41,220 --> 00:41:46,440 all back together in 1220 00:41:43,320 --> 00:41:48,000 um yeah and also everyone here and of 1221 00:41:46,440 --> 00:41:50,640 course John 1222 00:41:48,000 --> 00:41:52,339 um yeah that's that's kind of it rush 1223 00:41:50,640 --> 00:41:56,400 through it at the end but um I got there 1224 00:41:52,339 --> 00:41:58,560 amazing so it's back in Brisbane I hope 1225 00:41:56,400 --> 00:41:59,700 you have John doing his uh Jedi Mind 1226 00:41:58,560 --> 00:42:01,260 Tricks 1227 00:41:59,700 --> 00:42:03,900 the 1228 00:42:01,260 --> 00:42:05,040 yeah so um I think it was about only a 1229 00:42:03,900 --> 00:42:06,540 couple months before the connect the 1230 00:42:05,040 --> 00:42:08,760 Microsoft connected come out and also 1231 00:42:06,540 --> 00:42:11,400 the uh the parrot drone one of the very 1232 00:42:08,760 --> 00:42:13,020 early um consumer drones and uh I think 1233 00:42:11,400 --> 00:42:14,579 jonos we were just chatting one day I 1234 00:42:13,020 --> 00:42:16,200 said what can we do for Brisbane and 1235 00:42:14,579 --> 00:42:17,820 it's like hey we'll smack these two new 1236 00:42:16,200 --> 00:42:18,720 things together 1237 00:42:17,820 --> 00:42:20,339 um 1238 00:42:18,720 --> 00:42:22,500 which uh it was actually part of John 1239 00:42:20,339 --> 00:42:24,780 John's broader broader vision for um 1240 00:42:22,500 --> 00:42:27,060 tough another one was um this is us 1241 00:42:24,780 --> 00:42:29,160 doing um presentation preparation the 1242 00:42:27,060 --> 00:42:31,320 night before in the hotel room 1243 00:42:29,160 --> 00:42:33,119 um also another chat typical I like 1244 00:42:31,320 --> 00:42:34,680 volunteers Hall of Brisbane gets trashed 1245 00:42:33,119 --> 00:42:37,260 by floods and in modern days they 1246 00:42:34,680 --> 00:42:40,760 completely redo a conference I think 1247 00:42:37,260 --> 00:42:40,760 this is to prank Lana Brindley Maybe 1248 00:42:41,720 --> 00:42:44,720 all right 1249 00:42:51,240 --> 00:42:55,800 but it was very tasty 1250 00:42:53,119 --> 00:42:57,839 all right unfortunately we don't have 1251 00:42:55,800 --> 00:43:00,420 time for questions I'm sure you'll be 1252 00:42:57,839 --> 00:43:01,560 able to catch Angie around and about I 1253 00:43:00,420 --> 00:43:02,720 just want to say thank you very much 1254 00:43:01,560 --> 00:43:07,099 thank you 1255 00:43:02,720 --> 00:43:07,099 for coming and talk to us thank you 1256 00:43:08,790 --> 00:43:12,829 [Applause]