Code Wars: Rust vs MicroPython – The Definitive Guide!

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] hey robot makers hope you're having a good day so far so do you want to learn the differences between rust and micropython and how they would compete head-to-head then this is the show for you so let's di straight in my name is Kevin come with me as we build robots bring them to life with code and have a whole load of fun along the way okay let me get over to my slides we'll make a quick start and then we'll have some fun with some code so yes today's show is all about rust and micropython you might not have heard of rust hopefully you have uh and it's a it's a newish programming language and it's very specific for making very fast code uh and very safe code as well um when I say it's fast it's as fast as C is what people are claiming out there we've heard of micropython before I've covered this an awful lot on the channel so I'm very keen to see does rust um is it as good as micropython is it better how does it compare so micropython is a lean and efficient implementation Python 3 and it's designed for microcontrollers in a constrained environment usually running on microcontrollers looks around to see if I've got a microcontroller to show you such as this rasby Pi Pico here so we're going to have a bit of a head-to-head Smackdown between these two so first of all let's just have a quick talk about generations of languages I've just pressed that mute button I don't know how many times that it hasn't taken so generations of programming languages so there are approximately five generations of programming languages the very first ones were just pure machine code so back in the' 40s and 50s um people were building great big pieces of iron um computers at the very very beginning and uh yeah you had to program them basically bit by bit with machine code so you would Punch The Punch Cards this would be fed into the machine it would then read in the code and run the program uh The Next Step then was Assembly Language so this is kind of a symbolic language youve got little three character three or four character uh little symbols like move and then you would have some parameters like move uh the value seven into memory address you know 1 two 3 uh and Assembly Language really made it a lot easier uh than machine code because machine code is simply ones and zeros or at best octal or heximal code whereas Assembly Language is a bit more like English and you could even have comments and things in there and reusable code segments you wouldn't have to like put in every single piece uh of code one at a time you could have reusable code blocks in there as well next was the third generation languages these were things like uh Fortran and Cobalt now back in the day I actually did learn Cobalt um for like two years at University that's the uh common business oriented language I think it's called Uh and it's used quite a lot in Banks and things it's very very structured uh and yeah that was one of the very earlier languages that was adopted ftram was used in universities a lot for doing sort of financial or U numeric type um applications next up then we had and also mentioned that c is also a third generation language fourth generation languages came along in the uh sort of early 70s uh things like SQL although you might argue that's not a true programming language um it is a language um and we have other four generation languages such as C++ Java the ad we know processing language uh and even microp Python and rust are technically fourth generation languages and then in the sort of 80s we had um the beginnings of fifth generation languages um such as um such as um languages that could do program um program I can't even pronounce it logic programming uh and AI so python is one of the leaders in this kind of environment um because you can do things like chat GPT in Python you can there's lots of um extensive libraries out there for doing uh AI based neural network programming like uh tend to flow and things like that so they're kind of fifth generation languages um and the generations is it's a humanistic rather absolute thing so if you're coming at me in the in the comments to say no microp Python's a fifth generation or rust is a fifth these are heuristic they tend to be a set of rules that Define what the languages are and also the kind of time period so you could argue things like chat GPT a sixth generation languages if code creates code is that sixth generation so AI generated uh but there isn't actually any um any Generations um that have been specified certainly not on Wikipedia anyway to sort of Define what these are so just wanted to put that in context there you can also see the kind of time period we're talking about so python sort of mid um early to mid90s Java isort of late '90s uh the aduino processing Library uh processing language um sort of 2005ish onwards uh rust we'll get to that shortly but you can see 2010s mic python slight later than rust so you can see the kind of maturity of some of these languages as well obviously that's not every language that's out there so let's talk about Russ for a second so Russ began as a personal project by Gren hore is it h hore not pronouncing that correct probably in 2006 uh Milla sponsored it so Milla who did the uh the web browser Netscape uh they sponsored this in 2009 and it was announced in 2010 and then the first stable release usually takes quite a while you can see 5 years later May 15th 2015 first version of rust was um announced uh and and released so the name rust is a play on words related to rust fungus which is a parasite that grows on Fast distributed systems uh and uh a nod to the speed and concurrency aims of the language as well so rust is the idea you can use a lot of the cause if you think about how architecture has changed over you know past 50 years in Computing we now have multiple cores even your mobile phone will have multiple CES on there so Russ kind of you know natively takes care of these then we have lovely micropython of course so I'll put my biases out that I absolutely love microp python um it's going to take a lot to tear me away from this and there's a number of reasons that we'll get into today why that is so micropython was created by Damen George as part of a kickstar campaign 2013 uh and the project was developed uh to make a lean and efficient version reimplementation of Python 3 language for microcontrollers and con scin systems so that was specifically designed for microcontrollers first couple of releases micropython from 2014 uh and then it continued on from there till today so 10 years later and micropython just reflects the the languages design goals of being a small concise version of python suitable for microcontrollers and other low resource systems so it's specifically that in mind it's an interpreted language whereas rust is a compiled language we can talk about that as well a bit further on so language design philosophy so rust emphasizes zero cost abstractions what does that mean we'll get into that memory safety without garbage collection and type safety so one of the things off the bat I would say rust is quite an advanced language so if you're a beginner um it's probably not an easy language to learn as your very first language something like micropython or python is a lot easier to comprehend there's a lot less kind of crft around the language and we'll see that when we get into actually writing some code whereas rust kind of is if you've learned C and C++ or ad weo um rust will be a lot easier to understand because you'll already have a lot of that knowledge coming to rust so it's probably a better as a second language to learn I would say and things like this zeroc cost abstractions that will make a lot more sense if you view something like C++ in an objectoriented way memory safety is to do with if you create a variable or an object in memory um something has to take um care of that something has to know how many things are referencing that piece of that variable or that object in memory um and if you don't manage that correctly you could leave that um offened and that means that you've got memory leakage and over time the memory leakage will be to an extent that it runs out of RAM on on whatever is you're you're developing now if that's developing something for Robotics and you're on a constrained system like a PCO an esp32 or a feather um you'll run out memory pretty quickly on that so memory safety is quite an important thing now micropython takes care of that for you uh the the sort of counter to that is micropython with it being python based Has This Global interlock which is uh kind of con straight and really can only run one thread at a time even though we can do multi-threading in effect we're only really running one thing at a time on there so python kind of helps you but it kind of gets in the way as well whereas rust doesn't have those kinds of problems and it's running very very fast because it's machine code whereas micropython is interpreted so micropython aims to be as compatible with the python standard as possible so you can bring all that Knowledge from python that you have and use it on micropython so there's no extra quirks really to learn on that other than if you're using Hardware you know general purpose iOS and things like that you just need to learn those specific things and there's a focus on Simplicity and efficiency and that's the thing that I love about microp python is it's very very quick to develop in and it's very quick to get running on your your processor the code itself may run a lot slower maybe 10 times slower than rust code um but maybe that isn't an issue for what you're doing so if we're doing robotics say I'm working on this robot arm I'll give you an update on in a minute and I want to position this uh this stepper motor um how often do I need to update that is it like fractions of nanc or is it every half second uh and the difference in speed updates there might make a difference between whether you run you develop something in rust or develop it in micropython for example but I've never found a use case yet where micropython is too slow uh for any kind of Robotics projects again let me know in the comments if you think I'm wrong there if you think there is certain things maybe a balancing robot you need to have that kind of level of speed uh and have you actually tried that in micropython yourself uh and come up against a barrier be very interested to know what the real world use cases are where you think rust is better the micropython so from I've got a note there about comparing the design goals and how they influence the language features so rust I would say is an evolution of C it's very C like in how you program it and we will do some programming in a minute or two um so if you're coming from C C++ background or Arduino rust will kind of make sense to you um and it's a lot safer so the code that you generate is is more likely to run uh once you've got rid of any bugs in there so there's a lot more effort to put into making things tight safe so if you have like an integer for example you can't you know you can't use a floating Point number the compiler will basically just say this is incompatible in Python it's like it's an object you can store whatever you like in there it's fine but that could potentially lead to code problems later on so rust is very safe from a development point of view what you write um will work micropython is just very very chill and relaxed it'll let you do whatever you want but there are consequences to that that might mean that you got bugs in your code that you can't easily debug so let's have a look at performance and efficiency so rust is compile time it has um compile time memory and type management so that means that it will like I said detect problems in your code before it's even finished compiling so that you can fix those and get code that works the way you intend it to lots of features of roster design to reduce down any of these kind of memory type leakage areas that you might get that's very common in Computing um certainly with c um C and Arduino type programs you can you can create objects and then not get rid of them properly and then you get memory leakage and over time that will cause problems your chip might reboot and you might just see a pause for a second as it starts running the code again Russ will get rid of all those kinds of issues micropython is an interpreted language so it's obviously a bit slower there's an overhead that the fact you have to have The Interpreter installed on the the device that you're using uh so that does take up a bit of memory and also you know run time but it's optimized very quick and easy to program on microcontrollers so one of the main reasons I love micropython is just how quickly you can write a program how simply that looks as a piece of code and how quickly that can actually be open and running on a microcontroller and with tools like thony um you can develop in thony and actually run the code as you're developing it whereas with rust you have to write your code compile the code once the code is compiled you then have to load that onto your PCO um and that might involve many different steps we'll have a look at how how we can do that later on um not as a demonstration but kind of as an in theory cuz I've actually not been able to get that to work yet it's quite complicated to do and I think the tooling around micropython is a lot more designed for getting you up and running getting code running on microcontrollers than rust which is kind of a general it can run on big servers it can run on embedded devices it's kind of a bit all over the place whereas micropython is like specifically for embedded devices so I would say in that case micropython wins but from an execution point of view rust is going to be quick so development and environment tools so again this is where I think my python would win because we have things like thony which means you can you can develop code and run it at the same time on the microcontroller you can debug the code on the microcontroller and at no point is that tool that you're using taking you away from getting the the answers and getting the code up and running rust is a kind of traditional development process so you write some code you then stick it through your compiler um you can also build out using a a tool called cargo we'll have a look at Cargo in a minute that's a package manager it's kind of a a bit of an everything it can it can grab all the dependencies your code might need um compile them in link them in and then generate the output um and then we then need some way of getting that um compile code onto your microcontroller so unlike micropython which has like it detect it kind of shows up as a file system when you plug it into a computer you're not going to get that with a microcontroller that's going to run rust code it's more like when you have an Arduino and you plug it in you've got to compile and upload it's very similar to that but there isn't a tool out there currently like the Arduino ID interface um for rust so I kind of think they're missing that for microcontrollers now there is this rust up tool chain manager and what that will do is just make sure your entire rust environment is up to date you can simply just do Rust up and update your entire environment uh the cargo will also do all the dependency management for things that you bring into your your code so any kind of modules the version management of all that is is managed by cargo it's pretty cool I know that there's been quite a lot of work in the python environment to try and bring it up to the standard of cargo because it's like a really really neat tool but in micropython we've got the reple this uh revaluate print Loop um command line that you can when you plug in a a PCO device you flash micropython onto it you can then interact with the microcontroller directly and then we've got tools like thony Visual Studio code move there's quite a lot of different ones even the aduo um have a tool actually I'll fire that up because um I was meaning to show this I think last time I uh was talking about um arduinos and esp32s I think so aduino have actually developed this aduino lab for micropython so you can develop micropython um using an an aduino tool so that's pretty cool that they've developed their own there's like a very simple connect button Run Stop reset save your code you can have like a console the terminal that pops up you can also look at your files as well so they made this very very simple uh environment for working with micropython so that's really cool that they've done that uh but they are an embedded device um manufacturer so you know I guess that's in their wheelhouse now with micropython we've got the The Limited standard Library so if you think python is like the fullblown version micropython is a subset of that and it doesn't have every single feature of the full micropython the full Python 3 uh but it's got well more than enough to get you up and running um to do a lot of things that we do in robotics and we also have upip I think it's now just called pip which is the package manager so we can grab um if we have an internet connection on our microcontroller we can grab libraries live off the web um and use it on our code so I would say the micro micro python environment is very mature specifically for Robotics and embedded devices whereas rust is more of a traditional desktop and server based application environment so I think M python wins that one as well I'm not biased memory management wise so rust has this really interesting ownership model it's also got this borrowing we can have a look at that perhaps uh in the code in a minute and lifetimes for compile time memory safety again this is these features um are all designed around making sure that uh your code is really robust and doesn't introduce uh memory leaks and issues to do with memory management so this ownersh ship model is about um if you think about when you write a piece of code and you create a variable who owns that variable and who's looking after that variable's life cycle so this lifetimes um ensures that uh uh if if you if you assign that variable a number a VAR a value of any kind um once you finish with that what happens to that memory how does it get deallocated python takes care of all that for us we can manage with the the garbage collector that's in there Russ doesn't have a garbage collection because it has these different ways of managing it instead the idea of borrowing is quite interesting so you can have um a variable say you've got like X for a location on a screen and um you want to borrow that value that's in that variable you can actually do that um in your code and you can add extra uh parameters or extra attributes you should say to that variable so you might give it like a a width or a height for example um and it doesn't affect the original variable you can just add these attributes to it by borrowing from it so there's all these extra features in Rust there to do with memory management which is pretty cool and very useful on microcontrollers because we haven't got very much RAM to to begin with whereas micropython has garbage collection there's a a part of the The Interpreter every now and again it will just check to see do we need to get rid of any memory do we need to like reallocate it to something else when something goes out of scope um and some of these concepts are quite um intermediate to advance skill I would say if you don't if you've never understood what garbage collection is in micropython well that's that's the beauty of it you don't need to know about it it just takes care of it but essentially what happens is as your your program is running and it's assigning variables values and then deallocating them you don't even have to worry about that deallocation python takes care of that for you uh and the garbage collection is essentially just keeping the table of what variables are in memory and you know how big they are and so on so when you request space for a new variable in memory it takes care of all that for you without direct user interation as it says there so this kind of like micropython takes care of things for you there's an overhead with that in in runtime and also the use of memory um it takes memory to use memory if you like in micropython whereas in Rust um the way that the system is designed from a compile point of view means that you don't have to worry about garbage collection it's kind of built into how these objects are created now there is an overhead with that as well and we'll see that when we I'm going to write through three programs in a minute one in micropython one in Rust and one in C and we're going to compare the different sizes of the outputs of each of them to see how efficient they actually are we'll do that actually on the the Mac rather than on a microcontroller so let's have a look at use cases and application area so rust is ideal for systems programming web assembly embedded devices and high performance applications so again efficiency and reliability is key for rust it's designed to be the sort of future the current and the future way of writing programs a lot of people that love rust are really really fanatical about their love of rust um and that's because of the extra features that that brings over languages like C and Java whereas micropython is suited for microcontroller programming internet of things and educational purposes and I wouldn't say some people sort of say it's like a toy language because or python is a scripting language and I would completely disagree with that just because it's simple doesn't make it um less useful or not proper or not professional python has used an industry all over the place things like chat GPT um programming in Python uh and there's a lot of products out there that are based on micropython as well so it's definitely a growing language there so I would say micropython is definitely suited towards education and getting people up and running but that Simplicity extends to experts as well because they can just get on with the complex task whatever is they doing without worrying about the language getting in the way yeah Adam we're not going to talk about Java today obviously python would win hands down let's talk about community and support them so roster's got a growing Community extensive documentation it is very good to be to be honest the documentation there they've got quite a lot of active forums and corporate support so we'll have a look at the the website in a minute when we go to the demo micropython also has a very strong Community um and particularly around the embedded and educational sectors and there's lots of resources and tutorials online quite a few I've created myself on there but the community around micropython cannot be understated uh when I started writing micropython code uh I didn't know any of the people behind it and very quickly they had got in touch with me spoken to Damen George the Creator Matt trentini and um jamoo all the people who are on the Discord community and if You' got any plan of problems they jump on that and try and get you the help so a very very strong Community out there there so I would say there is also probably a lot more this is not scientific when I say this this is more of my opinion there seems to be a lot more libraries Frameworks Community engagement around micropython than there is than rust but I'm coming as an existing micropython user I've not really seen a lot of the rust Community the Frameworks the libraries kind of I've not come across them yet so um it's difficult to judge that so for me I'm kind of biased on that way I would say this uh the community for micropython is is stronger and larger but it's probably a smaller group because it's um specific to microcontrollers so learning curve and developer experience so rust definitely has a steeper learning curve due to these unique Concepts like ownership and lifetimes um you will have to go through um the rust Language tutorial and there is a book the Rust book uh to get up to speed on how to use it micop python if you've used python it's very very similar um there's very little differences the differences really are just to do with the input and outputs um on micropython so if you want to do something like uh make a Servo move or switch an LED on and off you just need to know what pins are connected to you on the actual um controller itself and expose them through the machine do pin Library so that's really the only learning curve in py micropython over python U and it's definitely a lot easier to get up and running with micro python this is due to the tooling because the tooling is designed for you getting code on your microcontrollers and also the language lends itself to Simplicity um just the way that it's structured there's a lot of lot less cruft a lot less curly braces semicolons all that kind of stuff in Python um and the only difference really is that python has these indentations in your code blocks to to Define blocks of code whereas in Rust in yeah in Rust and in C you'll have to have these curly braces to Define blocks of code uh so white space doesn't matter you can have it structured however you like that can mean that code looks a lot Messier so one programmer might be very messy in in Rust whereas another person might be very structured in micropython the the structure of python the language means that um all code will be indented the same way so um it's going to look the same whoever programs it from that from that kind of visual perspective so yeah developer experience how say micropython is easier to get up and running with code excuse me this is me drinking too much Diet Pepsi um and rust there's a steeper learning curve but once you've got there I think it's probably you know it's as fast as any other language there's probably a lot more to do to make a simple program though uh we'll we'll have a look at um an example of how to switch an LED on and off in micropython versus rust and I was quite surprised how is it 300 lines of code to do that in Rust where it's just a bunch just a couple of lines in micro python again that's probably because it's designed for microcontrollers safety and reliability so when we talk about safety we we mean about um making sure errors don't creep into our code so rust has a very strong emphasis on compile time error checking and safety guarantees uh so when you write um a a piece of code in Rust the compiler will make sure that that's a a reliable piece of code it can look at if you have um a variable and you define that as an integer you can only store integers in there the compiler is basically going to stop and say this code is not correct or if you create a variable and you don't assign it um a value the compiler can say there's a warning here you've created a variable but you've actually not used it so it's very very good at detecting errors and telling you how to correct them um micropython also does do that to a degree or Visual Studio code with the U if you've got the right extensions in there can detect those kinds of error as well but micropython and python are dynamically typed so that means that you can assign a variable um one value you could assign the variable x value one and then later down in your code you could change your mind and say x is now equal to a floating Point number or a string or an entirely different class so because it's dynamically typed that type can change and that might be considered by some people ithy or rust perspective is like very bad Pro programing practice because if you change the type mway through your program you're introducing a vector for errors to occur so we with micropython focuses on Simplicity over strict safety checks that makes it a lot easier for people who are coming to this new because they don't have to worry about types and things U it can be inferred for the value that is passed to it so rust is designed to make very robust code micropython is designed to get you up and running very quickly on microcontrollers uh and particularly with an emphasis for beginners so yeah I don't know who wins that particular round there so I would say micropython is definitely quicker to develop with types Dynamic but can lead to errors so it's kind of on the responsibility of the programmer to make sure that that doesn't happen uh rust is very fast however the develop environment and workflow is still immature compared to micropython in the in in the sort of embedded environment P um space so it's not really designed for embedded devices even though the code that it creates is very efficient so compile time errors I've had lots of compile errors when I was trying to do even the most basic rust program so I was trying to get this blinking lights program to work on the PCO W uh and I think I had 150 errors and this was some code that was supposed to work from uh somebody who've been working on this already so yeah you can see the blinking lights code there I say is 300 lines of code uh so it's not particularly suited for internet development yet internet things development I say yet cuz it might come in time but for me um it it really isn't a starter for 10 uh and and the the whole life cycle of how you get code onto your microcontroller not very straightforward but I would definitely encourage you to try both and let me know what you your thoughts on that even give me advice if you think that there's something I'm missing here if there's a particular plugin I need for visual studio code definitely let me know what that is uh but my experience wasn't great with with Russ to begin with so if you like what I do and you me to make more kinds of videos like this please give this video a like um drop me a comment let me know if you have a preferred programming language is it aduino is it Java is it python is it micropython is it rust let me know in the comments below let me know why as well and if you haven't already subscribed to this Channel please consider subscribing it means an awful lot to me if you subscribe helps the uh the channel um algorithm know that uh this is a good Channel and other people will about to find it as well okay and I do go live every single Sunday at 7:00 GMT I think we going to be change over at the end of the month we're in March at the moment as I record this 10th of March so at the end of the month I think we change over to a British summertime BST so it just shifts by an hour bit like a daily daylight savings in the us but we do it a little bit later on I guess okay let's have a bit of a demo on Russ chelby I'm just going to pull my notes on another screen and then I will get over to visual studio code and we'll create some code okay so let me get over to visual studio code I'm just going to adjust my screen a little bit here so we can see what's going on and then we're going to create some code so let me just uh clear that screen let me make everything a little bit bigger so we can see and what we will do is we will just back out of this right so I'm just going to hide that folder for now and so I've got this screen kind of split into two parts here the top over here um is where we're going to write some code and the bottom down here is just like a terminal window so the first thing I'm going to do is I'm going to um I'm going to create a new project so we use the cargo tool to do this I'll show you how to install rust in a second but I just want to show you very quickly how we would create a new project so if if I do cargo new and then let's call this a live stream demo so that's going to create a new kind of workspace for our package so we can now go we can now change directory into this l stream demo and if we now actually open up visual studio uh environment and let's go to let's just close that window there and let's have a look what we've got we've got this live stream demo uh folder that's been created for us and there's three things that it's created for us automatically there's a source folder within main. RS so RS is the rust file extension we've got a dogit ignore which is for ignoring uh any folders that we don't want to have in our git reposit itory so it's kind of designed with Git in mind and we got this cargo. tommel so toml is a a format for storing configuration files in so I just move this little invisible window that you can't see out the way there uh so we can see there it's got package name is live stream demo version is one so we've got the minor version major version and the kind of bug fix version and the Edition 2001 that's weird and then it's got some for more keys in their definitions go to docs. r.org cargo reference blah blah blah so let's do that right now what I'm going to do I'm just going to open up the um rust rust um let me just find that rust. Lang here we go go to rust dang. org this is the official website of the Rusk the Rusk Rusk rust uh foundation and you can see on here we've got install learn playground I would definitely say check out the playground area uh on here we have an area where we can actually try out code um and have a play with it so you can see there's a bit of an example already it's a little bit like a Jupiter notebook but um guess a lot simpler um and now there is also um this documents doc. rust l.org and this is the Rust book so you can basically start from here and um work your way through how to install rust and things like that so um there a very simple command you can grab so in fact there's a little button there you can click on you can copy that if you're using a Unix system you can basically just paste this in and this um shell script will install everything that you need for your system so that whether that's like a Linux or Macos there is also a um Windows version as well so you can click on these links here hopefully you can see that rust L tools install um and there's also all the visual studio 2022 plugins and so on so once you've installed that you can do this rust C version so if I go back to here and I go back to so I'm just slightly in the way then what I'm going to do is just pull this window up a little bit here so I do Rust c-- version you'll be able to see what version always seems to take ages to do this whatever programming language you're using so you got 1.74 and that's the 2023 November the 13th version and it's installed via Homebrew because I'm using a Mac on here so that's just just for reference um for future people if you were interested to know what version I was running on here okay so we've got rust installed on my computer we've had a look at the website so let's create this uh hello world I just did one for the live stream demo this is going to be our hello world program so I'm going to go into the source folder I'm going to open up this main. RS and they've already provided this as a working example interestingly so let's have a look at this code we've got FN we just make this a bit smaller here so we're not uh getting too distracted by that so FN is function it's a bit like defa in micropython we've got the the name of the function the curly braces and then you've got these um well that they're regular brackets I guess these are the curly braces that defines the block of code so the convention is you have the first one on the the line of the function name and the last one is on a new line itself but this is like C Whit space doesn't matter you can have this however you like you could have all that on one line if you really wanted to then we've got print line and a little exclamation mark um and then hello world and then we've got the semicolon at the end so this is like C of the aduino language very very similar like that and to get this up and running let's just clear the little terminal down here we could do a number of different ways of compiling our code so we can just do Rust C uh and then the name of of the code which is main. RS and it says there is an error there what's the error uh couldn't find it so I'm not in the actual Source folder that's why so me just uh there it is let's try that again rust C me. RS if I now do LS to look now I've now got another little file that's appeared Main and if I just um do like the long version oops of list we can see how big that file is so it's 400k to do Hello World which seems to me a little bit excessive but look how big the uh the C version of that is in a second so let's us um run this if I do um slain this will actually run the code itself so there you go hello world so that's all our program does it just printed out now Dale's just commented in the the the comments on the live stream here something I was going to bring up which is what's that little exclamation Mark there so that means that this is actually running a macro rather than a function so print line is a built-in macro within um rust we didn't need to import anything um into our code and include anything like you do in uh C or uino um this is something that's built into the compiler it already knows about this so we use this exclamation when we're using macro code rather than functions so print line is actually a macro rather than a function the difference at this point we don't need to get into that but um there is a nuanced difference there okay so we've we've created our code so let's do something else now let's assign some some values so if I come over here and let's um assign um a variable a value so in Rust we use the let statement that means that we're going to create a variable uh we can say let X um equal 10 for example and then semicolon now let's compile this and see what happens we can just do um rust C on there let's see if uh it generates any interesting messages it doesn't that's that's valid code but what is X we can just leave it a bit like um python let it guess what that value is what what type of uh variable it is but it's better a better practice to actually say what that is by defining the type so if we say this is an integer it's a 32 integer i32 is the type of variable so a bit like in if we did this in mic python that would be int we would just say that's an INT so by providing the type we're creating better code in effect now the other thing about this is X is actually um immutable we cannot change the value of x now that we've defined it if we want to change the value of it we have to say that it's mutable so if we say uh let y oops let y be mutable and we can do the same kind of thing there that means we can change the value of that so if we come down here let's get rid of um well let's try and change the value of x for example so if we say x equals 20 and let's see what happens if we try and compile that code now so it's it's actually let me change the value of x which I didn't think you could do after the whole point of that was it was um immutable so let's try changing the value of y and see if that still compiles so yeah not sure why that um why that actually didn't generate an error there but that's that's interesting that that was the case now I'm currently using rust C there um to compile the code you can actually do cargo run instead and that will build in any dependencies now we haven't actually included any dependencies yet we'll do that in a second for a little program that we'll use to guess the number but we could do cargo run Main and you can see there it says compiling finished and running so it's actually run the code there so it's done the whole like Loop of compiling it and running it so a lot of people use cargo run rather than just compiling it and then running the code manually from the command line so that's why cargo is pretty cool as a as a tool so that's uh let's have a look what else we have we could also do um string so let's come over here and say uh let oops let's um let's call this guess we'll make it mutable as well let guess um equal a string new so this is where again if you've not used rust before what are these like double colons that's a bit like um when we import something in micropython and we use the dot to bring it in uh we're actually defining like a library and then the function within the the library so that's kind of what's happening there uh so that will actually let us create a string um which is guess and what we now need to look at is let's do some comments just like in C we can do um two double slashes like so um that's for a single inline comment let's see if we can do um some comments I think I think that's that's as much as I know about how to do comments in Rust I'm pretty sure you can do like a um a block of of code um block of comments rather than just the singular line ones uh yeah you see it's a for slashstar isn't there we go so this is a like that so we can do multiple line comments just using the forward SL star that's just like see similar to how you could do it in um uino as well uh and yes we've talked about um functions so if we want to create our own function so rather than just using this main rust always has a main uh function it doesn't work without that so if we want to have something up here so let's say print underscore message and let's just have in there a variable which is um message and that's going to going to be that's going to be a string so how do we do that again so it's string message equals sorry I think that's how we do it and then we have the the curly braces as well so there we go we can just have a bit like how we do in um print statements in micropython we can just do print the message like message is and then we can just have the actual message um after the comma there so if we come over here now we just print out instead of hello world we could actually call our function which was print message and then hello world so let's let's compile that and see how bad my rust code is so there we go and if we change that message to be hello subscribers and then run that again oops did I not uh build that and run let's try just doing rust c main ah there we go so um so that'll be to do with how I've defined that uh that string there so I just need to have a quick look at my code to see what else I need to do on there uh to get that working so I'm basically just going to leave that out actually ignore the uh the function up there with a string bit that that isn't how you do it so I'm not the the world's best rust there we go if I do that that should work let's try that no it's not happy with that okay so what I'm kind of going off script a little bit here so I want to go back to my uh my notes here so one of the other things we can do with um rust we can have targets so instead of just compiling to whatever platform or architect you're using you can compile for a completely different architecture such as aduino um at Mega 328p or the rp240 from Raspberry Pi and that's how we will actually generate code and then transfer it onto our picco um so what I want to do though next is um just show you another let's just create another piece of U another p package so I'm going to come back out of there I'm going to do cargo new and then let's call this uh guessing game oops new sorry not no and that's created that new guessing game so let's go into there CD guessing game so yeah we've got the usual kind of thing and then let's just go into here guessing game you can see I've been testing this beforehand let's go into our source code and again it always has this main dot uh hello world thing as as just an example when you use cargo so we're going to change that to be um the guessing game and this is from the tutorial if you if you go to the um the website we looked at a second over on Rust Lang into the docs area they've got this tutorial about like a guessing game so we'll we'll do a little bit of it today not the whole thing though um guess the number so that's just going to print that out U and then we want to have um another one so another print line please input your guess and then we're going to have a variable called guess so let mute guess uh equals string new now the thing that I was missing before on my code when I was trying to use string is we need to import string from the standard IO this is how we import libraries so use standard and then Colum call on iO that will bring in all the functions that are available to us from the standard IO Library um so that's string is one of those that's why it wasn't working before okay and then we're going to basically just print out so IO standard in and we've got two lines there so read line that's going to read in from the keyboard somebody's number and you just change that to be a guess with two s's this is just a visual studio code code yep you can install that that's fine and so there's two parts to this um readline guess and mute guess so what's going on here and mute is um we're passing in a reference that's what the ampl sand means and the variable that we want to pass in the value of the reference of is guess so that's that variable that we created there um and then we're actually saying that we expect um it to be um a string if it isn't a string we can say fail to read the line so if uh the user passes in something anything other than a string um it's going to generate that message now we could simply have this dot um right up against the U the function name there we could also have that right up against it so that uh yeah this this um linter thing is kind of getting in the way a bit of a making easy to read code but that doesn't read very easily so the the convention is if you've got a DOT you can basically just um put that on a new line cuz white space doesn't matter uh in Rust okay and then finally we just need to uh to print out the result from this so we can just do a print line at the end of this so print line with the exclamation mark and we simply just say on the you guessed and then the guess right let's compile this and see what happens so let's do um rust C and then main like so uh so we're not in the source folder again got to get used to doing that there we go uh a rust. RS let's try that okay so we've now got main if we now do main saying hello what have I done wrong there do I need to save that is that why that didn't happen and let's run that there we go so please guess input a number I'm going to say 10 and it said you guess 10 so it's it's not comparing it against anything in the example on the the rust language website they they show how to build a little game where you can actually have a random number generated um and then it Compares if it's higher lower or if youve won by guessing the number so it's kind of like a fun little game it's quite complicated to do that in Rust so so what I want to do next then is show you the comparison between writing a program in Python in C and in Rust and then comparing the output sizes um of the code that's generated I thought this be quite an interesting exercise to do so what I'm going to do is I'm just going to create under this same Source folder here I'm going to create a new file uh I'm going to call this one hello C do c and in here we're going to create a c program so so uh let's just import sorry it's include isn't it in uh uh standard io. H that's the header file for all the standard input output stuff and then yeah we're going to do an input um int main which is a it returns a value um that's an integer main is the name of the function we have the curly braces just like we have in Rust we have print F which is how we print things to the the console and then hello world and then this forward sln means put a new line after um you've printed this out just so that in the in the console it it returns a little um console character after that return zero just means everything's worked fine there's no errors so what I'm going to do now down here if I now compile this with the um the g c compiler so let's compile um hello C.C uh let's just move this a bit higher so you can see what I'm typing there and we can say that the output is just called hello right uh what have I done wrong there so let me just have a quick peep sorry about that so let me just have a quick look at the code that I've got there so include standard i.h in main that should compile fine yeah I don't know what it's complaining about that I'm just going to exclude the output thing and just see if that will compile no it's really not happy with that uh initial undefined so is it that include I'm not sure why that's not working I'm not a massive C programmer let's just save that and let's try that again there we go I had not saved the file for goodness sake right let's just output that as hello C okay so we can just remove that a out that's that's what it calls it if you don't actually provide an output of the file um and then let's just run this so we have hello C if I do/ hello C it says hello world now if I do um ls- L we can see that the output SI the the size of the file that's been generated in C let's just move this up here so you can see is 33k so it's not very big um just to generate hell world let's do this now in micropython or in Python let's just create a hello.py and this is simply going to be print oops so all this uh help is really not helping there there we go hello world I don't want the guessing name I just want Hello World there we go so we don't need to import anything we can just do one line of code we save that now we come down here we look it's 22k sorry 22 bytes for the Hello World um program in Python and if we do we can do Python 3 and then hello.py it'll do hello world so python files because it's just pure text it's just a script are tiny absolutely minute and this is great if you're working on a microcontroller because your source code is really really small the it's going to be smaller than the actual generated code uh let's do the same in Rust let's um go back to our main. rust and we can get rid of everything that we don't need in there so let's get rid of all that let's basically just have the hello world as the the main part and let's just change that guess the number to be hello world like so we can get rid of the used standard a we don't need that let's save that that was the thing I did wrong last time uh and now let's just do Rust C uh main. RS again and if we now just look at the file sizes look how big the main um which is the rust program 492k so it's massive python slm python 22 bytes the C program is 33k and 492 for the rust so rust might be really really fast at running but it creates huge files is uh even the more simplest thing um so again we can just do that main to run the hello world program there so when we talk about efficiency there's efficiency of the code that runs and there's efficiency of the the programmer who's creating the code and how simple that is so um we compare that the three different programs there in C just TR to grab the the window there and can't see the uh there we go yeah we could probably just grab all these side by side let's just split the program there and then that one as well let's have three um so so that's the rust code that is the C code and then we can just change this to be um the micropython code if I can just find that hello.py so yeah we not talk about crft this is what I mean the python code is basic just one single line and it just has the print command brackets the speech marks to we include to wrap around the uh the text string and that's it in C we have to include standard IO because obviously it depends on what you're generating you might not need standard iio because you might not be writing to the console if it's just an embedded system uh but bringing that in we have to have an INT main uh because code has to know where to start and then we have to print F to actually have the hello world now we could actually have void main which means that there is no value uh in which case we don't have to have that return zero not sure how much difference that makes to the uh the code outputs uh let's just compile that and see if I just do the uh GCC let's just find the uh code for that there we go oops GCC hello c. C output to hello C and let's have a look if there's any difference there uh so let's just find that TC so it's 33k um as opposed to what it was before which was yeah 33 it's the same size so it makes no difference whether we include that return or not but again it's five lines of code versus the one whereas rust has got three lines of code function main print line and that's it I guess there's a there's an extra line we didn't need there so yeah we just got a little extra step in C the code is Tiny and it's very very fast now we could if we wanted to have timers around these pieces of code to see how fast they are actually executing and C is going to be the fastest rust is then going to be next and then it's going to be micropython probably 10 times slower because it's running in an interpreted um environment okay so let's have a look what else we need to cover off on here um so we talked about the the complexity of the code how fast it is to write the code I would say microp pythonpython is the fastest you've not got these curly braces and semicolons and things at the end uh it's easier to read because you've just got less code to to visually consume there's less cruft like all the curly braces um so it's just easy for a developer to to develop stuff uh let me see if there's anything else I wanted to cover off yes there was so uh We've not really used any um dependencies in our code other than um the standard IO and this cargo. tommel file um is where we Define me just close out these other windows so we can see what's going on here basically just want to grab that just have it in there let's just close out those there we go so this this uh cargo. toml defines the package so if we're creating like a a block of code um a library of code and we want to share this with other people we might want to Version Control that and we can do this through this uh cargo. toml file um and we haven't got dependencies in there so that's fine but if we did have dependencies we could essentially lock the dependenc is the version um in this cargo. loock so um this is package live demo and the version is 0 1.0 if we generate some other code and it's like version two we can actually lock the version to the code that we've written so that we know this is like a known good version even if newer versions come out this is the one that we know works well and it's a bit like a requirements. text file if you're using a virtual environment in Python uh but it's kind of nicely managed because requ requirements. text is a text file that you have to manually create whereas cargo will create these toml and the lock files for you as you change your code which is pretty good uh and what we can also do with cargo is we can update uh any dependencies that we have so um I think you can define something in here um we'd have to go back to the uh the language definition on here so let me just find in here just talk about um the different versioning of things in here so I just want to find an example that we can include in here uh just to show you what what I'm talking about um so I'm just trying to find if they've got one to hand but they haven't got one so they call them crates as well so if you what we would call something like a python module Library uh they call crates in Rust um I was just trying to find if there's an example one that I could show you how we can update the versions but essentially cargo can help us maintain the versions uh and you would simply come down to your terminal if I just move all this stuff out the way bring this up to the full screen so we can see what's going on we just clear the terminal uh and you can just back out to that if we did cargo update it would check to see if there's a new version of the dependency if you've got this off the internet like a repository it can check the repository for the latest version and then apply the update date to your code um so it's pretty cool that it can it can do all that okay let me see if there's anything else I wanted to cover off on my notes I think that was pretty much it yep so let's get back to our slides cool so that's my very quick and dirty demo of rust I've not been spending very much time uh learning the language yet but uh I I I will probably have come back to this and have a another bit of a play I certainly want to get the code up and running um on a Raspberry Pi Pico um so what I can show you if I go back to um website for a minute uh somebody has created a really great um resource and I've actually included a link to this in the show description today uh so this is getting started with rust on rasby Pi peo is by Jim hot up and if we scroll down a little bit I can show you the kind of complexity of the workflow of getting code onto your PE so first of all you need to have two you need to have one that can upload the code to the other one and you can see that it's using the the read the and uh the RX and TX so the read and write transmit lines and it's also got some debug lines there as well so it can actually receive debug information from the Pico uh we' basically just got some power going to that as well uh there's a sort of image of how you would wire this up as well um so that's how you would um essentially wire everything up I'm just going to quickly SC um scroll through this and then um we need to bring in this multi-architecture um component so that we can um output code to the rp240 if you're using a Mac you need to install rosette because the this is Intel code running on an arm processor so that just adds an extra level of complexity if you're on a Mac and then you need to install all these different um libraries so it's quite complicated just to build the build environment uh so you can see there all the different things that we need to do once we've done that uh if you've got PECO probe as well you can this can help you debug the firmware so this is the official Raspberry Pi debug probe that they sell uh what else we got and then you install rust using the the script that we looked at before then create a new rust environment uh and then you need to create this uh this file here so this is the simply links the LED on board so look how complicated this code is this is not designed for beginners is it this is something for people it's very very close to the hardware it's more like um um programming in c than it is programming um something like python so yeah quite complicated and you really have to know the hardware whereas a lot of that's abstracted in micropython so I find that easier to to comprehend and easier to use uh so there you go that's that's how you go about doing it it's pretty complex there we go so I put a link to that to in the show description if you want to know how to do that and have a play S I couldn't get the example code from this to work it had 150 error message or 300 error messages I don't even know where to start to debug that it might even be just one thing that's wrong like a one dependency but um yeah I don't know how to do that yet so I just wanted to show you that cool okay so last week I said I was going to build four projects in the week off that I had from work so I want to give you an update on where these are all up to so the first one was the electronic trombone uh which is essentially um a ultrasonic range finder which I've had my desk somewhere and it will have one of these um this is from monk makes uh a little anemometer so you can blow into this and depending on how hard you blow um it'll spin round and it will generate um a voltage and you can measure that voltage because it's less than 3 volts um to basically Define how fast this is turning and therefore you know we can Define um how hard the note should play on our little electronic trombone now I can actually show you the design of this CU I have designed it I've just not 3D printed it yet so let me just grab a fusion 360 and open that up I can show you a bit of the uh the example of uh how that's working just take a moment or two for Fusion 360 to load up I've also been working on the long Bell Orchestra so I've got a whole bunch of um copper um Chrome plated copper pipes uh I've simply sliced these off they was 2 m long when I uh I grabbed this from the uh local DIY store so I've got a just where Alex normally sits there's a chop saw there so I've chopped these in half and then I've drilled a little hole through the middle there and I've got piece of string and what we can do with this if I just grab something that's uh let's grab this um it can make a sound depending on the length of the the tube so it's got a really nice s of bell sound to it so depending on the length of these we can define an entire octave so I've got all the rest of the uh the tubes there I've got 12 of them in total uh the thing I'm a little bit nervous about cuz these weren't cheap I think they were about 26 each or something it was like very expensive to get to get U six of these um so once you've removed the metal it's gone so you've got to get it right um and essentially you have to um is it 12 to the square < TK two or something like that I don't you basically there's a formula you slice the tubes up into into 12ths essentially and each note is just one 12th less than the previous one so we can create an entire uh Octave of sounds of bells and we can have something like this which I've 3D printed with um 12 servos on it I could probably get away with having six servos um three servos per side one in between and depending which way it goes it can hit one Bell or the other or you could just have one for each of them so this is what I'm intending to do here and I've also got let grab this this um Pimon yuk on board and I've got a whole bunch of Servo if I can get that into Focus if I just hide my face it'll focus there quad Servo um regulated and quad Servo direct so there is four uh on each of these modules and I've got four modules which means I can have potentially 16 servos being controlled by this uh Yukon board now the Yukon board doesn't have Wi-Fi built in so we'll probably have to U connect by one of the connectors on here um to maybe one of the custom modules um and talk over uart to communicate with a a device for example but it's got all the nice Hardware all the voltage regulation and everything we need to uh to power these servos so the idea is this Servo can sit here the bells can sit uh inside here and the servo can hit it so one of the things I've not designed yet is the the hammer that will hit the bell and I'm not sure whether there's enough force in this little this little Servo um excuse me um to hit the bell with sufficient Force to make a nice note it might just click against it which isn't great so let's go over to Fusion 360 and I'll show you some of the designs I've been working on there so let me show you first of all that long Bell Orchestra so if I come over here oops uh let me just grab the fusion why is it not uh let me just try that again on there so there we go oops there we go so this is the long belt Orchestra you can see there we have all the servos and the different lengths of pipe and they're basically going to sit next to them and the little Servo horn will hit each Bell so they're all lined up nicely so that they will they will move from one direction to the side of the Bell again I'm not sure if that's going to be enough the only way to to find out is to to build the thing and try it so that's the long Bel Orchestra let's try the electronic trombone next yeah I had to model the fan to uh to get this to work as well so I've got this first piece of um 3D printed thing here you essentially hold that if I just jump back here not why it keeps going to the uh Chrome there let me just hide Chrome I can't even see Chrome on the screen actually which is weird there we go sorry there we go right so yes this first piece here you would essentially hold with one hand and that's going to help you define the distance between the ultrasonic Rangefinder so it's essentially just like a reflector really uh then we've got the ultrasonic rang finder there pointing at the the little reflector we've got the Pico on the side there and we've got the fan uh and there are all the parts that we need we'll also need some um connectivity and I was thinking rather than having this work over Wi-Fi and all the complexity of getting midi to work over that we could probably just use circuit Python and connect a cable to this just to make it a little bit simple so I've not written the code for this yet but I have defined uh designed this i' even got like the little motion study things so we can uh we can animate uh that joint that's in there don't if I open this up is that going to work let's open that up and if I just click on run you can see the all fan spins around there we can just do that so that's kind of how it's going to work as you blow into this it'll turn the fan around that will Define the the um volume of the the note that you're plane and the distance between the range finder and the reflector will give you the pitch of the note so we have done something similar like that before as I discussed last week so not 3D printed that one yet um it should be quite a quick print these are quite small things to do uh and we can probably print these optimally just lay down whereas this one not sure the the best way of printing that because um maybe um print that upside down with the the long part pointing up perhaps so that's the electronic trombone uh then we have the robotic arm so the motion controlled arm so this this is why I spent a lot of time not actually making the thing but designing it cuz this was quite a complicated thing to design so this um is the the robotic arm and all the parts you can see there articulated and I've made a good start on printing all the parts out here so this is the base scub that there so this the idea of this is this can be bolted to two a desk there's a a great big 3 m M3 hole there so you could have this on your desk this would go down under the desk and you could basically clamp it in place and I've got these Nema um 17 stepper Motors uh these are going to provide sufficient um sort of power um to turn the whole arm when the robot arm isn't having any power they are completely limp so I might have to redesign this to use something like a worm Drive perhaps instead that's the only thing I was thinking maybe there's a bit of a misstep and I've got some other parts here which I've already printed out so this this effectively will attach to the base there provide it can turn that way and this one can turn that way and I'm going to have another set of these on top but here's a one I've not um I've 3D printed it you can see all the support material there I just haven't removed that yet so that can essentially bolt bolt that piece there so I've printed these in small sections that easier to 3D print bolt it and glue it together to make the uh so two of these make an arm section and they would each have these sort of elbow pieces on there so there'll be two of these to give it the full kind of um uh effect there so if I go back to you can see there there the one piece I printed here there's the base there's another piece and then there's the sort of end which will have um the camera attached to it so yeah there's a lot of weight in there these um these Nema 17 Motors are pretty hefty so there's a lot of force being applied to that bottom there and also to that joint there particularly CU that's having to hold everything up um I'm not sure if I've got the well you can see on here actually so the way that these are actually attached in there's um a little connector there and it's got um a little screw thread and that attaches onto the the Nemo motor there I haven't got any bearings on here so one of the thoughts I might have had about this is maybe I need to have some bearings that can take some of the load um and spread it across the arm rather than it all being on that one NE motor there so that's the the robotic arm the robotic arm has also um um I've been talking to VM who um as you know one of the robotic software companies uh based in New York they've taken an interest in this robotic arms I'll be working with VM they actually going to help sponsor the build of that any parts that I need uh and we're going to be making this work with inverse kinematics so we can move the end point of the camera or whatever we've got on there that could be a microphone a light whatever we like uh using inverse kinematics we can control that so rather than it just being um uh like a dolly track where the camera moves around the product we can have our robot arm moving any orientation that we like it could even have a microphone that when I move away from the microphone like this and my voice voice changes in volume we could have the robot arm Follow My Voice by tracking my face for example so we can put a raspber pi camera on the end is what I'm thinking there so that's the uh the robotic arm that's kind of work in progress and then finally the giant actra sketch so I've actually not done anything on that one at all yet so the giant extra sketch um I I need to work on that one that one is also been quite a fun one I was thinking we could make that also like a remote thing where people can from the k robots.com website they can um access that so that's one of the uh things I I want to work on next cool so a couple of other things I want to cover off as well um I've also created a rust course um on kevs robots.com so if I go over to uh kevs robots.com and oops and we go to um free courses you can now see that there is a rust course on here and uh you can basically just pick up some basics of rust R um I think it probably needs a little bit more work this one um I just wanted to make notes about rust as I was learning it myself so some of the differences between Python and Rost are on here but yeah you basically just check that out thank you that you basically just check that out um go to Kev robots.com learn rust to access that free course uh I've also put a bunch of other articles on kez robots as well well so if I go to um the blog you can see let's go to the uh all blog I I realized had not actually documented the uh the therapi midi instrument which I developed quite a while ago um so there is a video on that one and there's also now a write up of how you can get all the parts you need and do that yourself that's basically what the trombone the electronic trombone is based upon this used a rasby pi zero we're going to be using rasby pi picco instead and then we've got the motion control arm so that's kind of work in progress in the electronic trombone as well I also documented the picoo um which I hadn't documented that's basically what that um whiteboard the giant whiteboard is going to be based on the similar version of that just much much larger cool so that's uh I think everything I wanted to cover off um on the project update cool so yeah if you want to check out kevs robots.com learn for slash you can see all the courses there for free there's a one like I said just been released on Rust so definitely check that out and we have merch if you want to get yourself one of these amazing hats um they get uh they get talked about for various different reasons definitely get yourself one of these I know a couple of people bought them last week so thank you for that and if you've not joined our Discord server definitely if you've got any questions about projects or anything this is the place to get the answers for this don't message me on social media I probably will have time to respond to that but I definitely go into the Discord group and uh ask any questions you like there you can add me in there and I will definitely get back to on that so KES robots.com Discord to get a sign up link for for that and I'm on social media you can follow me on threads at kevinm threads. net I'm on Tik Tok on Kevin Maier 6 on Instagram at Kevin Mia on X at kevm on madon social kevm theal and I'm also on Blue Sky at km. P.O as well and if you want to get your name in the credits you can do this a number of different ways you can go to c.com coffee you can do a super thanks which is um if you're watching this on replay if you're watching this live now you can do a super chat I'll make sure that's enabled on the overlays just there there we go and you can also join the YouTube membership program just by clicking the join button that appears if you're watching this um I'm not sure you can do that from an Apple device because of the weird licensing thing that apple and um and uh YouTube you basically have to pay extra through Apple to do that so I think they've just removed that button but if you're doing this from the web you can basically just click that join button there as well okay I think that is um pretty much everything we just need to cover off um some of the people who have supported me already so let's uh call those people out so uh last week Mark Lewis bought me a coffee thank you very much for that Mark and uh to Alex just Alex as well as well as Nicholas Han and we've got a couple of members on the buy me a coffee we've got Lee we've got Alvaro we've got Mar Lise mayor we have Jeff Johnson hey Jeff I know you on the live stream today we've got Dean Cy Marin Brent Tom shmy and Steve Phillips and then on the YouTube membership side we've got Dale we've got Bill Hoy Warren steel Steven Cross Jonathan R orad 39 Vince John Paul Jolly aliser wear Cassie uh tinkering rocks JDM Johnny Bates hands from Cheer lights Michael and of course we have Tom as well cool so I think that's everything I've got for you today so if you're watching this on replay I'll say thank you so much for watching and why not check out one of these other videos here that YouTube will uh will show you and uh that helps also um with the the algorithm and helps get other people to see this so please check out one of these videos as well and I shall see you next time
Info
Channel: Kevin McAleer
Views: 1,858
Rating: undefined out of 5
Keywords: rust, micropython, micropython vs rust, rust vs micropython, micropython performance, robotics, python, embedded development, rust tutorial, micropython tutorial, rust comparison to micropython
Id: M9LekkoQyf0
Channel Id: undefined
Length: 78min 44sec (4724 seconds)
Published: Mon Mar 11 2024
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.