WEBVTT

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

00:00:05.560 --> 00:00:10.760
This is episode 120, recorded February 28th, 2019.

00:00:10.760 --> 00:00:11.840
I'm Michael Kennedy.

00:00:11.840 --> 00:00:12.660
And I'm Brian Okken.

00:00:12.660 --> 00:00:14.980
And this episode is sponsored by DigitalOcean.

00:00:14.980 --> 00:00:17.260
Check them out at pythonbytes.fm/digitalocean.

00:00:17.260 --> 00:00:20.920
Lots of good stuff with that URL, but more about that later.

00:00:20.920 --> 00:00:22.900
Brian, welcome back to the show, man.

00:00:22.900 --> 00:00:24.680
Oh, thanks. Nice episode last week.

00:00:24.680 --> 00:00:29.020
Thanks, yeah. We went to Seattle and we all had fun and sadly you were knocked out, but understandably.

00:00:29.020 --> 00:00:32.960
Man, I sent it to everybody I knew, my daughter and a whole bunch of people and said,

00:00:32.960 --> 00:00:37.780
at least listen to the first bit of it because this is why I enjoy working with Michael.

00:00:37.780 --> 00:00:41.500
It was so nice of you to do a shout out to me. That was nice.

00:00:41.500 --> 00:00:43.320
Thanks. Yeah, that's really great. Yeah, you're welcome.

00:00:43.320 --> 00:00:46.120
It's the least I could do. Wish you were there, but that's okay.

00:00:46.120 --> 00:00:50.880
Speaking of people who were almost there, at least was at the conference who I got to spend a lot of time with,

00:00:50.880 --> 00:00:54.160
but wasn't actually at that live recording, Nina Zinkarenko.

00:00:54.160 --> 00:00:57.720
How about that? That's our first, the source of our first item, right? She is?

00:00:57.720 --> 00:01:02.800
Yes. How could I resist? She put together this wonderful resource for people.

00:01:02.800 --> 00:01:06.980
So what I'm talking about is the ultimate guide to memorable tech talks.

00:01:07.480 --> 00:01:26.860
She said it was going to be a blog post and it turned into what she calls a book, but it's a seven articles on Medium and it's a seven part series that she covers things like choosing a topic, writing a talk proposal, tools that she uses, planning, writing it, writing your talk out, practicing it and delivering the talk.

00:01:27.100 --> 00:01:34.360
And it's a phenomenal resource.

00:01:34.360 --> 00:01:39.520
of it. But one of the things, I mean, it speaks right to me because I got into podcasting partly

00:01:39.520 --> 00:01:45.320
to get better about this public speaking thing, and it's difficult. And especially for, I think,

00:01:45.320 --> 00:01:52.200
tool nerds and introverts and stuff like that, jumping into the tools and in the little details,

00:01:52.200 --> 00:01:56.660
you can lose sight of stuff. So one of the things she noticed, she quote from the article is,

00:01:56.660 --> 00:02:02.420
I noticed I'd procrastinate on making the slides look good instead of focusing my time on making

00:02:02.420 --> 00:02:08.040
quality content. It's easy to get sucked into that, yeah. Yeah, totally. When I should have been,

00:02:08.040 --> 00:02:14.640
like, I've given two talks and many, many talks informally at work and stuff, but two conferences.

00:02:14.640 --> 00:02:21.640
And I spent so much time just tweaking the different slides instead of practicing it and making sure I

00:02:21.640 --> 00:02:27.180
understand it well enough to even throw the slides away and just do the talk. And so I think focusing

00:02:27.180 --> 00:02:33.940
on planning and leaving all that, the time enough to get all that. This is actually the series that I

00:02:33.940 --> 00:02:39.820
wish I had when I started getting into trying to do talks because either you have out there, there's

00:02:39.820 --> 00:02:45.160
either stuff that doesn't have enough information, it's just a quick gloss over, or it focuses on one

00:02:45.160 --> 00:02:51.360
aspect. Or on the other end, you've got courses and books. This is just a series of blog posts that you can,

00:02:51.360 --> 00:02:56.180
you know, staple together with one staple. So yeah, it's good. Not the big, heavy, super duper,

00:02:56.180 --> 00:03:01.780
like binder staple, but like a regular one, right? Like the red one from Office Space. Yeah,

00:03:01.780 --> 00:03:06.720
yeah. Just one of those. Yeah. Now this is a great series and nice work, Nina. Good pick,

00:03:06.720 --> 00:03:11.560
Brian. I think it'll help a lot of people. I like that it's writing, you know, she covers writing the

00:03:11.560 --> 00:03:16.320
talk proposal because it's great to get into public speaking, but you have to get accepted to get into

00:03:16.320 --> 00:03:21.300
public speaking a lot of times. Although, although at the bigger conferences, say PyCon,

00:03:21.300 --> 00:03:24.520
you can always do an open space and that's kind of like a dip your toe in the water because you

00:03:24.520 --> 00:03:29.200
don't have to lead the whole conversation, but you kind of are sort of leading it in spirit.

00:03:29.200 --> 00:03:34.320
Yeah. And then you can go through all of these steps for just to get ready. And you only have

00:03:34.320 --> 00:03:37.760
to be up there for, I don't know how long the lightning talks are, but they're not long.

00:03:37.760 --> 00:03:41.740
Yeah, for sure. Yeah. Lightning talks are five minutes. Open spaces, I think are 25,

00:03:41.740 --> 00:03:45.000
but you don't do the talking the whole time. We're definitely going to, you know,

00:03:45.000 --> 00:03:47.900
you spoke about the live recording. We're definitely going to do more live recordings

00:03:47.900 --> 00:03:50.780
at the main PyCon as some open spaces, if nothing else.

00:03:50.780 --> 00:03:53.800
Yeah, definitely. I wanted to interview a bunch of people for stuff.

00:03:53.800 --> 00:03:58.040
So bringing the mics. Okay, super. So the next one is something I've been digging into lately.

00:03:58.040 --> 00:03:59.900
Have you done anything with Kubernetes?

00:03:59.900 --> 00:04:00.820
No.

00:04:00.820 --> 00:04:02.580
Let me take a step back. Have you done anything with Docker?

00:04:02.580 --> 00:04:03.060
No.

00:04:03.060 --> 00:04:07.840
So these two things are sort of stacked on top of each other and they often get complicated. So

00:04:07.840 --> 00:04:12.540
Docker is a little bit of a complicated thing if you haven't done a lot of like deployment and

00:04:12.540 --> 00:04:18.240
DevOps type stuff because it's all about configuring Linux isolated machines, if you will. And then

00:04:18.240 --> 00:04:23.760
in order to actually use them properly, really, with scale out and failover and clusters and

00:04:23.760 --> 00:04:28.040
connections between them and all that, like a Docker container for your web app, one for the database,

00:04:28.040 --> 00:04:31.200
you really need some kind of orchestration, which is Kubernetes.

00:04:31.920 --> 00:04:37.960
So there's a ton to learn about all this stuff. Luckily, Michael Herman from testdriven.io,

00:04:37.960 --> 00:04:44.320
formerly of real Python, I did a really nice write up here. So he has a course on testdriven.io.

00:04:44.320 --> 00:04:52.300
And this is like an extracted long example tutorial to get started with Flask on Kubernetes.

00:04:52.300 --> 00:04:54.440
Wow. That actually sounds neat.

00:04:54.440 --> 00:04:57.660
Yeah, it's actually pretty approachable. I mean, I said it's a complicated topic.

00:04:57.980 --> 00:05:02.420
He really lays out the core ideas. And you know, if you ask Pocket, it says reading time

00:05:02.420 --> 00:05:07.000
is 16 minutes. So it's pretty hefty, but it's not book size. It's not super, super long.

00:05:07.000 --> 00:05:11.480
Of course, the little steps that it says, like take more than, you know, just one line or whatever,

00:05:11.480 --> 00:05:14.980
right? You got to like, let it configure a cluster or something. So there's a little wait periods,

00:05:14.980 --> 00:05:21.760
but really nice. It talks about how to basically get a Vue.js front end Flask back end app that talks

00:05:21.760 --> 00:05:26.160
to a database, Postgres in particular, up and running on a Kubernetes cluster. So kind of

00:05:26.160 --> 00:05:30.140
microservice style, which is pretty cool. And I'll just run off some of the goals. You guys

00:05:30.140 --> 00:05:34.220
kind of know like what you'll get out of it. So explain what a container and container orchestration

00:05:34.220 --> 00:05:40.100
is. Pros and cons of you using Kubernetes over say things like Docker swarm, all the primitive

00:05:40.100 --> 00:05:45.820
concepts of Kubernetes, node pod service deployment, et cetera, spinning up a Python app, which is

00:05:45.820 --> 00:05:51.260
nice locally with Docker compose. There's a nice little utility called minikube, which lets

00:05:51.260 --> 00:05:58.140
you basically in just a couple of command lines create a Kubernetes cluster pre-configured on

00:05:58.140 --> 00:06:03.260
your machine, which is a super pain. So that's really nice that you can just install that thing

00:06:03.260 --> 00:06:06.160
and have it go and stuff like that. It's really quite nice.

00:06:06.160 --> 00:06:11.840
Oh, I'm definitely going to check this out. Plus, like in 16 minutes, I can now put like 75

00:06:11.840 --> 00:06:13.520
new keywords on my resume.

00:06:13.700 --> 00:06:16.640
Oh yeah. This is dense in buzzword bingo hits.

00:06:16.640 --> 00:06:17.000
Yeah.

00:06:17.000 --> 00:06:23.440
Nice. You and I both picked something that's a little bit on the controversial side of the

00:06:23.440 --> 00:06:26.860
world and open source and the community. You go first.

00:06:26.860 --> 00:06:33.940
Okay. So this is just, I think it's still playing out, but in the end of January, maybe they announced

00:06:33.940 --> 00:06:41.780
it earlier, but on the Travis CI blog, they announced that Travis CI is to join a Dara idea. I don't know.

00:06:41.780 --> 00:06:47.600
Another company, basically they got bought by a company and frankly, I don't really care who owns

00:06:47.600 --> 00:06:57.200
what, but then in February, I started seeing the hashtag Travis alums on Twitter and they looks like,

00:06:57.200 --> 00:07:00.900
I mean, from the outside looking in, it looks like they're laying off a bunch of engineers.

00:07:00.900 --> 00:07:04.940
I don't really know what's going on because they're not really talking about it. There hasn't been

00:07:04.940 --> 00:07:11.160
anything else on the GitHub or the Travis CI blog to say what's going on. So I've used Travis for

00:07:11.160 --> 00:07:16.920
running tests on Python projects. So I wanted to, I thought, you know, I've wanted to do this anyway.

00:07:16.920 --> 00:07:21.780
So now's a good time to start looking at if I've got source code on GitHub, I want to use the,

00:07:21.780 --> 00:07:28.740
and I want to use testing somewhere and it isn't Travis, where would I do it? And so trying right

00:07:28.740 --> 00:07:34.920
now I'm trying to use GitLab and Azure pipelines with the help of some other people to try to get

00:07:34.920 --> 00:07:40.100
those running on a couple of projects, but there's a lot more. I mean, GitHub lists 17 different options

00:07:40.100 --> 00:07:45.360
for continuous integration that you can hook up. So yeah, that's a big deal, right? Like Travis has been

00:07:45.360 --> 00:07:51.880
kind of the go-to plug it into your open source public GitHub repo and just let it turn away and,

00:07:51.880 --> 00:07:54.640
you know, do all the checks on PRs and things like that, right?

00:07:54.640 --> 00:08:01.100
They've claimed that our experience is not going to be different. However, with less engineers, it's,

00:08:01.100 --> 00:08:04.080
I don't know, it seems like it might stagnate and stuff.

00:08:04.440 --> 00:08:10.260
Yeah. Something that you also talked about here is Azure pipelines, Azure build pipelines. And that

00:08:10.260 --> 00:08:13.800
definitely seems like it's getting a lot of traction. I've heard of some major open source

00:08:13.800 --> 00:08:18.220
projects moving over to that either partially or entirely.

00:08:18.220 --> 00:08:23.300
I'm dropping a few links in here. One of the links is a couple of things from Anthony Shaw. Of course,

00:08:23.300 --> 00:08:29.200
it wouldn't be a show without Anthony. One of them is an article that he writes about Azure pipelines

00:08:29.200 --> 00:08:37.400
with Python, by example. And also he's got a, a pytest plugin to help with testing on it, on Azure.

00:08:37.860 --> 00:08:42.520
And then one of the people that's been helping me out is, I'm going to get his name wrong,

00:08:42.520 --> 00:08:48.240
but Anthony's saw tile. So too, sorry, Anthony, but he's got a whole bunch of different Azure

00:08:48.240 --> 00:08:51.820
templates on his GitHub repo that look neat.

00:08:51.820 --> 00:08:57.780
Yeah. Cool. And as far as I understand it, Azure pipelines are free for public repos and things like

00:08:57.780 --> 00:08:59.360
that. So it's, it's, it's interesting.

00:08:59.540 --> 00:09:05.860
All the things I'm going to try are things that have a reasonable free levels for open source

00:09:05.860 --> 00:09:06.400
projects.

00:09:06.400 --> 00:09:09.340
That's kind of an interesting trend that's been going on. There's a lot of things that are

00:09:09.340 --> 00:09:14.600
free for public open source repos, but paid for private stuff. And that's a,

00:09:14.600 --> 00:09:16.460
seemed like a pretty good balance to me.

00:09:16.460 --> 00:09:22.400
Having the GitHub go to allow private repos is interesting. And I'm not, you know, I'm not sure

00:09:22.400 --> 00:09:25.640
what drove the, Travis change, but yeah, anyway.

00:09:25.640 --> 00:09:28.980
Yeah. I'm pretty sure GitHub was pressured by Bitbucket,

00:09:29.100 --> 00:09:33.000
but I don't know anything about the roots of the Travis one. I do have more, a good news

00:09:33.000 --> 00:09:39.060
around digital ocean for you and all the listeners. So they've traditionally had these like high

00:09:39.060 --> 00:09:45.200
compute instances called droplets, they're virtual machines, and they've had memory heavy ones,

00:09:45.200 --> 00:09:52.040
but the memory heavy ones didn't have dedicated CPUs. Like you did it shared with the Veeam host,

00:09:52.040 --> 00:09:58.660
right? So you couldn't be guaranteed of like consistent workloads on that thing. So now they're announcing a

00:09:58.660 --> 00:10:05.120
general purpose droplet that is a blend of dedicated CPUs and a wide range of memory configurations.

00:10:05.120 --> 00:10:11.580
So basically you can get, quite a bit of Ram. I think the lowest one is eight gigs and it goes up

00:10:11.580 --> 00:10:17.420
to either 64, 128 gigs of Ram and a whole bunch of dedicated CPUs. So it's pretty cool. And they

00:10:17.420 --> 00:10:22.940
talk about, you know, some good examples of using it would be like web applications, hosting like an

00:10:22.940 --> 00:10:28.880
e-commerce site where latency matters or, a medium size relational Postgres or, or no SQL like

00:10:28.880 --> 00:10:33.800
MongoDB database. Cause you want your database to be fast, right? Like that's the heart of your app,

00:10:33.800 --> 00:10:38.920
even if you scale the web front end and other sorts of analytics and so on. So you can check that out.

00:10:38.920 --> 00:10:42.960
It's under limited availability, but, you can go and like click a button and say, I want to try

00:10:42.960 --> 00:10:48.360
this. So check them out at pythonbytes.fm/digital ocean. It really supports the show. It

00:10:48.360 --> 00:10:49.240
keeps us going each week.

00:10:49.240 --> 00:10:50.660
Yes. Very cool.

00:10:50.660 --> 00:10:56.960
Yeah. Thanks. So speaking of infrastructure, it's cool to be able to set up your code and your websites

00:10:56.960 --> 00:11:02.400
and all of your infrastructure to run on Linux. And you might even do that on Docker and you might even

00:11:02.400 --> 00:11:08.200
put those Docker containers on Kubernetes. But a lot of us are not using Linux as our dev machine,

00:11:08.200 --> 00:11:12.040
right? A lot of us are using Macs, at least the ones you'll see walking around the conferences.

00:11:12.040 --> 00:11:18.300
So this next item is called a Python server setup for macOS. That's a cool little Apple emoji.

00:11:18.300 --> 00:11:18.820
Nice.

00:11:18.820 --> 00:11:23.220
Yeah. So if you want to run like your Nginx and your uWSGI or your Gunicorn or like

00:11:23.220 --> 00:11:29.600
your production software stack, but you want to run it locally on macOS, here's a little guide on how

00:11:29.600 --> 00:11:34.200
to do that. So it basically takes you through setting up Nginx, having Nginx serve your static assets

00:11:34.200 --> 00:11:38.680
through using Gunicorn and flask, but you could pretty easily swap that out for,

00:11:38.680 --> 00:11:45.260
you know, uWSGI and whatever, whatever else you want to use. And then having Nginx be the

00:11:45.260 --> 00:11:49.900
front end proxy for like a scaled out Gunicorn back end. So it's pretty cool. Now I went through

00:11:49.900 --> 00:11:55.560
this recently and not all the commands are seem to be working, at least on my system. I don't know why,

00:11:55.560 --> 00:12:00.460
what they're going through. Maybe I missed a step, but even if the commands don't all exactly work,

00:12:00.460 --> 00:12:05.600
I think it's still is a pretty good guide and it's on GitHub. So if you find mistakes,

00:12:05.600 --> 00:12:10.020
open an issue. It's not super popular, but I think a lot of people will find it helpful if they,

00:12:10.020 --> 00:12:15.280
they're trying to develop in something closer to their actual configuration.

00:12:15.280 --> 00:12:19.700
Okay. Is this for more for like a, for a development environment sort of thing?

00:12:19.700 --> 00:12:24.060
Yeah, exactly. Cause normally what you do is you get something like waitress or you get some other

00:12:24.060 --> 00:12:32.580
built in like wimpy non-production full Python based web server. And then all the requests go

00:12:32.580 --> 00:12:36.820
through your like flask or pyramid or whatever. But in production, it doesn't work that way. You

00:12:36.820 --> 00:12:41.480
have Nginx doing SSL and doing static assets, and then it only passes the Python requests over.

00:12:41.480 --> 00:12:46.040
And there's just like, there's quite a bit of difference. So if you want to have sort of a QA

00:12:46.040 --> 00:12:48.000
local thing on your Mac, here you go.

00:12:48.120 --> 00:12:49.240
Oh, that's nice. Okay.

00:12:49.240 --> 00:12:50.020
Yeah. Pretty cool.

00:12:50.020 --> 00:12:50.480
Check this out.

00:12:50.480 --> 00:12:51.780
Uh-huh. What do you got for the next one?

00:12:51.780 --> 00:12:58.320
When I started using a command line interface stuff, I used a click. So I did a quick search

00:12:58.320 --> 00:13:04.380
for different ways to build a command line interface. Meaning like if I, not an interactive thing,

00:13:04.380 --> 00:13:09.220
although I know that those are a thing, but just if I want to, if I've got a script that I'm

00:13:09.220 --> 00:13:15.860
writing and I want to take values in, it's parsing the arguments passed into the script or whatever.

00:13:16.120 --> 00:13:21.380
Click is great. I love it. But it's something extra. It's not built into Python yet. It's an

00:13:21.380 --> 00:13:26.120
extra dependency. That's fine for a lot of times. But sometimes you just want to like a couple

00:13:26.120 --> 00:13:31.120
different parameters that somebody could pass in. And so the built-in arg parse is part of the

00:13:31.120 --> 00:13:33.980
standard library. And that would be good to use.

00:13:33.980 --> 00:13:38.860
Yeah, it's cool. And it's better than just going to, you know, sys.argv and going after an array of

00:13:38.860 --> 00:13:40.620
whatever, right? You get a little more help than that.

00:13:40.620 --> 00:13:44.080
Right. I actually didn't realize that arg parse was so easy. So there's,

00:13:44.400 --> 00:13:49.020
Jeff Hale put together an article called Learn Enough Python to Be Useful Arg Parse.

00:13:49.020 --> 00:13:56.280
That's a kind of long title, but it's a tutorial on arg parse. And it's that I couldn't find a good

00:13:56.280 --> 00:14:01.460
intro guide for arg parse when I needed one. So I wrote this article and I got to say, it's a very

00:14:01.460 --> 00:14:06.980
nice, quick introduction. So if you want to throw some arguments on an application, try this.

00:14:07.180 --> 00:14:10.300
It definitely seems like a good idea. There's certainly times where I'm like, you know, I just

00:14:10.300 --> 00:14:15.620
don't feel like going to all the formality. I just need to know basically, did they pass some simple

00:14:15.620 --> 00:14:21.060
thing here? Yes or no. Right. And this is, this is cool, especially for my little proof of concept

00:14:21.060 --> 00:14:26.220
ideas. Yeah. Yeah. So it comes built in, which is, yeah, really nice. Nothing to install.

00:14:26.920 --> 00:14:30.640
So you don't want to naturally take on click and make people go through virtual environments

00:14:30.640 --> 00:14:35.900
and pip and all that. If literally this is the only, that would be the only thing, right? So

00:14:35.900 --> 00:14:39.660
here's another good chance to not do that. Oh yeah. That's a great idea is if you don't already

00:14:39.660 --> 00:14:44.740
have any other dependencies than, yeah, using this. Exactly. Cause that'll definitely increase the

00:14:44.740 --> 00:14:50.320
challenge of using your code. All right. So, you got to go first with Travis CI. I have another

00:14:50.320 --> 00:14:55.040
one that's a little bit of a sticky situation here, but I think it's really interesting to dig into.

00:14:55.040 --> 00:15:02.020
Okay. Okay. This is actually from January 14th. Actually, let me look at the AWS blog and see when

00:15:02.020 --> 00:15:06.580
they published it, January 9th. So this is something I've been wanting to talk about for a

00:15:06.580 --> 00:15:11.160
little while, but it's, it's involved. There's a lot of moving parts and a lot of layers to this. So I

00:15:11.160 --> 00:15:16.720
didn't want to just give it like a super peripheral sort of skim the surface type of thing. So here's the

00:15:16.720 --> 00:15:22.180
deal. I'm talking about an article by a guy named Ben Thompson who runs Stratechery,

00:15:22.180 --> 00:15:27.740
which is a really great resource for understanding the business side of software. So super, super

00:15:27.740 --> 00:15:33.000
interesting work that he's doing there. And this one's called AWS, MongoDB and the economic realities

00:15:33.000 --> 00:15:41.780
of open source. Yeah. And he also runs a podcast called exponent and exponent is sort of the audio

00:15:41.780 --> 00:15:48.280
side. He does this with another guy named James and I'm linking to an hour long episode. He did on

00:15:48.280 --> 00:15:53.700
this called inverted pyramids, which talks about demand and building platforms and things like that.

00:15:53.700 --> 00:15:58.840
So really interesting interplay between open source cloud computing and so on, but it focused on this

00:15:58.840 --> 00:16:06.240
disagreement at a business level between MongoDB and AWS. Okay. So MongoDB, they make databases,

00:16:06.240 --> 00:16:11.200
right? They make a document database and they have kind of a unique API and they are definitely the

00:16:11.200 --> 00:16:16.660
most popular of the document databases, regardless of whether you like MongoDB or not. Certainly

00:16:16.660 --> 00:16:22.960
they are well known and well used in that space, right? In the document DB space. If you're not doing

00:16:22.960 --> 00:16:30.920
that, you're probably doing Postgres in the Python world, but AWS wanted to have a MongoDB as a service

00:16:30.920 --> 00:16:36.760
type of offering. Like they have RDS and other managed database options, right? They want to have

00:16:36.760 --> 00:16:44.260
basically a MongoDB compatible one, but MongoDB, the company, their business model is basically three

00:16:44.260 --> 00:16:50.240
things. They sell an enterprise version of the on-premise software. That's kind of unrelated to

00:16:50.240 --> 00:16:56.800
this. They have a free community version and then they sell this thing called Atlas DB, which is MongoDB

00:16:56.800 --> 00:17:02.800
as a service. And what you do is you go to MongoDB Atlas and you say, I'd like to run this on AWS,

00:17:02.800 --> 00:17:07.820
or I'd like to run it on Azure or on Google's cloud. So that's MongoDB's business model. AWS just wants

00:17:07.820 --> 00:17:15.460
just to have a service. So MongoDB, who owns the IP to like the licensing of MongoDB, the server,

00:17:15.460 --> 00:17:21.120
changed it to something called AGPL. Have you heard of AGPL?

00:17:21.120 --> 00:17:22.880
Well, I think, but I don't remember what it is.

00:17:22.880 --> 00:17:23.960
So you've heard of GPL, right?

00:17:24.460 --> 00:17:29.840
Basically, like if you use this software in yours, then you must make yours open source.

00:17:29.840 --> 00:17:36.580
That's true when you directly depend on it. But what if it's hosted and managed by Amazon and you just

00:17:36.580 --> 00:17:41.280
talk to it over the network? You're not interacting with it. You're not using it, right? Well, AGPL is

00:17:41.280 --> 00:17:47.920
like GPL plus network. So if you access this software over the network, it's like the GPL applies to you.

00:17:47.980 --> 00:17:56.260
Isn't that weird? So basically what that means is AWS cannot have a hosted MongoDB because if they do,

00:17:56.260 --> 00:18:01.480
it triggers this AGPL and like AWS becomes open source or something crazy like this, right? Like

00:18:01.480 --> 00:18:06.680
the consequences are too high and like Apple's banned it from the app store. Google has banned it from all

00:18:06.680 --> 00:18:12.660
the AG, any AGPL software basically is not allowed within Google. It's really not something these cloud

00:18:12.660 --> 00:18:18.080
companies are interested in having interactions with, right? Because it takes the GPL bit and

00:18:18.080 --> 00:18:24.000
doesn't talk about shipping stuff, but accessing over the network. So that brings us to the interesting

00:18:24.000 --> 00:18:30.860
part. So what does AWS do? Not just go, okay, great. We keep running Atlas. No, AWS says today,

00:18:30.860 --> 00:18:36.680
they said this on January 9th, today we are launching Amazon DocumentDB with MongoDB compatibility,

00:18:36.680 --> 00:18:41.400
a fast, scalable, and highly available database that's designed to be compatible with your existing

00:18:41.400 --> 00:18:46.880
MongoDB applications and tools. It's purpose built. It has all this replication, et cetera,

00:18:46.880 --> 00:18:52.540
et cetera. And it's all for your production scale, MongoDB workloads. So they took the exact API of

00:18:52.540 --> 00:18:57.460
MongoDB and rebuilt a brand new server and service from it from scratch.

00:18:57.460 --> 00:18:58.600
Okay. Interesting.

00:18:58.600 --> 00:19:02.460
They didn't do it on the latest one because the latest one has the AGPL. So they went back to three,

00:19:02.460 --> 00:19:06.620
six, the latest one is like four or five or something like that. So they went back to the latest one,

00:19:06.620 --> 00:19:10.580
the newest one that doesn't have this restriction. They mimicked that,

00:19:10.580 --> 00:19:13.120
which should be good enough actually for most people, I would guess.

00:19:13.120 --> 00:19:14.500
Yeah. Weird.

00:19:14.500 --> 00:19:19.700
Is that interesting? Like you change your license so we can't have it. So we literally copy your API

00:19:19.700 --> 00:19:24.820
like bite for bite on the wire identical and rebuild a new service from scratch on it.

00:19:24.820 --> 00:19:30.000
Okay. Both sides are kind of being sneaky and whatever.

00:19:30.120 --> 00:19:38.480
Yes. I feel a little more kinship towards the MongoDB Inc. side because they developed this whole thing from scratch and they built it up and they got it popular.

00:19:38.480 --> 00:19:42.740
But yeah, it's definitely an interesting tit and tat.

00:19:42.740 --> 00:19:47.600
But what is the AGPL to air all of Mongo then? What if I build my website?

00:19:47.820 --> 00:20:08.320
Yeah. The community edition is separate for like your self hosting somehow, but there's like clauses about accessing it over the network. Basically it's, you know, very much like the GDPR is like mostly built to fight Google and Facebook, right? This, my understanding is like, basically this is to fight the cloud providers, not meant to interact with regular people just running the community version.

00:20:08.320 --> 00:20:10.940
Okay. But regular people are running on clouds too.

00:20:10.940 --> 00:20:12.460
I know. It's quite interesting.

00:20:12.460 --> 00:20:17.400
I just would not want to pick a fight with one of these big players, but whatever.

00:20:17.400 --> 00:20:31.840
Yeah. So I encourage people to both maybe first listen to the podcast and then read the article if you want to go all in, but you can skim the article. You can't really skim the podcast. I know some people do like 2.5x, but those people are crazy. It melts my brain. I can't do it.

00:20:31.840 --> 00:20:32.720
I do 1.3.

00:20:32.720 --> 00:20:38.120
Yeah, that's a pretty good balance. There's layer upon layer. Maybe I'll come to the conclusion real quick.

00:20:38.240 --> 00:20:42.540
So it says, thus we have arrived at a cunardrum for open source companies.

00:20:42.540 --> 00:20:46.940
MongoDB leveraged open source to gain mindshare, right? Started as open source.

00:20:46.940 --> 00:20:57.700
MongoDB Inc. built a successful company selling additional tools for enterprises to run MongoDB, but more and more enterprises don't want to run software easier or not.

00:20:57.700 --> 00:21:04.360
They want to hire AWS or Microsoft or Google or some other cloud provider to run it for them because they value performance and scalability and all that.

00:21:04.940 --> 00:21:11.740
So it leaves MongoDB pretty much like a little bit outside the value chain, which is interesting.

00:21:11.740 --> 00:21:24.340
And there's just a lot of interesting trade-offs for open source VC-funded companies and traditional monetization strategies are looking harder and harder in the face of cloud computing companies that just go, that's a cool API.

00:21:24.340 --> 00:21:24.880
We'll do that.

00:21:24.880 --> 00:21:25.280
Yeah.

00:21:25.280 --> 00:21:26.260
I told you, lots of layers.

00:21:26.260 --> 00:21:27.540
And I really, I don't know.

00:21:27.540 --> 00:21:28.540
It takes a lot of pondering.

00:21:28.540 --> 00:21:29.680
I really don't know where I am.

00:21:30.140 --> 00:21:32.420
But it's, I think it's a big deal, honestly.

00:21:32.420 --> 00:21:33.440
It is a big deal.

00:21:33.440 --> 00:21:36.320
For the rest of us, the topic is important.

00:21:36.320 --> 00:21:38.840
Document databases are kind of amazing.

00:21:38.840 --> 00:21:48.180
And I think that we need to push those forward and having legal structures trying to get in the way of making this just better for everybody.

00:21:48.540 --> 00:21:52.400
I know that, like, everybody that started it should be able to make money.

00:21:52.400 --> 00:21:55.520
But also, it needs to move forward.

00:21:55.520 --> 00:21:57.700
So, yeah, there's lots of sides to this.

00:21:57.700 --> 00:21:59.920
There are a lot of angles and a lot of sides.

00:21:59.920 --> 00:22:02.080
And Ben does a super job covering it.

00:22:02.080 --> 00:22:04.080
So, anyway, link to that if that sounds interesting.

00:22:04.080 --> 00:22:04.660
Check it out.

00:22:04.660 --> 00:22:09.480
It's not exactly the newest of news, but I think it's big news still in the open source world.

00:22:09.480 --> 00:22:09.840
Okay.

00:22:09.840 --> 00:22:10.100
All right.

00:22:10.100 --> 00:22:11.960
You got some extra stuff for us this week?

00:22:12.140 --> 00:22:21.700
Just that I'm so terrible with names, but the people that do the Teaching Python podcast, I just released an episode of Testing Code where I interviewed them.

00:22:21.700 --> 00:22:22.800
Yeah, I saw that come out.

00:22:22.800 --> 00:22:23.200
That's great.

00:22:23.200 --> 00:22:23.560
Yeah.

00:22:23.560 --> 00:22:24.580
So, that was cool.

00:22:24.580 --> 00:22:25.860
Do you have any extras?

00:22:25.860 --> 00:22:30.100
I have a couple of extras, just mostly follow-ups and some news.

00:22:30.100 --> 00:22:37.120
So, the folks running PyTexas in Austin, which sounds like a really fun place to be if you couldn't come to PyCascades in Seattle.

00:22:37.120 --> 00:22:41.320
PyTexas 2019 is going to be April 13th and 14th.

00:22:41.380 --> 00:22:44.700
Registration is open, and I'm linking to their page and stuff.

00:22:44.700 --> 00:22:46.020
It looks pretty cool.

00:22:46.020 --> 00:22:46.720
That's one.

00:22:46.720 --> 00:22:49.680
The other is the article we covered from Anthony Shaw last week.

00:22:49.680 --> 00:22:55.280
Apparently, it was like two years old, and somebody had sent it to us, so it felt like, oh, yeah, here's a new article from Anthony.

00:22:55.280 --> 00:22:57.940
So, we covered it as if and without any caveats.

00:22:57.940 --> 00:23:07.100
So, Anthony Shaw, sorry, we dug up your old, your very far past predictions of the future and then presented them from today, but they're still good.

00:23:07.100 --> 00:23:10.620
I thought it was quite a good article, and it stands the test of time pretty well.

00:23:10.620 --> 00:23:24.240
And finally, remember when I talked about Rust Python and I said the reason this makes me super, super happy, Brian, is that it enables this WebAssembly future of Python because Rust has a very strong WebAssembly story?

00:23:24.400 --> 00:23:31.840
Well, on that episode page, one of the core developers posted a comment, said, thanks for covering this.

00:23:31.840 --> 00:23:35.580
By the way, rustpython.github.io slash demo.

00:23:35.580 --> 00:23:37.800
Yeah, that's it running in the Web.

00:23:37.800 --> 00:23:40.620
The CPython built on Rust.

00:23:40.620 --> 00:23:44.080
Well, Rust Python running the Web under WebAssembly.

00:23:44.520 --> 00:23:48.360
So, if you open that bad boy up, and boom, it's up and running.

00:23:48.360 --> 00:23:49.340
You can go and type stuff.

00:23:49.340 --> 00:23:50.940
There's not much of a standard library.

00:23:50.940 --> 00:23:52.540
That's something we already covered previously.

00:23:52.540 --> 00:23:55.120
So, it's kind of mostly a language level thing.

00:23:55.120 --> 00:24:00.260
But here it is, two megabytes WebAssembly binaries running in your browser.

00:24:00.260 --> 00:24:01.180
It's pretty cool.

00:24:01.180 --> 00:24:02.620
That is really pretty cool.

00:24:02.620 --> 00:24:03.280
Yeah.

00:24:03.280 --> 00:24:04.400
Yeah, all right.

00:24:04.400 --> 00:24:06.860
So, that's all of it for my extra stuff as well.

00:24:06.860 --> 00:24:07.200
Okay.

00:24:07.280 --> 00:24:08.000
You got a joke for me?

00:24:08.000 --> 00:24:10.100
People are enjoying this joke segment.

00:24:10.100 --> 00:24:11.580
I'm enjoying the joke segment.

00:24:11.580 --> 00:24:12.780
I do not have one.

00:24:12.780 --> 00:24:13.560
Okay, I got two.

00:24:13.560 --> 00:24:14.960
I'll see what you think of these, okay?

00:24:14.960 --> 00:24:15.260
Okay.

00:24:15.260 --> 00:24:17.540
Why was the developer unhappy at their job?

00:24:17.540 --> 00:24:18.140
I don't know.

00:24:18.140 --> 00:24:18.400
Why?

00:24:18.400 --> 00:24:19.560
They wanted arrays.

00:24:19.560 --> 00:24:21.500
A-R-R-A-Y-S.

00:24:21.500 --> 00:24:22.000
Arrays.

00:24:22.000 --> 00:24:24.200
That's pretty bad.

00:24:24.200 --> 00:24:26.100
That's lists for all the Python people.

00:24:26.100 --> 00:24:26.460
Yes.

00:24:26.460 --> 00:24:29.960
Where did the parallel function wash its hands?

00:24:29.960 --> 00:24:30.840
I'm not sure where.

00:24:30.840 --> 00:24:31.560
In async.

00:24:31.560 --> 00:24:32.340
A-S.

00:24:32.340 --> 00:24:34.240
Was there a line, or did it have to wait?

00:24:36.500 --> 00:24:37.680
Oh, that's pretty good.

00:24:37.680 --> 00:24:38.900
Yeah, these are bad.

00:24:38.900 --> 00:24:40.420
These are pretty bad, but here they are.

00:24:40.420 --> 00:24:42.380
No, it's good.

00:24:42.380 --> 00:24:45.700
I have kids, so I'll retell these.

00:24:45.700 --> 00:24:47.620
They won't understand it, but that's all right.

00:24:47.620 --> 00:24:52.000
Yeah, but they'll be in the style in which they should appreciate.

00:24:52.000 --> 00:24:54.800
The jokes just won't make sense.

00:24:54.800 --> 00:24:55.200
Yeah.

00:24:55.200 --> 00:24:55.980
Anyway.

00:24:55.980 --> 00:24:56.360
Awesome.

00:24:56.360 --> 00:24:56.720
All right.

00:24:56.720 --> 00:24:59.660
Well, welcome back, and thanks for doing the show with me today.

00:24:59.660 --> 00:25:00.280
Yeah, thank you.

00:25:00.280 --> 00:25:00.560
You bet.

00:25:00.560 --> 00:25:02.520
Thank you for listening to Python Bytes.

00:25:02.520 --> 00:25:05.060
Follow the show on Twitter via at Python Bytes.

00:25:05.180 --> 00:25:07.920
That's Python Bytes, as in B-Y-T-E-S.

00:25:07.920 --> 00:25:11.160
And get the full show notes at pythonbytes.fm.

00:25:11.160 --> 00:25:15.360
If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

00:25:15.360 --> 00:25:18.060
We're always on the lookout for sharing something cool.

00:25:18.060 --> 00:25:21.180
On behalf of myself and Brian Okken, this is Michael Kennedy.

00:25:21.180 --> 00:25:24.600
Thank you for listening and sharing this podcast with your friends and colleagues.