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.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More