WEBVTT

00:00:00.160 --> 00:00:04.180
This is Python Bytes, Python headlines and news delivered directly to your earbuds.

00:00:04.180 --> 00:00:07.840
It's episode 5, recorded December 5th, 2016.

00:00:07.840 --> 00:00:12.040
This episode is brought to you by Rollbar. They take the pain out of errors.

00:00:12.040 --> 00:00:16.260
This is Michael Kennedy, your co-host, along with Brian Okken.

00:00:16.260 --> 00:00:17.100
Hey, Brian, how's it going?

00:00:17.100 --> 00:00:18.840
It's going really good today.

00:00:18.840 --> 00:00:22.120
Yeah, it's another week of exciting news in the Python world.

00:00:22.120 --> 00:00:25.520
Yeah, well, let's get started right off the bat.

00:00:25.520 --> 00:00:26.520
All right, tell me why.

00:00:26.520 --> 00:00:29.160
Tell me why. Awesome.

00:00:30.060 --> 00:00:35.140
There was an article, The 5 Whys of Request 2.12, 2.12.

00:00:35.140 --> 00:00:47.080
And I thought this was a great article because it apparently in version 2.12 that came out November 15th,

00:00:47.080 --> 00:00:52.340
they're already up to 2.12.3 now on December 1st.

00:00:52.340 --> 00:00:55.400
But there's a, I think that they broke some people.

00:00:55.900 --> 00:01:01.940
There were some corner cases, the non-standard ways to use Request that was supported before.

00:01:01.940 --> 00:01:04.140
There's some reasons why they needed to change it.

00:01:04.140 --> 00:01:06.260
And this is a good article.

00:01:06.260 --> 00:01:15.380
I think it's put up to try to limit people from getting mad first so that they try to understand from the library supporter point of view why they made the changes.

00:01:15.380 --> 00:01:17.480
And it was just really well written.

00:01:17.700 --> 00:01:18.560
It is well written.

00:01:18.560 --> 00:01:24.160
And it gives you a look inside of how challenging it can be to write software at this scale.

00:01:24.160 --> 00:01:27.800
I mean, Request itself is not a huge piece of software, right?

00:01:27.800 --> 00:01:30.240
Not like Django or something like this.

00:01:30.240 --> 00:01:31.460
Or OpenStack.

00:01:31.460 --> 00:01:33.160
One of these really big, big projects.

00:01:33.500 --> 00:01:37.180
But it's used so incredibly widely.

00:01:37.180 --> 00:01:41.060
Request is downloaded 7 million times a month.

00:01:41.060 --> 00:01:42.680
Think about that.

00:01:42.680 --> 00:01:43.060
Yeah.

00:01:43.060 --> 00:01:48.080
And it may be one of the largest because of how it's being used by everybody.

00:01:48.080 --> 00:01:50.060
I mean, not large in size, but large in...

00:01:50.060 --> 00:01:50.560
Huge footprint.

00:01:50.560 --> 00:01:51.400
Yeah.

00:01:51.400 --> 00:01:52.060
Yeah, absolutely.

00:01:52.220 --> 00:02:05.580
So the problem was the current release of Request, that is the 2.12 version, breaks anyone who uses a URL scheme, that's the little part before the colon, that is not HTTP or HTTPS.

00:02:05.580 --> 00:02:09.020
Where it used to sometimes sort of work.

00:02:09.020 --> 00:02:11.240
So people were kind of tweaking that.

00:02:11.240 --> 00:02:14.580
And it has to do with a bunch of stuff internally, right?

00:02:14.580 --> 00:02:19.360
They're moving to different domain resolution things inside and so on.

00:02:19.360 --> 00:02:19.740
Huh.

00:02:19.740 --> 00:02:20.240
Okay.

00:02:20.240 --> 00:02:20.720
Yeah.

00:02:21.220 --> 00:02:26.880
Anyway, it's basically the article talks about how hard it is to maintain software.

00:02:26.880 --> 00:02:31.320
Like if you have software that's used as widely as Request, there's like no part of it being touched.

00:02:31.320 --> 00:02:35.220
And I think the takeaway was more or less two things.

00:02:35.220 --> 00:02:44.580
One, make sure that your validation and error checks are a little extra picky, right?

00:02:44.580 --> 00:02:50.940
Like they said, the root of the problem is that they kind of didn't check strongly enough for these things initially.

00:02:50.940 --> 00:02:52.960
And so stuff was able to work through.

00:02:52.960 --> 00:03:00.080
And they said, if you make your checks really rigid, it's easy to roll them back, but it's very problematic to put them forward.

00:03:00.080 --> 00:03:04.640
And the other takeaway was find a maintainer of your open source project that you love and give them a hug.

00:03:06.100 --> 00:03:06.540
Definitely.

00:03:06.540 --> 00:03:08.360
It's not an easy job.

00:03:08.360 --> 00:03:09.700
No, it's not an easy job.

00:03:09.700 --> 00:03:16.980
But, you know, speaking of people that I want to hug, there's a guy that I had on the show on Talk Python a while ago, Matthias Bossonier.

00:03:17.140 --> 00:03:18.820
I'm probably messing his name up a little bit.

00:03:18.820 --> 00:03:19.260
Sorry, Matthias.

00:03:19.260 --> 00:03:24.580
He's from the Jupyter Project at UC Berkeley's Institute for Data Science.

00:03:24.580 --> 00:03:29.340
And he works on Jupyter and IPython, notebooks, things like that.

00:03:29.840 --> 00:03:33.260
And this article is not super new, but I haven't talked about it before.

00:03:33.260 --> 00:03:35.180
And I really thought it was kind of timely.

00:03:35.180 --> 00:03:38.280
Again, you know, it came back to be relevant.

00:03:38.280 --> 00:03:42.320
And I think it's going to continue to be relevant over the next few years.

00:03:42.940 --> 00:03:46.000
It's more about a mental shift than it is about anything else.

00:03:46.000 --> 00:03:50.380
And the article that I want to talk about is called Planning an Early Death for Python 2.

00:03:50.380 --> 00:03:51.700
Okay?

00:03:51.700 --> 00:03:52.000
Yeah.

00:03:52.000 --> 00:03:52.920
Yeah.

00:03:52.920 --> 00:03:58.300
So, you know, we've had this whole Python 2, Python 3 deal over Thanksgiving break.

00:03:58.300 --> 00:03:59.080
That was last week.

00:03:59.080 --> 00:04:00.360
And we talked about that and so on.

00:04:00.360 --> 00:04:04.940
But this is not so much about whether or not we should be teaching people new things.

00:04:04.940 --> 00:04:09.860
It's about how we perceive and talk about Python 2 versus Python 3.

00:04:10.060 --> 00:04:12.960
So I'll just read you a little introduction here, just paragraphs.

00:04:12.960 --> 00:04:14.320
It says, out of the discussion.

00:04:14.320 --> 00:04:19.740
So this is a group, a workshop that they met at the Berkeley Institute for Data Science, a bunch of data science folks.

00:04:19.740 --> 00:04:21.380
So they're coming at it from that angle.

00:04:21.380 --> 00:04:25.300
So it says, out of the discussion arose a topic that's long plagued the Python community at large.

00:04:25.300 --> 00:04:30.620
Code that requires legacy Python 2.7 is holding back the development of data science tool sets

00:04:30.620 --> 00:04:33.620
and by extension the progress of data science as a whole.

00:04:33.620 --> 00:04:39.880
They convened this small working group to plan an early death to Python 2, or they call it legacy Python.

00:04:39.880 --> 00:04:43.320
And so they came up with a few things concretely that they can do.

00:04:43.320 --> 00:04:47.520
And I think the most important message here is to choose your words carefully.

00:04:47.520 --> 00:04:55.420
So instead of talking about Python 2 versus Python 3, talk about Python versus legacy Python.

00:04:55.420 --> 00:04:56.340
Oh, nice.

00:04:56.340 --> 00:04:59.120
So when you talk about, when you say Python, say, well, I mean Python 3.

00:04:59.120 --> 00:05:00.720
Like, what would you be talking about, right?

00:05:00.720 --> 00:05:03.160
And when you talk about Python 2, it's legacy Python.

00:05:03.160 --> 00:05:08.300
Refer to legacy Python in the past tense to reinforce its old and deprecated state.

00:05:08.300 --> 00:05:09.440
Let's see.

00:05:09.440 --> 00:05:13.180
Make your examples and your documentation Python 3 only.

00:05:13.180 --> 00:05:19.420
So if you're doing something with, like, asynchrony, you know, use async and await keywords, right?

00:05:19.420 --> 00:05:20.080
Things like this.

00:05:20.080 --> 00:05:25.760
If a user sends you a bug to a library, ask them to reproduce it on an up-to-date version of Python.

00:05:26.400 --> 00:05:31.420
And make sure that, of course, you know, when you have continuous integration, your tests run on Python 3 as well.

00:05:31.420 --> 00:05:34.480
So I really found this article interesting.

00:05:34.480 --> 00:05:37.620
And it's about the mentality of it, right?

00:05:37.620 --> 00:05:44.200
If people at conferences and people who write and maintain libraries start referring to Python 2 as legacy Python,

00:05:44.200 --> 00:05:51.320
and they start calling Python 3 just Python, and they assume, you know, like, that's the way the documentation is written,

00:05:51.320 --> 00:05:59.240
I think it would have a tremendous effect on the adoption of Python 3 over a couple of years as people come into Python,

00:05:59.240 --> 00:06:01.160
as they come into these new libraries.

00:06:01.160 --> 00:06:04.260
If you start to hear, oh, this thing I'm using is called legacy.

00:06:04.260 --> 00:06:05.080
Well, wait a minute.

00:06:05.080 --> 00:06:07.380
Maybe I should stop using it, right?

00:06:07.380 --> 00:06:07.860
Yeah.

00:06:07.860 --> 00:06:12.280
And one of the things, I don't know if they touch on this, but one of the reasons why,

00:06:12.280 --> 00:06:18.240
if you start out supporting Python 3 and you, if you are, start out current Python,

00:06:18.240 --> 00:06:27.380
and wanted to try to help support older versions, it doesn't add to clarity to your code.

00:06:27.380 --> 00:06:32.640
I mean, you'll have to not use some features that are, like, new and awesome.

00:06:33.080 --> 00:06:39.040
And that is problematic to try to support old libraries or old versions of Python.

00:06:39.040 --> 00:06:40.520
You can't use some of the new stuff.

00:06:40.520 --> 00:06:42.220
Yeah, I totally agree.

00:06:42.220 --> 00:06:45.640
It's a really well-written article, and I'm probably not doing it justice,

00:06:45.820 --> 00:06:49.260
but I love the mental shift of we have Python and we have legacy Python.

00:06:49.260 --> 00:06:56.840
Yeah, and I kind of even like the idea of, like, it's totally okay to have some stuff that doesn't support Python 2.7.

00:06:56.840 --> 00:07:00.220
If you don't want to support it, it's up to you.

00:07:00.220 --> 00:07:00.580
Yeah.

00:07:00.680 --> 00:07:04.120
Well, for example, the Beware project coming along, that's a good example.

00:07:04.120 --> 00:07:05.300
Oh, okay.

00:07:05.300 --> 00:07:07.120
So they're only on Python 3?

00:07:07.120 --> 00:07:10.160
Yeah, they're just doing Python 3 for their code, and Beware is doing amazing stuff.

00:07:10.160 --> 00:07:16.540
Interesting article called Simplifying Complex Business Logic with Python's Ken Ren.

00:07:16.540 --> 00:07:17.420
That sounds cool.

00:07:17.420 --> 00:07:18.040
What's Ken Ren?

00:07:18.500 --> 00:07:26.660
I had never heard of it before I read this article, and it's a library that helps with some logic coding,

00:07:26.660 --> 00:07:31.520
and I still am going to have to play with it a bit because I'm having a hard time getting my head around it.

00:07:31.520 --> 00:07:35.280
However, it looks like a lot of stuff that some people use.

00:07:35.280 --> 00:07:41.240
I mean, traditionally, people use spreadsheets for or some of the data analysis stuff,

00:07:41.240 --> 00:07:48.360
but it's for people that are using it's written such that I think it's more readable than some of the data analysis stuff.

00:07:48.360 --> 00:07:50.560
It's written more business-friendly, I guess.

00:07:50.560 --> 00:07:51.160
I see.

00:07:51.160 --> 00:07:59.160
And they have an example in the article that actually I love that it's a Simpsons example.

00:07:59.160 --> 00:08:04.200
If you give a whole bunch of a data set with whose parent is who in the Simpsons,

00:08:04.200 --> 00:08:09.080
and you call it a relation, it has a whole bunch of different things that you can say.

00:08:09.080 --> 00:08:14.640
This piece of data has a relation or a fact or there's a couple things.

00:08:14.640 --> 00:08:17.040
You can just have sets of data.

00:08:17.820 --> 00:08:25.660
And ask questions about the data, like who's a person that has two children in the Simpsons or things like that.

00:08:25.660 --> 00:08:29.720
Basically, a different way to ask questions about your data, as far as I can tell,

00:08:29.720 --> 00:08:34.800
a way to ask questions about your data that's different than some of the other methods I've seen before.

00:08:34.800 --> 00:08:38.500
You know, I like different ways to cut different problems.

00:08:38.500 --> 00:08:41.800
Yeah, it looks really cool.

00:08:42.000 --> 00:08:44.780
And it looks almost like a knowledge base.

00:08:44.780 --> 00:08:47.220
You set up all these facts and relationships between them.

00:08:47.220 --> 00:08:49.220
And then you can ask it all kinds of questions.

00:08:49.220 --> 00:08:51.460
And I think it's pretty awesome.

00:08:51.460 --> 00:08:52.800
Yeah.

00:08:53.760 --> 00:08:58.640
I don't know what type of problem I'd need it for, but yeah, another tool in your tool belt.

00:08:58.640 --> 00:08:59.140
Yeah.

00:08:59.140 --> 00:08:59.800
Yeah.

00:08:59.800 --> 00:09:00.660
Tools are good.

00:09:00.660 --> 00:09:01.280
Tools are good.

00:09:01.280 --> 00:09:06.680
You know, before we talk about the next set of tools, actually, let me tell you about our sponsor, Rollbar.

00:09:06.680 --> 00:09:07.780
Thank you, Rollbar.

00:09:07.780 --> 00:09:09.960
We're really happy to have you guys on board.

00:09:09.960 --> 00:09:10.520
Thank you.

00:09:10.980 --> 00:09:17.220
The Talk Python websites handle almost 2 million dynamic HTTP requests per month and transfer 4 or 5 terabytes of data.

00:09:17.220 --> 00:09:19.740
And yet I deploy them frequently.

00:09:19.740 --> 00:09:22.640
I don't worry about whether or not they're up and running.

00:09:22.640 --> 00:09:24.480
I have some basic server monitoring.

00:09:24.480 --> 00:09:32.160
And if anything goes wrong with the app, Rollbar is going to send me detailed information to my Slack, my email, all sorts of things.

00:09:32.160 --> 00:09:34.440
And it comes with all sorts of info already there.

00:09:34.440 --> 00:09:38.180
So you can probably fix the problem before you even have to debug it or something.

00:09:38.180 --> 00:09:39.080
So it's great.

00:09:39.480 --> 00:09:44.500
If you guys want to check out Rollbar, please go to rollbar.com slash pythonbytes and sign up for the free tier.

00:09:44.500 --> 00:09:46.060
You can plug it in in a few minutes.

00:09:46.060 --> 00:09:46.880
Sounds awesome.

00:09:46.880 --> 00:09:47.820
Yeah, it's awesome.

00:09:47.820 --> 00:09:48.380
Okay.

00:09:48.380 --> 00:09:53.740
I don't hope you have errors, but, you know, you want to be sure that when you do, it's easy to solve them, right?

00:09:53.740 --> 00:09:55.140
All right.

00:09:55.140 --> 00:10:03.880
So speaking of web apps running that are pretty cool, one of the larger implementations or deployments of Python is Reddit itself.

00:10:03.880 --> 00:10:08.880
So Reddit's, you know, often referred to as the front page of the Internet.

00:10:09.040 --> 00:10:10.320
Maybe that's Facebook these days.

00:10:10.320 --> 00:10:10.740
I don't know.

00:10:10.740 --> 00:10:12.960
But Reddit has definitely got a lot of traffic.

00:10:12.960 --> 00:10:13.760
That's for sure.

00:10:13.760 --> 00:10:17.620
And it's built on some of the older Python technologies.

00:10:17.620 --> 00:10:22.080
So pylons, Mako templates, a custom non-OR version.

00:10:22.080 --> 00:10:25.660
So the core part of SQLAlchemy, right?

00:10:25.700 --> 00:10:28.200
And I'm sure there's tons of other stuff going on there as well.

00:10:28.200 --> 00:10:30.920
So there was this question or discussion on Reddit.

00:10:30.920 --> 00:10:36.420
It says, if Reddit were written from scratch today, which Python web framework would it use and why?

00:10:36.420 --> 00:10:37.580
I don't know.

00:10:37.580 --> 00:10:46.240
I just, I feel like the sense that I, when I talk to people and I listen to what people are doing with web frameworks, it's either Flask or Django, Flask or Django, Flask or Django.

00:10:46.420 --> 00:10:47.980
And, you know, my stuff's built on Pyramid.

00:10:47.980 --> 00:10:49.740
I really like Pyramid.

00:10:49.740 --> 00:10:53.680
I think it's kind of a nice Goldilocks framework between the two that I was mentioning.

00:10:53.680 --> 00:10:59.440
And I thought it was interesting that a bunch of people came out and said, well, obviously Pyramid's the right choice for this.

00:10:59.440 --> 00:10:59.960
All right.

00:10:59.980 --> 00:11:02.500
So I'll give you a few sentences from what people said.

00:11:02.500 --> 00:11:05.260
So I would say the most sane option would be Pyramid.

00:11:05.260 --> 00:11:10.200
It's faster than Django and TAS and it doesn't repeat the mistakes with thread locals that Flask or Pylons did in the past.

00:11:10.200 --> 00:11:14.960
I did some both small and medium to big, you know, say 20 million plus user web apps.

00:11:14.960 --> 00:11:16.260
And it just feels right.

00:11:16.260 --> 00:11:19.660
It doesn't get in your way and it will give you magical solutions to your problem.

00:11:19.660 --> 00:11:20.000
It's great.

00:11:20.000 --> 00:11:27.820
Another guy said, assume you're talking about Reddit at its current scale, not Flask, too many global variables, not thread safe for async, not Django, too opinionated.

00:11:27.820 --> 00:11:29.520
Everything's in-house for scaling reasons.

00:11:29.900 --> 00:11:30.760
My guess is Pyramid.

00:11:30.760 --> 00:11:33.460
In fact, that's what Reddit's current services are built.

00:11:33.460 --> 00:11:35.960
And they link to a GitHub thing that is a foundation in their services.

00:11:35.960 --> 00:11:42.900
And the takeaway was basically, you know, around this discussion that the web frameworks cause a lot of strong subjective split in opinion.

00:11:42.900 --> 00:11:52.560
Yeah, I just thought it was really interesting to see a lot of people coming out with this Pyramid recommendation because I hear Flask versus Django so often.

00:11:52.560 --> 00:11:55.740
Yeah, and that's often what I hear, too.

00:11:55.900 --> 00:12:00.900
And then I saw this and it was surprising to me, but I enjoyed reading about it.

00:12:01.460 --> 00:12:08.820
And it also prompted me to try to find some time to go through your course because don't you teach Pyramid in your course?

00:12:08.820 --> 00:12:09.160
Yeah, I do.

00:12:09.160 --> 00:12:12.080
In my Python for Entrepreneurs course, it's definitely Pyramid.

00:12:12.080 --> 00:12:12.580
Cool.

00:12:12.580 --> 00:12:13.380
It's pretty cool.

00:12:13.380 --> 00:12:14.000
Yeah, thanks.

00:12:14.280 --> 00:12:17.040
Next up, I've got actually, I'm going to bundle these.

00:12:17.040 --> 00:12:19.420
I've got two testing related articles.

00:12:19.420 --> 00:12:27.600
And I was tempted to just have these be two different articles on this, but I didn't want to take over the entire podcast or testing.

00:12:27.600 --> 00:12:35.760
But there's a getting started with pytest that's from, I'm going to get his name wrong, but it goes by Jacobian.

00:12:35.760 --> 00:12:38.780
What's, who's, Jacob, Jacob Kaplan Moss.

00:12:38.780 --> 00:12:39.220
That's it.

00:12:39.220 --> 00:12:55.360
One of the things I like is it's not a, it's not a silly, he does, it's a simple example, but it's also a real example using some, some things that are hard to, hard to just visually tell whether something's right or wrong.

00:12:55.360 --> 00:13:03.460
He also goes through and uses, looks at test parameterization, which is very useful if you're into testing.

00:13:03.460 --> 00:13:09.600
The second article is the best new feature of unit, in unit tests you didn't know you needed.

00:13:09.600 --> 00:13:13.700
The feature that isn't highlighted in the title is subtest.

00:13:13.700 --> 00:13:21.620
And subtest was added in Python 3.4, but I haven't seen very many people blog about it or talk about it.

00:13:21.620 --> 00:13:28.900
Like if you have a list of things that you're testing within a test, like a whole bunch of data points you're checking for.

00:13:28.900 --> 00:13:34.540
If the, normally, if you just iterate through them, the first one that fails will stop your test.

00:13:34.780 --> 00:13:41.080
But subtest is a way to say, I want all of these to be checked or everything within this loop.

00:13:41.080 --> 00:13:51.980
Oh, that is, that is really cool because sometimes you create a unit test and you're like, well, there's so much, I've sort of got it ready, but there's actually three, three separate sort of things I need to verify to actually verify this case.

00:13:52.080 --> 00:13:53.980
And I could use subtest for those, right?

00:13:53.980 --> 00:13:54.760
Yeah.

00:13:54.760 --> 00:13:55.520
Okay.

00:13:55.520 --> 00:14:03.760
Using it, you can fail a part of it and that part of it will skip out and not continue, but it'll go on to the next subtest.

00:14:03.760 --> 00:14:05.240
And it's a pretty cool thing.

00:14:05.240 --> 00:14:13.800
I know since I'm a pytest fan, you can run unit test with pytest, unit test written tests with pytest.

00:14:13.800 --> 00:14:22.100
pytest will run subtests, but it doesn't highlight out the individual failures as subtest does.

00:14:22.580 --> 00:14:31.340
So that is one of the breaking, if you're writing unit tests that you want to run with a pytest runner, subtest might be something you might want to avoid.

00:14:31.340 --> 00:14:37.060
If you're looking, if you're running in pytest, you'd probably use parameterization anyway for the same problem.

00:14:37.060 --> 00:14:41.360
So the last one here I have for us is just a fun one, right?

00:14:41.360 --> 00:14:50.720
So imagine you're running a meetup or a conference or some kind of hackathon and you want to have some music playing because I don't know about you,

00:14:50.760 --> 00:14:53.820
but the right kind of music along with coding is like the perfect mix.

00:14:53.820 --> 00:14:57.440
So there's this jukebox type thing called PyTone.

00:14:57.440 --> 00:15:01.900
Now, by no means is PyTone new, but I haven't talked about it.

00:15:01.900 --> 00:15:03.200
People recommended it to me.

00:15:03.200 --> 00:15:09.600
So KidPixo, who runs the Geek Cookies Italian developer podcast, sent this over and said,

00:15:09.600 --> 00:15:10.580
Hey, you guys should check this out.

00:15:10.580 --> 00:15:11.120
This is fun.

00:15:11.120 --> 00:15:18.440
Let me just give you a quick little summary of what this screenshot here.

00:15:18.700 --> 00:15:21.240
And you pull it up, I'm going to have you describe it to me.

00:15:21.240 --> 00:15:22.740
I'm going to set the stage.

00:15:22.740 --> 00:15:29.840
Under the screenshot here, it says, this is how PyTone 197 looks in action in the 80 by 25 terminal.

00:15:29.840 --> 00:15:33.440
So this is a terminal based iTunes type of thing.

00:15:33.440 --> 00:15:35.400
Brian, what do you think of this?

00:15:35.400 --> 00:15:37.500
Actually, I kind of like it a lot.

00:15:37.500 --> 00:15:38.340
It's neat.

00:15:38.340 --> 00:15:39.280
It's neat, right?

00:15:39.340 --> 00:15:43.600
Like imagine you could project this up on the screen during breaks while you have music playing.

00:15:43.600 --> 00:15:48.440
And it's really a terminal based with progress bars and playlist, everything.

00:15:48.440 --> 00:15:50.080
Little music players.

00:15:50.080 --> 00:15:50.340
Cool.

00:15:50.340 --> 00:15:51.220
Yeah.

00:15:51.220 --> 00:15:53.480
And it looks nerdy.

00:15:53.480 --> 00:15:56.180
So there's that.

00:15:56.180 --> 00:15:57.200
Exactly.

00:15:57.200 --> 00:15:59.880
Well, that's why I said you should do it at like a geek conference, right?

00:15:59.880 --> 00:16:01.000
It would be perfect for that.

00:16:01.000 --> 00:16:02.500
Yeah.

00:16:02.980 --> 00:16:08.720
Also, I think it's neat to see a maintained curses project.

00:16:08.720 --> 00:16:09.140
Yeah.

00:16:09.140 --> 00:16:12.380
It's an interesting use of curses as well.

00:16:12.380 --> 00:16:17.380
Like if you want to build an interesting kind of more interactive GUI, terminal based GUI, I guess.

00:16:17.380 --> 00:16:17.920
It's cool.

00:16:17.920 --> 00:16:19.100
All right.

00:16:19.100 --> 00:16:19.440
That's it.

00:16:19.440 --> 00:16:22.000
That's it for our headlines this week.

00:16:22.220 --> 00:16:26.280
It's been slightly less interesting than last week.

00:16:26.280 --> 00:16:29.540
But nonetheless, a lot of cool stuff coming along.

00:16:29.540 --> 00:16:31.240
A lot of good news to share with you.

00:16:31.240 --> 00:16:33.500
Brian, you got anything going on you want to tell everyone about?

00:16:33.500 --> 00:16:41.040
Well, I've put out last week I was trying to get two episodes out of Testing Code and did.

00:16:41.040 --> 00:16:48.640
So I got episode 25 talking about Selenium with Dave Hunt and also pytest and working at Mozilla.

00:16:48.640 --> 00:16:49.720
Yeah, that was a good one.

00:16:49.820 --> 00:17:00.280
And then 26 was a new tool called that I hadn't heard of before called PyRest Test and got the developer on to talk about that.

00:17:00.280 --> 00:17:07.620
And it's a REST API testing framework that uses YAML to describe the tests.

00:17:07.620 --> 00:17:08.260
It's pretty cool.

00:17:08.260 --> 00:17:09.460
Oh, very cool.

00:17:09.460 --> 00:17:09.740
Yeah.

00:17:09.740 --> 00:17:10.920
I'll definitely have to check that out.

00:17:10.920 --> 00:17:13.580
YAML seems to be coming along for all sorts of things around REST.

00:17:13.580 --> 00:17:21.400
We've got it for Swagger for like automatic API documentation generation and testing as well.

00:17:21.400 --> 00:17:22.340
It sounds like that's cool.

00:17:22.340 --> 00:17:23.040
Yeah.

00:17:23.040 --> 00:17:26.480
And my first reaction for to YAML stuff is why do we need something else?

00:17:26.480 --> 00:17:31.120
But it is it seems like it's more human readable than some of the other options.

00:17:31.120 --> 00:17:31.800
Yeah.

00:17:32.140 --> 00:17:34.460
Well, as long as we stay away from XAML, I'm happy.

00:17:34.460 --> 00:17:36.400
How about you?

00:17:36.400 --> 00:17:37.160
What's going on with you?

00:17:37.160 --> 00:17:38.040
Yeah, not so much.

00:17:38.040 --> 00:17:41.980
Just working on like the entrepreneur's course that you talked about.

00:17:41.980 --> 00:17:49.080
I'm going to ship a couple hours of new content there after we hang up here and I can get a chance to upload it and organize it and all that.

00:17:49.080 --> 00:17:51.280
So I'm just, you know, life's good.

00:17:51.280 --> 00:17:51.440
Nice.

00:17:51.440 --> 00:17:53.700
Love working on all the Python projects I got going on.

00:17:53.700 --> 00:17:54.240
Wonderful.

00:17:54.900 --> 00:17:55.520
Yeah, absolutely.

00:17:55.520 --> 00:17:56.100
All right.

00:17:56.100 --> 00:17:57.880
Well, everyone, thank you for listening.

00:17:57.880 --> 00:18:00.720
Brian, thanks for sharing the headlines with me.

00:18:00.720 --> 00:18:01.360
It's been fun.

00:18:01.360 --> 00:18:02.320
Thank you.

00:18:02.320 --> 00:18:02.920
It has been fun.

00:18:02.920 --> 00:18:03.100
Yeah.

00:18:03.100 --> 00:18:03.560
Bye, everyone.

00:18:03.560 --> 00:18:06.520
Thank you for listening to Python Bytes.

00:18:06.520 --> 00:18:09.100
Follow the show on Twitter via at Python Bytes.

00:18:09.100 --> 00:18:11.980
That's Python Bytes as in B-Y-T-E-S.

00:18:11.980 --> 00:18:15.380
And get the full show notes at Python Bytes.fm.

00:18:15.380 --> 00:18:19.740
If you have a news item you want featured, just visit Python Bytes.fm and send it our way.

00:18:19.740 --> 00:18:22.460
We're always on the lookout for sharing something cool.

00:18:22.940 --> 00:18:25.840
On behalf of myself and Brian Okken, this is Michael Kennedy.

00:18:25.840 --> 00:18:29.460
Thank you for listening and sharing this podcast with your friends and colleagues.

