Brian Okken: Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
Brian Okken: This is episode 457, and it's being recorded on November 11th, 2025.
Brian Okken: And I'm Brian Okken.
Michael Kennedy: And I'm Michael Kennedy.
Brian Okken: Wow, nowhere. Oh, it's 11-11. It's corduroy day. I totally forgot to wear corduroy today.
Michael Kennedy: I love it. Is that because the vertical stripes?
Michael Kennedy: Yeah, yeah.
Michael Kennedy: Vertical grooves.
Michael Kennedy: Yeah, yeah. I love it. I have no corduroy on either. We missed the opportunity.
Brian Okken: some stripes on your, it's not corduroy, but your sweater.
Michael Kennedy: Yeah, almost a sweater, almost pulled it off.
Brian Okken: Anyway, we'd like to thank everybody that supports us through going to
Brian Okken: doing Talk Python training or the pytest course,
Brian Okken: Patreon supporters or people that have bought our books.
Brian Okken: We really, really appreciate all of the support and it keeps us going.
Brian Okken: Also love to hear from people on Bluesky, on Mastodon and through email.
Brian Okken: So you can go to the contact us on pythonbytes.fm.
Brian Okken: And there's the links to all the Bluesky Mastermind,
Brian Okken: all those things to get all of us.
Brian Okken: We actually have a couple items today from listeners.
Brian Okken: So feel free to send us things.
Brian Okken: If you'd like to join the show live,
Brian Okken: and even if it's on a weird time like this week,
Brian Okken: you can find out when it's going to happen next
Brian Okken: by going to pythonbytes.fm/live.
Brian Okken: And, you know, jump on and talk with us while we're recording.
Brian Okken: It's fun.
Brian Okken: Also, you don't need to take notes because we're going to send you all the links.
Brian Okken: Well, they're in the show notes, but we'll also send them directly to your inbox if you
Brian Okken: sign up to be a friend of the show and go to pythonbytes.fm and sign up for the newsletter.
Brian Okken: I think that's all of the stuff.
Brian Okken: So let's jump into the first item, Michael.
Michael Kennedy: Let's talk about it now.
Michael Kennedy: I want to talk about something called HTTP tap at HTTP tap.dev. Now this one, it's a little bit
Michael Kennedy: like HTTP pi, HTTP pi, I don't know how you really pronounce that correctly, which is my go to
Michael Kennedy: anytime I need to test something on the terminal or that sort of thing. HTTP pi is because, you know,
Michael Kennedy: it's like curl or whatever, but it gives you lots more stats, gives you more information. And this,
Michael Kennedy: This is a little bit like that.
Michael Kennedy: If you wanted to go into, say, your Chrome DevTools or something
Michael Kennedy: and say, "Hey, I'm requesting this page or this URL
Michael Kennedy: or this API endpoint.
Michael Kennedy: It's a little bit slow.
Michael Kennedy: It's a little bit funky.
Michael Kennedy: What's going on?
Michael Kennedy: Where's the problem?"
Michael Kennedy: - Yeah. - If it's getting hung up,
Michael Kennedy: is it connecting to the server
Michael Kennedy: or is it the backend app server, like Grinny
Michael Kennedy: and whoever is not responding?
Michael Kennedy: So that's what this is all about.
Michael Kennedy: And it's built, I believe it's built with rich or textual.
Michael Kennedy: I can't remember how far down the Will McGugan train it goes,
Michael Kennedy: but it definitely is built on some of those.
Michael Kennedy: Built with Python,
Michael Kennedy: although that's not necessarily that important, right?
Michael Kennedy: It's just I guess it's easier to make improvements to,
Michael Kennedy: but it's more just a tool that anyone doing web stuff
Michael Kennedy: with Python might be interested in.
Michael Kennedy: And I pulled up a little example of just asking Talk Python,
Michael Kennedy: acptptap, then talkpython.fm,
Michael Kennedy: and it says, here's the analysis.
Michael Kennedy: And apparently there's only one step,
Michael Kennedy: maybe if there were redirects or something,
Michael Kennedy: It would show multi-stage flows, but there's no redirects, so there's not.
Michael Kennedy: It shows you the IP address, the TLS version, the cipher,
Michael Kennedy: when the certificate expires, the status, the size, the server.
Michael Kennedy: It gets all of that stuff right, which is pretty cool.
Michael Kennedy: Then it has this waterfall-tiered sort of diagram.
Michael Kennedy: It says the request timeline.
Michael Kennedy: It took 29 milliseconds for DNS to figure out where the heck that was.
Michael Kennedy: I've been on vacation. I haven't been going to the website.
Michael Kennedy: So I had to go get it from the internet.
Michael Kennedy: And then it took 80 milliseconds to connect to the server.
Michael Kennedy: By the way, it's about 80 milliseconds ping time.
Michael Kennedy: So you got to keep that in mind when all these numbers, right?
Michael Kennedy: Like that's East Coast, West Coast, US, 2,500 miles.
Michael Kennedy: So connect 80 milliseconds.
Michael Kennedy: TLS took 130 milliseconds.
Michael Kennedy: So if you ever see your browser doing like keep alive type of stuff,
Michael Kennedy: that's a big savings right there.
Michael Kennedy: That's almost 200 milliseconds savings
Michael Kennedy: if it doesn't have to keep doing that over and over, right?
Michael Kennedy: So that's pretty nice.
Michael Kennedy: And then you can see it's actually sending the request and waiting for the response.
Michael Kennedy: So it goes out, comes back, takes 170 milliseconds.
Michael Kennedy: Again, ping time in there as well.
Michael Kennedy: And then the transfer is a whopping 4.3 milliseconds.
Michael Kennedy: So this is pretty cool.
Michael Kennedy: A really quick view of just seeing what's going on, right, Brian?
Brian Okken: Yeah, actually, I love that.
Brian Okken: Very useful, especially if you've got some lag issues or some part of your website that's a little slow.
Brian Okken: you can look at what's going on.
Brian Okken: Is it DNS?
Brian Okken: Is it the transfer?
Brian Okken: Where's this delay coming from?
Brian Okken: I mean, it's not super fine-grained,
Brian Okken: but this is pretty good.
Michael Kennedy: Yeah, well, there's just, yeah, for sure.
Michael Kennedy: And there's a lot of stuff involved, right?
Michael Kennedy: There's, like you said,
Michael Kennedy: the DNS might be taking forever,
Michael Kennedy: which could be part of the problem,
Michael Kennedy: or who knows, right?
Michael Kennedy: There's just a lot of things.
Michael Kennedy: So really neat to see this little UI built in Python.
Brian Okken: Yeah, and I guess we have to say it.
Brian Okken: It's always DNS.
Brian Okken: I mean, that's...
Brian Okken: It's not always DNS, but yeah.
Brian Okken: Anyway.
Michael Kennedy: Yeah, but often.
Brian Okken: Often.
Brian Okken: No, I think this is great.
Brian Okken: This is cool.
Brian Okken: I've got actually some side projects
Brian Okken: that I've got some weird speed issues,
Brian Okken: and I don't know why.
Brian Okken: And even just looking at some of this stuff,
Brian Okken: help out to figure out where to start debugging.
Michael Kennedy: Yeah, you can get some of these types of things
Michael Kennedy: in the dev tools and browsers,
Michael Kennedy: but this is really nice.
Michael Kennedy: It's visual, it's colorful, it's graphical.
Brian Okken: I love it.
Brian Okken: I like it.
Brian Okken: And it's command line.
Brian Okken: Yay, we love command line.
Brian Okken: Yay.
Brian Okken: Okay.
Brian Okken: I'm not usually, I have to admit, I click on listicles all the time.
Brian Okken: But we don't cover very many listicles on the show, but I'm going to cover one today.
Brian Okken: I actually, oh, my aspect ratio is off.
Brian Okken: There we go.
Brian Okken: Here we go.
Brian Okken: This is from PyCharm.
Brian Okken: It's actually from Evgenia Verbena.
Brian Okken: That's a cool name.
Brian Okken: 10 smart performance hacks for faster Python code.
Brian Okken: And there's some that, well, actually, I think stuff like this is really good to talk to people about
Brian Okken: because we don't really think about performance too much.
Brian Okken: I mean, when you're starting Python, you don't think about it too much.
Brian Okken: It's hopefully, you know, hopefully you don't.
Brian Okken: There's, we don't want people to prematurely optimize.
Brian Okken: But there's just some habits that maybe are decent to get into that avoid problems later on.
Brian Okken: And so that's one of the reasons why I like going through this.
Brian Okken: Oh, nice menu on the right side, also with all the hacks on the right.
Brian Okken: Anyway, the first one, not too surprising if you've done through any leak code stuff or whatever,
Brian Okken: is leverage set for membership testing.
Brian Okken: So if you've got a big list, you can throw the list into a set,
Brian Okken: and then you can find out easily if something's in the list by putting it in a set.
Brian Okken: And oddly, that speeds things up quite a bit, like drastically.
Brian Okken: List lookup versus set lookup is super fast.
Michael Kennedy: Same predictionaries, too.
Michael Kennedy: If you're looking up by some kind of key, either one, it's ridiculous.
Brian Okken: Yeah.
Brian Okken: Like I said, some not too surprising.
Brian Okken: Slots are great if you're going to use classes or data classes even.
Brian Okken: If it's not going to grow over time, you can define slots and stuff.
Brian Okken: And then the lookup for each element within a data class is a lot faster with slots.
Brian Okken: I want to jump around because there were some that I didn't really realize
Brian Okken: or I just didn't think about before.
Brian Okken: And one of them is use math functions instead of operators.
Brian Okken: and I guess I wouldn't
Brian Okken: some of these are weird
Brian Okken: so math.square
Brian Okken: sqrt for square root
Brian Okken: is faster and more accurate
Brian Okken: than raising a number to the power of
Brian Okken: 0.5 using
Brian Okken: exponentation operator
Brian Okken: I wouldn't do that anyway because that's weird
Brian Okken: it just looks weird
Brian Okken: I don't know, bad code style
Brian Okken: but there's a whole bunch of others
Brian Okken: similarly the sine function exponent
Brian Okken: log, those are really fast operators
Brian Okken: in math so go ahead and utilize math and uh so that's a good pointer pre-allocate memory
Brian Okken: with known sizes now this is some like an old trick that i think that i didn't really think
Brian Okken: that it was a huge difference and it looks like one of the things that's it's cool in this article
Brian Okken: it does the pre-allocated time versus or the uh before and after times so there's a bit of
Brian Okken: you know uh 0.01 second speed up um but so the trick is just to uh i guess have an array with
Brian Okken: If you're going to fill an array anyway,
Brian Okken: may as well just fill it with some zeros or something initially.
Brian Okken: And then it seems like a waste of time to fill it with zeros
Brian Okken: because you're going to fill everything up.
Brian Okken: But it isn't because it's the allocation that takes a little bit longer
Brian Okken: than the filling it with zeros.
Michael Kennedy: Yeah, and Brian, it's worth thinking through how that goes a little bit
Michael Kennedy: because if you just go append, append, append,
Michael Kennedy: and this is something I don't do and it's inspiring me to consider,
Michael Kennedy: well, maybe I should.
Michael Kennedy: But the array doesn't know if you're going to put a million items in there.
Michael Kennedy: Every time you do like a array.append or list.append, it doesn't go, guess what?
Michael Kennedy: We're going to add a million, right?
Michael Kennedy: It's like, well, what about 16?
Michael Kennedy: What about 32 of them?
Michael Kennedy: Oh, now we need more.
Michael Kennedy: Okay, what about 64 of them?
Michael Kennedy: You know, it just, it has to keep reallocating and copying as you build this up.
Michael Kennedy: So, yeah.
Brian Okken: And I don't remember how, I mean, it's a little smarter than that.
Brian Okken: So I think it like does, like doubles it in size or takes a chunk.
Brian Okken: I can't remember what it does.
Michael Kennedy: Yeah, it's not allocating every one, right?
Michael Kennedy: It's got an awkward.
Michael Kennedy: Right.
Michael Kennedy: Or heuristic.
Brian Okken: But if you already know how big it's going to be,
Brian Okken: you can just tell it to do it once, which is cool.
Brian Okken: But I don't really think about that too much.
Brian Okken: A couple of the ones down below I really wanted to cover.
Brian Okken: This was avoid exception handling and hot loops.
Brian Okken: And I am guilty of this too,
Brian Okken: because I try to have my exception handling
Brian Okken: as close to the place where it can go wrong as possible.
Brian Okken: Just as it's a visual thing
Brian Okken: and a code readability thing to have this tight.
Brian Okken: have the try right around it.
Brian Okken: Like the example has a zero division error,
Brian Okken: has the try and accept right there.
Brian Okken: However, that might slow down a little bit.
Brian Okken: And it did, in this case,
Brian Okken: was the try and accept on this one.
Brian Okken: It's just not there.
Michael Kennedy: I think the top one versus the bottom one.
Michael Kennedy: Yeah, but there's no try and accept at the top.
Michael Kennedy: That's the baseline.
Michael Kennedy: Oh, okay.
Michael Kennedy: The conditional check versus.
Michael Kennedy: It's like checking for the condition
Michael Kennedy: that would cause the exception to avoid the exception.
Brian Okken: Oh, OK.
Brian Okken: I guess I would just put the try and accept at the top
Brian Okken: or around the larger one as a better comparison.
Brian Okken: Anyway.
Brian Okken: Yeah, I agree.
Brian Okken: But this is a big one.
Brian Okken: But that's a big one.
Brian Okken: Then we get into some really, except there's exception handling,
Brian Okken: using iter tools for combinatorial operations.
Brian Okken: And this is huge.
Brian Okken: If you're working with chunks of lists or chunks of stuff,
Brian Okken: using iter tools and knowing what's in there,
Brian Okken: it speeds up a huge amount.
Brian Okken: So using iter tools versus loops for,
Brian Okken: I forget what the example is here,
Brian Okken: but the speed up is using product
Brian Okken: and the speed up is massive from, you know,
Brian Okken: like what, 440 times bigger or something?
Brian Okken: Or 4 divided by, oh, 5 divided by 20.
Brian Okken: That's 4.
Brian Okken: So it's 4 times speed up.
Brian Okken: Math is hard.
Brian Okken: BISect is also a great thing to look at.
Brian Okken: And yeah, anyway, just some cool, wow, that's a massive speedup, 100 times speedup for using
Brian Okken: BISect in the right places.
Brian Okken: So finding out places where you can use BISect or iter tools and just knowing that those
Brian Okken: are there to look them up, those are good speedups.
Brian Okken: Anyway, occasionally it's good to think about how fast is my code going?
Michael Kennedy: You know, I think we could summarize up that article by basically saying, know the standard
Michael Kennedy: know your data structures, mostly.
Michael Kennedy: Yeah.
Michael Kennedy: Use DICT, use Zitter Tools, et cetera.
Brian Okken: And the standard library is still pretty big.
Brian Okken: I would probably limit that to the standard library
Brian Okken: that manipulates data structures.
Michael Kennedy: Yeah, it kind of intersects with data structures.
Brian Okken: Yeah, I guess that's kind of what I was getting at.
Michael Kennedy: And by the way, this was written by Dito Grigorov
Michael Kennedy: and posted by Uvigena.
Michael Kennedy: Oh, okay.
Michael Kennedy: Just want to make sure Dito gets a little credit for writing it.
Brian Okken: Thanks for that clarification.
Michael Kennedy: Yeah, no worries.
Michael Kennedy: - It's tricky, I think it's 'cause the way
Michael Kennedy: the JetBrains CMS works.
Michael Kennedy: Yeah, so cool, cool.
Michael Kennedy: Well, maybe we should, Brian,
Michael Kennedy: maybe we should talk to him about it.
Michael Kennedy: Put him up on a little video call, you know what I mean?
Michael Kennedy: What do you think?
Michael Kennedy: Do a little WebRTC?
Michael Kennedy: - I've kind of forgot about RTC.
Michael Kennedy: - I know, but you and I are sitting here,
Michael Kennedy: people don't necessarily know how we're doing this.
Michael Kennedy: It's magic, we basically, you and I, we speak through magic,
Michael Kennedy: but some of that magic is WebRTC
Michael Kennedy: because all of this is recording, streaming, et cetera,
Michael Kennedy: video and voice, multiple channels, multiple screens,
Michael Kennedy: and so on over WebRTC in the browser, which is ridiculous.
Michael Kennedy: It's just ridiculous that this works.
Michael Kennedy: So I want to talk about a library from Freddie Bolton,
Michael Kennedy: who is behind the Gradio project, Gradio, Gradio,
Michael Kennedy: Gradio project, and I had him on Talk Python
Michael Kennedy: a couple of years ago, and this is called FastRTC.
Michael Kennedy: So kind of like, hey, I'm a fan of integrating with FastAPI,
Michael Kennedy: and I want to do WebRTC.
Michael Kennedy: It's kind of ridiculous how simple some of these things are.
Michael Kennedy: So it's pretty popular.
Michael Kennedy: It's got 4,000 GitHub stars, 400 forks.
Michael Kennedy: It's been around for a while.
Michael Kennedy: Freddie pointed this out to me a decent while ago,
Michael Kennedy: and I finally ain't getting around to talking about it.
Michael Kennedy: But it's quite neat.
Michael Kennedy: There's a little video you can watch about how to do it,
Michael Kennedy: but it's got some examples for you.
Michael Kennedy: Like if you want to do an Echo Audio,
Michael Kennedy: which is kind of a sadistic example, you know what I mean?
Michael Kennedy: Because that's usually the worst thing about a video meeting,
Michael Kennedy: is the echo.
Michael Kennedy: But if you want to listen to yourself echo back
Michael Kennedy: just to prove that it's going round and round,
Michael Kennedy: then how many lines is that?
Michael Kennedy: I mean, there's a huge comma in there,
Michael Kennedy: but if you take out the comma
Michael Kennedy: and you format it a little bit wider,
Michael Kennedy: it's probably five lines of code to set up a server,
Michael Kennedy: connect to it, and echo back.
Michael Kennedy: Like, that's insane.
Michael Kennedy: Insane.
Michael Kennedy: And there's also ways to set up LLM voice chat if you care about that.
Michael Kennedy: You know, that's obviously the thing du jour is I want to talk to my LLM.
Michael Kennedy: But, you know, you could do that pretty easily, pretty quickly here.
Michael Kennedy: But also just stream your webcam back or object detection.
Michael Kennedy: It's just like a handful of lines of code.
Michael Kennedy: It's insane.
Michael Kennedy: But this stuff seems so complicated, doesn't it, Brian?
Michael Kennedy: It's cool.
Brian Okken: You're wrapping stuff up in a library.
Michael Kennedy: Yeah.
Michael Kennedy: So it comes with automatic voice detection, turn-taking built-in, which is interesting.
Michael Kennedy: It's got a UI to launch it in built-in Gradio UI, if you want to do that.
Michael Kennedy: I believe that's probably JavaScript.
Michael Kennedy: Automatic Web RTC support.
Michael Kennedy: So mount it onto a FastAPI app and get a Web RTC endpoint for your own front end.
Michael Kennedy: So you can kind of go Gradio or you can go this way.
Michael Kennedy: It's got WebSocket support.
Michael Kennedy: Listen to this.
Michael Kennedy: Automatic telephone support.
Michael Kennedy: use FastPhone on the string and get your own temporary phone number.
Brian Okken: Actually, that's pretty cool.
Michael Kennedy: Yeah.
Michael Kennedy: So, yeah, there's a lot of stuff going on here.
Michael Kennedy: It says you can easily be mounted on your own FastAPI app
Michael Kennedy: and customize it entirely,
Michael Kennedy: extend it to fit within your production app,
Michael Kennedy: I guess, assuming that's a FastAPI app.
Michael Kennedy: Although you could certainly squeeze it in using, like,
Michael Kennedy: Nginx routes to make it look like one app,
Michael Kennedy: but it's not exactly the same back end and so on.
Michael Kennedy: So there's examples for that.
Michael Kennedy: Wow.
Michael Kennedy: Yeah, so I thought it was pretty cool.
Brian Okken: That's pretty neat.
Brian Okken: I interviewed somebody in like three years ago, 2012, about WebRTC.
Brian Okken: They wrote a book on it.
Brian Okken: Nice.
Brian Okken: I thought, like, I don't think I'd ever use that.
Brian Okken: But of course I use tools that use WebRTC all the time.
Brian Okken: So like you said, we're using it for.
Brian Okken: We're using it right now.
Michael Kennedy: And yeah, it's one of those things where it's like,
Michael Kennedy: I don't think I'll ever build one of those.
Michael Kennedy: And then you're like, oh, but what if I could do it for this project
Michael Kennedy: or something comes up or, you know, just knowing about it as a...
Michael Kennedy: I think it's...
Brian Okken: Yeah, and right now, like you said, with things like hooking up LLMs to, you know, some vibe coding.
Brian Okken: Yeah, exactly.
Brian Okken: I mean, no comment.
Brian Okken: No comment.
Brian Okken: Okay, so this is a listener suggestion, actually.
Brian Okken: Comes to us as a request from Nicholas Kersner.
Brian Okken: He said, hey, I'm using PipDepTree a lot lately.
Brian Okken: And it's pretty cool if you covered that.
Brian Okken: And I'm like, yeah, we covered it.
Brian Okken: But I looked it up.
Brian Okken: It was, I should have had the episode up.
Brian Okken: But we covered it in episode 17.
Brian Okken: That was what?
Brian Okken: 2017.
Brian Okken: So yeah, it was a minute ago that we've covered it.
Brian Okken: So it's totally fine to cover it again
Brian Okken: because there's been changes.
Brian Okken: So I did want to talk about both pip Deptree,
Brian Okken: but also I have been, I used pip Deptree for a long time,
Brian Okken: But now usually I use uv pip tree.
Brian Okken: And so I just decided to write an article on it just to,
Brian Okken: because I wanted to show some code examples.
Brian Okken: One of the cool things I did not know that pip dep tree did.
Brian Okken: One of the things that I would always do is I'd have a project install pip dep tree.
Brian Okken: And what it does is when you run it,
Brian Okken: it looks at all the stuff you have installed and then shows, shows them.
Brian Okken: It's kind of like pip list, but it shows all the,
Brian Okken: it's like a tree structure and it shows them we're like in a tree structure with
Brian Okken: versions that are installed and it kind of it's extra information like the uh like if i'm using
Brian Okken: it from pyproject.toml i have an example of the cards project why it chose the particular version
Brian Okken: that's installed um so it's pretty handy but the i would always install it in the project and it
Brian Okken: would also tell me that pip dep tree is installed but the uh the trick is to install it somewhere
Brian Okken: globally like either uh using uh uvx pip dep tree or uv tool install pip dep tree and then you've
Brian Okken: got it just available to you always and and then you can use python auto and it the python auto flag
Brian Okken: will tell you um it will look in the current environment that you're in so um so then you can
Brian Okken: have it in global uh and then yeah and just look at whatever project you're in which is cool i didn't
Brian Okken: know it could do the auto thing too so i'm glad i looked that up the um but what i'm using usually
Brian Okken: is uv pip tree because it's already installed with uv and i have uv everywhere now by default i wanted
Brian Okken: to go through a couple flags that i um actually i just learned about this i i when i was i was
Brian Okken: comparing this beauty if you do uv pip tree it'll show you a tree structure but it only shows you
Brian Okken: the versions that are installed and it does do like for instance i'm showing cards and rich is showing
Brian Okken: up and it looks like it's in a couple places. Package tree already displayed. Oh yeah,
Brian Okken: because the cards project depends on rich, but it also depends on typer, which also depends on rich.
Brian Okken: So rich is duplicated and there's a little note that says that. There's a flag where you can turn
Brian Okken: it off, but I kind of like seeing the duplication. It's just to see who all is using something.
Brian Okken: Now, to get a similar look as pip dep tree, you can add show version specifiers and then it shows
Brian Okken: that it used to figure out what to install.
Brian Okken: But the new flag that I just learned about,
Brian Okken: which I'm super excited about,
Brian Okken: is --outdated.
Brian Okken: And this tells you,
Brian Okken: it tells you,
Brian Okken: it throws the latest up.
Brian Okken: It looks at all the things you got installed
Brian Okken: and tells you if there's newer ones.
Brian Okken: So you can go into your project
Brian Okken: and you can run UVPIP tree outdated
Brian Okken: and it'll tell you which ones you should maybe update.
Brian Okken: So it's pretty fun, both of those.
Michael Kennedy: So I like both tools.
Michael Kennedy: That's nice.
Michael Kennedy: I do as well.
Michael Kennedy: I've used pip dep tree for a long time.
Michael Kennedy: It's nice to just go, why is this here?
Michael Kennedy: Why is click installed?
Michael Kennedy: I don't remember installing click.
Michael Kennedy: It's fine, but I just don't remember installing it.
Michael Kennedy: But oh, it's Icy because I installed Typer,
Michael Kennedy: and I forgot that Typer is a wrapper on click.
Brian Okken: Yeah, and one of the things, for instance,
Brian Okken: I'm thinking about update like a hypothetical scenario.
Brian Okken: I've got Rich, or I've got on my cards application,
Brian Okken: I'm using rich, but maybe I'll try to tighten the dependencies by not using rich.
Brian Okken: But if I'm using typer, it's going to come in anyway.
Brian Okken: So I like to see the duplication because I'm not going to save anything if I don't depend on rich directly.
Brian Okken: It's already there because of typer.
Michael Kennedy: Yes, exactly.
Michael Kennedy: You're like, can I just get rid of this thing?
Michael Kennedy: You're like, nope.
Michael Kennedy: No.
Brian Okken: Not easily.
Michael Kennedy: Not directly anyway.
Brian Okken: Yeah.
Brian Okken: But if I got rid of typer also somehow and then I could get rid of rich.
Brian Okken: And maybe I'll redo the TinyDB too.
Brian Okken: Yeah.
Brian Okken: Anyway, tighten it up.
Brian Okken: All right.
Brian Okken: Those are, that's my items to talk about.
Brian Okken: Oh, I do have links to both PipTrapTree and uv treeRich.
Brian Okken: UV PipTreeRich also.
Brian Okken: Those are all different words.
Michael Kennedy: Nice.
Michael Kennedy: All right.
Michael Kennedy: Well, just keep going.
Michael Kennedy: You're the only one with extras today.
Brian Okken: Okay.
Brian Okken: I got a couple extras.
Brian Okken: I've got one of the benefits of working at the office,
Brian Okken: like the back to office thing is I was walking by one of my colleagues and he's got a bunch of
Brian Okken: colors up on his screen. And I'm like, what are those colors? And, and I use, use
Brian Okken: VS Code at work and the, and I've often got different projects up the same thing he's using.
Brian Okken: And I started using this just like last week, a thing called peacock. and what it does is it
Brian Okken: shows different colors around the outside of your, terminal and it only it's, or outside of your
Brian Okken: VS Code window, but the colors are picked and stored in the project or like the workspace.
Brian Okken: Yeah, the workspace.
Brian Okken: So that if you've got different projects open, they all have different colors.
Brian Okken: So when you're like, I want to go back to that window, you just have to remember which
Brian Okken: color goes to which project.
Brian Okken: And that's kind of up to you.
Brian Okken: But Brian, I'm often still this.
Brian Okken: I in even if you one of the cool things is I'm like, well, I chose green and it's a little
Brian Okken: too bright for me.
Brian Okken: I kind of wanted a darker green.
Brian Okken: It has built-in buttons to just go a little darker,
Brian Okken: a little darker, a little darker, or a little lighter.
Brian Okken: You can do custom, like pick your own color,
Brian Okken: but you can also say, this is close,
Brian Okken: but I'd like it a little darker.
Michael Kennedy: And I'm loving that.
Michael Kennedy: Yeah, and it's not incredibly popular,
Michael Kennedy: but it looks like it's from John Papa,
Michael Kennedy: who's been around in the tech space for a long time.
Michael Kennedy: So it seems trustworthy.
Brian Okken: Where do you see the popularity?
Brian Okken: Is it in here?
Brian Okken: It's the downloads.
Brian Okken: Oh, I take it back.
Michael Kennedy: I thought it was, it may have more than I initially,
Michael Kennedy: said it has three point basically four million downloads okay so actually there's a few downloads
Michael Kennedy: people like this idea oh i was looking at the um the open vsx marketplace which is like a similar
Brian Okken: but not the same uh the other update so one of the things i mentioned last week is that i'm writing
Brian Okken: a book again and um i just updated uh this last night i think last night there's um a chapter
Brian Okken: another chapter written so i gotta clean this up both versions are here but i did essential
Brian Okken: for successful software projects.
Brian Okken: I got that one up
Brian Okken: and I completely rewrote the introduction
Brian Okken: and I should stop doing that.
Brian Okken: An editor a long time ago told me,
Brian Okken: do a quick introduction
Brian Okken: and then leave it alone
Brian Okken: until you finish the book
Brian Okken: and then you can update it
Brian Okken: to be what the book actually is.
Brian Okken: And so I got to do that.
Michael Kennedy: A hundred percent.
Michael Kennedy: I think that's a great idea
Michael Kennedy: about the introduction.
Michael Kennedy: I do it with my courses.
Michael Kennedy: Sometimes I'll record the whole course
Michael Kennedy: and then I'll record the introduction
Michael Kennedy: because I'm like,
Michael Kennedy: I want to be able to say,
Michael Kennedy: and we're going to cover this
Michael Kennedy: in this section
Michael Kennedy: and then actually have that match.
Brian Okken: Yeah, but my brain won't let me go on
Brian Okken: if I don't write an introduction to start with.
Brian Okken: It's like, but I haven't done an introduction, man.
Brian Okken: And the essential components chapter,
Brian Okken: this was tough, man,
Brian Okken: because there's like,
Brian Okken: I needed it to be tight
Brian Okken: or I wanted it to be a tight chapter,
Brian Okken: but I rewrote it like five times
Brian Okken: because I had so many stories and stuff
Brian Okken: I wanted to throw in
Brian Okken: and I decided to take the stories out
Brian Okken: and leave those stories as blog posts later.
Brian Okken: But, oh, I guess the third extra,
Brian Okken: I don't have anything to show for this, but when I'm writing and I've got all this great stuff that I want to save, but I know it shouldn't be in this chapter or it shouldn't be in this blog post.
Brian Okken: I've decided for my editor, I've got a file called cut bucket, like CUT bucket.
Brian Okken: And I just put a divider line, put another title and paste the stuff I want to save there.
Brian Okken: And then I don't.
Brian Okken: And then my brain, it's a brain trick is I haven't thrown it away.
Brian Okken: It's there.
Brian Okken: You don't have to remember it and move on with writing.
Michael Kennedy: Yeah.
Michael Kennedy: Yeah, awesome.
Michael Kennedy: What's your editor that you're writing in?
Brian Okken: Like, do you have a markdown?
Michael Kennedy: What is the story?
Brian Okken: Oh, yeah, it's markdown in VS Code.
Brian Okken: And so the pytest book had tons of code snippets and everything.
Brian Okken: I think this is going to be a code snippet-free book.
Brian Okken: So that I can, the goal is to do an audio version later.
Brian Okken: And, you know, I might have some code snippets, but probably not.
Brian Okken: Actually, it's one of the things of reading the Tester of Development book
Brian Okken: from the old, the OG one from Kent Beck.
Brian Okken: It's all in Java, I think.
Brian Okken: And it's like too much.
Brian Okken: You're lucky it's not Smalltalk.
Brian Okken: Well, right.
Brian Okken: Maybe it is Smalltalk.
Brian Okken: I don't know.
Brian Okken: I think it's, I don't remember.
Brian Okken: But I just sort of scammed by the code snippets
Brian Okken: because I'm like, I don't care.
Brian Okken: I'm just like here for the concepts.
Brian Okken: So I'm trying to keep this book,
Brian Okken: the concepts and not the code
Brian Okken: because the code is different for everybody, man.
Michael Kennedy: Absolutely.
Michael Kennedy: Anyway.
Michael Kennedy: Love it.
Michael Kennedy: That's all I got.
Michael Kennedy: All right.
Michael Kennedy: Well, let's tell a joke then and close it out.
Michael Kennedy: Okay.
Michael Kennedy: I've done a few AI ones.
Michael Kennedy: It's not an AI joke, folks.
Michael Kennedy: So if you're tired of the AI jokes, well, then don't worry.
Michael Kennedy: This isn't a AI.
Michael Kennedy: This one is a joke about the future of Python and people being stuck in their ways or having
Michael Kennedy: assumptions about Python not being as fast as it could be or having limitations that it
Michael Kennedy: doesn't have anymore, theoretically, or semi-theoretically, whatever.
Michael Kennedy: And it's a woman in a walker, probably 70 or so, with the granddaughter helping her back to sit down or something.
Michael Kennedy: So I think I named, what did I name the project, the joke here?
Michael Kennedy: I think I called it, okay, Grandma, it's the joke.
Michael Kennedy: So, honey, do you know that the gil prevents multiple Python threads from executing parallel?
Michael Kennedy: Sure, Grandma, let's get you back to bed.
Michael Kennedy: a bit of a testament to python 314 and python t and free thread python and all that that'd be
Brian Okken: that's funny i can just like fast forward i can imagine like me 10 years from now telling the kids
Brian Okken: you know was that when i was a kid we had a GIL we had a one thread at a time
Michael Kennedy: your little whippersnappers don't know how good you got it my python used to just run
Michael Kennedy: interpreted and it was so slow we would debate whether it was fast enough
Michael Kennedy: uh yeah anyway that's what i got for a joke for us i like it
Brian Okken: yeah all right it worked for me i liked it so nice all right well uh thanks everybody for joining
Brian Okken: and listening and we love you all and um we'll talk to you next week yeah thanks brian thanks