WEBVTT

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

00:00:05.100 --> 00:00:11.320
This is episode 218, recorded January 27th, 2021. I'm Michael Kennedy.

00:00:11.320 --> 00:00:12.400
And I'm Brian Okken.

00:00:12.400 --> 00:00:15.160
And Brian, we have a special guest, Jeremy Tanner. Welcome, man.

00:00:15.160 --> 00:00:16.520
Thank you. Thank you for having me.

00:00:16.520 --> 00:00:21.360
Yeah, it's really great to have you here. You know, we've got to talk a little bit at conferences and stuff.

00:00:21.360 --> 00:00:28.660
And now that we just don't seem to have conferences in the world anymore, we're going to have to drag you into our world to actually get to catch up.

00:00:28.900 --> 00:00:32.560
It's good. I need a tiny bit of that Portland fix. I love being up there.

00:00:32.560 --> 00:00:35.260
But I mean, the entire Pacific Northwest, but Portland in particular.

00:00:35.260 --> 00:00:36.380
And so, yeah.

00:00:36.380 --> 00:00:37.260
So where are you at?

00:00:37.260 --> 00:00:38.840
I am in Austin, Texas.

00:00:38.840 --> 00:00:40.460
He's in the Portland of the South.

00:00:40.460 --> 00:00:42.160
I thought that was. Oh, yeah.

00:00:42.160 --> 00:00:45.580
Nice. All right. Well, maybe real quick.

00:00:45.580 --> 00:00:49.200
Tell us about yourself, Jeremy. People who don't know you.

00:00:49.200 --> 00:00:55.920
Absolutely. I like motorcycles. I like suede shoes. I like smoked meat like Python.

00:00:56.600 --> 00:01:11.100
I'm currently working in developer advocacy at Equinix Metal and living in Austin, Texas, raising two awesome tiny copies of myself and trying to sort of ride it out while the world is melting.

00:01:11.100 --> 00:01:12.460
I assume like everyone else is.

00:01:12.460 --> 00:01:27.380
Yeah. Yeah. You know, we share a lot of interests like you and I both do motorcycle riding and just a sidebar, like the ability to just jump out on a bike, get away, cruise through the mountains and just pull back into the garage and have, you know, somewhere outside of your four walls, a really cool experience.

00:01:27.380 --> 00:01:31.220
Like that's a neat thing to do when you're otherwise just stuck at home.

00:01:31.220 --> 00:01:34.580
It's we have there's so many like technology guardrails, right?

00:01:34.580 --> 00:01:40.340
Like turning your phone screen to grayscale so it'll be less enticing, turning off your notifications, whatever else.

00:01:40.340 --> 00:01:49.900
But the really nice thing about riding a motorcycle is the guardrails aren't there and you absolutely have to be paying full attention.

00:01:50.160 --> 00:01:52.740
So it's not all I'm also thinking about something else.

00:01:52.740 --> 00:01:54.140
You're like, well, do you not want to die?

00:01:54.140 --> 00:01:57.960
Then like watch the watch the road, be aware of everything.

00:01:57.960 --> 00:02:01.760
And so it forces everything to the background for however long you can manage it.

00:02:01.760 --> 00:02:08.560
Yeah, that's such an interesting idea of like, I'm just going to put the world out because I really have to focus on this situation, on this curvy road or whatever.

00:02:08.560 --> 00:02:09.020
Fantastic.

00:02:09.020 --> 00:02:12.320
All right. Well, Brian, I believe you have the first item.

00:02:12.320 --> 00:02:15.380
Something is this about laundry or what is up here?

00:02:16.240 --> 00:02:17.620
Constant folding, of course.

00:02:17.620 --> 00:02:18.280
Yeah. Laundry.

00:02:18.280 --> 00:02:22.640
Well, I do like the little the little animated sloth holding something.

00:02:22.640 --> 00:02:23.540
It's nice.

00:02:23.540 --> 00:02:29.540
No, I brought this up because so it's an interesting article about constant folding.

00:02:29.540 --> 00:02:38.180
So constant folding is when a language replaces your constant expressions at compile time rather than computing them at runtime.

00:02:38.180 --> 00:02:41.920
So say something like, you know, 24 times 60 or whatever.

00:02:41.920 --> 00:02:43.600
It'll just replace that.

00:02:44.020 --> 00:02:46.640
Wait, wait, wait. Let me, did you just say compiling?

00:02:46.640 --> 00:02:47.280
Yeah.

00:02:47.280 --> 00:02:49.700
Like when I, when I compile, like, what is that?

00:02:49.700 --> 00:02:51.800
GCP, PY, GPY.

00:02:51.800 --> 00:02:52.940
Like, how do I know?

00:02:52.940 --> 00:02:53.940
I mean, this is a misconception.

00:02:53.940 --> 00:02:57.720
I think a lot of people have is like languages like Python don't actually get compiled.

00:02:57.720 --> 00:02:58.280
They do.

00:02:58.280 --> 00:03:00.380
Well, there's the bytecode compiler, right?

00:03:00.380 --> 00:03:00.640
Yeah.

00:03:01.280 --> 00:03:08.660
And I, and that happens, I mean, for a lot of, I guess, if you just have a script that's just one file, that'll happen every time you run it.

00:03:08.660 --> 00:03:11.060
So that doesn't really, there's not really a pre thing.

00:03:11.060 --> 00:03:18.240
But if you've got an installed package or, or lots of stuff that gets run for a long time.

00:03:18.240 --> 00:03:18.640
Yeah.

00:03:18.640 --> 00:03:21.480
That bytecode will happen once bytecode conversion.

00:03:21.480 --> 00:03:22.220
What is that called?

00:03:22.220 --> 00:03:22.980
Is that compiling?

00:03:22.980 --> 00:03:23.480
I don't know.

00:03:23.480 --> 00:03:24.220
Yeah, I think so.

00:03:24.760 --> 00:03:26.740
But it just doesn't compile to machine instructions.

00:03:26.740 --> 00:03:29.040
It compiles a bytecode like Java or .NET.

00:03:29.040 --> 00:03:31.140
But then what happens is it doesn't JIT compile.

00:03:31.140 --> 00:03:32.580
It just interprets it from there on.

00:03:32.580 --> 00:03:32.800
Right.

00:03:32.800 --> 00:03:36.660
So, yeah, I think there's, there's levels, but it's automatic and hidden, which is cool.

00:03:36.660 --> 00:03:48.360
Well, CPython at the very least has this notion of constant folding where it just come, you know, comes up with your expressions and does it at, at the compile time instead.

00:03:48.360 --> 00:03:52.220
And it's something that I really don't think, like, I don't really think about in Python.

00:03:52.220 --> 00:03:54.380
I definitely think, I know what's happening.

00:03:54.720 --> 00:03:59.060
In, in C, in C++, we got the precompiler going on.

00:03:59.060 --> 00:04:02.080
But the, it does happen and you can see it in action.

00:04:02.080 --> 00:04:04.780
And this, this article talks about it.

00:04:04.780 --> 00:04:15.020
You can use the disassembler to disassemble a bit of Python code and see what it would look like outside of, you know, after the conversion.

00:04:15.760 --> 00:04:25.280
And so something like, you know, if, if you recommend, one of the examples was the days in seconds is 24 times 60 times 60.

00:04:25.520 --> 00:04:30.300
And, and then it, the Python will just convert that to, what is it?

00:04:30.420 --> 00:04:31.540
86, 400.

00:04:31.540 --> 00:04:31.980
Yeah.

00:04:31.980 --> 00:04:33.820
Now the, I'm bringing this up.

00:04:33.820 --> 00:04:37.820
Like one of the things, this is kind of an interesting article about really how it does it.

00:04:37.900 --> 00:04:44.800
And the rest of the article kind of goes into, you know, the implementation on CPython of how the folding happens.

00:04:44.800 --> 00:04:46.140
And that's interesting.

00:04:46.640 --> 00:04:50.960
But mostly the reason why I brought this up is because I want people to remember that this happens.

00:04:50.960 --> 00:05:00.000
So if like for this example, it is way better to put in your code days in seconds equals 24 times 60 times 60.

00:05:00.000 --> 00:05:01.220
That's really clear.

00:05:01.220 --> 00:05:04.560
You don't really have to comment it much because people can just look at it.

00:05:04.560 --> 00:05:10.180
But if you were to manually replace that with 86, 400, it's suddenly a magic number then.

00:05:10.180 --> 00:05:14.260
And people won't, you know, in the future, you'll be like, where did this number come from?

00:05:14.260 --> 00:05:15.440
What happens if I change it?

00:05:15.600 --> 00:05:17.000
It's going to muck everything up.

00:05:17.000 --> 00:05:19.740
So I think things like this are great.

00:05:19.740 --> 00:05:20.740
I use it.

00:05:20.740 --> 00:05:25.040
It talks about, it's not just math expressions, things like string expressions too.

00:05:25.040 --> 00:05:35.740
So you can, you know, if you're going to do a, you know, 30 different dash marks to print across the screen, you can say like dash, you know, the dash character times 30.

00:05:35.740 --> 00:05:39.420
And Python will just convert that for you at bytecode time.

00:05:39.420 --> 00:05:40.960
Yeah.

00:05:40.960 --> 00:05:41.460
Yeah.

00:05:41.460 --> 00:05:41.860
Very cool.

00:05:41.860 --> 00:05:45.540
I just checked it for strings and yeah, it definitely says, you know,

00:05:45.560 --> 00:05:50.000
the final result of the calculation of a bunch of constants involving strings is the answer.

00:05:50.000 --> 00:05:56.300
And you know, the benefit is if it's always going to be the same outcome, why compute it every time you run that function or do an import?

00:05:56.300 --> 00:05:56.800
Yeah.

00:05:56.820 --> 00:06:07.060
And there's some size optimization that happens that Python realizes that some things are so in the article talks about some of the constraints.

00:06:07.060 --> 00:06:16.760
So if you, if you end up with like, you know, a 4,000 character string after doing it, or, you know, I think they found the limit was it'll go up to 4096.

00:06:16.760 --> 00:06:21.280
But if you make it 4097, it doesn't do the folding at that point.

00:06:21.680 --> 00:06:23.220
I don't think you have to memorize it.

00:06:23.220 --> 00:06:23.280
I don't think you have to memorize that.

00:06:23.280 --> 00:06:31.160
I just know that Python does has some optimization where it says if the pre-computed value is too big, then don't worry about pre-compute and do it at runtime.

00:06:31.160 --> 00:06:31.600
Yeah.

00:06:31.600 --> 00:06:32.000
Yeah.

00:06:32.000 --> 00:06:32.680
It makes a lot of sense.

00:06:32.920 --> 00:06:33.120
Perfect.

00:06:33.120 --> 00:06:33.960
I like it.

00:06:33.960 --> 00:06:38.640
And you know, it's another cool chance to just play with the disassembler and understand that a little bit better.

00:06:38.640 --> 00:06:40.420
Jeremy, you ever play with disassemble things?

00:06:40.420 --> 00:06:52.040
No, but was appreciated that the, it was a way to avoid a little of the magic number disaster where Head looked back and reviewed a bunch of, I think it was physics code.

00:06:52.280 --> 00:07:02.220
And so often there will be like, oh, if you're a, if you're a domain expert and you're like, and you're familiar with nuclear reactors, then yeah, you'll, you'll know, you'll know why these pieces are here.

00:07:02.220 --> 00:07:04.680
I, please name them things.

00:07:04.680 --> 00:07:05.660
Yes, exactly.

00:07:05.660 --> 00:07:10.180
Here's the number of moles of, or whatever in chemistry.

00:07:10.180 --> 00:07:11.660
Like it, it doesn't make any sense, right?

00:07:11.660 --> 00:07:14.560
So if you kind of do a calculation, but you don't have to pay for the calculation.

00:07:14.560 --> 00:07:15.800
That's, that's really nice.

00:07:15.800 --> 00:07:23.060
I used to do this all the time with the days and seconds, like the seconds and days, because what I would do is I would go to like a date time.

00:07:23.060 --> 00:07:26.720
I would say date time dot total seconds divided by seconds and days.

00:07:26.720 --> 00:07:40.400
Well, that's how many days it is until Paul was on talk Python, the guy behind the daytime stuff and says, do you know, you can go to a time Delta and say it has days equal one and then divide the date time.

00:07:40.400 --> 00:07:42.420
Another time Delta by days equals one.

00:07:42.420 --> 00:07:43.880
And it'll tell you the same answer.

00:07:43.880 --> 00:07:44.900
Like, that's just crazy.

00:07:45.160 --> 00:07:48.200
I, I didn't know how was I supposed to know I could do that.

00:07:48.200 --> 00:07:50.900
So, but yeah, this is definitely a cool one.

00:07:50.900 --> 00:07:53.700
And the disassembler is neat to really understand what's happening.

00:07:53.700 --> 00:08:01.540
Like these little constants, you know, load const, store name, load const, just get fed straight through this huge C eval.c switch loop.

00:08:01.540 --> 00:08:02.800
And that's your program.

00:08:02.800 --> 00:08:03.300
All right.

00:08:03.300 --> 00:08:14.660
One of the things I want to bring up is that these are fun little tiny examples of using the disassembler, which is a fun thing to do because when you, and if you're trying to do a larger function and disassemble it,

00:08:14.760 --> 00:08:20.200
it's going to be more complicated, but it's kind of fun to look at the output of the disassembler.

00:08:20.200 --> 00:08:20.540
Yeah.

00:08:20.540 --> 00:08:20.980
Yeah.

00:08:20.980 --> 00:08:21.000
Yeah.

00:08:21.000 --> 00:08:21.360
Definitely.

00:08:21.360 --> 00:08:22.580
It gives you that inside view.

00:08:22.580 --> 00:08:23.140
All right.

00:08:23.140 --> 00:08:24.340
I stole this from you, Brian.

00:08:24.340 --> 00:08:25.080
It's a good one.

00:08:25.080 --> 00:08:25.920
It's a good one.

00:08:26.360 --> 00:08:31.940
So this one is called pip review and pip review is really cool.

00:08:32.080 --> 00:08:41.480
I learned about this from PI coders, the newsletter and the idea is that updating all of your packages that you've got in a virtual environment is a hassle in various ways.

00:08:41.480 --> 00:08:48.320
One way is I could just not set, you know, I could not pin the version numbers and just install the latest.

00:08:48.320 --> 00:08:48.700
Right.

00:08:48.740 --> 00:08:52.960
But then if I try to reinstall, it just says, you know, those are, those are up to date.

00:08:52.960 --> 00:08:53.780
Maybe I see.

00:08:53.780 --> 00:08:56.780
Oh, I know that there's an update for HTTP X.

00:08:56.780 --> 00:08:59.680
I'll do a pip install dash you pip X, right?

00:08:59.680 --> 00:09:04.100
Upgrade and it'll upgrade it, but it won't upgrade the things that pip X installed.

00:09:04.260 --> 00:09:07.280
Even if I ask pip X to upgrade itself, you know what I mean?

00:09:07.280 --> 00:09:12.040
So there's like this, the dependencies of the dependencies and all that become just a hassle.

00:09:12.040 --> 00:09:20.260
So there's this thing called a pip review, which lets you smoothly see all the available updates and then apply those.

00:09:20.260 --> 00:09:25.480
This used to be part of tools, but it's now its own standalone thing that just directly uses pip.

00:09:25.480 --> 00:09:29.940
So like all good things, you pip install pip review, which is very meta.

00:09:29.940 --> 00:09:31.200
And then you have pip review.

00:09:31.580 --> 00:09:37.860
And then you can just ask it to do things like just run pip dash review on the, on the command prompt terminal.

00:09:37.860 --> 00:09:40.480
And it'll tell you, you've got this version of this library.

00:09:40.480 --> 00:09:41.500
There's a new one available.

00:09:41.500 --> 00:09:45.020
And that's pretty much equivalent to doing pip list dash outdated.

00:09:45.020 --> 00:09:47.780
But then you can also just say, and fix it.

00:09:47.780 --> 00:09:52.480
So pip dash review --auto, which will just find all the things out of date and update them,

00:09:52.480 --> 00:09:56.580
including the dependency of the dependency of the dependency, which is pretty awesome.

00:09:56.580 --> 00:09:59.020
It'll also let you do this in an interactive way.

00:09:59.020 --> 00:10:02.300
So you can say --interactive and it'll say, this is out of date.

00:10:02.300 --> 00:10:02.980
Do you want to upgrade it?

00:10:02.980 --> 00:10:03.520
Yes or no.

00:10:03.520 --> 00:10:04.500
NumPy is out of date.

00:10:04.500 --> 00:10:05.140
Do you want to update it?

00:10:05.140 --> 00:10:06.080
Pandas is out of date.

00:10:06.080 --> 00:10:06.840
Do you want to update it?

00:10:06.840 --> 00:10:07.300
And so on.

00:10:07.300 --> 00:10:09.540
And you can selectively opt into those.

00:10:09.540 --> 00:10:15.100
And then you can even come up with a constants file that says, you know, please don't update these automatically.

00:10:15.100 --> 00:10:19.020
They're stuck in an old version for whatever reason, into a certain version.

00:10:19.180 --> 00:10:19.600
What do you guys think?

00:10:19.600 --> 00:10:22.600
I hear NumPy and Pandas and Matplotlib.

00:10:22.600 --> 00:10:25.260
And it's all the flashbacks, right?

00:10:25.260 --> 00:10:30.460
I think we met in before time when I was an anaconda.

00:10:30.460 --> 00:10:37.800
And so, I mean, since this certainly looks interesting and solving problems.

00:10:38.180 --> 00:10:44.780
But on my end, still very much, especially for scientific Python bits, a conda loyalist.

00:10:44.780 --> 00:10:45.660
Yeah, yeah.

00:10:45.660 --> 00:10:46.240
Of course.

00:10:46.240 --> 00:10:50.320
Both for package management and for environment management.

00:10:50.320 --> 00:10:50.680
Yeah.

00:10:50.680 --> 00:10:52.140
That's a whole different side of things.

00:10:52.140 --> 00:10:55.400
And, you know, conda definitely managed that quite a bit, right?

00:10:55.440 --> 00:11:01.800
Like, it's all about you can open up your navigator and create your environments and interact with those in that way as well.

00:11:01.800 --> 00:11:08.460
So, yeah, I think this probably applies more to if you're just doing straight pip or maybe you're thinking, well, pip env or whatever.

00:11:08.460 --> 00:11:12.720
The other alternative would be to use something like Dependabot where it finds those changes.

00:11:12.720 --> 00:11:13.980
You pin your version.

00:11:13.980 --> 00:11:16.480
It says there's now a new version and then it upgrades it.

00:11:16.480 --> 00:11:18.720
But that's always going through like some external workflow.

00:11:18.720 --> 00:11:20.740
And this is just like, well, I don't want to go through that.

00:11:20.740 --> 00:11:24.360
I just want to right now find the new stuff and change it or don't.

00:11:24.360 --> 00:11:35.200
Yeah, I tried this out on a project of mine that uses, you know, Flit and the PyProject.tomal to define a couple pinned versions of things.

00:11:35.200 --> 00:11:37.480
So I wanted to check to see if they're out of date.

00:11:37.480 --> 00:11:41.360
And I tried the pip review auto to just auto update them.

00:11:41.360 --> 00:11:52.740
And now that pip has this dependency resolver, it noticed that my project had some pinned and it said there is a new version, but there's a conflict with your project.

00:11:53.120 --> 00:11:56.520
So just be aware you need to figure out that conflict on your own.

00:11:56.520 --> 00:11:57.340
Oh, interesting.

00:11:57.340 --> 00:11:57.960
Okay.

00:11:57.960 --> 00:11:58.320
That's nice.

00:11:58.320 --> 00:11:58.780
Yeah.

00:11:58.780 --> 00:11:59.160
Yeah.

00:11:59.160 --> 00:11:59.560
Very nice.

00:11:59.560 --> 00:11:59.960
Yeah.

00:11:59.960 --> 00:12:02.780
I've recently run into some issues with the resolver and the new.

00:12:02.780 --> 00:12:03.120
Yeah.

00:12:03.120 --> 00:12:03.820
We've gone over that.

00:12:03.820 --> 00:12:05.000
Nice.

00:12:05.000 --> 00:12:05.380
All right.

00:12:05.380 --> 00:12:07.380
Jeremy, what's your first one?

00:12:07.380 --> 00:12:08.040
Keyboards.

00:12:08.040 --> 00:12:09.200
My first one is keyboards.

00:12:09.200 --> 00:12:14.380
And so I have fallen well down the mechanical keyboard rabbit hole.

00:12:14.380 --> 00:12:17.920
You want a loud clackety clackety clack version?

00:12:19.620 --> 00:12:20.840
Just like such.

00:12:20.840 --> 00:12:21.200
Yes.

00:12:21.200 --> 00:12:27.320
So I suppose the Python tie in is, first of all, like, yes, your keyboard is probably the

00:12:27.320 --> 00:12:30.440
way that the bulk of the Python gets into your computer.

00:12:30.440 --> 00:12:35.820
And so as much as we would like to just plug up Jack straight into the brain and think code,

00:12:35.820 --> 00:12:36.920
it doesn't work that way yet.

00:12:37.420 --> 00:12:38.440
So it makes sense.

00:12:38.440 --> 00:12:43.340
So I've fallen into mechanical keyboards mostly to try and get my wrists to be less hurdy.

00:12:43.340 --> 00:12:47.840
I suppose for our viewers who are watching with their ears in the future, the listeners,

00:12:47.840 --> 00:12:50.600
if this is on audio, I've just shown you my hands.

00:12:50.600 --> 00:12:54.440
I may show you keyboards, but I'll have to remember to describe those.

00:12:54.440 --> 00:12:55.500
That's right.

00:12:55.500 --> 00:13:03.000
But I have started to really love mechanical keyboards for ergonomic improvements and ability

00:13:03.000 --> 00:13:07.780
to sort of restructure the way that they work for my benefit.

00:13:07.780 --> 00:13:13.080
Most of the keyboards that you'll see connected to computers are using that are like a flat bar

00:13:13.080 --> 00:13:13.480
shape.

00:13:13.480 --> 00:13:17.220
Use QWERTY, which actually dates back to...

00:13:17.220 --> 00:13:17.720
Everything wrong.

00:13:17.720 --> 00:13:19.440
Everything wrong that you could do, right?

00:13:19.440 --> 00:13:20.440
Are you...

00:13:20.440 --> 00:13:23.440
Do you know when QWERTY came into usage?

00:13:23.940 --> 00:13:24.240
Yeah.

00:13:24.240 --> 00:13:25.500
I mean, very clackety, right?

00:13:25.500 --> 00:13:26.340
For the...

00:13:26.340 --> 00:13:27.980
To slow down the typewriter.

00:13:27.980 --> 00:13:28.600
Yeah.

00:13:28.600 --> 00:13:29.380
But in...

00:13:29.380 --> 00:13:30.600
It was in 1873.

00:13:30.600 --> 00:13:32.080
And so like Civil War era.

00:13:32.080 --> 00:13:34.100
Like back in a...

00:13:34.100 --> 00:13:34.600
Back in...

00:13:34.600 --> 00:13:37.240
I mean, within 10 years of the first American Civil War.

00:13:37.240 --> 00:13:45.900
So when we were still like settling our disputes with like swords on horses and so on.

00:13:45.900 --> 00:13:48.240
And just like there's always a...

00:13:48.240 --> 00:13:49.940
Continues to be a better way of doing things.

00:13:49.940 --> 00:13:51.960
And we keep on working towards the better way.

00:13:52.260 --> 00:13:56.880
Like the layout of keyboards is sort of a vestige of a pastime with different requirements.

00:13:56.880 --> 00:13:58.800
Kind of like wearing pants now, right?

00:13:58.800 --> 00:14:01.000
Like you used to be going out and seeing people now.

00:14:01.000 --> 00:14:02.120
Shorts.

00:14:02.120 --> 00:14:02.380
Yeah.

00:14:02.380 --> 00:14:03.400
Let the shins breathe.

00:14:03.400 --> 00:14:04.100
Exactly.

00:14:04.100 --> 00:14:04.740
Exactly.

00:14:04.960 --> 00:14:07.120
So anyway, like with the...

00:14:07.120 --> 00:14:11.400
What's useful on the keyboards is in addition to getting ergonomic benefits, you can change

00:14:11.400 --> 00:14:12.180
up your key map.

00:14:12.180 --> 00:14:18.340
Normal keyboards have maybe 100 keys on them or so, but they really have 200, maybe 300 keys.

00:14:18.340 --> 00:14:19.820
You have modifier keys.

00:14:19.820 --> 00:14:22.520
You push shift and you're like, okay, now all those keys are now...

00:14:22.520 --> 00:14:24.120
All the letter keys are now capitals.

00:14:24.120 --> 00:14:26.860
The one is an exclamation point and so on.

00:14:27.600 --> 00:14:32.560
And taking key maps are the ways that you can take and change those keys to whatever...

00:14:32.560 --> 00:14:32.560
Right.

00:14:32.560 --> 00:14:34.320
For example, if you wanted to do...

00:14:34.320 --> 00:14:34.540
Yeah.

00:14:34.540 --> 00:14:39.180
If you want to say switch to Dvorak or something along those lines, right?

00:14:39.180 --> 00:14:43.840
I had a friend who taught himself Dvorak, but seeing the Cordy keys was so impossible for

00:14:43.840 --> 00:14:43.960
him.

00:14:43.960 --> 00:14:48.160
He shaved all of the letters off of his keyboard because it was either easier to have nothing

00:14:48.160 --> 00:14:49.480
rather than have the wrong thing there.

00:14:49.720 --> 00:14:51.920
That's sort of what's going on over here.

00:14:51.920 --> 00:14:52.920
This is a...

00:14:52.920 --> 00:14:53.620
Oh, look at that.

00:14:53.620 --> 00:14:53.920
A TRIUS.

00:14:53.920 --> 00:14:56.640
A 44 key split.

00:14:56.640 --> 00:14:57.240
Okay.

00:14:57.240 --> 00:14:58.380
You got to describe that to people.

00:14:58.380 --> 00:14:59.500
First of all, what is that?

00:14:59.500 --> 00:15:06.420
So a company, Keyboardio, just keyboard.io, has made a...

00:15:06.420 --> 00:15:07.720
I think a gentleman in the...

00:15:07.720 --> 00:15:08.000
Yes.

00:15:08.000 --> 00:15:11.000
Pacific Northwest also made a hand-wired version of this.

00:15:11.000 --> 00:15:18.480
Jesse and Kaya at Keyboardio made a mass market version that's manufactured that instead

00:15:18.480 --> 00:15:23.160
of soldering everything together and ordering the pieces, you can just get a completed keyboard,

00:15:23.160 --> 00:15:24.420
which is very nice.

00:15:24.420 --> 00:15:25.180
Yeah.

00:15:25.180 --> 00:15:30.060
And so for this keyboard, you're going to operate largely with layers.

00:15:30.060 --> 00:15:33.200
And so you don't see as many symbols or numbers here.

00:15:33.200 --> 00:15:39.780
And so when you hold down maybe super or function, it's going to change one of the sides to arrows,

00:15:39.780 --> 00:15:46.500
change one of the sides to a number pad, change one of the other sides to the symbols,

00:15:46.740 --> 00:15:49.560
exclamation point, at symbol, asterisk.

00:15:49.560 --> 00:15:54.800
And instead of reaching and twisting like you might on a normal keyboard, where every

00:15:54.800 --> 00:15:59.080
time we thought of a new thing, you're like, oh, the hash symbol, that's going to need to

00:15:59.080 --> 00:15:59.480
go somewhere.

00:15:59.480 --> 00:15:59.780
All the other stuff.

00:15:59.780 --> 00:16:00.020
Yeah.

00:16:00.020 --> 00:16:03.260
Well, you need to add it on and the keyboard keeps growing.

00:16:03.260 --> 00:16:05.940
Here, your hands stay in about the same position.

00:16:06.300 --> 00:16:14.480
But when you put your ring finger down on the home row, of your left hand, the entire right

00:16:14.480 --> 00:16:16.060
side changes to different keys.

00:16:16.060 --> 00:16:22.700
And so the way that I suppose the Python tie in there is that most of these keyboard firmwares

00:16:22.700 --> 00:16:28.360
are written in C because you have the little microcontrollers under that's telling what keys

00:16:28.360 --> 00:16:28.880
what to be.

00:16:28.880 --> 00:16:31.100
But there are Python portions.

00:16:31.100 --> 00:16:37.500
And so the command line interface that QMK, this project on GitHub, quantum mechanical

00:16:37.500 --> 00:16:41.980
keyboard uses, is written in Python.

00:16:41.980 --> 00:16:46.500
Some of the tools that your key maps are sort of always in flux.

00:16:46.500 --> 00:16:51.000
And so you can evaluate the ways that you're using your keyboard.

00:16:51.320 --> 00:16:56.200
So Python can help out there to help you make a heat map of, OK, which keys am I pressing

00:16:56.200 --> 00:16:56.840
most frequently?

00:16:56.840 --> 00:16:59.740
Let me move those to a stronger finger.

00:16:59.740 --> 00:17:06.880
And again, because we're sort of home in quarantine, pandemic time, it's fun to have this sort of

00:17:06.880 --> 00:17:09.180
escape room to get yourself out of.

00:17:09.180 --> 00:17:12.780
And there's a little bit of a challenge to remember where that new key is.

00:17:12.780 --> 00:17:14.080
Or even assembling.

00:17:14.080 --> 00:17:20.020
You've got key caps coming from one place and trying to find out what new features you might

00:17:20.020 --> 00:17:22.380
be able to pull down in the firmware from GitHub on another.

00:17:22.380 --> 00:17:25.080
And folks are making different designs.

00:17:25.080 --> 00:17:26.860
You can go with split hand boards.

00:17:26.860 --> 00:17:29.960
There we can center that up into the interview.

00:17:29.960 --> 00:17:36.760
This is, for those who are listening, RGB, KB, Sol, the sun.

00:17:36.760 --> 00:17:39.940
You basically have two separate pieces.

00:17:39.940 --> 00:17:41.180
Oh, and it has LEDs.

00:17:41.180 --> 00:17:41.760
Beautiful.

00:17:41.760 --> 00:17:46.320
So you have two chunks, one for each hand, and you can position them however it fits for

00:17:46.320 --> 00:17:46.640
you, OK?

00:17:46.640 --> 00:17:47.120
Yeah.

00:17:47.160 --> 00:17:51.440
And so it can open up your shoulders, open up your upper body a little bit.

00:17:51.440 --> 00:17:53.300
Hopefully make your wrists less hurdy.

00:17:53.300 --> 00:17:54.180
Was the...

00:17:54.180 --> 00:17:54.540
Yeah.

00:17:54.540 --> 00:17:55.280
Well, I used to...

00:17:55.280 --> 00:17:57.180
I've struggled for...

00:17:57.180 --> 00:17:59.720
Man, I got to do math for 20 years, maybe.

00:17:59.720 --> 00:18:01.940
15 years with RSI issues.

00:18:02.300 --> 00:18:02.820
And it's...

00:18:02.820 --> 00:18:06.500
I mean, it was to the point where I had surgery on my right hand for carpal tunnel stuff.

00:18:06.500 --> 00:18:08.140
And I thought, man, what am I going to do?

00:18:08.140 --> 00:18:09.100
I did physical therapy.

00:18:09.100 --> 00:18:10.640
It was really quite scary, actually.

00:18:10.640 --> 00:18:11.680
And I just...

00:18:11.680 --> 00:18:12.760
What I did, two things.

00:18:12.760 --> 00:18:16.980
I got a much, much better, more ergonomical keyboard and only use that.

00:18:16.980 --> 00:18:21.000
Like, I never type on my laptop because that thing is a kiss of death for my hands.

00:18:21.000 --> 00:18:23.140
And the other one is I force my...

00:18:23.140 --> 00:18:23.660
I'm right-handed.

00:18:23.800 --> 00:18:26.120
I force myself to become left-handed for mousing.

00:18:26.120 --> 00:18:29.840
Because I use my right hand for the arrows and page down and insert and all that.

00:18:29.840 --> 00:18:31.460
And I figure it's already doing all that stuff.

00:18:31.460 --> 00:18:32.040
Might as well.

00:18:32.040 --> 00:18:33.360
Do you use one of the sideways?

00:18:33.360 --> 00:18:37.300
I cannot find a good sideways left-handed one.

00:18:37.300 --> 00:18:38.360
Oh, that's...

00:18:38.360 --> 00:18:39.580
It's so super hard.

00:18:39.580 --> 00:18:40.300
That's going to be tricky.

00:18:40.300 --> 00:18:40.920
Yes.

00:18:40.920 --> 00:18:43.920
I could either go vertical or I could go left-handed.

00:18:43.920 --> 00:18:46.060
And left-handed is working super well for me.

00:18:46.840 --> 00:18:51.320
But I'm using the little Microsoft ergonomic travel.

00:18:51.320 --> 00:18:52.160
And I love that.

00:18:52.160 --> 00:18:53.160
This thing goes with me everywhere.

00:18:53.160 --> 00:18:54.580
I don't go anywhere without it.

00:18:54.580 --> 00:18:55.240
So, yeah.

00:18:55.240 --> 00:18:56.120
The best way to fix it...

00:18:56.120 --> 00:18:56.840
That's an important thing.

00:18:56.840 --> 00:18:57.360
You're good.

00:18:57.360 --> 00:19:00.120
The best way to fix it is to touch your computer less.

00:19:00.120 --> 00:19:02.820
But if that's not an option.

00:19:02.820 --> 00:19:07.300
So, I mean, the other things that have beat my hands up and I'm trying to be better about

00:19:07.300 --> 00:19:11.640
are if you hold your phone and you just scroll and you scroll some more and you scroll

00:19:11.640 --> 00:19:11.980
some more.

00:19:11.980 --> 00:19:13.420
You can do it with your left hand instead.

00:19:13.420 --> 00:19:17.260
Or you can try and not look into the abyss so often.

00:19:17.260 --> 00:19:17.700
Yeah.

00:19:17.700 --> 00:19:19.840
I've used voice typing.

00:19:19.840 --> 00:19:20.360
Go ahead, Brian.

00:19:20.360 --> 00:19:23.900
Doing a lot of less doom scrolling now than I used to.

00:19:23.900 --> 00:19:25.380
So, things are less crazy.

00:19:25.380 --> 00:19:26.760
Brian, what have you got for your setup?

00:19:26.760 --> 00:19:29.620
Do you just type on your MacBook or you got something better?

00:19:29.620 --> 00:19:30.140
Me?

00:19:30.140 --> 00:19:30.640
Yeah.

00:19:30.640 --> 00:19:31.920
Oh, Kinesis.

00:19:31.920 --> 00:19:33.020
Oh, my gosh.

00:19:33.020 --> 00:19:35.060
You are full on over there, dude.

00:19:35.060 --> 00:19:36.320
A Kinesis one.

00:19:36.320 --> 00:19:37.020
Dishes.

00:19:37.020 --> 00:19:37.520
Yeah.

00:19:37.520 --> 00:19:43.400
So, I've been using Kinesis for like 30 years.

00:19:43.400 --> 00:19:44.480
25 years.

00:19:44.480 --> 00:19:45.100
Wow.

00:19:45.100 --> 00:19:47.460
And similar.

00:19:47.460 --> 00:19:54.120
I had problems with my arms and I was just like a couple of years into my career and I'm

00:19:54.120 --> 00:19:54.900
like, oh, my God.

00:19:54.900 --> 00:19:57.860
I finally get a programming job and I can't do it anymore.

00:19:57.860 --> 00:20:03.880
So, but I switched to the left-handed mouse and now I don't even think about it.

00:20:03.880 --> 00:20:06.900
Some people say like, I don't like switch the mappings.

00:20:06.900 --> 00:20:08.320
I don't switch the left to right.

00:20:08.380 --> 00:20:11.220
I just move the mouse over and use it with my left hand.

00:20:11.220 --> 00:20:12.900
And then also the Kinesis.

00:20:12.900 --> 00:20:18.740
And then when the whole like mechanical keyboard thing started, people were talking about that.

00:20:18.740 --> 00:20:20.380
Like, what's all this about?

00:20:20.380 --> 00:20:24.620
And then I found out that the Kinesis has been mechanical for since it started.

00:20:25.040 --> 00:20:25.440
Yeah.

00:20:25.440 --> 00:20:26.180
Yeah.

00:20:26.180 --> 00:20:26.320
Yeah.

00:20:26.320 --> 00:20:28.780
Kinesis is definitely, definitely an interesting one.

00:20:28.780 --> 00:20:37.920
Although I think I want to get a new one because the key, whatever the mechanics and behind it are the wrong color or something.

00:20:37.920 --> 00:20:44.600
I want to get ones that I have to push down a little harder because I find that I rest my hands on my keyboard and it'll start typing stuff.

00:20:44.600 --> 00:20:49.020
So, I'd like to have it be more hard to push down.

00:20:49.300 --> 00:20:51.320
I think there's probably three things that you can do.

00:20:51.320 --> 00:20:54.740
You can either crack your switches open and put in heavier springs.

00:20:54.740 --> 00:21:00.060
You can go with a, you can get a key switch puller and pull out the switches and plug in.

00:21:00.060 --> 00:21:04.420
Depends if they're hot swappable or if they're soldered down into the board.

00:21:04.420 --> 00:21:07.720
And so, I'm not certain how that one's constructed.

00:21:07.720 --> 00:21:17.280
But oftentimes when there's a, if there's a greater investment in getting the board in the first place, like the ErgoDox ones are hot swappable.

00:21:17.280 --> 00:21:24.300
So, you can take a puller and I have, not in front of me, but over and over in a bin, different key switches that I've tried.

00:21:24.300 --> 00:21:29.620
Some that are quieter, some that are louder, some that are heavier, some that are really light.

00:21:29.800 --> 00:21:33.560
Yeah, eventually you figure out sort of the Goldilocks situation.

00:21:33.560 --> 00:21:39.900
And instead of a keyboard that's made for, to sell millions and millions of units, you've got one that maybe are out of billions of people.

00:21:39.900 --> 00:21:42.520
There's maybe three like it that are just like yours.

00:21:42.520 --> 00:21:43.780
Fantastic.

00:21:43.780 --> 00:21:44.300
Yeah.

00:21:44.300 --> 00:21:50.640
Magnus Carlson, Magnus Carlson says, he has an old ErgoDox over in the corner.

00:21:50.640 --> 00:21:51.740
Right on, right on.

00:21:51.740 --> 00:21:52.680
Why is it in the corner?

00:21:52.680 --> 00:21:53.880
Don't put baby in the corner.

00:21:53.880 --> 00:21:56.640
Desk, get those, love those wrists.

00:21:56.780 --> 00:21:57.340
Yeah, yeah.

00:21:57.340 --> 00:22:01.080
The one that I love, the thing I love about this one is it has such short keystrokes.

00:22:01.080 --> 00:22:07.780
Like you barely have to move your fingers, which to me, a lot of these really nice ergonomic ones, I feel like you've got to move them a lot, which I don't know.

00:22:07.780 --> 00:22:08.720
It's always a balance.

00:22:08.720 --> 00:22:11.460
This one works well for me, but all of these things are super fascinating.

00:22:11.460 --> 00:22:12.020
Yeah.

00:22:12.020 --> 00:22:15.200
There's switches with adjustable travel.

00:22:15.200 --> 00:22:22.140
And so, you can cut probably more than a millimeter out of it going from two down to either one or maybe even 0.8.

00:22:22.140 --> 00:22:22.900
Oh, wow.

00:22:23.100 --> 00:22:26.520
So, you can tune it exactly to what you're after.

00:22:26.520 --> 00:22:28.020
I tried yours, Michael.

00:22:28.020 --> 00:22:32.140
I have one of those, whatever that you've got.

00:22:32.140 --> 00:22:32.500
Yeah.

00:22:32.500 --> 00:22:34.740
Sculpt ergonomic or whatever it's called.

00:22:34.740 --> 00:22:39.240
But it's a Bluetooth one and I can't do Bluetooth keyboards.

00:22:39.240 --> 00:22:41.420
The Bluetooth delay gets me.

00:22:41.420 --> 00:22:45.860
You'd think that I wouldn't be able to notice, but I notice and I don't like it.

00:22:45.860 --> 00:22:46.060
Yeah.

00:22:46.060 --> 00:22:46.440
Yeah.

00:22:46.500 --> 00:22:48.900
Wouldn't it be nice if you could buy keyboards, wires?

00:22:48.900 --> 00:22:53.180
And then I suppose we didn't talk about mousing either.

00:22:53.180 --> 00:22:54.900
We talked about like the actual device.

00:22:54.900 --> 00:23:03.360
But in QMK, that firmware and other keyboard firmwares, if you hold down a button, the other side of your keyboard can become a mouse.

00:23:03.460 --> 00:23:09.320
And so, both any of your keyboard keys can make it travel diagonally or up and down or can be used as click.

00:23:09.320 --> 00:23:17.900
And so, you can replace your, especially for traveling, you can replace your mouse with being able to navigate, move the mouse around with the keyboard.

00:23:17.900 --> 00:23:18.640
Sounds awesome.

00:23:18.640 --> 00:23:23.740
If you could ever fly again, I could see setting a little laptop on like the little fold down tray.

00:23:23.980 --> 00:23:26.680
Put that keyboard on top and you're good to actually get some stuff done.

00:23:26.680 --> 00:23:27.140
All right.

00:23:27.140 --> 00:23:31.500
Now, before we get on to the next item, let me tell you all about our sponsor for this week, Datadog.

00:23:31.500 --> 00:23:33.840
Thank you, Datadog, for sponsoring the show.

00:23:33.840 --> 00:23:41.920
If you're having trouble visualizing latency or CPU or memory bottlenecks in your apps and you're not sure where it's coming from or how to solve it, check out Datadog.

00:23:41.920 --> 00:23:48.860
They seamlessly correlate logs and traces across individual requests and you can quickly troubleshoot your Python app.

00:23:49.040 --> 00:23:56.200
Plus, their continuous profiler allows you to find the most memory and CPU consuming parts of your production code continuously.

00:23:56.200 --> 00:23:57.680
Just run it all the time.

00:23:57.680 --> 00:23:58.580
Minimum overhead.

00:23:58.580 --> 00:23:59.160
Pretty awesome.

00:23:59.160 --> 00:24:01.860
You'll be the hero that got that app back on track at your company.

00:24:01.860 --> 00:24:07.960
Get started today with a free trial at pythonbytes.fm/Datadog or just click the link in your podcast player show notes.

00:24:07.960 --> 00:24:10.220
Brian, let's talk about logos.

00:24:10.220 --> 00:24:10.820
Sure.

00:24:10.820 --> 00:24:16.120
I tried to pull this up, but we're suffering some downtime.

00:24:16.120 --> 00:24:16.620
There we go.

00:24:16.620 --> 00:24:17.280
There we go.

00:24:17.840 --> 00:24:22.120
So there's an article called Reinventing the Python Logo.

00:24:22.120 --> 00:24:26.600
And I thought it was interesting mostly about the history.

00:24:26.600 --> 00:24:29.260
I guess I hadn't thought about it too much.

00:24:29.260 --> 00:24:33.780
So the history really is there have been only two Python logos.

00:24:33.780 --> 00:24:42.180
The original one, which I'm not sure when that came into existence, but it's just sort of some, it looks like a bunch of marshmallows stuck together or something.

00:24:42.180 --> 00:24:44.240
It's not terrible.

00:24:44.240 --> 00:24:45.000
It doesn't look like marshmallows.

00:24:45.000 --> 00:24:46.640
I get light bright vibes.

00:24:46.640 --> 00:24:47.540
Light bright.

00:24:47.540 --> 00:24:48.820
Oh, yeah, yeah, yeah.

00:24:48.820 --> 00:24:49.280
You're right.

00:24:49.280 --> 00:24:49.760
Yeah.

00:24:49.760 --> 00:24:56.260
So it's like white dots and with like black dots around the outside making the Python word.

00:24:56.260 --> 00:24:57.400
And they're like, that's it.

00:24:57.640 --> 00:25:00.260
And apparently that passed for a while.

00:25:00.260 --> 00:25:09.620
And then the current logo came into play in 2006 by and it was designed by Tim Parkland.

00:25:09.620 --> 00:25:12.440
And it's the logo that we have right now.

00:25:13.320 --> 00:25:23.440
And I was, you know, I kind of got the Mayan vibe from the Python icon also or the two Pythons.

00:25:23.440 --> 00:25:34.400
But there's a quote from Tim said, the logo is actually based on a Mayan representation of snakes, which is very often represented only represent only the head and perhaps a short length of tail.

00:25:34.400 --> 00:25:40.720
The structure of the snake represents the natural coiling nesting of snake of a snake as seen on the side.

00:25:40.720 --> 00:25:41.360
I don't know.

00:25:41.360 --> 00:25:46.660
But having having the symmetry also kind of reminds me of a yin yang symbol or something.

00:25:46.660 --> 00:25:48.480
Anyway, I like it.

00:25:48.480 --> 00:25:49.060
It's good.

00:25:49.340 --> 00:26:00.760
But the article then goes on to talk to a talk to a designer who came up with a possible change and proposed a change in 2020, Jessica Williamson.

00:26:00.760 --> 00:26:02.960
And it's pretty.

00:26:02.960 --> 00:26:05.680
But, you know, I didn't really read the rest.

00:26:05.680 --> 00:26:08.360
I just thought it was curious to think about, should we change it?

00:26:08.360 --> 00:26:11.600
And I guess I'm on the side of kind of like the way it is.

00:26:11.600 --> 00:26:13.180
But I'm just curious what you guys thought.

00:26:13.180 --> 00:26:13.920
Jeremy, go ahead.

00:26:14.780 --> 00:26:23.820
I mean, I've grown so used to the other one, but I try not to be a curmudgeon and like new things.

00:26:23.820 --> 00:26:26.380
I know Burger King just did their rebrand.

00:26:26.380 --> 00:26:31.180
And even though I'm not on the Whopper train, I'm like, yeah, you get something fresh.

00:26:31.180 --> 00:26:33.460
I suppose Python even.

00:26:33.460 --> 00:26:38.260
There's going to be more people using it in the future than I've ever used it up to this point.

00:26:38.260 --> 00:26:45.040
And so, you know, what the what the existing folks think is less of a concern if it if it feels newer or more welcoming.

00:26:45.040 --> 00:26:45.340
Yeah.

00:26:45.340 --> 00:26:45.720
Yeah.

00:26:45.720 --> 00:26:48.980
If it pulls people in and it makes them feel like, oh, this is a fresh language.

00:26:48.980 --> 00:26:49.260
Right.

00:26:49.260 --> 00:26:52.020
This is like one of the most popular, fastest growing languages in the world.

00:26:52.020 --> 00:26:52.980
Of course, it has this logo.

00:26:52.980 --> 00:26:55.180
I don't dislike it.

00:26:55.180 --> 00:26:55.940
I think it's pretty nice.

00:26:55.940 --> 00:26:56.980
I like the colors.

00:26:56.980 --> 00:26:57.820
I like the flair.

00:26:57.980 --> 00:27:04.840
But I feel like those gradients, those gradients are hard to combine, whereas like this sort of flat color, you can put it in with other things.

00:27:04.840 --> 00:27:08.380
But like imagine like the thing you're trying to put the logo on also as a gradient.

00:27:08.380 --> 00:27:09.800
Then you got gradients on gradients.

00:27:09.800 --> 00:27:10.080
I don't know.

00:27:10.080 --> 00:27:12.480
It just it seems a little slightly less versatile.

00:27:12.480 --> 00:27:13.320
I like that.

00:27:13.320 --> 00:27:23.080
So what I would just like to point out, though, is there are like rules and laws about this logo in ways that are way beyond what the normal person would think.

00:27:23.440 --> 00:27:29.100
For example, I used to have a logo that looked like the main Python logo, but it had earbuds on.

00:27:29.100 --> 00:27:31.020
However, it didn't have those little holes.

00:27:31.020 --> 00:27:31.280
Right.

00:27:31.280 --> 00:27:31.920
You see the little holes.

00:27:31.920 --> 00:27:32.540
There's the eyes.

00:27:32.540 --> 00:27:34.060
It didn't happen to have those.

00:27:34.060 --> 00:27:45.960
Well, I happened to be on vacation at a beach with my family and got a cease and desist letter from the PSF because I was violating their trademark because I used a logo that wasn't an exact.

00:27:45.960 --> 00:27:50.000
It was an alteration of the Python logo, not the exact one.

00:27:50.000 --> 00:27:50.400
Fair.

00:27:50.740 --> 00:27:56.880
I kind of felt like, you know, it could have been a little nicer rather than a, you know, full on legal.

00:27:56.880 --> 00:28:00.960
Like you must stop this now or else we just have a conversation instead of start it that way.

00:28:00.960 --> 00:28:10.500
Well, those are one of those things where if you don't if you don't defend it, then they have you have a case that you can you can start to lose it as to where you're like, well, you never you never made a case of it before.

00:28:10.500 --> 00:28:11.820
And so you had you kind of have to.

00:28:11.820 --> 00:28:12.620
Yeah, exactly.

00:28:12.620 --> 00:28:14.080
Don't separate the snakes.

00:28:14.080 --> 00:28:15.420
Don't make one snake bigger.

00:28:15.420 --> 00:28:16.160
You can't.

00:28:16.220 --> 00:28:16.380
Right.

00:28:16.380 --> 00:28:25.300
When I put my app in the app store for the training courses, I had to go back and forth and prove that my my new logo, which is approved by the PSF.

00:28:25.300 --> 00:28:27.440
I actually had permission to do that.

00:28:27.440 --> 00:28:31.140
And yet have you all looked at what is in the app stores?

00:28:31.140 --> 00:28:31.960
They are.

00:28:31.960 --> 00:28:33.600
They are change of colors.

00:28:33.600 --> 00:28:37.280
They are, you know, funky redesigns.

00:28:37.280 --> 00:28:40.420
They're like these weird things are slightly different shape like this one.

00:28:40.420 --> 00:28:41.440
Oh, not OK.

00:28:42.000 --> 00:28:43.600
There's just a couple of pages.

00:28:43.600 --> 00:28:46.600
There's like 15 companies violating the trademark.

00:28:46.600 --> 00:28:52.720
And yet with these all presently here, I still had to fight for a week with the app store people to allow my approved one in there.

00:28:52.720 --> 00:28:56.060
Anyway, the exercises one is not is not OK.

00:28:56.060 --> 00:28:58.620
The one the one with the barbell.

00:28:58.620 --> 00:28:59.360
Yeah.

00:28:59.360 --> 00:29:01.500
The barbell one is totally not good.

00:29:01.500 --> 00:29:02.760
They're all not good.

00:29:02.760 --> 00:29:05.520
I'll put the link in the show notes for those of you guys who can't see it.

00:29:05.520 --> 00:29:12.840
But boy, it's long story short, there's a lot around this logo stuff that is just oh, that's cute.

00:29:12.840 --> 00:29:13.220
Right.

00:29:13.220 --> 00:29:15.380
It's quite a bit of stuff around it.

00:29:15.380 --> 00:29:15.900
Legally speaking.

00:29:15.900 --> 00:29:16.260
Yeah.

00:29:16.260 --> 00:29:19.980
Well, you know, the rules aren't really that complicated, though.

00:29:19.980 --> 00:29:20.940
They're mostly no.

00:29:20.940 --> 00:29:28.760
The logo has to appear in the same colors and it has to has to be visible and in its hole without something in front of it.

00:29:28.760 --> 00:29:28.960
Yeah.

00:29:28.960 --> 00:29:29.980
And you can't shift.

00:29:29.980 --> 00:29:30.940
It can't be squished.

00:29:30.940 --> 00:29:33.960
Like mine, the perspective was slightly off for some reason.

00:29:33.960 --> 00:29:35.180
And that was also part of the.

00:29:35.360 --> 00:29:41.760
And they're also fairly good about like you can send stuff to them ahead of time and say, this is what I'm thinking about doing.

00:29:41.760 --> 00:29:42.500
Is this OK?

00:29:42.500 --> 00:29:44.720
And you can get preapproval for stuff.

00:29:44.720 --> 00:29:45.460
But yeah.

00:29:45.460 --> 00:29:48.040
And so now mine is approved and I feel much better about it.

00:29:48.040 --> 00:29:49.200
But I had no idea.

00:29:49.200 --> 00:29:50.200
I just came out of the blue.

00:29:50.200 --> 00:29:51.480
So there it is.

00:29:51.480 --> 00:29:55.460
But if anyone wants to start forcing those, they should go have a look at the app stores.

00:29:55.460 --> 00:29:56.240
They're out of control.

00:29:56.240 --> 00:29:56.780
All right.

00:29:56.780 --> 00:30:02.080
What's not out of control is somewhat related is pypi.org is pretty awesome.

00:30:02.080 --> 00:30:02.340
Right.

00:30:02.340 --> 00:30:04.860
So we go to PyPI and use pip.

00:30:05.200 --> 00:30:08.380
Indirectly behind the scenes goes to PyPI and does all of its magic.

00:30:08.380 --> 00:30:10.160
You pip install this and install that.

00:30:10.160 --> 00:30:12.260
And it would be great if we could put.

00:30:12.260 --> 00:30:16.360
Use that as a mechanism to communicate across teams or companies.

00:30:16.360 --> 00:30:16.740
Right.

00:30:16.740 --> 00:30:23.800
One team built some sort of API interface layer and some other part wants to consume it at your company.

00:30:23.800 --> 00:30:26.680
But you probably don't want to put that in the public repository.

00:30:26.680 --> 00:30:28.160
It might have secrets.

00:30:28.540 --> 00:30:29.960
It might just be inappropriate.

00:30:29.960 --> 00:30:31.220
All those kinds of things.

00:30:31.220 --> 00:30:33.280
So it would be nice to have your very own.

00:30:33.280 --> 00:30:33.500
Right.

00:30:33.500 --> 00:30:33.920
Yeah.

00:30:33.920 --> 00:30:34.320
Yeah.

00:30:34.320 --> 00:30:34.700
Absolutely.

00:30:35.100 --> 00:30:35.220
Yeah.

00:30:35.220 --> 00:30:38.780
So introducing AWS Lambda PyPI.

00:30:38.780 --> 00:30:52.340
So it takes PyPI cloud, which is a way to do self-hosting PyPI, basically a private repository, but then lets you run that over AWS Lambda in a serverless way.

00:30:52.340 --> 00:30:57.540
So it's basically free unless it's being used and there's a ton of free requests you get at AWS Lambda before you get charged.

00:30:57.540 --> 00:30:59.900
And you don't have to have servers to maintain.

00:30:59.900 --> 00:31:07.040
So you can basically set up PyPI cloud to run automatically as an AWS Lambda, which then you can lock down.

00:31:07.040 --> 00:31:08.100
That's pretty awesome, right?

00:31:08.100 --> 00:31:08.600
Yeah.

00:31:08.860 --> 00:31:09.060
Yeah.

00:31:09.060 --> 00:31:12.560
So there's not a whole lot to talk about it.

00:31:12.560 --> 00:31:16.620
You know, if it acts like a caching server as well.

00:31:16.620 --> 00:31:17.580
So can you get.

00:31:17.580 --> 00:31:18.920
You probably could.

00:31:18.920 --> 00:31:21.480
You probably could do that with PyPI cloud.

00:31:21.480 --> 00:31:21.960
Okay.

00:31:21.960 --> 00:31:24.840
It's just rehosting PyPI cloud, which I'm guessing it can.

00:31:24.840 --> 00:31:25.740
I don't know for certain.

00:31:25.740 --> 00:31:29.120
But so you're saying like you'd like to just set that as the global destination.

00:31:29.120 --> 00:31:29.780
Well, right.

00:31:29.780 --> 00:31:31.900
I wanted to store my private stuff.

00:31:31.900 --> 00:31:32.640
Yeah.

00:31:32.640 --> 00:31:37.100
You want to pull the public stuff in plus like sort of merge your private stuff with it.

00:31:37.100 --> 00:31:37.260
Right.

00:31:37.260 --> 00:31:37.660
Yeah.

00:31:37.660 --> 00:31:40.840
I haven't tried that, but I suspect PyPI cloud does allow that.

00:31:40.840 --> 00:31:47.200
So the security wise, security wise, it says the session keys are auto generated and stored in a secret.

00:31:47.200 --> 00:31:50.880
The server configuration contains those generated on the fly.

00:31:50.880 --> 00:31:54.240
The Lambda functions can be limited to accessing only what it needs.

00:31:54.240 --> 00:31:59.860
And then, of course, you can configure PyPI cloud to display nothing to non authenticated users.

00:31:59.860 --> 00:32:02.180
So you basically have to log into it and then you're good to go.

00:32:02.180 --> 00:32:04.040
So I think this is a pretty neat solution.

00:32:04.040 --> 00:32:06.760
I mean, you've been able to do stuff with PyPI cloud already.

00:32:07.160 --> 00:32:10.620
But being able to put it in a cloud for free at scale is pretty neat.

00:32:10.620 --> 00:32:11.040
Yeah.

00:32:11.040 --> 00:32:11.640
All right.

00:32:11.640 --> 00:32:15.740
Next up, we have not just the basics, but beyond.

00:32:15.740 --> 00:32:16.360
Yeah.

00:32:16.360 --> 00:32:19.700
So if you've read some of L.

00:32:19.700 --> 00:32:25.500
Swigert's other Python books, there's a new one, I believe, dropped January.

00:32:25.500 --> 00:32:26.820
That's the month that we're in.

00:32:26.960 --> 00:32:32.800
Can grab from No Starch Press or can give a look over at the URL above.

00:32:32.800 --> 00:32:38.140
And so many other books and references are like, here's how to do the thing.

00:32:38.140 --> 00:32:38.540
Go on.

00:32:38.540 --> 00:32:39.340
Here's how to do the thing.

00:32:39.340 --> 00:32:39.820
Go on.

00:32:39.820 --> 00:32:48.880
And when looking through beyond the basic stuff, a lot of it is a look through the Python lens, but at being a better developer and being.

00:32:49.540 --> 00:32:53.800
I don't think he said, but for myself, definitely like a less feral developer.

00:32:53.800 --> 00:32:56.640
And so, so, so often it's easy to get into that.

00:32:56.640 --> 00:32:58.680
Give us your interpretation of that.

00:32:58.680 --> 00:33:00.600
That's like, you've just been out on your own.

00:33:00.600 --> 00:33:04.760
You figure out how to make it work, but you don't necessarily follow the community.

00:33:04.760 --> 00:33:05.100
Raised by.

00:33:05.100 --> 00:33:05.560
Agree.

00:33:05.740 --> 00:33:08.320
Raised by technical wolves.

00:33:08.320 --> 00:33:11.640
So, so often when you.

00:33:11.640 --> 00:33:12.580
Love that way of thinking.

00:33:12.580 --> 00:33:13.280
That's awesome.

00:33:13.280 --> 00:33:22.560
When you, when you join, when you join a team that's been either working together already or has been in industry for a while, there's those things that you don't know that you're doing.

00:33:22.560 --> 00:33:30.420
That sort of make, that make you look less polished, whether that's in a, in a code interview.

00:33:30.420 --> 00:33:36.100
And so when like Al goes over, what's, what are, what are reasonable variable names?

00:33:36.100 --> 00:33:37.660
What are code smells?

00:33:37.660 --> 00:33:49.320
Talking about like the duplicating code or what are, so you can write something that works very easily, but here are things that it's so much, it's going to be so much nicer to hear from Al.

00:33:49.480 --> 00:33:54.980
Like, Hey, you probably don't want to do this as opposed to hearing from a teammate and a code review.

00:33:54.980 --> 00:33:57.760
Like what is 86,000?

00:33:57.760 --> 00:34:03.940
You're like, Oh, that's the number of seconds when you multiply by 60 and you do the, yeah, I guess back to the, back to the magic number earlier.

00:34:03.940 --> 00:34:05.980
You're like, well, why is, well, why is that bad?

00:34:05.980 --> 00:34:07.240
I, I did the math already.

00:34:07.240 --> 00:34:12.300
It doesn't make sense to do the math the extra times, but you're like, well, someone's going to have to come behind you and read that later.

00:34:12.300 --> 00:34:20.460
And no one hates you as much as future you hates you because it's probably going to be you who comes behind you and reads that later and doesn't remember.

00:34:20.640 --> 00:34:26.880
And so, yeah, chapter after chapter, it's just so many things that are like, Oh, again, like code formatting.

00:34:26.880 --> 00:34:38.400
Like if you, if you haven't been using formatting and linting, prior and, makes it so much easier to, interact with other folks and sorts of sort of helps you knock those rough edges off.

00:34:38.400 --> 00:34:45.160
That aren't necessarily like, this is how you Python, but this is how you become a good, open source contributor citizen.

00:34:45.280 --> 00:34:50.820
Or these are the things that you need to know to work, but you really didn't, but you didn't know you needed to know.

00:34:50.820 --> 00:34:50.980
Right.

00:34:50.980 --> 00:34:51.380
Right.

00:34:51.380 --> 00:34:53.900
Even probably things like continuous integration and stuff.

00:34:53.900 --> 00:34:57.240
You should probably know or get or, or PRs or all those.

00:34:57.240 --> 00:35:02.340
Like if you've kind of been doing it on your own, like you can, and some organizations do, but many people don't create PRs for themselves.

00:35:02.340 --> 00:35:04.360
They just check in and carry on.

00:35:04.360 --> 00:35:04.600
Right.

00:35:04.600 --> 00:35:06.160
so, so those kinds of things.

00:35:06.160 --> 00:35:06.700
Yeah, this is great.

00:35:06.700 --> 00:35:10.740
And you can read it online or, with the link in the show notes, or you can go buy it.

00:35:10.740 --> 00:35:11.460
Yeah.

00:35:11.460 --> 00:35:12.580
It's on no starch.

00:35:12.580 --> 00:35:15.180
you can either get like the ebook, you can get printed copy.

00:35:15.180 --> 00:35:16.580
Whatever you're, whatever you're into.

00:35:16.580 --> 00:35:17.040
Yeah.

00:35:17.040 --> 00:35:19.740
And I think that I was just looking through the code smells one.

00:35:19.740 --> 00:35:23.060
Even people just, just review that anything else.

00:35:23.060 --> 00:35:24.720
This is some pretty good stuff.

00:35:24.720 --> 00:35:25.080
Yeah.

00:35:25.080 --> 00:35:29.100
I love the idea of code smells so much because it's not wrong.

00:35:29.100 --> 00:35:30.720
Just kind of turns your nose.

00:35:30.720 --> 00:35:34.140
Like, you, this isn't, this isn't so good, but it does work.

00:35:34.140 --> 00:35:34.740
Yeah.

00:35:34.740 --> 00:35:40.460
One of the big ones that I run into at work even is a lot is a commented out code.

00:35:40.460 --> 00:35:43.020
people comment something out and then check it in.

00:35:43.020 --> 00:35:44.800
And if it's, if it's dead, delete it.

00:35:44.900 --> 00:35:45.820
Oh, we might need it later.

00:35:45.820 --> 00:35:47.380
That's what version controls for.

00:35:47.380 --> 00:35:48.720
We can go back and get it later.

00:35:48.720 --> 00:35:53.120
If you really, really, really don't lose it, tag it or something, or maybe create a branch

00:35:53.120 --> 00:35:55.060
with a name, but just don't leave it in there.

00:35:55.060 --> 00:35:55.480
Come on.

00:35:55.480 --> 00:35:55.820
Yeah.

00:35:55.820 --> 00:35:56.540
Yeah.

00:35:56.540 --> 00:35:57.000
Or worse.

00:35:57.000 --> 00:35:57.800
Don't comment it out.

00:35:57.800 --> 00:35:59.780
Just stop using it, but don't delete it either.

00:35:59.780 --> 00:36:00.760
Or dead functions.

00:36:00.760 --> 00:36:01.280
Yeah.

00:36:01.280 --> 00:36:02.780
A dead function or dead class.

00:36:02.780 --> 00:36:03.320
Oh my goodness.

00:36:03.320 --> 00:36:03.860
Oh yeah.

00:36:03.940 --> 00:36:05.040
I'll see that occasionally.

00:36:05.040 --> 00:36:08.740
Somebody will rename a function like a function foo old.

00:36:08.740 --> 00:36:10.440
why did you do that?

00:36:10.440 --> 00:36:11.700
Well, we're not using it right now.

00:36:11.700 --> 00:36:15.740
There's better ways to remove that hoarder type code base.

00:36:15.740 --> 00:36:16.720
Exactly.

00:36:16.720 --> 00:36:17.440
Exactly.

00:36:17.800 --> 00:36:18.600
I don't have a problem.

00:36:18.600 --> 00:36:19.780
I just have 23 cats.

00:36:19.780 --> 00:36:20.480
It's going to be all good.

00:36:20.480 --> 00:36:22.980
all right.

00:36:22.980 --> 00:36:23.660
Oh, awesome.

00:36:23.660 --> 00:36:27.380
Well, so, let's talk about just a few extra things that you want us to throw out there.

00:36:27.380 --> 00:36:28.400
Brian, anything else?

00:36:28.660 --> 00:36:30.780
we got a, feedback.

00:36:30.780 --> 00:36:31.520
I'm sorry.

00:36:31.520 --> 00:36:37.720
I can't remember the guy's name, but in episode 208, we covered pip chill, which is a way to

00:36:37.720 --> 00:36:40.440
list out your dependencies, but only the top level ones.

00:36:40.440 --> 00:36:45.880
And, and I made a comment that be cool to have this, but not have it list pip chill.

00:36:45.880 --> 00:36:47.800
Cause I only installed it for this.

00:36:47.800 --> 00:36:50.300
And so, yeah, he added a no chill option.

00:36:50.300 --> 00:36:51.220
So that's nice.

00:36:51.220 --> 00:36:54.020
And, self-aware pip chill.

00:36:54.440 --> 00:36:59.120
And then just before this, I was on these Microsoft developer Twitch channel.

00:36:59.120 --> 00:37:01.740
so that's a, that's a fun thing.

00:37:01.740 --> 00:37:04.220
The Microsoft developer Twitch TV, they do it weekly.

00:37:04.220 --> 00:37:08.300
but don't watch them because you'll collide with watching us.

00:37:08.300 --> 00:37:09.340
So, you know.

00:37:09.340 --> 00:37:09.940
Oh yeah.

00:37:09.940 --> 00:37:11.600
Well, they need to move their time or something.

00:37:11.600 --> 00:37:15.180
It's both recorded.

00:37:15.180 --> 00:37:15.760
It's all good.

00:37:15.760 --> 00:37:16.320
It's all good.

00:37:16.320 --> 00:37:17.860
Oh, and, yeah.

00:37:17.860 --> 00:37:20.480
Piling says he's been using, pip chill.

00:37:20.480 --> 00:37:21.160
So cool.

00:37:21.160 --> 00:37:21.540
Cool.

00:37:21.540 --> 00:37:21.660
Cool.

00:37:21.660 --> 00:37:22.040
Yeah.

00:37:22.060 --> 00:37:25.100
I love the idea of it, but I haven't yet made it into my workflow.

00:37:25.100 --> 00:37:27.220
Jeremy, you got any quick extras you want to throw out there?

00:37:27.220 --> 00:37:28.060
You cover it all.

00:37:28.060 --> 00:37:30.420
I think the, I think the other thing was, Brian's Twitter.

00:37:30.420 --> 00:37:34.380
I looked at and it was either today or yesterday that there was the joke about the machine, the

00:37:34.380 --> 00:37:35.700
machine learning Twitter bots.

00:37:35.700 --> 00:37:40.800
And, and yeah, if like any of those that can be cooked up, always a good time.

00:37:40.800 --> 00:37:44.500
It made me, think of, one of the previous times I was in Portland at one of the

00:37:44.500 --> 00:37:49.720
conferences, there was both, there was talks on, Nate Smith had made prosaic,

00:37:49.840 --> 00:37:54.540
uh, which is a Python, Python for doing a cut and paste poetry.

00:37:54.540 --> 00:37:58.840
And so you have any corpus of information you can take and chunk it down.

00:37:58.840 --> 00:38:00.700
And, that's paired with a Twitter bot.

00:38:00.700 --> 00:38:03.500
And so I went to look back because it's been a while.

00:38:03.500 --> 00:38:08.360
I have a Twitter bot that's still running, just called hitch underscore haiku on Twitter.

00:38:08.360 --> 00:38:14.000
So every hour on the 42nd minute, it takes all the, all five books from the trilogy and

00:38:14.000 --> 00:38:20.640
pulls, a five syllables, seven syllables, five syllables out, combines them all together

00:38:20.640 --> 00:38:22.900
and, and puts that into the world.

00:38:22.900 --> 00:38:26.200
I think about 25, 24, 25,000 times at this point.

00:38:26.200 --> 00:38:29.200
And the machine learning is more wisdom of crowds.

00:38:29.200 --> 00:38:32.360
Like I'll get notifications like, Oh, someone to put favorites on them.

00:38:32.360 --> 00:38:37.220
Maybe, maybe it happened upon a good one in the, in the large pile of terrible ones.

00:38:37.820 --> 00:38:38.180
Fantastic.

00:38:38.180 --> 00:38:39.420
You have to put that in the show notes.

00:38:39.420 --> 00:38:40.860
The machine learning was funny.

00:38:40.860 --> 00:38:45.320
I just found out that like, there's a bot that if you say machine learning, it'll retweet

00:38:45.320 --> 00:38:45.540
you.

00:38:45.540 --> 00:38:51.320
So I tried to install machine, machine learning as much as I could and have it retweet, you

00:38:51.320 --> 00:38:52.060
know, the insights.

00:38:52.060 --> 00:38:55.180
So it's like, you're, you're, you're going to Beatles use the bot.

00:38:55.180 --> 00:39:01.000
and then I suppose also on, on the Twitter front.

00:39:01.000 --> 00:39:01.240
Yeah.

00:39:01.240 --> 00:39:07.280
We just told you not to, not to scroll forever, but my, my favorite client just got a

00:39:07.280 --> 00:39:07.720
refresh.

00:39:07.720 --> 00:39:13.860
if you use iOS devices, the tap bots, folks have put out a tweet bot number

00:39:13.860 --> 00:39:14.820
six yesterday.

00:39:14.820 --> 00:39:15.600
Ooh, nice.

00:39:15.600 --> 00:39:16.400
Yeah.

00:39:16.400 --> 00:39:17.240
That's cool.

00:39:17.240 --> 00:39:17.640
Yeah.

00:39:17.640 --> 00:39:19.940
I got to explore more, Twitter clients.

00:39:19.940 --> 00:39:23.380
I'm still just a web browser kind of guy, but it works for me.

00:39:23.380 --> 00:39:23.800
It works for me.

00:39:23.800 --> 00:39:23.940
All right.

00:39:23.940 --> 00:39:25.500
I got a quick couple of releases for everyone.

00:39:25.500 --> 00:39:27.060
Django 3.2 alpha.

00:39:27.060 --> 00:39:28.500
One was just released.

00:39:28.700 --> 00:39:29.940
So that's pretty awesome.

00:39:29.940 --> 00:39:32.300
a bunch of cool new features coming in Django.

00:39:32.300 --> 00:39:33.220
You can check those out.

00:39:33.220 --> 00:39:38.720
My PI 0.8, has just come out and that has Python three, nine support.

00:39:38.720 --> 00:39:42.380
PIP 21 is out and that drops Python two support.

00:39:42.380 --> 00:39:46.740
So that's also a good one more, step away from legacy Python.

00:39:46.740 --> 00:39:50.540
And then real quickly, there's elastic, elastic search.

00:39:50.540 --> 00:39:55.080
They changed their open source model, which is a very, I'm not going to say is bad.

00:39:55.140 --> 00:39:59.280
I, I kind of support them in this path, I think, but it's a very big deal.

00:39:59.280 --> 00:40:05.700
You know, AWS and some of the other, cloud vendors are like basically selling elastic

00:40:05.700 --> 00:40:07.620
as a service, elastic search as a service.

00:40:07.620 --> 00:40:11.900
And they're like, wait, you just took our stuff and are selling it to other people.

00:40:11.900 --> 00:40:16.500
Whereas we have a corporate sort of thing, but we have no relationship with these people.

00:40:16.500 --> 00:40:17.560
And that doesn't seem real fair.

00:40:17.560 --> 00:40:19.540
MongoDB had exactly the same problem.

00:40:19.540 --> 00:40:23.980
And so they adopted the same license, the SSDL or something like this.

00:40:23.980 --> 00:40:28.620
basically it's still open source unless you want to resell it as a cloud vendor, then

00:40:28.620 --> 00:40:29.000
it's not.

00:40:29.000 --> 00:40:30.240
I don't know.

00:40:30.240 --> 00:40:31.380
How do you guys feel about this?

00:40:31.380 --> 00:40:33.080
Open source business models are hard.

00:40:33.080 --> 00:40:33.700
Yeah.

00:40:33.700 --> 00:40:34.260
Yeah.

00:40:34.260 --> 00:40:39.220
And it's really hard to put the, to attempt to put the genie back into the bottle after.

00:40:39.220 --> 00:40:44.120
And so I think the part of that was unsaid was that Amazon said, fine, take

00:40:44.120 --> 00:40:48.380
your toys and do and sell your, and sell your service, but we'll just fork it and continue

00:40:48.380 --> 00:40:52.020
to do the thing that we forked it with the old model before it, you know, before it's

00:40:52.020 --> 00:40:52.840
changed, it got in there.

00:40:52.840 --> 00:40:53.840
And that was that right.

00:40:53.840 --> 00:40:55.460
And that was similar to what they did with Mongo.

00:40:55.460 --> 00:41:00.380
I think they basically said, we have a thing that is API compatible at, you know, three,

00:41:00.380 --> 00:41:02.140
six or whatever level it froze at.

00:41:02.140 --> 00:41:02.400
Right.

00:41:02.400 --> 00:41:03.720
And then they went on from there.

00:41:03.720 --> 00:41:03.940
Yeah.

00:41:03.940 --> 00:41:04.560
It's tricky.

00:41:04.560 --> 00:41:09.600
I think for some reason, Elastic has a relationship with Google cloud and Azure.

00:41:09.600 --> 00:41:13.100
And so they don't have that challenge with Azure, but they have no relationship with AWS.

00:41:13.100 --> 00:41:14.060
So here it is.

00:41:14.060 --> 00:41:16.060
Anyway, it's don't want to go that long onto it.

00:41:16.060 --> 00:41:18.420
I just wanted to throw that out there as something people would be paying attention.

00:41:18.420 --> 00:41:23.840
But people that use it internally or on their own servers, there's no problem with that,

00:41:23.840 --> 00:41:24.040
right?

00:41:24.040 --> 00:41:24.340
Yeah.

00:41:24.340 --> 00:41:24.700
Yeah.

00:41:24.700 --> 00:41:25.280
That's my understanding.

00:41:25.280 --> 00:41:26.560
You guys ready for a joke?

00:41:26.560 --> 00:41:27.080
Yes.

00:41:27.080 --> 00:41:27.760
Always.

00:41:27.760 --> 00:41:28.580
All right.

00:41:28.580 --> 00:41:30.860
Brian, I feel like being a manager today.

00:41:30.860 --> 00:41:31.720
Can you be the developer?

00:41:31.720 --> 00:41:34.020
This comes to us from Kate Maddox.

00:41:34.020 --> 00:41:37.540
Well, it comes to us via a guy named Wolf.

00:41:37.540 --> 00:41:38.080
Send it over.

00:41:38.080 --> 00:41:38.620
Thank you for that.

00:41:38.700 --> 00:41:40.420
And it's written by Kate Maddox.

00:41:40.420 --> 00:41:41.020
So, all right.

00:41:41.020 --> 00:41:41.840
You be the developer.

00:41:41.840 --> 00:41:42.540
I'll be the manager.

00:41:42.540 --> 00:41:44.960
So I have good news and bad news.

00:41:44.960 --> 00:41:46.240
Oh, what's the good news?

00:41:46.240 --> 00:41:50.220
I've discovered that the five second rule only applies to food.

00:41:50.220 --> 00:41:51.400
Fantastic.

00:41:51.400 --> 00:41:52.780
But what's the bad news?

00:41:52.780 --> 00:41:54.260
I dropped our tables.

00:41:54.260 --> 00:41:57.240
Whoops.

00:41:57.240 --> 00:41:59.400
I hope you all had backups.

00:41:59.400 --> 00:42:01.440
Oh, boy.

00:42:01.440 --> 00:42:02.440
Well.

00:42:02.440 --> 00:42:03.340
Did you hear that?

00:42:03.340 --> 00:42:07.400
Like, I mean, I probably have this wrong, but I think that the five second rule, I thought

00:42:07.400 --> 00:42:08.540
it was 10 second rule.

00:42:08.540 --> 00:42:09.240
Anyway.

00:42:09.240 --> 00:42:09.600
It depends.

00:42:09.600 --> 00:42:10.720
It varies by age.

00:42:10.720 --> 00:42:13.840
You know, if you're a little kid and it's candy, it's probably a good 30 second rule.

00:42:13.840 --> 00:42:17.540
But I think it used to be a lot longer.

00:42:17.540 --> 00:42:23.520
And I think that it came, stemmed from Genghis Khan, or at least I heard this story that Genghis

00:42:23.520 --> 00:42:29.280
Khan had a rule about how long he would eat, how long after, how many numbers of days he

00:42:29.280 --> 00:42:33.420
would eat meat that had been left on the floor or left on the ground or something like

00:42:33.420 --> 00:42:33.640
that.

00:42:33.640 --> 00:42:36.120
So, you know, probably not good to eat meat.

00:42:36.120 --> 00:42:37.800
It's been laying around for a few days.

00:42:37.800 --> 00:42:40.100
That's the three day rule.

00:42:40.100 --> 00:42:40.540
Yeah.

00:42:40.540 --> 00:42:40.840
Yeah.

00:42:40.840 --> 00:42:41.960
You want to keep that pretty short.

00:42:41.960 --> 00:42:42.720
Is it warm?

00:42:42.720 --> 00:42:46.400
Get the magic number for number of seconds by number of days by cleanliness of floor.

00:42:46.400 --> 00:42:46.860
That's right.

00:42:46.860 --> 00:42:48.980
It's only 150,000 seconds.

00:42:48.980 --> 00:42:49.780
No more than that.

00:42:49.780 --> 00:42:50.380
Come on.

00:42:50.380 --> 00:42:51.920
Oh, boy.

00:42:51.920 --> 00:42:52.360
All right.

00:42:52.360 --> 00:42:55.020
Maybe somebody can correct me with the real story.

00:42:55.020 --> 00:42:55.760
Yeah.

00:42:55.760 --> 00:42:56.120
Yeah.

00:42:56.120 --> 00:42:57.180
That's what happens on the show.

00:42:57.180 --> 00:43:00.080
We threw out bits of information and our listeners back us up.

00:43:00.080 --> 00:43:01.300
Yeah.

00:43:01.300 --> 00:43:02.000
All right, Brian.

00:43:02.000 --> 00:43:02.780
Thanks as always.

00:43:02.780 --> 00:43:04.160
Jeremy, it's great to catch up with you.

00:43:04.160 --> 00:43:04.940
Thanks for being here.

00:43:05.300 --> 00:43:05.740
Absolutely.

00:43:05.740 --> 00:43:06.720
Thanks for having me.

00:43:06.720 --> 00:43:07.120
You bet.

00:43:07.120 --> 00:43:07.500
Bye.

00:43:07.500 --> 00:43:10.520
Thank you for listening to Python Bytes.

00:43:10.520 --> 00:43:13.100
Follow the show on Twitter via at Python Bytes.

00:43:13.100 --> 00:43:15.980
That's Python Bytes as in B-Y-T-E-S.

00:43:15.980 --> 00:43:19.380
And get the full show notes at Pythonbytes.fm.

00:43:19.380 --> 00:43:23.740
If you have a news item you want featured, just visit Pythonbytes.fm and send it our way.

00:43:23.740 --> 00:43:26.460
We're always on the lookout for sharing something cool.

00:43:26.460 --> 00:43:29.840
On behalf of myself and Brian Okken, this is Michael Kennedy.

00:43:30.320 --> 00:43:33.460
Thank you for listening and sharing this podcast with your friends and colleagues.

