1 00:00:00,480 --> 00:00:03,480 foreign 2 00:00:08,220 --> 00:00:14,700 welcome everyone thanks for coming to my 3 00:00:10,679 --> 00:00:16,800 talk my name is Damien I'm the creator 4 00:00:14,700 --> 00:00:19,619 of micro python which I started about 10 5 00:00:16,800 --> 00:00:21,740 years ago some of you may have seen me 6 00:00:19,619 --> 00:00:23,699 give a talk before and some maybe not 7 00:00:21,740 --> 00:00:25,740 this talk is 8 00:00:23,699 --> 00:00:28,500 supposed to be non-technical there's a 9 00:00:25,740 --> 00:00:30,180 few graphs and plots of some data but 10 00:00:28,500 --> 00:00:33,800 otherwise it's mostly just about my 11 00:00:30,180 --> 00:00:33,800 experience over the past 10 years 12 00:00:35,340 --> 00:00:41,340 so what is macro python so for some 13 00:00:39,180 --> 00:00:42,600 people this is new and some people it's 14 00:00:41,340 --> 00:00:45,059 it's not 15 00:00:42,600 --> 00:00:47,460 um this is 16 00:00:45,059 --> 00:00:51,360 just an introduction 17 00:00:47,460 --> 00:00:54,780 now micropython is two things micro and 18 00:00:51,360 --> 00:00:57,300 python micro is sort of small and also 19 00:00:54,780 --> 00:00:59,699 means microcontroller and python is as 20 00:00:57,300 --> 00:01:00,719 you know the language that we're here to 21 00:00:59,699 --> 00:01:03,059 talk about 22 00:01:00,719 --> 00:01:04,920 and micropython is a complete 23 00:01:03,059 --> 00:01:07,560 re-implementation of python from the 24 00:01:04,920 --> 00:01:09,780 ground up no lines of code are shared 25 00:01:07,560 --> 00:01:13,080 with python it's it's a it's a complete 26 00:01:09,780 --> 00:01:15,240 uh a rewrite uh and The Way It Was 27 00:01:13,080 --> 00:01:16,560 Written was so that it was small and 28 00:01:15,240 --> 00:01:18,479 efficient 29 00:01:16,560 --> 00:01:19,979 um with the resources that you have at 30 00:01:18,479 --> 00:01:22,259 hand so when you're running on a really 31 00:01:19,979 --> 00:01:23,580 small computer a microcontroller you 32 00:01:22,259 --> 00:01:25,680 don't have much memory you don't have 33 00:01:23,580 --> 00:01:28,979 much hard disk space you don't even have 34 00:01:25,680 --> 00:01:31,080 a hard disk and you don't have much CPU 35 00:01:28,979 --> 00:01:33,000 so there's not many resources at your 36 00:01:31,080 --> 00:01:34,799 disposal to do things but you still want 37 00:01:33,000 --> 00:01:37,079 to run a high level language in this 38 00:01:34,799 --> 00:01:39,479 case Python and so micropython was 39 00:01:37,079 --> 00:01:42,600 implemented with the aim to be able to 40 00:01:39,479 --> 00:01:44,759 do this to run python you do list 41 00:01:42,600 --> 00:01:46,920 comprehensions for example and async IO 42 00:01:44,759 --> 00:01:49,500 to run that in the context of a tiny 43 00:01:46,920 --> 00:01:52,979 little embedded microcontrol that may 44 00:01:49,500 --> 00:01:53,579 power for example a coffee machine 45 00:01:52,979 --> 00:01:57,720 um 46 00:01:53,579 --> 00:01:59,820 and this started uh during my time as a 47 00:01:57,720 --> 00:02:02,939 theoretical physicist which was my 48 00:01:59,820 --> 00:02:06,360 previous life and I got sidetracked when 49 00:02:02,939 --> 00:02:07,920 I did a Kickstarter in 2013 uh to start 50 00:02:06,360 --> 00:02:10,619 to bring micro python sort of true 51 00:02:07,920 --> 00:02:14,760 fruition uh it took about six months to 52 00:02:10,619 --> 00:02:16,200 develop from April 2013 is when it 53 00:02:14,760 --> 00:02:18,239 started and then the kickstarter was at 54 00:02:16,200 --> 00:02:19,860 the end of that year and that was quite 55 00:02:18,239 --> 00:02:20,940 successful 56 00:02:19,860 --> 00:02:23,120 um and then there was another 57 00:02:20,940 --> 00:02:26,220 Kickstarter a few years later after that 58 00:02:23,120 --> 00:02:27,840 and then many collaborations 59 00:02:26,220 --> 00:02:30,360 um since then with with various 60 00:02:27,840 --> 00:02:33,120 companies and people and institutions 61 00:02:30,360 --> 00:02:36,060 and people such as yourself contributors 62 00:02:33,120 --> 00:02:38,520 hackers uh Educators who've contributed 63 00:02:36,060 --> 00:02:40,260 and used micro python so it's been been 64 00:02:38,520 --> 00:02:43,140 quite a journey in 10 years and I didn't 65 00:02:40,260 --> 00:02:45,000 really expect it to go where it's where 66 00:02:43,140 --> 00:02:47,160 it is today but I guess I didn't expect 67 00:02:45,000 --> 00:02:48,540 anything if you're asked what's going to 68 00:02:47,160 --> 00:02:51,420 happen in 10 years you don't really have 69 00:02:48,540 --> 00:02:53,580 such expectations but uh here we are and 70 00:02:51,420 --> 00:02:55,080 I'm just trying to sort of convey this 71 00:02:53,580 --> 00:02:57,360 things that have happened in those 10 72 00:02:55,080 --> 00:02:59,400 years with a sort of a name towards 73 00:02:57,360 --> 00:03:03,140 describing what it's like to actually 74 00:02:59,400 --> 00:03:03,140 maintain a big open source project 75 00:03:03,239 --> 00:03:06,900 um 76 00:03:04,260 --> 00:03:09,060 the uses of micropython today are pretty 77 00:03:06,900 --> 00:03:10,860 varied so we did quite a bit of work 78 00:03:09,060 --> 00:03:13,080 with the European Space Agency to make 79 00:03:10,860 --> 00:03:16,500 micropython robust enough to run in 80 00:03:13,080 --> 00:03:18,180 space and it's actually used as like a 81 00:03:16,500 --> 00:03:20,159 high level application control language 82 00:03:18,180 --> 00:03:22,680 in satellites 83 00:03:20,159 --> 00:03:24,379 uh it's the reason there is so that it's 84 00:03:22,680 --> 00:03:27,019 easy to update things 85 00:03:24,379 --> 00:03:29,879 whilst it's flying because traditional 86 00:03:27,019 --> 00:03:32,760 space-based programming you have you 87 00:03:29,879 --> 00:03:35,580 know in C or C plus plus or more ancient 88 00:03:32,760 --> 00:03:36,780 languages and it's very inflexible but 89 00:03:35,580 --> 00:03:38,459 these days they want things to be much 90 00:03:36,780 --> 00:03:41,700 more flexible so they can update code 91 00:03:38,459 --> 00:03:43,019 when it's out there and you know it 92 00:03:41,700 --> 00:03:45,659 takes 10 minutes or something to 93 00:03:43,019 --> 00:03:47,580 actually send data to it the other 94 00:03:45,659 --> 00:03:49,260 things have been in LEGO Mindstorms so 95 00:03:47,580 --> 00:03:52,980 Lego have used micropython to implement 96 00:03:49,260 --> 00:03:54,440 their new Mindstorms kits for teaching 97 00:03:52,980 --> 00:03:57,480 in schools 98 00:03:54,440 --> 00:04:00,299 also various commercial products like 99 00:03:57,480 --> 00:04:02,519 smart vending machines various medical 100 00:04:00,299 --> 00:04:03,420 devices 101 00:04:02,519 --> 00:04:06,659 um 102 00:04:03,420 --> 00:04:08,099 vehicle counting and weighing devices on 103 00:04:06,659 --> 00:04:11,400 the autobarns in Germany it's what it's 104 00:04:08,099 --> 00:04:13,080 used for a lung elastomer to measure 105 00:04:11,400 --> 00:04:15,480 lung elasticity came out recently 106 00:04:13,080 --> 00:04:18,359 there's many many applications also in 107 00:04:15,480 --> 00:04:20,940 teaching in research Labs people use it 108 00:04:18,359 --> 00:04:23,639 to you know heat up DNA samples and and 109 00:04:20,940 --> 00:04:26,040 things like this so it's it's become 110 00:04:23,639 --> 00:04:27,840 quite widely used because it's 111 00:04:26,040 --> 00:04:30,120 piggybacking on the success of python 112 00:04:27,840 --> 00:04:32,460 itself as a really you know easy to use 113 00:04:30,120 --> 00:04:34,620 language and then people who want to 114 00:04:32,460 --> 00:04:37,259 build something for physical with the 115 00:04:34,620 --> 00:04:38,639 hands like a robot or you know a toaster 116 00:04:37,259 --> 00:04:39,300 or something 117 00:04:38,639 --> 00:04:41,340 um 118 00:04:39,300 --> 00:04:43,979 they don't necessarily have a software 119 00:04:41,340 --> 00:04:46,139 engineering background but python allows 120 00:04:43,979 --> 00:04:48,780 them to actually program something to 121 00:04:46,139 --> 00:04:50,580 make it work and if you could mix you 122 00:04:48,780 --> 00:04:52,500 know this ease of programming with 123 00:04:50,580 --> 00:04:55,199 actual Hands-On you know make an LED 124 00:04:52,500 --> 00:04:57,800 blank and a motor turn people can make 125 00:04:55,199 --> 00:05:01,259 their eyes make their ideas 126 00:04:57,800 --> 00:05:03,240 real in a very 127 00:05:01,259 --> 00:05:04,979 a very straightforward way so that's 128 00:05:03,240 --> 00:05:06,740 kind of the key selling point of 129 00:05:04,979 --> 00:05:08,940 micropython is it's mixing 130 00:05:06,740 --> 00:05:11,100 microcontrollers and the Python language 131 00:05:08,940 --> 00:05:13,139 together 132 00:05:11,100 --> 00:05:14,520 um you can try it out yourself there are 133 00:05:13,139 --> 00:05:16,500 many many different Hardware platforms 134 00:05:14,520 --> 00:05:18,139 that you can get started with some of 135 00:05:16,500 --> 00:05:20,580 them are very cheap only a few dollars 136 00:05:18,139 --> 00:05:23,340 uh some of them you know more expensive 137 00:05:20,580 --> 00:05:25,620 you can run it on lots of different 138 00:05:23,340 --> 00:05:29,039 things with lots of different uh plugins 139 00:05:25,620 --> 00:05:31,139 Motors lights whatever you like you can 140 00:05:29,039 --> 00:05:33,180 actually try it online and that bottom 141 00:05:31,139 --> 00:05:35,160 link there 142 00:05:33,180 --> 00:05:38,300 so if you haven't played with it it's 143 00:05:35,160 --> 00:05:38,300 very easy to get started 144 00:05:38,340 --> 00:05:42,840 now 145 00:05:40,440 --> 00:05:44,160 um this talk is trying to give a bit of 146 00:05:42,840 --> 00:05:45,840 an insight into what it's like to 147 00:05:44,160 --> 00:05:48,180 maintain a big open source project like 148 00:05:45,840 --> 00:05:50,039 micropython I mean it's not as big as 149 00:05:48,180 --> 00:05:51,360 python itself for example or the Linux 150 00:05:50,039 --> 00:05:52,860 kernel but it's still you know 151 00:05:51,360 --> 00:05:55,320 reasonably 152 00:05:52,860 --> 00:05:56,580 um scienceable project and there are 153 00:05:55,320 --> 00:05:59,940 lots of challenges that come with 154 00:05:56,580 --> 00:06:02,160 maintaining the source code uh 155 00:05:59,940 --> 00:06:04,259 developing the code and then maintaining 156 00:06:02,160 --> 00:06:06,780 the community and building the community 157 00:06:04,259 --> 00:06:09,000 around it because obviously you don't 158 00:06:06,780 --> 00:06:10,919 really have a project if you don't have 159 00:06:09,000 --> 00:06:12,960 people using it or you can have your 160 00:06:10,919 --> 00:06:14,160 side hobby projects but you know a 161 00:06:12,960 --> 00:06:16,320 project that's out there in the world 162 00:06:14,160 --> 00:06:18,360 the users are really the big part of the 163 00:06:16,320 --> 00:06:21,419 project and we all know this with python 164 00:06:18,360 --> 00:06:24,780 and conferences like this 165 00:06:21,419 --> 00:06:27,000 so the social aspects of software 166 00:06:24,780 --> 00:06:29,699 engineering is I guess 167 00:06:27,000 --> 00:06:31,080 what I'm trying to convey here I'm a 168 00:06:29,699 --> 00:06:32,280 very technical person and I love working 169 00:06:31,080 --> 00:06:33,840 on micropython because it's very 170 00:06:32,280 --> 00:06:35,699 technical but 171 00:06:33,840 --> 00:06:38,520 as part of that I've been thrown into 172 00:06:35,699 --> 00:06:41,220 this you know thing of building a 173 00:06:38,520 --> 00:06:43,680 community and doing social sides of of 174 00:06:41,220 --> 00:06:45,780 um of computers and technology and I 175 00:06:43,680 --> 00:06:48,660 think it's it's really interesting 176 00:06:45,780 --> 00:06:50,160 um and really eye-opening so also at the 177 00:06:48,660 --> 00:06:51,479 end I'll give a bit of advice if you 178 00:06:50,160 --> 00:06:52,620 were ever going to set up your own 179 00:06:51,479 --> 00:06:54,660 project 180 00:06:52,620 --> 00:06:57,240 um what sort of things you can do at the 181 00:06:54,660 --> 00:06:59,940 start to make it easier later on 182 00:06:57,240 --> 00:07:02,360 so the main I guess the place where I 183 00:06:59,940 --> 00:07:06,060 spend most of my days on GitHub 184 00:07:02,360 --> 00:07:08,880 at this webpage or at my terminal and 185 00:07:06,060 --> 00:07:11,460 GitHub is is the sort of the Nexus of 186 00:07:08,880 --> 00:07:14,520 where everything happens uh it's 187 00:07:11,460 --> 00:07:16,139 micropython is free and open source so 188 00:07:14,520 --> 00:07:18,000 free means you can use it without having 189 00:07:16,139 --> 00:07:20,099 to pay and there's no licensing it's MIT 190 00:07:18,000 --> 00:07:21,840 license and open source means the source 191 00:07:20,099 --> 00:07:23,460 code is there and available and anyone 192 00:07:21,840 --> 00:07:25,680 can access it those two things are not 193 00:07:23,460 --> 00:07:27,599 always the same and you can have one 194 00:07:25,680 --> 00:07:30,720 without the other but micropython is 195 00:07:27,599 --> 00:07:35,460 both of those and you can access the 196 00:07:30,720 --> 00:07:37,319 code if you go to this GitHub website 197 00:07:35,460 --> 00:07:39,840 now 198 00:07:37,319 --> 00:07:43,800 um the open source development that we 199 00:07:39,840 --> 00:07:45,539 use uh is uh well it's based on git 200 00:07:43,800 --> 00:07:46,500 Source control uh if you're not familiar 201 00:07:45,539 --> 00:07:49,500 with this 202 00:07:46,500 --> 00:07:50,880 git is sort of it changes your way of 203 00:07:49,500 --> 00:07:53,220 thinking about code or at least it has 204 00:07:50,880 --> 00:07:55,860 for me and that code is not about the 205 00:07:53,220 --> 00:07:57,960 code well it's about the code you have 206 00:07:55,860 --> 00:07:59,580 but it's also very much about the 207 00:07:57,960 --> 00:08:01,979 stepping stones that you make every day 208 00:07:59,580 --> 00:08:05,280 to revolve your code from one spot to 209 00:08:01,979 --> 00:08:06,900 the next so a commit is a small stepping 210 00:08:05,280 --> 00:08:09,060 stone that you make 211 00:08:06,900 --> 00:08:11,460 your code has this form you make a 212 00:08:09,060 --> 00:08:14,039 commit and it changes its form and to me 213 00:08:11,460 --> 00:08:16,080 the commits the Delta the change the 214 00:08:14,039 --> 00:08:16,979 stepping stones are really the important 215 00:08:16,080 --> 00:08:18,479 part 216 00:08:16,979 --> 00:08:20,759 um because you can look at them in one 217 00:08:18,479 --> 00:08:22,080 go and say this is what I'm changing and 218 00:08:20,759 --> 00:08:24,360 it comes with a test and it comes with 219 00:08:22,080 --> 00:08:25,819 documentation and this is how the 220 00:08:24,360 --> 00:08:28,860 project evolves 221 00:08:25,819 --> 00:08:31,080 and we're very very strict with commits 222 00:08:28,860 --> 00:08:33,560 and how they're formatted and and The 223 00:08:31,080 --> 00:08:36,779 Styling and the commit messages 224 00:08:33,560 --> 00:08:39,300 and I think this this is really sort of 225 00:08:36,779 --> 00:08:41,940 part of keeping the community on track 226 00:08:39,300 --> 00:08:43,399 when it's developing a project 227 00:08:41,940 --> 00:08:46,800 um 228 00:08:43,399 --> 00:08:48,240 the having a very strict git history and 229 00:08:46,800 --> 00:08:50,399 a strict history of Stepping Stones 230 00:08:48,240 --> 00:08:52,380 allows you to easily track down bugs in 231 00:08:50,399 --> 00:08:54,300 the future when they do pop up so you 232 00:08:52,380 --> 00:08:55,980 can go back and use git bisects which is 233 00:08:54,300 --> 00:08:58,140 when you like we have a bug we know that 234 00:08:55,980 --> 00:08:59,820 this code is good this code is bad so 235 00:08:58,140 --> 00:09:01,980 somewhere in here the stepping stone 236 00:08:59,820 --> 00:09:04,620 went wrong and you can easily track it 237 00:09:01,980 --> 00:09:05,940 down and then fix it and it's also good 238 00:09:04,620 --> 00:09:07,019 just for you know people who are new to 239 00:09:05,940 --> 00:09:08,760 the project and they want to see well 240 00:09:07,019 --> 00:09:11,160 why was this change introduced they can 241 00:09:08,760 --> 00:09:13,680 go back in time and have a look and 242 00:09:11,160 --> 00:09:17,180 usually hopefully the commit description 243 00:09:13,680 --> 00:09:20,040 explains why this change was made 244 00:09:17,180 --> 00:09:21,839 so I think having a having this really 245 00:09:20,040 --> 00:09:24,720 strict git workflow is really important 246 00:09:21,839 --> 00:09:26,220 for us we have a lot of testing we've 247 00:09:24,720 --> 00:09:28,740 done a lot of work in testing part of 248 00:09:26,220 --> 00:09:31,500 the work with European space agency was 249 00:09:28,740 --> 00:09:33,500 to add a lot of tests to get close to 250 00:09:31,500 --> 00:09:36,000 100 coverage 251 00:09:33,500 --> 00:09:38,300 which is really important so every line 252 00:09:36,000 --> 00:09:40,380 of code has a test associated with it 253 00:09:38,300 --> 00:09:41,459 now the coverage is never perfect 254 00:09:40,380 --> 00:09:43,740 because 255 00:09:41,459 --> 00:09:45,540 there are still many more scenarios than 256 00:09:43,740 --> 00:09:48,000 just making sure every line of code is 257 00:09:45,540 --> 00:09:49,980 run but we do have very 258 00:09:48,000 --> 00:09:52,200 good coverage and we are very strict to 259 00:09:49,980 --> 00:09:53,519 try and keep that up and the continuous 260 00:09:52,200 --> 00:09:54,839 integration whenever there's a new 261 00:09:53,519 --> 00:09:57,300 command made there's a lot of tests that 262 00:09:54,839 --> 00:09:59,820 are run automatically and you have to 263 00:09:57,300 --> 00:10:02,580 pass those tests to get that commit in 264 00:09:59,820 --> 00:10:04,260 to get that next stepping stone done 265 00:10:02,580 --> 00:10:05,700 um it's so it's a really good safety 266 00:10:04,260 --> 00:10:08,459 harness you can be really confident that 267 00:10:05,700 --> 00:10:09,779 if you make a change to the code even if 268 00:10:08,459 --> 00:10:12,779 you don't know what's going on in the 269 00:10:09,779 --> 00:10:15,019 whole code base if you don't break any 270 00:10:12,779 --> 00:10:17,700 tests then probably your code's okay 271 00:10:15,019 --> 00:10:19,320 and by the same token like you can't you 272 00:10:17,700 --> 00:10:20,640 can't just go randomly deleting lines or 273 00:10:19,320 --> 00:10:22,620 anything because of the test will break 274 00:10:20,640 --> 00:10:24,660 so it's the test harness is really there 275 00:10:22,620 --> 00:10:26,180 it's like a safety barrier to make sure 276 00:10:24,660 --> 00:10:28,440 we don't do things wrong 277 00:10:26,180 --> 00:10:30,120 Hardware in the loop is something we 278 00:10:28,440 --> 00:10:31,920 don't have yet but we do have offline 279 00:10:30,120 --> 00:10:32,700 Hardware testing which is important as 280 00:10:31,920 --> 00:10:36,300 well 281 00:10:32,700 --> 00:10:39,420 and the releases uh the release cycle is 282 00:10:36,300 --> 00:10:41,880 not very strict but we try and aim for 283 00:10:39,420 --> 00:10:45,000 releases maybe every two three four 284 00:10:41,880 --> 00:10:47,160 months and the releases do take a lot of 285 00:10:45,000 --> 00:10:48,420 effort because you've got to get to a 286 00:10:47,160 --> 00:10:49,740 point where you're confident with the 287 00:10:48,420 --> 00:10:50,940 code and you know you're going to 288 00:10:49,740 --> 00:10:53,519 release it and people are going to 289 00:10:50,940 --> 00:10:54,839 upgrade and maybe they're gonna you know 290 00:10:53,519 --> 00:10:56,399 the coffee machines now are going to run 291 00:10:54,839 --> 00:10:58,440 the new version of macro Python and you 292 00:10:56,399 --> 00:10:59,880 don't want it to break down because you 293 00:10:58,440 --> 00:11:01,740 know embedded system is really hard to 294 00:10:59,880 --> 00:11:05,579 debug so we're very strict to make sure 295 00:11:01,740 --> 00:11:07,440 that the releases are equality and you 296 00:11:05,579 --> 00:11:09,420 know known to work and hopefully not 297 00:11:07,440 --> 00:11:10,740 have any bugs or at least no bugs that 298 00:11:09,420 --> 00:11:12,480 we know about 299 00:11:10,740 --> 00:11:14,820 um or if we do we can document them so 300 00:11:12,480 --> 00:11:17,100 the continuous integration testing we 301 00:11:14,820 --> 00:11:18,540 have helps us there but then also 302 00:11:17,100 --> 00:11:20,220 there's a lot of hard testing on real 303 00:11:18,540 --> 00:11:20,959 Hardware before we actually make a 304 00:11:20,220 --> 00:11:23,579 release 305 00:11:20,959 --> 00:11:25,560 it's also fun to write the release notes 306 00:11:23,579 --> 00:11:28,320 although that takes me a couple of days 307 00:11:25,560 --> 00:11:31,440 uh of full-time work to actually make a 308 00:11:28,320 --> 00:11:32,820 full set of release notes and it's good 309 00:11:31,440 --> 00:11:34,380 because it looks back on the past few 310 00:11:32,820 --> 00:11:36,440 months of what you've been doing and 311 00:11:34,380 --> 00:11:38,940 it's like this is a summary of my life 312 00:11:36,440 --> 00:11:41,160 these release notes but it's yeah it's 313 00:11:38,940 --> 00:11:42,779 good and it's nice to make a you know a 314 00:11:41,160 --> 00:11:44,040 summary and then put it out to the world 315 00:11:42,779 --> 00:11:45,420 and everyone reads it and they're like 316 00:11:44,040 --> 00:11:48,420 okay I like this new version because it 317 00:11:45,420 --> 00:11:50,160 has this and this feature 318 00:11:48,420 --> 00:11:53,100 um so this is this is sort of the 319 00:11:50,160 --> 00:11:54,779 day-to-day grind of of working on a 320 00:11:53,100 --> 00:11:55,500 piece of code 321 00:11:54,779 --> 00:11:57,839 um 322 00:11:55,500 --> 00:12:00,000 one thing that is really important here 323 00:11:57,839 --> 00:12:03,420 is funding so it's it's been 10 years 324 00:12:00,000 --> 00:12:05,220 since I've been working on this uh and 325 00:12:03,420 --> 00:12:07,200 you need a source of funding if you have 326 00:12:05,220 --> 00:12:09,480 a open source project that is you know 327 00:12:07,200 --> 00:12:11,100 going to live for so long because you 328 00:12:09,480 --> 00:12:13,260 know you need to live 329 00:12:11,100 --> 00:12:16,440 um and you can see here I've got we've 330 00:12:13,260 --> 00:12:18,180 got uh GitHub sponsors uh which is a 331 00:12:16,440 --> 00:12:20,579 program on GitHub where people can 332 00:12:18,180 --> 00:12:22,019 sponsor for like a dollar a month or a 333 00:12:20,579 --> 00:12:25,019 hundred dollars one off or whatever you 334 00:12:22,019 --> 00:12:27,660 like and that's a continual source of 335 00:12:25,019 --> 00:12:28,740 revenue for us now since 2020 and you 336 00:12:27,660 --> 00:12:30,959 can see there how much that's in 337 00:12:28,740 --> 00:12:33,240 Australian dollars how much we're 338 00:12:30,959 --> 00:12:35,519 receiving from GitHub sponsors so 2023 339 00:12:33,240 --> 00:12:37,740 is small because it hasn't finished yet 340 00:12:35,519 --> 00:12:39,720 um but we get you know a sizable amount 341 00:12:37,740 --> 00:12:43,860 of money there from GitHub sponsors and 342 00:12:39,720 --> 00:12:45,120 that helps to pay sort of two part-time 343 00:12:43,860 --> 00:12:47,399 maintainers 344 00:12:45,120 --> 00:12:48,240 um not myself technically 345 00:12:47,399 --> 00:12:51,180 um 346 00:12:48,240 --> 00:12:53,040 so although yeah there is a bit bit left 347 00:12:51,180 --> 00:12:54,360 over there but it is good the other 348 00:12:53,040 --> 00:12:56,100 sources of funding we have are Hardware 349 00:12:54,360 --> 00:12:56,880 Sales because it's a hardware software 350 00:12:56,100 --> 00:13:00,060 project 351 00:12:56,880 --> 00:13:01,920 we can have Hardware that we sell and 352 00:13:00,060 --> 00:13:03,779 some of the money that from that can be 353 00:13:01,920 --> 00:13:06,060 used to support the development which is 354 00:13:03,779 --> 00:13:09,300 great but there's also a lot of others 355 00:13:06,060 --> 00:13:11,160 contract work that I do and that other 356 00:13:09,300 --> 00:13:13,260 parts of the members of the team do as 357 00:13:11,160 --> 00:13:15,480 well so people come to us and say we 358 00:13:13,260 --> 00:13:17,100 want macro python in our product or we 359 00:13:15,480 --> 00:13:19,920 want this feature added to micro python 360 00:13:17,100 --> 00:13:22,200 or we want this thing improved and uh 361 00:13:19,920 --> 00:13:24,779 you know they pay us to do that work for 362 00:13:22,200 --> 00:13:27,000 them and usually that work that they've 363 00:13:24,779 --> 00:13:29,040 paid for goes back into the open source 364 00:13:27,000 --> 00:13:31,440 community in the sense that it's not 365 00:13:29,040 --> 00:13:33,480 hidden behind anything it's 366 00:13:31,440 --> 00:13:35,760 contributions made to micropython that 367 00:13:33,480 --> 00:13:37,740 everyone can benefit from so that's 368 00:13:35,760 --> 00:13:40,800 really great but you know that someone 369 00:13:37,740 --> 00:13:43,079 can pay for something to be to be done 370 00:13:40,800 --> 00:13:44,579 um so I yeah I can't really stress 371 00:13:43,079 --> 00:13:47,639 enough how important it is to have 372 00:13:44,579 --> 00:13:49,380 funding and I think there are a lot of 373 00:13:47,639 --> 00:13:51,660 pure software projects out there that 374 00:13:49,380 --> 00:13:54,779 find it really hard to get funding 375 00:13:51,660 --> 00:13:56,459 um and and to continue on 376 00:13:54,779 --> 00:13:58,800 um there's been lots of stories you know 377 00:13:56,459 --> 00:14:00,300 about about one-man projects that die 378 00:13:58,800 --> 00:14:02,459 because that person doesn't want to do 379 00:14:00,300 --> 00:14:04,560 it anymore and then people are relying 380 00:14:02,459 --> 00:14:06,240 on this project so where does it go so 381 00:14:04,560 --> 00:14:08,820 we're very fortunate to be able to 382 00:14:06,240 --> 00:14:11,880 continue and to sort of Thrive and have 383 00:14:08,820 --> 00:14:13,920 enough money to live and continue doing 384 00:14:11,880 --> 00:14:15,420 what we love which is develop um 385 00:14:13,920 --> 00:14:16,800 code 386 00:14:15,420 --> 00:14:19,200 the other point to make is about 387 00:14:16,800 --> 00:14:21,180 licensing which is a really deep topic I 388 00:14:19,200 --> 00:14:24,120 have a single line we use the MIT 389 00:14:21,180 --> 00:14:25,980 license the GPO license is kind of the 390 00:14:24,120 --> 00:14:28,980 opposite open source license to MIT if 391 00:14:25,980 --> 00:14:31,260 you want to say that we try we steer 392 00:14:28,980 --> 00:14:34,440 clear of GPL because in an embedded 393 00:14:31,260 --> 00:14:36,480 environment it's really dangerous but 394 00:14:34,440 --> 00:14:39,360 difficult for customers who want to use 395 00:14:36,480 --> 00:14:41,040 micropython to accept the GPL because it 396 00:14:39,360 --> 00:14:43,680 means that any code they write like if 397 00:14:41,040 --> 00:14:45,959 they're making a coffee machine again 398 00:14:43,680 --> 00:14:47,579 um then they have to open source all the 399 00:14:45,959 --> 00:14:50,040 code for the coffee machine which 400 00:14:47,579 --> 00:14:51,480 doesn't work they want to sell a coffee 401 00:14:50,040 --> 00:14:55,500 machine they don't want to have to open 402 00:14:51,480 --> 00:14:57,240 source the code for it so MIT is sort of 403 00:14:55,500 --> 00:14:58,560 yeah the choice that we've made and I 404 00:14:57,240 --> 00:15:00,839 think that was a good choice because 405 00:14:58,560 --> 00:15:02,519 it's allowed us to be successful people 406 00:15:00,839 --> 00:15:04,100 use micro python because they know they 407 00:15:02,519 --> 00:15:06,620 don't have to 408 00:15:04,100 --> 00:15:08,880 release their code to the public 409 00:15:06,620 --> 00:15:11,100 yeah as I said it's a big topic 410 00:15:08,880 --> 00:15:12,120 licensing 411 00:15:11,100 --> 00:15:14,220 um 412 00:15:12,120 --> 00:15:16,620 so the community the community is very 413 00:15:14,220 --> 00:15:18,540 important as I mentioned before and in 414 00:15:16,620 --> 00:15:20,579 micropython there are sort of these four 415 00:15:18,540 --> 00:15:22,680 portals of the community mostly can 416 00:15:20,579 --> 00:15:24,360 interact with the project 417 00:15:22,680 --> 00:15:26,519 um apart from we also have in-person 418 00:15:24,360 --> 00:15:28,860 things events uh once a month at the 419 00:15:26,519 --> 00:15:30,899 hacker space in Melbourne but online 420 00:15:28,860 --> 00:15:33,920 there's GitHub which I told about before 421 00:15:30,899 --> 00:15:37,139 which is where the code is there's also 422 00:15:33,920 --> 00:15:38,940 GitHub reviews also for discussions 423 00:15:37,139 --> 00:15:41,279 which is like a forum we used to have a 424 00:15:38,940 --> 00:15:43,740 phpb forum but it was getting a bit old 425 00:15:41,279 --> 00:15:45,240 so we switched to GitHub discussions we 426 00:15:43,740 --> 00:15:47,459 also use GitHub for the wiki we had a 427 00:15:45,240 --> 00:15:49,860 separate Wiki at one point but we again 428 00:15:47,459 --> 00:15:52,560 tried to consolidate there and we use 429 00:15:49,860 --> 00:15:55,019 Discord now for chat we used to use 430 00:15:52,560 --> 00:15:58,500 slack but we're using Discord so we have 431 00:15:55,019 --> 00:16:00,300 moved around uh you know it's um sort of 432 00:15:58,500 --> 00:16:02,699 this is another part like it's it's not 433 00:16:00,300 --> 00:16:04,380 easy to choose a technology to use to 434 00:16:02,699 --> 00:16:05,880 interact like we had to make choices 435 00:16:04,380 --> 00:16:07,199 here and some people were not happy with 436 00:16:05,880 --> 00:16:08,220 those choices 437 00:16:07,199 --> 00:16:11,459 um they were like we want to stick on 438 00:16:08,220 --> 00:16:14,399 slack or we want to stay with phpb but 439 00:16:11,459 --> 00:16:15,540 as you know the maintainer and open 440 00:16:14,399 --> 00:16:17,459 source project you have to make 441 00:16:15,540 --> 00:16:18,899 decisions to keep things moving and 442 00:16:17,459 --> 00:16:19,500 there are reasons we went 443 00:16:18,899 --> 00:16:21,360 um 444 00:16:19,500 --> 00:16:23,639 one way or the other to keep up with you 445 00:16:21,360 --> 00:16:25,440 know the pace of technology and change 446 00:16:23,639 --> 00:16:27,240 but these sorts of things you don't 447 00:16:25,440 --> 00:16:29,100 really think about when you're thinking 448 00:16:27,240 --> 00:16:30,240 about coding and software engineering 449 00:16:29,100 --> 00:16:32,220 and I don't think you know any 450 00:16:30,240 --> 00:16:35,160 University course would teach you you 451 00:16:32,220 --> 00:16:37,560 know how to choose a Wikipedia page or a 452 00:16:35,160 --> 00:16:40,860 you know a chat interface for all your 453 00:16:37,560 --> 00:16:44,579 users but it's it's really taxing and 454 00:16:40,860 --> 00:16:45,959 you know the the team was we spent quite 455 00:16:44,579 --> 00:16:47,759 a lot of time discussing this and 456 00:16:45,959 --> 00:16:50,519 thinking what should we do and that 457 00:16:47,759 --> 00:16:53,940 takes away from our time you know we 458 00:16:50,519 --> 00:16:55,560 need to make a living but do we spend 459 00:16:53,940 --> 00:16:58,199 you know 10 hours discussing what 460 00:16:55,560 --> 00:17:00,959 platform to use so you have to make 461 00:16:58,199 --> 00:17:02,880 decisions about what you spend your time 462 00:17:00,959 --> 00:17:03,779 on and these things these things you 463 00:17:02,880 --> 00:17:07,319 have to be 464 00:17:03,779 --> 00:17:10,260 um conscious to take up your time 465 00:17:07,319 --> 00:17:12,120 this is a graph here of the monthly 466 00:17:10,260 --> 00:17:13,199 contributions to micropython over 10 467 00:17:12,120 --> 00:17:15,059 years 468 00:17:13,199 --> 00:17:18,120 um which is the 469 00:17:15,059 --> 00:17:20,059 taken from the the git repository so all 470 00:17:18,120 --> 00:17:25,799 the stepping stones that we've made 471 00:17:20,059 --> 00:17:29,880 each the blue and the orange uh the 472 00:17:25,799 --> 00:17:31,020 commits made per month so the scale goes 473 00:17:29,880 --> 00:17:32,820 up to there to a few hundred so there's 474 00:17:31,020 --> 00:17:36,000 a few hundred commits per month 475 00:17:32,820 --> 00:17:37,679 the blue is the ones made by myself and 476 00:17:36,000 --> 00:17:40,140 the few other core maintainers and you 477 00:17:37,679 --> 00:17:43,740 can see that sort of trending downwards 478 00:17:40,140 --> 00:17:45,539 the Orange is by a sort of contributors 479 00:17:43,740 --> 00:17:47,760 who are not the core maintainers and 480 00:17:45,539 --> 00:17:50,460 that is trending slightly upwards there 481 00:17:47,760 --> 00:17:53,220 towards the end which is really great 482 00:17:50,460 --> 00:17:55,080 um the green line is actually on the 483 00:17:53,220 --> 00:17:57,720 right hand scale there that's the number 484 00:17:55,080 --> 00:18:00,240 of unique contributors per month 485 00:17:57,720 --> 00:18:03,240 so who've made a commit to the 486 00:18:00,240 --> 00:18:05,580 repository so that's going up as well so 487 00:18:03,240 --> 00:18:08,160 this is a good Trend in that the 488 00:18:05,580 --> 00:18:09,780 maintainers are doing less commits Excel 489 00:18:08,160 --> 00:18:12,299 people doing more commits and there are 490 00:18:09,780 --> 00:18:13,740 more unique people contributing to the 491 00:18:12,299 --> 00:18:15,660 project so 492 00:18:13,740 --> 00:18:17,460 that's sort of 493 00:18:15,660 --> 00:18:19,320 you know that is not without a lot of 494 00:18:17,460 --> 00:18:21,059 hard work to Foster an environment where 495 00:18:19,320 --> 00:18:22,640 that can happen where external 496 00:18:21,059 --> 00:18:25,440 contributors can come in and make 497 00:18:22,640 --> 00:18:27,720 contributions to a project especially 498 00:18:25,440 --> 00:18:28,320 one where it's 499 00:18:27,720 --> 00:18:30,600 um 500 00:18:28,320 --> 00:18:32,160 you know you have to make sure that the 501 00:18:30,600 --> 00:18:33,960 code is still space grade in the sense 502 00:18:32,160 --> 00:18:35,280 that you can actually go up in a 503 00:18:33,960 --> 00:18:37,320 satellite and run and not crash the 504 00:18:35,280 --> 00:18:39,600 satellite so we have to be very careful 505 00:18:37,320 --> 00:18:41,880 about introducing commits loot 506 00:18:39,600 --> 00:18:43,980 repository introducing code changes and 507 00:18:41,880 --> 00:18:45,600 I think it's uh something to be proud of 508 00:18:43,980 --> 00:18:47,940 that we can get to a stage where we have 509 00:18:45,600 --> 00:18:49,260 a lot of external contributors so you 510 00:18:47,940 --> 00:18:52,200 know we have in 511 00:18:49,260 --> 00:18:54,299 in a year we have over maybe 150 to 200 512 00:18:52,200 --> 00:18:55,919 people contributing and we have around 513 00:18:54,299 --> 00:18:58,440 an average of around about three commits 514 00:18:55,919 --> 00:19:00,600 a day which is a lot like if you sustain 515 00:18:58,440 --> 00:19:03,660 three commits a day for a year over 10 516 00:19:00,600 --> 00:19:05,660 years that's a lot of work 517 00:19:03,660 --> 00:19:05,660 um 518 00:19:05,900 --> 00:19:10,919 this here so this is a plot of the 519 00:19:09,600 --> 00:19:13,320 number of people who have downloaded 520 00:19:10,919 --> 00:19:16,320 some micropython firmware to put on a 521 00:19:13,320 --> 00:19:19,020 piece of Hardware I like um an esp32 522 00:19:16,320 --> 00:19:20,520 board or something the different colors 523 00:19:19,020 --> 00:19:22,140 are the different boards that your 524 00:19:20,520 --> 00:19:23,700 different ports 525 00:19:22,140 --> 00:19:27,600 um but different boards that you can use 526 00:19:23,700 --> 00:19:30,900 different targets architectures so the 527 00:19:27,600 --> 00:19:32,640 orange line is the Raspberry Pi rp2040 528 00:19:30,900 --> 00:19:35,580 which is a really popular board that 529 00:19:32,640 --> 00:19:37,080 came out at the start of 2021 and that's 530 00:19:35,580 --> 00:19:39,539 sort of taken off a lot that got a lot 531 00:19:37,080 --> 00:19:42,299 of popularity the blue line just below 532 00:19:39,539 --> 00:19:44,460 it is esp32 which is espresso's new 533 00:19:42,299 --> 00:19:47,160 Wi-Fi board well not that new but you 534 00:19:44,460 --> 00:19:48,960 can see that started around 2017. the 535 00:19:47,160 --> 00:19:51,299 green was their previous Wi-Fi board the 536 00:19:48,960 --> 00:19:55,020 esp866 which started off earlier than 537 00:19:51,299 --> 00:19:57,140 that then the red is then stm32 which is 538 00:19:55,020 --> 00:20:00,720 the pi boards 539 00:19:57,140 --> 00:20:02,220 architecture so this is showing 540 00:20:00,720 --> 00:20:03,840 obviously that we're having more users 541 00:20:02,220 --> 00:20:05,700 or at least more people downloading but 542 00:20:03,840 --> 00:20:07,559 hopefully it's a good indication of of 543 00:20:05,700 --> 00:20:09,179 users so downloads per month so we've 544 00:20:07,559 --> 00:20:10,679 had over three million total downloads 545 00:20:09,179 --> 00:20:11,820 in 546 00:20:10,679 --> 00:20:13,980 so this is eight and a half years 547 00:20:11,820 --> 00:20:16,020 because we didn't start downwards you 548 00:20:13,980 --> 00:20:17,880 know immediately 549 00:20:16,020 --> 00:20:19,679 um so this is showing that the community 550 00:20:17,880 --> 00:20:21,179 is definitely people using is growing 551 00:20:19,679 --> 00:20:22,080 and the previous 552 00:20:21,179 --> 00:20:23,640 um 553 00:20:22,080 --> 00:20:25,740 that graph was showing you know people 554 00:20:23,640 --> 00:20:28,400 contributing to the code uh the way 555 00:20:25,740 --> 00:20:28,400 that's trending 556 00:20:28,799 --> 00:20:33,419 so 557 00:20:30,600 --> 00:20:35,580 building a community uh it's it's really 558 00:20:33,419 --> 00:20:38,520 hard and people have to do you know 559 00:20:35,580 --> 00:20:40,440 marketing branding Website Maintenance 560 00:20:38,520 --> 00:20:42,780 um I didn't really like doing those 561 00:20:40,440 --> 00:20:44,220 things but you'd have to do them anyway 562 00:20:42,780 --> 00:20:45,419 um some people are very understanding 563 00:20:44,220 --> 00:20:46,740 when you're part they're part of a 564 00:20:45,419 --> 00:20:48,120 community and they're like yes I 565 00:20:46,740 --> 00:20:49,740 understand that this is your time that 566 00:20:48,120 --> 00:20:51,960 you're spending on this 567 00:20:49,740 --> 00:20:54,240 um and that's really great 568 00:20:51,960 --> 00:20:56,039 um some people are less understanding 569 00:20:54,240 --> 00:20:58,260 most people have good intentions but 570 00:20:56,039 --> 00:21:00,900 sometimes people just like don't 571 00:20:58,260 --> 00:21:03,900 understand and get stuff wrong or get 572 00:21:00,900 --> 00:21:05,880 confused and are rude and you know 573 00:21:03,900 --> 00:21:07,140 they'll say oh this doesn't work and it 574 00:21:05,880 --> 00:21:09,240 should work and this is a terrible 575 00:21:07,140 --> 00:21:10,799 project or you know they could they get 576 00:21:09,240 --> 00:21:12,960 the bad end of the stick they come to 577 00:21:10,799 --> 00:21:14,520 some part some corner of micro python 578 00:21:12,960 --> 00:21:15,960 that's just not well tested and doesn't 579 00:21:14,520 --> 00:21:17,760 work and it gives them a bad impression 580 00:21:15,960 --> 00:21:20,820 of the entire thing 581 00:21:17,760 --> 00:21:23,100 um so it there is a lot of a varied sort 582 00:21:20,820 --> 00:21:25,799 of interactions that you have and people 583 00:21:23,100 --> 00:21:26,580 have different experiences 584 00:21:25,799 --> 00:21:28,620 um 585 00:21:26,580 --> 00:21:30,240 for example to make a bug report people 586 00:21:28,620 --> 00:21:31,620 are supposed to 587 00:21:30,240 --> 00:21:33,059 you know tell you what the bug is and 588 00:21:31,620 --> 00:21:35,280 make it so you help help you to fix it 589 00:21:33,059 --> 00:21:36,659 we haven't we have an issue template 590 00:21:35,280 --> 00:21:37,980 where if you want to submit a report 591 00:21:36,659 --> 00:21:40,799 there's a template that you fill out 592 00:21:37,980 --> 00:21:43,140 that was a we added that so that people 593 00:21:40,799 --> 00:21:44,520 would actually give good bug reports 594 00:21:43,140 --> 00:21:47,159 um but it's been almost completely 595 00:21:44,520 --> 00:21:48,240 ineffectual ineffective people basically 596 00:21:47,159 --> 00:21:50,159 just delete the template and write 597 00:21:48,240 --> 00:21:52,559 whatever they want and usually don't 598 00:21:50,159 --> 00:21:53,820 even say you know what version they're 599 00:21:52,559 --> 00:21:56,580 using what Hardware they're using this 600 00:21:53,820 --> 00:21:58,679 so like my Wi-Fi doesn't work 601 00:21:56,580 --> 00:22:00,240 um and you're like the complete loss to 602 00:21:58,679 --> 00:22:02,640 help them because there could be so many 603 00:22:00,240 --> 00:22:04,020 reasons why the Wi-Fi doesn't work 604 00:22:02,640 --> 00:22:06,299 um so some people you know most people 605 00:22:04,020 --> 00:22:08,220 have good intentions but 606 00:22:06,299 --> 00:22:09,720 um usually the good people are the 607 00:22:08,220 --> 00:22:12,720 people who don't say anything and I just 608 00:22:09,720 --> 00:22:14,400 quietly understanding the people who are 609 00:22:12,720 --> 00:22:16,260 who don't understand are the people who 610 00:22:14,400 --> 00:22:17,820 make you know take your time and you 611 00:22:16,260 --> 00:22:19,679 need to help them but you don't need to 612 00:22:17,820 --> 00:22:20,520 but you choose to 613 00:22:19,679 --> 00:22:22,559 um 614 00:22:20,520 --> 00:22:24,240 it's important to exit expectations but 615 00:22:22,559 --> 00:22:26,100 people rarely read documentation or 616 00:22:24,240 --> 00:22:27,419 anything so even if you have a Manifesto 617 00:22:26,100 --> 00:22:29,400 people are not going to read it and 618 00:22:27,419 --> 00:22:31,020 they're just going to behave the way 619 00:22:29,400 --> 00:22:33,000 they do anyway 620 00:22:31,020 --> 00:22:34,860 um 621 00:22:33,000 --> 00:22:36,419 and some people well a lot of people 622 00:22:34,860 --> 00:22:38,100 with micro python come to it to try and 623 00:22:36,419 --> 00:22:40,140 learn like how do I turn an LED on and 624 00:22:38,100 --> 00:22:42,600 how do I blink an LED and then they get 625 00:22:40,140 --> 00:22:44,640 stuck and then they ask for help and 626 00:22:42,600 --> 00:22:47,280 complete I mean this is great we're 627 00:22:44,640 --> 00:22:48,960 teaching people here but who has time to 628 00:22:47,280 --> 00:22:50,820 help them 629 00:22:48,960 --> 00:22:52,500 like do you take it out of your time to 630 00:22:50,820 --> 00:22:54,179 do that when you have other pressing 631 00:22:52,500 --> 00:22:55,500 things to do to write code or to 632 00:22:54,179 --> 00:22:57,240 maintain a website that's you know 633 00:22:55,500 --> 00:23:00,299 crashed or something so you really have 634 00:22:57,240 --> 00:23:02,159 to decide where your time goes and you 635 00:23:00,299 --> 00:23:03,600 know what you want to do and with a big 636 00:23:02,159 --> 00:23:04,919 Community hopefully there are other 637 00:23:03,600 --> 00:23:07,919 people that can step in when the 638 00:23:04,919 --> 00:23:09,240 questions are simple and as a maintainer 639 00:23:07,919 --> 00:23:10,320 you know you're needed for when the 640 00:23:09,240 --> 00:23:13,559 questions are really hard or there 641 00:23:10,320 --> 00:23:14,220 really is a deep problem to solve 642 00:23:13,559 --> 00:23:16,380 um 643 00:23:14,220 --> 00:23:19,260 so I think the main one of the main 644 00:23:16,380 --> 00:23:21,059 points is that as a maintainer uh 645 00:23:19,260 --> 00:23:22,500 it's important to make sure that there's 646 00:23:21,059 --> 00:23:24,260 Direction and that people don't get lost 647 00:23:22,500 --> 00:23:27,720 and be like oh there's no decisions here 648 00:23:24,260 --> 00:23:29,700 uh everyone has different opinions and 649 00:23:27,720 --> 00:23:31,559 we don't know what to do so to maintain 650 00:23:29,700 --> 00:23:33,240 his role really to set the direction to 651 00:23:31,559 --> 00:23:34,320 say out of all these choices we have 652 00:23:33,240 --> 00:23:36,179 we're going to choose this one because 653 00:23:34,320 --> 00:23:37,559 of this and this some people are going 654 00:23:36,179 --> 00:23:39,299 to be upset some people are going to be 655 00:23:37,559 --> 00:23:42,299 happy but at least this is a decision 656 00:23:39,299 --> 00:23:43,980 made and we can move forward and then 657 00:23:42,299 --> 00:23:45,539 people can deal with the decision and 658 00:23:43,980 --> 00:23:47,640 say okay well this is how it works and 659 00:23:45,539 --> 00:23:49,260 I'll I will work around that 660 00:23:47,640 --> 00:23:51,480 um but if you just let it sort of 661 00:23:49,260 --> 00:23:54,059 flounder and there's no Direction then I 662 00:23:51,480 --> 00:23:55,679 don't that's really not a good way to 663 00:23:54,059 --> 00:23:58,200 run a project 664 00:23:55,679 --> 00:24:00,840 but it is very rewarding I mean I you 665 00:23:58,200 --> 00:24:01,919 know there are times when it's tough and 666 00:24:00,840 --> 00:24:03,480 you don't want to open your email 667 00:24:01,919 --> 00:24:05,940 because there might be emails that are 668 00:24:03,480 --> 00:24:07,200 people you know not abusing you but you 669 00:24:05,940 --> 00:24:09,240 know it's not really nice to read 670 00:24:07,200 --> 00:24:10,320 responses sometimes 671 00:24:09,240 --> 00:24:12,059 um but then there are other times when 672 00:24:10,320 --> 00:24:13,919 you get really nice fruit replies from 673 00:24:12,059 --> 00:24:15,059 people or you know thank you it's a 674 00:24:13,919 --> 00:24:16,559 great project and things work really 675 00:24:15,059 --> 00:24:18,960 well and I've used it for this and that 676 00:24:16,559 --> 00:24:22,080 and it's really helped me a lot so it is 677 00:24:18,960 --> 00:24:23,640 very very rewarding when things work 678 00:24:22,080 --> 00:24:25,559 um a lot of people are thankful and 679 00:24:23,640 --> 00:24:26,700 grateful which is nice and there are 680 00:24:25,559 --> 00:24:28,860 definitely some standout community 681 00:24:26,700 --> 00:24:32,340 members that help and go out of their 682 00:24:28,860 --> 00:24:34,620 way without any without asking them and 683 00:24:32,340 --> 00:24:36,240 they help to you know Foster the 684 00:24:34,620 --> 00:24:39,659 community and answer questions and be 685 00:24:36,240 --> 00:24:41,700 there all the time which is really great 686 00:24:39,659 --> 00:24:43,140 um and as a maintainer you have to 687 00:24:41,700 --> 00:24:44,700 recognize those people and the people 688 00:24:43,140 --> 00:24:46,620 who have expertise and are willing to 689 00:24:44,700 --> 00:24:49,140 help and really allow them to do their 690 00:24:46,620 --> 00:24:51,539 thing and Foster them and Foster their 691 00:24:49,140 --> 00:24:54,080 activities and say yeah well just step 692 00:24:51,539 --> 00:24:56,880 back and let them do what they do well 693 00:24:54,080 --> 00:24:58,260 and also you know I ask people when I 694 00:24:56,880 --> 00:24:59,880 don't know something 695 00:24:58,260 --> 00:25:01,919 um I ask them and say you know you know 696 00:24:59,880 --> 00:25:03,299 more about me than this topic so can you 697 00:25:01,919 --> 00:25:04,140 please help 698 00:25:03,299 --> 00:25:06,120 um 699 00:25:04,140 --> 00:25:09,179 so that's that's good 700 00:25:06,120 --> 00:25:11,580 uh this is a an obligatory uh AI 701 00:25:09,179 --> 00:25:13,440 generated image 702 00:25:11,580 --> 00:25:15,659 it's such a fantastic technology but 703 00:25:13,440 --> 00:25:17,039 anyway this is just uh to show you the 704 00:25:15,659 --> 00:25:19,140 next bit is about bug reports and 705 00:25:17,039 --> 00:25:21,840 contributions uh 706 00:25:19,140 --> 00:25:23,700 so when as I said before bug reports 707 00:25:21,840 --> 00:25:25,679 some people do not give very good bug 708 00:25:23,700 --> 00:25:26,760 reports because it's not reproducible if 709 00:25:25,679 --> 00:25:28,799 you're going to give a bug report please 710 00:25:26,760 --> 00:25:31,980 make it reproducible and then at least 711 00:25:28,799 --> 00:25:33,059 someone can try and fix it uh but then 712 00:25:31,980 --> 00:25:34,919 on the other side there are 713 00:25:33,059 --> 00:25:36,419 contributions a pull request someone who 714 00:25:34,919 --> 00:25:37,679 has an idea about how to change the code 715 00:25:36,419 --> 00:25:39,659 and they're like I would like to change 716 00:25:37,679 --> 00:25:41,580 the code this way and when someone makes 717 00:25:39,659 --> 00:25:44,039 a pull request 718 00:25:41,580 --> 00:25:47,159 um you're like okay here's another 10 719 00:25:44,039 --> 00:25:49,799 hours of my life gone because Apple 720 00:25:47,159 --> 00:25:51,419 request it I mean that was joking in a 721 00:25:49,799 --> 00:25:53,460 way but a progress is a lot of work to 722 00:25:51,419 --> 00:25:55,080 go through uh sometimes it's you know 723 00:25:53,460 --> 00:25:58,140 it's a few hours reviewing at the code 724 00:25:55,080 --> 00:25:59,640 giving some feedback and then they go 725 00:25:58,140 --> 00:26:00,960 back and forth for maybe a few weeks 726 00:25:59,640 --> 00:26:02,640 where you say you have the assessor 727 00:26:00,960 --> 00:26:04,200 changed has to be tested you review the 728 00:26:02,640 --> 00:26:05,580 code again and eventually it's good 729 00:26:04,200 --> 00:26:07,740 enough to merge and then you go through 730 00:26:05,580 --> 00:26:09,419 the last little details of making sure 731 00:26:07,740 --> 00:26:11,580 the commit message is right and all the 732 00:26:09,419 --> 00:26:13,140 tests passed properly and maybe the CI 733 00:26:11,580 --> 00:26:15,480 broke down a little bit so you have to 734 00:26:13,140 --> 00:26:17,880 fix that and it takes it takes a lot of 735 00:26:15,480 --> 00:26:19,980 time to get a contribution from someone 736 00:26:17,880 --> 00:26:21,720 in and that's not to discourage 737 00:26:19,980 --> 00:26:25,140 contributions because they're obviously 738 00:26:21,720 --> 00:26:27,179 what make the project work but as a 739 00:26:25,140 --> 00:26:28,860 maintainer and if you maintain or a 740 00:26:27,179 --> 00:26:31,200 one-day maintain a project you have to 741 00:26:28,860 --> 00:26:34,679 be aware that you need to do a lot of 742 00:26:31,200 --> 00:26:36,659 work to you know Foster People Foster 743 00:26:34,679 --> 00:26:39,539 the community and get 744 00:26:36,659 --> 00:26:40,980 the code in and get it working sometimes 745 00:26:39,539 --> 00:26:42,120 it's easier to do the work yourself and 746 00:26:40,980 --> 00:26:44,580 just say okay I don't know how to fix 747 00:26:42,120 --> 00:26:46,740 this I'll just do it but you can't do 748 00:26:44,580 --> 00:26:50,039 that forever so you really have to 749 00:26:46,740 --> 00:26:52,760 learn how to get people uh 750 00:26:50,039 --> 00:26:55,020 efficiently contributing to the project 751 00:26:52,760 --> 00:26:56,880 and one thing we do down the bottom 752 00:26:55,020 --> 00:26:59,940 there is we we try and automate as much 753 00:26:56,880 --> 00:27:01,260 as we can in terms of contributions so 754 00:26:59,940 --> 00:27:04,860 people will have 755 00:27:01,260 --> 00:27:07,260 uh a pull request and it will go through 756 00:27:04,860 --> 00:27:11,100 the you know code formatter and spell 757 00:27:07,260 --> 00:27:12,539 checker and code styling and even commit 758 00:27:11,100 --> 00:27:14,100 formatting and making sure they've 759 00:27:12,539 --> 00:27:15,299 signed it off and everything and those 760 00:27:14,100 --> 00:27:17,220 things are all automated so we don't 761 00:27:15,299 --> 00:27:19,559 have to worry about that and people can 762 00:27:17,220 --> 00:27:22,020 check their code formatting make sure it 763 00:27:19,559 --> 00:27:23,940 is correct fix it if it's not and once 764 00:27:22,020 --> 00:27:25,740 all those things pass what's left is to 765 00:27:23,940 --> 00:27:29,400 review the actual code which is you know 766 00:27:25,740 --> 00:27:31,200 the the meat of the of the problem 767 00:27:29,400 --> 00:27:33,480 um one thing 768 00:27:31,200 --> 00:27:35,460 to mention is that sometimes you know 769 00:27:33,480 --> 00:27:37,559 you get sort of lost up in a lost in a 770 00:27:35,460 --> 00:27:40,020 conversation or a heated argument or a 771 00:27:37,559 --> 00:27:43,080 discussion or something about code and 772 00:27:40,020 --> 00:27:45,419 you know I think a lot of us have 773 00:27:43,080 --> 00:27:46,799 probably been there and one good thing 774 00:27:45,419 --> 00:27:49,380 to try and do is to distance yourself 775 00:27:46,799 --> 00:27:51,539 from the actual personal interaction and 776 00:27:49,380 --> 00:27:54,179 talk about the code rather than the 777 00:27:51,539 --> 00:27:56,580 people and instead of saying why does 778 00:27:54,179 --> 00:27:57,840 your code do this you say why does that 779 00:27:56,580 --> 00:28:00,240 code do this 780 00:27:57,840 --> 00:28:03,000 so don't talk about the person's code 781 00:28:00,240 --> 00:28:04,980 you just talk about the code and that 782 00:28:03,000 --> 00:28:07,020 removes the sort of human 783 00:28:04,980 --> 00:28:08,880 there is human element there and that's 784 00:28:07,020 --> 00:28:11,159 important but 785 00:28:08,880 --> 00:28:12,539 when you say code doesn't work 786 00:28:11,159 --> 00:28:14,340 you can almost feel like an attack on 787 00:28:12,539 --> 00:28:16,140 someone who wrote that code so and say 788 00:28:14,340 --> 00:28:20,120 instead of saying why doesn't your code 789 00:28:16,140 --> 00:28:20,120 work why doesn't that code work 790 00:28:21,539 --> 00:28:27,179 so some maybe take home points about 791 00:28:24,900 --> 00:28:29,220 what I've learned it's hard to maintain 792 00:28:27,179 --> 00:28:32,039 open as a project it takes a lot of 793 00:28:29,220 --> 00:28:33,779 effort but I'm still here after 10 years 794 00:28:32,039 --> 00:28:35,460 and it's I still love the technical side 795 00:28:33,779 --> 00:28:37,919 and the community side is really great 796 00:28:35,460 --> 00:28:39,419 it's really rewarding you can't please 797 00:28:37,919 --> 00:28:40,799 everyone there are always people who 798 00:28:39,419 --> 00:28:43,320 will think that you've made a bad 799 00:28:40,799 --> 00:28:44,220 decision but you just have to go with it 800 00:28:43,320 --> 00:28:45,900 um 801 00:28:44,220 --> 00:28:47,760 if you're passionate and just follow 802 00:28:45,900 --> 00:28:50,520 your instincts and have some nice sort 803 00:28:47,760 --> 00:28:52,620 of like a Manifesto or a goal or a real 804 00:28:50,520 --> 00:28:55,140 overarching principles in this case it's 805 00:28:52,620 --> 00:28:57,720 micro python so microcontrollers and 806 00:28:55,140 --> 00:28:59,039 small and python so we've got to try and 807 00:28:57,720 --> 00:29:00,600 Implement python but we've got to do it 808 00:28:59,039 --> 00:29:02,039 in a way that's small so we're not 809 00:29:00,600 --> 00:29:03,360 trying to re-implement python so when 810 00:29:02,039 --> 00:29:05,159 people say oh it's missing this and this 811 00:29:03,360 --> 00:29:07,140 and this and we need that to match I'm 812 00:29:05,159 --> 00:29:09,179 like we can't because it won't work then 813 00:29:07,140 --> 00:29:11,100 like it won't work on a microcontroller 814 00:29:09,179 --> 00:29:12,480 so we have these two pillars micro and 815 00:29:11,100 --> 00:29:14,159 Python and we have to make sure we 816 00:29:12,480 --> 00:29:15,539 follow those for all the decisions that 817 00:29:14,159 --> 00:29:16,080 we make 818 00:29:15,539 --> 00:29:18,419 um 819 00:29:16,080 --> 00:29:20,100 so I think we're very fortunate to have 820 00:29:18,419 --> 00:29:21,539 a project that has strong ties to 821 00:29:20,100 --> 00:29:22,740 hardware and software so it's a real 822 00:29:21,539 --> 00:29:24,539 physical thing 823 00:29:22,740 --> 00:29:26,460 you can make something and it's also a 824 00:29:24,539 --> 00:29:29,059 software technical project and that 825 00:29:26,460 --> 00:29:31,440 really gives a good balance 826 00:29:29,059 --> 00:29:32,820 and funding as I said before if you want 827 00:29:31,440 --> 00:29:34,380 to do a project long term you really 828 00:29:32,820 --> 00:29:36,899 need to think about how you'll find the 829 00:29:34,380 --> 00:29:38,399 project maybe you can do it in spare 830 00:29:36,899 --> 00:29:39,960 time but in this case the project is 831 00:29:38,399 --> 00:29:42,600 large and we have multiple maintainers 832 00:29:39,960 --> 00:29:44,039 and some people working on it and that's 833 00:29:42,600 --> 00:29:47,940 the only thing they're doing so we need 834 00:29:44,039 --> 00:29:49,740 to be able to pay people to do that 835 00:29:47,940 --> 00:29:50,880 um if you're going to set up a project I 836 00:29:49,740 --> 00:29:52,440 suggest you know you choose your license 837 00:29:50,880 --> 00:29:54,899 from the beginning write a code of 838 00:29:52,440 --> 00:29:56,340 conduct pick a git workflow that you're 839 00:29:54,899 --> 00:29:58,260 comfortable that you like and stick with 840 00:29:56,340 --> 00:29:59,399 it uh make sure you have a nice 841 00:29:58,260 --> 00:30:01,080 directory structure so you don't have to 842 00:29:59,399 --> 00:30:03,360 move files around at the end 843 00:30:01,080 --> 00:30:05,580 uh version well from the beginning 844 00:30:03,360 --> 00:30:07,620 hopefully using semv if you don't uh 845 00:30:05,580 --> 00:30:10,020 read about it if you don't know 846 00:30:07,620 --> 00:30:11,580 um have some really good code formatting 847 00:30:10,020 --> 00:30:13,980 and linters and things set up from the 848 00:30:11,580 --> 00:30:16,679 beginning uh Choose You Know pick black 849 00:30:13,980 --> 00:30:18,720 as your python code formatter and clang 850 00:30:16,679 --> 00:30:20,940 format or something else 851 00:30:18,720 --> 00:30:22,860 um and stick with that because that will 852 00:30:20,940 --> 00:30:25,320 really help you from the beginning 853 00:30:22,860 --> 00:30:26,760 and then I think it's just some final 854 00:30:25,320 --> 00:30:30,000 words that 855 00:30:26,760 --> 00:30:31,679 I think sum up a lot of the you know a 856 00:30:30,000 --> 00:30:32,940 lot of the time during the day when I'm 857 00:30:31,679 --> 00:30:34,620 working 858 00:30:32,940 --> 00:30:36,360 um I feel like this is that when you put 859 00:30:34,620 --> 00:30:38,580 yourself out there online when you've 860 00:30:36,360 --> 00:30:41,159 made some code or when you make a change 861 00:30:38,580 --> 00:30:42,240 when you make a comment or a post in a 862 00:30:41,159 --> 00:30:44,100 community you're really putting yourself 863 00:30:42,240 --> 00:30:45,000 out there 864 00:30:44,100 --> 00:30:47,760 um 865 00:30:45,000 --> 00:30:50,220 and you know that's hard because you put 866 00:30:47,760 --> 00:30:53,220 your you know your person out into the 867 00:30:50,220 --> 00:30:54,960 world and 868 00:30:53,220 --> 00:30:56,399 when you're maintaining an open source 869 00:30:54,960 --> 00:30:58,679 Community I think you have to be aware 870 00:30:56,399 --> 00:31:00,539 of that and make Foster an environment 871 00:30:58,679 --> 00:31:01,980 where people are comfortable to put 872 00:31:00,539 --> 00:31:04,380 themselves out so when they put up a 873 00:31:01,980 --> 00:31:06,960 piece of code to review you realize that 874 00:31:04,380 --> 00:31:08,279 maybe put a lot of time into this or 875 00:31:06,960 --> 00:31:10,200 they've made a bug report which is 876 00:31:08,279 --> 00:31:11,760 really detailed and they put their self 877 00:31:10,200 --> 00:31:13,919 out there so if we have a community 878 00:31:11,760 --> 00:31:15,840 where people are comfortable to put 879 00:31:13,919 --> 00:31:18,600 themselves out there you know you can 880 00:31:15,840 --> 00:31:21,360 build that Community up and make it a 881 00:31:18,600 --> 00:31:24,960 really nice place to live well to live 882 00:31:21,360 --> 00:31:26,340 online and to work and I hope that's 883 00:31:24,960 --> 00:31:27,899 what we've done with macro python over 884 00:31:26,340 --> 00:31:29,760 the past 10 years has fostered a good 885 00:31:27,899 --> 00:31:32,399 Community where we have members who 886 00:31:29,760 --> 00:31:36,179 enjoy being part of it because yeah I do 887 00:31:32,399 --> 00:31:38,100 and I think it's it's it's been yeah a 888 00:31:36,179 --> 00:31:40,980 very rewarding 10 year so far and I hope 889 00:31:38,100 --> 00:31:42,720 that there is more more to come there 890 00:31:40,980 --> 00:31:44,330 definitely is 891 00:31:42,720 --> 00:31:48,339 so thanks thanks for listening 892 00:31:44,330 --> 00:31:48,339 [Applause] 893 00:31:49,100 --> 00:31:54,600 thank you very much Damian and we have 894 00:31:51,600 --> 00:31:56,940 time for one quick question 895 00:31:54,600 --> 00:31:58,559 anyone would okay oh look 896 00:31:56,940 --> 00:32:00,980 yeah I think I'll go for the close one 897 00:31:58,559 --> 00:32:00,980 sorry 898 00:32:03,419 --> 00:32:09,840 thanks Damian um how have you uh engage 899 00:32:07,860 --> 00:32:11,820 people to you know assist you with 900 00:32:09,840 --> 00:32:13,919 testing on I guess the variety of 901 00:32:11,820 --> 00:32:18,059 hardware and applications 902 00:32:13,919 --> 00:32:19,620 yes uh that's a good question we we have 903 00:32:18,059 --> 00:32:21,720 automated testing which is obviously 904 00:32:19,620 --> 00:32:24,899 people don't have to to work with but 905 00:32:21,720 --> 00:32:26,399 for Hardware testing uh 906 00:32:24,899 --> 00:32:28,140 people 907 00:32:26,399 --> 00:32:30,539 there are community members or people 908 00:32:28,140 --> 00:32:32,100 who do that when there's a like a when 909 00:32:30,539 --> 00:32:33,720 there's a pull request or a piece of a 910 00:32:32,100 --> 00:32:35,820 commit for a particular piece of 911 00:32:33,720 --> 00:32:37,260 Hardware that I may not have or that may 912 00:32:35,820 --> 00:32:39,899 be difficult to test other people will 913 00:32:37,260 --> 00:32:42,120 test it um you can just you know at them 914 00:32:39,899 --> 00:32:44,039 on GitHub and say at you know X can you 915 00:32:42,120 --> 00:32:46,380 please test on your hardware and they do 916 00:32:44,039 --> 00:32:48,480 that and that's great yeah so there are 917 00:32:46,380 --> 00:32:51,419 people who will test on various pieces 918 00:32:48,480 --> 00:32:54,720 of hardware for us and applications 919 00:32:51,419 --> 00:32:56,580 sorry application applications you mean 920 00:32:54,720 --> 00:32:58,980 um so people have got micro python 921 00:32:56,580 --> 00:33:02,039 applications and how do they test them 922 00:32:58,980 --> 00:33:05,760 yeah is there any pre-release testing 923 00:33:02,039 --> 00:33:09,059 that we have I have a few uh private 924 00:33:05,760 --> 00:33:10,679 applications that I do tests on before 925 00:33:09,059 --> 00:33:12,240 we make a release to make sure that 926 00:33:10,679 --> 00:33:14,820 they're still functioning and they yeah 927 00:33:12,240 --> 00:33:18,899 they do good integration testing of the 928 00:33:14,820 --> 00:33:20,480 uh well the whole system yeah 929 00:33:18,899 --> 00:33:23,760 um 930 00:33:20,480 --> 00:33:25,980 usually people will test the non-release 931 00:33:23,760 --> 00:33:27,899 code like before we make a release like 932 00:33:25,980 --> 00:33:29,399 they'll be like we need to up we want to 933 00:33:27,899 --> 00:33:31,200 use the latest micropy because it has a 934 00:33:29,399 --> 00:33:32,399 feature that we need and I'll test it on 935 00:33:31,200 --> 00:33:33,779 their project and then there'll be a bug 936 00:33:32,399 --> 00:33:36,299 report the next day about how something 937 00:33:33,779 --> 00:33:37,740 broke and we fix it so it is a really 938 00:33:36,299 --> 00:33:39,720 continuous process there's always 939 00:33:37,740 --> 00:33:40,860 generally a lot of testing from other 940 00:33:39,720 --> 00:33:42,600 people 941 00:33:40,860 --> 00:33:45,140 which is very helpful 942 00:33:42,600 --> 00:33:45,140 thank you 943 00:33:48,539 --> 00:33:52,740 thank you so much and here are your 944 00:33:50,940 --> 00:33:53,840 speaker gifts and thank you very much 945 00:33:52,740 --> 00:33:56,880 presenting today 946 00:33:53,840 --> 00:33:59,480 [Music] 947 00:33:56,880 --> 00:33:59,480 thank you