WEBVTT

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

00:00:05.340 --> 00:00:09.820
This is episode 57, recorded December 19th, 2017.

00:00:09.820 --> 00:00:10.900
I'm Michael Kennedy.

00:00:10.900 --> 00:00:11.820
And I'm Brian Okken.

00:00:11.820 --> 00:00:14.200
And we have a bunch of really cool stuff to share with you.

00:00:14.200 --> 00:00:20.580
As always, we've been looking through all of the news sources and finding all the Python goodies for you.

00:00:20.580 --> 00:00:22.540
Brian, what's the first goodie that you found?

00:00:22.540 --> 00:00:27.440
Anthony Shaw, or I know him as Tony, has at work on GitHub.

00:00:27.440 --> 00:00:29.740
I like his handle, Tony Maloney.

00:00:30.380 --> 00:00:33.660
But he has been working on a tool called Retox.

00:00:33.660 --> 00:00:38.120
And this is a tool you can really run anything with it.

00:00:38.120 --> 00:00:41.940
But the original intent is to run your tests.

00:00:41.940 --> 00:00:48.640
What Tox does is a tool that will run your setup if you have packages.

00:00:48.640 --> 00:00:52.320
And you can turn that off if you don't want the setup to get tested.

00:00:52.320 --> 00:00:55.800
But it'll test your setup and then run it in different environments.

00:00:55.800 --> 00:00:59.480
And the typical example is running multiple Python versions.

00:00:59.480 --> 00:01:05.080
Running all your tests in multiple Python or multiple library versions to make sure all your tests pass.

00:01:05.840 --> 00:01:11.940
And there is a Detox version that can distribute that across processors.

00:01:11.940 --> 00:01:18.500
Can speed it up two to three times or two to four times faster or more if you run it on distributed processors.

00:01:18.500 --> 00:01:23.760
Or if you spent like, what, $15,000 on a new iMac Pro and got 18 cores?

00:01:23.760 --> 00:01:24.980
Yeah, yeah.

00:01:24.980 --> 00:01:27.940
You could be 18 times faster or 16 or something.

00:01:27.940 --> 00:01:38.920
Anthony put together Retox, which does all this, but also does it with a nice GUI so you can watch your tests run, which is really kind of cool.

00:01:38.920 --> 00:01:48.500
And he did it for Python 2 at first and then very quickly within a week, ported it to Python 3 with some problems along the way.

00:01:48.500 --> 00:01:50.060
But he worked through them, which is nice.

00:01:50.060 --> 00:01:50.700
Yeah, well done.

00:01:50.700 --> 00:01:53.880
It also has the cool capability of watching a directory.

00:01:53.880 --> 00:02:01.000
So you can have this GUI sitting up on a monitor somewhere if you've got a couple monitors or in the corner of your window.

00:02:01.280 --> 00:02:12.160
And then it'll watch, you can have it watch your source code and when you, as you, as you save changes, it tests everything on multiple versions of Python or multiple hardware or whatever you want to do.

00:02:12.160 --> 00:02:13.380
Yeah, that's really, really cool.

00:02:13.380 --> 00:02:13.680
Very cool.

00:02:13.680 --> 00:02:15.660
You know, I'll just describe kind of what it looks like.

00:02:15.660 --> 00:02:24.140
So you run it in terminal or command prompt and you get like an ANSI art type of interactive thing.

00:02:24.180 --> 00:02:33.840
And it shows you different columns for the different tests that are all running like Python 2.7, Python 3.6, Lint, PyLint, all these things running in parallel and their status.

00:02:33.840 --> 00:02:34.580
It's pretty cool, right?

00:02:34.580 --> 00:02:34.960
Yeah.

00:02:34.960 --> 00:02:41.320
And one of the things I was trying to do this morning, getting a chance to quite get it done with meetings and all.

00:02:41.320 --> 00:02:51.280
But instead of running Python 2 versus 3 and stuff, what I'm going to use it for is running the same set of tests with the same Python, but against different instruments.

00:02:51.640 --> 00:02:54.720
So I can run across multiple hardware.

00:02:54.720 --> 00:02:55.280
That's cool.

00:02:55.280 --> 00:03:02.920
So you're parallelizing the same code running, but against, you're parallelizing the hardware, not the versions of Python.

00:03:02.920 --> 00:03:03.400
Yeah.

00:03:03.400 --> 00:03:04.280
Yeah, that's pretty awesome.

00:03:04.280 --> 00:03:04.800
That'll be good.

00:03:04.800 --> 00:03:05.380
Yeah, that'll be good.

00:03:05.380 --> 00:03:14.340
So I thought this episode, I'd talk about some of the tools that I've been using for a little while that I really enjoy, but just haven't thought to bring up on the show.

00:03:14.340 --> 00:03:20.460
So the first one I want to talk about is a database management tool for MongoDB called, it used to be called Robo Mongo.

00:03:20.460 --> 00:03:25.540
It got bought by a company, which is an interesting story in and of itself, by a company called 3T.

00:03:25.540 --> 00:03:29.640
And so now it's Robo 3T, but in my heart, it will always be Robo Mongo.

00:03:29.900 --> 00:03:34.920
Anyway, what this thing is, is a shell for MongoDB that you type.

00:03:34.920 --> 00:03:40.680
So a command line type of interaction with it, but all the results appear as a GUI result.

00:03:40.680 --> 00:03:51.600
So you have this kind of part where you type in and you run commands against Mongo, but all the results show up in maybe a tree view, or you can right click and interact with them once the results come back and stuff.

00:03:51.660 --> 00:03:57.780
So it's really, really nice if you're doing anything with MongoDB, runs on all the platforms, check it out, Robo 3T.

00:03:57.780 --> 00:03:59.580
Nice way to visualize your database.

00:03:59.580 --> 00:04:00.120
That's cool.

00:04:00.120 --> 00:04:07.680
Yeah, it's one of the best, like simple visual interactions with databases because the majority of what you do is still the CLI.

00:04:07.680 --> 00:04:09.720
It's still the straight interface for working with it.

00:04:09.720 --> 00:04:13.780
But all the results that come out of that interaction are GUI based, which I think is cool.

00:04:14.060 --> 00:04:16.980
It's also interesting in an open source way.

00:04:16.980 --> 00:04:22.680
On one hand, it's number 34 most popular repository on GitHub, which is cool.

00:04:22.680 --> 00:04:31.220
It's built with QT, which makes it look like a really nice cross-platform app, which you could build out with PySide or PyQt, I think, and get the same looking app.

00:04:31.220 --> 00:04:32.920
So that's also a really interesting example.

00:04:32.920 --> 00:04:37.700
And it was an open source project that was started somewhere in Eastern Europe.

00:04:37.700 --> 00:04:38.720
I don't remember where.

00:04:38.720 --> 00:04:39.940
It became really successful.

00:04:39.940 --> 00:04:41.320
And this other company bought it.

00:04:41.320 --> 00:04:46.540
And so here's also an interesting business model around open source stuff.

00:04:46.540 --> 00:04:46.840
Yeah.

00:04:46.840 --> 00:04:47.200
Cool.

00:04:47.200 --> 00:04:50.440
So anyway, if you're doing anything with MongoDB, check out Robo Mongo.

00:04:50.440 --> 00:04:51.000
Cool.

00:04:51.000 --> 00:04:58.600
Sometimes, we talked about in the new version of Django, you don't have to do regular expressions anymore for...

00:04:58.600 --> 00:04:59.540
For the routes, right?

00:04:59.540 --> 00:05:01.960
For the route definitions, which I think is a positive thing for sure.

00:05:01.960 --> 00:05:02.740
Yeah, definitely.

00:05:02.740 --> 00:05:08.160
But there's definitely some times where I've been using regular expressions for as long as I've been programming, almost.

00:05:08.160 --> 00:05:09.480
So programming's always been hard.

00:05:09.480 --> 00:05:11.020
Yeah.

00:05:11.020 --> 00:05:11.140
Yeah.

00:05:11.140 --> 00:05:11.820
Yeah.

00:05:11.820 --> 00:05:18.220
Shortly into my CS program, I got thrown a Perl book and said, learn this.

00:05:18.220 --> 00:05:19.320
So yeah.

00:05:19.320 --> 00:05:27.480
Anyway, there's a couple articles that came out recently that I thought were really good for people that need to get a handle on regular expressions quickly.

00:05:27.960 --> 00:05:31.540
And one of them is regular expressions practical guide.

00:05:31.540 --> 00:05:40.900
And it's a kind of a nice article that talks through using the RE package to do things like parse email addresses and phone numbers and URLs.

00:05:41.800 --> 00:05:44.000
And those are good examples.

00:05:44.000 --> 00:05:47.220
Even if you don't have to do that, everybody knows what those look like.

00:05:47.220 --> 00:05:51.440
So it's good to sort of learn some of the regular expressions with that.

00:05:51.440 --> 00:05:51.700
Yeah.

00:05:51.760 --> 00:05:54.040
I really like the example driven approach as well.

00:05:54.040 --> 00:05:57.620
Like, here's how you match a bunch of different things you might want to.

00:05:57.620 --> 00:06:06.220
And also the fact that it's using the Python libraries and not just here's a random regular expression means it's really quick to just drop in directly, which is cool.

00:06:06.360 --> 00:06:11.340
And then there's another article called Regular Expressions for Data Scientists that do some of this.

00:06:11.340 --> 00:06:18.980
But then also it's mostly focused around parsing text, of course, with regular expressions.

00:06:18.980 --> 00:06:26.040
But it's also a good intro and it dives a little bit deeper into find all and search.

00:06:26.040 --> 00:06:30.260
And so I think check both those out if you want to beef up on regular expressions.

00:06:30.260 --> 00:06:31.120
Yeah, that's really cool.

00:06:31.120 --> 00:06:31.480
Nice.

00:06:31.480 --> 00:06:35.900
I like the motivational introduction for the data science one.

00:06:36.400 --> 00:06:40.960
Sometimes, you know, this might include searching massive corpus of text.

00:06:40.960 --> 00:06:46.560
For example, suppose you're asked to figure out who's been emailing whom in a scandal of the Panama Papers.

00:06:46.560 --> 00:06:49.240
That's 11.5 million documents.

00:06:49.240 --> 00:06:50.320
We need regular expressions.

00:06:50.320 --> 00:06:50.860
Let's go.

00:06:50.860 --> 00:06:51.720
Yeah, definitely.

00:06:51.720 --> 00:06:53.140
Yeah, very exciting.

00:06:53.140 --> 00:06:53.700
Very exciting.

00:06:53.700 --> 00:06:54.500
Cool.

00:06:54.500 --> 00:06:58.400
So before we go on, let me just tell you about the sponsor for this week's episode.

00:06:58.400 --> 00:07:00.000
That is DigitalOcean.

00:07:00.000 --> 00:07:06.100
Thank you, DigitalOcean, for sponsoring the show as they are, I would say, the major sponsor for the show.

00:07:06.100 --> 00:07:07.660
They definitely sponsor it more than anyone else.

00:07:07.660 --> 00:07:12.080
And with good reason, they have really, really cool things going on over there.

00:07:12.080 --> 00:07:19.680
You know, there's a lot of places you can get your cloud computing resources, but a lot of them are overly complicated, overly expensive, and so on.

00:07:19.680 --> 00:07:25.220
With DigitalOcean, go over there, quickly set up a server, set up some storage, link them together.

00:07:25.440 --> 00:07:26.380
It's really wonderful.

00:07:26.380 --> 00:07:32.700
So this site's website's running on DigitalOcean, among a bunch of other things that I'm running as well.

00:07:32.700 --> 00:07:35.020
So definitely a great place to check out.

00:07:35.020 --> 00:07:40.120
And you can get started by going to pythonbytes.fm/DigitalOcean.

00:07:40.120 --> 00:07:47.760
So keeping with my theme of things that I want to talk about that I've been using and really enjoying but haven't bothered to bring up on the show,

00:07:47.760 --> 00:07:53.360
to complement the other side of the story with the MongoDB thing is MongoEngine.

00:07:53.360 --> 00:07:55.420
So you've heard of SQLAlchemy, right, Brian?

00:07:55.420 --> 00:07:56.140
Yeah, definitely.

00:07:56.140 --> 00:08:01.160
Yeah, so that's probably the most popular way in Python to talk to relational databases.

00:08:01.160 --> 00:08:05.880
Well, the MongoDB equivalent of SQLAlchemy is this thing called MongoEngine.

00:08:05.880 --> 00:08:12.540
There's a handful of these so-called document, object document mappers, because you don't have a relational.

00:08:12.540 --> 00:08:14.460
So it's not an ORM, it's an ODM.

00:08:15.000 --> 00:08:20.800
And anyway, there's a handful of these for MongoDB, but this one really is quite needed.

00:08:20.800 --> 00:08:24.720
Let's you take a class, derive from a base class, and map it into MongoDB.

00:08:24.720 --> 00:08:28.100
And the way you work with it is very similar to Django's ORM, actually.

00:08:28.100 --> 00:08:32.900
You map a class, you create an instance of it, you call save, you can do queries on it, all sorts of stuff.

00:08:32.900 --> 00:08:38.680
But leveraging the hierarchical document TV nature of MongoDB, it also adds new features.

00:08:38.680 --> 00:08:44.320
Like, MongoDB doesn't really have schemas in general, like, they're starting to add some of these features.

00:08:44.320 --> 00:08:47.620
But there's no schema definition, it's just whatever you put in there.

00:08:47.620 --> 00:08:53.200
With MongoEngine, you have a schema that matches your classes, so you have some reliable data structure.

00:08:53.200 --> 00:08:59.520
MongoDB has no concept of required fields or constraints, like this number must be between 10 and 1,000.

00:08:59.520 --> 00:09:03.300
But MongoEngine does, relationships, all sorts of cool stuff.

00:09:03.300 --> 00:09:08.240
So it really provides a lot of nice structure around working with a NoSQL schema-less database.

00:09:08.420 --> 00:09:09.040
Oh, that's nice.

00:09:09.040 --> 00:09:10.540
Yeah, definitely check that out.

00:09:10.540 --> 00:09:12.160
Yeah, so I've found this to be super helpful.

00:09:12.160 --> 00:09:15.960
Like, actually, a lot of my sites are implemented, including Python Bytes, for example.

00:09:15.960 --> 00:09:23.640
The one thing that's a little bit of a pain is the deserialization speed is not awesome.

00:09:23.640 --> 00:09:28.300
So if you retrieve 100,000 records from MongoDB, that's really fast, probably.

00:09:28.300 --> 00:09:31.760
But then it'll drag on, turning those into MongoEngine documents.

00:09:31.760 --> 00:09:34.520
But if you're getting 50 or 100, it's totally fine.

00:09:34.520 --> 00:09:37.540
For whatever reason, it's just not that fast deserialized and stuff.

00:09:37.660 --> 00:09:38.840
And usually it's plenty fast.

00:09:38.840 --> 00:09:42.100
But if you do it 100,000 times, it turns out to start to show off.

00:09:42.100 --> 00:09:42.360
Okay.

00:09:42.360 --> 00:09:42.640
Yeah.

00:09:42.640 --> 00:09:43.080
All right.

00:09:43.080 --> 00:09:43.800
What you got first, next?

00:09:43.800 --> 00:09:45.020
Another Pretty Printer.

00:09:45.020 --> 00:09:48.080
So this is, I guess it's called Pretty Printer.

00:09:48.080 --> 00:09:48.740
Yeah.

00:09:48.740 --> 00:09:51.660
An article called Introducing Pretty Printer for Python.

00:09:52.280 --> 00:09:53.760
I think it's an extensible one.

00:09:53.760 --> 00:09:54.520
It's kind of nice.

00:09:54.520 --> 00:09:58.800
So somebody took, it's 3.6, or three, six and above only.

00:09:58.800 --> 00:10:04.720
But somebody was taking a look at all the different ways to Pretty Printer their output for debugging your code.

00:10:04.720 --> 00:10:06.640
And it wasn't really happy with them.

00:10:06.640 --> 00:10:08.020
So added yet another.

00:10:08.500 --> 00:10:10.280
But this is kind of extensible and cool.

00:10:10.280 --> 00:10:20.040
So you can add on, if you have a particular way you want to print your classes or your calls to different functions, you can customize that.

00:10:20.420 --> 00:10:22.520
And it's a pretty simple interface.

00:10:22.520 --> 00:10:23.040
And I like it.

00:10:23.040 --> 00:10:23.200
Yeah.

00:10:23.200 --> 00:10:23.720
It's really nice.

00:10:23.720 --> 00:10:28.600
So if you're in, say, the Python REPL, you can ask it to print out some stuff.

00:10:28.600 --> 00:10:35.920
And it'll actually do things like format the dictionaries according to PEP 8 with the line breaks and indentation.

00:10:35.920 --> 00:10:38.340
It'll colorize all the values.

00:10:38.560 --> 00:10:39.840
Like the keys will be one color.

00:10:39.840 --> 00:10:42.060
The values will be another.

00:10:42.060 --> 00:10:43.200
Things like that.

00:10:43.200 --> 00:10:44.600
So it really does.

00:10:44.600 --> 00:10:45.880
It is really nice like that.

00:10:45.880 --> 00:10:47.360
The colorizing is very nice.

00:10:47.360 --> 00:10:48.100
That's pretty cool.

00:10:48.100 --> 00:10:48.380
Yeah.

00:10:48.380 --> 00:10:48.880
I would say that.

00:10:48.880 --> 00:10:56.100
The colorizing and also the reformatting for human readable parts is quite nice as well.

00:10:56.100 --> 00:10:59.860
So it's very nice and has a nice declarative API as well.

00:10:59.860 --> 00:11:01.680
So you can even extend it, right?

00:11:01.680 --> 00:11:07.080
There's an example in there to be able to extend your call with comments even.

00:11:08.020 --> 00:11:11.200
So let me ask you a question.

00:11:11.200 --> 00:11:14.100
What do you think the most popular database in the world is?

00:11:14.100 --> 00:11:14.600
MySQL.

00:11:14.600 --> 00:11:16.040
MySQL is definitely a good one.

00:11:16.040 --> 00:11:17.480
I'm going to say Excel.

00:11:17.480 --> 00:11:20.260
At least it turns them out of data.

00:11:20.260 --> 00:11:23.500
The number of people that like create new quote databases.

00:11:23.500 --> 00:11:32.580
Like Excel is this weird thing that people who don't quite know programming or technology use it to more or less play the same role, right?

00:11:32.580 --> 00:11:33.320
You've got relationships.

00:11:33.320 --> 00:11:35.120
You've got formulas and whatnot.

00:11:35.820 --> 00:11:40.980
So Excel is really super important in the business world all over the place.

00:11:40.980 --> 00:11:51.700
Well, it so happens that Microsoft is considering replacing the macro scripting language for Excel that is built into it, VBA, with Python.

00:11:51.700 --> 00:11:52.040
Yes.

00:11:52.040 --> 00:11:53.100
That would be very nice.

00:11:53.220 --> 00:11:56.840
So on one hand, I'm like, whee, I don't really want to program Excel, right?

00:11:56.840 --> 00:11:58.880
It doesn't make me super excited or super happy.

00:11:59.040 --> 00:12:06.960
On the other, look at what the adoption of Python in the data science space has done for Python in general.

00:12:06.960 --> 00:12:10.160
It's really, really complemented it and made it a better place.

00:12:10.160 --> 00:12:14.880
I think that's what would happen if Python became the main scripting language of Excel as well.

00:12:14.880 --> 00:12:17.940
There's all these people who are not really working in this space now.

00:12:18.020 --> 00:12:22.540
All of a sudden, they'd be super interested and contributing things that who knows what they would actually come up with.

00:12:22.540 --> 00:12:25.240
I'm imagining this is actually pretty cool.

00:12:25.500 --> 00:12:40.580
I'm imagining a manager working with a spreadsheet and wanting to add some macro capabilities and getting a little bit too deep into it and getting a little lost, grabbing a developer and saying, hey, can you help me with this?

00:12:40.580 --> 00:12:45.060
And right now, if it was me, I'd say, no, you're on your own.

00:12:45.060 --> 00:12:45.960
I don't want to do that.

00:12:46.320 --> 00:12:48.420
I would hide under a desk like, no, Michael's busy.

00:12:48.420 --> 00:12:49.920
Michael can't talk right now.

00:12:49.920 --> 00:12:51.520
He's looking for someone to work on PVA.

00:12:51.520 --> 00:12:52.080
Stay away.

00:12:52.080 --> 00:12:55.500
But if it's a Python interface there, yeah, I'd help out.

00:12:55.500 --> 00:13:01.940
So I think the interaction between developers and managers would increase dramatically if Python was in Excel.

00:13:01.940 --> 00:13:03.300
Yeah, I think it would be super cool.

00:13:03.300 --> 00:13:05.980
Who knows what the chances of this actually happening are.

00:13:05.980 --> 00:13:10.840
I tried to get Python into Windows because, you know, it doesn't ship with Windows.

00:13:12.060 --> 00:13:22.300
So Microsoft has this place called User Voice where you can like, but maybe it's not even a Microsoft thing, but they use User Voice, which lets you vote on features and requests and things like that.

00:13:22.300 --> 00:13:29.260
So I actually got over a thousand people to vote for shipping Python 3 with Windows 10 before it actually came out, but no dice.

00:13:29.260 --> 00:13:36.340
However, they did put Python into SQL Server so you can do in-process machine learning against your data.

00:13:36.340 --> 00:13:41.840
So there's one example of them doing this, and if they'll do it for SQL Server, they may well do it for Excel, which would be awesome.

00:13:42.360 --> 00:13:45.680
So everyone listening can have a voice on this.

00:13:45.680 --> 00:13:54.560
If you go there, click the link, upvote the item, and there's a survey you can fill out and tell them, Python 3, please, we'll take more of that.

00:13:54.560 --> 00:13:55.400
That'd be awesome.

00:13:55.400 --> 00:13:55.820
Yeah.

00:13:55.820 --> 00:14:01.940
So if this sounds cool to you, be sure to go there, at least upvote it so that they know this is something we all want.

00:14:01.940 --> 00:14:03.000
And call your congressman.

00:14:03.000 --> 00:14:03.620
That's right.

00:14:03.760 --> 00:14:07.580
No, that was net neutrality, which didn't really help so much.

00:14:07.580 --> 00:14:09.360
But this might, this might, so that's awesome.

00:14:09.360 --> 00:14:12.480
All right, well, that's our items for this week.

00:14:12.480 --> 00:14:13.700
How about you?

00:14:13.700 --> 00:14:14.440
Any personal news?

00:14:14.440 --> 00:14:16.960
We've been getting over, still getting over being sick.

00:14:16.960 --> 00:14:20.160
So we have a tree up now, but we haven't decorated it.

00:14:20.160 --> 00:14:22.280
So that's our decorating for Christmas.

00:14:22.280 --> 00:14:22.860
That's awesome.

00:14:22.860 --> 00:14:24.080
That'll be a fun, fun thing.

00:14:24.080 --> 00:14:26.420
Kids going to be home from school pretty soon?

00:14:26.420 --> 00:14:27.320
They're all home now.

00:14:27.320 --> 00:14:28.700
So that's fun.

00:14:28.840 --> 00:14:30.720
So work is super productive these days.

00:14:30.720 --> 00:14:33.840
Yeah, I can actually get to work at a decent time.

00:14:33.840 --> 00:14:34.740
So that's good.

00:14:34.740 --> 00:14:35.100
Cool.

00:14:35.100 --> 00:14:36.100
All right.

00:14:36.100 --> 00:14:39.680
Well, for me, I have a webcast that I'm doing.

00:14:39.680 --> 00:14:41.680
And I guess one more MongoDB thing.

00:14:41.680 --> 00:14:46.480
So I'm doing a webcast that I call Let's Build Something in MongoDB and Python.

00:14:46.480 --> 00:14:48.040
I don't have to click the link.

00:14:48.040 --> 00:14:48.400
I don't remember.

00:14:48.400 --> 00:14:49.260
I think it's February.

00:14:49.260 --> 00:14:52.300
It is February 22nd.

00:14:52.300 --> 00:14:56.880
So there's a link at the bottom of the show notes that if you're interested, you can come attend the webcast.

00:14:56.880 --> 00:14:58.060
It's just free.

00:14:58.060 --> 00:14:58.720
It might be fun.

00:14:58.840 --> 00:14:59.400
I'll definitely go.

00:14:59.400 --> 00:15:03.060
So do you have like an intro to Mongo also?

00:15:03.060 --> 00:15:04.360
I do have an intro to Mongo.

00:15:04.360 --> 00:15:05.460
A free one, actually.

00:15:05.460 --> 00:15:07.760
It's at freemongodbcourse.com.

00:15:07.760 --> 00:15:08.080
Okay.

00:15:08.080 --> 00:15:09.200
I just thought I brought that.

00:15:09.200 --> 00:15:09.820
Yeah.

00:15:09.820 --> 00:15:13.180
And it uses MongoEngine and it uses RoboMongo.

00:15:13.180 --> 00:15:14.020
How about that?

00:15:14.020 --> 00:15:14.420
Nice.

00:15:14.420 --> 00:15:15.580
But it doesn't use Excel.

00:15:15.580 --> 00:15:16.200
Good.

00:15:16.200 --> 00:15:18.380
All right.

00:15:18.380 --> 00:15:21.820
Well, Brian, thanks so much for finding all these things and sharing with everyone.

00:15:21.820 --> 00:15:22.600
Yeah, thanks.

00:15:22.600 --> 00:15:25.600
Thank you for listening to Python Bytes.

00:15:25.600 --> 00:15:28.160
Follow the show on Twitter via at Python Bytes.

00:15:28.280 --> 00:15:31.060
That's Python Bytes as in B-Y-T-E-S.

00:15:31.060 --> 00:15:34.460
And get the full show notes at pythonbytes.fm.

00:15:34.460 --> 00:15:38.820
If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

00:15:38.820 --> 00:15:41.520
We're always on the lookout for sharing something cool.

00:15:42.020 --> 00:15:44.920
On behalf of myself and Brian Okken, this is Michael Kennedy.

00:15:44.920 --> 00:15:48.520
Thank you for listening and sharing this podcast with your friends and colleagues.

