#429: Nitpicking Python

#429: Nitpicking Python

Released Monday, 21st April 2025
Good episode? Give it some love!
#429: Nitpicking Python

#429: Nitpicking Python

#429: Nitpicking Python

#429: Nitpicking Python

Monday, 21st April 2025
Good episode? Give it some love!
Rate Episode

Episode Transcript

Transcripts are displayed as originally observed. Some content, including advertisements may have changed.

Use Ctrl + F to search

0:00

and welcome to Python Bites,

0:02

where we deliver Python news

0:04

and headlines directly to your

0:06

earbuds. This is episode 429,

0:08

recorded April 21st, 2025. And

0:10

I am Brian Ockett. And I am

0:12

Michael Kennedy. And this episode is sponsored

0:14

by the folks at Posit Workbench. Thank

0:16

you, Posit. Also, listen to them later

0:18

in the show, of course. If you'd

0:20

like to connect with us, please do

0:22

so on Blue Sky or Mastodon. We

0:24

have all of those links in the

0:26

show notes. We'd love to hear from

0:28

you, love to hear new topics that

0:30

you think we might want to cover.

0:33

And if you'd like to listen to

0:35

us live, head on over to pythonbites .fm

0:37

slash live, usually Mondays at 10, Pacific

0:39

time. But you can also use that

0:41

link just to find the YouTube channel

0:43

to watch older episodes too. And

0:46

finally, you don't

0:48

need to write anything down while you're

0:50

listening because we'll just send it

0:52

to you. So head on over to

0:54

pythonbites .fm. Join the mailing list or

0:56

the newsletter list, and you'll just

0:58

get an email sent every week with

1:00

all the links. But it also has

1:02

backup information of what you need to

1:05

know to understand the story. So really

1:07

nice. And we don't use it

1:09

for spamming or anything like that. Michael, what

1:11

do you got for us? I might

1:13

have a problem. I like to self -host

1:15

stuff too much. It means

1:17

I end up with things that I

1:19

have to take care of rather than

1:21

just have a login somewhere. But I'm

1:23

going to make a recommendation nonetheless. So

1:26

if you find yourself

1:28

using Slack, I think

1:30

even Zoom maybe, if you're

1:32

using Jira, if you're using Notion,

1:34

and you would like that all in

1:37

one place rather than a bunch

1:39

of different apps that you pay for,

1:41

for free, for open source. self -hosted

1:43

or paid as hosted. If you

1:45

really want to do it that way,

1:47

there's a project or tool or

1:50

platform, whatever called Holi, H -U -L -Y,

1:52

an open source platform that serves as

1:54

an all in one replacement for

1:56

linear JIRA, Slack, and Notion. How cool

1:58

is that? Okay. Okay. So maybe

2:00

you want to have the place

2:02

to do chat conversations or you

2:05

want to store your documents or

2:07

you want to do project management

2:09

and sync it with your GitHub

2:11

issues. or do planning. So

2:13

all of this stuff is super

2:15

cool, I think, and even has video

2:17

meetings. So if you want to

2:19

also get rid of Microsoft Teams or

2:22

Zoom or whatever, it gives you

2:24

a nice private way to do all

2:26

that, right? And I don't know,

2:28

it just that really resonates with me

2:30

as just like, here's this cool open source

2:32

thing that we can do and we can

2:34

run it and we don't have to have

2:37

all these different services. And I know

2:39

about the others. I don't

2:41

know the pricing for Jira. I've never

2:43

paid for Jira, but slack is

2:45

out of control like slack is super

2:47

expensive for what you get from

2:49

it and things like that. And so

2:51

having this with a bunch of dashboards

2:53

and it even has a nice

2:55

self hosting option. So if you are

2:57

a person who does Docker compose,

2:59

guess what? You just Docker compose up dash

3:01

D you have your whole platform running, which

3:03

I think is pretty excellent. So that's how

3:05

a lot of these self hosted things are

3:07

shared and maintained. So you don't even have

3:10

to figure out how to put it into

3:12

Docker. It's already there and set up. So

3:14

you just run it and you're good to

3:16

go. Just make sure you do backups. Pretty

3:18

neat, I think. That's pretty cool. Yeah. And

3:20

it also syncs both ways with GitHub. So

3:22

if you've got GitHub issues, it

3:24

will sync with the issues. And if

3:26

you have GitHub projects, it'll sync with

3:28

those projects. So it's project management tools and

3:30

it's issue management, like it's JRO replacement

3:32

stuff is mirrored on GitHub. So not

3:34

everybody has to use it. Like you

3:36

can have internal people on this and

3:38

external people just perceiving it as GitHub.

3:40

I have GitHub issues. I was just

3:42

talking to my therapist with it about

3:44

it the other day. Yeah,

3:47

that's indeed. And John Other

3:49

says, this is why I love

3:51

the podcast. Thanks for the holy

3:53

recommendation and loves self -hosting as much

3:55

as I do. So also thanks,

3:57

John. Holy self -hosting Batman. Anyway, holy

4:00

self -hosting. Indeed. Yeah. The

4:03

problem is you can, like, well, now I've

4:05

got 12 apps to back up and maintain,

4:07

but it is super cool to be able to

4:09

say we don't have to worry about data

4:11

privacy. We don't have to worry about sharing

4:13

things or if those places get hacked or

4:15

if they change their business model or if they

4:17

go out of business, you know, you got

4:19

a self -hosted open source thing that you can

4:21

fork and just run. And there's something cool

4:23

about that. I wonder if anybody's got like,

4:25

because this sounds great, but I don't really

4:27

want to do that work. So I wonder if

4:30

there's a self hosting as a service service.

4:33

I think they're actually, I'm forgetting the name of

4:35

it right now, but yes, basically

4:37

is a self -hosting as a service. Yes,

4:39

it's amazing. Okay. What

4:41

an interesting idea. All right, that's

4:44

it for this one. Over to you.

4:46

Okay. Well, I am going to

4:48

talk about critical, what are

4:50

those called again? CVEs? Common. call,

4:52

I should have practiced this,

4:55

common vulnerability and exposures. So

4:57

CVEs, we're used to talking about

4:59

these when there's like really wide

5:01

scale attacks, but they kind

5:04

of happen all the time,

5:06

like vulnerability problems. And

5:08

this propped up this

5:10

last week rather urgently,

5:12

because the CVE system,

5:14

the entire system is

5:16

sort of built on

5:18

top of an a

5:20

non -for -profit called MITRE.

5:25

But there was a

5:27

contract with the US

5:29

government to maintain this database

5:31

of CVEs. However, and

5:33

it's been around for 25

5:35

years, it ran the

5:37

risk of possibly going away

5:40

because of all of the cost

5:42

cutting that our current lovely

5:44

administration is doing. It's

5:48

a waste. It's government waste, I tell

5:50

you, Ryan. Like what? And

5:52

it's not even like a lot of

5:54

people involved in this are volunteers anyway. That's

5:56

just nuts. Anyway,

5:58

so a 25 year old

6:00

CVE program ran the risk

6:02

of going away. There was a

6:04

letter that came out from

6:07

the vice president of MITRE gave

6:09

notice of potential halt of

6:11

operations. And apparently they

6:13

had been worried about this

6:15

for some time. So

6:17

in order to deal with

6:19

this and possibly make

6:22

sure that we don't have

6:24

this risk in the

6:26

future, there is now a

6:28

CVE foundation. So there's

6:30

been an announcement as of

6:32

April 16th that the CVE

6:35

foundation has formally been formally

6:37

established to ensure long -term

6:39

viability, stability, and independence

6:41

of the CVE program. This

6:43

is really cool. It isn't

6:45

something they just suddenly did.

6:47

They've been thinking about it

6:49

for a while and planning

6:51

it. There's an

6:53

announcement at thecvefoundation .org.

6:56

They're going to release information about

6:59

the transition, what is structured

7:01

as the transition planning opportunities for

7:03

involvement later, but right now

7:05

there's just an announcement. This is

7:07

pretty crazy that we would

7:09

run the risk of losing this.

7:12

This is how we talk

7:14

about vulnerabilities. But

7:16

apparently, there was an announcement also,

7:18

I couldn't find the link to it,

7:20

that they did not lose funding.

7:23

So it's okay for now, but it's

7:25

still the for now part. So

7:27

the foundation wants to make sure that

7:29

it's not just for now. I

7:31

still think it's something that we should

7:33

fund as a government, but you

7:35

know, is what it is, I guess.

7:38

I think we should fund it.

7:40

But also, I feel like maybe

7:42

that should be more of like

7:44

kind of in the style of

7:46

Python or Mozilla Foundation or, you

7:48

know, that it's tied to the

7:50

US government rather than just an

7:52

international organization of people who are

7:54

really committed to tracking security issues.

7:56

Doesn't take insane amounts of funding

7:58

to track these things. You know

8:00

what I mean? I have no

8:02

idea what the work is involved

8:04

for this. Yeah, I don't

8:07

know what the work is, but

8:09

it's not like there's a lot

8:11

of server infrastructure. It's not running

8:13

like. AI farms or something. The

8:15

funding probably should be coming from

8:18

all the ISPs and big companies

8:20

and stuff that are benefiting from

8:22

this. I think so too,

8:24

but hey, I'm not against the US

8:26

government. I'm glad they were doing it,

8:28

but it just puts it in a

8:30

weird situation these days. And

8:32

Python became a CVE authority not

8:34

too long ago, the PSF, so

8:37

they can announce their own CVE.

8:39

CVEs around things in the Python

8:41

space without going through an external,

8:43

not convincing some other participant to

8:45

allow them to list their CVE

8:47

for Python and so on. So

8:49

there's a bit of a distributed

8:52

aspect of it. Now, before we

8:54

jump on to thinking our sponsor,

8:56

Brian, the thing that I was

8:58

thinking of is Alestio, E -L -E

9:00

-S -T -I -O, and it says

9:02

fully managed DevOps or your cloud

9:04

and open source software. And

9:06

I've not used this. It's not a

9:09

recommendation, but we, as in they, deploy

9:11

and manage open source software to your

9:13

cloud provider choice. So, you know,

9:15

create a Hetzner server, point it at it,

9:17

and then pick the various self -hosted things

9:19

that you want, and they will self -host them

9:21

there for you. I believe it's how it

9:23

works. Awesome. Self -hosting is a service. Who

9:25

knew? Who knew? Well, I

9:27

guess you did. But we also have,

9:29

we also have Posit doing pretty awesome

9:31

stuff. Why don't you tell them about

9:34

it? This portion of Python bytes is

9:36

brought to you by the folks at

9:38

Posit. Posit has been making huge investments

9:40

in the Python community lately. Known

9:42

originally for RStudio, they've been building

9:44

out a suite of tools and services

9:46

for Team Python. Have you thought

9:48

of all the things that go into

9:50

a Python data science project? You

9:52

need your notebook or IDE for sure.

9:54

But you also need a server

9:56

or cloud environment to run it. A

9:59

version of Python, packages, access to

10:01

your databases and internal APIs. That's

10:03

a lot to set up. And

10:05

if you change any of these

10:07

things when you return to your

10:09

project months down the road, you

10:11

might get different results. Wouldn't it

10:13

be nice to have all of

10:15

this set up for you in

10:17

one easy to access place whenever

10:19

you want to get work done?

10:21

That's the goal of Posit Workbench.

10:23

Posit Workbench allows data scientists to

10:25

code in Python within their preferred

10:28

development environment without any additional strain

10:30

or on IT. It gives data

10:32

scientists access to all the development

10:34

environments they love, including Jupyter Nobix,

10:36

Jupyter Lab, Positron, and VS Code.

10:38

And yet it helps ensure reproducibility.

10:40

Here's how it works. You or

10:42

your team set up Positworkbench on

10:44

a powerful, dedicated server within your

10:46

organization or on the same cloud

10:48

service that is hosting your most

10:50

important data sources, such as AWS,

10:53

SageMaker, Azure, GCP, Kubernetes, or

10:55

pretty much anywhere. There, you

10:57

create dedicated pre -configured environments to

10:59

run your code and notebooks. And

11:02

importantly, you also configure

11:04

access to proprietary databases

11:06

and internal APIs. When

11:08

it's time to onboard a new data

11:10

scientist or start a new project,

11:12

you just fire it up in Workbench,

11:14

and it's fully configured and ready

11:17

to go, including the infrastructure side things.

11:19

All of this is securely administered

11:21

by your organization. If you work on

11:23

a data science team or consistency

11:25

matters, you owe it to you and

11:27

your org to check out Posit

11:29

Workbench. Visit pythonbytes .fm slash workbench today

11:32

and get a three month free trial

11:34

to see if it's a good

11:36

fit. That's pythonbytes .fm slash workbench. The

11:38

link is in your podcast player show

11:40

notes. Thank you to Posit for

11:42

supporting Python Bytes. Indeed. All right,

11:44

you ready for the next one? Yeah.

11:46

Database. Database things. So here's

11:49

a really interesting. free web app,

11:51

I guess it is, that

11:53

lets you draw and import and

11:55

export and visualize database diagrams.

11:57

So either you've got your own

11:59

project or where I see

12:01

this being super useful as you

12:03

put onto a new project

12:05

or you're a consultant. And

12:07

they're like, and welcome for the two

12:09

weeks. Here is the database and here's

12:11

the app. Please fix it by now.

12:14

And you're like, uh, how do I

12:16

even get started? What is here? Right.

12:18

So this thing called draw db .app

12:20

allows you to draw, copy and paste

12:22

database diagrams. And if you go there,

12:24

you can see there's really nice graphics

12:26

and the UI is quite nice for

12:28

interacting with it. So it says, you

12:30

can try this for yourself for free.

12:32

And, uh, it, what's interesting is it

12:34

asks you to choose your database. as

12:37

in like SQL light or Postgres or

12:39

SQL server or whatever, because it imports

12:41

and exports SQL statements. And those different

12:43

databases have different database SQL dialects, which

12:45

in and of itself is annoying. But

12:47

let's just say, I don't know, I'll

12:49

do Postgres, right? And you come in

12:51

here, you can add a little table,

12:53

and you can then like edit that

12:55

thing, give it a column, multiple columns,

12:57

different data types. and create a second

12:59

one then you can say like grab

13:01

one column from one database or one

13:03

table rather and then drag it and

13:05

drop it in a field on another

13:07

another column and that'll create a foreign

13:09

key relationship automatically for example and you

13:11

can go over and you can say

13:13

file export sequel or import from sequel

13:16

and that'll generate the data definition language,

13:18

DDL stuff, create scripts and create the

13:20

indexes and columns. Or if you've got

13:22

a database, you can export it and

13:24

then load up this diagram based on

13:26

what was in your database and then

13:28

visualize it, tweak it, save it, or

13:30

just try to understand it. That's really

13:32

cool. Yeah. And as far as I

13:34

can tell, it's free. I don't know.

13:36

Maybe there's some point where I pay

13:38

for it, but I don't think so.

13:40

So anyway, I think it's a great

13:42

little app and people should check it

13:44

out if they have databases they want

13:46

to visualize. And you know, I'm usually

13:48

starting with a drawing anyway. like drawing

13:50

it on paper. So why not just

13:52

draw it in something like this? Exactly.

13:55

Because then you could say generate my table

13:57

from this. Yeah. Yeah, that's cool. Neat. Cool.

13:59

So not much more to it, but there

14:01

it is. All right.

14:03

Well, my last item is a,

14:05

and I'm only going to cover

14:07

part of this, but it is

14:09

a blog post by Edward Lee

14:11

called 14 advanced Python features. And,

14:14

you know, it's a listicle sort of

14:16

a thing, but there's a lot of

14:18

those like advanced Python features and even

14:20

talks about this that are really, really

14:22

not that advanced. They're just stuff that

14:25

people should know and some fun things

14:27

for, you know, advanced for beginners, but

14:29

not really. But I

14:31

kind of, I kind of really

14:33

like this because there are

14:35

things in this list that I

14:37

really wish I would have

14:39

learned earlier. And so anyway, I'll

14:41

just jump in. There's a few things I wanted

14:43

to pick out. First off

14:45

is typing overloads. And this is

14:47

something that I just learned while reading

14:50

this article. I didn't know you

14:52

could do this. So within the typing

14:54

module, you can say from typing

14:56

import overload. And then

14:58

one of the things you can

15:00

do then is you can

15:02

essentially list overloaded operations, overloaded

15:04

definitions for a function call.

15:06

And it's not really like

15:08

full function overloading like we

15:11

have in C or something

15:13

like that. However, there's return

15:15

types. So let's say there's

15:17

an example here that if

15:19

you only pass in a

15:21

certain type, then you're always

15:23

going to get a list

15:25

of strings. And if you're

15:27

passing in a different type,

15:30

then you always get a

15:32

single string back. Those

15:34

sorts of things are nice to

15:36

have for typing or return types. And

15:38

that's something that we don't really

15:40

have in Python. You can't have a

15:42

different difference in just return type.

15:44

So having that in place is kind

15:46

of neat. That's neat. I'm

15:48

going to play with this like right away. So that's

15:50

pretty cool. Overloading functions with

15:53

the typing. So I'll have to

15:55

try that. Next up is something

15:57

I've been using a lot lately

15:59

is a keyword only and positional

16:01

only arguments. And specifically, so

16:03

we now have these a star

16:05

or a slash that you can

16:07

separate the parameters to a function.

16:09

the parameter definition. And

16:12

the the asterisk or star

16:14

means that everything, everything after

16:16

that is keyword only parameters. And

16:19

then the slash is

16:21

positional only parameters. And

16:23

that's that's everything before.

16:26

So it's a little one of them's

16:28

before and one of them's after. So in

16:30

his example, he's got a b and

16:32

then slash c d star e f. So

16:34

mean that means a and b are

16:36

positional only, c and d can be

16:38

positional or or keyword,

16:41

and then ENF have to be

16:43

keyword only. And the thing

16:45

that I'm doing a lot is

16:47

why I'm using the keyword

16:50

only one a lot is for

16:52

functions that have, and these

16:54

are not usually API functions, but

16:56

functions, internal functions that have

16:58

a lot of parameters that have

17:00

defaults, and you would almost

17:02

hardly ever pass it like just.

17:05

positional only because the defaults are, it

17:07

doesn't really matter the order. It's just

17:09

they all have defaults and there's a

17:11

bunch of them. So I really want

17:14

all the callers of that every place

17:16

we're calling the function to list which,

17:18

which variable or which parameter they're, defining

17:20

as they call the function and you can

17:22

do that with the asterisks. Super cool. That's

17:24

really cool. Another thing that I think is

17:27

really useful for that is if it's the

17:29

same, a lot of times you're going to

17:31

give it. like numbers are true and false

17:33

where you don't have a variable that you're

17:35

passing in but you have just um yeah

17:37

kind of constant because if it goes seven

17:39

seven five true true false you're like whoa

17:42

whoa whoa what what It's

17:44

not like variable names are there where like x

17:46

comma y comma z, like, oh, those are

17:48

the dimensions. No, it just goes seven, seven, five.

17:50

Like, hmm, which is which,

17:52

you know what I mean? Especially true, true,

17:54

false, true, something like that. If you have

17:56

the, if you force keyword arguments on it,

17:58

then it's a much more readable thing at

18:00

the call site. Yeah. Things that are like

18:02

generic, like you're just adding things. It doesn't

18:04

really matter. You know, it doesn't really matter

18:06

that your ad function is A and B,

18:08

but, you know, for true and false, you

18:10

really want, what do those mean? I like

18:12

this. It's a good addition. Last

18:15

thing I want to come to

18:17

is there's a list of, he

18:19

said number nine is Python

18:21

nitpicks, which is really a

18:23

few topics around it, but

18:25

it's listed as a nitpick

18:27

because it's a bummer when

18:29

people aren't utilizing this. So

18:32

the 4L statement, and this is,

18:34

I think probably still controversial, is

18:36

maybe a little bit. is whether

18:38

or not you should utilize the

18:40

else clause in four statements. And

18:43

kind of, you know, it's like often

18:45

before the else clause or without using it,

18:47

you might have to say like something

18:49

that his example is like a found flag

18:51

to say, you know, whether or not

18:53

you actually found the item you were looking

18:55

for while you're iterating the for loop.

18:57

And then you can check that later. But

19:00

there's there's the else you could just

19:02

say, you know, if you didn't find if

19:04

If you never hit anything inside the,

19:06

the for loop, you can else out. Um,

19:08

it's, it's still a little weird though.

19:10

I still find it very, uh, very good

19:12

to make sure that you comment that

19:14

to say what's, what's going on in the

19:16

else you're using what you're doing in

19:18

there. So, okay. I'm, I'm anti else. I'm

19:20

definitely else. And by the way, Guido,

19:22

uh, I heard him quoted at one point

19:24

that said, if I had to do

19:27

it over again, there would be no else

19:29

statement. I think it's just weird. It's

19:31

like, does it happen when it breaks? Or

19:33

is it happened when it. doesn't break

19:35

like is break the thing you're looking for

19:37

and else is the other or is

19:39

break something weird and it was supposed to

19:41

go like it's just I don't know

19:43

it just I know you can save one

19:45

line of code but it's it's too

19:47

ambiguous to me it's too weird so else

19:49

is what else is if you didn't

19:52

break right I think so yeah anyway I

19:54

think so anyway it's not the fact

19:56

that you gotta like we gotta have this

19:58

discussion it's like I don't make social

20:00

weird for me I'm out I'm I'm I

20:02

know there's I could do it but

20:04

I don't do it okay Also, the walrus

20:06

operator, it's been around since 3 .8, and

20:08

3 .8 is already deprecated, or end of

20:10

life. So we can start using, definitely

20:12

use the walrus operator. Again, it's just saving

20:14

one line of code, but. I like

20:17

it. How about a walrus? I'm a fan

20:19

of walrus. I created the walrus operator

20:21

this weekend, I believe. For

20:23

me, I like it because it's

20:25

the locality of definition. I'm

20:27

creating it for this if block and I'm

20:29

going to use it in this if block

20:31

if I need it. Otherwise, it's kind of

20:33

like it's part of this thing, not something

20:36

that might make sense later down the line,

20:38

probably. For me, I like it. A

20:40

couple more. Short

20:43

circuit evaluation, I don't

20:45

really care. I'm fine with

20:47

a bunch of FLSs, actually,

20:49

if that's all you can

20:51

do. But the short circuit,

20:53

which means utilizing OR to

20:55

say, if you're going to

20:58

do one thing or the

21:00

other, you can

21:02

use OR short circuits. So once you

21:04

hit one of them that's true, anything

21:06

after that's not going to get ran.

21:08

And you can kind of go crazy

21:10

with that, though, and actually put logic

21:13

in there. And I'm really not a

21:15

fan of putting logic in the short

21:17

circuiting or operation. But that's just me.

21:20

But I am a fan of operator

21:22

chaining. And I often see this with

21:24

people coming from different languages. They don't

21:26

know you can do operator chaining. So

21:28

I'll see, like, if 0 is less

21:30

than x and x is less than

21:32

10, you don't have to do that

21:34

in Python. just put them together and

21:36

say zero less than x less than

21:38

10. So operating training is right. But

21:40

also, I think that we should have

21:42

been a little more strict with operator

21:44

training. And I don't think

21:46

it like you can put anything

21:48

in there, right? But I

21:50

don't think you should like for numbers,

21:52

it should be less than you should

21:54

not be doing like greater than operator

21:56

training. That's just weird. The number line

21:58

is small to big. So please do

22:00

that. That's all I wanted to cover

22:02

for that. But there's a bunch of

22:04

other great stuff in here. So

22:07

definitely check out this article.

22:10

Here's the full list. So LRU cash. There's

22:12

a lot of stuff in there. Yeah. Love

22:14

it. F strings. Love it. Nitpicks. I have

22:16

some nitpicks with that statement. But you know

22:19

what? It's fine. Good, good, good fine to

22:21

the Brian. All right. Well, we're done with

22:23

our main topics and I don't have any

22:25

extras, Michael. But do you have

22:27

any extras? Well, I thought the answer was

22:29

no, but it turns out to be

22:31

yes. Okay. Because something I just heard about

22:33

right before was, oh gosh, assuming on

22:36

this is all weird. So there's, remember I

22:38

wrote this article that said unsolicited advice

22:40

for Mozilla or Firefox or something like that

22:42

scene. You know what? The stuff that

22:44

you guys are doing is not leading you

22:46

in the right path. And here are

22:48

five ideas that you might write, try as

22:51

a business, to exist. down the

22:53

line, please do that. And

22:55

so there actually come, I mean,

22:57

I really doubt they gave

22:59

a crap about what I said,

23:01

but they are introducing this

23:03

new suite of services. How about

23:05

that? So Thunderbird, it all

23:07

seems to be based around Thunderbird,

23:09

their email client. and Thundermail,

23:11

which is a really interesting term,

23:13

but they're offering like Thunderbird

23:15

appointment, which is kind of like

23:17

Calendly or Tidycal or whatever.

23:19

Thunderbird send for private file sharing.

23:21

I used to love Firefox

23:23

send, but it got abused by

23:25

hackers and other badness. And

23:27

so then it stopped working. But you could put just

23:29

like, here's a URL, here's a password. The

23:31

whole file just goes away in three days, give it

23:33

to someone, and then they could have it. It was

23:35

really great. And so I'll end encrypted, all that kind

23:37

of stuff. Also, some AI

23:40

thing, because of course there's an

23:42

AI thing, and then Thunderbird Mail,

23:44

hosted Thunderbird Mail, all that. Anyway,

23:46

I think this is a cool

23:48

idea. Thunder Mail. Thunder, Thunderbird.

23:51

So, very cool. That's

23:53

all I got for my extra. You

23:55

can't spell mail without AI. Sorry. Well,

23:58

I'll tell you what, that seems to be

24:00

what they think in their feature set. Every mail

24:02

client I find is like, and now

24:04

we have some terrible AI thing that will just erase

24:06

all your formatting and make you have to rewrite your

24:08

mail if you try to use it. But it's here

24:10

and it's great. No, it's not.

24:14

Anyway, shall we, you

24:16

know, Brian, we try to make it not

24:18

too political here, but I got a, I got

24:20

a political joke in a sense. Okay, awesome.

24:22

Are you ready for it? Yeah. So this one

24:24

came to us by many people. So thank

24:26

you to everyone who sent us this in. Have

24:28

you noticed? I don't watch the news a

24:30

ton, but have you noticed that there's some talks

24:32

about tariffs lately? Yeah.

24:37

I mean, look, I think genuinely it's

24:39

it's fair to say it like let's

24:41

Discuss tariffs and if other countries have

24:43

tariffs on us does it make sense

24:45

for us to not I don't know

24:47

whatever I think there's a debate that

24:49

can be had but the way that

24:51

it's been done is so just chaotic

24:54

and random and on and

24:56

off again and so on. But

24:58

somebody decided that if that's

25:00

a good idea for global trade,

25:02

boy, oh boy, wouldn't that

25:04

be a cool idea for Python

25:06

and for program languages, and particularly

25:08

for these pesky external outside

25:10

of the standard library packages. So

25:13

I present to you Tariff,

25:15

a Python package that imposes tariffs

25:17

on Python import statements. No,

25:20

it's not just a joke. It's literally...

25:22

Version 1, it's not even 0ver anymore,

25:24

and it is released on PyPI, so

25:26

you can literally pip install tariff. What

25:29

does it do? Well, boom,

25:31

fire, fist emoji, fire emoji, a

25:33

little reference back to a signal. The

25:36

greatest, most tremendous Python package that

25:38

makes importing great again. Tariff is

25:40

a fantastic tool that lets you

25:42

impose import tariffs on Python packages.

25:44

We're going to bring manufacturing back

25:46

to your code base by making

25:48

foreign imports more expensive. And

25:51

so all you got to do is

25:53

import it. You set your rate on the

25:55

different libraries, like 50

25:57

% tariff on NumPy, 200 %

25:59

terrible on Pandos, and so on.

26:01

And then when you import

26:03

NumPy, it's literally 50 % slower,

26:05

takes 50 % longer than before.

26:07

What do you think? That'll teach

26:09

him. Yeah. That'll teach him.

26:11

Yeah. We're going straight back to

26:14

self -hosted, vendering in. Yeah.

26:16

But what's nuts is it works. Like,

26:18

you know, it's not just a weird

26:20

joke idea, but somebody made it. It's open

26:22

source. And the hat. The

26:25

hat. The hat is

26:27

good. Why tariff, you may

26:29

ask? Because foreign packages have been stealing our

26:31

CPU cycles for too long. It's time

26:34

to put America first and make importing fair

26:36

and balanced again. Obviously, a parity package,

26:38

use it at your own risk. Yeah,

26:41

Other people stealing our CPUs, we need

26:43

to steal our own CPUs. Exactly. That is

26:45

how we're going to do it. Yeah.

26:47

Well, that's what I got for you. Is

26:49

it funny? I don't know, but I

26:51

think it is certainly amusing. It's When

26:53

I look at my 401k, it is not

26:56

funny. but. Gotta laugh. You got to cry.

26:58

Those are one of your two reactions. Might

27:00

as well last. Glad I like my job because I'm going

27:02

to be here for a while. Anyway.

27:04

Anyway, thanks Thanks everything, Michael. Thanks for

27:06

the joke. Thanks to everybody that shared them.

27:09

Like we said, a lot of people

27:11

sent that in, but that is not a

27:13

waste. That also gives us a signal

27:15

that we might want to cover it if

27:17

a lot of people are thinking about

27:19

it. So So thanks. Yeah. Thank you. All

27:21

right. Bye. Bye, Brian. Bye, everyone.

Rate

Join Podchaser to...

  • Rate podcasts and episodes
  • Follow podcasts and creators
  • Create podcast and episode lists
  • & much more

Episode Tags

Do you host or manage this podcast?
Claim and edit this page to your liking.
,

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features