WEBVTT

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

00:00:04.880 --> 00:00:09.340
This is episode 94, recorded September 5th, 2018. I'm Michael Kennedy.

00:00:09.340 --> 00:00:10.320
And I'm Brian Okken.

00:00:10.320 --> 00:00:11.180
Hey, Brian. How are you doing?

00:00:11.180 --> 00:00:13.000
I'm doing really good. Yeah.

00:00:13.000 --> 00:00:17.300
Excellent. Doing very well. The sun is shining. Summer has not left us yet.

00:00:17.300 --> 00:00:21.640
It's not that great for productivity, but it's definitely good for keeping the spirits up.

00:00:21.640 --> 00:00:27.900
You know what else is keeping my spirits up is my DigitalOcean servers, the ones running this site and many others.

00:00:28.340 --> 00:00:31.720
They've been working perfectly. So they've been going really, really strong.

00:00:31.720 --> 00:00:33.240
And we'll tell you more about them later.

00:00:33.240 --> 00:00:38.980
But in the meantime, if you want to check them out, pythonbytes.fm/DigitalOcean, get $100 credit for new users.

00:00:38.980 --> 00:00:47.820
Brian, when I was in the C++ world, the C# world, design patterns were like this massive thing.

00:00:47.820 --> 00:00:49.940
And you had to know all the design patterns.

00:00:49.940 --> 00:00:53.940
And there was like dependency injection and IOC containers and all this stuff.

00:00:53.960 --> 00:01:02.240
And I feel like Python doesn't have as much rigor around it because you don't have to jump through so many hoops to make certain things happen, I guess.

00:01:02.240 --> 00:01:03.080
What do you think?

00:01:03.080 --> 00:01:04.460
Yeah, I think so.

00:01:04.460 --> 00:01:08.140
And it's actually something that's interesting because I came from the C++ world.

00:01:08.140 --> 00:01:10.560
So patterns were a thing in C# also?

00:01:10.560 --> 00:01:10.920
Oh, yeah.

00:01:11.020 --> 00:01:11.140
Okay.

00:01:11.140 --> 00:01:15.760
Well, I don't even know who the gang of four are.

00:01:15.760 --> 00:01:21.080
But there were four authors that wrote the design patterns book.

00:01:21.080 --> 00:01:21.840
Let's see.

00:01:21.840 --> 00:01:27.420
Eric Gamma, Richard Helm, Ralph Johnson, and I'm not going to try to pronounce that last one.

00:01:27.420 --> 00:01:28.020
John something.

00:01:28.740 --> 00:01:37.960
Anyway, gosh, in the 90s, if you were in C++ or C#, apparently you read this book or others around design patterns.

00:01:37.960 --> 00:01:43.180
And then when I got into Python, I was a little curious whether that was a thing in Python or not.

00:01:43.180 --> 00:01:48.280
But I haven't really heard much other than I haven't really needed it.

00:01:48.280 --> 00:01:49.760
A lot of this stuff isn't really needed.

00:01:49.760 --> 00:01:58.000
What I think is interesting is there's those patterns that you see from the gang of four and the sort of derivative ones, derivative books and thinking.

00:01:58.000 --> 00:02:00.340
And a lot of it, like you say, is not needed.

00:02:00.340 --> 00:02:03.240
But there are other patterns that are really useful and come in.

00:02:03.240 --> 00:02:06.860
Like, for example, meta classes, for example, or decorators.

00:02:06.860 --> 00:02:08.820
Or there's other stuff, right?

00:02:08.820 --> 00:02:10.100
Generator methods.

00:02:10.100 --> 00:02:17.540
All sorts of stuff that is in here that don't appear in the gang of four because C++ or Smalltalk just didn't do that.

00:02:17.540 --> 00:02:19.580
They were highly based on Smalltalk, actually.

00:02:19.580 --> 00:02:20.380
Their patterns.

00:02:20.380 --> 00:02:20.720
Right.

00:02:20.720 --> 00:02:27.820
Well, one of the things that caught my attention today was a tweet by, gosh, who's this guy?

00:02:27.820 --> 00:02:28.040
Brandon Rhodes.

00:02:28.040 --> 00:02:29.260
Brandon Rhodes, yep.

00:02:29.260 --> 00:02:34.060
And he's doing, he's got a site called pythonpatterns.guide.

00:02:34.060 --> 00:02:42.940
And it has, he's sort of going through a lot of different, I think he's going through the gang of four book.

00:02:42.940 --> 00:02:50.060
But he might be also doing other, pulling together other design pattern things that he's talked.

00:02:50.060 --> 00:02:53.100
Yeah, he's pulling together information from talks and writing.

00:02:53.100 --> 00:02:55.140
And I think he's creating more information, too.

00:02:55.140 --> 00:03:00.280
But there are a whole bunch of these, trying to apply some of these patterns to Python.

00:03:00.660 --> 00:03:03.860
And kind of sometimes different ways to do it.

00:03:03.860 --> 00:03:05.760
So you can do things in different ways.

00:03:05.760 --> 00:03:13.560
And so far, he's got abstract factory pattern, the builder pattern, factory method, composite, decorator.

00:03:13.560 --> 00:03:15.120
Yeah, we definitely have decorators.

00:03:15.460 --> 00:03:20.580
And then things like monkey patches and iterators, things like that.

00:03:20.580 --> 00:03:28.060
And how that applies, I'm glad that somebody that knows what they're talking about is trying to figure out, how does this all apply in Python?

00:03:28.060 --> 00:03:31.040
And I haven't really dug too much into this.

00:03:31.040 --> 00:03:34.900
I just think it's a neat resource to try to read about some of these.

00:03:34.900 --> 00:03:36.960
Yeah, I definitely think it's a really neat resource.

00:03:36.960 --> 00:03:41.380
And Brandon has some interesting thinking on design patterns and architectures.

00:03:41.680 --> 00:03:47.680
He gave a super counterintuitive talk called Clean Architecture.

00:03:47.680 --> 00:03:49.660
I think it was at Pi Ohio a couple years ago.

00:03:49.660 --> 00:03:53.380
And when I first started watching it, I was like, I just disagree with everything you're saying.

00:03:53.380 --> 00:03:55.140
This just seems so wrong.

00:03:55.140 --> 00:03:58.440
And then after 10 minutes, I'm like, but wait a minute.

00:03:58.440 --> 00:03:59.620
I think it's right.

00:03:59.620 --> 00:04:02.000
I think I've been thinking about this all wrong.

00:04:02.000 --> 00:04:07.840
And it really caught my attention because I didn't agree with it so much.

00:04:07.840 --> 00:04:11.000
But then I'm like, wow, this is really compelling what you're telling me.

00:04:11.080 --> 00:04:12.680
So maybe I need to rethink what I'm thinking.

00:04:12.680 --> 00:04:18.520
And whenever I have that feeling, I'm like, whoa, I need to pay attention because I might learn something really good here.

00:04:18.520 --> 00:04:20.700
Yeah, so that's a good point.

00:04:20.700 --> 00:04:25.400
I'm not necessarily saying, since I haven't really dug through this too much, I'm not sure.

00:04:25.400 --> 00:04:28.860
I mean, I respect Brandon as a smart guy.

00:04:28.860 --> 00:04:34.440
I expect that there's some really great stuff in here, but you may not agree with all of it.

00:04:34.440 --> 00:04:38.260
So we'll try to dig up a link to that Clean Architecture too because that sounds interesting.

00:04:38.260 --> 00:04:39.120
It's super interesting.

00:04:39.120 --> 00:04:39.540
Yeah, yeah.

00:04:39.540 --> 00:04:40.580
It's definitely a good one.

00:04:40.980 --> 00:04:41.820
Cool.

00:04:41.820 --> 00:04:42.680
Well, thanks for bringing this up.

00:04:42.680 --> 00:04:44.300
I love these Python patterns.

00:04:44.300 --> 00:04:51.660
And I love sort of the how would these traditional, more formalized patterns actually look in our language.

00:04:51.660 --> 00:04:53.420
And there's a lot of interesting examples there.

00:04:53.420 --> 00:04:53.700
Yeah.

00:04:53.700 --> 00:04:54.860
What do we got next?

00:04:54.860 --> 00:04:56.760
Well, we got this thing called Arctic.

00:04:56.760 --> 00:04:57.760
Arctic.

00:04:57.760 --> 00:05:04.900
Arctic is an API framework over top of MongoDB and Pandas.

00:05:04.900 --> 00:05:10.220
And the idea is this is a thing that's been around since around 2012.

00:05:10.220 --> 00:05:16.440
And its sole purpose is analyzing time series data super fast.

00:05:16.440 --> 00:05:25.060
So one of their headline is basically Arctic millions of rows per second of time data in Python.

00:05:25.060 --> 00:05:27.600
So that is really quite impressive.

00:05:27.600 --> 00:05:29.960
I can tell you a lot of the ODMs and ORMs and stuff.

00:05:29.960 --> 00:05:31.740
They don't do millions of records per second.

00:05:32.100 --> 00:05:38.280
So the idea is that it basically bakes in pandas and numpies and all those kinds of things.

00:05:38.620 --> 00:05:41.520
And it has an underlying data store that's backed by MongoDB.

00:05:41.520 --> 00:05:46.060
And it actually uses the binary low-level communication.

00:05:46.060 --> 00:05:52.380
So instead of trying to store all the data and then bringing it back and deserializing each row,

00:05:52.380 --> 00:05:57.340
I think what it does is it actually just stores the binary data of pandas.

00:05:57.340 --> 00:06:00.500
And it'll pickle numpy arrays and stuff like that.

00:06:00.500 --> 00:06:04.620
And just exchanges the memory structure and just pulls it straight back and go,

00:06:04.620 --> 00:06:05.440
yep, here it is.

00:06:05.440 --> 00:06:06.200
Let's look at it.

00:06:06.200 --> 00:06:07.120
And it's pretty cool.

00:06:07.120 --> 00:06:07.520
Yeah.

00:06:08.120 --> 00:06:09.160
Yeah, definitely.

00:06:09.160 --> 00:06:13.820
I mean, there's a lot of applications that use just huge amounts of time series data.

00:06:13.820 --> 00:06:14.420
Yeah.

00:06:14.420 --> 00:06:22.840
So they say the two big areas they think it's useful is IoT, little tiny IoT devices that maybe Python is running on,

00:06:22.840 --> 00:06:24.900
and financial analysis.

00:06:24.900 --> 00:06:32.400
So it's sort of been extracted out of the work that this financial company called MAN, AHL,

00:06:32.400 --> 00:06:36.560
I've never heard of them, but I think they're mostly an Asian company, but also in the U.S.,

00:06:36.560 --> 00:06:38.320
around investment and so on.

00:06:38.320 --> 00:06:40.120
So they've been working on this.

00:06:40.120 --> 00:06:49.560
And they actually have some numbers on how this thing performs relative to other types of projects that they pursued or other things that were available.

00:06:50.220 --> 00:06:54.840
So they talk about the different kinds of data that they store and analyze for stock trading and analysis.

00:06:54.840 --> 00:07:01.040
And they say, look, we have this sort of data that's for one day, a whole bunch of it, maybe 10,000 rows.

00:07:01.040 --> 00:07:04.360
And they can work with those 10,000 rows in four milliseconds.

00:07:05.140 --> 00:07:11.180
And they say, compare that to what we were getting out of SQL Server, which was 2.2 seconds.

00:07:11.180 --> 00:07:14.920
So, you know, 500 times slower, which is pretty incredible.

00:07:14.920 --> 00:07:18.840
And they have this other tick data, like, you know, the stock ticker type of data.

00:07:19.580 --> 00:07:26.380
They can say in one second they can process 3.5 megs worth of that data in Python or 15 megs in Java.

00:07:26.380 --> 00:07:33.260
And there was some other project that they were trying to improve over called OtherTick, which took like 40 seconds versus one.

00:07:33.260 --> 00:07:40.240
So really, really interesting, high-performance, database-backed time series.

00:07:40.240 --> 00:07:41.540
Neat.

00:07:41.660 --> 00:07:41.780
Yeah.

00:07:41.780 --> 00:07:49.000
So if you're into Pandas, NumPy, and you've got to store and query a bunch of time series, whatever the reason, this is probably worth checking out.

00:07:49.000 --> 00:07:52.020
And it's also tested with pytest, which is pretty cool, right?

00:07:52.020 --> 00:07:52.840
Well, of course.

00:07:52.840 --> 00:07:55.980
Any real project is tested with pytest.

00:07:55.980 --> 00:07:56.840
That's right.

00:07:56.840 --> 00:07:57.700
Of course.

00:07:57.700 --> 00:08:08.720
So one of the things I really like about the Python community is the fact that there's so much sharing of information out of conferences and meetups and things like that.

00:08:08.860 --> 00:08:13.060
So we have another thing you found here for PyCon, right?

00:08:13.060 --> 00:08:13.600
Yeah.

00:08:13.600 --> 00:08:18.740
So the PyCon – I don't remember when it was, but PyCon Australia wasn't too long ago.

00:08:18.740 --> 00:08:22.160
And they've already got all the videos up.

00:08:22.160 --> 00:08:25.220
And we have a link to the PyCon Australia videos.

00:08:25.220 --> 00:08:31.260
And I've got quite a few of them queued up that I'd like to listen to and watch.

00:08:31.260 --> 00:08:33.400
I'm kind of bad about videos, actually.

00:08:33.400 --> 00:08:40.900
I often just listen to them and then go back and look at the slide parts of information that I wanted to capture.

00:08:40.900 --> 00:08:43.200
But I like listening to talks as well.

00:08:43.200 --> 00:08:48.920
But there's one from Mark Smith, which he always amuses me because his Twitter handle is Judy2K.

00:08:48.920 --> 00:08:50.640
And he won't tell me why.

00:08:50.640 --> 00:08:55.040
But his talk is how to publish a package on PyPI.

00:08:55.040 --> 00:08:56.700
And that's the one I've watched so far.

00:08:57.140 --> 00:08:58.500
There's a lot of great talks there, though.

00:08:58.500 --> 00:09:04.400
But I think this one's a great one that it – the end punchline is use cookie cutter.

00:09:04.400 --> 00:09:09.540
But he blasts through not using cookie cutter, all this sort of stuff you have to do to get up.

00:09:09.540 --> 00:09:12.840
And, you know, it's – every little piece makes sense and it's not difficult.

00:09:12.840 --> 00:09:14.340
But there are a lot of different little pieces.

00:09:14.340 --> 00:09:17.520
But he goes through this entire thing in like less than half an hour.

00:09:17.900 --> 00:09:24.600
And so that's pretty impressive to watch him talk about all the different pieces and why they're there and what they're used for.

00:09:24.600 --> 00:09:31.420
So that's a good one to sort of understand what's going on in the packaging world in a very short amount of time.

00:09:31.420 --> 00:09:32.260
Oh, that's really cool.

00:09:32.260 --> 00:09:33.980
Yeah, there's a bunch of cool ones here.

00:09:33.980 --> 00:09:36.340
A couple in MicroPython, actually.

00:09:36.340 --> 00:09:39.780
So one writing fast and efficient MicroPython code.

00:09:39.780 --> 00:09:42.260
And the other is async.io in MicroPython.

00:09:42.260 --> 00:09:43.700
Both of those are pretty cool.

00:09:43.700 --> 00:09:46.300
Kind of tie into what we were just talking about previously.

00:09:46.300 --> 00:09:53.680
Yeah, and then there's like – gosh, there's solid APIs and there's – it looks like a lot of good stuff.

00:09:53.680 --> 00:10:03.420
And I know that Australia is – since it's a big travel burden to other places, other PyCons, you'll see some speakers there that you're not going to see other places.

00:10:03.420 --> 00:10:04.360
So that's cool.

00:10:04.360 --> 00:10:04.780
Yeah, absolutely.

00:10:04.780 --> 00:10:06.040
And they have 88 videos.

00:10:06.040 --> 00:10:07.240
So that's pretty solid.

00:10:07.240 --> 00:10:07.660
Yeah.

00:10:07.660 --> 00:10:08.180
Quite cool.

00:10:08.180 --> 00:10:08.720
That's a good one.

00:10:08.720 --> 00:10:12.960
So before we move on, I'll tell you about another cool thing, DigitalOcean.

00:10:12.960 --> 00:10:14.580
All right, so I'm a big fan.

00:10:14.920 --> 00:10:21.760
And so one of the things that they've released – we talked about this just a couple of times, not very much – is this idea of projects.

00:10:22.380 --> 00:10:35.800
So when you go into your name, your cloud provider, you might have a bunch of servers, a bunch of ESP storage type things, virtual storage blocks, load balancers, all sorts of stuff.

00:10:35.800 --> 00:10:38.340
And it's really hard to know what goes with what.

00:10:38.340 --> 00:10:41.520
Do you have a staging environment, a production environment, all that kind of stuff, right?

00:10:41.520 --> 00:10:42.960
So how do you organize that?

00:10:43.040 --> 00:10:55.240
So DigitalOcean has come up with this feature called projects that lets you group things like your droplets, that's virtual machines, and floating IPs, and back storage-like spaces into these different use cases.

00:10:55.240 --> 00:10:59.200
So you know, yeah, actually, we're done with this project.

00:10:59.200 --> 00:11:06.240
So we can turn that server off and destroy it and not like the fear of, I don't think we're using this one, but I'm not going to destroy it.

00:11:06.240 --> 00:11:08.840
I'm not going to delete it because what if I'm wrong, right?

00:11:08.840 --> 00:11:12.360
So a very cool feature you can take advantage of for all of their stuff.

00:11:12.360 --> 00:11:18.280
Check them out at pythonbytes.fm/DigitalOcean, and they'll give you $100 credit for new users.

00:11:18.280 --> 00:11:18.920
That's awesome.

00:11:19.240 --> 00:11:20.600
Hey, let's talk about another cloud provider.

00:11:20.600 --> 00:11:23.160
I'll write it on the back of that.

00:11:23.160 --> 00:11:37.180
So one of the ways that you can run your code on the internet is like I just described with DigitalOcean, like I do for our stuff, is to create some virtual machines and various other pieces and sort of use it as so-called infrastructure as a service, right?

00:11:37.180 --> 00:11:38.080
IaaS.

00:11:38.080 --> 00:11:41.940
But you might also use platform as a service, like here's my code, run it.

00:11:41.940 --> 00:11:45.300
So Google App Engine, Heroku, those types of things.

00:11:45.300 --> 00:11:45.780
Okay.

00:11:45.780 --> 00:11:54.880
So Google App Engine has a pretty interesting announcement, and it's interesting for both it's good now and like, oh my gosh, I can't believe it was like that.

00:11:54.880 --> 00:12:03.280
So the announcement is that Google App Engine has released their second generation runtimes, which the Python one is now based on Python 3.7.

00:12:03.280 --> 00:12:04.500
That's pretty awesome, right?

00:12:04.500 --> 00:12:05.220
It is.

00:12:05.220 --> 00:12:06.260
You want to run some code.

00:12:06.260 --> 00:12:06.860
Boom.

00:12:06.860 --> 00:12:08.220
Here's my Python 3.7.

00:12:08.220 --> 00:12:09.240
So that's really good.

00:12:09.240 --> 00:12:11.420
You might think, oh, Michael, what was the previous one?

00:12:11.420 --> 00:12:12.040
3.6?

00:12:12.040 --> 00:12:13.300
3.5?

00:12:13.540 --> 00:12:15.780
No, I believe the previous one was 2.7.

00:12:15.780 --> 00:12:16.760
Oh, no.

00:12:16.760 --> 00:12:17.460
Until now.

00:12:17.460 --> 00:12:22.000
Like if you were using Google App Engine, I believe you had to use a legacy Python, period.

00:12:22.000 --> 00:12:26.320
Until that was like mid-2018 that I just said that.

00:12:26.320 --> 00:12:28.940
That wasn't like a statement around 2012 or something.

00:12:28.940 --> 00:12:30.140
That was just now.

00:12:30.140 --> 00:12:33.580
But let bygones be bygones.

00:12:33.580 --> 00:12:35.940
And now it's Python 3.7, which is pretty awesome.

00:12:36.400 --> 00:12:38.880
So apparently it's a pretty big upgrade.

00:12:38.880 --> 00:12:39.880
You get a bunch of new things.

00:12:39.880 --> 00:12:46.800
Like, for example, it's based on their new sandbox container, sort of Docker-like things.

00:12:46.800 --> 00:12:48.960
It removes a bunch of restrictions.

00:12:48.960 --> 00:12:56.380
Like, in addition to only running on the old Python, legacy Python, you could only use a white-labeled set of packages.

00:12:56.380 --> 00:13:00.140
And now in the new Google App Engine, you can use arbitrary packages.

00:13:00.140 --> 00:13:03.320
Just put them in a requirements file, which is pretty sweet.

00:13:03.320 --> 00:13:04.220
That's a big change.

00:13:04.580 --> 00:13:05.920
It is a pretty big change.

00:13:05.920 --> 00:13:06.260
Yeah.

00:13:06.260 --> 00:13:09.500
So a lot of cool things like autoscaling and things that are a little bit easier as well.

00:13:09.500 --> 00:13:16.460
So anyway, if you're interested in Google App Engine's platform as a service for Python, it just got many, many times better.

00:13:16.460 --> 00:13:16.900
Yeah.

00:13:16.900 --> 00:13:17.600
Neat.

00:13:17.600 --> 00:13:17.840
Yeah.

00:13:17.840 --> 00:13:18.220
Yeah.

00:13:18.220 --> 00:13:24.440
So, Brian, I typically write my code in Python files, not really in notebooks per se.

00:13:24.440 --> 00:13:25.460
How about you?

00:13:25.460 --> 00:13:26.980
Yeah, mostly in files.

00:13:26.980 --> 00:13:31.380
But I'm trying to learn Jupyter Notebooks some and utilize them.

00:13:31.540 --> 00:13:37.940
They're kind of fun, especially in data science-y realms or looking at plotting data and stuff.

00:13:37.940 --> 00:13:38.800
Notebooks are fun.

00:13:38.800 --> 00:13:39.480
Yeah.

00:13:39.480 --> 00:13:46.720
But there was a person named Joel Gruse that says he does not like notebooks.

00:13:46.720 --> 00:13:49.540
And Joel is notable because he's not like a random dude on the internet.

00:13:49.880 --> 00:13:54.160
But Joel Gruse has written a book called Data Science from Scratch.

00:13:54.160 --> 00:13:57.120
He's done a lot of work in data science, things like that.

00:13:57.120 --> 00:13:59.580
I've even had him on Talk Python many moons ago.

00:13:59.980 --> 00:14:00.380
Yeah.

00:14:00.380 --> 00:14:03.940
And this wasn't just like a one-off comment.

00:14:03.940 --> 00:14:07.000
He gave this talk at JupyterCon.

00:14:07.000 --> 00:14:09.480
And that's kind of hilarious.

00:14:09.480 --> 00:14:14.400
But the video for that is not available yet as far as I couldn't find it.

00:14:14.400 --> 00:14:17.500
So because that was just recently or still going on, I'm not sure.

00:14:17.500 --> 00:14:19.620
But the slides are up.

00:14:19.620 --> 00:14:20.600
He put the slides up.

00:14:20.960 --> 00:14:23.200
And for one, it puts me to shame.

00:14:23.200 --> 00:14:28.220
You know, this presentation has got so many animations and pictures and stuff.

00:14:28.220 --> 00:14:30.180
Plus, it's like I haven't even got through it yet.

00:14:30.180 --> 00:14:32.020
It's like 100 pages long or more.

00:14:32.020 --> 00:14:33.860
But it's really good.

00:14:33.860 --> 00:14:44.360
But it's a serious discussion about some of the issues with the problems with notebooks that people new to notebooks don't quite get.

00:14:44.360 --> 00:14:48.660
And people old to notebooks just sort of know it and don't really think about it anymore.

00:14:48.660 --> 00:14:52.120
And one of the big ones is that there's hidden state.

00:14:52.120 --> 00:14:59.480
And so, essentially, we think of files as, like you said, we normally work in files.

00:14:59.480 --> 00:15:04.000
So they get run from top to bottom, except for, you know, functions don't get run.

00:15:04.000 --> 00:15:05.880
They get interpreted as functions.

00:15:05.880 --> 00:15:08.860
And then when they are run, they run top to bottom, essentially.

00:15:08.860 --> 00:15:10.880
And notebooks are not like that.

00:15:10.880 --> 00:15:15.960
You can jump around and execute different bits of code in different orders if you feel like it.

00:15:15.960 --> 00:15:21.180
And that stateness can lead to weird, confusing things.

00:15:21.180 --> 00:15:23.960
So it's just like a gotcha to know about.

00:15:24.080 --> 00:15:36.600
And then he goes on to talk about some of the issues where if you start learning how to code with notebooks, you may end up, you know, developing some bad habits like importing notebooks instead of just trying to.

00:15:36.600 --> 00:15:43.700
I mean, like, that's a thing apparently you can do is you can define some functions in a notebook and then import them into another notebook.

00:15:43.700 --> 00:15:49.200
Well, I mean, wouldn't it be better to just put them in a different library, in a package or a library?

00:15:49.200 --> 00:15:50.640
Use the package, use the library.

00:15:50.640 --> 00:15:51.000
Exactly.

00:15:51.320 --> 00:15:51.620
Yeah.

00:15:51.620 --> 00:16:05.520
So some of those, and, you know, I'm highlighting this not because I think notebooks are evil, but because I think it's important to start to listen to people saying, you know, listen to a voice that says they aren't a silver bullet.

00:16:05.520 --> 00:16:07.860
They have their issues also.

00:16:07.860 --> 00:16:11.960
And we just need to be careful and talk and make sure you don't fall into those traps.

00:16:11.960 --> 00:16:13.180
Yeah, these are really interesting.

00:16:13.180 --> 00:16:16.000
And these are certainly issues to look out for.

00:16:16.000 --> 00:16:19.480
And while this is a funny presentation, I cannot wait to watch this video.

00:16:19.480 --> 00:16:26.440
Joel, if you're listening, please let us know when it's out or if someone else sees it come out, shoot us a note, either email or Twitter, because this is fantastic.

00:16:26.440 --> 00:16:26.900
Yeah.

00:16:26.900 --> 00:16:36.440
Plus, also, like, I can't even imagine how long it took to put together this presentation because it's, yeah, there's a lot of animations in there and it's quite a riot.

00:16:36.440 --> 00:16:37.520
It is quite a riot.

00:16:37.520 --> 00:16:37.760
Yeah.

00:16:37.760 --> 00:16:38.780
Anyway, there's that.

00:16:38.920 --> 00:16:42.100
Just the other side of maybe notebooks aren't awesome.

00:16:42.100 --> 00:16:42.480
Yeah.

00:16:42.480 --> 00:16:44.680
It's pretty, pretty, pretty interesting.

00:16:44.680 --> 00:16:56.180
So we've had a couple of conversations around the various peps and stuff that have been maybe causing some kerfuffle in the community.

00:16:56.180 --> 00:17:02.500
Obviously, the biggest one was a PEP 572 about the in-place assignments.

00:17:03.040 --> 00:17:08.260
And that was the thing with all the stress around it that Guido said, hey, after this, I'm, this is my last one.

00:17:08.260 --> 00:17:08.960
I've given my all.

00:17:08.960 --> 00:17:09.640
I'm out of here.

00:17:09.640 --> 00:17:11.340
You guys, it's up to you.

00:17:11.340 --> 00:17:16.160
We actually had Brett Cannon and Carol Willing on episode 87 to talk all about that.

00:17:16.160 --> 00:17:16.340
Right.

00:17:16.340 --> 00:17:21.420
And one of the things that we talked about was what comes next.

00:17:21.420 --> 00:17:22.480
Right.

00:17:22.480 --> 00:17:31.300
If, if it's not down to Guido to make the final decisions, which is how it has worked, how will the Python community decide, you know, what it's up to?

00:17:31.300 --> 00:17:33.360
So, yeah.

00:17:33.360 --> 00:17:38.780
So Barry Warsaw has published five peps at least around this.

00:17:38.780 --> 00:17:40.900
And I don't think this is a decision.

00:17:40.900 --> 00:17:45.960
It's sort of a structure to further the conversation and make a decision.

00:17:46.260 --> 00:17:53.320
So he just published not too long ago, PEP 8000, which is Python language government proposal overview.

00:17:53.320 --> 00:17:55.820
And I don't know if this is common in peps.

00:17:55.820 --> 00:18:01.080
I haven't seen it that much, but it's like a gathering of other peps that are specific details.

00:18:01.080 --> 00:18:05.320
So there's PEP 8,001, 8,002, 8,10, and 8,11.

00:18:05.800 --> 00:18:10.440
The first two are about voting and ways in which this government might work.

00:18:10.440 --> 00:18:16.780
And then the higher ones, the 8,10s are actual proposed models.

00:18:16.780 --> 00:18:19.520
And there's a third one in 8,12 that I forgot to put in the notes.

00:18:19.520 --> 00:18:28.900
And so there's for the government styles, government styles, we have the BDFL governance model is one of the proposed options,

00:18:28.900 --> 00:18:33.420
which is to elect a new person who is the final decider.

00:18:33.420 --> 00:18:34.040
Right.

00:18:34.680 --> 00:18:40.820
Basically, GEDO step down, who is going to take that place to now participate in that way?

00:18:40.820 --> 00:18:46.980
We also have the council governance model, which we talked about interesting things like should there be an even or odd number of people in the council?

00:18:46.980 --> 00:18:50.400
And then the last one, I think, let me pull that up.

00:18:50.400 --> 00:18:52.200
I think it is community.

00:18:52.200 --> 00:18:54.840
Yeah, the community governance model.

00:18:54.840 --> 00:18:57.580
And that one's a little more free form.

00:18:57.580 --> 00:19:02.540
So these are all different ways of possibly arranging and solving that problem.

00:19:02.660 --> 00:19:05.420
And there's a lot of examples like, let's see how Rust did it.

00:19:05.420 --> 00:19:09.660
Let's see how OpenStack manages their organization and so on.

00:19:09.660 --> 00:19:11.860
So there's a lot of concrete stuff there.

00:19:12.280 --> 00:19:13.580
Anyway, that's pretty cool.

00:19:13.580 --> 00:19:13.860
Yeah, that's interesting.

00:19:13.860 --> 00:19:21.320
If you have a strong thought on this and you want to participate, get in there, make comments, let people know what you're thinking.

00:19:21.320 --> 00:19:23.180
Because it's still open.

00:19:23.180 --> 00:19:24.500
It's not anything decided.

00:19:24.500 --> 00:19:25.200
Right?

00:19:25.200 --> 00:19:26.560
It's still up in the air.

00:19:26.560 --> 00:19:29.720
So if you want to have a say, now is the time to make statements.

00:19:29.720 --> 00:19:30.260
Wow.

00:19:30.360 --> 00:19:34.020
It's like government working in our own community.

00:19:34.020 --> 00:19:34.860
What?

00:19:34.860 --> 00:19:36.120
Incredible.

00:19:36.120 --> 00:19:37.220
Incredible.

00:19:37.220 --> 00:19:38.340
Yeah.

00:19:38.340 --> 00:19:38.940
Yeah.

00:19:38.940 --> 00:19:39.640
So this is pretty cool.

00:19:39.640 --> 00:19:43.580
I don't know where it's going to go, but I like that it's all laid out like this.

00:19:43.580 --> 00:19:49.460
My guess is it's going to go down the council model, maybe with, I don't know.

00:19:49.520 --> 00:19:51.100
I think it's going to go down the council model, but we'll see.

00:19:51.100 --> 00:19:51.700
Yeah.

00:19:51.700 --> 00:20:04.280
I think that whatever they do, they need, they should, if there's a council, they should have to meet together to make decisions and pass around like a talking stick or something.

00:20:04.280 --> 00:20:05.080
Yes.

00:20:05.080 --> 00:20:08.040
I love it.

00:20:08.040 --> 00:20:11.620
Oh, we could come up with something weird that they have to follow.

00:20:11.620 --> 00:20:14.860
How about the Python staff of power that you were carrying around?

00:20:14.860 --> 00:20:15.540
Yeah.

00:20:15.920 --> 00:20:21.600
But then, you know, should it be the blue and yellow one or should it be the green and yellow one?

00:20:21.600 --> 00:20:22.120
I don't know.

00:20:22.120 --> 00:20:23.280
That is a big question.

00:20:23.280 --> 00:20:23.620
Yeah.

00:20:23.620 --> 00:20:24.240
Yeah.

00:20:24.240 --> 00:20:24.500
Yeah.

00:20:24.500 --> 00:20:24.860
I don't know.

00:20:24.860 --> 00:20:28.160
So, sorry, green and gold.

00:20:28.160 --> 00:20:32.080
So people in Australia say it's gold, not yellow, but it looks yellow to me.

00:20:32.080 --> 00:20:32.380
Yeah.

00:20:32.380 --> 00:20:34.100
I definitely, I thought that stick was a big hit.

00:20:34.100 --> 00:20:35.880
I don't know if people don't know what you're talking about.

00:20:35.880 --> 00:20:37.380
What should they Google to find the stick?

00:20:37.380 --> 00:20:40.160
I think it's Pythonic staff of enlightenment.

00:20:40.160 --> 00:20:40.980
I don't know.

00:20:40.980 --> 00:20:41.340
Is that right?

00:20:41.340 --> 00:20:42.560
That's got to do it.

00:20:42.560 --> 00:20:45.140
How many hits on Google can there be for that?

00:20:45.440 --> 00:20:46.140
I don't know.

00:20:46.140 --> 00:20:46.500
Awesome.

00:20:46.500 --> 00:20:48.240
So, yeah, they should have to pass that thing around.

00:20:48.240 --> 00:20:49.300
All right.

00:20:49.300 --> 00:20:51.540
Well, that's it for our items this week.

00:20:51.540 --> 00:20:53.040
You got anything extra you want to share with folks?

00:20:53.040 --> 00:20:54.620
I don't, actually.

00:20:54.620 --> 00:20:56.540
Just trudging along.

00:20:56.540 --> 00:20:58.760
We got a couple more testing codes out.

00:20:58.760 --> 00:20:59.320
Yeah.

00:20:59.320 --> 00:20:59.800
Very nice.

00:20:59.800 --> 00:21:00.220
How about you?

00:21:00.220 --> 00:21:03.680
I've got, of course, some TalkPilot stuff queued up to be released shortly.

00:21:03.680 --> 00:21:07.600
I have been recording some courses, which are going to be awesome.

00:21:07.600 --> 00:21:10.420
And I'm very excited about them, doing a bunch of stuff in parallel.

00:21:10.420 --> 00:21:12.860
So I'll let you know when that's sort of further along.

00:21:13.240 --> 00:21:16.560
But I do have two things I want to talk about this week really quickly.

00:21:17.160 --> 00:21:19.900
One is we got a message on Twitter.

00:21:19.900 --> 00:21:22.360
And I don't have the name of who sent us.

00:21:22.360 --> 00:21:23.640
This was John, actually.

00:21:23.640 --> 00:21:24.920
Thanks, John.

00:21:24.920 --> 00:21:31.480
Who sent us this heads up that Brian Granger, one of the guys behind iPython and Jupyter and

00:21:31.480 --> 00:21:35.440
all that stuff from the very early days, is giving a free webcast.

00:21:35.800 --> 00:21:38.300
And it's an ACM-sponsored thing.

00:21:38.300 --> 00:21:43.460
So it's Project Jupyter from computational notebooks to large-scale data science with sensitive data.

00:21:43.460 --> 00:21:46.000
So if that sounds interesting to you, I put the link in there.

00:21:46.000 --> 00:21:47.620
It's this Friday.

00:21:47.620 --> 00:21:50.180
This episode probably will come out on Thursday.

00:21:50.180 --> 00:21:52.900
So you've got to take action right away if you're listening.

00:21:52.900 --> 00:21:54.780
There's probably a recording or something afterwards.

00:21:54.780 --> 00:21:55.600
You can check that out.

00:21:55.600 --> 00:21:59.180
The other thing is, you know, we talk sometimes about the popularity of Python.

00:21:59.180 --> 00:21:59.500
Yeah.

00:21:59.600 --> 00:22:02.160
So I don't want to beat this one to death too much.

00:22:02.160 --> 00:22:03.540
It's not really worth its own item.

00:22:03.540 --> 00:22:07.640
But Python continues to climb yet another ranking.

00:22:07.640 --> 00:22:13.960
So the TOB index is one of the more well-respected, more long-running ways of ranking programming languages.

00:22:13.960 --> 00:22:18.740
And I think when we started this podcast, Python was either fifth or sixth.

00:22:18.740 --> 00:22:20.440
I think it was sixth on this list.

00:22:20.440 --> 00:22:22.100
It is now third.

00:22:22.100 --> 00:22:24.080
Probably because of the podcast.

00:22:24.080 --> 00:22:25.760
Certainly partly because of it.

00:22:25.760 --> 00:22:26.460
Yeah.

00:22:27.200 --> 00:22:30.820
But that may be a very small part or more maybe it's meaningful.

00:22:30.820 --> 00:22:36.400
But what's really interesting is it's now above C++, C#, JavaScript.

00:22:36.400 --> 00:22:37.740
It's way above JavaScript.

00:22:37.740 --> 00:22:39.200
And JavaScript's going down.

00:22:39.200 --> 00:22:41.220
It's above Ruby.

00:22:41.220 --> 00:22:42.940
It's above many, many things.

00:22:42.940 --> 00:22:47.380
What it's not above is it is not above Java or C.

00:22:47.380 --> 00:22:50.960
And not only is it not above them, but it's like half.

00:22:50.960 --> 00:22:54.800
So it's like 7.6% to C is 15.4%.

00:22:55.320 --> 00:22:59.640
It's going to be a long time, if ever, until it gets to a 2 or a 1.

00:22:59.640 --> 00:23:02.700
But it's definitely doing quite well.

00:23:02.700 --> 00:23:03.280
Yeah.

00:23:03.280 --> 00:23:04.360
So, yeah.

00:23:04.360 --> 00:23:06.380
What is the TOB index?

00:23:06.380 --> 00:23:06.820
Anyway.

00:23:06.820 --> 00:23:07.780
I'll have to look into that.

00:23:07.780 --> 00:23:08.100
Yeah.

00:23:08.100 --> 00:23:12.520
If you look into it, they talk about their philosophy and where they measure stuff from and so on.

00:23:12.520 --> 00:23:15.120
It's been a long time since I read it, so I don't remember the details.

00:23:15.120 --> 00:23:17.660
But they do lay out where the ranking comes from.

00:23:17.660 --> 00:23:18.080
Okay.

00:23:18.080 --> 00:23:18.320
Cool.

00:23:18.320 --> 00:23:18.580
Yeah.

00:23:18.580 --> 00:23:18.920
All right.

00:23:18.920 --> 00:23:19.840
Well, that's it for this week.

00:23:20.040 --> 00:23:21.160
Thanks for chatting with me, Brian.

00:23:21.160 --> 00:23:21.620
Thank you.

00:23:21.620 --> 00:23:21.880
Bye.

00:23:21.880 --> 00:23:22.140
You bet.

00:23:22.140 --> 00:23:22.400
Bye.

00:23:22.400 --> 00:23:25.160
Thank you for listening to Python Bytes.

00:23:25.160 --> 00:23:27.720
Follow the show on Twitter via at Python Bytes.

00:23:27.720 --> 00:23:30.600
That's Python Bytes as in B-Y-T-E-S.

00:23:30.600 --> 00:23:34.020
And get the full show notes at pythonbytes.fm.

00:23:34.020 --> 00:23:38.360
If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

00:23:38.360 --> 00:23:41.060
We're always on the lookout for sharing something cool.

00:23:41.060 --> 00:23:44.460
On behalf of myself and Brian Okken, this is Michael Kennedy.

00:23:44.460 --> 00:23:48.080
Thank you for listening and sharing this podcast with your friends and colleagues.

