« Return to show page
Transcript for Episode #295:
Flutter + Python GUI Apps?
00:00 Hello, and welcome to python bytes where we deliver Python news and headlines directly to your earbuds. This is Episode 295, recorded August 4 2022. And I am Brian rockin.
00:11 I'm Michael Kennedy,
00:12 it's good to have you back.
00:13 Good to be back. And for people out there listening, we kind of batch some stuff up so that you have vacation for a couple of weeks. But now our news items will be more closely related in time to the release of the episode. Oh, gosh,
00:25 we didn't do that. It was live all over the app always live always live. Yeah,
00:31 I'm glad you got back quickly. And speaking of fast, and you've got a fast story for us.
00:37 Yeah, how about we make things faster. So I want to talk about flask and court, the flask is flask is one of the most popular web frameworks out there. Court is the API compatible async version of flask originally done by Philip Jones. But I think that Philip has joined David Lord in at least in support of the palace organization, I feel like flask and cord are working much closer together these days. So I don't know exactly what the relationship is. But flask and core are very closely tied together. Right now, what I want to talk about is routing or for those UK friends routing, if you prefer, but the idea of taking a URL and figuring out what function to call, right. So what you do is you you set up in flask, you say at app dot get app dot post, and you give it your URL pattern. Sometimes that's just like slash about other times, it's like slash categories, bracket, category name, or even more general stuff, like what do you might say, its category, maybe a category ID, and it has to be an integer. So convert that for me, or I want to just capture arbitrary path, arbitrary URLs slash edit whatever that happens to be. So that's the idea of routing. And the whole article here something the big news is that Philip Jones has worked on Vekselberg, the HTTP router, that is the foundation of doing the routing and flask and cord. And it's something like five times faster than it was before, think five times the number, wow, much faster. So we're very small, little toy apps, if you have a couple of routes, whatever, it's no big deal. However, if you've got a production app likes a talk by then training or you've got hundreds, at least hundreds of routes. When a URL comes in, you could spend a decent amount of time checking Is it is it get or is it post? Is it this URL and actually this thing here? Can we convert it to an integer? Because if not, that's a 404. It's a different route. And you're like all the stuff that goes on there. Yeah. So the way that it worked previously, is it just when you would specify these routes like app dot get slash API and API slash angle bracket, ID, those types of things, it would just come up with a table that just says, Okay, here's the get verb, here's the path. And here's the function that it goes to. And it was using regular expressions, so slash API, or slash API, and then backslash D plus, right, the regular expression for a number, okay? And the way it works is it just says, Okay, we're going to run the verb test, the reg X test all those things one at a time, top to bottom? Well, Brian, I know you've studied a lot of computer stuff. This is not not something that's good that grows with time, right? As you add more of these, it's its complexity, what is it something like O of n, or maybe even a little bit? O of n squared? Maybe I'm not sure something like that, where you because you're testing the verbs, and you're testing the things, right. So as you get larger and larger, you're like, running through them every single request. And the world is full of interesting data structures and algorithms that you might consider. So the idea was, this is gonna get rewritten into something that's not just the sort of brute force test at top to bottom and the order that is defined here. Yeah. And I think one thing, it's interesting the news that routing and flask and CT is five times faster. That's fantastic. But also just thinking about the algorithms, I think it's a cool problem solver, problem solving eggs, thing to go look at right and example. So Philip thought about different ways in which you might do this and how it works. So the first algorithm that he looked at was a radix tree. And this is an interesting tree structure that gets defined where instead of having a table, you have all the verbs, and then under each verb, you've got the API or the path pattern. Okay. And one of the things that's interesting here is they have a path type. So if you were building a CMS or something that would handle arbitrary URLs, right, so you could build say, a database thing that says, here's the URL, and here's the content to show for that URL. How do you express all the variations of that in the routing of flask or other frameworks? As you just say, it's a path type instead of an integer or something along those lines, right. So there's kind of this wildcard thing that makes it a little bit harder. So you've got this get and you've got this post. You've got API. Remember, we had slash API, and we had slash API slash ID. So what gets created as there's a get node in the tree than an API, note that if it matches exactly terminates, but at the back call, but if not, then also has the ball, keep going and match the next part of the path as a number. And if that matches, then you're gonna get this this next segment. Otherwise, you'll go to the next part of the tree and cruise through it. What do you think of that? That looks cool, right?
05:39 Yeah. And also, I mean, yeah, it looks good. And also faster, because you don't look at everything.
05:45 Right? Exactly. You say is it GET or POST boom, you've like, you're down to like one segment that you like, well, what's this next path, and you really quickly cruise through cruise through the various possibilities. And this looks really great until you get down to this wildcard thing. And it turns out with all the variations and whatnot, of like the wildcard matching and the sub wildcard match, it didn't really work that well. So but one benefit is the performance is now described as Oh of n, which is pretty good. Better than n squared, or something like that.
06:20 Yeah. Or Yeah. And in is the depth now not the right. And
06:25 it's that's very important, the depth rather than just the the number, which is even better, right? Because I think
06:31 we're still confused if, if like, if they're all gets, for instance, if you like most of your API is retrieval it, are they all going to be falling into that wildcard thing, then? Yeah,
06:42 I think they would, but then they would just be one, I think it'd be one more step like that two splits pretty quick on the second part, but still, it's not that relevant, because that's that turned out to not work. What Works is something I would have never, never thought should apply to this pathfinding path determining algorithm. And that's a state machine. Awesome. Are you a fan of state machines?
07:07 Yes, I am. I love them.
07:09 Yeah, yeah, state machines are pretty wild. You know, I'm, I'm in the current editing state. Now, what are my options? Where could I go from here, things like that. So you define the same set of routes, but what you get as a state machine that has these transitions. And for example, state one says, if you go to API will go to state two? Or if you do some wildcard slash Edit, then the answer is you just do the edit, or you just do the true wildcard thing. And then you do some other other step that right, really interesting. And then say for this API, it says go to state to state to says, If there's nothing else, you already gone through API, then you call the function Create API you're looking for otherwise, if it's a number of go to state three, and state three says, Well, if that's it, then you're done. Otherwise, you're in this wildcard state, and so on, and the way that you kind of bounce between these states. It's pretty fascinating.
07:58 Yeah. And also, like, how is this faster? But
08:03 exactly, yes, it doesn't, that's I, like I said, I would have never thought about it, because it, it also doesn't seem faster. However, you get to the benchmarking section. And it says, I think by having 20 routes here or something, it came out to be quite a bit faster. Let's see, a mambo ratio of this one says 50%, better, as I said, five times, and maybe it's not that much faster. But wait, I know, there's a five, there's got to be yeah, here we go with factor up to five times speed increase. And the more routes you have, the faster the bigger the increase is, the more complicated and big your application is, the more it's going to benefit from this, right? I think it says that, if you're looking at just like a toy example, you can run the benchmarks, all you want is not going to make any difference. But for realistic ones, it'll be quite a bit faster. So pretty cool. If you're using fast record, be sure to use the latest version, because the version that's coming up with this, this is going to make a lot faster for you. And just an interesting example of how you might have a non obvious solution to a problem like state machine for finding the URL matches. Yeah. Yeah, Brandon, I'll be honest. I agree. I don't see how this is faster. I hear you. Yeah. But the cool thing about computers is you push the button, and then it does a thing and then you know, right. It's not like, you got to have a theory and then you debate the theory. And I guess it's measurable. One of
09:30 the interesting things around this also is that you can't assume much for flask or court because it there are frameworks that other people build up websites with. So some people are going to have like big, thick forest D trees that have lots of branching and everything for their for the routes. And some people are gonna have like, oh, let's just throw half the stuff in one in one directory or one bucket or something like that.
09:55 Right. So that's true. These a lot of people have different variations of how they construct The URLs that map into your site. And that also affects the short trip. So you kind
10:04 of have to have both be like, like one, you know, faster or not. So you just have to not be slower. And it really any case, so interesting. Yeah.
10:14 Also looking at the state machine, there's only four states. Most most things terminate in one or two steps. Instead of testing, or five, six different regular expressions, doing one or two. Yeah, but yeah, it's it is interesting. All right, what do you got next for us?
10:30 Well, speaking of court, we've got court Oh, or Korto. And actually, it's funny, I have no idea if this is built on cord or not, probably not. But I don't know. So Korto. This was oh, somebody six suggested that Paul McKenzie, this is a this is a thing to build documents and stuff. But it's, it's open source. And it's, it's, it's they say Open Source scientific and technical publishing system built on Pandoc. So with a Pandoc, I least I do, it's it converts markdown to really anything else, or rest to other stuff. Like a whole bunch of stuff, you can convert things to like PDFs, or even ebooks and HTML documents, all sorts of things. So this is and then Jupiter, of course, Jupiter is great for a lot of scientific Python research and data science and even just learning Python and playing and stuff. And, and I've kind of liked to see lately, some people doing presentations, even with with just right within Jupyter Notebooks, just kind of fun. And I know people are teaching that way with tutorials. But anyway, so corto is a system where you can do you can have documents, be either Markdown documents, or Jupyter notebooks and have a combination of these things around and then build up stuff. So you can so you know, you've got like a Jupyter, notebook and a demo, and some some Markdown and stuff. And then you can convert the whole thing to a website or a a journal entry or you know, a publication ready for a journal, or a website or an ebook, or really anything. So this is pretty exciting.
12:12 I think it's, I think it's very neat. The idea, you can take a notebook, put a little extra metadata into it, and then publish it to all these different sources. Have you seen how much you can? Do? You know, this is based on Pan doc, have you seen how much you can do with Pan doc? Have you seen the conversion? Like, here, I'll pull up their homepage here. You just go to pan doc.org. See on the right, that thing that looks like gray shading? Yeah, those are the different formats that it can convert from or to Yeah, it's incredible. It's like, unbelievable. Yeah. So when you say okay, well, if I could take my notebook and then power it through Pandoc to do these things, like the output possibilities are insane.
12:53 Yeah. And it even does, like one of the things I was unexpected for me is the presentation. So you can convert one of these two to like, point Yeah, even to PowerPoint, or I was excited about reveal js I reveal. But and then Beamer, I don't know what beamer is, but
13:14 I never heard of beamer either. It's gonna be our new favorite way to present Oh, I see you can create beamer law tech. I see. So it's beamer maybe is a little more like scientific mathematical, where you, you know, here's the integral of this or like, where you've got really specific things possibly, I don't know, specific formulas.
13:33 And then within each of these formats, there's things like so I use reveal js, for instance, but you can there's that the documentation is great. It talks about using using this to create, like, you know, code blocks and line highlighting, and we'll check this out. They've got line height line highlighting that goes incremental, so you could have stages, you can, instead of Step Creating three slides, for instance, that have just slightly different highlighted text, you can say what order you want things highlighted in as you step through. So I'm going to try this for a presentation.
14:10 I might try this as well, is it pretty neat, actually,
14:13 I was excited also about the ebooks feature. You can even publish EPUB. I was talking to Matt, Matt Harrison about this. And Matt pointed out that he'd seen this but he was if you really care about like indexing or the front matter of the back matter. This doesn't quite get there for generating that stuff. But there's Crawford's cross references and all sorts of things that it does do. So if you're just starting out of a publication this would be kind of fun. So I'm excited about this. The reason one of the reasons why I brought up ePub is I read all my I read all my ebooks on a Kindle and whenever I used to see this I was like But do Moby also because I want to be able to read and I'm like Yes, exactly, but Um, I don't have the link here. But Kindle. Amazon is doing a conversion this year. So right now the mail to the last time I sent a mobi document to my Kindle through the email feature. It emailed me back and said we did this, but ePub is preferred now. So Oh, interesting. They're kind of moving away from the Mobi format and back into EPUB. So that's really cool.
15:26 Cool. Yeah, I use the Send to Kindle app as some weird, old, archaic kind of app format. Really? Yeah, I can't it's some weird sort of install an app on off the web. That's not a progressive web app. I can't remember what it is. It's something okay. I think from Adobe, it's some bizarre format. But yeah, that's what I
15:46 just You get a free, you get like this email address that you can send stuff to, and it just goes right to your Kindle. Nice. So that's what I use usually. Anyway, I would probably
15:55 use that if I didn't have so many Kindles over the years. And I don't know, which is the real, which, exactly, I was like five Kindles over and I lost some of them.
16:06 unregister a man? Oh, come
16:09 on. Yes, I should do that.
16:10 But the so for the website stuff is kind of fun, too. So this will generate websites for you. And there, and then it has, yeah, it has publishing input publishing in it, too. So you can you can hook this up to a GitHub action and just say quatrro publish and be using this to publish stuff, too. So this is really kind of cool. The whole the whole infrastructure around documentation and publishing around scientific computing. So I'm pretty excited about this.
16:40 Yeah. I love it. It's great. Now, before we move on, Brian,
16:44 yes, another thing I'm excited about is Microsoft for Microsoft for startups. It's the Microsoft for startups founders hub. So this episode of Python Bites is brought to you by Microsoft for startups. Starting a business is hard by by some estimates, over 90% of startups will go out of business in the first year. Ouch. With this in mind, Microsoft for startups set out to understand what startups need to be successful and create a digital platform to help overcome those challenges. Microsoft for startups founders hub, it provides all founders at any stage with free resources to help solve startup challenges. The platform provides technology benefits, access to expert guidance and skilled resources, mentorship and networking connections and so much more. Unlike others in the industry. Microsoft software startup founders hub doesn't require startups to be investor backed or third party validated to participate founders hub is truly open to all so what do you get speed up development with free access to GitHub and Microsoft Cloud with the ability to unlock credits over time to help your startup innovate founders hub is partnering with innovate innovative companies like open AI, a global leader in AI research and development to provide exclusive benefits and discounts to Microsoft for startups founders have become becoming a founder is no longer about who you know, you'll have access to mentors, their mentorship network, giving you access to a pool of hundreds of mentors across a range of disciplines, across areas like validation, fundraising, management, and coaching, sales and marketing, as well as specific technical stress points, you'll be able to book a one on one meeting with with mentors, many of whom are former founders themselves. Make your idea a reality today, with the critical support you'll get from Microsoft for startups founders up to join the program, visit Python bytes.fm/founders. Hub 2022. The link is in your show notes. Awesome.
18:40 Yeah, thanks Microsoft for supporting the show. They're they're big backers of Python bytes and definitely help to amplify what we're doing here. I think the most awesome thing is the mentors and the advice and support you get.
18:52 Yeah, well, this is one of the things I think is awesome is this when I when I read about this, I think about like the startup startup access that people get if they're in like Silicon Valley, or like wok Y Combinator or something like Yeah, something like that. But this is but that's out there. You only get a handful of those a year. And this is open to a way, way more people. So that's cool.
20:28 you may be wondering about a car and all I got was an app. I know
20:31 I would be too. By the way, sidebar, BMW is doing all sorts of weird stuff like charging you subscriptions to use your seat heaters $18 A month subscription to turn on the seat heater that's already in your car. So I the least thing I'd be upset about as app. That's, that's something else. Now why in the world, am I talking about flutter and Dart? I'm actually looking into using flutter and Dart to rebuild the top Python training apps so that we can have Mac OS, Windows and Linux in addition to the iOS and Android version and give it like a refresh. And it's a really cool technology that I I'm pretty excited about. So let me introduce you to something called BLET. Have you heard of flat?
21:14 Well, just because Brandon just mentioned that? Yeah,
21:19 tell me about Flis. Yes, yes. very timely, Brandon. So flight comes I was sent over to us from Miko, Han, Kala, and flood is the fastest way to build flutter apps. But instead of using the Dart programming language, use Python. Oh, perfect. So let me see if I can go to the Getting Started up, pull up a little example here. So there's an app here, check out a calculator and look at it. It's got a nice little animated, animated GIFs show you how it works. And you know, this looks like a proper calculator app you'd see on a mobile phone or something, right?
21:53 Yeah, looks like my calculator. Yeah, exactly. You could even go see
21:57 an interactive version that is running in your browser, because one of the six or seven compiled targets is your browser. And I don't know if you notice, but how quick did that load way faster than postscript, or any of these other things, it was like nearly instant. So if you go through and you look at how you build it, you just create a main method in Python. And it's provided a page and you say flat dot app, and you just give it the function to call and here you say, I'm just going to add some text called Hello world, right? So you get your hello world here, but you don't want that you want some controls. So an add a bunch of elevated buttons with like, the buttons that are on the calculator, like 123 star plus minus, and so on, and you end up with this column A that's that's kind of interesting. But you want these in rows and columns. So you would say, I'm creating a row, which has some controls for elevated buttons, another row, right? So these are the rows of the calculators and look at that already how cool it is to define that UI, just just fine. Yeah, right. It's pretty neat. And because it's flutter, all of these things have native representations on their platforms, right? in Mac OS, it looks like a Mac OS button on Windows looks like a Windows button, and so on, you got to put styles to make it look like you know, the calculator app type of thing. So yeah, that's, that's pretty much it, you just go and you put all these controls together like this. And you say go, and then somewhere in here, there's a place where it talks about handling the input. But yeah, so here, you just say I have create a class, and then unclick itself dot button, like or, or whatever it is, whatever you're interested in. And when it's going to pass over, is the actual button, the elevated button that was clicked the event source or whatever you call it, right? So you just, you just say, hook into these different button, click events, like you would with any sort of UI reactive framework. And now you have a calculator or you've got a what other kind of app you want to build. Isn't that cool? It's very
23:59 neat. So you can build both. So I think some people would use this for iOS or Android, right? A mobile device. But you said there's other things too, like you can test it out. Would you realistically use this to develop a like a web app?
24:14 Would you I think developing a web app seems like it would be totally reasonable. If one of the things if you look here, if you go to the roadmap, the the mobile store is not yet complete, actually. Okay. So right now, I would think of it as more of a desktop type of thing. But as you saw with that example, there's also a web. So desktop in sort of progressive web app story, right? The mobile story is not yet finished. But that's what's on the roadmap, and I would love to see it, see it come along and make good progress. There's also the possibility of other languages. That's not super interested. Interesting to me, but because I want to write Python anyway, but you would have like go and C sharp and stuff as possible other programming languages. Yeah, but things like having a bill database with a simple ORM it sounds way more. It's way more powerful than it sounds. Because if you're in the web, well, how do you do database stuff? You know, the web has local storage. And it has like a sequel, a wimpy sequel thing that's embedded in, like offline storage for your app. If you're on iOS, you've got SQL lite built in and stuff. But figuring out all those variations is a pain. But if you can just say create a database and do queries against it with an ORM, all of a sudden, that gives you a super cool offline data access story. Right? Yeah. And so on. So, anyway, yeah, and I think there's a lot of neat things that are coming here. This is created by, by Fedora Pfitzner. I'm actually having fedora on CPython next week to talk about this. So we're gonna be diving even more into it. Okay. Yeah, cool. But nice. I don't know how ready this is for producing actual finished applications. Flutter is absolutely ready to go. Right. It's been around for many years. And there's lots of things being put on production for it flat on top of flutter. don't totally know. I'll ask Thor later on next week. And we'll know a little bit more. But when I look at this, this is really exciting. Because it looks like it builds applications that I would really want to use using modern paradigms and all sorts of cool stuff. So and you should be able to integrate with all the flutter things, which is great. Neat. Yeah. Anyway, very cool. Thank you, Miguel, for sending that over.
26:29 So that's a you I think I'd like to switch gears to the command line. So I tui to the CLI, the to E the text to user interface. Yeah, Text user interface. Yeah, that's, anyway, so like, with rich and textual and things like that. So I was really excited about this article, actually. And now I'm a little confused. So I'm glad I'm gonna talk it through. And you can let I'd like to hear what you think so. So this, I ran across this article, it's called Building an authenticated Python CLI. And it's from Nokia, Nokia nokia.ai, in OTA, anyway, blog post about building this. So here's the idea. So if you got a an ID for this application, you Twitter authentication. So if they're developed developing a command line application application that has to use the Twitter API, to get that we've got some secrets you've got, you've got a client ID and a secret that you've set up and you need to store the Twitter token somewhere.
27:36 So to do that, oh, auth exchange where you say, we're going to connect to Twitter, and Twitter says this app was going to have you interact with your account in this way, and why not? Right,
27:45 right. So I want to be able to list it. But I'd like to be able to have the application, keep that around and not have to do that not not really build it into the like, I don't want to compile it into the app or copy that token there, I want to be able to put that somewhere else. So the the idea around this article is to take that use the Twitter API, they talk about using click enrich a little bit. But for the command line stuff, and click is cool. We and we both love rich. And anyway, so the idea is to use a word once you have so use the OAuth and you come back and it's you've got a bear what they call it a bearer token, a bearer token, and then saving that in a file called a net rc file. And instead of instead of telling somebody to just go put it there, they're reading like asking the user for the client ID and the secret from from the Twitter API website stuff. So copy it and paste it here. And then they're storing that bearer, the bearer token in that in the the in the net rc file. And then the next time the application runs, it just reads that and it doesn't you don't have to do it every time. And then that stuff isn't stored with the with the client code, but it's, it's stored within the user. Net rc file or something. So at first, I thought this was something that you could use for like, like usually like, okay, so I don't know whether or not this is a good idea for for that even whether you want to store your barrier stuff. But But you probably don't want to store you don't want to ask the user for password, username and password and store that there because it's just a text file, I think. But maybe there's some other way around. Okay, I was kind of hoping that I'd rather
29:35 lose an OAuth token than I would my actual username and password because at least you can revoke the tokens or expire them and stuff, you know.
29:43 Okay, so for token stuff for saving tokens this is this a reasonable thing to do to keep that in the users directory or something?
29:50 Seems like it's all right. I'm a little suspicious of storing straight plaintext even if it is just a an OAuth token. Okay, I might, you know, I don't know, because I haven't read the article all the way through, but I might, I might encrypt the token and then store it.
30:06 Yeah. You know, yeah. So actually, so I wanted to I start this conversation and then ask people because either for token, I know there's other password ways to like, store them locally, safely. But yeah. Is it something that you do that with anyway? Just, I'd love to hear people's thoughts on, on this on, on where, like, how, what's the best way to store people's secret information? So they don't have to enter it every time. But so storing in their user directory might not be terrible, but maybe there's a better way. So it's probably operating system specific to but I don't know,
30:46 right? Well, your, your, your user profile is protected in general, right? From other users, right. But is it protected? If you run an app that decides it's just gonna go cruising through your user profile, you know, something that you ran, and you shouldn't have trusted it? But you did. I mean, ssh, ssh keys, private keys are there, right in the dot SSH folder? Yeah, that's true. So that's probably worse than losing an OAuth token as well. So if you can
31:12 guess I'm thinking of I'm in the design process for a command line application that has to store user credentials. So
31:21 yeah, I mean, isn't that one of the benefits of doing this podcast? It's a byproduct of our natural just working on new projects, like flutter for me and the previous one, right? Yeah. Okay. Yeah, this is interesting. And I see where it goes. But yeah, I would probably at least encrypt the token at it. Okay, thanks. Doesn't matter. Yeah, well, awesome.
31:42 They're done with our normal items. I did. So the extra stuff that I had, that I was gonna let you go first, but I'm super excited that I'm getting a whole bunch done on the
31:53 floor. You go really quick before you go on. Just Sam Marley either says, that's why you should encrypt your secret keys and system tool chain is probably the correct in quotes answer.
32:03 Okay, system tool chain. Okay. I don't even know what that means. But I'll look it up.
32:07 Yes, this is something that go taggie or DuckDuckGo. Or maybe Google like I am, I'm excited to hear about this pi test course. Because people have been asking and progress has been significantly made. Right. Awesome. Yeah,
32:19 yeah, it's going great. So I've got it's a it's a it's really seven chapter is broken up into seven sections, or chapters. But it's you know, video, of course, so but I'm really excited about it. Because the the PI test book has received a lot of a lot of people love it, which is great. I love that I got great feedback. But it's, it's detailed, right? So we jump into a whole bunch of details in with a book, you can kind of get to some section that you're like, Yeah, I don't need that right now. And you can skip over it. And yes, you can do that with a course. But it's a little harder. So the goal for this is really, for people new to pi test or unfamiliar that are used to using a little piece of it and unfamiliar was some of the powers is to introduce people to like the full power of pi test, but quickly and not overwhelm them. So I think I've done a good job, but we'll see. We'll get it edited and get it available to people as soon as we can. And Dan,
33:14 thanks. I'm excited. Yeah, I'm excited to check it out. That's
33:16 gonna be awesome. All right.
33:17 How about you? Do you have anything extra good lead.
33:21 And so brand new course over at talk Python training, Django getting started, which is awesome. This is put together by Chris doe. And this is a six hour course on Django and right now people are hurry, there's an early bird discount the same 10% that you can get as well. So that just came out Wednesday, Wednesday. It's yesterday. So came out yesterday. I think that or the day before very recently. Anyway, if you've been wanting to do get started in June, if you want to get into Django, excuse our Django Of course, it's really good. It if you've been dabbling, you're like, I really need to see how the pieces fit together better. Also, check it out. It's definitely good stuff.
33:59 What are the top two frameworks these days still in Python? Yeah.
34:03 How do you know how many courses you've got on the platform now?
34:06 43 courses and about that platform tells me and 233 hours of content so there's more than that in there. But there are a couple that are not published yet. There's some exciting ones coming Cool. Nice. Yeah. All right. Well, those are all the extras I have for now. I do have a joke for you though. Oh good. Are you a fan of The Lion King? Do you ever watch that show? The Lion King the cartoon Disney it was a Disney I don't know if saw
34:31 it I don't know if I call me a fan but sure how. Oh,
34:35 did you enjoy watching it? I guess? Yeah, yeah. So I watched it with my kids. And yeah, we enjoyed it as well. And so I don't even remember the name of the Father. Remember the name of the Father though the actual Lion King know? Whatever. That Yeah, exactly. I don't either. But the little kid that was supposed to be the kid line who was supposed to be being groomed to be the king is talking to his father and They're looking over the vast kingdom that says, Look Simba, every language that light touches has a garbage collector and symbol. But what's that shadowy, shadowy place over there? That is C++ you must know. Yes, sorry, C++, but yeah, that was fun.
35:19 And Mufasa Mufasa. Yes, thank you. Yes,
35:22 you got it. Mufasa says that's a C++ you must never go there.
35:27 No, you should.
35:29 Don't take it too seriously the joke, but it was fun.
35:34 As a garbage collector
35:36 was that shadowy place over there? You must never go there. What about? What about rust? Nice. So
35:45 I don't even know enough about rust to make this part of the joke. Yeah, I busy learning Dart and flutter. Maybe I don't have to learn Dart though. Because I can do it in Python. I could just learn flutter. We'll see.
35:56 So that would be like that is rust. You can go there, but come back quickly.
36:02 Just short visits, so. Yeah.
36:06 Awesome. Well, thanks for having this great episode. Yeah, it's great to be back with you. Yeah. So and I guess we'll talk next week. Yeah,
36:14 you bet. See ya. Bye.