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


Transcript #425: If You Were a Klingon Programmer

Return to episode page view on github
Recorded on Monday, Mar 24, 2025.

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:04 This is episode 425, recorded March 24th, 2025.

00:09 I am Brian Okken.

00:10 And I'm Michael Kennedy.

00:12 We are excited to announce that this episode is brought to you by Posit Connect.

00:16 Listen to their segment later in the show.

00:18 You can also connect with us.

00:20 And if you go to our show notes and visit all the links, we're on Blue Sky and Mastodon mostly lately.

00:28 And if you'd like to actually thank you for listening, but also if you'd like to watch us live, you can check us out at pythonbytes.fm/live.

00:38 Usually Mondays at 10 a.m., but it's spring break this week, so we're doing it a little early.

00:43 And then finally, if you'd like to have all the links that we talked about delivered plus extra information delivered right to your inbox, go to pythonbytes.fm and sign up for the newsletter.

00:56 We don't spam you.

00:57 We just send you the newsletter.

00:58 What do you got for us today, Michael?

01:01 I want to kick off with a Twitter thread of all things.

01:06 And this one's pretty interesting.

01:08 So Armin Roeneker, original creator of Flask, put out a question.

01:13 And it got a lot more attention than I would imagine it justified.

01:20 And I found it so simple.

01:23 And I just found it pretty interesting.

01:25 Okay.

01:25 The question is, if you use Python, but you don't use UV, why?

01:31 You don't use it yet, why?

01:33 Right?

01:33 So I got like 215 responses, almost 1,000 likes, things like that.

01:38 So I want to just call out some of, I'm not going to go read all 215 top level.

01:45 He says, I'm going to call out some of the ones that I thought were interesting.

01:48 And just get your thoughts, Brian, as well.

01:51 So for example, someone said, I'm not going to also give attributes because there's a bunch.

01:55 take forever. So someone said, I get it replaces pip in pi e and v, but should I use it instead of

02:02 the built-in Python dash m v and v, v and v, right? Yes. Yes, you should. Yes, yes, you should also

02:11 do that. The reason I'm calling this out, the reason I'm making this a topic is there were a

02:16 lot of, I think a lot of misconceptions or a lot of people are like, what's UV? So I think those

02:22 are worth touching on. So what are the awesome things about using UV, V, E, and V instead of

02:28 Python, V, E, and V is, well, what if you don't have Python? Python, V, and V will just say error,

02:35 no Python, right? UV says, oh, well, why don't we just get you the latest version of Python? Or you

02:40 can say 3.12 or 3.11 or whatever version you want, or a specific minor version, right? Or build version,

02:47 right? 3.13.1 instead of 3.13.2, whatever, right? So it frees you from even having to worry about

02:55 having Python set up. I got two new computers, Brian, two new computers. I got a new laptop and

02:59 a new Mac mini, and I have not installed Python on it. And I'm actually was a little bit bugged

03:05 when something I had to brew install installed Python. I'm like, darn it, you're messing up my

03:12 flow, right? I don't want any Python in here other than virtual environments. And I want those to be

03:16 managed by UV. And the thing is, it's two seconds. Like with Pi, E, and V, what it does is it

03:23 downloads and it builds locally, which if you don't have it can take 10 minutes or more. With UV,

03:28 it takes two seconds, right? It's a thing of beauty.

03:31 Well, I just ran into the build, a problem with the build recently, because if the, there's issues, especially on Windows,

03:40 when if you've got your dependencies mucked up somehow, it can cause you to have to recompile

03:46 some stuff and or try to recompile some stuff and and then you have to make sure they have the right

03:53 like compiler libraries on your computer and stuff like that so that's a mess.

03:57 Someone says but I need Python installed to make Python programs. I don't know yes but

04:02 oh it's the previous comment. But I mean it is installing it using UV to install like it isn't

04:08 installing it like you normally think but behind the scenes UV is putting it on your computer.

04:14 This is an interesting one. I want to hear your thoughts on this. I'm anti this only because of my workflow, not against the person who made the comment. Because I don't use it because it places the VE and V folder inside of your project. And I can't run executables from there due to corporate policy. Many such use cases. No idea why Astral doesn't address this with more urgency. Someone responded, that sounds like a bad corporate policy.

04:39 Also, it does. You can configure it to do that.

04:42 Yeah, exactly. There's an environment variable you can set, have it, put it in somewhere else.

04:46 Now, one of the things that made me never, ever adopt Conda is if you would go and create a Conda environment for a data science project, it puts it into some hidden folder, centralized hidden folder inside of your profile instead of inside your project.

05:01 So I would go to a project and I'm like, did I, you know, a couple of months later and be like, did I ever make a virtual environment for this? Maybe.

05:08 But then you got to say, Conda activate and name the virtual environment.

05:11 I'm like, what did I call it?

05:13 You know what I mean?

05:13 They're like, oh, drives me crazy.

05:15 And with it being inside the project folder, you can look, go, yep, there's a virtual environment there.

05:19 I'm good to go.

05:20 Same reason that I don't like calling mine.vnv.

05:24 I just leave it without the dot because I can quickly see in the finder or a regular LS or whatever that,

05:30 hey, look, it does have a virtual environment.

05:33 All right.

05:33 I'm too lazy to switch from Py, Env, and Pip.

05:37 It seems like a U problem.

05:40 There's lazy, like, I'm not going to walk two miles to the store.

05:43 And then there's, I can't be bothered to put the word UV space pip instead of pip in my command.

05:50 Well, and like, I'm lazy.

05:53 That's why I am using UV because it speeds up everything and I can get on with my day faster.

05:59 Yeah.

06:00 Matthew Rocklin of Dask and Coiled had a really interesting comment once on Talk Python that basically like,

06:06 So much in programming happens because we're leveraging the natural inclination for programmers to be lazy.

06:12 Set it up so they can do this, so they have to do less work, and we'll do it.

06:15 All right.

06:17 I'll keep going quicker now.

06:18 Trust issues.

06:19 What if they do a bait and switch, right?

06:20 It's VC-backed.

06:21 What if they go, oh, all of a sudden?

06:23 Two comments there.

06:24 One, it's open source, and I'm sure a lot of people have forked it.

06:27 Two, although there are still some potential issues, somebody's got to run the Python Build standalone for some of the features, but there's that.

06:35 And they've already said that they won't, right?

06:38 Charlie Marsh said, like, our business model does not hinge upon charging for UV.

06:44 It's kind of an open core model.

06:45 Okay, but Google used to say, don't be evil.

06:49 So, yeah.

06:49 Yeah, but Brian, I totally hear you.

06:53 But did you look, when they said it, like, around their back, they had their fingers crossed.

06:57 Look, I'm just telling you, you got to double check these things.

07:00 No, I'm just kidding.

07:01 I know they did.

07:02 Actually, yeah, when VCs get involved and it's all well and good when there's lots of money and things get tight, then it could potentially.

07:09 Well, and also we'll switch to something else then.

07:11 We'll switch to UV fairly quickly if it becomes bad.

07:15 We'll switch.

07:15 Yeah, we'll switch to VU.

07:17 So I have a reason, but when you run out of good reasons.

07:21 All right.

07:21 Another one, masochism.

07:23 I haven't switched yet because I'm masochistic.

07:26 Another one.

07:27 Many times I've tried similar tools and always come back to pip and pip-tools, aka pip compile.

07:33 Those, they just work.

07:34 I don't want something cool.

07:35 I know, but adding the word UV in front of each of these commands, like UV pip compile,

07:40 UV pip install, it's not a huge risk to roll that back.

07:45 Yeah, and we've tried the other ones also, and they were not as fun.

07:48 Exactly.

07:49 I tried this week and was expecting UV install requests instead of UV add.

07:54 And I brought this one up.

07:55 I switched back to pip envy.

07:56 I thought that was interesting because there's sort of two workflows with UV.

08:01 One says, treat it like poetry or hatch and let it manage your project.

08:06 And that's the UV add style, right?

08:08 It manages the lock file and so on.

08:10 They were expecting UV install requests.

08:12 If they typed UV pip install requests, they would have been carrying on with the regular workflow.

08:17 And I do think it's worth shouting out that there's like two unrelated workflows for projects.

08:23 And one is sort of the project manager poetry hatch style.

08:28 And one is the more low level pip style.

08:31 Yeah.

08:33 Yeah.

08:34 Okay.

08:35 But the UV is like you can kind of flow between the styles and it all just works.

08:40 Whereas in the other one, like you kind of had to buy into it or not.

08:45 Yeah.

08:46 It's all or nothing.

08:46 Yeah.

08:47 Another one really quick.

08:48 We partially use it.

08:49 We will transition when Pindabot support is available.

08:52 See previous comment.

08:53 If you say UV pip install and UV pip compile and use a requirements.txt file compiled by UV, you've got Dependabot support.

09:02 For me, Dependabot support is a net negative.

09:05 I hate Dependabot so much.

09:07 I've tried to turn it off on some of my projects and I can't get it turned off without turning off all the security features at GitHub.

09:13 So I've just had to set up mail rules that say delete anything from Dependabot that says bump.

09:19 Bump this thing.

09:19 Because I would wake up on Monday and I'd have probably 25, 30 separate messages from Dependabot saying,

09:26 hey, guess what?

09:27 You've got an update for this.

09:28 You've got an update for that.

09:29 I'm like, oh, Dependabot, please stop doing this.

09:32 And if they would just go, your project has 17 updates.

09:35 Okay.

09:35 That would be kind of helpful.

09:37 17 times your project has an update is not helpful.

09:39 That said, if you use UV space pip compile and require it's not TXC, you have Dependabot support.

09:45 All right.

09:45 Last thought, I'll leave it with this one from Jared Sheel.

09:47 seeing a whole lot of Stockholm syndrome in the replies to this question.

09:51 Okay.

09:52 Interesting.

09:53 A lot of people were sort of, you know, they were tied to the things that were not working well or they were tied to the things.

10:00 Well, this is how we do it.

10:01 And I know it sucks.

10:02 It's not better, but this is how we do it.

10:04 You know what I mean?

10:05 Yeah.

10:05 Yeah.

10:06 The one thing that I would like to, okay, there's a reason that you really get a lot of the benefit of UV

10:12 if you globally install it.

10:14 You do the curl install or something, right?

10:18 That is, and also using, letting it install Python for you.

10:24 With all the other Python dependencies, you can use your own custom, like a custom PyPI, like your own in-house PyPI.

10:34 With that part, the curl install and the installing the binaries, Python binaries, I don't know if you can do that.

10:42 So I think that that still might be a decent reason is because you're using a firewall in a company and that part isn't working right.

10:51 But you can still pip install UV and I have done time tests and it's still faster to use the use UV even if you pip install it.

10:59 So you just don't get all the benefits.

11:01 Yeah, absolutely.

11:02 Awesome.

11:03 Yeah.

11:03 Anyway, you got to already have a project.

11:05 You can't start.

11:06 You got to have Python.

11:06 You got to have a V and V and then then you go from there.

11:09 Yeah.

11:09 Anyway.

11:10 Which is fine because mostly that's what you're doing with life.

11:12 You're not like constantly creating a project.

11:14 I love our audience.

11:15 Henry Schreiner.

11:16 Hey, Henry.

11:17 Just shouted out, Dependabot just added support last week for UVLock.

11:22 How about that?

11:23 Do you know how out of date that Twitter thread is?

11:25 So last week.

11:27 So last week.

11:29 Well, and also a lot of the knowledgeable people probably didn't respond because it's on X.

11:34 Yeah, that's true.

11:35 Well, I mean, there's a surprising amount of interaction over there for what it is.

11:40 Okay.

11:41 Over to you.

11:41 Okay.

11:43 Let's talk about UV a little bit.

11:46 Okay.

11:46 We haven't done that yet.

11:49 So I want to talk about this cool project from Tim Hopper.

11:54 I love Tim.

11:55 I kind of miss seeing him.

11:57 He's one of the fellows that I used to run into at conferences all the time and haven't been to conferences lately.

12:02 So hi, Tim.

12:03 Anyway, he put out the Python developer tooling handbook.

12:08 And it's an in-progress thing, but he's been working on it for a while.

12:13 Yeah, Tim Hopper, great guy.

12:14 Anyway, the Python developer tooling handbook.

12:18 And it's walking through a lot of the, basically, the new models for doing things.

12:26 There's, I don't know, it says it, I guess he does comment on a lot of these things.

12:31 UV, Poetry, Flit, Subtools, Hatch.

12:35 But I was noticing right away he's doing tutorials and how-tos and explanations

12:41 and kind of a cool, and then some references and kind of a cool way to set up some documentation.

12:48 But like, let's say publish your first Python package or let's do a create your first Python project.

12:56 And instead of doing a lot of the history, he's just popping to you to the right answer.

13:01 It's UVANet.

13:03 And I mean, actually, a lot of the other init, like initializing projects, I haven't liked

13:09 before.

13:10 Even like the FLIT init, I didn't like.

13:12 But UVANet is pretty darn good.

13:15 They're doing a good job.

13:17 And anyway, so using and then adding dependencies.

13:21 And I love this, like, let's skip all the, well, you could do it nine different ways.

13:25 Just tell me the way to do it.

13:27 Or at least a way.

13:29 It's opinionated, but it's a good opinion.

13:32 And publishing your first package, talking about setting it up.

13:36 Anyway, a cool resource.

13:38 I hope to see it grow a lot.

13:41 So anyway, I like it.

13:42 It encourages people to test.

13:44 It encourages people to use TestPyPI first before they go somewhere else.

13:49 Although be careful because there's a lot of projects that don't use TestPyPI,

13:54 and they clean that one out every once in a while.

13:57 So even if a package is available on the test PyPI, it might not be available on the big PyPI.

14:04 Yeah, yeah.

14:05 So you're like, oh, it uploaded, so that means there's no name conflict.

14:09 Like, no, no, no.

14:11 Search PyPI.

14:12 Yeah.

14:13 But one of the things I wanted to bring up also is, let's see, right at the top.

14:18 It says, this is not a book about programming Python.

14:21 Instead, the goal of this book is to help you understand the ecosystem of tools used to make Python development easier and more productive.

14:29 So it's going to grow.

14:31 I commented about some of the testing already, and he said he's going to add some stuff about testing as well.

14:38 He said the handbook is structured according to the DIA taxes framework, which, okay, didn't know anything about this.

14:46 Tutorial, how to, explanation, and reference.

14:48 So I'm not going to link to it, but there's a link here on his project about it.

14:54 And I'm going to have to read more about this.

14:56 This is interesting.

14:57 I've never heard about this.

14:58 I had not heard of it either, but it does look interesting.

15:00 Anyway, and some great information about setting up Ruff to check your code and things like that.

15:07 So I've been so excited about UVV and V and UVPIP and stuff like that that I kind of forget that I'm using Ruff all the time also.

15:17 And it's kind of bundled into there.

15:19 So I'm curious, while we're talking, like kind of transition to rough for a second, I was listening to that interview you did recently where you were talking about, I think you interviewed Charlie recently.

15:33 And I, there's, I like, I like how detailed rough can be.

15:38 But this is one of the things that I think I'm, I'm, rough can you can go in the PyProjectTML or there's roughTML also now.

15:47 and I kind of like, I think I might transition to using the ruff.toml or try to

15:53 because I end up having like a decent amount of tweaking the rules a little bit

15:58 and I'm not really tweaking the project.

15:59 I'm just tweaking the linting rules.

16:02 So are you using, do you use rough and where do you put your rules?

16:06 I love rough and I'm all about the rough.toml.

16:08 Yeah, it definitely takes more than a page of small font on my screen.

16:13 Okay.

16:14 I don't want to, you know, you could reasonably have a PyProject.toml that's smaller than the ruff.toml.

16:20 So, you know, I don't want to put those together.

16:22 Yeah, and I loved Charlie's comment about the rules of even he doesn't turn them all on.

16:29 That would be silly.

16:31 So I tried it.

16:32 I tried turning all the rules on.

16:34 And there's some rules that are inconsistent.

16:36 There's like two or three rules that are conflict with other rules.

16:39 So you have to decide, you know, if you turn them all on, there's actually a built-in conflict.

16:43 because a couple of the rules are conflict.

16:45 But it gives you really great detailed information about how to fix it.

16:50 Yeah, another benefit from using a rough TOML over pyproject.toml is if you're using Docker or basically any continuous integration style thing

17:01 where it looks at, well, if any of the source files change, I need to rebuild or redeploy, restart your web apps, your APIs or whatever.

17:08 you can make changes to your ruff.toml and having if you exclude that with like a docker ignore for

17:15 example okay then you rebuild it it'll say yep there's no changes right unless those changes

17:19 are like real code changes so i know it's not a huge deal but that's like a plus one in the column

17:25 of separating those things yeah so if you're just doing a handful of rules it might be fine in your

17:31 pyproject.toml but if you're experimenting with turning on more and more um uh rules um then uh

17:38 yeah, putting it separate.

17:40 I do, it's both surprising and cool that by default not all of them are on,

17:46 because a lot of linters in the past, they defaulted to all on, and you'd try to use the tool and it would just like blow up with errors.

17:54 But rough does not.

17:57 It's got some good standard ones and then you have to go turn them on.

18:01 So anyway.

18:02 Yep.

18:02 One more piece I saw in the tool book here that it was being added with a UV ad.

18:07 I put rough into my system using UV tool install rough because just globally and then have a ruff.toml for each project to configure it.

18:18 So that way you don't have to have updates to your project or make sure you remember and install.

18:22 It's just like a globally available tool.

18:25 Yeah.

18:25 Yeah.

18:26 I should do that.

18:27 I don't know why I don't.

18:30 Anyway.

18:31 Well, should we talk about the wonderful people at Posit that are helping us today?

18:36 Absolutely.

18:37 Okay. This episode of Python Bytes is brought to you by the folks at Posit. Posit has made a huge

18:44 investment in the Python community lately. Known originally for RStudio, they have been building

18:49 out a suite of tools and services for Team Python. Today, I want to focus on hosting your Python-based

18:55 data science workloads. This includes dashboards, reports, plots, interactive web apps, all the way

19:02 to custom Flask and Django apps.

19:04 Their service is Posit Connect.

19:06 Posit Connect makes it easy for data scientists to share work built with Python code.

19:11 If you have a streamlit app, dashboard, Plotly interactive plots, a FastAPI service,

19:17 or even a Quarto report, just give Posit Connect the code it needs to maintain the asset

19:23 and Connect automatically does the rest.

19:25 Connect will manage your APIs and serve your interactive apps.

19:29 And if desired, update your ports and dashboards a scheduled basis. That's right. No more need to explain to the stakeholders why the dashboard or

19:37 plot stopped updating last week. You get to focus on your data science and leverage your skill set

19:42 while Connect makes you look good, keeping your code running in private. With Connect, you get a

19:47 private URL on your Connect server, ensuring that your asset is continuously available to your

19:54 shareholders. You can also control which users have access to the asset. Let Posit Connect handle

19:59 the delivery and DevOps including you're involved in sharing your work.

20:06 You focus on what you do best.

20:07 So if you work on a data science team, you owe it to you and your org to check out Posit Connect.

20:13 Visit pythonbytes.fm/connect today and get a three-month free trial to see if it's a good fit.

20:21 That's pythonbytes.fm/connect.

20:23 The link is in your podcast player's show notes.

20:26 Thank you to Posit for supporting Python Bytes.

20:29 Absolutely.

20:30 Thank you, Posit. That's sort of a data science theme, right, Brian? Let's go and talk about something from Adam Chains. And I know we talked about rough, but what about black? So black is still a super important, super influential thing. I imagine with black, without black, maybe rough doesn't exist.

20:49 So I want to come up, I want to point out a tool called Blacken Docs.

20:55 So if you have documentation, and in that documentation, maybe you've got some code blocks, some Python code blocks, and you would like to format them.

21:04 I don't know how well your Markdown Editor formats code, but I'll tell you what, I love my Markdown Editor, which is TypeHora.

21:11 It does not have a reformat according to rough style feature whenever I say tick, tick, tick, Python, hype and stuff, right?

21:20 This does.

21:20 And so you can run this against all sorts of different things.

21:24 So it says documentation.

21:26 But if you look at it, what it will do is it works on restructured text or it works on markdown files.

21:33 Okay.

21:33 For example, I'm working on that Python in production book from Talk Python, which is like 250 pages of markdown.

21:41 There's a crap ton of tick, tick, tick Python, something or other in there.

21:45 Oh, yeah.

21:46 I could run it against that.

21:47 It doesn't have to be documentation.

21:49 Anything that's restructured text or markdown that has Python code, you know, full size code block sections, you can just hit it with that.

21:58 Oh, cool.

21:59 That's cool, right?

21:59 Yeah.

22:00 You can also install a pre-commit hook.

22:03 It comes with one.

22:05 And then when anybody commits, it'll automatically format that.

22:08 And I think, does it do doc strings as well?

22:10 Let's see.

22:11 I believe, yeah, you can run it on Python files to reformat doc strings.

22:17 Yeah.

22:18 So doc strings and basically markdown and restructure text.

22:21 That's pretty awesome, right?

22:22 Yeah.

22:23 So there you go.

22:24 You can even turn it off with some comments like, no, please don't do it here.

22:28 And so on.

22:29 So just to be clear, I mean, it's probably obvious, but it's not, it's not, it's, it's

22:34 formatting the code blocks within your Markdown files to black style.

22:38 There aren't black styles for Markdown.

22:41 Yes, exactly.

22:42 Okay.

22:42 Although that's an interesting idea as well.

22:45 I actually wouldn't mind a, something like black for Markdown because it drives me,

22:49 I, I do headings with the pound and pound, pound and, and, but Markdown allows the underscore,

22:56 the dashed line line underneath it.

22:59 And I hate that.

23:01 Trust me.

23:01 I do too.

23:02 It's like somebody came from a structured text and stuck it in there.

23:05 So let's make it easier to convert our restructured text.

23:07 No.

23:08 No, please don't do that.

23:10 We're here because we don't like structured text.

23:12 Don't you understand what's happening?

23:15 All right.

23:15 Well, anyway, thanks, Adam, for that.

23:17 That's a cool looking project.

23:19 Yeah.

23:20 I'm going to stick with some data science themes a little bit longer.

23:27 so uh i want to talk about reinventing notebooks as reusable python programs have you heard of this

23:33 uh marimo marimo thing marimo yes i just had the founder of marimo on talk python okay

23:40 and yeah yeah it's it's not out yet but it's been you know been recorded and available on youtube

23:46 okay um if this is sort of interesting i'm like oh okay somebody else is reinventing

23:51 notebooks or something. But this is pretty cool. So this is, what are we looking at here? What

23:58 we're looking at is, I'm going to pop down to some code examples, is that a notebook doesn't have to

24:04 look like a notebook anymore in like JSON form or something. It can look like Python, or at least

24:09 with the Marimo environment. And I'm not quite sure, you probably know more than I do then.

24:16 Can you just open these up into notebooks, or do you have to do something special to get them open?

24:22 So it's a different execution environment than, say, in Jupyter Space Lab or Jupyter Space Notebook.

24:32 It's a different runtime.

24:33 Okay.

24:34 But they're real similar.

24:36 Okay, got it.

24:37 But I really like that it's just Python.

24:41 Well, it's not just Python code.

24:42 It's extra stuff also.

24:44 It looks like they add some decorators to make their environment understand what it is.

24:48 Like there's app.sell and at app.sell and at app.function and probably other stuff too.

24:58 But some of the benefits of this are like incredible.

25:01 So some of the benefits are that you can version with Git easier.

25:06 Well, you can do that with JSON too, but the diffs don't really make a lot of sense often.

25:10 The diffs are all over the place.

25:13 You can test with pytest.

25:14 And that one, I'm like, really?

25:17 That's been one of the problems.

25:19 Because in the past, testing is kind of an issue.

25:23 Or at least it has been a long time ago when I tried it.

25:26 Maybe they've solved it other ways.

25:28 But testing even with Doctest and some of the other stuff in there.

25:33 Embedding SQL and Markdown.

25:35 Like all the sort of stuff that you can normally do with Python, you can now still do with these.

25:40 And that's just kind of cool.

25:43 I wanted to check this out and try it out.

25:46 This is available for everybody to run, right?

25:48 Yeah, it's available for people to run.

25:51 You can download it, run it locally.

25:52 They also have some cloud options.

25:55 And it's really neat.

25:56 There's super nice ways to host it.

25:58 You just say run it as a service.

26:02 One of the things that's pretty interesting here, let me steal the stage for a moment,

26:06 is this all runs inside of, in your browser, client-side.

26:12 So that's one of the big differences with, say, Jupyter versus this, is it's powered by WebAssembly and PyOxide.

26:19 Okay.

26:20 PyOdyed, rather, sorry.

26:22 And so, for example, this one that I pulled up, I'll put it in the show notes,

26:26 is the F1 Driver Career Explorer.

26:28 And look how nice this looks, Brian.

26:30 Like in terms of relative, compare that to Jupyter, for example, I think it's got like a really beautiful style.

26:35 You know, you can check out, well, this is old.

26:37 We've got to put Ferrari in here for Hamilton.

26:40 You only got Mercedes and McLaren.

26:42 But it was powered by, say, DuckDB WebAssembly, for example, and F1 data.

26:47 And, yeah, it's got little Explorer sort of things.

26:51 And it just feels really polished.

26:53 It also has a collaborative edit sort of thing, like Jupyter Notebooks.

26:58 Sorry, like Google Docs, rather.

27:00 So you can, like, pair up on them.

27:02 There's a lot of neat stuff about this.

27:03 Okay, but this is, okay.

27:04 It's still cool, but I misunderstood.

27:08 I thought maybe it was just a new way to run Jupyter.

27:10 notebooks. Yes, but with a decent amount of new features, I mean, yeah. Well, I guess the

27:18 thing I'm missing then or not understanding is, is there a relation between this

27:23 and Jupyter notebooks? Can you use any of the rest of the Jupyter environment? I believe so. I'm

27:29 trying to remember now how much integration there is between those, but yeah, I think so.

27:34 Okay, cool. I'll investigate more.

27:37 Anyway, I'm still pretty excited about it.

27:40 It looks pretty neat.

27:42 I'll have to play with it a bit.

27:44 Yep, absolutely.

27:46 It's also another thing that it really tries to solve is they are trying to solve the...

27:50 Oh, you know what?

27:50 I said it had a Google Docs integration.

27:52 Not exactly.

27:53 But what they're trying to solve is the real challenges of integrating notebooks with Git.

28:00 So, for example, with notebooks, they're really JSON files, and then they've got the input blocks and the output blocks.

28:06 So if you've run some code and it's dependent on anything that might change.

28:10 You'll get like huge, instead of getting a nice merge, you'll get two conflicts of giant embedded blobs and so on.

28:16 Yeah.

28:17 The other thing that this really addresses around notebooks is notebooks allow you to run them in any order,

28:24 which is kind of insane, right?

28:25 Like I could run cell one, cell two, cell three, cell four, change cell two, run cell four again to see what the output is.

28:33 But maybe the changes would have made cell two be different or cell three be different.

28:37 You can skip over.

28:39 You'll have little numbers on the side of which order it was running.

28:42 It'll be like 1, 7, 8, 19, 14 or something.

28:48 As you go down, you're like, oh, this.

28:50 So this is reactive in the sense that every variable you create is wrapped.

28:56 It's not technically wrapped in a reactive behavior thing.

28:59 They parse the DOM every time you run anything.

29:03 And they create relationships between cells.

29:05 They'll say like, okay, cell 10 uses something from cell 1 and cell 3.

29:09 So if you run cell 3, it knows that cell 10 is out of date or potentially will just rerun it for you.

29:16 So it keeps track of the relationships even depending on the order so that you don't end up with like stale data

29:22 and then run another cell that pulls in that stale data and so on.

29:25 So it's trying to really address that as well.

29:27 That's cool.

29:28 Yeah.

29:29 That's one of the things that threw me off when I first started using Notebooks.

29:33 Yeah.

29:34 That's a little weird.

29:35 Like, why is it allowed to just run this piece?

29:38 And from an exploratory perspective, that makes sense.

29:41 Like, well, those were all expensive, and now I just want to ask questions down here and over here.

29:45 But from a reproducibility perspective and debugging, it's bad.

29:48 Yeah, yeah.

29:50 So anyway, neat, something fun new to play with.

29:55 Indeed, yeah, it's pretty cool.

29:57 So that's our items.

29:59 Do you have any extras for us?

30:01 I do have some extras.

30:03 Let's see a couple real quick.

30:05 PyCon Taiwan, PyCon Taiwan 2025, is doing a call for proposals.

30:11 It's going to be in the fall.

30:13 And so you've got until April 5th anywhere in the world.

30:18 So if you want to go to Taiwan and present stuff there, they have a decent number of English tracks and talks and stuff,

30:26 and they're looking for more.

30:27 So check that out.

30:29 Also, a follow-up on the Hacker News thing.

30:32 Remember, Brian, I was reading the Hacker News thing saying, who's looking for a job?

30:37 Who's hiring?

30:38 Well, Shinjitsu sent us a message and said, I'm sure some other Hacker News readers have

30:42 already told you this.

30:43 No, they haven't.

30:44 So thank you, Shinjitsu.

30:46 But if you haven't, you kind of got this exactly wrong.

30:50 Like, oh, sorry.

30:50 It says, Ask Hacker News Who Is Hiring is a monthly post that asks employers to post what

30:56 jobs they're posting, not people asking which one.

31:00 And who wants to be hired is a monthly topic that has people who are looking for jobs about themselves.

31:06 So did we have that backwards?

31:08 It was actually bad news?

31:09 Yeah, I think that's what it's saying.

31:10 Let me see here.

31:11 Yes, I think I said who wants to be hired was asked by the employers.

31:14 And who is hiring was asked by the people looking for a job.

31:18 But it sounds like it's the other way around.

31:20 So that would make it less rosy.

31:22 So sorry about that, folks, if that was a little bit backwards.

31:25 Oh, okay.

31:26 See?

31:27 Errata.

31:28 Errata.

31:29 Yes, we have to have an errata.

31:31 How about you?

31:32 I got a couple of things.

31:34 First off, PyCon US announced that there's a refund policy for international attendees

31:40 if you qualify for certain things.

31:43 And actually, I'm just embarrassed as American that we have to do stuff like this.

31:49 But international travel in the United States has become more complex for many of our community.

31:53 PyCon US welcomes all community members to Pittsburgh.

31:56 But if for some reason you can't come because of various problems, read the post for details.

32:04 But they're a fairly – I think a fairly cool refund policy details.

32:09 So anyway, if you can't come for some reason, check this out and maybe you can get a refund.

32:15 I've been thinking a lot about this.

32:16 There's been a lot of badness.

32:19 And I'm not happy about it, Brian.

32:21 I'm not happy that our country is treating people that way.

32:24 It's one thing if you catch somebody trying to sneak over the border and, I mean, it's a political debate on how lenient or aggressive you want to enforce that.

32:33 But when people, especially from fellow ally countries, just try to come over and they get put in jail because they didn't have the right kind of visa or something, that is some bad stuff.

32:43 That's embarrassing.

32:44 Well, you would just never think that that was the way the U.S. would treat people.

32:49 I know they've been a little bit tough on immigration, but, you know, Australia has, Canada has.

32:53 I was detained at the Canadian border for a long time and finally was let into Canada.

32:57 And it's, okay, it's a hassle.

32:59 But this is another level of jerkery.

33:02 Yeah.

33:03 I am glad to see that PyCon is doing this.

33:06 I apologize to the world.

33:07 I guarantee you Brian and I are not supporters of this policy.

33:12 We're supporters of the refund policy.

33:13 Yes, not the cause of the refund policy.

33:16 Yeah.

33:18 Right.

33:19 Okay.

33:20 Oh, on a slightly more positive note, I finally finished up restructuring the complete pytest course series.

33:31 So originally it was – so this is over at pythontest.com.

33:37 This originally was – I had a remaking the pytest book I wrote as a course, and it was one course.

33:47 But really the book was into three parts and intended to be read at different times during your development process.

33:54 When you're first starting out at pytest, then when you're trying to apply it to projects.

33:58 And then when you're like really good at it and you really want to like take off and get great at it, there's another section.

34:05 And I had it in one course and it doesn't write quite – I don't think it really quite fit how people use pytest and learn pytest.

34:12 So now it's split up.

34:13 So you can still get the complete bundle and it gets the three parts.

34:17 but the three parts learning the basics of pi test is a separate course now you can just buy it

34:22 separate and then um and then you can grab uh part two um and then part three but also part two is

34:29 working with projects part three the booster rockets like building really uh building

34:34 plugins is why you'd probably grab this um and advanced parameterization techniques

34:38 however even if you didn't buy the other ones i like having them separate now because if somebody's like i

34:45 really want to build my own plugin, you can just go check out this one course instead of taking all

34:49 three of them. So that's my big news there. The other, the other reason why the other structuring,

34:54 restructuring that I did is I, all the chapters are now a single video per chapter for the most

35:01 part. Chapters two and three are a bit long, so I split them up. So they're about 20 minutes each.

35:06 But the thing that I really like about this now is that in each video you can pop in and you can

35:12 change the speed so you can watch like the whole like i'm i'm usually a 1.25 or 1.5 speed kind of

35:18 person um and it was bugging me that you had to reset that setting every three minutes like for a

35:24 three or five minute video now now it's only like you only set it once for a 20 minute video so

35:30 anyway works better for me hopefully it works better for everybody else too so

35:34 that's my that's my big extra so yeah awesome congrats on getting that all already done that's great

35:39 yeah so um How about a joke?

35:42 Shall we boldly go?

35:44 No one has gone before.

35:45 Yeah.

35:45 So last week's joke was around, was a Star Trek Klingon theme.

35:51 And we had, who was it?

35:53 We had somebody from Holgi on Mastodon said, again, you probably already know this,

35:59 but there's this thing called Klingon programmers.

36:04 So this is over at Cornell.edu.

36:06 Top 12 things likely to be heard if you are a Klingon programmer.

36:11 And I kind of love this, so we should probably zoom in a little bit.

36:15 Okay, we're not going to read all 12, but number 12 is actually pretty good.

36:20 Specifications are for the weak and timid.

36:24 Do you want to read any of these?

36:25 Let's see.

36:27 This machine is a piece of God.

36:28 I need a dual Pentium processor if I am to do battle with this code.

36:34 Yeah, number four, a true Klingon warrior does not comment his code.

36:39 Debugging.

36:40 Klingons do not debug.

36:41 Our software does not coddle the weak.

36:51 Klingon functions do not have parameters.

36:53 They have arguments, and they always win them.

36:57 I love it.

36:58 All right, let's round out the tie back to last week, which was we will test in production.

37:04 Okay, yeah.

37:05 So this is, what, number one?

37:07 Number one, do it.

37:09 Our users will know fear and cower before our software.

37:13 Ship it, ship it, and let them flee like the dogs they are.

37:17 Exactly.

37:18 This is good.

37:19 This is a reminder also to everybody that if you think we probably have already heard it,

37:24 there's a decent chance we haven't, so send it to us anyway.

37:27 We don't mind repeats.

37:28 So if you find something funny or something.

37:31 People give us a lot of credit, Brian.

37:32 Maybe too much, more than we deserve sometimes.

37:35 Yeah.

37:36 Anyway.

37:37 Well, thanks again for jumping on the call with us and enjoy doing another episode.

37:44 And thank you, everybody that listens and everybody that shares this with other people.

37:49 We like to grow our community.

37:52 Yeah, very much appreciate it, everyone.

37:53 See you all later.

37:53 Bye, Brian.

37:54 Bye.

Back to show page