WEBVTT

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

00:00:04.040 --> 00:00:08.220
Episode number three, recorded November 21st, 2016.

00:00:08.220 --> 00:00:09.680
Hey, Brian.

00:00:09.680 --> 00:00:10.360
Hello, everyone.

00:00:10.360 --> 00:00:10.840
Hey.

00:00:10.840 --> 00:00:11.340
Hey.

00:00:11.340 --> 00:00:11.620
Sorry.

00:00:11.620 --> 00:00:12.780
Hey, man.

00:00:12.780 --> 00:00:13.720
Great to chat with you.

00:00:13.720 --> 00:00:15.760
I'm really loving this show we're putting on.

00:00:15.760 --> 00:00:16.840
This is so much fun.

00:00:16.840 --> 00:00:19.720
But before I get to the headlines, I actually have some good news about the show.

00:00:19.720 --> 00:00:20.560
What's that, Michael?

00:00:20.560 --> 00:00:23.460
Python Bytes is now brought to you by Rollbar.

00:00:23.460 --> 00:00:27.060
They take the pain out of errors, and we'll hear from them later.

00:00:27.060 --> 00:00:28.780
But thank you, Rollbar, for sponsoring the show.

00:00:28.780 --> 00:00:29.360
That's really awesome.

00:00:29.360 --> 00:00:29.920
We appreciate it.

00:00:29.920 --> 00:00:30.520
That's really awesome.

00:00:30.520 --> 00:00:31.320
Thank you, Rollbar.

00:00:31.320 --> 00:00:32.400
Yeah, yeah, definitely.

00:00:32.400 --> 00:00:33.780
All right, let's get to the headlines.

00:00:33.780 --> 00:00:37.140
Every week, there's so much cool stuff happening, right?

00:00:37.140 --> 00:00:37.820
Well, yeah.

00:00:37.820 --> 00:00:43.520
And this last week, I just read a huge list of articles I read, Python-related.

00:00:43.520 --> 00:00:44.420
I really enjoyed.

00:00:44.420 --> 00:00:47.340
It was a hard time picking out which one to talk about.

00:00:47.340 --> 00:00:48.380
Yeah, it really was.

00:00:48.380 --> 00:00:48.760
Yeah.

00:00:48.760 --> 00:00:49.160
All right.

00:00:49.160 --> 00:00:50.500
Well, but you had to pick, right?

00:00:50.500 --> 00:00:52.400
Because we're only doing three each.

00:00:52.400 --> 00:00:54.460
We're trying to keep this short and on topic.

00:00:54.460 --> 00:00:57.180
Yeah, and I thought maybe we'd pick the same three, but we didn't.

00:00:57.180 --> 00:01:04.480
So first up, I've got an article titled, How to Get Superior Text Processing in Python with PyNinny.

00:01:04.480 --> 00:01:06.100
I think I'm pronouncing that right.

00:01:06.100 --> 00:01:06.400
PyNinny.

00:01:06.400 --> 00:01:07.880
Or maybe it's Nini.

00:01:07.880 --> 00:01:08.780
I'm not sure.

00:01:08.780 --> 00:01:09.140
PyNini?

00:01:09.380 --> 00:01:12.300
Like the Knights of Knee from Monty Python.

00:01:12.300 --> 00:01:12.920
Oh, yes.

00:01:12.920 --> 00:01:13.780
Yeah, yeah.

00:01:13.780 --> 00:01:14.840
You're probably right about that.

00:01:14.840 --> 00:01:20.760
But this is from the O'Reilly blog, and it was written by Kyle Gorman and Richard Sprout,

00:01:20.760 --> 00:01:21.320
I think.

00:01:21.320 --> 00:01:25.660
Yeah, both who are PhDs in linguistics of some variety or other, right?

00:01:25.660 --> 00:01:26.220
Yeah.

00:01:26.220 --> 00:01:33.240
And actually, because of that and also because of the title, I was afraid this was going to

00:01:33.240 --> 00:01:36.460
be sort of a hard thing to get into, but it's a really easy article.

00:01:36.460 --> 00:01:43.040
And my interest in it is mostly because when I read the Pragmatic Programmer a long time

00:01:43.040 --> 00:01:48.820
ago, it introduced me to the concept of mini languages to solve simple problems with this

00:01:48.820 --> 00:01:51.800
is the data I have and how to change it into the data I need.

00:01:52.460 --> 00:01:57.700
And often I used regular expressions for things like that, but sometimes that's not enough.

00:01:57.700 --> 00:02:03.580
And the next step always seemed to be to build up a parser or an abstract syntax tree, and

00:02:03.580 --> 00:02:06.020
that's way too far that I want to go.

00:02:06.020 --> 00:02:12.460
I think this article produces a nice halfway ground talking about what they call them is

00:02:12.460 --> 00:02:18.020
finite state transducers, which sounds like something in a Back to the Future movie.

00:02:18.020 --> 00:02:22.120
Quick, Marty, connect the finite state transducer.

00:02:22.120 --> 00:02:23.640
Yeah, exactly.

00:02:23.640 --> 00:02:30.340
But I like working with finite state machines, and apparently this is a finite state machine

00:02:30.340 --> 00:02:31.620
turned into something else.

00:02:31.620 --> 00:02:36.720
But the article starts with a small introduction to what finite state machines are, and they're

00:02:36.720 --> 00:02:38.620
really easy to get the grasp of.

00:02:38.620 --> 00:02:41.020
If you look at the article, there's some nice pictures.

00:02:41.020 --> 00:02:47.640
And then they talk about how that applies to text processing and then introduces a concept

00:02:47.640 --> 00:02:52.300
finite state acceptor, which I think just accepts things.

00:02:52.300 --> 00:02:54.460
And then transducer spits things out.

00:02:54.460 --> 00:02:55.920
I believe I get this right.

00:02:55.920 --> 00:03:00.540
But how this applies to how to translate your thinking from regular expressions to these.

00:03:00.540 --> 00:03:06.360
And anyway, it goes through some of this, gives an example using cheese names, which I love the

00:03:06.360 --> 00:03:08.780
Python tradition of using cheese names and examples.

00:03:08.860 --> 00:03:16.720
And then introduces a library called PyNinny from Google to help build these things up.

00:03:16.720 --> 00:03:22.340
And at the end, I kind of got a little bit lost, but I wasn't working through the examples

00:03:22.340 --> 00:03:22.740
myself.

00:03:22.740 --> 00:03:26.460
It is something that I think I might spend an afternoon poking through.

00:03:26.700 --> 00:03:28.380
Yeah, it is quite interesting, right?

00:03:28.380 --> 00:03:32.720
I mean, one of the things that makes me really happy about looking at this is, one, it's not

00:03:32.720 --> 00:03:33.360
too complicated.

00:03:33.360 --> 00:03:38.980
And two, it gets you away from regular expressions, which anything that gets me away from regular

00:03:38.980 --> 00:03:40.640
expressions puts a smile on my face.

00:03:40.640 --> 00:03:43.860
Well, I actually really like regular expressions.

00:03:43.860 --> 00:03:51.080
Although it is true that, I mean, there's oftentimes with text processing where it doesn't work when

00:03:51.080 --> 00:03:52.500
you can't do it line by line.

00:03:52.980 --> 00:03:57.120
And I'm probably not going to use this right away, but I appreciate this tool introduction

00:03:57.120 --> 00:03:59.200
so I can put it in my tool chest.

00:03:59.200 --> 00:04:02.840
And next time I have a problem like this, I might look this thing up.

00:04:02.840 --> 00:04:03.620
Right.

00:04:03.620 --> 00:04:06.720
You guys will be looking at something, some dating, like, oh, you know what we need?

00:04:06.720 --> 00:04:07.860
A finite state transducer.

00:04:07.860 --> 00:04:10.120
We're going to solve this.

00:04:10.120 --> 00:04:12.580
And I totally want to do that in a meeting.

00:04:12.580 --> 00:04:15.620
I think we should put a finite state transducer in here.

00:04:15.620 --> 00:04:16.880
Fantastic.

00:04:16.880 --> 00:04:20.640
Now, it does things like pluralized stuff.

00:04:20.960 --> 00:04:24.860
You can teach it, like, for example, you taught it what all the cheeses were, and then it could,

00:04:24.860 --> 00:04:31.840
like, locate sentences that were talking about cheese and do lots of interesting processing,

00:04:31.840 --> 00:04:32.820
not just pattern matching.

00:04:32.820 --> 00:04:33.420
It's cool.

00:04:33.420 --> 00:04:38.040
It isn't, but it does start out with, like, a simple example of, like, if I tell it all the

00:04:38.040 --> 00:04:43.460
cheeses to look through some code and find the cheeses and add a cheese tag around it or something.

00:04:43.820 --> 00:04:44.740
Yeah, yeah.

00:04:44.740 --> 00:04:48.180
There are simple solutions, simple problems that it can solve as well.

00:04:48.180 --> 00:04:50.000
Yeah, it's great to have it in your toolbox.

00:04:50.000 --> 00:04:52.280
Well, you know where I would like to run it, though?

00:04:52.280 --> 00:04:56.660
I don't really want to run it on Python 3.5 or definitely not on 2.7 anymore.

00:04:56.660 --> 00:04:57.720
Oh, yeah.

00:04:57.720 --> 00:04:59.300
Nice transition there.

00:04:59.300 --> 00:04:59.680
Thank you.

00:04:59.680 --> 00:05:01.580
Yeah, I want to run that on Python 3.6.

00:05:02.260 --> 00:05:06.620
And, you guys, there is amazing stuff coming in Python 3.6.

00:05:06.620 --> 00:05:08.660
And they just released beta 4.

00:05:08.660 --> 00:05:09.880
Beta 4.

00:05:09.880 --> 00:05:10.500
Wow.

00:05:10.580 --> 00:05:14.640
So, yeah, I don't know what the exact release schedule of the final release is, but I think

00:05:14.640 --> 00:05:15.720
it's coming up pretty quickly.

00:05:15.720 --> 00:05:17.440
These things are looking pretty solid.

00:05:17.440 --> 00:05:21.860
Let me just give you a sense of some of the PEPs, Python enhancement proposals that are coming.

00:05:21.860 --> 00:05:28.620
First up, it seems like no programming language these days is content with their string formatting.

00:05:28.620 --> 00:05:32.860
And Python is like, look, we only have, like, eight ways to format strings.

00:05:32.860 --> 00:05:33.600
We need another.

00:05:33.600 --> 00:05:35.940
But this new way is actually pretty good.

00:05:35.940 --> 00:05:41.340
There's a PEP498, and what it is about is formatting string literals.

00:05:41.340 --> 00:05:45.680
So, imagine you've got a string, and normally you'd like, there's a variety of ways to do

00:05:45.680 --> 00:05:45.780
it.

00:05:45.780 --> 00:05:50.100
Maybe the newer way would be to do something like, say, I want to say, hi, my name is,

00:05:50.100 --> 00:05:52.060
and you have a variable called name, right?

00:05:52.060 --> 00:05:58.720
So, you might say, quote, hi, my name is curly bracket zero, quote, dot format, name, yeah?

00:05:58.720 --> 00:06:03.880
Well, it kind of takes this idea and just says, well, why do you have to do the dot format

00:06:03.880 --> 00:06:06.180
and use arguments and orders and then number them?

00:06:06.180 --> 00:06:08.800
Why don't you just put the name of the variable in the string?

00:06:08.800 --> 00:06:11.420
So, now you could say, hello, my name is curly name.

00:06:11.420 --> 00:06:15.820
And now, whatever the value of name is, if there's a variable that will be put into the

00:06:15.820 --> 00:06:17.580
string as if you did the first thing I said.

00:06:17.580 --> 00:06:18.800
Oh, that's really cool.

00:06:18.800 --> 00:06:19.860
Yeah, it's pretty cool.

00:06:19.860 --> 00:06:24.540
The only bummer is you have to indicate that it's this new format string.

00:06:25.000 --> 00:06:27.320
I think it's an F prefix on the string.

00:06:27.320 --> 00:06:28.180
Oh, okay.

00:06:28.180 --> 00:06:33.280
But, you know, because otherwise, you'd have like dictionary stuff mixing in, just for compatibility.

00:06:33.280 --> 00:06:35.260
It's got to have a little identifier.

00:06:35.260 --> 00:06:37.900
But other than that, yeah, it's a really cool way to format stuff.

00:06:37.900 --> 00:06:38.940
All right.

00:06:38.980 --> 00:06:45.780
So, we also have another easy to understand but really nice one, PEP515, which will let

00:06:45.780 --> 00:06:48.860
you put underscores in numerical literals.

00:06:48.860 --> 00:06:56.640
So, if you have a number like 1-0-0-0-0-0, and you look at it, is that a million?

00:06:56.640 --> 00:06:57.860
Is that 100,000?

00:06:57.860 --> 00:06:58.740
Is it 10 million?

00:06:58.900 --> 00:07:01.200
Like, it's hard to know like what the separators are.

00:07:01.200 --> 00:07:02.700
So, now you can put underscores.

00:07:02.700 --> 00:07:07.400
So, you could have like 1-0-0-0-0-0-0-0-0.

00:07:07.400 --> 00:07:11.000
And that would, it basically just ignores the underscores.

00:07:11.000 --> 00:07:13.920
But it allows you to visually see, oh, that's a million, not a hundred thousand.

00:07:13.920 --> 00:07:14.520
Something like that.

00:07:14.520 --> 00:07:15.260
Oh, that's kind of cool.

00:07:15.260 --> 00:07:15.980
Yeah, that's pretty cool.

00:07:15.980 --> 00:07:17.380
No, it's not going to be world changing.

00:07:17.380 --> 00:07:24.440
One thing that is more significant, I guess, is in Python 3.5, we have type annotations.

00:07:24.440 --> 00:07:25.220
Right?

00:07:25.220 --> 00:07:26.160
So, I could have a function.

00:07:26.160 --> 00:07:27.540
I could have a function.

00:07:27.860 --> 00:07:34.240
I could say it takes a, let's say, it says create, functions name is create, and it has

00:07:34.240 --> 00:07:35.540
a thing called entity.

00:07:35.540 --> 00:07:39.440
Well, if you were given that function, you could be like, I have no idea what this does.

00:07:39.440 --> 00:07:41.260
Like, entity, maybe that has to do with databases.

00:07:41.260 --> 00:07:46.760
But in Python 3.5, you could say colon, customer, where customer is like a class or something.

00:07:46.760 --> 00:07:52.880
And then the tooling and whatnot would know to give you the right auto-completion and various

00:07:52.880 --> 00:07:55.080
type checking and whatnot for that type.

00:07:55.080 --> 00:07:55.300
Right?

00:07:55.300 --> 00:07:57.500
But that only applied to functions.

00:07:57.620 --> 00:08:02.700
You couldn't put it on like variables and other types of class fields and other things

00:08:02.700 --> 00:08:03.780
that are outside of functions.

00:08:03.780 --> 00:08:08.180
So, this PEP 526 brings that to functions.

00:08:08.180 --> 00:08:09.560
That seems like obvious.

00:08:09.560 --> 00:08:11.780
I don't know why they didn't have that at the start.

00:08:11.780 --> 00:08:13.400
Yeah, it definitely seems obvious.

00:08:13.400 --> 00:08:17.020
So, you know, maybe you don't care too much, but tooling will care.

00:08:17.020 --> 00:08:18.160
Linters might care.

00:08:18.300 --> 00:08:21.160
So, like the tools you could possibly get better because of this.

00:08:21.160 --> 00:08:21.680
All right.

00:08:21.680 --> 00:08:24.340
So, we have 525 asynchronous generators.

00:08:24.340 --> 00:08:25.520
Async and away is awesome.

00:08:25.520 --> 00:08:27.400
Yield, yield from are awesome.

00:08:27.400 --> 00:08:29.580
But they were not friends previously.

00:08:30.440 --> 00:08:31.460
No, you couldn't use them together.

00:08:31.460 --> 00:08:35.720
So, you could either have an async coroutine or you could have a generator, but you couldn't have both.

00:08:35.720 --> 00:08:37.080
Now, you can have both.

00:08:38.340 --> 00:08:40.680
And similarly, we have asynchronous comprehensions.

00:08:40.680 --> 00:08:46.880
And, you know, actually one of the biggest things is the change to dictionaries coming in Python 3.6.

00:08:46.880 --> 00:08:47.660
What?

00:08:47.860 --> 00:08:53.500
Yeah, so you might think, well, Python has had dictionaries since from the very beginning.

00:08:53.500 --> 00:08:58.180
When you add fields or attributes to a class, it's actually stored in Dunderdict.

00:08:58.180 --> 00:09:00.840
I mean, dictionaries are, it's keyword values.

00:09:00.840 --> 00:09:04.320
Like, all over the place, dictionaries play a super important role.

00:09:04.320 --> 00:09:13.100
Well, in this release from 3.5 to 3.6, dictionaries are now 20% to 25% more memory efficient.

00:09:13.100 --> 00:09:15.100
They should be a little faster.

00:09:15.100 --> 00:09:17.200
They are ordered.

00:09:17.860 --> 00:09:21.460
So, the order that you put things in, they remember that, right?

00:09:21.460 --> 00:09:29.200
Like, if when you first started working with dictionaries, you're like, multiple dictionaries can have the fields show up at different times and different orders.

00:09:29.200 --> 00:09:30.180
It's bizarre, right?

00:09:30.180 --> 00:09:30.860
You can keep switching.

00:09:30.860 --> 00:09:32.440
Now, it's always consistent.

00:09:32.440 --> 00:09:36.440
The order dict part and making them fast is good.

00:09:36.440 --> 00:09:37.640
So, it's all good stuff.

00:09:37.640 --> 00:09:38.480
Yeah, it's all good stuff.

00:09:38.480 --> 00:09:40.240
We've got a new secrets module coming.

00:09:40.240 --> 00:09:44.680
So, you have cryptographically strong random number generators, windows.

00:09:45.000 --> 00:09:49.060
They've now marked the Python executable as long path aware.

00:09:49.060 --> 00:09:56.020
So, I don't know if you guys are aware, but Windows typically has, like, crummy 260 character path limits for a long time.

00:09:56.020 --> 00:09:58.880
There's a lot of legacy stuff that applies that to, like, newer code.

00:09:59.220 --> 00:10:05.600
So, now, long path limitations are gone on Windows, which, if you write code that has to run on Windows, you'll care a lot about that.

00:10:05.600 --> 00:10:05.920
Wow.

00:10:05.920 --> 00:10:10.040
Yeah, actually, I try to write code that I don't have to care about Windows, but...

00:10:10.040 --> 00:10:11.800
Yes, exactly.

00:10:11.800 --> 00:10:13.220
So, there's...

00:10:13.220 --> 00:10:18.760
If you go look through the link, the release notes, the documentation there, there's a lot more stuff.

00:10:18.760 --> 00:10:22.000
I'm scratching the surface on all the cool stuff coming in 3.6.

00:10:22.000 --> 00:10:28.140
So, if people need one more reason to upgrade from 2 to 3, well, here's, like, 20 or 30 more reasons.

00:10:28.140 --> 00:10:30.460
Yeah, and I like the peps that you talked about.

00:10:30.460 --> 00:10:34.400
You left the links to those particular peps in the show notes.

00:10:34.640 --> 00:10:35.480
So, that's great.

00:10:35.480 --> 00:10:36.600
Yeah, yeah, definitely check them out.

00:10:36.600 --> 00:10:36.960
Okay.

00:10:36.960 --> 00:10:38.380
Hey, Brian.

00:10:38.380 --> 00:10:39.020
Hey.

00:10:39.020 --> 00:10:41.500
Before we get to the next headline, let me tell you about Rollbar.

00:10:41.500 --> 00:10:42.680
Well, tell me about Rollbar.

00:10:42.680 --> 00:10:43.120
All right, man.

00:10:43.120 --> 00:10:46.580
So, Rollbar is sponsoring Python Bytes, and we're really excited about it.

00:10:46.580 --> 00:10:47.980
I use Rollbar for my website.

00:10:47.980 --> 00:10:56.220
Rollbar is a package you install in your Python web app, Pyramid, Flash, Django, whatever, and anytime there's an error, you get an immediate notification and detailed error reports.

00:10:56.220 --> 00:11:04.040
So, you know, even though the Talk Python websites handle almost 2 million dynamic HTTP requests per month, and they transfer, like, 4 to 5 terabytes of data,

00:11:04.160 --> 00:11:04.920
I'm not worried about them.

00:11:04.920 --> 00:11:05.280
Really?

00:11:05.280 --> 00:11:11.100
No, not really, because if something goes wrong, my Slack, my email, my phone, everything will be blown up with notifications.

00:11:11.100 --> 00:11:17.060
And, you know, I don't get many, but when they come in, like, all the info is there, so I often don't even have to debug it.

00:11:17.060 --> 00:11:18.020
I just go and fix the problem.

00:11:18.020 --> 00:11:18.880
That's pretty awesome, right?

00:11:18.880 --> 00:11:19.860
That's very awesome.

00:11:19.860 --> 00:11:20.720
Yeah, I love Rollbar.

00:11:20.720 --> 00:11:25.020
So, and the Python Bytes listeners, all you guys out there, you can have the same peace of mind.

00:11:25.020 --> 00:11:28.840
Just visit rollbar.com slash Python Bytes and sign up for the free tier.

00:11:28.840 --> 00:11:32.720
You get, like, 300,000 free errors tracked, although I really hope you don't have that many.

00:11:33.680 --> 00:11:34.160
Definitely.

00:11:34.160 --> 00:11:36.020
You should do more testing if you do.

00:11:36.020 --> 00:11:36.940
You definitely should.

00:11:38.260 --> 00:11:45.120
Well, next up for me, I am a sucker for, like, I really like efficiency, developer efficiency.

00:11:45.120 --> 00:11:47.020
That's always kind of been important to me.

00:11:47.020 --> 00:11:53.000
And part of that is being able to set up your personal development environment to help you succeed.

00:11:53.000 --> 00:11:57.120
And I know it's different from everybody, and I'm always tweaking mine.

00:11:57.480 --> 00:11:59.380
I like articles when people write about them.

00:11:59.380 --> 00:12:06.800
So there's an article by Dougal, I think, Dougal Matthews, called Create an Excellent Python Dev Environment.

00:12:07.640 --> 00:12:12.060
And he goes through installing Python, but everybody knows how to do that.

00:12:12.060 --> 00:12:18.280
But he's got some goals of, like, don't muck with the system Python and set up virtual environments easy.

00:12:18.280 --> 00:12:20.260
And it's interesting.

00:12:20.660 --> 00:12:27.820
One of the things I think is interesting about this article is to start off the bat saying why he has particular goals for why he's chosen things.

00:12:27.820 --> 00:12:28.880
And that's kind of neat.

00:12:28.880 --> 00:12:29.420
Yeah, that's cool.

00:12:29.420 --> 00:12:31.860
Because you might look at it and go, I would never do that.

00:12:31.960 --> 00:12:33.720
But maybe your goals are different than his.

00:12:33.720 --> 00:12:36.280
And you can really understand where he's coming from because of that.

00:12:36.280 --> 00:12:36.860
That's cool.

00:12:36.860 --> 00:12:37.160
Yeah.

00:12:37.160 --> 00:12:45.080
Actually, the first part confused me because he was covering a project that I'd never heard of called pyenv or P-Y-E-N-V.

00:12:45.080 --> 00:12:52.400
I'm more used to V-E-N-V, which just comes in 3.6 or virtual environment.

00:12:52.400 --> 00:12:56.740
So this is something different, and I just will have to check it out.

00:12:56.740 --> 00:13:01.440
But it's something like virtual environments, but it's independent of Python.

00:13:01.600 --> 00:13:03.040
It sets them up separate, I guess.

00:13:03.040 --> 00:13:03.880
I don't know.

00:13:03.880 --> 00:13:04.220
Yeah.

00:13:04.220 --> 00:13:06.820
But I haven't used that much either, so I might be a little off here.

00:13:06.820 --> 00:13:11.620
But I think it's kind of like for managing and creating and activating different virtual environments.

00:13:11.620 --> 00:13:14.020
It's like your virtual environment manager.

00:13:14.020 --> 00:13:14.600
Okay.

00:13:14.600 --> 00:13:15.400
I think.

00:13:15.400 --> 00:13:16.080
Yeah.

00:13:16.080 --> 00:13:24.880
Next is a pyenv virtualenv, which is apparently similar to virtualenv wrapper, which a lot of people use.

00:13:24.880 --> 00:13:29.140
I don't use either of those, but I still don't get what they're for.

00:13:29.740 --> 00:13:31.620
Straight virtual environments work fine.

00:13:31.620 --> 00:13:34.300
I don't understand what I need more for.

00:13:34.300 --> 00:13:35.740
You have different goals.

00:13:35.740 --> 00:13:36.960
Yeah, that's probably it.

00:13:36.960 --> 00:13:42.560
The next thing he talks about is a thing called Pipsy, which I hadn't heard of, and I just used it today.

00:13:42.760 --> 00:13:50.240
It's a tool to let you install Python-based command line utilities in their own virtual environments so that you can use them.

00:13:50.240 --> 00:13:54.140
You can just set your path to them so you can use them on the command line from anywhere.

00:13:54.140 --> 00:13:59.760
That's really cool just to have like these little virtual environments just for a command line utility.

00:13:59.760 --> 00:14:00.640
That's really cool.

00:14:00.640 --> 00:14:02.340
I never really thought of doing it that way.

00:14:02.340 --> 00:14:03.240
That's great.

00:14:03.240 --> 00:14:09.900
When I was talking in one of the interviews I've done, I heard about more people using Atom than before.

00:14:09.900 --> 00:14:15.440
And I tried to set up Atom and I needed to give it a path to Flake 8.

00:14:15.640 --> 00:14:19.660
And I'm like, oh, I'll use Pipsy to set up this so that you can see Flake 8.

00:14:19.660 --> 00:14:20.860
So I've done that.

00:14:20.860 --> 00:14:21.160
Oh, nice.

00:14:21.160 --> 00:14:23.460
But he does talk about with Pipsy.

00:14:23.460 --> 00:14:30.520
He usually includes talks for testing multiple environments, which I highly recommend.

00:14:31.300 --> 00:14:36.400
Flake Docs, which is a static site generator documentation thingy.

00:14:36.400 --> 00:14:37.740
I've never used it.

00:14:37.740 --> 00:14:40.140
Get Review, which I would totally use.

00:14:40.140 --> 00:14:44.800
It's a Garrett integration for Git, but I don't use Git right now, but at work.

00:14:44.800 --> 00:14:50.500
And I actually do code reviews on my own code in my free time.

00:14:50.500 --> 00:14:56.020
And then Flake 8, of course, which is my favorite, recommended, way too static in the analyzed stuff.

00:14:56.640 --> 00:15:05.760
And then, as a side note, one of the things he was talking about for this Pi A&V is because it's compatible with Fish,

00:15:05.760 --> 00:15:09.420
which is a different shell that I've never heard of.

00:15:09.420 --> 00:15:10.600
I use Bash.

00:15:10.600 --> 00:15:12.540
I tried Z-Shell for a while.

00:15:12.540 --> 00:15:13.740
I'm always used.

00:15:13.740 --> 00:15:16.180
I think it's fun to try new shells.

00:15:16.180 --> 00:15:17.920
So maybe I'll give it a shot.

00:15:17.920 --> 00:15:19.460
Yeah, it's definitely worth checking out, Fish.

00:15:19.460 --> 00:15:20.200
That sounds cool.

00:15:20.200 --> 00:15:21.940
I use Z-Shell as well.

00:15:21.940 --> 00:15:26.320
I just actually formatted my computer and I'm like, you know, I might try a different shell this time.

00:15:26.400 --> 00:15:27.540
And I set everything up.

00:15:27.540 --> 00:15:28.120
So that's cool.

00:15:28.120 --> 00:15:28.920
I'll check out Fish.

00:15:28.920 --> 00:15:32.140
I do love to see the way people put these environments together.

00:15:32.140 --> 00:15:35.340
And I think it really can help people who are new.

00:15:35.340 --> 00:15:37.780
It can help you discover things you don't know about, like Pipsy.

00:15:37.780 --> 00:15:38.820
That's really great.

00:15:38.820 --> 00:15:44.820
I was just stuck in traffic today, this morning, and was thinking for some reason about this stuff.

00:15:44.820 --> 00:15:49.300
You know, other people, I don't know what they dream about, but this is what I was daydreaming about.

00:15:49.300 --> 00:15:57.640
I was thinking, you know, I might try switching to Conda instead of pip and try using Conda for managing all these environments.

00:15:57.640 --> 00:16:02.920
I really like the way that Conda, like, vets the packages and pre-compiles them for you.

00:16:02.920 --> 00:16:03.960
I was reading about something.

00:16:03.960 --> 00:16:10.460
It was like, well, as long as you have this compiler set up, it'll probably be fine, but it might not work so well.

00:16:10.460 --> 00:16:11.180
I'm like, you know what?

00:16:11.500 --> 00:16:15.320
Maybe I should just use Conda, and, like, all those problems are solved by the Continuum guys.

00:16:15.320 --> 00:16:20.900
And so I'm also doing a lot of virtual environments with Python 3, V, and V.

00:16:20.900 --> 00:16:27.220
And the one thing that I like that I've stopped using the main Python REPL, and I'm using PtPython.

00:16:27.220 --> 00:16:28.260
Do you know PtPython?

00:16:28.260 --> 00:16:30.340
PtPython.

00:16:30.340 --> 00:16:31.020
No, I don't.

00:16:31.020 --> 00:16:42.420
So PtPython is basically the regular REPL, but it has a lot better editing and history and auto-completion and all sorts of stuff for what you can do.

00:16:42.420 --> 00:16:47.860
So, like, for example, if you type in a function in the regular REPL, you know, it's like three lines with indentation or whatever.

00:16:47.860 --> 00:16:52.820
If you want to edit it, you've got to remember to, like, always replay them in the right order.

00:16:52.820 --> 00:16:57.620
You know, up arrow four times, enter, up arrow three times, make the change, you know, that kind of stuff.

00:16:57.960 --> 00:17:02.860
This will, like, if you hit up arrow for code suites, it'll bring the whole thing back and you can edit it, stuff like that.

00:17:02.860 --> 00:17:03.400
Oh, okay.

00:17:03.400 --> 00:17:05.520
Do you work in the REPL very much?

00:17:05.520 --> 00:17:06.520
Not too much.

00:17:06.520 --> 00:17:07.640
Usually I'm in some kind of editor.

00:17:07.640 --> 00:17:10.320
But when I am there, I've been moving to PtPython.

00:17:10.320 --> 00:17:10.800
That's pretty cool.

00:17:10.800 --> 00:17:12.040
I think I'll check it out.

00:17:12.040 --> 00:17:13.420
Yeah, yeah, check it out.

00:17:13.420 --> 00:17:14.120
So what do you got next?

00:17:14.120 --> 00:17:16.280
Well, a lot of people have been checking out Python lately.

00:17:16.280 --> 00:17:18.840
And there was an interesting article.

00:17:18.840 --> 00:17:20.260
Is it an article?

00:17:20.260 --> 00:17:27.440
It was an article that's posted as a GitHub repository, which is accompanied by a Go program that's generated a bunch of statistics

00:17:27.440 --> 00:17:28.100
and graphs.

00:17:28.100 --> 00:17:35.640
And the thing I'm actually linking to is a Reddit article with, like, 350 upvotes and tons of comments.

00:17:35.640 --> 00:17:37.780
So you can check out the conversation.

00:17:37.780 --> 00:17:39.680
But the headline is awesome.

00:17:39.680 --> 00:17:41.880
GitHub language statistics.

00:17:41.880 --> 00:17:46.740
Python is the second most popular language on GitHub for active repositories.

00:17:46.740 --> 00:17:47.640
That's awesome.

00:17:47.640 --> 00:17:47.980
Yeah.

00:17:47.980 --> 00:17:52.600
I mean, Python's growth is just continuing and expanding.

00:17:52.600 --> 00:17:55.300
And it's such a cool time to be involved in the language.

00:17:55.300 --> 00:17:58.180
And here's just one more stat to back that up.

00:17:58.180 --> 00:17:58.640
Yeah.

00:17:58.640 --> 00:18:03.360
Looks like the graphs you have to click through from the Reddit to the GitHub page.

00:18:03.800 --> 00:18:04.360
Yeah, yeah.

00:18:04.360 --> 00:18:05.460
So I'm linking to both.

00:18:05.460 --> 00:18:05.740
Okay.

00:18:05.880 --> 00:18:15.840
So they say, we're going to study active repositories because it doesn't make any sense to think about GitHub statistics if something was put there five years ago and hasn't been touched.

00:18:15.840 --> 00:18:16.600
All right.

00:18:16.600 --> 00:18:19.000
So they said, let's consider the set of active repositories.

00:18:19.000 --> 00:18:22.520
Those are created or updated during the period.

00:18:22.520 --> 00:18:28.020
And the period is like a bunch of dates, like, throughout the last three years, you'll see when you get there.

00:18:28.720 --> 00:18:30.460
And it has to have at least one star.

00:18:30.460 --> 00:18:32.580
So people have to, somebody has to care about it.

00:18:32.580 --> 00:18:35.960
Somebody has to care enough about it to have forked it.

00:18:35.960 --> 00:18:38.220
And it must be more than 10K.

00:18:38.220 --> 00:18:39.040
Right.

00:18:39.040 --> 00:18:45.280
So it can't just be like, well, I put up this one file and somebody forked it or, you know, something silly like that.

00:18:45.280 --> 00:18:46.520
It's got to be like a real project.

00:18:46.520 --> 00:18:51.660
So if you take all of those together, JavaScript turns out to be the most popular.

00:18:51.660 --> 00:18:55.700
But JavaScript, I'm sure, is highly overcounted.

00:18:55.800 --> 00:19:03.020
I'm pretty sure that's generally true on GitHub statistics because almost every one of my Python projects has some JavaScript.

00:19:03.020 --> 00:19:04.080
You know what I mean?

00:19:04.080 --> 00:19:04.580
Yeah.

00:19:04.580 --> 00:19:08.440
I mean, since it's the front end, it's almost every project has it.

00:19:08.440 --> 00:19:09.000
Right.

00:19:09.000 --> 00:19:15.920
Almost any web project in any language is going to be counted as JavaScript to some degree in the language category.

00:19:15.920 --> 00:19:22.740
And so I feel like JavaScript, while it is extremely popular, I think it's massively overcounted in these types of stats.

00:19:22.740 --> 00:19:25.500
And it seems to appear that way in the graph.

00:19:26.180 --> 00:19:30.060
But so Python displaced Java, which we can all cheer for that.

00:19:30.060 --> 00:19:30.300
Right.

00:19:30.300 --> 00:19:30.800
That's awesome.

00:19:30.800 --> 00:19:31.040
Yeah.

00:19:31.040 --> 00:19:34.860
But let me give you some stats that are pretty interesting that will I think this might blow your mind.

00:19:34.860 --> 00:19:41.700
So back in November 2014, there were 1,790 active repositories by the four criteria above.

00:19:41.700 --> 00:19:42.220
Yeah.

00:19:42.220 --> 00:19:43.120
That were Python.

00:19:43.120 --> 00:19:43.980
This is just Python.

00:19:43.980 --> 00:19:47.720
November 2015, there was 2,500.

00:19:48.160 --> 00:19:58.060
And if you look throughout the year of 2015 and early 2016, there's, it would vary, but it's like 2,000 to 2,500, 2,600.

00:19:58.060 --> 00:20:04.620
By November 2016, there's 10,944 active repositories.

00:20:04.980 --> 00:20:06.980
It's just like, it's growing like crazy.

00:20:06.980 --> 00:20:07.440
Yeah.

00:20:07.440 --> 00:20:08.560
I love seeing that.

00:20:08.560 --> 00:20:23.800
And I think one of the things I like, I think has changed in that timeframe is the, I don't know if it can be attributed to this, but the cookie cutter project has made it a lot easier for people to set up something to share on GitHub.

00:20:23.800 --> 00:20:24.200
Yeah.

00:20:24.200 --> 00:20:25.860
Cookie cutter is really awesome.

00:20:25.860 --> 00:20:27.640
If you guys don't know about cookie cutter, check it out.

00:20:27.640 --> 00:20:28.760
It's a cool project.

00:20:28.760 --> 00:20:30.060
I'm sure it's not hurting.

00:20:30.060 --> 00:20:30.480
Yeah.

00:20:30.480 --> 00:20:31.900
Anyway, those are, that's good.

00:20:31.900 --> 00:20:36.160
Also, it makes me think that I spent the right time learning a new language.

00:20:36.160 --> 00:20:38.120
So I started from C++.

00:20:38.120 --> 00:20:39.300
Yeah, absolutely.

00:20:39.300 --> 00:20:41.420
You know, it's good to be in a place that's growing.

00:20:41.420 --> 00:20:45.020
Now, I mean, obviously take these stats, they're with a grain of salt.

00:20:45.020 --> 00:20:48.340
They're sliced in all these various criteria and so on.

00:20:48.340 --> 00:20:56.020
So they might not be perfect, but they give a glimpse into a world that is doing very well and is very fun to be part of.

00:20:56.020 --> 00:20:57.280
So I'm happy to see it.

00:20:57.280 --> 00:20:57.540
Okay.

00:20:57.540 --> 00:21:03.820
We're up to my number three pick, which is handling Unicode strings in Python.

00:21:03.820 --> 00:21:08.480
It is from, I know I'm going to get this name wrong, Wan Li Song, I think.

00:21:08.480 --> 00:21:10.820
But we'll link it, of course, in the show notes.

00:21:11.060 --> 00:21:18.540
I like it because it's a nice article to introduce people about the concepts of text representation in Python.

00:21:18.540 --> 00:21:26.040
And this comes up, at least, it hurts my head sometimes because I came up with the 2.7 Python world.

00:21:26.040 --> 00:21:32.120
And I think anybody that learned with 2.7 and had to switch to a more recent 3x version,

00:21:32.120 --> 00:21:35.820
sometimes it's hard to understand how the switch happens.

00:21:35.920 --> 00:21:39.760
And there's a nice table for some of the things that are different.

00:21:39.760 --> 00:21:50.040
And then it goes through specifics of dealing with Unicode in things like I.O. boundaries to databases or services.

00:21:50.040 --> 00:21:57.120
And then also a few other examples are dealing with it with logging, with JSON encoding, and with Redis even.

00:21:57.860 --> 00:22:04.340
A nice pointer to a 2012 article from Ned Batchelder called Pragmatic Unicode, which I hadn't read before.

00:22:04.340 --> 00:22:07.440
So I learned a lot about Unicode in this last week.

00:22:07.440 --> 00:22:07.800
Oh, yeah.

00:22:07.800 --> 00:22:08.480
That's great.

00:22:08.480 --> 00:22:10.640
If you have to juggle that stuff, it can be tricky.

00:22:10.640 --> 00:22:14.580
I remember talking to some of the Web Foundation guys.

00:22:14.580 --> 00:22:22.380
I think it was Kenneth Reitz and Requests, but it could have been Armin Roeniger and Flask.

00:22:22.380 --> 00:22:23.100
I'm not sure.

00:22:23.100 --> 00:22:23.880
I think it was Kenneth.

00:22:24.320 --> 00:22:32.260
Anyway, seeing that one of the most challenging things of upgrading their projects from 2 to 3 or supporting 3, let's say,

00:22:32.260 --> 00:22:38.600
is the dramatically different way that bytes go to strings and all of this kind of stuff.

00:22:38.600 --> 00:22:45.260
So, yeah, if you've got to upgrade something that's 2 to support 3, be really careful with the strings.

00:22:45.560 --> 00:22:56.320
Yeah, and this is another one of those, I'm going to bookmark it, and if the next time I come up with an issue, I'll look through this, see if it can help me figure out how to fix it.

00:22:56.320 --> 00:22:56.660
Yeah.

00:22:56.660 --> 00:22:57.340
Awesome.

00:22:57.340 --> 00:22:57.780
All right.

00:22:57.780 --> 00:22:59.300
What do you got as your last one, Michael?

00:22:59.300 --> 00:23:02.740
My last one, I think this one might be a little surprising for you.

00:23:02.740 --> 00:23:03.060
Let's see.

00:23:03.140 --> 00:23:10.080
So, I've asked many people what their favorite editor is over at Talk Python To Me, and I've heard many answers.

00:23:10.080 --> 00:23:15.340
You know, it would be fun to go back and actually do some data analysis and graphs or whatever, right?

00:23:15.340 --> 00:23:19.000
But I would say Sublime Text, extremely popular.

00:23:19.000 --> 00:23:22.140
Emacs, very popular.

00:23:22.140 --> 00:23:25.260
Vim, I think Vim might be slightly beating Emacs.

00:23:25.260 --> 00:23:27.160
PyCharm is pretty popular.

00:23:27.400 --> 00:23:29.140
People hear me go on and on about PyCharm.

00:23:29.140 --> 00:23:30.180
I love PyCharm.

00:23:30.180 --> 00:23:30.620
Really?

00:23:30.620 --> 00:23:31.560
I didn't know that.

00:23:31.560 --> 00:23:31.840
Yeah.

00:23:31.840 --> 00:23:35.480
Yeah, and people, most people don't know this about me, but I actually do use it now.

00:23:35.480 --> 00:23:37.140
I do love it a lot.

00:23:37.140 --> 00:23:47.480
But one thing I came across with was I was fooling around with Visual Studio Code, and this is not like Visual Studio from Windows, the big .NET thing.

00:23:47.480 --> 00:23:49.460
This is like a lightweight editor.

00:23:49.460 --> 00:23:53.660
It's based on, I think, the same underlying stuff as Atom.

00:23:53.660 --> 00:23:54.040
Okay.

00:23:54.040 --> 00:24:00.980
It's using the Chrome as its underlying engine, and it's based on some client-side HTML stuff.

00:24:00.980 --> 00:24:08.320
Anyway, it's a free editor that's pretty cool, and it's growing quite a bit in terms of its extensions you can get for it.

00:24:08.320 --> 00:24:12.800
It's got, like, cool Git integration, and now it's getting better Python integration.

00:24:12.800 --> 00:24:21.500
So my pick is this thing called the Python extension for Visual Studio Code, and it runs on Mac and Windows and Linux and so on.

00:24:22.100 --> 00:24:23.960
And I have a link to the one there.

00:24:23.960 --> 00:24:34.160
And what's really interesting is, well, the bunch of features, which I'll tell you, but if I had to ask you, Brian, how many times do you think this thing has been downloaded?

00:24:34.160 --> 00:24:35.620
23.

00:24:35.620 --> 00:24:37.660
23 is good.

00:24:37.660 --> 00:24:43.080
Well, I would guess thousands, maybe 20, 30,000 times, something like this, right?

00:24:43.120 --> 00:24:46.500
Like, okay, how many people are installing full Python support?

00:24:46.500 --> 00:24:58.920
This is, like, not just standard completion, but it, like, reads, if you're writing a package, it, like, understands your package and will tell you exactly what all the names of all the elements symbolically.

00:24:58.920 --> 00:25:02.420
In your package, it'll do, like, AST-based refactoring.

00:25:02.420 --> 00:25:03.760
Like, really cool stuff, right?

00:25:04.240 --> 00:25:07.360
Anyway, 850,000 installs.

00:25:07.360 --> 00:25:09.140
That's actually incredible.

00:25:09.140 --> 00:25:10.500
Now I want to go try it.

00:25:10.500 --> 00:25:17.400
Yeah, I mean, when you think of Python editors, almost a million people installed this Python support for their editor.

00:25:17.400 --> 00:25:25.060
Now, of course, not every one of them is doing Python all the time, and there's not a one-to-one mapping between developers and editors.

00:25:25.200 --> 00:25:28.040
But this is, like, way more popular than I realized.

00:25:28.040 --> 00:25:29.500
And so I thought, well, why don't I play with it?

00:25:29.500 --> 00:25:31.660
So I played with it this week, and I'm pretty impressed.

00:25:31.660 --> 00:25:34.080
For, like, lightweight stuff, I think this is my new editor.

00:25:34.080 --> 00:25:34.780
Oh, okay.

00:25:34.780 --> 00:25:36.760
I was just actually picking it.

00:25:36.760 --> 00:25:40.280
I installed Adam this morning, and maybe I'll try this one out as well.

00:25:40.280 --> 00:25:43.240
Yeah, it's really similar to Adam, actually, so it's worth giving it a try.

00:25:43.240 --> 00:25:48.400
So it has linting, including a bunch of linters you can configure, including Flake 8.

00:25:48.400 --> 00:25:53.480
It has full-on auto-completion, as well as support for PEP 484.

00:25:53.580 --> 00:25:55.220
I think that's the type hint.

00:25:55.220 --> 00:26:04.060
It has Jupyter support, intending, code formatting, refactoring, like I said, code navigation, debugging.

00:26:04.060 --> 00:26:08.900
You can remotely debug over SSH to, like, a Flask app.

00:26:08.900 --> 00:26:11.660
I mean, that's pretty serious for this little plug-in, right?

00:26:11.660 --> 00:26:12.260
That's awesome.

00:26:12.260 --> 00:26:16.040
Unit tests, all the various tests you're talking about, lots of good stuff.

00:26:16.040 --> 00:26:22.940
So anyway, I thought this is kind of one of the unsung heroes of the editors, so I thought I'd highlight it.

00:26:23.280 --> 00:26:23.980
Yeah, cool.

00:26:23.980 --> 00:26:28.300
And maybe the next time you ask somebody, they'll say, I use code.

00:26:28.300 --> 00:26:30.140
Oh, yeah, I use Visual Studio Code all the time.

00:26:30.140 --> 00:26:31.520
Anyway, yeah, it's pretty cool.

00:26:31.520 --> 00:26:33.680
So I'm excited to try it out, at least.

00:26:33.680 --> 00:26:35.320
Okay, well, I think I'll try it out, too.

00:26:35.740 --> 00:26:38.160
And that brings us to the end.

00:26:38.160 --> 00:26:41.400
But we do like to catch up with what both of us are up to.

00:26:41.400 --> 00:26:44.000
So, Michael, what are you up to lately?

00:26:44.000 --> 00:26:48.460
Well, I've been continuing to crank out the Talk Python To Me episodes.

00:26:48.460 --> 00:26:58.080
So the last one I just released was parsing horrible things with Python, which I wanted to make sure I pointed out here, because I think that's a really interesting tie into your first pick of the week.

00:26:58.520 --> 00:27:04.740
Because it's another way to parse horrible things that I think is really actually quite powerful and interesting.

00:27:04.740 --> 00:27:08.600
So anyway, I released that with Eric Rose, and that was cool.

00:27:08.600 --> 00:27:10.180
That was a really interesting episode.

00:27:10.180 --> 00:27:12.160
I really enjoyed it.

00:27:12.160 --> 00:27:14.380
Eric is obviously a brilliant guy.

00:27:14.380 --> 00:27:15.720
So that was good.

00:27:15.820 --> 00:27:16.400
Yeah, thanks a lot.

00:27:16.400 --> 00:27:19.140
Yeah, he was a great guest and definitely enjoyed talking to him.

00:27:19.140 --> 00:27:25.240
You last week had asked me if Awesome Python, the GitHub thing, was the same as the Awesome Python newsletter.

00:27:25.240 --> 00:27:26.780
And I said, I think so.

00:27:26.780 --> 00:27:29.400
And now I think I might be wrong.

00:27:29.400 --> 00:27:37.280
No, in fact, the Awesome Python newsletter comes from python.libhunt.com, which is a really cool place for Python news.

00:27:37.280 --> 00:27:43.580
And I think one or two of the news items throughout the podcast, not this one, but over all of them, I've gotten from that place.

00:27:43.580 --> 00:27:43.980
Okay.

00:27:44.400 --> 00:27:46.020
So, yeah, that's my picks.

00:27:46.020 --> 00:27:47.000
What's up with me?

00:27:47.000 --> 00:27:48.060
Python is so awesome.

00:27:48.060 --> 00:27:49.560
We like to slap it on everything.

00:27:49.560 --> 00:27:51.780
It's awesome, yeah.

00:27:51.780 --> 00:27:52.740
How about you?

00:27:52.740 --> 00:27:53.140
What are you up to?

00:27:53.140 --> 00:27:54.620
Man, I've been doing a lot of writing.

00:27:54.620 --> 00:27:59.920
I've got a deadline, an editor deadline, in about a week, actually exactly a week from today.

00:27:59.920 --> 00:28:07.920
Because I'm trying to put on full steam, and it's the pytest book, and I'm trying to get it ready so that it can be printable,

00:28:07.920 --> 00:28:13.780
and I can take a stack of copies with me to PyCon in 2017, in May.

00:28:14.280 --> 00:28:15.640
So that's what I've been working on.

00:28:15.640 --> 00:28:21.060
The last episode of Test and Code is recorded and partly edited.

00:28:21.060 --> 00:28:24.920
This was number 25 with Dave Hunt about Selenium.

00:28:24.920 --> 00:28:30.120
And there's some really good content mixed in with some really stupid questions that I've asked.

00:28:30.340 --> 00:28:34.720
So I need to go and cut out the stupid questions, and then it'll be good to go.

00:28:34.720 --> 00:28:36.740
Hopefully we'll get that out in the next couple days.

00:28:36.740 --> 00:28:42.100
And then I'm really excited about an interview tomorrow scheduled.

00:28:42.100 --> 00:28:45.880
Hopefully it goes through with a person called David Hussman.

00:28:46.500 --> 00:28:54.100
He runs a place called Dev Jam Studios, and he also talks about Agile and goes around and speaks to people.

00:28:54.100 --> 00:28:57.240
And he's a really good speaker, so looking forward to talking to him.

00:28:57.240 --> 00:28:58.120
Yeah, that'll be awesome.

00:28:58.120 --> 00:29:02.540
Kind of a slightly above-the-code talk about all the testing and whatnot, right?

00:29:02.640 --> 00:29:05.040
Yeah, and I don't even know if he'll get into testing.

00:29:05.040 --> 00:29:16.480
One of the things he likes to talk about lately is story mapping, which is sort of high-level planning for an entire project above the writing stories level.

00:29:16.480 --> 00:29:18.900
And that's pretty neat.

00:29:18.900 --> 00:29:19.500
Yeah, that's cool.

00:29:19.500 --> 00:29:20.660
Definitely precedes code.

00:29:21.380 --> 00:29:21.860
Yeah.

00:29:21.860 --> 00:29:30.920
Well, anyway, I really enjoyed talking with you this week, and look forward to seeing what cool stuff people put out in the upcoming week.

00:29:30.920 --> 00:29:31.760
Yeah, thanks, Brian.

00:29:31.760 --> 00:29:34.940
I enjoyed it as well, and like always, I learned about some cool new things.

00:29:34.940 --> 00:29:36.460
I'm definitely checking out Pipsy.

00:29:36.460 --> 00:29:40.160
And thank you, everyone, for listening, and we will see you next week.