Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book


Transcript #372: uv - an impressive pip alternative

Return to episode page view on github
Recorded on Tuesday, Feb 20, 2024.

00:00 - Hello, and welcome to Python Bytes, where we deliver Python news and headlines

00:03 directly to your earbuds.

00:05 This is episode 372, recorded February 20th, 2024.

00:10 And I'm Michael Kennedy.

00:12 - And I'm Brian Okken.

00:13 - This episode is brought to you by Scout APM.

00:17 Super psyched to have them supporting the show.

00:19 So we'll tell you more about them later, but please check them out.

00:22 The link is in the podcast player show notes or on the website.

00:25 If you are one of the lucky ones, Brian, who is attending this live, they got here by going to pythonbytes.fm/live,

00:32 crushing the bell, saying get notified.

00:35 They got notified when this comes on, when it's scheduled.

00:37 And here they are.

00:39 For those of you who are just listening, we super appreciate that anyway.

00:42 So, however you're listening, thank you, thank you.

00:44 Connect with us over on Mastodon, we're on Fossodon, @brianocken, @mkennedy,

00:49 and @pythonbytes.

00:51 Brian, before we jump into the news, and before I forget, I just wanna make a quick announcement.

00:56 I will be at PyCon Philippines starting, I leave tomorrow at, I fly from Portland to San Francisco

01:04 at 8 p.m., and then I leave San Francisco at midnight.

01:07 So who knows what state I'm gonna be in, but I'm pretty sure with the time zone change

01:12 and the travels and all this, there's not gonna be a Python Bytes next week.

01:15 So we're gonna be probably skipping next week, which is a good chance for people to catch up

01:19 if they fell behind.

01:21 - Yeah, and also I'm jealous, and I hope you have a great time.

01:24 - Thank you very much.

01:25 I'm gonna have a great time.

01:26 I worked, was writing the keynote speech yesterday, and it's gonna be good.

01:31 It's coming together nicely.

01:32 So it's always nerve-wracking.

01:34 I don't know how, what is your way of working on talks and stuff?

01:39 Like I wanna be prepared, and I'm the kind of person that would get prepared

01:42 a month or two months early, but then if I write the stuff and then put it away

01:46 and then come back to it, I've kind of lost the inspiration and the nuances and the details.

01:50 So I don't wanna write it too soon, but I also don't wanna wait 'til the last minute.

01:53 So there's this weird trade-off, I feel.

01:56 I, mostly I try, I usually try to cover too much stuff in talks, so I try to narrow it down.

02:02 And then, yeah, I practice the heck out of it.

02:04 The ones where some talks, I like am fiddling with the slides too much until like five minutes beforehand,

02:10 and that goes terribly.

02:11 So I, yeah, I like to do it early in practice.

02:15 - All right, well, over to you.

02:17 I know you have a big announcement.

02:19 - Yeah. - I heard you're coming in first.

02:21 Yeah, you are, okay.

02:22 - Am I first?

02:23 Yeah.

02:24 I'm pretty excited.

02:25 The folks at Astral, including Charlie Marsh and others, have released UV, a Python packaging,

02:34 it's Python packaging in Rust, and it's not another packaging tool.

02:40 It is the Python end.

02:42 So like replacing, this is actually incredible.

02:46 It's replacing Pip, pip tools and Virtualamp all in one new Rust-driven tool.

02:53 Their announcement said maybe UV represents a milestone in our pursuit of cargo for Python,

03:01 comprehensive Python project and package manager that's fast, reliable, and easy to use.

03:07 They're also kind of, it's interesting, combined in this announcement is that they're taking,

03:13 Astral is taking stewardship of Armin Roenicker's Rai tool.

03:17 That's an experimental tool.

03:18 So I'm not sure what that has to do with this, but I don't know, it's interesting.

03:22 But have you given this a try yet?

03:26 - Oh, yes.

03:27 I am so psyched about this.

03:29 Charlie and team, congratulations, 'cause this is setting the world on fire

03:33 in a lot of interesting ways.

03:35 So I, you know, Charlie aimed this right at like my style of programming and working with Python dependencies

03:44 and projects.

03:45 So on one hand we have just the pip, pip-free side, right?

03:48 And then on the other, you've got the poetry and other pip-inf where you've got like some other API

03:56 that kind of manages everything.

03:58 And I want some of the benefits of that, but I want it to be just a simple requirement.txt

04:03 or something like that in the end, right?

04:05 - Yeah.

04:05 - And so I use pip tools and pip tools will go and say, okay, what do you say you actually need?

04:10 And then let's build out what would be into the virtual environment after that.

04:14 And it's great, but you know, the command pip compile, like for mine, I don't know how long it takes,

04:19 probably 15 seconds to pip compile, update the list of things for Talk Python Training.

04:25 I think there's 250 dependencies in the dev version.

04:29 It's out of control.

04:30 And it just takes a real, real long time with this instant.

04:34 And it's just so good.

04:36 They have some benchmarks up there and it's like pip sync versus UV.

04:41 pip sync is like 60 milliseconds versus almost five seconds, right?

04:46 Those are different types.

04:47 It's, it just happens versus you, like, okay, hold on, it's working.

04:51 You know what I mean?

04:52 - Yeah.

04:53 - And what's really pretty interesting is that it looks like it's gotten a lot of,

04:58 it's not necessarily that it's just because it's written in rough, rough, rust,

05:04 reading rough as I'm saying that, not just that it's written in rust, which it happens to be,

05:08 'cause that's the vibe of Astral, right?

05:11 Starting with the rough stuff, but that they've maybe unlocked some different algorithms

05:17 or techniques or something like that, where even if it were in Python, it would be faster,

05:21 which is pretty interesting.

05:22 - Yeah, there's some caching that they've done and of like site-wide caching and keeping,

05:28 also keeping pip actually makes sense to have some of this stuff, virtualenv and pip outside of the Python tool chain system

05:36 so that because you're gonna want it in each virtual environment, so having it installed outside is kind of interesting.

05:43 So yeah, I'm pretty, it's super fast.

05:47 The hope is to be API compatible or at least interface compatible.

05:54 It's in the, they just don't have all of the features yet.

05:58 So, but like, I don't mean to say that it's not worth trying already.

06:03 It is production ready right now.

06:04 And that's what they're, they've tested the heck out of it.

06:07 It's just that you have to like work with your workflow to make sure that you work with it.

06:12 So I was amusingly trying it out yesterday and ran into like three things right away that,

06:19 or two things that didn't work.

06:21 So I did, tried to use the --prompt to have virtualenv just create my virtual environment

06:28 with the same name and prompt isn't supported yet, but it is, I went to file a defect and it was already fixed.

06:34 It just hasn't been released yet.

06:35 So, you know, probably by the time you listen to this, it's probably been released and it'll work.

06:40 - They're doing a lot of releases, aren't they?

06:41 - Yeah, there's been seven releases in four days.

06:44 It's incredible and a really responsive team.

06:46 A lot of people are trying it out though.

06:48 So yeah, I'm glad they're responsive 'cause there's a bunch of issues people are working on.

06:54 It's really fun to watch.

06:55 The other thing was, oh, oh, so virtual environments work really fast.

07:01 It's like so fast.

07:03 And the resolver actually is something we don't really talk about too much,

07:07 but the resolver, like you said, when you're pip installing something, if you have like a requirements file,

07:12 you got a bunch of projects in it or a bunch of things you're pulling in, dependencies,

07:16 they might have conflicting dependencies or not really conflicting, but the rules are such

07:22 that you have to pick the right dependency so that it matches both tools.

07:26 That's all done and it's super fast.

07:28 I'm really impressed with how this thing is.

07:31 And apparently everybody else is too because almost immediately after the announcement.

07:39 So look at all these contributors.

07:40 We've got 32 contributors already.

07:42 These are not just people at Astral.

07:45 Like I know that Brett is not there.

07:48 So TOX has already announced that there is a TOX-UV plugin so that you can have TOX act faster too

07:58 and use UV for virtual and for pip also.

08:02 That makes it faster.

08:04 I think that's, and I'm sure there's more tools to come that support, will support UV out of the box.

08:10 - Yeah, awesome.

08:11 I'm super excited, but I have a bunch of aliases for my shell that I almost never type pip,

08:17 you know, Python dash MV.

08:19 Like I, unless I'm doing like some presentation where I'm not sure that people would know

08:24 what the heck's going on.

08:25 So I'll just type VNV and that will do the magic or when activated environments AE

08:30 or, you know, I want to install the requirements, I'll say PR, right.

08:33 I rewrote all of those to move from using pip to using UV.

08:37 And it's basically like the same workflow for me, just better.

08:40 - Well, one of the things that I do a lot is to just see what's in my virtual environment

08:45 is do a pip list.

08:48 And that's not supported yet either.

08:49 But freeze is, and list is coming.

08:53 You know, but so just use free.

08:56 - I didn't actually, just for some reason, I think there's like a 50/50 split of people

09:01 that use generally pip freeze over lists.

09:04 What are you a freeze person or a list person?

09:06 - I'm a list person these days, but that's because, yeah, because I don't use pip freeze to generate

09:12 like the requirements.txt, I use pip compile.

09:15 - Right, but pip freeze will just like list out which, what things you have installed and what versions.

09:21 - Yeah, yeah.

09:21 - And that's what I want list for.

09:23 So I don't know why I use list, but anyway.

09:26 - Yeah, that's true.

09:27 - Pretty fun.

09:27 - Yeah, okay, a couple of pieces of real-time follow-up.

09:31 First of all, Ofek Lev from Hatch says, "The next minor release of Hatch will have an option

09:36 "to use UV under the hood instead of pip and virtual ENV." Hooray!

09:40 - Yeah.

09:41 - I love Hatch, I've been doing like, doing a lot of stuff with Hatch lately

09:44 and it's really, really nice.

09:45 So Ofek, you're killing it, keep it up, very nice.

09:48 And you mentioned talks, Henry Schreiner, who I see some comments from him out there as well,

09:54 says, "With the Knox back-in, using UV in the Knox back-in, "it drops the time taken to build the docs

10:02 "from 22 seconds to four seconds." So, you know, that's, you know, it's not like 22 seconds is gonna change the world at all

10:10 if they just didn't take 22 seconds to build the docs.

10:13 But the faster these things get, the more willing you're just like, to do them more iteratively and, you know,

10:18 get tight in that feedback loop and stuff like that.

10:20 So, like for example, with Ruff, you know, and PyCharm, now you can just check the box, like,

10:26 run Ruff onto this project when I hit save.

10:30 You know, if it took five seconds to do that, you would never check that.

10:33 That would not even be a box you could check, right?

10:35 - Yeah.

10:35 - But, because it's so fast.

10:37 So, hopefully I'm not missing anything else from folks out there, but this stuff is,

10:41 this stuff's really neat and I am super excited.

10:43 I would love if some of the things they learned from this could be brought back into standard PIP,

10:49 just to make standard pip faster too, that would still be cool.

10:51 - Yeah, and this, I guess that brings up a side question, is really how much energy there's gonna be around

10:59 supporting the other tools that are getting replaced by things that Astral's building.

11:04 But there's, yeah, anyway, we'll have that conversation later maybe.

11:08 (laughs)

11:10 - Yeah, Opec agrees with you that much of the speed up comes from the way they're doing caching.

11:14 Very, very nice.

11:15 So, you know, people check this out.

11:17 It's been a few days and it's, things are going fast in this space, so.

11:21 - Yeah. - Very, very exciting.

11:22 Let's go on to the next topic.

11:25 All right, Brian, Jupyter Notebooks have definitely taken over as a really interesting way

11:31 for creating, writing Python code, visualizing Python code, sharing it, communicating with it.

11:36 And obviously, Will McGugan's work with Rich and then on from there, Textual

11:42 is doing amazing stuff too, right?

11:44 - Yeah.

11:45 - What if those came together, like peanut butter and jelly or whatever it is

11:49 that you put together that goes together well?

11:51 - So David-- - Peanut butter and chocolate, man.

11:52 - Yes, okay, sorry, Reese's Pieces, I got it.

11:54 - Okay.

11:55 - David Brochart says, "I just published my first blog post, which is," we go over here, "JP Term,

12:04 "Jupyter in the Terminal built on Textual and Rich." - Yeah, baby. - How cool is that?

12:09 - That's great. - Yeah, that's.

12:11 There's a bunch of terminal fun stuff that's based on this, on Textual and other things that we could cover,

12:17 but this is what I'm covering today.

12:18 I'll save the other for next time.

12:20 So Jupyter in the Terminal, and it says, well, basically David says, "Look, the terminal is the new browser

12:26 "in the sense that we all have a terminal, "and if we write to this, it's kind of a simple,

12:32 "cool UI that everybody already has, "so you can just plug stuff into it,

12:36 "largely because of all the work "that they've done over at Textualize "with Textual and Rich and so on."

12:42 All right, so he said, "Look at all these widgets we already have." So there's a select widget,

12:47 and there's a whole bunch of others.

12:49 But if we view this, I'll open a new tab.

12:52 Maybe open image in a new tab.

12:56 Oh, it's downloading, hold on, because of course it is.

12:58 Open this up.

13:01 It's JupyterLab side-by-side with jpterm.

13:05 And check it out.

13:06 It's like you've got your cells, you've got your in-unit bracket, and quite similar, huh?

13:10 What do you think about this?

13:11 - That's incredible.

13:13 That's pretty cool.

13:13 - Yeah, so it's got, let me go back to the article here.

13:18 If you go down, it's got graphing.

13:20 It's got charts for it.

13:22 And he says basically one of the real similar things to compare it to might be JupyterLite,

13:27 because JupyterLite is a WebAssembly-based all front-end Jupyter, and this is client,

13:33 doesn't even need a server, right, because it just runs.

13:35 Although he does point out with Textual Web, realized, is a way to put this on the internet

13:42 and share it as well.

13:42 But here, look, here's a bunch of cool graphs over time in the terminal.

13:47 So this is a super early, almost a proof of concept, even has images, which is interesting.

13:52 (David laughs)

13:53 - That's terrible, though, don't do that.

13:55 - They're bad, yeah.

13:56 Like, if you long for like Commodore 64 days, you got something in store for you.

14:03 But you can see it's quite new.

14:06 It's just been created like four months ago and just announced, I think, pretty recently.

14:11 So people go check this out.

14:14 David is, I think, a Jupyter core dev, or at least a contributor over there.

14:19 So yeah, interesting to see where this goes.

14:22 - Yeah, let's see, cool.

14:24 You know what else is cool?

14:25 - Our sponsor.

14:26 - Yes.

14:27 - Indeed, indeed they are.

14:29 So let me tell you real quick about Doubt APM.

14:33 They're big supporters of Python Bytes, so we appreciate that very much.

14:36 So if you are tired of spending hours trying to find the root cause of issues

14:41 impacting your performance, then you owe it to yourself to check out Scout APM.

14:45 They're a leading Python application performance monitoring tool, APM, that helps you identify and solve

14:52 performance abnormalities faster and easier.

14:54 Scout APM ties bottlenecks such as memory leaks, slow database queries, background jobs,

14:59 and the dreaded N+1 queries that you can end up if you do lazy loading in your ORM,

15:05 and then you say, "Oh no, why is it so slow?

15:07 "Why are you doing 200 database queries "for what should be one?" So you can find out things like that.

15:11 And it links it back directly to source code, so you can spend less time in the debugger

15:15 and healing logs and just finding the problems and moving on.

15:19 And you'll love it because it's built for developers by developers.

15:22 It makes it easy to get set up.

15:23 Seriously, you can do it in less than four minutes, so that's awesome.

15:27 And the best part is the pricing is straightforward.

15:30 You only pay for the data that you use with no hidden overage fees or per seat pricing.

15:35 And I just learned this, Brian, they also have, they provide the pro version for free

15:41 to all open source projects.

15:42 So if you're an open source maintainer and you want to have Scout APM for that project,

15:47 just shoot them a message or something on their pricing page about that.

15:50 So you can start your free trial and get instant insights today.

15:54 Visit pythonbytes.fm/scout.

15:57 The link is in your podcast player show notes as well.

15:59 And please use that link.

16:00 Don't just search for them because otherwise, they don't think you came from us.

16:04 And then they'd stop supporting the show.

16:06 So please use our link, pythonbytes.fm/scout.

16:08 Check them out.

16:09 It really supports the show.

16:11 - Awesome.

16:12 - Yeah.

16:13 All right, over to you.

16:14 What's next?

16:15 - I've got a little topic.

16:16 Martin Hines wrote a blog post called Everything You Can Do with the Python's Text Wrap Module.

16:24 And I love the Text Wrap Module.

16:26 And I think that more people, I think a lot of people just forget about it.

16:29 But it's very useful.

16:30 - Yeah, Brian, do you have that feeling where like you've spent half a day

16:33 implementing some algorithm, then you're like, oh, that was a function I could have just called?

16:36 - Yeah, exactly.

16:38 Text Wrap is that.

16:39 Yeah.

16:39 And every time I come back to it, I'm like, oh, I'm still using stuff that I shouldn't.

16:45 So it's a pretty short article.

16:49 Go through a few of the features of Text Wrap.

16:51 First off, it's shortened.

16:52 So if you wanna make a piece of text shorter, you can use shorten.

16:59 And it's cool because it also does a placeholder thing.

17:01 So it'll put like dot, dot, dots, and brackets or something, or whatever placeholder you want to say,

17:08 there's more text there.

17:10 It's just, we've cut it off.

17:11 And it looks really nice.

17:14 Easy to use.

17:15 You just call it.

17:16 It's just a function.

17:17 But then there's Wrap, which seems obvious, but can do word wrapping.

17:23 So you can split a long chunk of text into multiple lines, but you can also do it.

17:29 One of the things I like here is this is, said, well, yes, of course you can use it

17:35 for splitting long lines into different multiple lines, but also even if you're not gonna print it like that,

17:41 it's very useful if you're gonna batch work on text, you can split a big chunk of text into small

17:50 or even size batches to work on those.

17:53 That's a pretty cool use case for that.

17:55 I like it.

17:56 There is, there's even, you can specify drop whitespace keyword for that.

18:01 That's pretty cool.

18:02 I didn't know about that.

18:03 Neat.

18:04 There's a class also.

18:06 So a lot of the stuff you can do with TextWrap, you can do within an object.

18:12 So there's a TextWrapper class that you can create a TextWrapper object and do a whole bunch of work with that multiple times

18:19 and only specify it once in the constructor.

18:21 Very cool.

18:22 And then at the bottom, last but not least, is my favorite use of TextWrap is ddent.

18:28 So ddent will take, like, if you've got a multi-line string and it's in your code,

18:35 so it's all like off, you know, it's indented with the rest of your code,

18:40 that multi-line will have a whole bunch of extra, like, extra whitespace on the left,

18:44 and you don't really want that when you're actually using it.

18:47 And ddent will take out those extra left whitespace.

18:52 And that, I love that.

18:53 And this seems like a weird thing to have built in, but I use it a whole bunch of times,

19:00 often in writing tests, because I've got a multi-line string that I wanna compare to some output,

19:06 and I don't want it at the global level, I want it, you know, in my test function.

19:11 So I can just do that and use ddent to get it back to.

19:15 - Right, 'cause it would look weird, left-aligned inside of an indented function, right?

19:19 - Yeah.

19:20 So, I mean, you can, it just looks ugly, so.

19:23 - Yeah, you just, you lose the flow of where it belongs.

19:26 Yeah. - Yeah.

19:27 So TextWrap, it's there, it's fun, use it.

19:31 - You already have it.

19:32 It's in Python.

19:33 - Yeah. - Yeah, very nice.

19:34 All right, let's talk about some design principles for the web here.

19:39 This is not exactly Python, but it certainly links back to some cool things in Python.

19:45 And it's this place I ran across called html-burst.com, right?

19:50 And the idea is, there seems to be some fatigue, like, you know how in JavaScript, it used to be so easy,

19:55 you would include a script, or if you were doing something super small, you maybe would just say script tag,

20:01 and you would write a bit of JavaScript right in the page, and then you'd carry on,

20:04 you're like, oh, that was easy, look, that just worked.

20:05 And then it said, oh, well, now we're gonna put it over on this other place, no, we wanna like minify it,

20:11 and also we're gonna shake it down to only include the parts that we use,

20:14 and we'll do the same for the CSS.

20:16 And then you need this build step, and then we're gonna compile it from TypeScript

20:20 to JavaScript, and then shake it down to not include this, like, what?

20:24 And then you're gonna, you know, include it with import, export it with node, you're just like, what is,

20:29 why is this so hard?

20:31 Why are there so many steps to this thing that used to be so easy, right?

20:34 And so this is kind of like, can we just not have that as like the default way of working already?

20:40 So HTML, we'll get to HTML, HTML first is a set of guidelines for making it easier, faster,

20:47 and more maintainable to build web software by leveraging the default capabilities of modern browsers.

20:53 I learned something I didn't know from here that I used to do with JavaScript

20:55 that I will never do again if I don't have to, so awesome.

20:59 And then the extreme simplicity of HTML's attribute syntax and, you know, keeping the view source alive, right?

21:05 Used to be able to go to the website, like, how did they do that?

21:07 That's cool, view source.

21:08 Now it's just like one tiny line of like a bunch of stuff that triggers JavaScript stuff, you know, like, oh, well.

21:13 - Or how did they do that?

21:15 Oh, it's a bunch of divs.

21:17 - Yes, exactly.

21:18 And so the goal is, you know, try to widen the pool of people who enjoy web development.

21:24 Also, you can make it less expensive for your company because it's just less complex.

21:30 So it's not just, you know, dev yells at the cloud because people are making it hard, right?

21:36 Screams it into the sky, but some practices, right?

21:39 So there's some examples, prefer vanilla approaches.

21:43 And so, for example, did you know, you could say details, summary, and then stuff below it.

21:48 And if you click the summary, it'll expand the thing below it.

21:51 No JavaScript.

21:53 I didn't either.

21:53 - No JavaScript?

21:54 Wow.

21:55 - Yeah, how about that?

21:56 And then, so they have a encouraged versus discouraged.

22:00 And here's like import React, user state from React, create a details component, which is an arrow function,

22:06 which returns a constant of things and toggling the content.

22:11 And then you on click, you like, then you export the detail.

22:15 This is the import export I was railing against, right?

22:18 So that's one.

22:19 Prefer just, if you can do it as basic HTML or even basic JavaScript, like don't go over the top.

22:24 And where possible, practice two.

22:26 Where possible, define, default to defining styles and behaviors with inline attributes,

22:31 with things like Tailwind or Tacheons.

22:34 And you can use libraries like Hyperscript and Alpine.

22:36 And it says you're, yes, it does mean your HTML gets a little bit busier,

22:40 but you don't have to go to three places to figure out what's happening.

22:44 So for example, it says encouraged, button on click, this.classlist.add background green.

22:50 Discouraged, you have a results pane that says click me.

22:53 And then you have a CSS section that actually what happens when you do that,

22:57 changes the color to green.

22:58 Then you have some JavaScript that gets it.

22:59 And then when it's done, you set the class, which then goes back to CSS.

23:04 And these are usually mushed all over the place.

23:06 And you're like, what is happening, right?

23:08 And it says, you'll notice the separation of concerns is kind of not so much awesome here.

23:14 However, you should maybe consider the locality of behavior more than you should worry about separation concerns.

23:20 And HTMX, Carson Gores has a nice essay on this.

23:24 Like, yes, you might repeat yourself sometimes, but right there, you see everything that's happening

23:28 instead of having it so spread out, right?

23:30 - Yeah.

23:31 - All right, next, go ahead, Brian.

23:33 - I just wanted to comment.

23:34 One of the things that I like about this sort of model is that I'm frequently learning like new web frameworks.

23:41 Like I'm working on learning Django and, you know, FastAPI and others.

23:48 And a lot of times it's templating that I'm working on and to understand how it's gonna get output,

23:54 keeping the templates simple in like mostly HTML helps with discoverability and learning something new.

24:02 So even if it isn't like a production thing later, but it might be, starting out simple

24:09 really helps the learning process.

24:11 - Yeah, oh, absolutely.

24:12 And you also have to learn fewer things, right?

24:14 - Yeah.

24:15 - You have to learn three other frameworks and build tools and so on.

24:17 - All right, another one is about try to use libraries.

24:21 If you gotta use libraries, try to use ones that leverage HTML attributes

24:24 over JavaScript and custom attributes.

24:26 Like HTMX is a real nice example of that.

24:30 To say disfavor build steps.

24:32 So encourage the ability to say stylesheet/styles.css.

24:37 Discourage, distribute, output, NPX, CSS, compile with a watch and then don't forget to run that.

24:45 And then why is this not updating?

24:46 You know, all these different things.

24:47 And then finally, this one, I think the HTMX is really relevant to Python folks,

24:53 but also this one, their example is Ruby, but it just as well could be any,

24:58 the WTF forms, is that what it is?

25:00 I think it is.

25:01 The form builder type stuff.

25:03 You see a lot of that actually in Django.

25:05 It says prefer naked HTML to obfuscation layers that compile down to HTML.

25:09 So you know, just, you got a form, just write the form, put the values in it.

25:13 Instead of, you know, form with, and then form like label for this, form text field for that part of the model and so on.

25:20 Right?

25:21 So anyway, and finally preserve some, some view source for us all, because it'll help everyone.

25:26 But anyway, I like this and I, you know, it's interesting to think of as a philosophy.

25:32 - Yeah.

25:32 - The build steps, they also reference like, a whole bunch of people, how it used to be completely like,

25:38 oh, you're such a noob if you want to skip having like a bunch of build tools along the way,

25:42 but references for different articles and places where people are writing about like,

25:46 you know what, we're done with this build stuff.

25:48 We're just writing CSS.

25:49 We're just writing JavaScript.

25:50 We're going to go with that.

25:51 So anyway, pretty, pretty well backed up some of these ideas.

25:55 - Nice.

25:55 - And that's all of our main items.

25:57 You can see there are tabs left for me.

25:59 So that means I must have extras, but what about you?

26:01 - I do have extras.

26:02 Do you want to go through yours since they're up?

26:04 Or do you want to?

26:05 - Sure, let's do it.

26:06 All right.

26:06 So first of all, Vincent Warmerdum says, hey, a new PI data location, Pittsburgh.

26:13 So there's a call for proposals at PI data, Pittsburgh.

26:17 Let's see, when is it?

26:18 Hopefully it's not over.

26:20 So yeah, so if you want to speak, if you're in the general Pittsburgh area,

26:24 or you want to be, then check out PI data, Pittsburgh and go submit some talks there.

26:29 It, let's see when this is going to be, shortly, April.

26:32 - Okay.

26:33 - April 11th, I guess.

26:34 Anyway, check it out and you can submit a talk there.

26:37 That's pretty cool.

26:38 Just want to bring out one more example.

26:40 You know, Ryan, I riff on, or I rip on the ad space and I say, look, we should run ad blockers.

26:49 We should not support these people.

26:52 And I know some folks are out there like, well, but then you're not supporting creators.

26:55 You're not supporting the small folks who have Google ads on their site or whatever.

27:00 And I don't know, I just, I think the trade-off is not really worth it.

27:04 So I just want to point out one more example of like terrible stuff that's happening.

27:07 So our own Oregon Senator Ron Wyden is starting an investigation because a data broker

27:14 who gets data from, you know, all these different sources like ad retargeting stuff,

27:20 used abortion clinic visitor location data because their endpoints were not blocked

27:26 by some sort of DNS block or something.

27:29 - Wow.

27:30 - To help send targeted misinformation to vulnerable women.

27:33 How terrible, right?

27:34 - Yeah, awful.

27:36 - So I think we all should just stand up to, stand up to the, like the retargeting, remarketing,

27:42 like we don't have to.

27:44 - That has nothing to do with trying to make money for content creators.

27:48 - Yeah, I know.

27:49 Except for that the data flows into these shady places, right?

27:53 And then they, you know, they already have it.

27:55 So instead of trying to sell them shoes, like let's do something terrible like that.

27:59 So, yeah.

28:00 All right, anyway, next DNS.io folks.

28:03 Okay.

28:04 So for proposals is also open for a very close nearby SciPy 2024, which is awesome.

28:12 This will be in Tacoma, Brian, just a short hop and a skip up I-5 North from us.

28:19 - That'd be fun.

28:19 - Yeah, so July 8th to 14th.

28:22 I wish I could make it, but I am already tied up hanging around the house.

28:27 My wife is traveling for work at that time and somebody has to stay with the dog and the kid.

28:33 So I'm not going to this.

28:34 - I have a feeling that's the same timeframe as Oregon Country Fair.

28:37 So I probably can't either.

28:39 - Yeah, but anyway, there's a lot of people out there who can and a call for proposals are out,

28:44 but you must act.

28:46 You must act.

28:47 Soon you have exactly seven days to get this ish, depending on when you listen.

28:51 But as I speak, you have about seven days to get your talk proposal in.

28:54 So please go do that.

28:56 - All right, February 27th is that end time.

28:59 Okay.

29:00 A handful of topics.

29:02 pytest 8.01, 8.0.1 is out.

29:07 And why is this important?

29:09 One, it's the first bug fix since 8.0 came out and it has the bug that bugged me.

29:15 So there was a regression where if you parameterization would go backwards for some reason.

29:23 - Yeah, we talked about that before.

29:25 That's cool.

29:25 - So that's fixed.

29:27 So I've got it updated to 8.01 everywhere I'm using pytest.

29:32 Okay, next, if you'd like to understand dependency injection, Hinnick has a new video out,

29:41 loose coupling and dependency injection, the easy way.

29:44 And I really like the dude and I like what he's doing up on YouTube.

29:48 So that's fun.

29:50 Plus, dependency injection is not as complicated as it sounds and he'll show you.

29:56 But I freaked out the first time that people were like, "Oh, fixtures, they're kind of like dependency injection."

30:02 I'm like, "I don't know what you're talking about." - They are kind of like dependency injection, indeed.

30:06 - Yeah, I had a guest, Nicole, on Python Test recently.

30:11 This hasn't been aired yet, but when we were talking about something completely different and I mentioned all of the Rust

30:19 that's coming into Python community.

30:21 And I said, "But I mean, I wanna try to learn Rust, but I don't have a lot of time."

30:27 And she said, "Oh, we had the same problem at work." So I wrote a tutorial.

30:31 So there's a yar.fyi, yar is yet another Rust resource, but the idea-- - Pirate friendly.

30:39 - Yeah, pirate friendly. - Yar.

30:41 - It's a Rust tutorial, but intended for people that already know how to program, they just don't know Rust.

30:49 And so I'm kind of excited to jump into that.

30:53 Okay, what else?

30:54 Oh, yeah, I'm looking for trying to ramp up interviews for Python people.

30:59 So if there's just some interesting stuff around the Python community that you'd like me to talk to,

31:05 or if you'd like me to talk to you, reach out.

31:08 And the first episode was Michael Kennedy.

31:10 It was a good episode, but there's only been 12 episodes so far, but I wanna get more out.

31:15 And then the last thing I wanted to know, there's an interesting thing, phenomenon out there.

31:23 Did you know that there's people still using X?

31:26 - Yes, I've seen them.

31:29 There are many of them over there, actually.

31:31 - I am officially following zero people just to like as a protest.

31:38 I don't really, I show up there about once a month to check my direct messages.

31:43 So if you wanna contact me, I will probably reply to you eventually, but just warning, I'm not there very often.

31:50 - Indeed, indeed.

31:52 Awesome, well, a bunch of great items.

31:54 How about we talk about some unfortunate architectural or vendor-based decisions as part of our joke here.

32:01 You ready?

32:02 Have you seen this joke?

32:03 Did you look ahead?

32:04 - I have not looked ahead.

32:05 I don't know what you're talking about.

32:05 - Beautiful, all right.

32:06 You ready?

32:07 - Yeah. - Do the joke.

32:08 So here we are.

32:09 I got this over on Reddit, and of course I zoomed it in.

32:14 So why are we using SAP again when there's this open source thing that is so much simpler?

32:20 Or why are we using Oracle again for this?

32:22 Because whatever.

32:24 So there's an angry team lead or something.

32:26 Why did we end up with a solution?

32:28 A couple of people are like, "Cool savings, time savings maybe." And then someone like a hipster looking dude in the back

32:34 is like, "The vendor sent me a Yeti Tumbler." (both laughing)

32:37 So they grab him and throw him out the window.

32:39 Why are we stuck with this crappy system?

32:43 It's like whatever.

32:44 Well, it's conference swag basically.

32:47 - Yeah.

32:49 I think the real answer is usually the best options were all free and we needed to have to pay somebody.

32:57 - Yeah, that's true.

32:58 That's true.

33:00 None of them had an SLA, but it's like, but--

33:02 - Do you have a Yeti Tumbler?

33:04 - I have one of these like soft Yeti coolers that we'll take when we go out camping

33:10 or boating or something, but I don't have a Tumbler now, I don't believe so.

33:13 You?

33:14 - I had to look it up.

33:15 I didn't even know what this was, but--

33:16 - Oh yeah.

33:17 This is like the Roll, Yeti is like the Rolls Royce of like hillbilly land, I guess.

33:24 They're like super, super nice coolers.

33:29 - If you want a thermos for your coffee, but you don't wanna spend $10, you wanna spend $40, get a Yeti.

33:36 - Yeah, yeah.

33:37 We have a lot of Yeti stuff actually.

33:39 It's really nice.

33:39 I'm just joking.

33:40 - Bougie.

33:41 - What if stuff got warm, Brian?

33:44 What if it got warm?

33:45 What if your beer got a little bit warm and your mountains and your cores,

33:49 they weren't blue anymore.

33:50 They turned whatever color they're not when they're not blue, whatever color they are when they're not blue.

33:55 You know what I'm talking about?

33:56 Like the world of Coors beer cans has a can that when it's like a certain temperature,

33:59 the mountains on the can turn blue.

34:02 And if it's like too warm, they like turn white or something.

34:05 I don't know what other color.

34:06 - Okay, so--

34:06 - This is a very serious problem.

34:07 - We had a couple options.

34:08 We could have made better beer or a better can.

34:11 We chose a better can.

34:12 - What do you see when you're shopping?

34:13 Come on now.

34:14 (laughing)

34:16 - Awesome.

34:17 - Yeah.

34:17 - Okay.

34:18 - Yeah.

34:19 - Fun as always.

34:20 Thank you for being here and thank you everyone for listening.

Back to show page