Python Bytes - #295 Flutter + Python GUI Apps?

Episode Date: August 4, 2022

Topics covered in this episode: Faster routing for Flask & Quart Quarto: an open-source scientific and technical publishing system built on Pandoc Flet UI Building an authenticated Python CLI E...xtras Joke See the full show notes for this episode on the website at pythonbytes.fm/295

Transcript
Discussion (0)
Starting point is 00: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 4th, 2022, and I am Brian Ocken. I'm Michael Kennedy. It's good to have you back. Good to be back. For people out there listening, we kind of batched some stuff up so that we 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, we didn't do that. It was live.
Starting point is 00:00:28 No, it was always live. Always live. Yeah. I'm glad you got back quickly. And speaking of fast, you've got a fast story for us. Yeah. How about we make things faster? So I want to talk about Flask and Cort. So Flask is Flask. It's one of the most popular web frameworks out there. Cort 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 Palettes organization. I feel like Flask and Cort are working much closer together these days.
Starting point is 00:01:05 So I don't know exactly what the relationship is, but Flask and Quart are very closely tied together right now. What I want to talk about is routing or for those UK friends, rooting if you prefer, but the idea of taking a URL and figuring out what function to call, right? So what you do is you set up in Flask, you say at app.get, app.post,
Starting point is 00:01:27 and you give it 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 where you might say it's category, maybe a category ID and it has to be an integer, so convert that for me.
Starting point is 00:01:44 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 Vexoig, the HTTP router that is the foundation of doing the routing in Flask and Quart. And it's something like five times faster than it was before. I think five times the number. Wow. Much faster. So for 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, like say TalkByLine Training, where 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 get or is
Starting point is 00:02:30 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.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.
Starting point is 00:03:08 And the way it works is it just says, okay, we're going to run the verb test, the regex test, all those things one at a time, top to bottom. Well, Brian, I know you studied a lot of computer stuff. This is not something that's good that grows with time, right? As you add more of these, it's complexity. What is it?
Starting point is 00:03:30 Something like O of N or maybe a little bit O of N squared, maybe. I'm not sure. Something like that because you're testing the verbs and you're testing the things, right? So as you get these larger and larger, you're like running through them
Starting point is 00:03:43 every single request. And the world is full of interesting data structures and algorithms that you might consider. So the idea was this is going to get rewritten into something that's not just the sort of brute force test it top to bottom in the order that it's defined here. And I think one thing, it's interesting the news that routing in Flask and Quart is five times faster. That's fantastic. But also just thinking about the algorithms. I think it's a cool problem solver, problem solving thing to go look at, right?
Starting point is 00:04:13 An 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 path pattern. 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,
Starting point is 00:04:48 right? So you could build, say, a database thing that says, here's a 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.
Starting point is 00:05:13 Remember we had slash API and we had slash API slash ID. So what gets created is there's a get node in the tree, then an API node that if it matches exactly terminates, but at that call, but if not, then it also node that if it matches exactly terminates, but at the, that call, but if not, then it also has the, well, keep going and match the next part of the path
Starting point is 00:05:30 as a number. And if that matches, then you're going to 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? Yeah. And also, I mean, yeah, it looks good and also faster because you, you don't look at everything. Right, exactly. You say, is it a getter post? Boom, you're down to one segment. Then you're like, well, what's this next path?
Starting point is 00:05:51 And you really quickly 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 uh of like the wild card matching and the sub wild card matching it didn't really work that well so but one benefit is the performance is now described as o of n which is pretty good better than n squared or something like that yeah or yeah and it in is the depth now not the uh right and it's that's very important it's the depth rather than just the the number which is even better right because i think i'm still confused if uh if like if they're all gets for instance if you like most of your api is
Starting point is 00:06:38 retrieval and are they all going to be falling into that wild card thing then yeah i think they would but then they they would just be one i think it'd be one more step like it just splits pretty quick on the the second part but still it's not that relevant because that's that turned out to not work what worked is something i would have never never thought should apply to this pathfinding path determining algorithm and that's a state machine awesome Awesome. Are you a fan of state machines? Yes, I am. I love them. Yeah. Yeah. State machines are pretty wild. You know, 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 is a state machine that has these transitions.
Starting point is 00:07:23 And for example, state one says, if you go to API, we'll 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 step there, right? Pretty interesting. And then say for this API where it says go to state two, state two says, well, if there's nothing else, you've already gone through API, then you call the function create API you're looking for. Otherwise, if it's a number, 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.
Starting point is 00:07:58 Yeah. And also, like, how is this faster? Exactly. Yes, it doesn't. Like I said, I would have never thought about it because 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. Ratio of this one says 50% better. I said five times and maybe it's not that much faster, but some way I know there's a five. There's gotta be. Yeah, here we go. A factor up
Starting point is 00:08:32 to five times a 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. It's not going to make any difference, but for realistic ones, it'll be quite a bit faster. So pretty cool. If you're using Flask Record, be sure to use the latest version because the version that's coming out with this, this is going to make it a lot faster for you? And just an interesting example of how you might have a non-obvious solution to a problem like a state machine
Starting point is 00:09:10 for finding the URL matches. And Brandon out of the audience says, I agree. I don't see how this is faster. Well, I hear you. But the cool thing about computers is you push the button and then it does a thing
Starting point is 00:09:22 and then you know, right? It's not like you got to have a theory and then you debate the theory 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 it's measurable. One of the interesting things around this also is that you can't assume much for Flask or Quart because there are frameworks that other people build up websites with. So some people are going to have like big, thick foresty trees
Starting point is 00:09:44 that have lots of branching and everything for their, for their routes. And some people are going to have like, oh, let's just throw half the stuff in one, in one directory or so, or one bucket or something like that. Right. That's true. A lot of people have different variations of how they construct the URLs that map into your site.
Starting point is 00:10:02 And that also affects it. That's true. So you kind of have to have both be like, like one, you know, faster or not. So you just have to not be slower and in really any case. So interesting. Yeah.
Starting point is 00:10:14 Yeah. Also looking at the state machine, there's only four States. Most, most things terminate in one or two steps. So instead of testing four or five, six different regular expressions doing one or two. But yeah, it's, it five, six different regular expressions, doing one or two. But yeah, it is interesting.
Starting point is 00:10:28 All right, what do you got next for us? Well, speaking of Cort, we've got Cort O or Cort O. And actually, it's funny. I have no idea if this is built on Cort or not. Probably not, but I don't know. So Cort O, this was, oh, somebody suggested it. Paul McKenzie. This is a thing to build documents and stuff, but it's open source, and they say open source scientific and technical publishing system built on Pandoc.
Starting point is 00:10:59 So we love Pandoc, at least I do. It converts Markdown to really anything else or rest to other stuff um like a whole bunch of stuff you can convert things to to like pdfs or even ebooks and html documents all sorts of things um so this is and then jupiter of course jupiter's great for a lot of scientific uh python research and data science and even just learning Python and playing and stuff. And I've kind of liked to see lately some people doing presentations even with just right within Jupyter Notebooks,
Starting point is 00:11:37 just kind of fun. And I know people are teaching that way with tutorials. But anyway, so Cordo 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 journal entry or a publication ready for a journal or a website or an ebook or really anything.
Starting point is 00:12:11 So this is pretty exciting. 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? This is based on Pandoc. Have you seen how much you can do? You know, this is based on Pandoc. Have you seen how much you can do with Pandoc? Have you seen the conversion?
Starting point is 00:12:28 Like here, I'll pull up their homepage here. Just go to pandoc.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 just like unbelievable. Yeah, yeah.
Starting point is 00:12:44 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 yeah um and it even does uh like one of the things that was unexpected uh for me is the presentation so you can convert one of these to um to like a powerpoint um yeah even to powerpoint or um i was excited about reveal js i like reveal uh but and then beamer i don't know what beamer is but i've never heard of beamer either um it's gonna be our new favorite way to present oh i see you can create beamer la tech i see so it's Beamer maybe is a little more like scientific mathematical where you have to, you know, here's the integral of this or like where you've got really specific
Starting point is 00:13:30 things possibly. I don't know. Specific formulas. And then within each of these formats, there's things like, so I use Reveal.js for instance, but you can, there's, the documentation is great. It talks about using this to create like, this to create code blocks and line highlighting. And check this out. You've got line highlighting that goes incremental. So you could have stages. Instead of creating three slides, for instance, that have just slightly different highlighted text, you can say what order you want things highlighted in
Starting point is 00:14:05 as you step through them. So I'm going to try this for a presentation. I might try this as well. This is pretty neat, actually. I was excited also about the e-book feature. You can even publish EPUB. I was talking to Matt Harrison about this, and Matt pointed out that he'd seen this,
Starting point is 00:14:23 but he was, if you really care about like indexing or the front matter or the back matter, this doesn't quite get there for generating that stuff. But there's cross references and all sorts of things that it does do. So if you're just starting out a publication, this would be kind of fun. So I'm excited about this.
Starting point is 00:14:44 One of the reasons why I brought up EPUB out of a publication this would be kind of fun so um i'm excited about this the the reason one of the reasons why i brought up epub is um i read all my uh i read all my uh 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 it on my kindle exactly but um i don't have the link here but 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. Cool. Yeah yeah i use the send to kindle app it's some weird old archaic kind of app for me yeah i try really uh yeah i
Starting point is 00:15:35 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 it is. I 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. Yeah, nice. So that's what I use usually. Anyway. I would probably use that if I didn't have so many Kindles over the years, and I don't
Starting point is 00:16:00 know which is the real email for it. Because I have like five Kindles over and I lost some of them. You gotta like unregister them, man. Oh, come on. Yes, I should do that. But so for the website stuff, it's kind of fun too. So this will generate websites for you.
Starting point is 00:16:17 And then it has... GitHub pages. Yeah, it has publishing input, publishing in it too. So you can hook this up to a GitHub action and just say Quattro 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. Yeah, I love it. That's great. Now, before we move on, Brian. 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 Bytes is brought to you by Microsoft for startups. Starting a business is hard, but 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
Starting point is 00:17:10 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 for Startup Founders Hub
Starting point is 00:17:35 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 innovative companies like OpenAI, a global leader in AI research and development to provide exclusive benefits and discounts. Through Microsoft for Startups, Founders Hub, becoming a founder is no longer about who you know. You'll have access to 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 mentors, many of whom are former
Starting point is 00:18:25 founders themselves. Make your idea a reality today with the critical support you'll get from Microsoft for Startups Founders Hub. To join the program, visit pythonbytes.fm slash foundershub 2022. The link is in your show notes. Awesome. Yeah. Thanks Microsoft for supporting the show. They're big backers of Python Bytes and definitely help amplify what we're doing here. I think the most awesome thing is the mentors and the advice and the support you get. Yeah. Well, this is one of the things I think is awesome is this, when I, when I read about this, I think about, um, like, uh, the startup, um, the startup access that people get if they're in like silicon valley or like y combinator or something yeah something like that but this is but that's you only get a handful of those a year
Starting point is 00:19:10 and this is open to a way way more people so that's cool awesome yeah very cool all right can i take you on a diversion to show you something pretty cool yeah all right so um dart is a programming language that we don't usually talk about on Python Bytes, right? And Dart is a language that came out from Google. And I felt like it was trying to compete with JavaScript to a large degree and didn't really gain a lot of traction until Flutter came along. And Flutter is a really cool way to design mobile and desktop native applications using Dart, right? Think of it as an alternative to Cordova, PhoneGap, Xamarin, Ionic, all these different sort of generic ways to build apps that run on different platforms. So with Flutter,
Starting point is 00:20:02 I can build an app that runs on iOS and Android, but I can also compile it as a target to macOS, Linux, and Windows. And I can even compile it to a target for the web where it'll run as a progressive web app, okay? And you get some really cool apps. Like by far the most well-known one is the BMW car. If you have a BMW, this is like the app that is your car. But there's other
Starting point is 00:20:25 ones as well. It's used a lot within Google, obviously. Right. Now you may be wondering. I would be ticked if I bought a car and all I got was an app. I know I would be too. By the way, sidebar, BMW is doing all sorts of weird stuff. They're 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 So the least thing I'd be upset about is the app. But 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
Starting point is 00:20:54 to rebuild the TalkPython training apps so that we can have macOS, 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'm pretty excited about. So let me introduce you to something called Flet. Have you heard of Flet? Well, just because Brandon just mentioned it.
Starting point is 00:21:19 Tell me about Flet. Yes, yes, yes. Very timely, Brandon. me about flit yes yes yes uh very timely brandon so flit comes i was uh sent over to us from michael hankala and flit 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 i'll go to the getting started i'll pull up a little example here um so there's an app here, check it out, it's a calculator and look at it, it's got a nice little animated GIF showing how it works.
Starting point is 00:21:49 And this looks like a proper calculator app you'd see on a mobile phone or something, right? Yeah, it looks like my iPhone calculator. Yeah, exactly. And you could even go see interactive version that is running in your browser
Starting point is 00:22:01 because one of the six or seven compile targets is your browser. And I don't know if you noticed, but how quick did that load? Way faster than PyScript 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. You say flet.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.
Starting point is 00:22:28 You want some controls. So I'm going to add a bunch of elevated buttons with like the buttons that are on the calculator, like one, two, three star plus minus and so on. And you end up with this column of that. That's kind of interesting, but you want these in rows and columns. So you would say I'm creating a row 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 but just just that python yeah right it's pretty neat and because it's flutter all of these things
Starting point is 00:23:01 have native representations on their platforms, right? In macOS, it looks like a macOS button and 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 pretty much it. You just go and you put all these controls together like this and you say go. And then somewhere somewhere in here there's a place where it talks about handling the input but yeah so here you just say i have uh create a class and then on click it's self dot button clicked or or whatever it is whatever you're interested in and what it's going to pass over is the actual button the elevated button that was clicked the
Starting point is 00:23:42 event source or whatever you call it. Right. So you just say, I'm hooking 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 neat. So you can build both. So I think some people would use this for iOS or Android, right?
Starting point is 00:24:06 A mobile device. But you said there's other things too, like you tested out. Would you realistically use this to develop a web app? I think developing a web app seems like it would be totally reasonable. One of the things, if you look here, if you go to the roadmap, 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.
Starting point is 00:24:30 But as you saw with that example, there's also a web. So desktop and 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 come along and make good progress. There's also the possibility of other languages. That's not super interesting to me, but because I want to write Python. Anyway, but you have like Go and C sharp and stuff as possible other programming languages. But things like having a built-in database with a simple ORM, it sounds way more,
Starting point is 00:25:03 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 SQL, a wimpy SQL thing that's embedded in like offline storage for your app. If you're on iOS, you've got SQLite 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.
Starting point is 00:25:35 So anyway, yeah, I think there's a lot of neat things that are coming here. This is created by, let me see if I got the name, by Fedora Fitzner. I'm actually having fedora on hawk python next week to talk about this so we're going to 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 out production for it flat on top of Flutter? Don't totally know.
Starting point is 00:26:07 I'll ask for later, 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 you mikhail for sending that over um so that's a ui thing um i'd like to switch gears to the command line uh so i was to the to the clee the toey the text user interface yeah text user interface yeah that's um uh anyway so like with rich and textual and things like that so um i was really excited about this article actually and now i'm
Starting point is 00:26:50 a little confused so i'm glad i i'm going to talk it through and you can let i'd like to hear what you think so so that this i ran across this article it's called building an authenticated Python CLI and it's from, uh, no Tia, no Tia, no Tia dot AI in OTI. Anyway, uh, it's blog post about building this.
Starting point is 00:27:12 So, so here's the idea. So if you've got a, uh, and it, for this application, you Twitter authentication. So if they're developing a command line application that,
Starting point is 00:27:24 uh, has to use the Twitter API to get that, we've got some secrets. You've got a client ID and a secret that you've set up and you need to store the Twitter token somewhere. You're going to do that OAuth exchange where you say, we're going to connect to Twitter. And Twitter says, this app is going to interact with your account this way and whatnot, right? Right. Right. So I want to be able to this 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 app. 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 idea around this um article is to take that use the twitter api uh they talk about using click and rich a little bit but uh for the the command
Starting point is 00:28:11 line stuff and click is cool um we and we both love rich uh and anyway so the idea is to use a 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, um, instead of telling somebody to just go put it there, um, 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 the bearer token in the netRC file. And then the next time the application runs, it just reads that. And you don't have to do it every time.
Starting point is 00:29:00 And then that stuff isn't stored with the client the client uh code but it's uh 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 uh 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 um but um but you probably don't want to store you don't want to ask the user for pass username and password and store that there because it's just a text file i think uh but maybe there's some other way around getting i was kind of hoping that i'd rather lose a no auth token than i would my actual username and password because at least you can revoke the tokens or
Starting point is 00:29:41 expire them and stuff you know okay so for token stuff for saving tokens this is this a reasonable thing to do to keep that in the user's directory or something seems like it's all right i'm a little suspicious of storing straight plain text even if it is just a an oauth token yeah okay um 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. Yeah. You know? Yeah.
Starting point is 00:30:08 So actually, so I wanted to 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 is it something that, can you do that with, anyway. I'd love to hear people's thoughts on, on, on this, on,
Starting point is 00:30:28 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. Yeah. But so storing in their user directory might not be terrible, but maybe there's a better way. So it's probably a operating system specific too, but I don't a better way. So it's probably operating system specific too,
Starting point is 00:30:45 but I don't know. Right. Well, 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 going to go cruising through your user profile, you know, something that you ran and you shouldn't have trusted it, but you did. I mean, SS mean ssh token ssh keys private keys are there right in the dot ssh folder yeah that's true yeah so that's probably worse than losing a wealth token as well so if you can guess i'm thinking of i'm i'm in the design process for a command line application that has to store user credentials so that's where i was running across yeah like this i mean isn't that one of the benefits of doing this podcast is that
Starting point is 00:31:25 a byproduct of our natural just working on new projects like flutter for me on the previous one right yeah okay yeah this is interesting and i see where it goes yeah cool but yeah i would probably at least encrypt the token i don't know but okay thanks it doesn't matter yeah well awesome they're done with our normal items um i the so the extra stuff that i had uh that i was gonna let you go first but i'm super excited um that i'm getting a whole bunch done on the pipe really quick before you go really quick before you go on just sam marley other says that's why you should encrypt your secret keys and system tool chain is probably the correct in quotes answer okay system tool chain okay i the correct, in quotes, answer. Okay. System tool chain. Okay.
Starting point is 00:32:05 I don't even know what that means, but I'll look it up. Yes. This is something to go taggy or DuckDuckGo or maybe Google. Okay. I'm excited to hear about this PyTest course because people have been asking and progress is being significantly made, right? Awesome. Yeah.
Starting point is 00:32:19 Yeah. It's going great. So I've got, it's a, it's a, it's really seven chapters broken up into seven sections or chapters, but it's, you know, video course. So, but I'm really excited about it because the, the, the PyTest book has received a lot of, a lot of people love it, which is great. I love that. Have a great feedback, but it's, it's detailed, right? So we jump into a whole bunch of the details and with a book, you can kind of get to some section that you're like, yeah, I don't need that right now.
Starting point is 00:32:48 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 PyTest or that are just using a little piece of it and unfamiliar with some of the powers is to introduce people to like the full power of PyTest, but quickly and not overwhelm them. So I think I've done a good job, but we'll see,
Starting point is 00:33:10 we'll get it edited and get it available to people as soon as we can. And yeah, I'm excited. Yeah. Yeah. I'm excited to check it out. That's gonna be awesome. All right. How about you? Do you have anything extra? Good lead in. So brand new course over at TalkPython training, Django getting started, which is awesome. This is put together by Chris Trudeau. And this is a six hour course on Django. And right now people hurry, hurry. There's an early bird discount to save 10% that you can get as well. So that just came out Wednesday. Wednesday is yesterday. So it came out yesterday, I think that or the day before, very recently. Anyway, if you've been wanting to get started, if you want to get into Django, Skittles are a Django course. It's really good. 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. Django is one of the top two web frameworks these days still in Python.
Starting point is 00:34:02 Yeah. Do you know how many courses you've got on the platform now? 43 courses in about, that platform tells me, in 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.
Starting point is 00:34:19 Nice. Yeah. Sweet. Yeah. All right. Well, those are all the extras I have for now. I do have a joke for you though. Oh, good.
Starting point is 00:34:24 Are you a fan of The Lion King? You ever watched that show? The Lion King, the cartoon? Sweet. 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? You ever watched that show? The Lion King, the cartoon Disney. It was a Disney. I don't know. I've saw it. I don't know if I'd call me a fan, but sure.
Starting point is 00:34:34 No. Oh, did you enjoy watching it? I guess at all. Yeah. Yeah. Yeah. Yeah. So I watched it with my kids and yeah, we, we enjoyed it as well. And so, um, I don't even remember the name of the father.
Starting point is 00:34:46 Remember the name of the father? The actual Lion King? No. You put me on the spot. Whatever. Yeah, exactly. I don't either. But the little kid that was supposed to be the kid lion,
Starting point is 00:34:56 who was supposed to be being groomed to be the king, is talking to his father. And they're looking over the vast kingdom. And it says, Look, Simba, every language that light touches has a garbage collector. And Simba looks at us, but what's that shadowy place over there? That is C++. You must never go there.
Starting point is 00:35:16 Yes. Sorry, C++, but yeah, that was fun. And Mufasa. Mufasa, yes. Thank you. Yes, you got it. Mufasa says, that's a C++. You must never go there. Noufasa. Yes. Thank you. Yes. You got it. Mufasa says that's a C++. You must never go there.
Starting point is 00:35:27 No, but you should. Don't take it too seriously. It's a joke, but it was fun. As a garbage collector. Yeah, I know. What's that shadowy place over there? You must never go there. What about Rust?
Starting point is 00:35:43 What about Rust? Nice. I don't even know enough about Rust? What about Rust? Nice. I don't even know enough about Rust to make this part of the joke. Yeah. I'm 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.
Starting point is 00:35:56 So that would be like, that is Rust. You can go there, but come back quickly. Exactly. Just short visits. Short visits. Yeah. It's a fun question too. Well, Just short visits. Short visits. Yeah. It's a fun show too.
Starting point is 00:36:07 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,
Starting point is 00:36:14 you bet. See ya. Bye.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.