WEBVTT

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

00:00:05.780 --> 00:00:10.680
This is episode 74, recorded on April 17, 2018.

00:00:10.680 --> 00:00:11.780
I'm Michael Kennedy.

00:00:11.780 --> 00:00:12.580
And I'm Brian Okken.

00:00:12.580 --> 00:00:13.600
And I'm Matt Harrison.

00:00:13.600 --> 00:00:14.540
Yeah, that's right.

00:00:14.540 --> 00:00:17.180
We've got a special guest here on the show.

00:00:17.180 --> 00:00:22.760
So Brian and I decided to invite Matt Harrison to mix things up a little bit and bring a slightly different perspective.

00:00:22.760 --> 00:00:28.740
And we decided we're going to try this little experiment from time to time, you know, once a month, once every six weeks, something like that.

00:00:28.980 --> 00:00:30.660
So, Matt, welcome to the show.

00:00:30.660 --> 00:00:31.200
Thanks.

00:00:31.200 --> 00:00:31.980
Thanks for having me.

00:00:31.980 --> 00:00:32.580
Good to be here.

00:00:32.580 --> 00:00:33.280
Good to have you here.

00:00:33.280 --> 00:00:36.220
So before we get into the topics, I just want to say thank you to Datadog.

00:00:36.220 --> 00:00:37.860
They're sponsoring this episode.

00:00:37.860 --> 00:00:41.080
Check them out at pythonbytes.fm/Datadog.

00:00:41.080 --> 00:00:42.320
I'll tell you more about them later.

00:00:42.320 --> 00:00:47.180
Brian, you've been running your own open source project lately, and it's been fun, right?

00:00:47.180 --> 00:00:48.780
Yeah, I started a little project.

00:00:48.780 --> 00:00:49.620
I called it Cards.

00:00:49.620 --> 00:00:52.300
But the intent was to – it's on GitHub.

00:00:52.300 --> 00:01:01.040
And the intent is to talk about, like, how I'm going to go about testing it using all the – what I think of as good test methodologies.

00:01:01.420 --> 00:01:06.880
But doing it in the open on an open source project, I'm getting contributors already, which is really cool.

00:01:06.880 --> 00:01:07.360
That's awesome.

00:01:07.360 --> 00:01:08.700
I don't really know the conventions.

00:01:08.700 --> 00:01:14.520
And even though I've been programming for decades, I'm kind of new to the – actually contributing to open source.

00:01:14.720 --> 00:01:19.100
Well, and it's different on GitHub than it was, say, in Subversion or something like that, right?

00:01:19.100 --> 00:01:22.120
There's the whole Git flow and PRs and that whole thing, right?

00:01:22.120 --> 00:01:32.740
Yeah, and how to deal with, like – how to deal with branching with – branching and forking with GitHub versus doing something out in the open on GitHub is one thing.

00:01:32.740 --> 00:01:37.080
But actually running it like a normal open source project is completely different.

00:01:37.780 --> 00:01:45.000
So I had a – actually, Anthony Shaw did a pull request on Cards, and he did a really good job on it.

00:01:45.000 --> 00:01:49.360
And I was – one of the things is he started it with a WIP for a work in progress.

00:01:49.360 --> 00:01:51.940
And I didn't know that was a convention already.

00:01:51.940 --> 00:02:00.880
So I looked around, and there's some – if people are new to this and want to learn more, I'm sure everybody out there already knows about open source stuff.

00:02:00.880 --> 00:02:01.380
But anyway.

00:02:01.380 --> 00:02:02.960
I would not make that assumption.

00:02:02.960 --> 00:02:04.040
I definitely would.

00:02:04.160 --> 00:02:13.100
I mean, it feels that way, but I think it's more of a dark matter sort of experience where, like, you see the stuff that people are doing.

00:02:13.100 --> 00:02:15.560
But that doesn't mean everyone is participating.

00:02:15.560 --> 00:02:18.920
And many people, I think, are just wanting to get into it.

00:02:18.920 --> 00:02:19.700
What do you think, Matt?

00:02:19.700 --> 00:02:24.560
I've been using open source since the mailing list days, and you had to talk over the mailing list.

00:02:24.560 --> 00:02:28.000
And so GitHub, when it first came out, was sort of a big change for me.

00:02:28.220 --> 00:02:39.900
And I think a lot of people use GitHub as just, I'm going to throw my source over the fence and see what happens to it, rather than maintaining it as a real open source project and trying to include community and get contributions.

00:02:39.900 --> 00:02:42.640
So I'm curious to see how this works.

00:02:42.640 --> 00:02:49.520
And I think, like Michael said, don't make the assumption that everyone knows how to do these things, even though some people are doing it.

00:02:49.520 --> 00:02:51.800
There's certainly a lot of people who can learn from this.

00:02:51.800 --> 00:02:53.560
There's a couple of things I wanted to throw out.

00:02:53.560 --> 00:02:58.600
This is from 2015 already, but it's an article called How to Write the Perfect Pull Request.

00:02:58.600 --> 00:03:05.540
And it kind of talks about the philosophy sort of both with approaching the pull request when you're first getting started.

00:03:05.540 --> 00:03:11.180
And it even talks about the WIP trick to tell the person that owns the repo, you're not done with it.

00:03:11.180 --> 00:03:12.960
You just kind of like early feedback on it.

00:03:12.960 --> 00:03:23.300
And then there's some advice on offering feedback to pull request submitters and also responding to that feedback as the submitter as well.

00:03:23.300 --> 00:03:26.760
It's a short read, but there's some good tips there.

00:03:26.760 --> 00:03:34.120
And then I'm also really excited about VM's new book coming out from Pragmatic called Forge Your Future with Open Source.

00:03:34.120 --> 00:03:37.200
And it includes things like how to deal with pull requests and everything.

00:03:37.200 --> 00:03:39.060
That sounds like such an interesting book.

00:03:39.060 --> 00:03:39.720
I love it.

00:03:39.800 --> 00:03:51.800
And I just like to say, like, I think getting using open source and getting involved for someone who wants to get a break into learning Python or learning a library or even getting a job.

00:03:51.800 --> 00:03:53.560
That's an awesome way to do it.

00:03:53.560 --> 00:03:54.200
I agree.

00:03:54.200 --> 00:03:59.440
And one of the problems people run into is they work in a place that doesn't use Python.

00:03:59.440 --> 00:04:04.580
And so they don't have a place to actually practice Python outside of just like toy things.

00:04:04.580 --> 00:04:11.700
So contributing to open source lets you make a meaningful contribution, even though maybe you're a Java or .NET shop and they're like Python?

00:04:11.700 --> 00:04:12.000
No.

00:04:12.000 --> 00:04:16.960
Or yeah, they might even be using Subversion or some other source control.

00:04:16.960 --> 00:04:17.700
Absolutely.

00:04:17.700 --> 00:04:18.380
Cool.

00:04:18.380 --> 00:04:18.860
This is a good one.

00:04:18.860 --> 00:04:19.460
This is a good one, Brian.

00:04:19.460 --> 00:04:23.000
So, Matt, you and I both do in-person training periodically.

00:04:23.580 --> 00:04:27.300
And I just did a class last week, I guess, a short class.

00:04:27.300 --> 00:04:34.880
And it was a lot of folks coming from a traditional sort of MATLAB, Mathematica background and moving into things like Jupyter.

00:04:34.880 --> 00:04:36.700
And I think that this might be a trend.

00:04:36.700 --> 00:04:37.100
What do you think?

00:04:37.340 --> 00:04:43.640
Yeah, I think we're seeing Jupyter changing from early adopter to sort of normalcy.

00:04:43.640 --> 00:04:45.680
I found a thing going around Twitter.

00:04:45.680 --> 00:04:53.720
Paul Romer, who's an economy professor at NYU, tweeted about his experience with Mathematica and Jupyter.

00:04:53.720 --> 00:04:59.900
And he referenced an article in The Atlantic about both of those products, Mathematica and Jupyter.

00:05:00.620 --> 00:05:04.280
And for me, like I said, I've been involved with open source for a long time.

00:05:04.280 --> 00:05:08.800
You don't often see stuff in The Atlantic or professors, economy professors.

00:05:08.800 --> 00:05:10.520
This isn't a computer science professor.

00:05:10.520 --> 00:05:14.660
This is an economy professor posting about Python and Jupyter.

00:05:14.660 --> 00:05:16.720
So, really cool stuff there.

00:05:16.720 --> 00:05:18.820
This is such an interesting find.

00:05:18.820 --> 00:05:24.140
And if you open, people should open up the Atlantic link that you're linking to here.

00:05:24.140 --> 00:05:26.740
Because, wow, that's a pretty provocative picture.

00:05:26.740 --> 00:05:28.780
There's like a formal paper.

00:05:29.320 --> 00:05:31.540
It says the scientific paper is obsolete.

00:05:31.540 --> 00:05:36.060
And there's like a paper, like an academic paper, that's literally on fire.

00:05:36.060 --> 00:05:38.300
Like in an animated way, like full screen.

00:05:38.300 --> 00:05:38.840
It's crazy.

00:05:38.840 --> 00:05:45.640
Yeah, and it makes reference to the discovery of gravitational waves and how there was a paper on that.

00:05:45.640 --> 00:05:50.580
But they also, along with that, published a Jupyter notebook where you could go out on your own.

00:05:50.580 --> 00:05:53.540
And you could look at their code, look at their data.

00:05:53.940 --> 00:06:02.000
And it had embedded text in it as well and basically discover gravitational waves or go through the same sequence and reproduce their science.

00:06:02.000 --> 00:06:03.660
So, I thought that was pretty cool.

00:06:03.660 --> 00:06:06.360
A quote from Mr. Romer.

00:06:06.360 --> 00:06:13.680
He says that Jupyter is the new open source alternative to Mathematica that is well on its way to becoming the standard for exchanging research results.

00:06:13.880 --> 00:06:14.420
I agree.

00:06:14.420 --> 00:06:23.180
I think academics has been too dependent on these couple of big, really expensive lock-in type of things like Mathematica and MATLAB.

00:06:23.180 --> 00:06:25.520
I'm also thinking of journals and stuff like that.

00:06:25.520 --> 00:06:29.120
This sort of open source paper in the form of Jupyter kind of touches on both of those.

00:06:29.120 --> 00:06:29.880
Brian, what do you think?

00:06:29.960 --> 00:06:31.640
I'm actually really excited about all that.

00:06:31.640 --> 00:06:42.560
I was just listening to a topic not too long ago about how the – actually, it was one of your podcasts about the academic journals that are – a lot of times nobody actually follows the steps along.

00:06:42.560 --> 00:06:48.140
But having the code out on Jupyter notebooks just allows everybody to go and follow along right there.

00:06:48.480 --> 00:07:02.100
One of the main points of these articles isn't that there's a notebook per se, but the compelling reason for using Python and Jupyter is not necessarily that the technology is better, but that there's a huge community around it.

00:07:02.100 --> 00:07:12.740
So, you know, they make the argument that the Wolfram notebook might be prettier or whatnot, but you have so many people who are contributing to these open source projects.

00:07:12.880 --> 00:07:19.500
You've got Matplotlib for graphics, SymPy for symbolic math, NumPy, SciPy, Pandas, NLTK.

00:07:19.500 --> 00:07:28.120
And, you know, if you look at PyPI, there's 135,000 packages last week on that, and it's really hard to compete with that.

00:07:28.120 --> 00:07:29.000
That's super compelling.

00:07:29.000 --> 00:07:30.160
So, really cool.

00:07:30.160 --> 00:07:31.560
Yeah, it is super compelling.

00:07:31.560 --> 00:07:40.360
So, speaking of community, Brian, you know I love to, like, pull on the Stack Overflow developer survey and, like, try to dig out results from the community, right?

00:07:40.360 --> 00:07:40.840
Yes.

00:07:40.840 --> 00:07:41.760
Yeah, that's always fun.

00:07:42.040 --> 00:07:50.000
So, there's another one that just came out that gives us a different perspective and also is more Python-focused than that one, right?

00:07:50.000 --> 00:07:52.200
That's, like, broad software development.

00:07:52.200 --> 00:08:00.160
So, JetBrains, the PyCharm team, teamed up with the PSF just at the end of last year to do a Python developer survey.

00:08:00.160 --> 00:08:06.840
And so, the thing I'm linking to is Python developer survey 2017 results, but it's, like, December, right?

00:08:06.840 --> 00:08:08.300
So, it's pretty relevant still.

00:08:08.300 --> 00:08:09.180
It's pretty fresh.

00:08:09.180 --> 00:08:10.560
They were just talking about it on their blog.

00:08:11.300 --> 00:08:17.960
And so, this is a really nice piece of sort of almost journalism around data science, I think.

00:08:17.960 --> 00:08:19.620
It's actually, they've really written it up nice.

00:08:19.620 --> 00:08:23.180
They show you graphs, and they're like, here's the main takeaway from this section.

00:08:23.180 --> 00:08:24.700
Here's the main takeaway from that section.

00:08:24.700 --> 00:08:26.720
So, how about I share some takeaways with you?

00:08:26.720 --> 00:08:27.400
Yes.

00:08:27.400 --> 00:08:27.520
Yeah.

00:08:28.400 --> 00:08:28.860
All right.

00:08:28.860 --> 00:08:32.980
So, the first one is, says, of the people that they interviewed.

00:08:32.980 --> 00:08:36.880
Now, this is obviously a self-selecting crowd.

00:08:37.320 --> 00:08:39.940
But the question was, you're obviously doing Python.

00:08:39.940 --> 00:08:42.320
Is this your main language or a secondary language?

00:08:42.320 --> 00:08:46.380
And they said 80% of the people are, Python is their main language.

00:08:46.380 --> 00:08:47.020
That was pretty cool.

00:08:47.020 --> 00:08:54.500
They said data analysis is actually just as popular as web development, which is pretty cool.

00:08:55.140 --> 00:08:59.680
So, there's basically as many Python web developers as there are data scientists.

00:08:59.680 --> 00:09:00.840
Does that surprise either of you?

00:09:00.840 --> 00:09:03.640
To me, Python felt like a web thing for most folks.

00:09:04.040 --> 00:09:04.400
Yeah.

00:09:04.400 --> 00:09:06.640
I mean, recently, it wouldn't surprise me.

00:09:06.640 --> 00:09:10.720
But, you know, if you would have said that two years ago, it probably wasn't the case two years ago.

00:09:10.720 --> 00:09:12.940
But now, yeah, it's not surprising to me.

00:09:12.940 --> 00:09:13.300
Yeah.

00:09:13.300 --> 00:09:16.020
They also talk about the growth of Python.

00:09:16.020 --> 00:09:18.620
And Brian and I, you and I, we've touched on this a few times.

00:09:18.620 --> 00:09:24.120
But they're also confirming, like, we think that massive hockey stick growth is largely data science people coming in.

00:09:24.120 --> 00:09:25.200
Yeah, it could be.

00:09:25.200 --> 00:09:26.920
There's, I think there's a lot of room to grow.

00:09:26.920 --> 00:09:36.140
There's a lot of people who are using Excel and some of these tools that you mentioned who probably want to migrate to something like Python for the libraries and machine learning capabilities.

00:09:36.140 --> 00:09:36.700
Yeah.

00:09:36.700 --> 00:09:40.540
Another interesting one was Python versus legacy Python.

00:09:40.540 --> 00:09:48.220
So, Python is at 75% usage among this group and 25% for Python 2.

00:09:48.220 --> 00:09:54.760
And if you look at the curve, that's, like, increasing in time, like, the rate at which people are moving to Python 3.

00:09:54.760 --> 00:09:56.060
So, that's really cool.

00:09:56.420 --> 00:09:57.300
Yeah, that's cool.

00:09:57.300 --> 00:10:00.240
Yeah, you wonder how much self-selecting is there, right?

00:10:00.240 --> 00:10:03.000
The legacy laggards didn't want to participate in this.

00:10:03.000 --> 00:10:04.300
That's right.

00:10:04.300 --> 00:10:05.520
I don't need no stick-in surveys.

00:10:05.520 --> 00:10:08.300
I learned everything about Python I need to know in 2008.

00:10:08.300 --> 00:10:09.280
Okay.

00:10:09.280 --> 00:10:13.360
So, they also talked about where code runs, where people run their Python code.

00:10:13.360 --> 00:10:17.040
And this is, I don't think it clues, like, the hosted notebook type stuff.

00:10:17.040 --> 00:10:18.140
So, probably not that.

00:10:18.140 --> 00:10:20.380
But 67% AWS.

00:10:20.380 --> 00:10:21.860
Brian, does that surprise you?

00:10:21.860 --> 00:10:22.840
I'm going to plead.

00:10:22.960 --> 00:10:29.000
I'm not in the field, in the web sort of space to know, really, where it's running.

00:10:29.000 --> 00:10:39.100
My basis for sort of judging the use of AWS compared to other platforms is when AWS goes down, what parts of the internet are no longer accessible?

00:10:39.100 --> 00:10:40.160
And they're pretty broad.

00:10:40.380 --> 00:10:43.320
Yeah, I would think that it'd actually be a little bit higher than that.

00:10:43.320 --> 00:10:50.280
The ones that surprised me was you've got Google App Engine at 29, Heroku at 26, Digital Ocean at 23.

00:10:50.280 --> 00:10:53.760
And the last one they say is Microsoft Azure at 16.

00:10:54.200 --> 00:10:57.220
And I think that 16 is probably going to change a little bit.

00:10:57.220 --> 00:11:01.520
They've been doing a lot of hiring in the Python space and getting some prominent Python people.

00:11:01.520 --> 00:11:04.480
So, there's a big push from Microsoft on that.

00:11:04.480 --> 00:11:07.540
They're definitely focused on Python in a lot of important ways.

00:11:07.540 --> 00:11:09.040
They now have Azure Notebooks.

00:11:09.040 --> 00:11:14.900
They have Brett Cannon, Steve Dower, both Python Core devs, working there.

00:11:14.900 --> 00:11:18.720
They brought the guy who did the Python extension for Visual Studio Code in-house.

00:11:18.720 --> 00:11:19.940
Like, they're doing a bunch of cool stuff.

00:11:20.500 --> 00:11:21.720
All right, so a few more takeaways.

00:11:21.720 --> 00:11:23.200
Team size, right?

00:11:23.200 --> 00:11:29.160
Like, you think of how big of a group do you, you know, like how large of a team do you work on?

00:11:29.160 --> 00:11:34.980
And if you think about, like, one of the advantages of Python is you don't need a large set of people to build something interesting.

00:11:34.980 --> 00:11:36.420
And I think that's reflected here.

00:11:36.420 --> 00:11:43.020
So, it says, like, team size, 2 to 7 people, 75%, 74% of the respondents are in that 2 to 7 group.

00:11:43.020 --> 00:11:45.040
And then 8 to 12 is 16.

00:11:45.380 --> 00:11:54.480
And then, basically, above that, above 12 people, all the way up to, like, 40 or larger, is 9% of the balance, basically.

00:11:54.480 --> 00:11:55.880
So, really small teams.

00:11:55.880 --> 00:11:58.200
And then operating systems, Brian, you touched on this a lot.

00:11:58.200 --> 00:12:03.440
49% of the people are still using, are currently using Windows as their OS.

00:12:03.440 --> 00:12:05.960
Then 19% for Linux, 15% for Mac.

00:12:06.620 --> 00:12:12.560
And, like you said before, like, Windows often gets the short end of the stick and sort of testing and examples and stuff.

00:12:12.560 --> 00:12:13.660
But it probably shouldn't.

00:12:13.660 --> 00:12:18.780
Yeah, one of the things I want to go back to is the cloud platforms that we talked about.

00:12:18.780 --> 00:12:26.420
One of the things that's interesting to there is that, clearly, some people are running on multiple platforms because that's over 100%.

00:12:26.420 --> 00:12:27.480
Yeah, that's interesting.

00:12:27.680 --> 00:12:34.860
Like, I could tell you for sure that, like, if somebody asked me, which of these platforms do you use, I would definitely check the DigitalOcean and AWS boxes.

00:12:34.860 --> 00:12:35.380
Okay.

00:12:35.380 --> 00:12:41.540
Because, like, for example, the main server for our podcast and the database server runs on DigitalOcean droplets.

00:12:42.020 --> 00:12:51.120
But when you interact with it and you get, like, say, an email, especially around the training stuff, that goes through Amazon simple email notification service and things like that.

00:12:51.120 --> 00:12:53.100
So, like, there's this blend of them.

00:12:53.100 --> 00:12:54.380
Yeah, I'm similar.

00:12:54.380 --> 00:12:57.960
I've done Heroku and DigitalOcean and both had stuff in S3 as well.

00:12:57.960 --> 00:13:00.140
So, it's not an either or.

00:13:00.140 --> 00:13:03.560
One of the things I thought was interesting was the operating systems.

00:13:03.560 --> 00:13:10.800
I mean, like you said, Windows tends to get, you know, people have something in their heart against it or whatnot.

00:13:10.800 --> 00:13:13.360
But I was surprised that Mac was so low on this.

00:13:13.360 --> 00:13:14.140
Yeah.

00:13:14.140 --> 00:13:14.920
Interesting.

00:13:14.920 --> 00:13:16.400
I wouldn't have thought that at all.

00:13:16.400 --> 00:13:21.600
But you go to the, I'm telling you, Dark Matter developers, that's what it is.

00:13:21.600 --> 00:13:22.280
Yeah.

00:13:22.280 --> 00:13:23.560
It's interesting.

00:13:23.560 --> 00:13:26.580
I think the story on Windows is going to get better.

00:13:26.580 --> 00:13:36.840
I believe the new version of Python is going to use MS Build and not Visual Studio 2008 for its compilation stuff during install,

00:13:37.000 --> 00:13:45.280
which means, like, modern versions of Windows will be able to install stuff without, like, installing a 2008 version of Visual Studio, which will be real nice.

00:13:45.280 --> 00:13:45.960
All right.

00:13:45.960 --> 00:13:50.840
So, before we get to the next one, I want to just tell you both a little bit about Datadog.

00:13:50.840 --> 00:14:04.160
So, speaking of stuff hosted in the clouds and spanning multiple machines and things like that, Datadog is a monitoring solution that provides visibility and tracks down issues with distributed systems involving Python applications.

00:14:04.320 --> 00:14:09.580
So, within just a few minutes, you can find bottlenecks in your code by exploring graphs and rich dashboards.

00:14:09.580 --> 00:14:18.440
And you can visualize your whole performance across all of your apps, which, when you're doing distributed programming or distributed apps, microservice type things, that's a huge deal.

00:14:19.260 --> 00:14:28.420
And you can go to pythonbytes.fm/datadog, do a quick little trial there, and you'll get a free Datadog t-shirt, which is pretty cute.

00:14:28.420 --> 00:14:31.680
So, check them out and let them know you appreciate them supporting the show.

00:14:31.680 --> 00:14:32.400
All right, Brian.

00:14:32.400 --> 00:14:35.600
I'm a big fan of databases, especially shiny new ones.

00:14:35.600 --> 00:14:37.180
You've got a really new one yet.

00:14:37.180 --> 00:14:39.280
Like, I can't even get this one yet, but it's still pretty cool.

00:14:39.340 --> 00:14:40.380
Yeah, you can't get it.

00:14:40.380 --> 00:14:43.740
But one of our listeners, Arash, I think that's his name.

00:14:43.740 --> 00:14:50.680
Anyway, he let us know about EdgeDB, and EdgeDB has a blog post up.

00:14:50.680 --> 00:14:52.300
It says, EdgeDB, a new beginning.

00:14:52.300 --> 00:14:59.740
And at first, I thought, yeah, okay, we'll keep an eye on this, and maybe we'll cover it later when we can actually play with it.

00:14:59.740 --> 00:15:02.860
Because it's a new database that's not available to use yet.

00:15:02.860 --> 00:15:05.220
However, it's going to be open source.

00:15:05.560 --> 00:15:10.760
And the reason why I brought it up now is because it's coming from some fairly interesting people.

00:15:10.760 --> 00:15:13.340
It has some pretty powerful Python origins, right?

00:15:13.340 --> 00:15:14.000
Yeah.

00:15:14.000 --> 00:15:21.360
Well, so, like, for instance, Elvis and Yuri, and I'm not going to try to pronounce their last names, or they will flame me.

00:15:21.360 --> 00:15:25.760
Part of this, and they're the people that brought us AsyncIO and UVloop.

00:15:25.760 --> 00:15:27.080
So, that's pretty impressive.

00:15:27.080 --> 00:15:27.860
That's very impressive.

00:15:27.860 --> 00:15:32.260
One of the things that's interesting is looking at the kind of code that you get with this.

00:15:32.680 --> 00:15:41.540
So, they're trying to attack the problem they're addressing is that document databases have some issues with just scalability.

00:15:41.540 --> 00:15:49.200
After your project gets larger, the schemaless part of it sometimes can be hard to deal with.

00:15:49.200 --> 00:15:52.520
A lot of people deal with it fine, but they see it as part of a problem.

00:15:52.520 --> 00:15:58.640
And relational databases are growing a lot, and Postgres, for instance, is keeping up to date.

00:15:58.640 --> 00:16:07.700
But the interface, how you interact with the database, the schemas and the underlying API to the database, hasn't changed much in a long time.

00:16:07.700 --> 00:16:09.880
So, they're trying to change that.

00:16:09.880 --> 00:16:13.880
And I forget what they call it, an object relational?

00:16:13.880 --> 00:16:15.700
They call it an object database.

00:16:15.700 --> 00:16:17.300
Object relational database.

00:16:17.500 --> 00:16:18.260
Yeah, yeah, yeah.

00:16:18.260 --> 00:16:21.760
Yeah, not like the traditional ones, they say, from the 80s.

00:16:21.760 --> 00:16:28.060
Yeah, so one of the things to look at, if you're going to look at anything, is to go to the link and look at the example.

00:16:28.060 --> 00:16:30.280
They have a new query language called EdgeQL.

00:16:30.980 --> 00:16:40.080
So, they have a different way to write a schema that's fairly, doesn't really look like Python, but it's type-based, and it's fairly expressive.

00:16:40.080 --> 00:16:41.180
It's pretty interesting.

00:16:41.180 --> 00:16:47.580
So, instead of saying, like, let's have a class and map that to the database, like, say, SQLAlchemy or MongoEngine might,

00:16:48.140 --> 00:16:55.860
they said, we're going to define our own data definition language, our own DSL, but it's really incredibly simple.

00:16:55.860 --> 00:17:01.980
Like, doing the relationships with cascading this and that in SQLAlchemy, I always get that wrong.

00:17:01.980 --> 00:17:03.820
You know, I have to look it up.

00:17:03.820 --> 00:17:10.700
And this is like, you want a foreign key relationship, you say link assignees, goes to a user definition, and the cardinality is double star,

00:17:10.700 --> 00:17:13.500
so I'm guessing multiple, many-to-many sort of thing.

00:17:14.000 --> 00:17:17.120
And that's on, like, incredibly short there.

00:17:17.120 --> 00:17:23.940
So, my first impression was, like, really a new schema definition language, a new query language.

00:17:23.940 --> 00:17:29.420
Like, seriously, like, it's just like, okay, well, I'm tired of SQL, and I'm tired of the other ways of programming.

00:17:29.420 --> 00:17:31.960
So, we're going to invent, like, another thing that people are going to get tired of.

00:17:31.960 --> 00:17:33.740
But it's starting to grow on me.

00:17:33.740 --> 00:17:34.820
Matt, what do you think about this?

00:17:34.820 --> 00:17:43.980
Whenever you say, I'm going to invent something that's going to replace SQL, I think you hear a million developers cringe because they all know SQL, right?

00:17:43.980 --> 00:17:50.380
But I think if you can get the five-minute out-of-the-box presentation where it's like, this is a compelling reason to use it.

00:17:50.380 --> 00:17:57.360
And, you know, everyone, or at least most Python people I know, want to use, like, an ORM and interact with the database that way.

00:17:57.360 --> 00:17:59.420
But there is this impedance mismatch with those.

00:17:59.420 --> 00:18:08.960
So, if you can nail that down and have, like, a really smooth five-minute out-of-the-box experience with this, I think you could get a lot of people interested in them.

00:18:08.960 --> 00:18:09.980
Yeah, it's pretty interesting.

00:18:09.980 --> 00:18:11.200
I'm glad you brought it, Brian.

00:18:11.240 --> 00:18:11.480
Thanks.

00:18:11.480 --> 00:18:12.160
All right.

00:18:12.160 --> 00:18:16.520
Matt, so you're a fan of the Wizard of the Oz is what I'm to draw from this next one.

00:18:16.520 --> 00:18:17.580
Yeah, yeah.

00:18:17.580 --> 00:18:18.740
Follow the yellow brick road.

00:18:18.740 --> 00:18:21.740
So, I've been, I do corporate training and I do consulting.

00:18:21.740 --> 00:18:26.000
And one of the things that I do when I'm doing data stuff is visualization.

00:18:26.000 --> 00:18:27.960
Visualization is pretty important.

00:18:27.960 --> 00:18:35.160
I mean, I've literally found bugs by visualizing something that we couldn't have found just by looking at the data necessarily.

00:18:35.800 --> 00:18:39.940
And so, visualization is also important in the evaluation of machine learning projects.

00:18:39.940 --> 00:18:44.480
And one of the projects that I've been liking and using recently is a project called Yellow Brick.

00:18:44.480 --> 00:18:47.780
So, I guess this will take you to the Wizard of Oz if you follow it.

00:18:47.780 --> 00:18:54.540
It's not a new project necessarily, but it's a project that's alive and going and being worked on still.

00:18:55.060 --> 00:18:59.640
And what it does is it offers visualizations for various machine learning algorithms.

00:18:59.640 --> 00:19:05.060
So, if you use a tool like scikit-learn, you can go to their website and they'll have all these visualizations up there.

00:19:05.060 --> 00:19:08.400
But those aren't included in the library for scikit-learn.

00:19:08.400 --> 00:19:09.520
You either need to...

00:19:09.520 --> 00:19:11.380
You've got to go create them yourself, right?

00:19:11.380 --> 00:19:11.860
Yeah.

00:19:11.860 --> 00:19:15.280
You've got to either copy and paste their code or go find some Stack Overflow.

00:19:15.280 --> 00:19:17.100
So, what I've been doing...

00:19:17.100 --> 00:19:21.820
I mean, I have a project on my GitHub, MLViz, that I just have my own...

00:19:21.820 --> 00:19:24.000
Here's the visualizations that I commonly use.

00:19:24.000 --> 00:19:25.440
And then I use my little library.

00:19:25.440 --> 00:19:28.020
But I'm looking to replace it with this.

00:19:28.020 --> 00:19:30.900
And I've been using this for some of my training as well recently.

00:19:30.900 --> 00:19:36.220
So, it's got visualizations for classification, regression, clustering, and text.

00:19:36.220 --> 00:19:44.200
One of the cool things about it is if you're familiar with SK-learn or scikit-learn is that it has a similar API to that.

00:19:44.200 --> 00:19:45.000
So, there's a fit.

00:19:45.000 --> 00:19:46.600
You can fit your visualization.

00:19:46.600 --> 00:19:47.860
You can transform it.

00:19:47.860 --> 00:19:49.600
And then you call this method called POOF.

00:19:49.600 --> 00:19:52.720
And that will pull up a map plotlet for your POOF.

00:19:52.720 --> 00:19:54.200
That's the magic method that they have.

00:19:54.200 --> 00:19:55.060
How do you spell POOF?

00:19:55.060 --> 00:19:55.780
P-U-F-F?

00:19:55.780 --> 00:19:57.360
P-O-O-F.

00:19:57.360 --> 00:19:57.940
POOF.

00:19:57.940 --> 00:19:59.000
Yeah, POOF.

00:19:59.000 --> 00:19:59.260
Gotcha.

00:19:59.260 --> 00:20:00.060
Yeah.

00:20:00.060 --> 00:20:00.800
Perfect.

00:20:01.300 --> 00:20:01.660
Love it.

00:20:01.660 --> 00:20:09.080
So, just a nice little library to, you know, one of those things that can be annoying or that you always go and copy and paste that code.

00:20:09.080 --> 00:20:11.360
And if you can just pip install this and use it.

00:20:11.360 --> 00:20:12.820
And it has a great interface.

00:20:12.820 --> 00:20:14.260
It makes your life a little bit easier.

00:20:14.260 --> 00:20:15.120
Yeah, absolutely.

00:20:15.120 --> 00:20:22.180
So, Brian, the next one, the last one that I want to cover, comes from the whole Alexa thing.

00:20:22.180 --> 00:20:27.580
We've had a couple of people write us about interesting things with, like, say, Flask Ask and Alexa skills, right?

00:20:27.580 --> 00:20:28.020
Yeah.

00:20:28.020 --> 00:20:28.320
Yeah.

00:20:28.380 --> 00:20:34.000
So, this one is a little bit of a serious one or at least addressing a serious problem, right?

00:20:34.000 --> 00:20:37.420
It's not like putting mustaches on cats, but, like, it's actually trying to solve a problem.

00:20:38.160 --> 00:20:41.320
Although, that would be a hard thing to do audibly on Alexa.

00:20:41.320 --> 00:20:44.340
Nonetheless, so, this one.

00:20:45.400 --> 00:20:47.860
This one is called Depression AI.

00:20:47.860 --> 00:20:49.500
And it's an Alexa skill.

00:20:49.500 --> 00:20:50.320
I apologize.

00:20:50.320 --> 00:20:52.900
Everybody's little device is probably going off.

00:20:52.900 --> 00:20:58.460
It's a Amazon device skill for people who are suffering with depression.

00:20:58.460 --> 00:21:00.520
And it's open source.

00:21:00.520 --> 00:21:07.260
It's based on Flask Ask, which I covered pretty deeply on episode 146 of Talk Python.

00:21:07.960 --> 00:21:14.800
So, that's basically a way to use Flask to write these Amazon voice assistant skills, which is pretty cool.

00:21:14.800 --> 00:21:28.300
So, the idea is that if you are suffering from depression, one of the things that's really hard for people, apparently, who are suffering from depression is to sort of go about your normal daily routine, right?

00:21:28.300 --> 00:21:28.860
Get up.

00:21:28.860 --> 00:21:29.640
Make your bed.

00:21:29.640 --> 00:21:30.360
Take a shower.

00:21:30.360 --> 00:21:34.200
It's, like, easy to just sort of, like, stay sprawled out on the couch or the bed or whatever.

00:21:34.420 --> 00:21:39.220
And so, it sort of helps to encourage you to keep doing those things.

00:21:39.220 --> 00:21:44.220
And it's supposed to be able to detect your moods and kind of give you some feedback.

00:21:44.220 --> 00:21:44.700
What do you think?

00:21:44.700 --> 00:21:46.560
I think that's super impressive.

00:21:46.560 --> 00:21:50.480
I mean, I have relatives who have dealt with these sorts of issues.

00:21:50.480 --> 00:21:54.300
And I don't know that they're necessarily ones who would take to technology.

00:21:54.300 --> 00:22:03.340
But anytime you can get some help or get, you know, some feedback or someone other, you know, you're not listening to yourself, it can be a good thing.

00:22:03.340 --> 00:22:05.020
I think this is awesome to have.

00:22:05.020 --> 00:22:17.560
I think there's a lot of people that would aren't somebody that wants to go talk to somebody else, but having making the decision to put this in place when they're feeling good and then have it help them through the hard times.

00:22:17.560 --> 00:22:18.300
This would be great.

00:22:18.300 --> 00:22:19.200
Yeah, it's pretty cool.

00:22:19.200 --> 00:22:25.300
It won the Valley Hackathon, which I think is, I think that's in Modesto, sort of outside San Francisco.

00:22:25.300 --> 00:22:32.400
But this was apparently built like, what is that, a weekend or something, which is also a pretty, pretty big testament.

00:22:32.400 --> 00:22:35.740
So you can do things like it'll evaluate your mood.

00:22:35.740 --> 00:22:37.580
It actually has suicidal intervention.

00:22:37.580 --> 00:22:41.580
It has location-based recommendations and mostly helps you with small activities.

00:22:41.580 --> 00:22:47.260
So you can say things like, Alexa, check on me, or I feel down, or help me feel better.

00:22:47.260 --> 00:22:48.960
I haven't gotten out of bed today.

00:22:48.960 --> 00:22:51.620
It'll ask you things like, have you gotten out of bed yet?

00:22:51.620 --> 00:22:52.240
Things like that.

00:22:52.240 --> 00:22:53.500
So it's pretty cool.

00:22:54.040 --> 00:22:55.300
Yeah, that's also open source.

00:22:55.300 --> 00:22:58.260
Yeah, it's open source and on GitHub and based on Python.

00:22:58.260 --> 00:23:03.780
So if this is inspiring, even if it's a totally different subject area, take it and use it as an example.

00:23:03.780 --> 00:23:04.400
Nice.

00:23:04.400 --> 00:23:06.880
Well, that's it for our official news.

00:23:06.880 --> 00:23:09.100
Brian, you got anything you want to share with the world while we're here?

00:23:09.260 --> 00:23:12.000
I've got some good news and some bad news.

00:23:12.000 --> 00:23:20.820
So the good news is I went to an estate sale the other day and I bought a book called How to Be Interesting in 10 Simple Steps.

00:23:21.360 --> 00:23:22.440
So that's the good news.

00:23:22.440 --> 00:23:26.620
The bad news is I'm a really slow reader, so it might take a while to take effect.

00:23:26.620 --> 00:23:28.140
Step two.

00:23:28.140 --> 00:23:31.780
No, I've just skimmed it so far, so I haven't even started yet.

00:23:31.780 --> 00:23:32.600
Well, what's a book?

00:23:32.600 --> 00:23:33.240
Yeah, very quick.

00:23:33.240 --> 00:23:33.980
What's your interest?

00:23:33.980 --> 00:23:37.980
It was printed a long time ago before we had e-books.

00:23:37.980 --> 00:23:39.400
Is it one of those things on paper?

00:23:39.400 --> 00:23:42.080
It's like a tablet, but it doesn't run out of batteries?

00:23:42.080 --> 00:23:42.900
Is that what you're telling me?

00:23:42.900 --> 00:23:47.200
I've got another book author harassing me about physical books.

00:23:47.200 --> 00:23:47.880
How about you, Matt?

00:23:47.880 --> 00:23:49.520
You got any books lined up?

00:23:49.940 --> 00:23:52.160
I'm working on revamping my Pandas one.

00:23:52.160 --> 00:23:56.460
So big demand for Pandas and I want to update mine to the latest version.

00:23:56.460 --> 00:24:00.040
So it's .17 and that's a couple years out.

00:24:00.040 --> 00:24:01.400
Sure, very cool.

00:24:01.400 --> 00:24:05.680
Oh yeah, and we also have some news about maybe a course coming out from you.

00:24:05.680 --> 00:24:10.380
We'll leave that as a teaser, but I think a video course maybe in the near future.

00:24:10.380 --> 00:24:11.560
Yeah, yeah.

00:24:11.560 --> 00:24:12.420
Maybe.

00:24:12.420 --> 00:24:13.240
I don't know.

00:24:13.240 --> 00:24:13.920
We'll have to see.

00:24:13.920 --> 00:24:15.720
We'll have to see if we can get our act together.

00:24:15.720 --> 00:24:16.360
Awesome.

00:24:16.360 --> 00:24:16.720
All right.

00:24:16.720 --> 00:24:20.140
Well, Matt, thank you for joining us and dropping in on this podcast.

00:24:20.140 --> 00:24:21.520
And Brian, thank you as always.

00:24:21.520 --> 00:24:22.440
Yeah, thanks.

00:24:22.440 --> 00:24:22.900
My pleasure.

00:24:22.900 --> 00:24:23.360
Thank you.

00:24:23.360 --> 00:24:23.680
Yep.

00:24:23.680 --> 00:24:24.100
Bye, guys.

00:24:24.100 --> 00:24:24.520
Bye.

00:24:26.620 --> 00:24:28.400
Thank you for listening to Python Bytes.

00:24:28.400 --> 00:24:30.980
Follow the show on Twitter via at Python Bytes.

00:24:30.980 --> 00:24:33.860
That's Python Bytes as in B-Y-T-E-S.

00:24:33.860 --> 00:24:37.300
And get the full show notes at pythonbytes.fm.

00:24:37.300 --> 00:24:41.640
If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

00:24:41.640 --> 00:24:44.320
We're always on the lookout for sharing something cool.

00:24:44.320 --> 00:24:47.720
On behalf of myself and Brian Okken, this is Michael Kennedy.

00:24:47.720 --> 00:24:51.360
Thank you for listening and sharing this podcast with your friends and colleagues.

