Episode Transcript
Transcripts are displayed as originally observed. Some content, including advertisements may have changed.
Use Ctrl + F to search
0:00
Hello and welcome to Python bytes, where we deliver
0:02
Python news and headlines directly to your earbuds. This
0:04
is episode 367 recorded January 16, 2024. And
0:10
I am Brian Auchin. And I'm Michael Kennedy. And,
0:13
uh, I guess we
0:15
do have a sponsor today. So, um,
0:17
so that's awesome. And, uh,
0:19
in, but, um, Michael, do
0:21
you want to tell us why you're not? Yeah.
0:25
Well, for people who are listening, maybe they
0:27
hear a slightly different setup for me for
0:29
people who might watch the video.
0:31
Well, that right there in the
0:33
background is lovely and very icy
0:36
Portland, Oregon. Okay. And so,
0:38
uh, I'll go ahead and put this on
0:40
the screen and people can, um, well, check
0:42
out if they feel like they can check
0:44
out the YouTube, uh, stream at like one
0:46
minute, 19 seconds. This is the
0:48
entrance to my house, Brian. And it looks
0:50
like an apocalypse. Just every, I would
0:53
say every block or so there's like
0:55
a hundred foot tree that's fallen somewhere.
0:58
And it's just taken out the power in so many
1:00
ways. It's like, it
1:02
was now it's, it was 13 now
1:05
it's 18 degrees Fahrenheit. So negative nine,
1:07
something like that Celsius, no power for
1:09
five days, not a place for podcasting.
1:11
So I'm hanging out here downtown in
1:14
a, uh, in a, um, in a
1:16
hotel with the family until the power
1:18
comes back on, hopefully today, fingers crossed.
1:20
Well, hopefully, um, yeah, hopefully there's actually
1:23
quite a few people in Portland without
1:25
power and, and, uh, did experience, uh,
1:28
power outages and pipes
1:30
bursting and things like that. And, you know,
1:32
for people that are in parts of the country
1:34
where they get like wake older than us, um,
1:37
it might seem like we're just being
1:39
wusses. Um, but, um, what
1:41
we get here is, uh,
1:43
often very heavy rain or heavy snow or
1:45
freezing rain and the freezing rain just weighs
1:47
down trees and barracks power power lines and
1:50
stuff like that. Absolutely. And this had up
1:52
to a hundred mile an hour winds with
1:54
these really old trees. And, uh, also just
1:56
the city is not really built for it.
1:58
We don't get it. enough that they
2:00
have infrastructures for it. So it's like, oh, it's
2:02
no three inches. So just good luck with that.
2:05
We're not going to do anything, right? No salt,
2:07
no gravel, just hope that works out. So
2:10
anyway, it's been all right. But yeah, different
2:12
setup, Brian. So thanks everyone for the understanding,
2:16
indeed. And
2:18
also I want to say thanks to
2:20
Bright Data. We'll talk more about them
2:22
for sponsoring the show. Let's
2:26
talk about something contrarian, I guess
2:28
you would say, Brian. You
2:32
know many people I'm sure have heard of 37signals, right?
2:35
David Hennemeyer Hanson. He's the guy
2:37
who created Ruby on Rails, most
2:39
notably, but there's also Basecamp and
2:41
Hey, HeyMail, and all that
2:43
kind of stuff, right? So needless
2:45
to say, they run a ton of SaaS products in
2:48
the cloud. And I came
2:51
across what I guess was more or less some
2:53
kind of conclusion to a
2:55
bunch of conversations and stuff they've
2:57
been working on. And so I'll
3:00
work my way backwards just a little bit. But
3:02
it's pretty fascinating. And the headline on the
3:04
post is, we have left the cloud. Right. And
3:06
I thought we were all told to go
3:08
to the cloud. I mean, we saw the picture
3:10
of what happens when the clouds get angry.
3:12
So I understand why you might leave the clouds.
3:15
But more seriously, like, clouds are
3:18
supposed to save us. They save us
3:20
money. They give us agility, et cetera,
3:22
et cetera, right? Yeah. So hence the
3:24
contrarian aspect, right? Yeah. Look,
3:26
I guess it's not like 37signals
3:29
is the same sort of place as
3:31
a lot of startups. But that's
3:33
true. If you're in, they do
3:35
make that point. If you
3:37
were an early stage startup where the costs are low,
3:40
by all means cloud it up. But I
3:43
guess one of the big lessons here
3:46
is the more that you get the
3:48
cloud hooks in the abstract
3:50
sense into your app, the more it might
3:53
set you up for a tough time as
3:56
you get bigger, right? So let me get to this and
3:58
we can talk a bit more about that. So
4:00
let's – so they
4:02
say we stand to save
4:04
over $7 million in
4:07
five years from our cloud exit. And
4:09
so why do they not just say, well, that's 1.2 or 1. –
4:11
whatever it is, 1.1 million per
4:15
year because of our cloud exit? Because
4:18
what they did is they went and they bought – so
4:20
when they said they left the cloud, they didn't mean just
4:22
like we're not using
4:24
Kubernetes or we're not using Lambdas
4:26
and serverless. Like they
4:29
are – they bought physical hardware,
4:32
okay? So they've got these
4:35
big pallets. And what they
4:37
did is they bought this
4:39
Dell – 20 Dell R7625
4:41
servers, which don't mean
4:43
a lot to me, maybe due to some people. But
4:46
it basically takes up like two server
4:48
racks and that means 4,000 CPUs, 7.7
4:50
terabytes of
4:55
RAM and almost a half a petabyte
4:57
of high speed SSD
4:59
storage. And that cost them
5:01
$600,000 to buy that, which is a lot of money. However,
5:07
they were paying like
5:10
1.2 million a year in cloud
5:13
prices, in cloud to AWS
5:15
basically. And so after six
5:17
months, it's paid for – and the five years
5:19
part is they expect this hardware to last
5:21
them five years. And apparently, it's super, super fast.
5:25
So it's pretty interesting. I would really
5:28
recommend people go through and read this,
5:31
what some of the values were. And
5:33
basically, what they did is they said, we're
5:35
going to buy like a really big
5:37
server. I know it's a bunch of
5:39
kind of CPUs and stuff, but they
5:41
kind of clustered into like one compute cluster.
5:44
And then they came up with this thing
5:46
called – it's kind of like Kubernetes called
5:48
KML, which would work for Python, but I
5:51
think originally they're deploying Rails apps on it.
5:53
And it basically gives you zero downtime slices
5:56
of this giant server. And
5:59
the reason this really – fascinates me is
6:01
this whole philosophy here.
6:05
It's also not just hey, they're leaving
6:07
the cloud because many
6:09
people are running to the cloud, but
6:11
it's also they're getting a really huge
6:14
server, like one huge server rather than
6:16
a whole bunch of small distributed servers,
6:18
which also was a little
6:20
bit the way that the
6:23
cloud was initially sold, right? We'll get commodity
6:25
hardware, you buy a bunch of little small
6:27
slices all over the place, you can buy
6:29
more small slices with auto scaling if you
6:31
need and instead they're like
6:33
no, this. And sort of along
6:35
those same lines is I, a
6:38
little while ago interviewed Mark Resenovich, the
6:40
CTO of Azure at Microsoft, super cool
6:42
guy, really, really smart, but also CTO
6:45
of Azure. And he
6:47
talked about how they started out with a bunch
6:49
of small machines as well and they're just getting
6:51
bigger and bigger ones and slicing them up for
6:54
tenants to be using them. So
6:56
I think this is also a really interesting trend that
6:59
we're gonna see more of is like more
7:01
big machines rather
7:03
than a bunch of small machines that then
7:05
maybe you slice up with Docker or Kubernetes
7:07
or other things. And
7:09
Brian, we've hardly even talked about
7:12
this yet, but that has changed
7:14
the way, I gotta type holding,
7:18
holding the mic in the wrong hand here for typing.
7:20
That's changed the way that I'm running a lot of
7:22
our infrastructure. So I've been thinking about this for a
7:25
while and reading this stuff, I thought I'd make
7:27
it the first topic of our show, but also
7:30
I had eight servers for
7:32
all the TalkPython and Python
7:34
bytes infrastructure, some
7:36
database server stuff, one
7:38
that ran Python bytes, a bunch of services, a bunch
7:40
of small machines, right? And I'm like, why am I
7:43
messing with all these small machines? So I
7:45
ended up consolidating like last week all
7:47
of that into one big, big server,
7:49
just running a bunch of multi-tier
7:52
Docker setups over there
7:55
And it's glorious, right? One Machine
7:57
runs great, there's a single. The
8:00
and I type to upgrade like thirteen
8:02
different web apps and all at once.
8:04
I mean upgrade their server infrastructure, upgrade
8:07
their of potentially to ship their new
8:09
dependency. it's a rebuild them all of
8:11
kind of stuff. one command interesting so
8:14
yeah is really nice is really different.
8:16
Let me like quickly and easily thrones
8:18
more things and also I think it's
8:21
better for security right? Like I had
8:23
little pass a p I upset was
8:25
just like a little utility things running
8:28
that I didn't pay this much attention.
8:30
To his I did the other apps
8:32
and so on and they just didn't
8:34
They didn't get their dependencies updated as
8:36
frequency frequently and their Python versions revved
8:38
as frequently. And if something happened to
8:40
them rise on technically on the same
8:42
Vm I, that's an issue. but now
8:44
the third or walked up behind like
8:46
a docker container on, so it's wisely
8:48
since. Well, anyway, it's this whole as
8:50
I encourage people to read through, I
8:53
put a bunch of different. Parts
8:56
of the story in for the Thirty
8:58
Seven Signals with Less The Cloud. Is
9:00
worth reading. I'll just get you really
9:03
quick. The five eyes and in this
9:05
is kind of along segments of us
9:07
are move us on votes as steer
9:09
the five values guy in our cloud
9:11
x x it we value independence above
9:13
all else and been trapped in Amazon
9:16
cloud is not great. We serve the
9:18
internet. This business owes it's entire existence
9:20
to society who and economic aberrations that
9:22
is the internet in a positive way
9:24
and we don't want to be locked
9:26
up behind a few hyper sailors We
9:28
went to be kind of just on
9:31
the internet on our own terms been
9:33
money wisely even this have lots of
9:35
money in our they're getting better value
9:37
for money. I
9:39
mean the way or the cloud has been
9:42
sold as the answer to says companies not
9:44
so sure am that they seek adventures and
9:46
you but they they do so anyway it's
9:48
not leaving data centers they have that in
9:50
a managed data center. they just have it
9:52
on hardware that they are so they were
9:55
already think about all this am so lot
9:57
of this isn't this interesting that is that.
9:59
It. Perfect for you. Even like that
10:01
you've figured do not okay when you city
10:03
you put them all on one machine you
10:06
know it's did you don't have like up
10:08
the server in your basement or something. no
10:10
no A So what I did as i
10:12
instead of having a bunch of small the
10:14
M said digital ocean about one big Vm.
10:16
okay wanna have right? has like eight gigs
10:19
foresee views on I'm pretty sherman a switch
10:21
to like sixteen gigs and it's hippies and
10:23
even that would be cheaper than out when
10:25
I was doomed for and still it's in.
10:27
the other things interesting are in danger going
10:29
super. Long and this but that because
10:32
all those different apps are sharing. Let's
10:34
say it in the final destination of
10:36
eight, Cb use their spikes in performance
10:38
or not at the same time Like
10:40
what makes Talk Python or Python Bites
10:42
spikes and in Lodi not the same
10:44
that what makes the courses spike unload
10:46
like a new course release or like
10:49
Black Friday or something like that is
10:51
very unlikely to intersect with when a
10:53
podcast is released because the I'm Busy
10:55
three, one or the other rights in
10:57
so then basically has access to all
10:59
eight cores. Instead of that, one gets
11:01
to corps Aca, one gets one core
11:03
and even though they're sharing like basically
11:05
in aggregate, it's the same number. Because
11:08
the spikes don't line up, they get
11:10
more capacity for that whenever they're doing.
11:12
It's pretty interesting. Look, At
11:15
that receptive Ma'am bullet some
11:17
little completely go to assert
11:19
topic and that I'd like
11:21
to talk about little tiny
11:23
scripts. I'm or maybe big
11:25
scripts but single file applications
11:27
as so single file scripts
11:29
so. i wanted to talk
11:31
about pep seven twenty three in
11:33
that is inline scripted met a
11:36
data and one of the things
11:38
that we've noticed com recently in
11:40
this and this is authored by
11:42
is interesting author so the author
11:44
is effect love i think that's
11:46
a says name is the dude
11:49
from hatch i'm but so hatches
11:51
i guess move in packaging says
11:53
around packaging in the idea is
11:55
ah debt you've got a scripted
11:57
has to pet might have dependencies
12:00
also and it also might depend on Python.
12:03
We can't really tell Python currently
12:06
that a script needs a
12:08
dependency or a particular version of Python. So this
12:10
is an attempt to kind of fix that. And
12:14
there's some motivation and stuff at the top
12:16
that I skimmed through a
12:19
little bit. No, I read it.
12:21
But the real at
12:24
the end is we're going to put stuff
12:26
like Pyproject.toml but you can do it in
12:28
a script. And this isn't there yet.
12:30
But there's an example
12:32
where you just sort of do a
12:35
pound sign and then like a few
12:37
slashes and then say script. And then
12:39
after that, you can put a little
12:42
bit of like Toml right in your
12:44
as a comment. And the idea is
12:46
something like pip run. Right.
12:49
This is like the world's craziest
12:51
doc string sort of thing, right?
12:53
Almost. I don't understand. So supposedly
12:55
there's reasons behind this syntax. It's
12:58
the weirdest syntax I've ever seen.
13:00
But maybe it's not quite shebang, but
13:02
it's kind of shebang ish. Yeah. But
13:05
like in their example, they're saying, OK, well,
13:07
you've got a little script that just requires,
13:10
you know, and this is going to be
13:12
common, I think, actually, requires
13:15
requests and rich. So because
13:17
it's going to like grab something off the Internet
13:19
and it's going to print some stuff and wants
13:21
to do it with color and whatever. But
13:24
how do you do that without packaging
13:26
it? And and here's one way is
13:28
to just tell Python that it needs
13:30
these other things. So there's a
13:33
it's I don't really completely
13:35
understand this. Like how what are the at
13:37
the back end? What's going to happen? What
13:39
is I think the different
13:41
tools will treat this different because my question
13:43
is really where are these dependencies going to
13:45
be installed at? Is it like if I
13:48
just say, I Guess
13:50
it depends on the thing. So if you're
13:52
going to do if it hatch, for instance,
13:54
or pip X might handle this. So if
13:56
I say pip X, you know, run this
13:58
script and it finds. It'll probably create
14:01
a perfect for to environment area
14:03
and had to lose same thing
14:05
in a different manner but behind
14:07
the scenes. Grab military to little
14:09
virtual environments, this kind of it.
14:12
Mostly it seems like it's hiding
14:14
virtual environment and dependency installs from
14:16
users, but it's probably needed so
14:18
they were pretty sick of this.
14:20
He gets interesting. Similar
14:23
to installed as Liz point
14:25
out some for is similar
14:27
to installed on That We
14:29
talked. About not too long ago and
14:31
think it solves an interesting problem. All
14:34
of these do have that little bit
14:36
of a bootstrap the has to happen
14:38
right source or something spread for the
14:40
so work is not built into python
14:42
right and so you've gotta have like
14:44
one librarians saw that then you can
14:47
use to run in and kick off
14:49
all the other runs but as if
14:51
you somehow make that happen or get
14:53
a get your company to agree like
14:55
we're all going to have this foundation
14:57
and then it just runs. I think
14:59
that's. Pretty excellent so marry a very
15:02
and i think it affects killing it
15:04
raise his been really creative and work
15:06
and a lotta different tastes and this
15:08
is a half right so if this
15:11
was built in said pythons then then
15:13
all the sudden yeah we're a ten
15:15
have have iran so i okay for
15:17
some reason edge of the flu air
15:20
med that it is a pep and
15:22
not just an extension that so yeah
15:24
this this is gonna be this could
15:26
be super super important and the his
15:29
last updated in December. it's accepted now
15:31
i'm not sure how long it's been
15:33
accepted but it's around the packaging of
15:35
peps with package zinger interesting because we
15:38
don't really have to wait for when
15:40
search sept and we don't really have
15:42
to wait for i'm a release of
15:44
python because things like tip and hatch
15:47
and other things don't have the same
15:49
in a release cadences python serve does
15:51
this could be like there's a note
15:53
here that says a it's not going
15:56
to be cleared be declared final until
15:58
at least a couple of tools
16:01
utilize it. So, so far there's no tools
16:03
that utilize it. But their
16:05
example is possibly Pip Run and Pip X.
16:09
So, and probably Hatch as well. It's
16:11
considering who wrote it. Yeah.
16:14
Yeah, I would imagine it might show up
16:16
in, might get support from Hatch as
16:18
well. Yeah. Yeah. Funny, good, funny comments
16:20
out there in the audience he has about
16:22
being breast inspired indeed. Brian, you want
16:24
to know what else is inspiring? What?
16:27
Our sponsor, Bright Data. Yeah,
16:30
indeed. So I just want to say
16:32
thank you to Bright Data for supporting
16:34
the show. Check them out at pythonbytes.fm
16:37
slash Bright Data. And there's, go ahead.
16:39
Yeah. Do we want to put their
16:41
stuff on the? We do. And somehow
16:43
I did not quite, oh, we did
16:46
quite do it. Oh, there we go.
16:49
Awesome. Yeah. So there's tons and
16:51
tons of data out on the Internet,
16:53
unimaginable amounts of data, right? And we're
16:55
lucky to live in a time where
16:57
so much of this is behind structured
16:59
APIs and you can go and access
17:02
it with HPX or requests or whatever. But
17:04
the truth is that most of the data
17:06
is not served up over clean APIs. It's
17:08
just sitting there on a web page as
17:11
gnarly HTML. Maybe it's even worse
17:13
than that. Maybe it's obscured behind
17:16
some front-end framework like React where
17:18
when you actually look at the HTML, it just
17:21
says pull in the React app. Good luck with
17:23
that. And then something else happens somewhere along the
17:25
way, right? So getting access to that data can
17:27
be hard. What's the answer? Well, web scraping, everyone
17:30
says. Yes, true. But
17:33
just like you wouldn't want to set
17:35
up your production infrastructure in your home
17:37
office, running web scraping jobs on a
17:40
single computer even in a data center
17:42
can lead to your program being potentially
17:44
unreliable with data pinned where whatever access,
17:46
source, source you're accessing thinks you're located,
17:48
right? So maybe there's different data for
17:50
you in the EU than if you're
17:52
in Ohio, but your computer is in
17:54
Ohio. So there you go. Or
17:57
you know, it gets blocked because of rate limiting or
17:59
other. types of things like
18:01
that, right? So if you need to
18:03
do professional web scraping, check out Bright
18:05
Data. They have award-winning proxy network with
18:08
millions of different places to access data
18:10
from and powerful web scrapers. They have
18:12
even ready-to-go datasets you can download. So
18:14
they've already curated these datasets and you
18:17
can just access them and get updates
18:19
from them and not even do web
18:21
scraping, which is awesome. So they've got
18:23
a whole marketplace for that. Everyone
18:27
knows, we're probably going to come back to
18:29
it some more in privacy-conscious stuff that I
18:31
really care about. And they
18:33
are both CCPA and GDPR compliant. They
18:35
have low-code solutions as well as Python
18:37
programming models with async.io and playwrights. So
18:39
if you have serious data needs and
18:42
those websites that have the data don't
18:44
offer an API, then you need to
18:46
check out Bright Data. Give them a
18:48
try at pythonbytes.fm slash Bright Data and
18:50
please use that URL so you know
18:52
that they heard from us. Thank you
18:54
to Bright Data for supporting the show.
18:57
Links in your podcast player show notes.
19:00
Sounds pretty awesome. All
19:02
right, back to the next
19:04
thing. So this
19:06
is super exciting and it came, I believe
19:08
this was sent in by Belaz. Let me
19:11
check, yeah, Belaz sent this over. Thank you,
19:13
Belaz, for pointing this out. So I've had
19:15
Fedor Fitzner on Python before and
19:19
we've talked about Flet. And
19:21
Flet is basically Flutter
19:23
but with a Python programming API,
19:26
right? Flutter is
19:28
actually how we built the apps at
19:30
TalkPython, right, for courses. Super
19:32
cool framework. But you're writing
19:34
Dart and Dart is good but it's
19:37
not Python, right? And
19:39
so it would be great to be able
19:41
to write that kind of code. Here's an
19:43
example, by the way, Brian. We talked about
19:45
fast UI and I said, oh, that reminds
19:47
me, this sort of hierarchical code structure reminds
19:49
me of Flutter, right? And
19:53
so here's the same thing, the Flutter UI
19:55
but in Python code instead of Dart. I
19:57
know the link for this code is in
19:59
the show. shown us, you can check it
20:02
out. Right, so the big news is you
20:04
can now build APKs for Android. And for
20:06
those of you who have not suffered the
20:08
indignity of the app stores, the
20:11
way you get something into the Google Play
20:13
Store is you build what's called an APK
20:15
and then you send them that, they process
20:17
it and then that's what gets shipped out
20:19
to run on the phones, on Android. So
20:22
this means, even though Flet built Flutter
20:24
apps, you couldn't really deploy it. You
20:26
could kind of get the Flet app
20:29
and then put your Python code on there,
20:31
but that's not like your app, that's like Jupiter
20:33
or something like that kind of. So
20:36
this is awesome. This means that people can
20:38
now build APKs that go in
20:40
the app store, at least for Android, with
20:43
Flutter and Flet and Python in particular. We'll
20:46
see about iOS, it's on the roadmap. So super
20:49
exciting. Yeah. I
20:52
mean, I would have used Flet if
20:55
I was sure I could get it to build
20:57
and ship on the different things.
21:00
I'd much rather have done that than use Flutter
21:02
or Dart for Flutter, but you
21:04
got to work with the building blocks you got and
21:06
this one just got better, so exciting. Oh,
21:09
also really quick, in those show notes, there's
21:11
a video by this guy
21:14
called Neural9, this channel is called Neural9, walking
21:17
through the steps to do all that build. So you want
21:19
to see how it works, you can watch that eight minute
21:21
video. Cool, meek. So
21:24
that's for Android apps, for
21:26
command line, normal command line stuff. I
21:29
was going to talk about Harlequin. So there's
21:32
a lot of people that
21:34
use SQL and SQLite for
21:37
different purposes, of course, for
21:39
databases. But to take a
21:41
look at your SQLite data,
21:44
there is an IDE called Harlequin.
21:46
I don't think we've covered it. But
21:50
it's an open source Python project
21:52
that it looks pretty cool. We're
21:59
showing on the screen. screen, the little snippet
22:02
or screenshot. You've got kind of
22:04
your tables, your data catalog on
22:06
the left panel, and you've got
22:09
a query editor, and then some
22:11
query results at the bottom right.
22:14
And it actually looks pretty slick
22:16
for quickly going through some data.
22:19
It looks like it has hooks
22:21
to go into DuckDB and SQLite.
22:23
That's why I brought up SQLite.
22:27
And I'd probably use it for SQLite. I haven't
22:29
used DuckDB. People don't know DuckDB is
22:31
also in process very much like
22:34
SQLite, but it's columnar instead of row base.
22:36
So they're kind of in the same category,
22:38
I guess. Yeah. Okay.
22:41
Yeah, I haven't used it, but definitely
22:43
SQLite use that a lot. So this
22:45
is kind of fun. I
22:48
like command line tools. This is neat.
22:50
I wanted to... It's kind of a short
22:52
topic. Just hey, if there's a command line
22:55
interface for SQLite or DuckDB,
22:58
and that's fun. It
23:00
looks like it runs on Linux, Mac, and Windows, which
23:02
is cool. But
23:05
I was also... One of the
23:07
things I've noticed is in, for
23:09
instance, a lot of Django tutorials,
23:12
Django starts with SQLite.
23:14
And by default, it does that.
23:17
And then you can specify other
23:19
databases. But I noticed today
23:21
a discussion on Mastodon that I
23:24
wanted to bring up kind of
23:26
SQLite-related. Jeff Triplett
23:28
posted a post
23:30
by somebody else, Anze. But
23:34
okay, Jeff's comment is, this is
23:36
a nice write-up about using SQLite
23:38
in production with pitfalls and open
23:40
questions. I cringe whenever I see
23:43
some Django Python luminary recommending people
23:45
use SQLite in production. I
23:47
don't care how good you are. You won't get it
23:49
right, even if you think you did. Anyway,
23:52
so interesting commentary there. So
23:55
Anze's post was, I wrote a blog
23:57
post about using SQLite in production. in
24:00
dealing with DB as
24:02
closed errors. I'm happy
24:04
to hear your thoughts. So the
24:07
article is called Django SQLite and
24:09
Database is Locked There and it
24:11
walks through those. And kind of
24:14
the reality is Django doesn't, I
24:16
guess, lock the database
24:18
when it reads correctly, the transactions are
24:20
weird. And a lot of the discussion
24:23
around this really is, if
24:25
you're using SQLite for, a
24:30
database that's mostly read-only, most people are just
24:32
reading stuff, it'll probably work fine and it
24:34
might work great. And it might be way
24:36
less hassle than doing Postgres or something else.
24:39
But if there are a lot of transactions
24:42
that are writing to it, if you
24:44
have multiple writers, then you've got issues.
24:47
So just thought
24:50
this was an interesting discussion, I wanted to bring it
24:52
up. Yeah. Yeah,
24:54
it is interesting. I think it really depends on
24:56
the type of app you got. Is it an
24:58
analytics thing that's writing like crazy? Or
25:00
is it basically like the database to your blog,
25:03
right where it's really just
25:05
you make an entry once a week if
25:07
you're a good blogger? You know what
25:10
I mean? That kind of thing. And then it's
25:12
all reads and probably fine, right? So somewhere
25:14
in the middle, I guess, you can sort
25:16
of turn that bar or watch
25:18
that gauge turn from green to red
25:21
as it gets closer to a full
25:23
analytics system. But yeah, it's pretty interesting.
25:25
Yeah, interesting discussion. All
25:28
right. What you got in it? Oh, we're done.
25:30
We're done. We're done. But we're not doing as
25:32
many extras. Do you have extras? I've
25:35
got just a couple extras. So since
25:37
I've got my screen up, I'll run
25:39
through a couple extras. I've been, I've
25:42
kind of started Python people podcast
25:44
last summer, and then kind of
25:46
ran out of time trying to
25:48
get the PyTest course done.
25:51
And so now I'm coming back and
25:53
cleaning up some things. So there's a
25:55
few recent episodes that finally came out.
25:57
So like, I stopped in October.
26:00
and then picked it up in January. So
26:02
we've got Will Vincent and Julian Seguera and
26:04
Pamela Fox episodes out now. So check those
26:07
out. Oh, excellent. Yeah, those are all great
26:09
people. And many of
26:11
them have been on this show as well. So
26:13
very cool. Nice to see these going. They provide
26:15
a really interesting look, like
26:18
really out of bounds looks into what people are doing,
26:21
you know. Like you and
26:23
Paul talked a lot about lacrosse,
26:25
right? And empowering
26:27
women and not the
26:30
next pep. And that was really interesting.
26:32
So yeah, keep it going. Some of the fun
26:34
bits are to try to talk to, kind
26:37
of dig deeper into stuff that I
26:39
normally don't ask about in the, like
26:43
for instance, Julian Seguera. Julian's
26:45
a really pretty positive person. So I poked at
26:47
that a bit and tried to ask him, like
26:49
really, how did you get this mindset? I mean,
26:52
clearly bad stuff must happen to you. So we
26:54
talk about his, you know, how
26:56
does he get through it? And keep
26:59
maintaining a positive mindset. So it's good.
27:01
Anyway, what are your extras for us?
27:04
Let's see if I can find them here. Okay, page
27:06
find. Yes, that's the first one, page find. So
27:09
Brian, you and I, we both
27:11
Hugo, right? Yeah. Hugo is awesome.
27:13
Go Hugo, for people who don't
27:16
know. Go
27:18
hugo.io, that's right. Super,
27:20
super cool way to build static
27:22
websites, not just blogs,
27:24
but static websites that are really, really powerful. And
27:28
I learned about this one from Mark
27:30
Little. He also does a ton of
27:32
stuff with Hugo and said,
27:34
hey, you should check out page find. So what
27:36
is this? I have no idea. So page find,
27:39
this is not just a Hugo thing, but for
27:41
all static sites. It's a fully
27:44
static search library, right? So
27:46
for static sites, whether this
27:48
is flask freeze or Hugo
27:50
or Pelican or whatever, this
27:53
is like a post build step thing that
27:55
runs and it indexes all of your HTML
27:57
or the parts that you. tell
28:00
it to index or tell it to, you
28:02
know, you can basically say don't include this part or
28:04
whatever. And no
28:06
configuration, it has rich filtering,
28:09
it has custom sorting attributes
28:11
and the way it structures its, what
28:14
it does basically is JavaScript and it has an
28:16
index that then the JavaScript reads in but the
28:19
index is broken into a bunch of pieces so
28:21
the front end stuff can like pull just little
28:23
bits of it and not pull all the results
28:25
back basically right. So I
28:27
added this over to my website
28:30
where if you're over here like Brian we could see
28:32
what I said about AI and check that
28:34
out and that awesome so it finds all
28:36
the different things that we could be
28:38
talking about but it also like in
28:41
my document, in my markdown I have
28:43
like H1, H2, H3 and it will
28:45
actually subdivide the results into
28:47
sections like what is in this
28:50
section demarked by H2 on
28:52
this one page. Oh that's pretty cool. That's really
28:54
cool right? And it also does things like, I
28:57
don't know if I can see any examples here
28:59
but if you type YO it'll
29:01
do like you, yourself, etc. So it's
29:03
not even just like exact word matching,
29:05
it's like a really smart search engine
29:07
and all it takes is just running
29:10
a script for like a couple of
29:12
seconds after you build your static
29:14
site and then dropping the output into like
29:16
a known location. Is that cool or what?
29:18
It's very cool. It's one of the issues
29:20
I've had when switching to a static site
29:22
is not knowing how to deal with the
29:24
search part. Yeah so I was
29:27
psyched with marks on this over like yes this is
29:29
going in. Yeah the other part that
29:31
I'm trying to figure out is how to get
29:33
a decent contact form so that's
29:35
still to be determined. Yeah
29:38
I don't think Page5 is going to help with that but this
29:40
is cool. This is really cool. So I recommend it. I'll add
29:42
it to my stuff too. It's
29:44
incredibly fast like search for AI
29:46
and I'm on like hotel Wi-Fi
29:48
and it's nearly instant right? So
29:52
that is super super cool where there's a lot
29:54
of sites even static sites so like searching, searching,
29:56
you'll see the little spinner you're like what is
29:58
it doing? Why is it search? No,
30:00
it should be instant, right? And that just, you
30:03
know, very much in line with like plugging something
30:05
like this into Hugo means like it's still instant.
30:07
All right, I got a few more. Let's let's
30:09
blaze them. Okay. This is
30:12
not to encourage people like more of a
30:14
just an interesting, hey, careful. We've
30:17
got PyPI and pip. The JavaScript
30:19
world has NPM. There's
30:22
an article called when everything becomes too much,
30:24
the NPM package chaos of An
30:29
NPM user named Patrick JS
30:31
launched a troll campaign with a
30:33
package called everything that depended on
30:35
every NPM package there. So
30:40
when you install it, it tries to install
30:42
the millions of
30:44
NPM packages. It
30:47
destroyed it like because people were installing it
30:50
and it was just taking too
30:52
much resources and so on. So
30:55
the follies of package management. How's that? Yeah,
30:59
nice. I'll get a little out of order here. So
31:01
Matthew Fiker wanted us and we're happy
31:03
to do so announce that the
31:05
SciPy conference is
31:08
coming and will be in beautiful Tacoma,
31:10
Washington this year. So
31:12
if you're interested, check that out and put
31:14
a link to that. And
31:17
the last thing is I wrote an
31:19
essay called unsolicited advice from Mozilla and
31:21
Firefox about four things. I think three
31:23
things I think they did wrong and
31:25
four things I think they could do
31:27
to like absolutely both change
31:30
the way that the
31:32
place of Firefox in the market
31:35
and alleviate their
31:37
insane dependency on Google.
31:40
Like not anti-Google,
31:43
I do stuff with Google. I
31:45
love YouTube, things like that necessarily,
31:48
but I don't think they're congruent
31:50
with Python with Firefox's focus on
31:52
privacy very much. And also 95%
31:55
of your company's revenue from one deal
31:57
with one company that's kind of at
32:00
a whim could just change their mind. That's not a great place
32:02
to be. I like to see Firefox doing well, so I thought
32:04
a lot about it and wrote about it, including
32:06
they should just lie about their user agent.
32:09
When a website says, this site runs best on Chrome
32:11
and using this crappy old browser we don't know about,
32:13
you know why you never see that on Vivaldi or
32:15
Brave? Because their user agent is
32:17
identical to Chrome. So when you get to the
32:19
website, like, oh, this is my favorite one. Perfect.
32:23
We're good to go. How many people leave Firefox because
32:25
when they get to a site, it says, this doesn't
32:27
work well. You need to go get this other
32:29
browser. It would stop saying that if Firefox just
32:31
said, hey, we're Chrome. Things
32:33
like that, right? And sure,
32:35
it would hurt a little. It would
32:37
hurt their pride. But people leave Firefox because
32:40
the website will refuse to run, right? And
32:43
if it probably would work, but if it's
32:45
going to refuse to work, then it's not
32:47
going to work. Things like that. So
32:50
anyway, I think this is a really fun article. I had a lot of fun thinking
32:52
about it, so people can check that out. And I think, I don't want
32:55
to dwell on this too much, but
32:57
there are a lot of internal site
32:59
stuff. So a lot of people do
33:01
internal tools at companies and they'll
33:03
do that. It
33:06
should use Chrome and somebody will try it
33:08
with Firefox and they'll be like, oh, it
33:10
doesn't work. And it probably
33:12
does. It just blocks it for the
33:14
heck of it. Exactly. And no
33:16
one's going to update that site, right? It's
33:19
just, yeah. Another thing that's
33:21
just maybe interesting to put on people's radar
33:23
is another thing a friend of mine co-founded,
33:26
Wayne's, is
33:28
this thing called Island, which
33:30
is like a enterprise browser meant
33:32
just for like giving enterprises super interesting control
33:34
over things like that you're just talking about.
33:36
So this actually is super interesting. One of
33:38
the things I think Firefox could do, but
33:41
also it's just really interesting. island.io, people can
33:43
check that out. Sounds weird.
33:45
Like, why would you ever want that? And then you watch the video or listen to
33:47
it and you're like, actually, that's awesome. So, like
33:50
installed. All right. All right. Shall
33:52
we joke? Yeah, let's do a joke. All right.
33:55
Well, this is a Linux joke. honestly.
34:00
So Brian have you ever got a combination
34:04
lock for anything? In this video,
34:07
here's a little character says my new bicycle
34:10
lock. To keep my new
34:12
bicycle secure, it has three digits.
34:14
Let's see. So that's a thousand combinations of
34:16
what we could have and then
34:18
they start to rule out what are the ridiculous ones,
34:21
right? Like one, two, three and stuff like
34:23
hmm 998 maybe. I am not silly enough
34:25
to use 666 or 777 to give full
34:27
access to everyone.
34:30
You know change mod 777. It gives
34:34
it full access to the read write access to
34:36
whatever you change mod it. That's
34:39
funny. Yeah, pretty good. I mean obviously when you
34:41
777. I may be the wrong
34:47
target market for this because I'm sort
34:49
of funny but also I'm thinking did did
34:51
bike locks really have three combinations? Three letters
34:54
or were there four? You're being
34:56
way too practical. Like four or six or something like
34:58
that. I
35:00
had a smartphone smart lock once and it was
35:02
awesome. You would hold your phone up to it
35:04
and it would unlock. I got it from my
35:06
electric bike before my knees decided electric biking wasn't
35:08
for me. One
35:11
time I was out biking with a friend and
35:13
I parked it in the summer in the
35:15
sun and like the electronics bit of it got
35:17
direct sunlight. It's black because it's a lock, right?
35:19
It got super hot. Like so hot you couldn't
35:21
hardly touch it but also so hot that like
35:23
the electronics wouldn't run. I couldn't unlock it. I
35:25
had to like put it in the shade for
35:27
an hour before I could go home. I was
35:29
so frustrated. I covered it with my shirt or something.
35:31
Just sat there till it cooled off so I could go
35:34
home. That's bad. Then also
35:36
I've seen like the
35:38
combination really kind of doesn't matter. It's how
35:40
thick the rest of the lock is. I
35:43
see people just come up with these
35:45
like battery powered just cutters
35:47
and just cut the lock off. Yeah
35:50
exactly. It's probably not the combination
35:52
but if you do have one
35:54
don't use 777 because clearly that's
35:57
gonna Just
35:59
fall right off if you did., It
36:01
yeah just go twenty to for some
36:03
examples they were both of thanks to
36:05
a lot of you get power back
36:07
to how soon thanks I hope so
36:09
too. Probably the the
36:12
power of people said I'll be to
36:14
David's never knew enough about it will
36:16
were getting better and really later by
36:18
that by. Run by Run.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More