WEBVTT

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

00:00:05.860 --> 00:00:09.760
This is episode 212. I can't believe the numbers keep going up.

00:00:09.760 --> 00:00:10.480
I know.

00:00:10.480 --> 00:00:15.200
We're recording this December 16th, 2020. I'm Brian Okken, of course.

00:00:15.200 --> 00:00:16.500
I'm Michael Kennedy.

00:00:16.500 --> 00:00:18.580
I'm Sherry Eskinawes.

00:00:18.580 --> 00:00:20.520
Yay, we have a guest.

00:00:20.520 --> 00:00:25.580
Yes, welcome Sherry. Yeah, it's great to have you here. Thanks for coming.

00:00:25.580 --> 00:00:27.880
Thank you so much for having me. Great to be here.

00:00:28.440 --> 00:00:33.620
Yeah, you got some cool projects and you wrote to us and said, hey, here's a project I'm working on.

00:00:33.620 --> 00:00:36.720
And we're like, well, why don't you just come on the show and tell people about it?

00:00:36.720 --> 00:00:38.840
So we'll get to that later and it'll be a lot of fun.

00:00:38.840 --> 00:00:39.820
Yeah.

00:00:39.820 --> 00:00:42.180
Brian, you should do something with pytest. I heard it's popular.

00:00:42.180 --> 00:00:47.140
Yeah. So, yeah, it might not be a surprise. I am a fan of pytest.

00:00:47.140 --> 00:00:53.460
But I wanted to shout out because the people at pytest have been working pretty hard at making things better.

00:00:54.360 --> 00:00:59.000
And they've got so right now we've got Python 6.2.

00:00:59.000 --> 00:01:01.500
I think I think we're at 6.2.1 now.

00:01:01.500 --> 00:01:03.480
But 6.2 came up recently.

00:01:03.480 --> 00:01:04.480
Oh, neat.

00:01:04.480 --> 00:01:05.780
Look, changelog.

00:01:05.780 --> 00:01:06.340
Cool.

00:01:07.740 --> 00:01:13.600
So there's a few things that I really like that came up with the 6.2 release.

00:01:13.600 --> 00:01:20.580
So pytester, there used to be, I mean, plug-in authors are going to be the only ones that really care about this, maybe.

00:01:21.160 --> 00:01:27.880
But there was a fixture called TestDur that works fine to test your plug-ins.

00:01:27.880 --> 00:01:30.540
But pytester is a way better name.

00:01:30.540 --> 00:01:37.080
And it also uses PythonPath.lib instead of the old file system.

00:01:37.080 --> 00:01:38.300
The OSPath.

00:01:38.960 --> 00:01:41.400
Well, it was a PyPath thing.

00:01:41.400 --> 00:01:44.500
It was similar to PathLib, but their own thing.

00:01:44.500 --> 00:01:45.900
So this is better.

00:01:45.900 --> 00:01:46.140
That's cool.

00:01:46.140 --> 00:01:46.780
Yeah.

00:01:46.780 --> 00:01:48.720
That's clear to use the way it's built in.

00:01:48.720 --> 00:01:49.480
Yeah.

00:01:50.380 --> 00:01:52.620
A couple other features I like.

00:01:52.620 --> 00:01:54.260
Verbose mode.

00:01:54.260 --> 00:02:03.340
Well, there used to be a way to, you had to, if you had a test that was skipped or X failed or X passed, you could add a reason.

00:02:03.340 --> 00:02:07.200
But to get the reason was a little extra work.

00:02:07.200 --> 00:02:08.980
And now you can just turn it into verb.

00:02:08.980 --> 00:02:11.420
If you pass verbose mode, you get those reasons out.

00:02:11.420 --> 00:02:12.080
That's pretty cool.

00:02:12.080 --> 00:02:19.140
And the last one I wanted to highlight, last feature that came up, is a change to the monkey patch.

00:02:20.320 --> 00:02:26.900
So monkey patch is a way, it's kind of like mocking.

00:02:26.900 --> 00:02:29.580
It's a little kind of like a way to easily mock.

00:02:29.580 --> 00:02:34.180
But the thing that changed was a context manager.

00:02:34.180 --> 00:02:35.800
So they added a context manager.

00:02:35.800 --> 00:02:44.240
And so either within a test, you can just, for part of the test, do the patch change.

00:02:44.240 --> 00:02:49.700
Or it's also exposed at the pytest namespace level.

00:02:50.180 --> 00:02:54.440
So you can even use monkey patches in helper functions and stuff like that.

00:02:54.440 --> 00:02:56.580
So that's pretty neat.

00:02:56.580 --> 00:03:01.120
How does that compare to, like, the patching with context block?

00:03:01.120 --> 00:03:03.980
Well, yeah, it's exactly like that.

00:03:03.980 --> 00:03:07.180
So you could use a with block to patch it.

00:03:07.180 --> 00:03:08.320
So...

00:03:08.320 --> 00:03:08.700
Fantastic.

00:03:08.700 --> 00:03:10.120
Cool.

00:03:10.260 --> 00:03:11.460
I think this is great.

00:03:11.460 --> 00:03:13.460
Like, it's cool to see pytest moving along.

00:03:13.460 --> 00:03:16.600
And, you know, there aren't really that many challengers these days, right?

00:03:16.600 --> 00:03:19.860
It's pretty much the leading way to go.

00:03:19.860 --> 00:03:20.300
Yeah.

00:03:20.300 --> 00:03:22.380
I mean, there's still projects that use unit test.

00:03:22.380 --> 00:03:23.100
And there's...

00:03:23.100 --> 00:03:25.800
I don't know why they're still using it.

00:03:25.800 --> 00:03:27.660
But pytest is there.

00:03:27.660 --> 00:03:30.280
The only one that makes sense to me is I don't want a dependency.

00:03:30.280 --> 00:03:31.500
I just want to be able to run it.

00:03:32.560 --> 00:03:32.880
Okay.

00:03:32.880 --> 00:03:34.620
But, yeah, sure.

00:03:34.620 --> 00:03:36.320
There's just that...

00:03:36.320 --> 00:03:36.840
You're not convinced.

00:03:36.840 --> 00:03:40.220
Well, I mean, how many projects don't have dependencies?

00:03:40.220 --> 00:03:41.460
Yeah, that's true.

00:03:41.460 --> 00:03:44.900
The other bit...

00:03:44.900 --> 00:03:47.820
I kind of like it being outside of Python because you can...

00:03:49.480 --> 00:03:50.980
Like, let's say you upgrade your Python.

00:03:50.980 --> 00:03:52.720
You don't...

00:03:52.720 --> 00:03:57.480
I don't think you really want to upgrade your test runner at the same time you're upgrading...

00:03:57.480 --> 00:03:59.280
Well, and also you get a lot higher velocity, right?

00:03:59.280 --> 00:04:04.340
Like, the reason they didn't bring requests in to replace the internal URL HTTP stuff in Python

00:04:04.340 --> 00:04:06.540
was, like, it's going to slow requests down.

00:04:06.540 --> 00:04:07.440
Yeah.

00:04:07.440 --> 00:04:08.160
Yeah.

00:04:08.160 --> 00:04:09.920
So, it would slow pytest down, too.

00:04:09.920 --> 00:04:16.500
And then I got a ping kind of on a related note from somebody that was using a plugin I wrote

00:04:16.500 --> 00:04:21.920
called pytest-check and said, hey, I'm having trouble running this with pytest 6.

00:04:21.920 --> 00:04:23.600
I'm like, oh, my gosh.

00:04:23.600 --> 00:04:24.640
People are using that?

00:04:24.640 --> 00:04:27.660
So, yeah, apparently there are some people using it.

00:04:27.660 --> 00:04:29.580
So, I updated it to run with...

00:04:29.580 --> 00:04:30.360
Now it's compatible?

00:04:30.360 --> 00:04:30.960
Yeah.

00:04:30.960 --> 00:04:31.640
Sweet.

00:04:31.640 --> 00:04:33.760
Sherry, do you do any testing?

00:04:33.760 --> 00:04:37.060
Not with pytest.

00:04:37.060 --> 00:04:39.640
I don't have experience with that yet.

00:04:39.640 --> 00:04:40.860
Yeah.

00:04:40.860 --> 00:04:43.040
Definitely a good one.

00:04:43.040 --> 00:04:45.340
I know of a good book if you want to learn.

00:04:46.340 --> 00:04:47.760
That's right.

00:04:47.760 --> 00:04:48.260
That's right.

00:04:48.260 --> 00:04:54.360
Well, the next thing I want to talk about, it takes a minute for this to sink in here.

00:04:54.360 --> 00:04:58.140
And it's SQLite as an application file format.

00:04:58.140 --> 00:04:59.820
So, we've all heard of SQLite, right?

00:04:59.820 --> 00:05:02.620
It's a database, but it's not a server.

00:05:02.620 --> 00:05:03.840
It's just the file.

00:05:03.840 --> 00:05:06.600
And it's embedded into your application.

00:05:06.600 --> 00:05:10.400
So, it's in process, which actually makes it incredibly fast, right?

00:05:10.400 --> 00:05:15.240
SQLite ships with Python.

00:05:15.240 --> 00:05:19.800
So, you don't have to have any dependencies even to use it.

00:05:19.800 --> 00:05:21.380
You just connect to it.

00:05:21.380 --> 00:05:25.780
You probably do want to have dependencies like, say, SQLAlchemy or something like that.

00:05:25.780 --> 00:05:27.160
But you don't have to, right?

00:05:27.740 --> 00:05:32.500
So, there's a cool thing that's actually part of the documentation, more or less, for SQLite.

00:05:32.500 --> 00:05:35.760
But it was brought to my attention by...

00:05:35.760 --> 00:05:37.420
Over here.

00:05:37.420 --> 00:05:38.580
I'm going to pull up my notes.

00:05:38.580 --> 00:05:41.960
By John Boltmeyer.

00:05:41.960 --> 00:05:42.900
John Boltmeyer.

00:05:42.900 --> 00:05:44.740
Thanks for letting us know about this one.

00:05:45.120 --> 00:05:52.300
And the idea is that we so often, if we have some kind of custom file format for our application,

00:05:52.300 --> 00:05:58.900
whether it's a command line tool or a GUI or maybe even a website, although those often default to databases anyway,

00:05:58.900 --> 00:06:01.680
you have to think about, how am I going to store this file?

00:06:01.680 --> 00:06:03.160
Should we put it in JSON?

00:06:03.160 --> 00:06:05.760
And we could use some XML, Brian.

00:06:05.760 --> 00:06:06.780
Does that sound good?

00:06:06.780 --> 00:06:09.540
No.

00:06:09.540 --> 00:06:10.700
No, no, no.

00:06:10.700 --> 00:06:11.000
XML.

00:06:11.000 --> 00:06:13.580
But, you know, JSON is super popular, right?

00:06:13.580 --> 00:06:17.540
But even with JSON, you've got to figure out, okay, well, these are the blocks and here's how you read it.

00:06:17.540 --> 00:06:21.560
And if some other application wants to talk to it, they need to work with it.

00:06:21.560 --> 00:06:29.440
And there's all these really interesting advantages of saying, well, let's just have a single binary file that is a SQLite database.

00:06:29.440 --> 00:06:32.060
And just that's our file format.

00:06:32.060 --> 00:06:43.060
Much like docx has it, you know, is the file format for Word or xlsx for Excel or, you know, you name it, right?

00:06:43.060 --> 00:06:45.140
All these different apps have their own file format.

00:06:45.140 --> 00:06:47.060
Camtasia has its own and so on.

00:06:47.060 --> 00:06:50.420
That could easily just be a SQLite file.

00:06:50.420 --> 00:06:53.740
So if you go down here in this thing, there's a bunch of things that are highlights.

00:06:53.740 --> 00:06:57.160
It says, look, simplified app development.

00:06:57.160 --> 00:07:01.740
You don't have to write any code to figure out how to work with this file, right?

00:07:01.820 --> 00:07:04.820
Like you've already got the SQLite built into Python.

00:07:04.820 --> 00:07:08.580
Everything's contained into a single file, right?

00:07:08.580 --> 00:07:10.320
So you can just easily move it around.

00:07:10.320 --> 00:07:14.660
It becomes queryable because it's SQL, right?

00:07:14.660 --> 00:07:17.400
So you just select star from tableware, such and such.

00:07:17.620 --> 00:07:20.720
And now your app has search built in.

00:07:20.720 --> 00:07:21.860
That's pretty cool.

00:07:21.860 --> 00:07:28.180
A bunch of tools like we've talked about Beekeeper Studio and things like that.

00:07:28.180 --> 00:07:30.680
They would just load this up and work with it, right?

00:07:30.680 --> 00:07:35.740
So anything that works with SQLite is now working with it.

00:07:36.220 --> 00:07:37.840
Cross-platform, right?

00:07:37.840 --> 00:07:41.360
32-bit, 64-bit, Windows, macOS.

00:07:41.360 --> 00:07:43.540
Atomic, right?

00:07:43.540 --> 00:07:46.300
So multiple things can be working with it concurrently.

00:07:46.300 --> 00:07:50.420
If you make changes to it, you could do like three changes and something goes wrong.

00:07:50.420 --> 00:07:51.220
There's an exception.

00:07:51.220 --> 00:07:53.280
Just rolls it back.

00:07:53.280 --> 00:07:54.920
These things are all pretty cool, right?

00:07:54.920 --> 00:07:55.580
Yeah.

00:07:55.580 --> 00:07:56.880
Yeah.

00:07:56.880 --> 00:07:57.940
So let's see.

00:07:57.940 --> 00:07:59.080
Incremental updates.

00:07:59.080 --> 00:08:05.440
This is another one that's interesting is with, say, something like a JSON file.

00:08:05.440 --> 00:08:09.140
You'd have to load the whole thing up unless you're doing something really intense.

00:08:09.140 --> 00:08:12.640
You would change something small about the file, then you'd write the whole thing back.

00:08:12.640 --> 00:08:18.640
But the way SQLite works is you just make changes to little spots in the binary file as you insert stuff.

00:08:18.640 --> 00:08:21.520
So writes are a lot simpler.

00:08:21.520 --> 00:08:24.520
Super extensible.

00:08:24.520 --> 00:08:25.800
And what else?

00:08:25.800 --> 00:08:26.380
Performance.

00:08:26.380 --> 00:08:30.420
It's a lot faster than, you know, they have compared some other styles.

00:08:30.420 --> 00:08:33.460
Like you could have a pile of files like Git or something like that.

00:08:34.320 --> 00:08:39.740
It's multi-threaded safe so multiple processes can access it, multiple languages, all sorts of stuff.

00:08:39.740 --> 00:08:41.520
And also, finally, documentation.

00:08:41.520 --> 00:08:44.280
Like you want to document how your file format works.

00:08:44.280 --> 00:08:46.860
You just describe what the tables are and what the columns mean.

00:08:46.860 --> 00:08:47.320
And that's it.

00:08:47.320 --> 00:08:49.060
What do you think?

00:08:51.160 --> 00:09:03.420
I actually really like using single file database styles like SQLite for persistence layers because you don't really have to think about it at this point.

00:09:03.420 --> 00:09:06.740
I've also used TinyDB for a similar reason.

00:09:06.740 --> 00:09:09.240
Yeah, TinyDB is interesting.

00:09:09.240 --> 00:09:13.060
I think that uses JSON blocks, a little bunch of JSON files.

00:09:13.060 --> 00:09:14.420
It kind of organizes, right?

00:09:14.420 --> 00:09:14.960
Yeah.

00:09:14.960 --> 00:09:15.960
Something like that.

00:09:16.380 --> 00:09:17.160
Sorry, what do you think of this?

00:09:17.160 --> 00:09:22.280
Yeah, it's, it's, it's, it's, this is actually new material for me.

00:09:22.280 --> 00:09:23.880
So I'm.

00:09:23.880 --> 00:09:24.640
Well, honestly, me too.

00:09:24.640 --> 00:09:28.560
I looked at it and I was like, well, of course I know I can use SQLite, but I just hadn't really put it together.

00:09:28.560 --> 00:09:33.260
Like, well, this is actually a really cool use of a file format that other people can use.

00:09:33.260 --> 00:09:34.140
Yeah.

00:09:35.580 --> 00:09:35.920
Yeah.

00:09:35.920 --> 00:09:36.200
Yeah.

00:09:36.200 --> 00:09:36.500
Yeah.

00:09:36.500 --> 00:09:40.120
There's also a really cool project called Dataset.

00:09:40.120 --> 00:09:46.360
D-A-T-A-S-E-T-T-E or something like that.

00:09:46.360 --> 00:10:03.360
And another one related to it called Dog Sheep, which is a really interesting project that takes all these SQLite and SQL oriented data inputs and allows you to bring them together and do reporting and analysis on them.

00:10:04.260 --> 00:10:09.840
So I did an interview recently with Simon, the guy behind the project over on Talk Python.

00:10:09.840 --> 00:10:12.540
It's not out yet, but it's already recorded and it will be out.

00:10:12.540 --> 00:10:17.420
And there's just all these interesting things you can do once data gets into these common formats.

00:10:17.420 --> 00:10:20.420
So this just is another example.

00:10:20.420 --> 00:10:29.940
And he also pointed out that there's all these different SQLite databases already on your machine, like the photos library for macOS.

00:10:29.940 --> 00:10:31.060
That's a SQLite file.

00:10:31.060 --> 00:10:32.320
Wow.

00:10:32.940 --> 00:10:33.080
Yeah.

00:10:33.080 --> 00:10:36.140
So there's like hundreds of these on your computer and you just didn't know it.

00:10:36.140 --> 00:10:43.540
So anyway, this is hopefully solve some problems for people trying to create, you know, what are we going to do for our app format?

00:10:43.540 --> 00:10:45.540
You know, our equivalent of Doc X.

00:10:45.540 --> 00:10:46.620
What's that going to be?

00:10:46.620 --> 00:10:47.920
Well, it definitely could be one of these.

00:10:47.920 --> 00:10:50.160
Yeah.

00:10:50.160 --> 00:10:51.400
That's pretty cool.

00:10:52.400 --> 00:10:52.860
Yeah, definitely.

00:10:52.860 --> 00:10:52.880
Yeah.

00:10:52.880 --> 00:10:52.880
Yeah.

00:10:52.880 --> 00:10:59.320
All right.

00:10:59.320 --> 00:11:01.600
Next up, Sherry, tell us about your project.

00:11:01.600 --> 00:11:03.020
This is the one I mentioned before.

00:11:03.020 --> 00:11:04.200
Yeah.

00:11:04.320 --> 00:11:20.580
So I'll start off by saying I noticed that kids' programming books are either really abstract or they don't teach the reader how to write a simple program or they're too, it's either that or they're too intensive in the format of a textbook or a book made up of a lot of tutorials with step-by-step instructions.

00:11:20.580 --> 00:11:30.340
And so that's why I thought of taking a different approach by creating a programming book in the form of a picture book that tells a story with complete computer programs that represent real-life situations.

00:11:30.740 --> 00:11:34.800
So my latest book is called A Day in Code Python, and it's now live on Kickstarter.

00:11:34.800 --> 00:11:39.240
It tells a story using Python programs that describe real-life situations in the code.

00:11:39.240 --> 00:11:51.100
And so for each two-page spread in the story, there's a code page that has a complete Python program that describes a situation in the story and a full-page illustration next to it that shows the scene that's being described.

00:11:51.100 --> 00:11:58.340
So in that way, the book is presenting Python code examples in a continuous story, and the code is explained below each program.

00:11:59.120 --> 00:12:02.080
And each program presents a new Python concept.

00:12:02.080 --> 00:12:05.820
And so you might be wondering, like, why did I choose a picture book?

00:12:05.820 --> 00:12:09.840
And so there's a few main reasons why I thought of doing that.

00:12:09.840 --> 00:12:15.800
And so, of course, the most obvious is that a picture book is fun and colorful, and who doesn't like a picture book?

00:12:15.800 --> 00:12:25.640
But I also wanted to show that everyday events can be described with the logic of code, and I think the programming concepts can be better understood by making the code relatable.

00:12:26.280 --> 00:12:30.040
And I also wanted the book to be compact and show code examples conveniently.

00:12:30.040 --> 00:12:35.120
So as a beginner, you don't need to dig through a big book looking for basic code examples.

00:12:35.120 --> 00:12:47.300
And also, by having nice full-page illustrations, my aim is that the reader and kids especially will enjoy the book in the same way as a normal picture book that is flipped through again and again.

00:12:47.520 --> 00:12:51.000
And while they're enjoying the pictures, they'll be looking at the code too.

00:12:51.000 --> 00:12:55.560
And their understanding of the programming concepts will be reinforced.

00:12:55.560 --> 00:13:03.560
And so this book will be in the same format as my first book, A Day in Code, which is written in the C programming language.

00:13:03.860 --> 00:13:10.460
And that book was actually released a few weeks ago on Amazon, and I had previously launched a Kickstarter campaign for it.

00:13:10.460 --> 00:13:16.560
And after delivering the book, I got a great response from kids to college students to adults.

00:13:16.560 --> 00:13:18.380
So it's really for all ages.

00:13:18.380 --> 00:13:22.140
And so now I'm focused on creating a Python version of that book.

00:13:22.140 --> 00:13:23.720
And you can pre-order it in code.

00:13:23.720 --> 00:13:31.300
Yeah, I think a Python book makes a lot of sense because it's the most popular learning programming language these days, right?

00:13:31.300 --> 00:13:34.480
Yeah, it's definitely been gaining in popularity.

00:13:34.480 --> 00:13:36.480
Yeah, very popular.

00:13:36.480 --> 00:13:37.480
It's everywhere.

00:13:37.480 --> 00:13:44.220
I like the idea of just sort of letting it wash over kids, right?

00:13:44.220 --> 00:13:52.820
Maybe the goal isn't necessarily, it might not be to teach them programming and have them come out the other side of interacting with the book, actually writing code.

00:13:52.820 --> 00:14:01.800
But kind of seeing the examples and just making code something that you kind of talk about, like reading or like writing or like history or anything.

00:14:01.800 --> 00:14:03.140
So it's a cool format.

00:14:03.140 --> 00:14:03.700
What do you think, Brian?

00:14:03.700 --> 00:14:05.200
I think this is great.

00:14:05.200 --> 00:14:09.840
So do you have like a target age in mind?

00:14:09.840 --> 00:14:15.460
So that's why I say like, well, of course, being a picture book, it's great for kids.

00:14:15.460 --> 00:14:19.480
But I've also gotten a lot of people, adults who say that they enjoy it too.

00:14:19.700 --> 00:14:28.460
And it's just a fun format for anyone to enjoy starting to learn programming or even just looking at it as a reference.

00:14:28.460 --> 00:14:39.740
Even if you're experienced in programming or maybe you want to refresh your memory, it's just a convenient way to look back at simple code examples that go over all the basics of Python.

00:14:39.740 --> 00:14:43.920
So functions, dictionaries, lists, tuples, all that stuff.

00:14:43.920 --> 00:14:45.680
Yeah.

00:14:45.680 --> 00:14:48.460
And it's almost funded on Kickstarter.

00:14:48.460 --> 00:14:50.140
So it sounds like you're going to make it happen.

00:14:50.140 --> 00:14:51.840
You're like $1,000 away.

00:14:51.840 --> 00:14:54.520
And I'm sure people are interested.

00:14:54.520 --> 00:14:57.580
Well, I'm going to like order one.

00:14:57.580 --> 00:14:59.860
So thank you.

00:14:59.860 --> 00:15:00.900
This looks great.

00:15:01.180 --> 00:15:01.420
Yeah.

00:15:01.420 --> 00:15:05.280
So once you get it funded, when do they come out?

00:15:05.280 --> 00:15:09.620
So right now, the estimated delivery time is in April.

00:15:09.620 --> 00:15:11.560
And it'll be a special edition book.

00:15:11.560 --> 00:15:21.020
So I'm actually getting it printed at a U.S.-based facility that allows me to print with glossy paper, 100-pound paper,

00:15:21.020 --> 00:15:25.180
and have a feature of having printed end sheets at the front and back of the book.

00:15:25.620 --> 00:15:29.920
And so these features aren't available once the book goes on Amazon.

00:15:29.920 --> 00:15:31.660
Cool.

00:15:31.660 --> 00:15:32.680
Yeah.

00:15:32.680 --> 00:15:34.340
Great project.

00:15:34.340 --> 00:15:37.020
Happy to see it gaining some traction.

00:15:37.020 --> 00:15:39.560
Hopefully people can make it happen because it'll be neat.

00:15:39.560 --> 00:15:40.220
Yeah.

00:15:40.220 --> 00:15:40.920
Thank you so much.

00:15:40.920 --> 00:15:42.060
Yeah, absolutely.

00:15:42.060 --> 00:15:50.500
So Brian, before we move on to the next one, speaking of books, maybe tell people about what we're up to so they can support us if they wish.

00:15:51.260 --> 00:15:59.900
Yeah, well, the best way to support, let's say, me is by picking up a copy of Python Testing with pytest.

00:15:59.900 --> 00:16:08.020
I still get feedback all the time of people thanking me for writing this because it helps them in their job, helps them get stuff done better.

00:16:08.020 --> 00:16:09.620
So it's really awesome.

00:16:09.620 --> 00:16:11.140
Yeah, absolutely.

00:16:12.080 --> 00:16:18.760
And then if they want to learn some more about all sorts of types of Python, they should probably check out training.

00:16:18.760 --> 00:16:19.440
They should.

00:16:19.440 --> 00:16:21.140
Like, we've got a couple of new courses.

00:16:21.140 --> 00:16:25.600
I just released the FastAPI course a couple weeks ago, and that is such a neat framework.

00:16:25.600 --> 00:16:31.500
We also have our Excel to Python and the Python Memory Management Tips Deep Dive course.

00:16:31.620 --> 00:16:34.860
So those and many more are out there for people to take.

00:16:34.860 --> 00:16:39.080
If they're interested and they want to learn Python, there's a whole bunch of ways.

00:16:39.080 --> 00:16:42.180
The Day in the Code, pytest, and then these courses as well.

00:16:42.180 --> 00:16:44.600
I always forget that you have a memory management one.

00:16:44.600 --> 00:16:47.240
Yeah, that's ironic, isn't it?

00:16:47.240 --> 00:16:50.920
So.

00:16:54.420 --> 00:16:55.080
Yes, Barry.

00:16:55.080 --> 00:16:56.240
I don't.

00:16:56.240 --> 00:16:57.620
Are we doing this next?

00:16:57.620 --> 00:16:58.320
Okay, cool.

00:16:58.320 --> 00:16:59.380
Yeah, this is what's next, yeah.

00:16:59.380 --> 00:17:00.080
Nice.

00:17:00.080 --> 00:17:07.760
So I can't believe we haven't done this, but actually, partly because I can't believe I just noticed this.

00:17:07.760 --> 00:17:09.380
So I didn't know about this.

00:17:09.380 --> 00:17:11.520
Yes, Barry, there is a Python Labs.

00:17:11.520 --> 00:17:17.600
So it's pretty funny.

00:17:17.600 --> 00:17:24.400
So this is at azure.pythonlabs.com, and it used to be just normally.

00:17:24.400 --> 00:17:27.200
at www.pythonlabs.com.

00:17:27.200 --> 00:17:28.240
So it's moved.

00:17:28.240 --> 00:17:32.540
But this is back from, this is kind of an inside Python joke.

00:17:32.540 --> 00:17:36.540
It's back, Tim Peters posted it in 2004.

00:17:36.540 --> 00:17:41.360
And apparently it's a question, there was a question from Barry.

00:17:41.360 --> 00:17:42.400
It just says Barry.

00:17:42.400 --> 00:17:43.660
I'm assuming it's Barry Warsaw.

00:17:43.660 --> 00:17:44.840
Yeah, I would guess.

00:17:44.840 --> 00:17:48.140
Asked the question, what is Python Labs now?

00:17:48.140 --> 00:17:50.280
Or is there a Python Labs now?

00:17:50.280 --> 00:17:51.160
I don't know.

00:17:51.160 --> 00:17:56.080
Guido owns the domain name, which is probably the biggest claim to Python lab hood there is.

00:17:56.080 --> 00:18:04.100
And then Tim Peters replies with a very, yes, Virginia, there is a Santa Claus-esque answer.

00:18:04.100 --> 00:18:07.320
And I just encourage people to go read it.

00:18:07.320 --> 00:18:07.920
It's hilarious.

00:18:07.920 --> 00:18:12.680
There's stuff like, Barry, your little friends are wrong.

00:18:12.680 --> 00:18:16.140
They've been affected by the skepticism of a skeptical age.

00:18:16.640 --> 00:18:18.440
Yes, Barry, there is a Python Labs.

00:18:18.440 --> 00:18:23.320
It exists as certainly as love and generosity and devotion exist.

00:18:23.320 --> 00:18:26.720
Alas, how dreary would be a world with no Python Labs.

00:18:26.720 --> 00:18:28.780
So it goes on like that.

00:18:28.780 --> 00:18:30.000
And it's pretty funny.

00:18:30.000 --> 00:18:31.860
So I encourage people to check it out.

00:18:31.860 --> 00:18:33.260
How funny.

00:18:33.260 --> 00:18:35.400
Have you seen this before?

00:18:35.960 --> 00:18:37.020
I've never seen this.

00:18:37.020 --> 00:18:39.380
And apparently it's from 2004 originally.

00:18:39.380 --> 00:18:41.780
But now it's on Microsoft Azure.

00:18:41.780 --> 00:18:47.320
And I'm wondering if this has anything to do with Peter Van Rossum moving over to Microsoft.

00:18:47.320 --> 00:18:49.100
Yeah, I assume so.

00:18:49.100 --> 00:18:52.420
I was going to try to look at where I found this.

00:18:52.420 --> 00:18:58.100
And I think just somebody mentioned that it moved to Azure a couple months ago or recently.

00:18:58.640 --> 00:18:59.500
Yeah, yeah, funny.

00:18:59.500 --> 00:19:04.280
You know, another piece of news I caught that was not officially on the radar.

00:19:04.280 --> 00:19:11.540
But a friend of the show and our friend, Anthony Shaw, he is headed towards Guido as well.

00:19:11.540 --> 00:19:12.240
You hear that?

00:19:12.240 --> 00:19:13.720
I did.

00:19:13.720 --> 00:19:18.620
Yeah, he joined Microsoft as some kind of Python specialist.

00:19:18.620 --> 00:19:19.260
I'm not sure.

00:19:19.640 --> 00:19:24.360
So I hope they throw some money on him to try to move him to the Northwest.

00:19:24.360 --> 00:19:25.140
That would be cool.

00:19:25.140 --> 00:19:26.220
That would be cool.

00:19:26.220 --> 00:19:27.540
Yeah, that we could hang out with him more.

00:19:27.540 --> 00:19:28.200
He's far away.

00:19:28.200 --> 00:19:29.460
He's in Australia, which is a long way.

00:19:29.460 --> 00:19:30.920
But it's going to be hard for him to leave.

00:19:30.920 --> 00:19:33.400
He lives on the beach in like a picture.

00:19:33.400 --> 00:19:34.760
Yeah.

00:19:34.760 --> 00:19:35.680
Yeah, anyway.

00:19:35.680 --> 00:19:39.400
He always posts his like, you know, surfing report and stuff like that.

00:19:39.400 --> 00:19:40.440
Exactly.

00:19:40.440 --> 00:19:42.600
Because life's hard sometimes.

00:19:42.600 --> 00:19:43.660
We surf in Oregon.

00:19:43.660 --> 00:19:44.800
Yeah.

00:19:44.800 --> 00:19:45.660
With wetsuits.

00:19:45.660 --> 00:19:46.280
For about five seconds.

00:19:46.280 --> 00:19:46.740
Yeah.

00:19:46.740 --> 00:19:47.660
And we change color.

00:19:47.660 --> 00:19:48.300
Then we come out.

00:19:48.300 --> 00:19:51.280
All right.

00:19:51.280 --> 00:19:52.460
Let's see.

00:19:52.460 --> 00:19:53.440
What's the next one here?

00:19:53.440 --> 00:19:54.340
I think.

00:19:54.340 --> 00:19:54.860
Yeah.

00:19:54.860 --> 00:19:59.360
So remember, Brian, I did an extra, extra, extra, extra the other day.

00:19:59.360 --> 00:20:00.220
Yeah.

00:20:00.220 --> 00:20:00.880
That was fun.

00:20:00.880 --> 00:20:01.140
Do more of that.

00:20:01.140 --> 00:20:02.140
Because I had so much stuff.

00:20:02.140 --> 00:20:06.880
Well, let's do an extra, extra, extra, extra, extra, extra this time.

00:20:06.880 --> 00:20:10.180
Because, oh my goodness, there is so much stuff.

00:20:10.180 --> 00:20:14.120
I'm not just going to turn this into another element here of the show.

00:20:14.120 --> 00:20:17.320
So first of all, we spoke about NumPy in installing.

00:20:17.480 --> 00:20:18.580
I think it was on Big Sur.

00:20:18.580 --> 00:20:19.840
It was having some problems.

00:20:19.840 --> 00:20:22.020
It wouldn't install correctly.

00:20:22.020 --> 00:20:26.900
I don't remember if it was Windows or Linux or macOS.

00:20:26.900 --> 00:20:28.720
I think it felt like it was macOS.

00:20:28.720 --> 00:20:30.600
But anyway, it was a problem with one of the platforms.

00:20:30.600 --> 00:20:36.660
But what was interesting is I got a message from Grice that, hey, quick follow up on episode

00:20:36.660 --> 00:20:37.980
208.

00:20:38.820 --> 00:20:39.440
Did you know?

00:20:39.440 --> 00:20:40.700
I didn't know.

00:20:40.700 --> 00:20:48.860
Did you know that in your requirements TXT file, you can say like NumPy equal equal one dot

00:20:48.860 --> 00:20:51.960
19 dot three semicolon and then platform.

00:20:51.960 --> 00:20:54.760
So you can say platform underscore system equal equal Windows.

00:20:54.980 --> 00:20:58.980
Then another different version of NumPy platform equals Linux.

00:20:58.980 --> 00:21:01.060
Another one platform equals Darwin.

00:21:01.060 --> 00:21:03.940
Isn't that cool?

00:21:03.940 --> 00:21:04.580
Yeah.

00:21:04.580 --> 00:21:05.120
I had no idea.

00:21:05.120 --> 00:21:11.340
You could kind of split the requirements file to say the Windows install gets this and the

00:21:11.340 --> 00:21:12.460
Linux install gets that.

00:21:12.800 --> 00:21:13.400
Oh, that's cool.

00:21:13.400 --> 00:21:15.420
Yeah.

00:21:15.420 --> 00:21:15.600
Yeah.

00:21:15.600 --> 00:21:16.560
I had never seen this.

00:21:16.560 --> 00:21:19.440
But the problem was NumPy was not.

00:21:19.440 --> 00:21:21.660
Oh, it was Windows update that broke NumPy.

00:21:21.660 --> 00:21:22.280
That's what it was.

00:21:22.280 --> 00:21:28.120
And so here's a way to pin the Windows version to an older NumPy, but let the other stuff be

00:21:28.120 --> 00:21:28.920
newer.

00:21:28.920 --> 00:21:30.300
That's what it was.

00:21:30.300 --> 00:21:33.140
So here's a really simple way to fix that, huh?

00:21:33.140 --> 00:21:34.040
Yeah.

00:21:34.040 --> 00:21:35.700
I hope I never need this trick.

00:21:35.700 --> 00:21:37.020
Yes, exactly.

00:21:38.260 --> 00:21:44.900
And then I got another message from William Silva.

00:21:44.900 --> 00:21:46.900
And he said, hey, check this thing out.

00:21:46.900 --> 00:21:52.920
There's, you probably heard of material design, the way that Google styles some of their apps

00:21:52.920 --> 00:21:53.460
and so on.

00:21:53.460 --> 00:22:00.760
And we've all heard of probably the best way to build cross-platform apps with sort of native

00:22:00.760 --> 00:22:01.180
widgets.

00:22:01.180 --> 00:22:07.760
You know, maybe Electron's the best way, but native widgets would be with Qt and PySize.

00:22:07.760 --> 00:22:12.000
PySize 6 and probably PyQT.

00:22:12.000 --> 00:22:16.080
I don't know if it's upgraded yet, but there's this cool theme that you can put on to make

00:22:16.080 --> 00:22:17.580
it look material.

00:22:17.580 --> 00:22:18.220
Doesn't that look neat?

00:22:18.220 --> 00:22:19.560
Oh, that is neat.

00:22:19.560 --> 00:22:20.140
I like it.

00:22:20.140 --> 00:22:20.320
Yeah.

00:22:20.320 --> 00:22:20.800
Yeah.

00:22:20.800 --> 00:22:25.260
So often these cross-platform apps, they just look, boy, I don't know.

00:22:25.260 --> 00:22:29.900
They just look like they're standing out weird, but this looks really nice here.

00:22:29.900 --> 00:22:30.840
I totally like it.

00:22:30.840 --> 00:22:33.720
So I'll put that in the show notes.

00:22:33.720 --> 00:22:34.640
People can check that out.

00:22:35.400 --> 00:22:37.540
Number three, I just announced this.

00:22:37.540 --> 00:22:38.760
I thought it was pretty neat.

00:22:38.760 --> 00:22:45.420
I wrote a blog post that talked Python hit 20 million downloads and is the number two developer

00:22:45.420 --> 00:22:46.320
podcast out there.

00:22:46.320 --> 00:22:47.020
I just found out.

00:22:47.020 --> 00:22:49.540
I wrote a blog post just sort of celebrating that.

00:22:49.540 --> 00:22:52.700
That's very impressive.

00:22:52.700 --> 00:22:53.100
Yeah.

00:22:53.100 --> 00:22:53.660
Good job.

00:22:53.660 --> 00:22:53.940
That's crazy.

00:22:53.940 --> 00:22:54.140
Yeah.

00:22:54.140 --> 00:22:54.440
Thanks.

00:22:54.440 --> 00:22:54.700
Thanks.

00:22:55.040 --> 00:22:58.360
And by the way, Python bytes is around 6 million and going.

00:22:58.360 --> 00:23:00.320
So we're pretty strong over here as well.

00:23:00.320 --> 00:23:01.160
Nice.

00:23:01.160 --> 00:23:01.860
Yeah.

00:23:01.860 --> 00:23:02.820
Awesome.

00:23:02.820 --> 00:23:03.880
Pyramid.

00:23:03.880 --> 00:23:08.300
Pyramid 2, the web framework is coming out and I actually tested it.

00:23:08.300 --> 00:23:12.040
Talk Python training, which is about 25,000 lines of Python is written in it.

00:23:12.040 --> 00:23:13.360
Just upgraded it.

00:23:13.360 --> 00:23:14.620
Ran everything.

00:23:14.620 --> 00:23:16.500
All the pytests pass.

00:23:16.500 --> 00:23:17.840
Everything else is good.

00:23:18.060 --> 00:23:20.300
So Pyramid 2 is looking solid.

00:23:20.300 --> 00:23:22.200
Not too much change, but it's good to see how it's going.

00:23:22.200 --> 00:23:30.080
Oh, Python 3.9.1 is out with 282 changes from, that's a lot.

00:23:30.080 --> 00:23:31.320
Well, let's go through them all.

00:23:31.320 --> 00:23:32.240
Yeah.

00:23:32.240 --> 00:23:32.440
Okay.

00:23:32.440 --> 00:23:35.960
Well, I'm going to say it like 10, 10, 10 X speed, if you don't mind.

00:23:35.960 --> 00:23:40.880
Now, the other notable thing, almost the reason I'm bringing this out is that the Python on

00:23:40.880 --> 00:23:45.760
macOS also ships as a universal binary, which means it has an Intel version and an Apple M1

00:23:45.760 --> 00:23:46.200
version.

00:23:46.200 --> 00:23:47.260
Oh, nice.

00:23:47.260 --> 00:23:53.520
Which leads to all sorts of interesting weirdness when you pip install things that expect Intel.

00:23:53.520 --> 00:23:56.200
But nonetheless, it's out there and people can start playing with it.

00:23:56.200 --> 00:24:03.120
I actually did a stream, live stream number six with Paul Everett from JetBrains.

00:24:03.720 --> 00:24:07.580
So we're exploring what's the Python experience on the Apple M1 Mac mini.

00:24:07.580 --> 00:24:11.820
So that's like an hour long video he and I did last Friday.

00:24:11.820 --> 00:24:13.700
And I will link to that.

00:24:13.700 --> 00:24:14.320
You can check it out.

00:24:14.320 --> 00:24:15.680
Well, what's the punchline though?

00:24:15.680 --> 00:24:20.180
The punchline is almost everything works, but we couldn't get JupyterLab to work for some

00:24:20.180 --> 00:24:20.420
reason.

00:24:20.420 --> 00:24:21.160
Oh, okay.

00:24:21.160 --> 00:24:24.060
But everything else seemed to be pretty much fine.

00:24:24.120 --> 00:24:30.040
But the trick is you kind of need a lot of times you're going to work with something that

00:24:30.040 --> 00:24:34.700
maybe doesn't have an M1 version of the package or the wheel.

00:24:34.700 --> 00:24:42.080
But if you go to the terminal and you create a copy of it and then you tell it to run under

00:24:42.080 --> 00:24:47.540
Rosetta, every Python command you issue becomes a Intel Python command.

00:24:47.540 --> 00:24:54.680
So if you pip install something, it'll use the wheels for the Intel version of Mac, not the

00:24:54.680 --> 00:24:56.480
M1 version of Mac and stuff like that.

00:24:57.260 --> 00:24:58.720
So it's kind of your escape hatch.

00:24:58.720 --> 00:25:02.820
Like once you open up that terminal, you've fallen back into the Intel world.

00:25:02.820 --> 00:25:04.720
So you don't have compatibility issues there.

00:25:04.720 --> 00:25:06.760
Okay.

00:25:06.760 --> 00:25:10.080
Anyway, we did a ton of that with stuff.

00:25:10.080 --> 00:25:12.120
Sherry, do you have an M1 Mac?

00:25:12.120 --> 00:25:12.560
Are you on?

00:25:12.560 --> 00:25:13.940
No, actually.

00:25:13.940 --> 00:25:15.780
I'm not on a Mac.

00:25:15.780 --> 00:25:16.800
I'm not on that.

00:25:16.800 --> 00:25:18.600
What's your OS of choice?

00:25:18.600 --> 00:25:23.180
Well, Microsoft.

00:25:23.180 --> 00:25:24.540
Yeah, Windows?

00:25:24.540 --> 00:25:24.920
Yeah.

00:25:24.920 --> 00:25:25.200
Awesome.

00:25:25.200 --> 00:25:25.520
Yeah.

00:25:26.160 --> 00:25:27.140
Yeah, they're doing good stuff.

00:25:27.140 --> 00:25:29.960
Like there's a ton of Python things happening over there.

00:25:29.960 --> 00:25:30.620
That's pretty exciting.

00:25:30.620 --> 00:25:31.000
All right.

00:25:31.000 --> 00:25:38.600
And then last thing, this is brand shiny new, is we have the Python steering council selected.

00:25:38.600 --> 00:25:40.800
We have Pablo Galindo.

00:25:40.800 --> 00:25:53.700
We have Carol Willing, Brett Cannon, Barry Warsaw, and last one, T. Wooders were all selected to

00:25:53.700 --> 00:25:55.820
be the new steering council.

00:25:55.820 --> 00:25:56.780
folks.

00:25:56.780 --> 00:25:58.320
So that's exciting.

00:25:58.320 --> 00:25:59.140
Yeah.

00:25:59.140 --> 00:25:59.720
Yeah.

00:25:59.720 --> 00:26:00.040
That's it.

00:26:00.040 --> 00:26:02.780
Those are my extra, extra 6X extras.

00:26:02.780 --> 00:26:05.300
Well, cool.

00:26:05.300 --> 00:26:06.100
Yeah.

00:26:06.100 --> 00:26:06.420
Awesome.

00:26:06.420 --> 00:26:12.100
And I guess last thing to talk about is a little computer vision.

00:26:12.980 --> 00:26:13.460
Yeah.

00:26:13.460 --> 00:26:13.500
Yeah.

00:26:13.500 --> 00:26:13.540
Yeah.

00:26:13.540 --> 00:26:13.540
Yeah.

00:26:13.540 --> 00:26:13.540
Yeah.

00:26:13.540 --> 00:26:13.980
Yeah.

00:26:13.980 --> 00:26:17.320
So this is like a really cool product I found out about a few years ago.

00:26:18.320 --> 00:26:20.160
And it's called OpenMV cam.

00:26:20.160 --> 00:26:20.240
And it's called OpenMV cam.

00:26:20.240 --> 00:26:21.700
And it's the latest one.

00:26:21.700 --> 00:26:26.480
It's a microcontroller development board with an onboard camera that runs machine vision algorithms

00:26:26.480 --> 00:26:27.520
with MicroPython.

00:26:28.160 --> 00:26:33.820
The OpenMV IDE and libraries make it really easy to run complex machine vision algorithms

00:26:33.820 --> 00:26:39.080
with simple Python code for things like color tracking, face detection, eye tracking.

00:26:39.620 --> 00:26:45.620
One particular application that I really like, which I did, is detecting April tags, which

00:26:45.620 --> 00:26:51.700
are like QR codes in that there are 2D binary pattern squares, but they encode a much smaller

00:26:51.700 --> 00:26:58.120
amount of bits between 4 and 12 bits rather than a QR code, which can store up to 3 kilobytes.

00:26:58.620 --> 00:27:03.900
And so by storing encoding a smaller amount of data, it makes them easier to detect and

00:27:03.900 --> 00:27:08.800
be able to be robustly detected with variations in the camera viewing angle and the lighting

00:27:08.800 --> 00:27:09.300
conditions.

00:27:09.300 --> 00:27:12.780
And they can be detected from a longer distance.

00:27:12.780 --> 00:27:19.920
And so it's just so convenient because the OpenMV IDE has an April tag generator.

00:27:19.920 --> 00:27:22.300
So you can easily create the tags and print them out.

00:27:22.300 --> 00:27:26.240
And it has an April tag MicroPython library.

00:27:26.380 --> 00:27:32.620
So you can easily implement the algorithm and the code will return the rotation and the ID

00:27:32.620 --> 00:27:34.460
code, among other information about it.

00:27:34.460 --> 00:27:41.540
And the company OpenMV has said they want to be the Arduino of machine vision because they

00:27:41.540 --> 00:27:44.440
have such an Arduino-like user interface.

00:27:44.440 --> 00:27:46.900
And you can view the output of the camera in the IDE.

00:27:46.900 --> 00:27:51.680
And they actually just announced a few weeks ago that they're now partnered with Arduino to

00:27:51.680 --> 00:27:56.360
support computer vision on a new wireless Arduino board called Portenta 8.

00:27:56.360 --> 00:28:02.200
7 with OpenMV firmware and the OpenMV IDE programmed in MicroPython.

00:28:02.200 --> 00:28:09.160
So it's really cool to be able to easily implement these complex machine vision algorithms with just a few

00:28:09.160 --> 00:28:14.580
lines of Python code on a plug and play STM32 microcontroller board.

00:28:15.740 --> 00:28:16.400
Yeah.

00:28:16.400 --> 00:28:17.320
Do you know what it costs?

00:28:17.320 --> 00:28:22.460
The latest one, I think it's, I got it, it's like 60, around $60.

00:28:22.460 --> 00:28:24.380
I'm trying to remember now.

00:28:24.380 --> 00:28:25.400
Oh, yeah, 65.

00:28:25.400 --> 00:28:26.540
Yeah, yeah, 65.

00:28:26.540 --> 00:28:30.800
That's to set up a little computer vision system for 65 bucks.

00:28:30.800 --> 00:28:31.760
That's cool.

00:28:31.760 --> 00:28:32.820
Yeah.

00:28:32.820 --> 00:28:34.960
I mean, I was very impressed.

00:28:35.020 --> 00:28:41.540
So I was just taking out of the box and running this example code that came with the IDE and was able to

00:28:41.540 --> 00:28:42.740
detect these April tags.

00:28:42.740 --> 00:28:48.920
And it's interesting to see how it compares to QR codes and they're more robust in detecting.

00:28:48.920 --> 00:28:50.900
Yeah.

00:28:50.900 --> 00:28:51.140
Okay.

00:28:51.140 --> 00:28:51.560
Yeah.

00:28:51.560 --> 00:28:55.300
And they have a little code example here that's quite straightforward, right?

00:28:55.360 --> 00:29:06.120
You just set the pixel format, how many frames, and then take a snapshot and run things like image.findblobs and like magic happens on that line.

00:29:06.120 --> 00:29:08.160
Yeah.

00:29:08.160 --> 00:29:10.180
Yeah.

00:29:10.180 --> 00:29:11.220
That's super cool.

00:29:11.220 --> 00:29:18.700
So one of the things that I've always wanted to do, and I don't know if I'll ever do, but I want to create an IoT course.

00:29:19.180 --> 00:29:31.780
And I would like the final exercise of the course to be setting up a camera so you can have a multiplayer or a computer against human game, but have the computer do it through computer vision.

00:29:31.780 --> 00:29:38.660
So over like a checkers board or a tic-tac-toe, like you draw on it, the computer looks at it and says, I want to go there.

00:29:38.660 --> 00:29:40.600
That would be so fun.

00:29:40.600 --> 00:29:43.020
It looks like this might be something I could use to make that happen.

00:29:43.020 --> 00:29:45.300
Yeah, definitely.

00:29:45.940 --> 00:29:51.780
I read that you can run TensorFlow Lite on it too, so you can train AI.

00:29:51.780 --> 00:29:56.620
You can train models for AI with TensorFlow running on this.

00:29:56.620 --> 00:29:59.400
Run it right on the device, not shipping it to the cloud.

00:29:59.400 --> 00:30:00.060
Yeah.

00:30:00.060 --> 00:30:00.780
Yeah.

00:30:00.780 --> 00:30:01.980
That'd make it really responsive.

00:30:01.980 --> 00:30:02.420
That's cool.

00:30:02.420 --> 00:30:04.420
Brian, what do you think?

00:30:04.420 --> 00:30:05.140
What would you do with it?

00:30:05.140 --> 00:30:10.040
I think you should run with that board thing and do a chess thing.

00:30:10.040 --> 00:30:17.860
You should get into robotics also and have it just move it.

00:30:17.860 --> 00:30:20.860
The claw comes out, grabs it.

00:30:20.860 --> 00:30:25.940
How about Settlers of Catan?

00:30:25.940 --> 00:30:26.620
Come on.

00:30:26.620 --> 00:30:28.920
If we could automate Settlers of Catan.

00:30:29.480 --> 00:30:35.900
And your would be even better, actually, would be not just have the computer play, but in

00:30:35.900 --> 00:30:39.720
this whole weird social distancing, bizarro world we live in.

00:30:39.720 --> 00:30:46.500
You could set it up so you and your friends just play and both have a board and the thing

00:30:46.500 --> 00:30:47.820
just tells you, oh, your friend moved here.

00:30:47.820 --> 00:30:48.660
You got to move that over.

00:30:48.660 --> 00:30:49.260
That'd be great.

00:30:49.260 --> 00:30:52.680
I've never even got through the instructions on Settlers of Catan yet.

00:30:52.680 --> 00:30:55.060
One of my daughters loves it and one of them hates it.

00:30:55.060 --> 00:30:56.020
They're like, please, we can't play.

00:30:56.020 --> 00:30:56.720
It takes so long.

00:30:56.720 --> 00:30:57.440
We can't do that.

00:30:59.340 --> 00:30:59.980
Yeah, it's funny.

00:30:59.980 --> 00:31:05.240
But anyway, I think this is a cool device and it'd be really fun to play around with it.

00:31:05.240 --> 00:31:08.420
65 bucks for the whole thing.

00:31:08.420 --> 00:31:09.440
That seems pretty affordable.

00:31:09.440 --> 00:31:10.520
Yeah.

00:31:10.520 --> 00:31:11.280
Yeah, definitely.

00:31:11.280 --> 00:31:12.460
Yeah.

00:31:12.460 --> 00:31:13.000
Awesome.

00:31:13.000 --> 00:31:14.960
All right.

00:31:14.960 --> 00:31:17.460
Well, what else have we got?

00:31:17.460 --> 00:31:20.560
I don't have any extras, Brian.

00:31:20.560 --> 00:31:22.340
I've already gone through my six extras.

00:31:22.340 --> 00:31:22.980
You got any extras?

00:31:22.980 --> 00:31:28.600
I just have one shout out to, I guess, the Python community on Twitter.

00:31:28.600 --> 00:31:30.180
I just want to say, I don't know.

00:31:30.180 --> 00:31:32.560
I'm getting a little cheesy today near Christmas.

00:31:32.560 --> 00:31:36.240
But this is a sort of a silly thing.

00:31:36.240 --> 00:31:38.500
But I saw there was a discussion on Twitter.

00:31:38.500 --> 00:31:40.600
It happened last night and today.

00:31:41.800 --> 00:31:54.860
There was somebody named Nicole Carlson that started this question of, do you say for K-W-A-R-G-S, do you pronounce that keyword arguments or do you pronounce it quarks?

00:31:54.860 --> 00:31:56.380
Oh, my gosh.

00:31:57.260 --> 00:32:00.760
And I had never considered pronouncing it quarks before.

00:32:00.760 --> 00:32:01.620
How about you, Michael?

00:32:01.620 --> 00:32:03.640
I think I did.

00:32:03.640 --> 00:32:04.980
I think I do say quarks.

00:32:04.980 --> 00:32:06.180
No, no.

00:32:06.180 --> 00:32:07.340
I say K-W-R-G-S.

00:32:07.340 --> 00:32:08.060
That's what I say.

00:32:08.060 --> 00:32:08.420
Okay.

00:32:08.420 --> 00:32:09.000
Yeah.

00:32:09.000 --> 00:32:11.380
So that was brought up by a couple of people that they use that.

00:32:11.380 --> 00:32:11.920
Yeah.

00:32:11.920 --> 00:32:13.040
K-W-R-G.

00:32:13.040 --> 00:32:13.620
That's what I say.

00:32:13.980 --> 00:32:16.780
And so I just, I'd never even consider, I like quarks.

00:32:16.780 --> 00:32:18.460
I'm going to start using that now.

00:32:18.460 --> 00:32:20.080
Sounds like it comes from Star Trek.

00:32:20.080 --> 00:32:21.540
But, yeah.

00:32:21.540 --> 00:32:22.960
A Klingon word.

00:32:22.960 --> 00:32:23.540
I don't know.

00:32:23.540 --> 00:32:26.580
Or, yeah, or quark from Deep Space Nine.

00:32:26.580 --> 00:32:27.260
Yeah.

00:32:27.260 --> 00:32:32.840
So Vicky Boykas said, I've never even considered not saying quarks.

00:32:32.840 --> 00:32:35.500
And a whole bunch of other people had different comments.

00:32:35.500 --> 00:32:43.760
And I just wanted to bring this up because it reminded me of like a conversation we'd have over beer or something at PyCon.

00:32:43.760 --> 00:32:47.700
Or in the, you know, in the hallway or something like that.

00:32:47.700 --> 00:32:55.600
And that little bit of just stupid conversation around Python, I just really appreciate it.

00:32:55.600 --> 00:33:00.780
And I like that that little bit is alive on Twitter at least a little bit.

00:33:00.780 --> 00:33:01.100
So.

00:33:01.100 --> 00:33:01.840
Yeah.

00:33:01.840 --> 00:33:02.180
Funny.

00:33:02.180 --> 00:33:04.340
Sherry, how do you say it?

00:33:04.340 --> 00:33:05.440
Oh, gosh.

00:33:05.440 --> 00:33:08.560
I am actually, I don't normally say that.

00:33:08.560 --> 00:33:13.560
You know what's funny is like when you, there's all these different little acronymy.

00:33:13.560 --> 00:33:14.780
words and programming.

00:33:14.780 --> 00:33:22.280
And it's funny when people, they mostly just read them the whole time and all of a sudden they have to say them.

00:33:22.280 --> 00:33:22.520
Right?

00:33:22.520 --> 00:33:27.020
Like pypi.org.

00:33:27.020 --> 00:33:27.280
Right?

00:33:27.280 --> 00:33:31.640
Like some people say PyPy and some people say IPI and so on.

00:33:31.640 --> 00:33:31.820
Right?

00:33:31.820 --> 00:33:33.100
I'm on the PyPI side.

00:33:33.100 --> 00:33:37.340
But it's just, you know, sometimes you don't have to pronounce it.

00:33:37.380 --> 00:33:38.040
But sometimes you do.

00:33:38.040 --> 00:33:38.940
Yeah.

00:33:38.940 --> 00:33:40.720
I'm not sure what side to take on this issue.

00:33:40.720 --> 00:33:41.040
Yeah.

00:33:41.040 --> 00:33:42.540
This changed my life though.

00:33:42.540 --> 00:33:44.660
I'm going to, it quarks all the time now.

00:33:44.660 --> 00:33:45.820
Right on.

00:33:45.820 --> 00:33:46.780
Sounds good.

00:33:46.780 --> 00:33:50.600
Sherry, anything else you want to give a shout out to while we're here?

00:33:50.600 --> 00:33:52.740
I don't know.

00:33:52.740 --> 00:33:53.280
I mean, just thank you.

00:33:53.280 --> 00:33:54.680
Thank you so much for listening.

00:33:54.680 --> 00:33:59.400
And thank you for checking out my Kickstarter campaign for a Dan Code Python.

00:33:59.400 --> 00:33:59.740
Yeah.

00:33:59.740 --> 00:33:59.920
Yeah.

00:33:59.920 --> 00:34:00.860
It's good to have you here this time.

00:34:00.860 --> 00:34:01.760
All right.

00:34:01.760 --> 00:34:04.400
Brian, I think we should finish it with a joke.

00:34:04.460 --> 00:34:04.900
What do you think?

00:34:04.900 --> 00:34:05.700
Sure.

00:34:05.700 --> 00:34:06.760
All right.

00:34:06.760 --> 00:34:08.740
So I'm having this problem.

00:34:08.740 --> 00:34:16.980
I lived in this apartment complex, the fourth floor, the fourth apartment on that floor.

00:34:16.980 --> 00:34:21.320
And yeah, the number of the apartment was 404.

00:34:21.320 --> 00:34:22.720
But, you know, what's the problem?

00:34:22.720 --> 00:34:26.040
404 apartment not found.

00:34:26.040 --> 00:34:26.920
Exactly.

00:34:26.920 --> 00:34:30.720
Every time I order a pizza, the delivery guy tells me he couldn't find the place.

00:34:30.720 --> 00:34:32.920
Was that really your apartment?

00:34:33.500 --> 00:34:34.500
No, I wish I was.

00:34:34.500 --> 00:34:35.400
That would have been awesome.

00:34:35.400 --> 00:34:37.340
No.

00:34:37.340 --> 00:34:38.700
I lived on 214.

00:34:38.700 --> 00:34:42.480
I don't know if that's an HTTP status code, but that's as close as it's been.

00:34:42.480 --> 00:34:43.060
108.

00:34:43.060 --> 00:34:45.360
I don't know what 100s even really do.

00:34:45.360 --> 00:34:48.160
And I know they're status codes, but I don't know 108.

00:34:48.160 --> 00:34:48.900
I'll stop my head either.

00:34:48.900 --> 00:34:51.040
But this one, this is a good one.

00:34:51.040 --> 00:34:51.700
I like it a lot.

00:34:51.700 --> 00:34:53.400
I like that too.

00:34:53.400 --> 00:34:56.880
Well, I got one last joke.

00:34:56.880 --> 00:34:57.760
Okay.

00:34:57.760 --> 00:35:02.540
So why do software developers or many of them prefer dark mode?

00:35:02.540 --> 00:35:05.600
Why?

00:35:05.600 --> 00:35:06.080
Tell us.

00:35:06.080 --> 00:35:08.100
Because bugs are attracted to light.

00:35:08.100 --> 00:35:10.160
Oh, yes.

00:35:10.160 --> 00:35:10.680
Awesome.

00:35:10.680 --> 00:35:12.180
I heard this on Twitter.

00:35:12.180 --> 00:35:12.820
It's terrible.

00:35:13.940 --> 00:35:16.200
And I told my family.

00:35:16.200 --> 00:35:20.460
It's one of those, sometimes some jokes you tell your family and they just stare at you.

00:35:22.460 --> 00:35:22.680
Yeah.

00:35:22.680 --> 00:35:23.140
Yeah.

00:35:23.140 --> 00:35:23.880
They don't get it.

00:35:23.880 --> 00:35:24.020
All right.

00:35:24.020 --> 00:35:24.440
Really quick.

00:35:24.440 --> 00:35:27.820
I want to follow up with one comment from the live stream.

00:35:27.820 --> 00:35:31.920
And if you're not listening, you're not interested, you don't know about yet the live stream.

00:35:31.920 --> 00:35:33.780
We're also streaming this onto YouTube now.

00:35:33.780 --> 00:35:38.440
So check out pythonbytes.fm/YouTube and you can subscribe to the upcoming live streams.

00:35:38.440 --> 00:35:40.960
But Brian, there's a question here.

00:35:43.800 --> 00:35:45.500
When's your second edition coming out?

00:35:45.500 --> 00:35:46.160
Come on, man.

00:35:46.160 --> 00:35:48.680
There is no planned date.

00:35:48.680 --> 00:35:49.780
Okay.

00:35:49.780 --> 00:35:53.620
And then also we have the German version of KW Args.

00:35:53.620 --> 00:35:57.520
I say KV Args.

00:35:57.520 --> 00:35:59.780
KV Args.

00:35:59.780 --> 00:36:04.380
That's just like saying KW, the German pronunciation, Args.

00:36:04.380 --> 00:36:05.240
Yeah.

00:36:05.240 --> 00:36:05.960
Awesome.

00:36:05.960 --> 00:36:06.320
All right.

00:36:06.320 --> 00:36:08.140
Well, thanks so much.

00:36:08.140 --> 00:36:09.480
Sherry, thanks for being here.

00:36:09.480 --> 00:36:10.500
Thank you so much.

00:36:10.500 --> 00:36:11.620
Thank you.

00:36:11.960 --> 00:36:12.640
That was really fun.

00:36:12.640 --> 00:36:13.700
Yeah, you bet.

00:36:13.700 --> 00:36:13.900
Bye.

00:36:13.900 --> 00:36:14.580
Bye, everyone.

00:36:14.580 --> 00:36:15.080
Thanks for watching.

