Python Bytes - #291 Wait, you have how many licenses?!?

Episode Date: July 6, 2022

Topics covered in this episode: Python License tracker undataclass Qutebrowser asyncio and web applications Extras Joke See the full show notes for this episode on the website at pythonbytes.fm/...291

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 291, recorded July 6, 2022, and I'm Brian Hocken. Hey, I'm Michael Kennedy. Good to see you, Michael. It's been a while. Yeah, good to see you, Brian, as well. Fun as always. There's just a never-ending flow of fun stuff to talk about. I know we've got good stuff to share today, as always. Yes, we do. Why don't you kick us off? Licensing, something everybody's super psyched about.
Starting point is 00:00:28 But I think you will find this project interesting. And I don't know how you'll receive it, but I was like, wait a minute, what? This is odd. So this project comes to us from Tom Nyhoff. And he sent this in and said, you know, it occurred to me that we have licenses for things like PyTest. So I could go search for PyTest. And over on GitHub, or my programming lens, over on GitHub, I could check this out. And what is the license?
Starting point is 00:00:55 Well, it looks like the license is MIT. So if I want to use PyTest, I'm buying into the MIT license, right? Yeah, kind of. Sometimes. Only if you ship with it. So let's go ahead and put PyTest. That's true. But, you know, there are libraries like Request
Starting point is 00:01:09 or whatever that you might, you know, ship, right? So I'll just put PyTest in here to see what we get. So this project is called Python Project Insight, and it only has about 5,300 packages parsed in so far. But the idea is you can say, load the dependencies, and it'll show you the licenses. So for example, for PyTest, we have the MIT license, but PyTest depends upon packaging and import lib metadata and Colorama and PyParsing and Adders and typing extensions.
Starting point is 00:01:36 Well, packaging has the Apache license. Colorama has the BSD license. Adders has MIT license. So does PyTest. And then the Python Software Foundation has typing extensions. So I don't know. What do you think of that? It is interesting. And I don't know what to do with it. I don't either.
Starting point is 00:01:55 I'm like, wait a minute. I have to kind of sort of consider the transitive closure of the dependencies for their licenses. And I had never really, I'm sure people are there. Well, of course, Michael, of course, that's how it works. But for me, I hadn't really thought about it. I look at the project or the library and it has this license. Like another one could be that you would build on before, more likely would be like requests.
Starting point is 00:02:17 So if we load the dependencies for requests, you have Apache, BSC, MIT, and Mozilla split across that one project. So yeah, I just think this is pretty wild. I'm pointing out that TensorFlow was one of the more wild ones. If you load up TensorFlow, there's just lots of different licenses here. Like sample the GitHub licensing options, basically. So if I was shipping a commercial product with python that used a whole
Starting point is 00:02:45 bunch of dependencies i do know that these this transitive closure stuff the stuff that i'm actually shipping with i really am supposed to uh list those and have those licenses listed and somewhere right in a sense because you are shipping the the dependencies of a thing in order for that thing to work right yeah so um so you're at least saying i'm using this it's here and here's the license for it i think that's the case i'm not a lawyer of course um but the there's a whole bunch of these tools like pytest for instance that we use that we don't ship those are those are a different story um and that's kind of a different license thing um but i i don't know about the packages. Are these like the packages that these are shipping? They're there. They're not really
Starting point is 00:03:30 being sold. But do you have to list the licenses of the things that you're depending on? I don't know. I don't know either. I think maybe in some times it doesn't matter. But if it was GPL rather than LGPL, right, for example, that might be something you care about. You know, I don't know. I would love to hear people who really understand this super well if they could like maybe tweet at us or comment on the YouTube stream or something like that about exactly what that means. But I do think it's pretty interesting information. Like mostly this shows the licenses, but also shows the total size of installing the project and what libraries it depends upon so you can kind of like poke around with that as well
Starting point is 00:04:09 that is that's actually pretty useful and interesting information as well that you don't really think about is how big how big of a download do i get if i put all these things all these things together so yeah yeah and you can pile them up. So you can say, I'm using TensorFlow. I'm using SKLearn. I'm using Request or whatever. Then you can say like, okay, for those three, tell me about what the story is. You know what I mean? Yeah.
Starting point is 00:04:34 Then it gets a little more interesting still. I guess maybe that's not quite right. But that just comes with SciPy. But anyway, yeah, something like that, right? Yeah, neat. So anyway, thanks, Tom, for sending that in and sharing it with us. Well, i think i'll switch gears a little bit and talk about data classes so i actually really like data classes have you used data classes much mike michael
Starting point is 00:04:56 some they definitely have some very neat properties i find myself kind of when i'm on the edge of using a data class i'm like maybe Pydantic but Frozen is a cool option you can add slots slots makes so many things awesome in terms of lower memory usage faster attribute access all kinds of things and if it's just slots equal true on the class definition that's kind of nice yeah it is um so uh Trey Hunter is a Python trainer, and he came up with this cool tool on his Python morsels site called the undata class. And it's actually also a library that he released, a little tool that's undata class. And the idea is he was thinking, what would be the equivalent of a data class? If you didn't write a data class, if you wanted to have the same sort of
Starting point is 00:05:44 functionality, what would you do in a normal class so he's got this cool tool down and the example shows yeah it shows here uh slots uh just a point with xyz all floats and also shows frozen sets and slots but i'm gonna turn those off um and you just change the class and it changes the output. And it like, he like prints out what an equivalent class would be if you didn't, if you didn't use data classes. So actually I'm not, and I, and I tried to make sure I understood all of this. So one of the things that it's kind of neat that it just, it's part of a learning tool that he's got, that it shows you, you know, what you get with data classes. But there's not a lot of description around like what all this means so this is sort of a fun thing to help you look up stuff i guess so right off the bat if we just have x y and z you have a dunder and net that takes x y and z's as input values and assigns them and it comes with a nice repper class and then an eq a dunder eq
Starting point is 00:06:43 which is uh for equality um and one of the things i knew i wanted to look up was um to make sure i understood is uh what it does is it says if if if the other thing if i'm gonna be getting compared with something else if that other thing is also my same type in this point point in this case point uh then then you can do the the equality comparison otherwise the rais are not implemented and that's just kind of a convention because python um and then what happens is uh python will try to call eq on the other thing of like reverse the order and stuff because it's kind of how python works but it's one of those hidden sort of things is you need to kind of know that if if
Starting point is 00:07:22 you if you don't know what to do in an eq class or an eq function um ray is not implemented and then python goes from there um and then uh resetting though uh if you if you give it uh slots all the slots does is add slots to it um and that's it which is kind of cool and what slots does yeah And what slots does is it makes it so that you can't add later. So if you can't add a W attribute later to your point. But then if you do frozen, it does a whole bunch of stuff. Oh, you get a whole bunch more Dunder methods. But mostly these are just raising exceptions so that, you know,
Starting point is 00:08:02 if you try to change it, it raises exceptions. So anyway, this is kind of cool. Yeah. do you see the uh dunder init the constructor implementation when you add frozen it doesn't say self.x it's a it calls set adder like behind the scenes and then it implements set adder and dell adder and raises exceptions if you try to mess with it pretty well that's cool um the we're also going to link to a couple um a couple articles that uh that trey wrote about he wrote about this about how he wrote this and well one of the things i really i'm bringing this up partly because i like data classes and it's kind of cool for people to learn what they are but in his developing this he says he came up with
Starting point is 00:08:45 having a great use case for the match case, new match case blocks in Python using Sentinel objects, which I'm not sure what he's talking about there. So I'll take that. Look at that.
Starting point is 00:08:56 Using TextRap dedent, which I love. And it's nice to see somebody else using that. Slice and then AST. So he's using AST in here. So it's kind of a cool, fun that. Slice. And then AST. So he's using AST in here. So it's kind of a cool, fun example of using that. Anyway.
Starting point is 00:09:09 Cool term. Yeah, a lot of cool stuff in action there. Go back to the first one, the first tab you got there. Yeah. One of the things I appreciate from this example is you just say class point, X colon float, Y colon float, Z colon float. Yeah. Put the data class attribute on it.
Starting point is 00:09:21 Look how much it's doing for you, right? It's not just the typed values, but it's protecting the read-write ability, making it read-only. It's getting a repper definition. It's getting a hashability, equality, not quality effectively by, all right, there's a lot of cool things it's adding for you there.
Starting point is 00:09:39 Yeah, and he's- You can appreciate the data class. He's suggesting doing other stuff like using keyword only and fields, different fields to see if you can change how it works. But yeah, I'll have to play with this more. And a reminder to everybody that data classes are almost enough, but you need more. We'll also look at adders because adders is kind of a superset of data classes. Right. Yeah. Fantastic. That's great. Cool. cool all right brian the next one i got here this one's for you okay
Starting point is 00:10:10 all right all right uh so let's go back we'll take a two a two-step process to approach this did you ever use links l-y-n-x yeah like a long long time ago ago. I remember SSH. I know, I think I telnet it into the mainframes back at the university and I'd run L, Y, and X. This predated the graphical web. I mean, it's insane, right? But it's a browser that is pure text in the terminal. Today, we have all these fancy browsers. But one of the things you had a lot of was like keyboard shortcuts and other types of things you could do, right? Yeah. Well, now that it's 30 years later, what if we could go back to a time a little bit like that? So I want to introduce you to the Qt browser, Q-U-T-E
Starting point is 00:10:56 browser. Okay. Okay. So what is this? The Qt browser is also like kind of in need of a homepage refresh, but it's a keyboard focused browser with a minimal GUI. And what's interesting is it's built with Python. Okay. So it's a full web browser built with Python. And it's kind of like a, like a Vimper or one of these other ones that lets you do Vim like control and behavior of it's a little bit like a little bit like links, but it's actual, actually Chrome, more or less, at least the Chrome runtime. So this one was sent in, I want to make sure I give him credit for giving a shout out. This was sent in to us by Martin Boris and it's, it's pretty
Starting point is 00:11:37 neat. So it's a browser. Let me switch up my screen share just for you for a sec. Stop. And then I'm going to add the Qt browser. You ready? Where is it? There. All right. So look at this bad boy. So this is the browser. And how do I go to places? Well, I can click on things like here's a link I can click on. But if I want to go somewhere, I press O and it pulls up a place I can open. Look at this. I got my history. I want to go to like, I'm going to go to TalkPython. If I want to do a command, I hit colon and here's all my commands.
Starting point is 00:12:10 I've like my tab, my GIF focus and control and so on. Over here I just type F. So if I want to, if I want to navigate, for example, I'm here on the TalkPython page.
Starting point is 00:12:21 What if I want to go to courses? I type F and then everything, see how everything gets a letter above it? Oh, that's pretty great. Yeah. So L, D, D,. What if I want to go to courses? I type F and then everything, see how everything gets a letter above it? Oh, that's pretty great. Yeah. So L, D, D, G. If I want to go to D, I just press D
Starting point is 00:12:30 and then we're off on the TalkPython training site and so on. So I could open, or I could say open, and then I could search for PyTest and it'll pull up my tests and so on. And I can do a new tab. I got to remember how to do that. Yeah, we're going to say tab clone. And I i come over here i know there's a bunch of good commands that i'm not following like very
Starting point is 00:12:50 much like if i was actually using vim yeah if i could search for pytas book i could come over here right like that and i can hit um is it control or windows uh control oh that's a good book yeah i heard that's a good book so i can like cycle through my tabs, see how minimal my tabs are and stuff there. Oh, yeah. It's in the bottom. It's got all these little commands. So anyway, I can type colon Q, boom, we're out. Nice.
Starting point is 00:13:12 What do you think of this? Yeah, what do you think of that? I actually love the Qt browser. I haven't used it much, but I definitely know about it because Florian Bruin, who started Qt Browser, he's a PyTest core contributor and also one of the technical reviewers
Starting point is 00:13:29 for the PyTest book. So really cool guy. But I love the idea of being able to just use a browser with a keyboard and not have to touch the mouse at all. That's like, that's next level. It's pretty neat. Yeah.
Starting point is 00:13:41 Yeah, let's see. Out in the audience, Kim Van Wyk. Hey, Kim. Says, I resigned myself to using a mouse more than I want to. QBrowser may be the way to go. Thanks for the tip. Awesome. Yeah.
Starting point is 00:13:51 And Alvaro says, are those VS Code shortcuts? I suppose only if you have the Vim bindings set in VS Code. But then, sort of, yes. Well, of course you do. Why wouldn't you? What are you, a monster? Can you even do Emacs bindings? I don't know.
Starting point is 00:14:09 You could do non-Vim bindings. Yeah, right. But then people would look down on you, right, Brian? I don't do Vim stuff in mine. I know that you probably do, though. Yeah, I use Vim everywhere, especially in VS Code. So, nice. But I think people should check it out.
Starting point is 00:14:26 It's kind of a cool project. And also it helped push forward some PyTest things. We got some new features because of this. Yeah, that's great. I installed it with Homebrew, so that was easy to install. You can install it with Apt on Linux. I'm not sure about Windows. But they've got a quick start guide, so you can follow along to see like you know what what you might want to
Starting point is 00:14:48 do like it's it's not super obvious no that cheat sheet cuts do is uh i have a eye chart e-binding it's a bit of an eye chart i suspect you consume it there you go it's still small it's still small but um yeah i do like like the navigation, pressing F and then just a letter to navigate instead of using your mouse to follow the links. That's pretty cool. Do you remember those templates that people used to have back in the day for office tools where they would overlay? You would put them, it was actually an overlay on your keyboard.
Starting point is 00:15:23 Yeah, it would go over the function the function keys to the so you can remember which functions did what during what application if you switch to word you put a different or probably word perfect at the time you put a different template over it and yeah yeah i'm gonna use lotus one two three give me the function key overlay yeah yeah okay yeah i'm just yeah just like that. It is showing how old I am. So let's talk about something new. Still teach that in college. Yeah. Although in college I had to, I had to teach, I was a, um, a TA for like a computers one-on-one class, but during grad school and links was one of the things we had to teach. And I was like, nobody's going to use this. Yeah. But it was part of the curriculum
Starting point is 00:16:05 incredible yeah so that's awesome anyway so let's uh switch to something new like async so um oh yeah uh i think we've talked about court probably several times uh and court is a it's like flask but it's async um it actually is the is the uh does the entire it supports the flask api or i think and sort of looks the same but it's async instead but there's a problem super close you can basically everywhere you have the word flask if you replace it with the word court it more or less works so like lower clay like import lowercase f flask you import lowercase court if you create an object capital f flask you use capital court and then. If you create an object capital F flask, you use capital court, and then it lets you do async basically.
Starting point is 00:16:53 Cool. But there's an ecosystem around both of them now. So there are extensions to flask. Some of them work on court. There's extensions to court. I don't know if any of those work on flask, but the people behind both of them kind of are supportive of the whole thing. And so port is actually now part of the pallets project was, is the big news. And pallets is the, the project that includes flask and a whole bunch of other stuff. But it, because of this,
Starting point is 00:17:28 it will help maybe the maintainers kind of work together a little bit better and smoother to iron this out. So the big difference, of course, is that Flask has a whiskey server behind it. Server, right word? And Cort is ASCII, so asynchronous. But this is cool. Well, why do we care a little bit is that it used to be that really you had to do async if you wanted async you had to do court but now flask as a flask 2.0 you do have some uh some async capabilities but it's still using a single threaded server so there's there are some limitations. So kind of interesting to read about this. There is a async and await age on the flask website that talks about really what
Starting point is 00:18:14 the trade-offs are, what the performance and the background tasks and how to do that within, without shifting to court, but then also talks about at some point you might want to just switch to court instead. Along this line is, I was thinking about this partly while I was looking at this other article from Steve Pate that called should you use async on your next Python web application, which I wanted to bring this up because I was curious about what your take on it
Starting point is 00:18:47 was. Well, the first part is it's a really nice history. It talks about the history of web server interfaces with Python, with, uh, with the timelines and, and whiskey and ASCII.
Starting point is 00:18:57 Um, and, and then how async IO came in into play and how, uh, you vehicle is popular and unicorn. I don't know how to say that. Um, I'm pretty sure it's G unicorn cause it's short for green unicorn.
Starting point is 00:19:15 Okay. So the last bit should still be pronounced unicorn. So I'm going to go with G. Okay. And then there's hyper corn, which is the asynchronous, uh, web server.
Starting point is 00:19:24 That's similar. Uh, anyway, so it talks about this, but then at the end, the conclusion, it talks about all the different frameworks. And the conclusion is most people don't need async on their web server. And I was curious what your reaction to this conclusion is. I have some thoughts, but let me pull up some first. Okay. So here's my thought. It depends. It depends on how far you need to push it towards the edge. I was surprised how far you can get without async in terms of concurrency. Okay. So I recently did an in-person class. Imagine that over Zoom, but live in person. I actually have some more to say about that. It's kind of related. But anyway, I just did a course with some folks who are doing fast API,
Starting point is 00:20:11 and they said, look, this async stuff that we're doing adds some complexity to the way that we got to write code. We're not sure whether or not there's a trade-off. So what we did is we actually ended up writing a fast API app with the the sync and the async version of sql alchemy and then using a sync and an async version of fast api endpoints okay okay with the database that we had as the back end and the database was not the limiting factor because it was at like 10 cpu while this was happening. It was just chilling. Yeah. But with a real database, Postgres as the backend, what we found was we could do, I can't remember this right.
Starting point is 00:20:51 Oh boy. I'll give you, I can certainly give you the relative bit. So with the synchronous version, we got way more scalability than we thought. So it was like 75% performance of the async version so that seems way higher because the database had like most of the things we were doing just waiting on the database but because we were running in g unicorn with uvicorn workers i was really just in g unicorn with threads you know python doesn't do threading well except when it's listening on a network socket or doing
Starting point is 00:21:23 a few other things that will release the gill. And guess what? When you're talking database, you're listening to network socket. So there's all these points that naturally free up the threading. And actually got us like 75% of the way there, but we still got 25 to 30% more performance
Starting point is 00:21:37 out of the async version. And it was like, I think it was five worker processes running on my eight core machine, talking to Postgres. And we were getting some like, I think it was five worker processes running on my eight core machine talking to Postgres. And we were getting some like, you know, like 2000 requests per second versus 1500 a second, or maybe it was 1000 1500, something like that was a lot of requests per second. But we did get more performance out of the async version. So my depends is like that last 25 are you like that close to your performance i would say 95 of the web apps are not maxed right they're not maxed out with like multiple servers trying to
Starting point is 00:22:12 deal with it all right 95 of servers are are doing important work but they're probably still have a lot of capacity left so it's like it depends are like are do you need that last 25 or does it not really matter yeah yeah and also uh like that's those are my thoughts what's the load like on your typical i mean what are your levels anyway right so um if you if you already have that like for instance if you already have an application running um you can measure it and see see what your load is looking like and how many people you have and then if you you, if you think, Oh, I might, I might increase my, what if we double, um, then you can kind of guess what your load's going to look like if you double and stuff. So interesting. Uh, yeah.
Starting point is 00:22:54 I recommend people check out this Locus thing because it's so easy to say a typical user clicks on the page between five and 15 seconds. They might go log in some of the time. They might go hit the homepage. They might hit the about. And then you can say, I would like to see how many users I can take. And if you're 10x what you need, you know, it doesn't matter whether you use async or not,
Starting point is 00:23:14 but there is a performance benefit. It's just not as massive as it might sound. The other bit that I want to like point out is the one statement that that like it depends on what you're using also like i can't can't find the the bit here but it he was talking about how um one application he had he was thinking about oh i might i might do async except for he was using a payment gateway that didn't have an async version so he had to use a synchronous for that and since it's synchronous
Starting point is 00:23:45 somewhere you kind of have is this true if it's synchronous somewhere you have to be synchronous everywhere or is that not really true you know if sorry say that if it's sync async it's async everywhere or sync it's sync everywhere uh either one is either one of those true if i like if i have a if i've got an application and and i do need to hit a gateway that's synchronous, do I need to, if I isolate it, I guess I can probably do asynchronous and hide it that way. Yeah, I mean, you just don't get as good a scalability there and you kind of block up the processing if you do the sync. For the async one, you can do like a wrapper where you say like, we're going to do some async work, but I'm just going to call that and block because all the other stuff above it doesn't want to deal with being async. Yeah. So it's easier to go from sync to async to like have part of it be async.
Starting point is 00:24:34 The other way around is a little more tricky. It can mess it up a bit. Okay, cool. Yeah. Nice. Interesting conversation. Thanks a lot. Absolutely.
Starting point is 00:24:42 It sure is. Is that it? Is that all of our items? Are we? I think. Is that all of our items are we i think that all of our items i think so yeah yeah what you got any extras for us i don't no okay i have some let me uh let me pull them up here locus look let me tell you about it now it's great all right no i have three things i want to tell people about number one is i did a talk at python web conference the htmx and flask one that i've done in some other places but that was a fun talk like a 45 minute flask plus htmx goodness there and so that video
Starting point is 00:25:13 along with all the other um python web conf 2022 talks are now on youtube so people can check that out cool did you know that um the python web conference had five days and i think it was like four or five tracks all day so there are a ton of videos there's like 150 videos or something on there i mean look at this scroll bar here it's probably gonna like um page as i get to the bottom too yep you look at that so there's a lot of talks that people can come check out if they're interested in that that's one of them being htmx that i did yeah i want to i want to watch your talk you've given that a couple times have you yeah yeah i've gave it a couple times basically the way it worked is like when i was working on that course and really like playing with those ideas i submitted to a bunch of conferences and
Starting point is 00:25:57 those conferences were either a year out or they were like a month out or something right that's how they ended up so spread out but the other one is i mentioned the the browser that was fun but how about the browser asaurus okay a mac os only tool but there's probably something like it for the others so here's the thing suppose i'm in um typora which is a markdown editor or i'm in a powerpoint and it's got a link and i click it by default it opens in the default browser. But depending on what you're doing, you might want it to be like, oh, sometimes I wanted to open in Vivaldi, but other times I wanted to open in like, say the Qt browser or Orion or some odd thing like that. Right. So the idea with this thing is that you click a link and when it opens
Starting point is 00:26:40 up, instead of opening in the default browser, the browser asaurus is the default. And then you have keyboard shortcuts like F for Firefox, E for Edge, S for Safari. And you say, well, which one do you want to open in right now? And it basically just delegates to the different browsers you register it with. So you can hit T for Tor or F for Firefox when you click a link. That's kind of cool, right? That is pretty cool. Yeah. I haven't been convinced that I would use that or or not but um i do do appreciate and i i feel like maybe someone sent that in and
Starting point is 00:27:10 if they did i really appreciate it but uh yeah i don't have any notes who sent it in so anyway that's pretty cool if you if you find yourself you know copy link going to different browsers a lot and you're on mac i know that's like a a small a rapidly decreasing vin diagram but if you're in that space this might be a cool option for you yeah um was it written with anyway typescript on mac i know that's like a a small a rapidly decreasing vin diagram but if you're in that space this might be a cool option for you yeah um was it written with anyway typescript mostly okay so speaking of browsers i just found this because i was like is links dead can i use something like links now and there's there's a there's a browser called browse which is a text based browser so that's still a thing cool i had to try this out oh my gosh i love it that it
Starting point is 00:27:47 kind of has text but it it like eight bit pixelated yeah it takes the images as pictures but it kind of it takes the images and makes them look like what you would get yeah so i'll have to give this a try yeah and you've run it in docker of course you do all right pretty. Pretty cool. All right. Oh, let's yeah. Go ahead. One more before we get to our joke. Okay. The other one is I talked about doing a live class. So I actually have an announcement for a live class that I'm doing. So obviously people know I have a bunch of online courses and of course I'm going to keep, I'm already working on the next one of those and we've got a bunch coming there, but I want to try some experiments, some, something where people can, um, attend a class in person with other people, right. If they, um,
Starting point is 00:28:32 sort of help each other along. And I've tried this before this cohort thing, but I think I've got a better platform, a better way to do it. So over at, um, so link I'm going to put in the show notes, I'm doing a fast API and MongoDB. So basically fast API, PyTantic, Beanie and MongoDB course that is going to be a four day, six day course over two weeks. And it has a couple hours a day. And I have a bunch of people there
Starting point is 00:28:58 working together on some fun stuff. And I'll be live teaching every session. So it's going to be like a live course as if you were attending it in person, just remotely because it's 2022 and it's not, I guess it's not post COVID all the way. But anyway, it's got a really cool set of topics that we cover.
Starting point is 00:29:17 It talks about Async. It talks about Mongo, Beanie, Pydandic, FastAPI, of course. We even use Locus at the end to test it out. I think this would be fun. This looks great. Cool. Yeah, awesome.
Starting point is 00:29:30 I think it'll be fun too. I think it'll be neat to have this experience with people. And I've tried this before, but all my prior attempts were, they were good, I think, but they were like, yeah, take the online course and then we'll do like a community type thing.
Starting point is 00:29:41 This is like a live course that I'm just teaching one off for that group of people that sign up. So we'll see how that goes. If it goes really well and people love it, then I'll do more of these. If not, then maybe less of them. I don't know. We'll see how it goes, but this is happening August 8th to 19th. So it has a real date because it has a real live aspect to it. Nice. Cool. All right. And Mario on the audience says, that's my stack right there. Oh yeah, that's a good stack right there. There's some really good stuff to talk about there. I've been using Beanie and FastAPI for stuff
Starting point is 00:30:12 and obviously Mongo. Yeah. Speaking of courses, one question out there, how's the PyTest course going? It is going. It's creeping forward, but life has gotten in the way. And we'll get it out. It's awesome that you're having, yeah, it's awesome that you're working on that.
Starting point is 00:30:30 It takes a while to create a course, doesn't it? Longer than I thought. I'm like, man, I already wrote the book. I can totally pop a course out like a couple of days. Of course. Would you say that like as a junior developer, you might think about this differently than after somebody has been doing it for a while? Yeah. I just, this cracked me up. So I can't remember. It's a great joke you got here. On somebody shared on Twitter. Sorry, I can't, I don't know who, but okay. So in a job interview,
Starting point is 00:30:56 you've got somebody gets asked, where do you see yourself in five years? And the junior developer in this interview question, like shows a picture of like, you know, the black hoodie with multiple screens and light up keyboard. Just, hey, I'm in hacker zone. Five screens. Yeah. Totally coding. Yeah. Senior developer, where do you see yourself in five years?
Starting point is 00:31:18 On a farm. Pumpkin farming with cows and apples. And you know what? I'm about done. love it yeah i my my personal thoughts are why not both this is just a view of the inside his office and then outside working from home man that's right working from home yeah all right i have uh maybe the one that preceded that the one that or maybe is in between these two that might precipitate the second. Okay.
Starting point is 00:31:46 All right. So this is a tweet from Programming Humor. It's a strange language, that JS. JavaScript is such a strange language. Nobody can understand it, but if they manage to, then they create their own framework.
Starting point is 00:31:58 Yes. Everyone's got their JavaScript front-end framework or something like that. Yeah. And you know you've made it when the framework you've invented starts showing up on job requirements.
Starting point is 00:32:10 That's right. With four years experience when it's only two years old. Exactly. Yeah. Well, good episode, Michael. Thanks for showing up again. You bet.
Starting point is 00:32:21 Fun as always. Thanks, everybody. See you later. In the Slack and everything. Bye. Later.

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