WEBVTT
00:00:00.001 -->
00:00:05.120Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:00:05.120 -->
00:00:10.680This is episode 209, recorded on November 18th, 2020. I'm Michael Kennedy.
00:00:10.680 -->
00:00:11.580And I'm Brian Okken.
00:00:11.580 -->
00:00:15.920And this episode is brought to you by us and all the things we're offering to the Python community.
00:00:15.920 -->
00:00:24.140But I kind of want to take a step back in my whole career and start back where I spent a little bit of time in .NET.
00:00:24.140 -->
00:00:26.640Isn't that a weird thing for me to do on a Python podcast?
00:00:26.860 -->
00:00:30.260Yeah, but you're kind of a .NET kind of guy in your past.
00:00:30.260 -->
00:00:34.400I like C#, all right. Like if I wasn't doing Python, that's probably what I would be doing.
00:00:34.400 -->
00:00:35.700But look.
00:00:35.700 -->
00:00:36.940Well, thank God for Python.
00:00:36.940 -->
00:00:43.700Yes, I know. Well, also, I just want to point out, this is not my fault. This is Anthony Shaw's fault.
00:00:43.700 -->
00:00:44.300Oh, okay.
00:00:44.300 -->
00:00:54.620Yeah. So, Anthony Shaw wrote an article showing you how to use one of the more exciting inventions, evolution, something like that,
00:00:55.040 -->
00:00:58.340with regard to Python and how it's actually executed.
00:00:58.340 -->
00:00:59.620And it has to do with .NET.
00:00:59.620 -->
00:01:03.700So, he wrote an article called Running Python on .NET 5.
00:01:03.700 -->
00:01:09.400So, there's a couple of layers we got to unpack here to finally put this together for everyone.
00:01:09.500 -->
00:01:20.120So, way back on episode 49, like when I was living in Germany type way back, I talked about this thing called Pigeon, P-Y-J-I-O-N with Brett Cannon.
00:01:20.120 -->
00:01:21.080Okay.
00:01:21.080 -->
00:01:37.180So, what this was is a way to like shim into CPython, something that would intercept when a frame, a function frame was being executed and, you know, hand over the Python bytecode.
00:01:37.380 -->
00:01:41.260When you run Python, it gets compiled to those P-Y-C files into bytecode.
00:01:41.260 -->
00:01:53.020But then, unlike, say, .NET and Java, which compiles that to machine instruction, it just jams that through the big C eval.c loop, like the 3,000 line switch statement.
00:01:53.020 -->
00:01:54.940That is Python's runtime, right?
00:01:55.120 -->
00:02:01.020So, it gets like mixed into that workflow and it can actually take that.
00:02:01.020 -->
00:02:09.020And there was talk about maybe compiling to the JavaScript Chromium engine, potentially, or to .NET, right?
00:02:09.020 -->
00:02:18.340Those are like, it could be, so the idea was you could plug in some alternative JIT compiler to be given segments of Python and said, run this block of Python.
00:02:18.340 -->
00:02:19.260Cool, right?
00:02:19.260 -->
00:02:19.440Okay.
00:02:19.440 -->
00:02:27.720So, you know, obviously, compiled code has at least the potential to be a lot faster if it really understands what it's compiling than interpreted code.
00:02:27.720 -->
00:02:28.960Okay.
00:02:28.960 -->
00:02:30.880So, that's thing one.
00:02:30.880 -->
00:02:37.100Thing two is .NET traditionally used to be this thing that ran on Windows and it only ran on Windows.
00:02:37.100 -->
00:02:39.600And that was a problem for a lot of people.
00:02:39.600 -->
00:02:46.960So, Microsoft came up with this thing called .NET Core, which was the open source version, a multi-platform open source version of .NET.
00:02:47.800 -->
00:02:51.260And just recently, they said, it's really silly to have these two things.
00:02:51.260 -->
00:02:57.740So, let's just come up with this thing called .NET 5 that is the new cross-platform open source replacement that puts those things together.
00:02:57.740 -->
00:02:58.380Okay?
00:02:58.380 -->
00:02:59.360Okay.
00:02:59.360 -->
00:03:01.160And I'm leaking to like some of the announcements.
00:03:01.160 -->
00:03:02.900They just did a conference over there.
00:03:02.900 -->
00:03:04.300People can check it out if they want to go deep.
00:03:04.300 -->
00:03:08.760Number three, things that run in .NET often are faster than Python.
00:03:08.760 -->
00:03:10.180Like, you can debate that.
00:03:10.180 -->
00:03:17.500But like, especially the numerical types of bits because they work with, you know, integers and floats, not PyObject long pointers and so on.
00:03:17.500 -->
00:03:25.900And so, I just ran across a Stack Overflow post where someone was complaining that their Python implementation of something was 31 times slower than C#.
00:03:25.900 -->
00:03:29.460Like, that's outside the margin of error probably.
00:03:29.460 -->
00:03:30.780It's not good.
00:03:31.520 -->
00:03:34.480I mean, we can debate about whether or not Python is fast or slow.
00:03:34.480 -->
00:03:39.100And I think that's a really interesting conversation because developing it is faster.
00:03:39.100 -->
00:03:43.680If you bring in things like NumPy, all of a sudden you're down to C++, which is probably flat out faster.
00:03:43.680 -->
00:03:45.300And there's just all these variations, right?
00:03:45.300 -->
00:03:45.940Yeah.
00:03:45.940 -->
00:03:50.200So, not to put too much of a point on it, but it is a place where code runs pretty quickly.
00:03:50.200 -->
00:03:54.680So, if you could get some Python code to run on that place as well, that would be pretty sweet.
00:03:54.680 -->
00:04:02.620So, what people have traditionally done to make their code faster, as many people know, is compile, like, write it in C and compile it as a C extension.
00:04:02.620 -->
00:04:04.560You know, things like NumPy might do that.
00:04:04.560 -->
00:04:13.760Or use something like Cython, which basically takes sort of write it in C, you write it in Python, but then it just compiles it to C, which then is compiled to machine instructions.
00:04:14.140 -->
00:04:16.260So, there's like this sort of escape hatch, right?
00:04:16.260 -->
00:04:16.600Yeah.
00:04:16.600 -->
00:04:20.200So, .NET has this JIT compiler that comes with it.
00:04:20.200 -->
00:04:25.120Pigeon is this project that allows you to plug a JIT compiler into the Python execution.
00:04:25.120 -->
00:04:35.000So, the people over at Microsoft, Brett Cannon and Dino Veland, hopefully I got that right, the people involved, have been actually working on this for the last four years.
00:04:35.000 -->
00:04:40.500And they're now, you can now use this Pigeon project in Python 3.9.
00:04:40.780 -->
00:04:51.840And the reason is, back in 3.7, there was a PEP called PEP523, which was basically an API for swapping out frame execution with a replacement implementation.
00:04:51.840 -->
00:04:56.880And that's where you might take out Interpreter and inject JIT compiler.
00:04:57.880 -->
00:05:01.380So, basically, they've just, you know, now that 3.7 came out with that, they've been building on that.
00:05:01.380 -->
00:05:03.800And he's got some really cool examples.
00:05:03.800 -->
00:05:11.780Like, all you go over there is you pip install Pigeon, you know, import Pigeon, Pigeon.enable, or like something like that to say start.
00:05:11.780 -->
00:05:12.400And that's it.
00:05:12.400 -->
00:05:14.140There's no other changes to your code.
00:05:14.140 -->
00:05:19.420And now it's running JIT compiled on .NET 5 cross-platform.
00:05:19.420 -->
00:05:20.160That's pretty cool.
00:05:20.380 -->
00:05:22.980It's got some real interesting possibilities there, right?
00:05:22.980 -->
00:05:23.260Yes.
00:05:23.260 -->
00:05:32.640And it uses the, so there's been other things where you could like plug in Python into alternate runtimes and VMs like JITON and IronPython and so on.
00:05:32.640 -->
00:05:33.440This is not that.
00:05:33.440 -->
00:05:36.460This literally uses the same standard library.
00:05:36.460 -->
00:05:40.820Your C extensions are supposed to still work, right?
00:05:40.820 -->
00:05:49.100So, what they did is they actually said, they actually went and they tested the entire CPython test suite on all platforms with this.
00:05:49.100 -->
00:05:52.820And this is actually the first JIT implementation to ever pass the test suite.
00:05:52.820 -->
00:05:53.660Oh, that's pretty cool.
00:05:53.660 -->
00:05:53.900Yeah?
00:05:53.900 -->
00:05:54.280Right?
00:05:54.280 -->
00:06:02.780Because so we've got things like PyPy, but it's like 94% or whatever, like some, you know, mostly, mostly Python, but it's not all Python, right?
00:06:02.780 -->
00:06:12.280So, this is really cool that they've got this high-performance runtime cross-platform JIT compiler that they just seem to have successfully plugged into Python.
00:06:12.280 -->
00:06:12.820Yeah.
00:06:12.820 -->
00:06:16.260So, it's running which version of Python?
00:06:16.260 -->
00:06:16.8603.9.
00:06:16.860 -->
00:06:17.580Oh, okay.
00:06:17.580 -->
00:06:18.280That's awesome.
00:06:18.280 -->
00:06:18.620Yeah.
00:06:18.620 -->
00:06:25.540So, it doesn't like, like a lot of these other things said, well, let's replace the Python runtime with X and then it'll be mostly the same.
00:06:25.740 -->
00:06:35.580And so, what this does instead is it plugs in just at that PEP 5.2.3 frame execution layer and says, you want to run this part of a function.
00:06:35.580 -->
00:06:36.740How do you do that?
00:06:36.740 -->
00:06:38.620It's just that little bit that changes.
00:06:38.620 -->
00:06:43.560So, other than that, it's the same old Python 3.9 that you know and love that I'm, as far as I can tell.
00:06:43.560 -->
00:06:44.020Yeah.
00:06:44.020 -->
00:06:45.080So, that's pretty awesome.
00:06:45.080 -->
00:06:45.360Yeah.
00:06:45.360 -->
00:06:46.220I'm pretty excited.
00:06:46.220 -->
00:06:46.680It is pretty awesome.
00:06:46.680 -->
00:06:51.240And then a little, like some extra news on this, unless you already mentioned it.
00:06:51.240 -->
00:06:53.020This happened a couple days ago.
00:06:53.640 -->
00:07:02.480Pigeon is unfortunately frozen in the Microsoft repo, but Anthony's fork is now the official fork.
00:07:02.480 -->
00:07:02.840What?
00:07:02.840 -->
00:07:03.960Yeah.
00:07:03.960 -->
00:07:07.440He's doing so much interesting low-level stuff, Anthony is.
00:07:07.440 -->
00:07:08.220Yeah.
00:07:08.220 -->
00:07:12.800He's got his, like, CPython source code book and, yeah, so, yeah, that's cool you're linking over to it.
00:07:12.800 -->
00:07:18.080So, all this stuff is very exciting and it has the possibility for code to run much faster.
00:07:18.080 -->
00:07:25.680So, for example, given something that it can tell is here's a pi long object pointer thing.
00:07:25.680 -->
00:07:27.000Could we convert that?
00:07:27.000 -->
00:07:27.960And it's small.
00:07:27.960 -->
00:07:34.860Could we convert that to just a, you know, four byte integer and do integer math instead of, like, complex math, right?
00:07:34.860 -->
00:07:36.620Like, that would make a tremendous difference in speed.
00:07:36.620 -->
00:07:36.880Yeah.
00:07:36.880 -->
00:07:42.740That said, what they've done here so far is just let's make it run and not break.
00:07:42.740 -->
00:07:43.480Yeah.
00:07:43.480 -->
00:07:46.020And now they're going to start working on the optimization.
00:07:46.020 -->
00:07:53.140So, this JIT compiler hasn't done any optimizations yet, but they're going to start teaching Pigeon how to understand the Python code.
00:07:53.140 -->
00:07:59.380Say, could we restructure that to get the same outcome, but in a much more native to the machine way?
00:07:59.380 -->
00:08:00.600So, is it faster?
00:08:00.600 -->
00:08:01.620A little bit.
00:08:01.620 -->
00:08:02.740Not a ton yet.
00:08:02.740 -->
00:08:12.260But it opens the door for huge improvements by working specifically on the JIT compiler, understanding how to take code that it gets and turn it into something.
00:08:12.260 -->
00:08:12.660Yeah.
00:08:12.660 -->
00:08:15.720And this sort of cross work and stuff is interesting.
00:08:15.720 -->
00:08:23.560Just interesting about, you know, working with languages, working with whether or not you're going to do interpreted versus JIT compiled and things like that.
00:08:23.560 -->
00:08:24.840It's a very interesting story.
00:08:24.840 -->
00:08:25.200Yeah.
00:08:25.200 -->
00:08:26.040Yeah.
00:08:26.040 -->
00:08:33.000And that Stack Overflow thing I linked to, they also talk about PyPy, PYPy, and how it also made the example there go quite a bit faster.
00:08:33.000 -->
00:08:36.640So, anyway, JIT seemed to be an interesting option here.
00:08:36.640 -->
00:08:41.980So, from PEP 523 to 621, let's keep rolling on the PEP, man.
00:08:41.980 -->
00:08:49.620The PEP 621 is, I guess, trying to standardize some of the metadata in PyProject.toml.
00:08:50.100 -->
00:08:54.600So, we've talked about packaging in PyProject.toml a lot, I think.
00:08:54.600 -->
00:09:09.200The different projects like Black and Flit and others have been using a loophole in the original spec that said, yeah, you can put extra stuff in there, but we don't recommend it to everybody who's putting extra stuff in it.
00:09:09.200 -->
00:09:11.340Like, but are we forbidden?
00:09:11.340 -->
00:09:12.320No, let's do it.
00:09:13.140 -->
00:09:13.880No, yeah.
00:09:13.880 -->
00:09:16.160So, they took out the recommendation to not do that.
00:09:16.160 -->
00:09:22.920But there's motivation to sort of standardize on the things that are building packages and building wheels.
00:09:22.920 -->
00:09:28.180It'd be really great if, like, we could kind of standardize on what is in there and what names.
00:09:28.180 -->
00:09:32.540The big players are set up tools and poetry and Flit, of course.
00:09:33.000 -->
00:09:35.220But there's others around that do this.
00:09:35.220 -->
00:09:42.160And this PEP actually includes the authors of all of those in trying to get some of this together.
00:09:42.160 -->
00:09:51.600Some of the motivation is to try to have some of the metadata statically defined so that other tools can read it quickly.
00:09:51.600 -->
00:09:56.320And we can build an ecosystem around just a standard set of things.
00:09:56.320 -->
00:09:57.220That makes a lot of sense.
00:09:57.220 -->
00:10:00.560If you're going to put it there anyway, make it at least interchangeable and useful.
00:10:00.940 -->
00:10:04.940Yeah, and just kind of define what it means to have these things in there.
00:10:04.940 -->
00:10:14.400And one of the nice things I looked for because it kind of bugged me about the old packaging was whether or not email was required.
00:10:14.400 -->
00:10:20.540And it's nice to see that both name and, I mean, usually you should put, like, an author or maintainer name.
00:10:20.540 -->
00:10:24.660And email is encouraged, but I don't want to put my email in there.
00:10:24.660 -->
00:10:26.660And it's optional, so that's cool.
00:10:26.660 -->
00:10:29.200Yeah, exactly, because then it gets published up IPI.
00:10:29.500 -->
00:10:33.260And, man, anytime you put your email on the internet, you just get communication.
00:10:33.260 -->
00:10:39.560This is still in draft form officially, I think, but I think it'll go forward.
00:10:39.560 -->
00:10:46.860It doesn't change any of the existing core metadata, and it doesn't attempt to standardize all things that you could put in there.
00:10:46.860 -->
00:10:55.060But some of the common things like name, version, description, where the readme is, which Python version is required, what license you have.
00:10:55.060 -->
00:11:02.720These are all sort of standard things that used to be other places, but having them in the PyProject.tom will be great.
00:11:03.120 -->
00:11:05.020Yeah, it seems like they belong together in there.
00:11:05.020 -->
00:11:08.760So, like, you know, what is the name of the project?
00:11:08.760 -->
00:11:10.700What version of Python does it require?
00:11:10.700 -->
00:11:11.960And so on, that's reasonable.
00:11:11.960 -->
00:11:12.420Yeah.
00:11:12.420 -->
00:11:13.920I'm actually surprised.
00:11:13.920 -->
00:11:16.020I'm like, well, we haven't already standardized this stuff.
00:11:16.020 -->
00:11:16.560Exactly.
00:11:16.560 -->
00:11:18.140You know what else is reasonable?
00:11:18.140 -->
00:11:19.960Is learning pytest.
00:11:19.960 -->
00:11:20.320Yeah.
00:11:20.320 -->
00:11:21.260That's a pretty reasonable thing.
00:11:21.340 -->
00:11:22.940And often people do it with a book?
00:11:22.940 -->
00:11:24.120They do.
00:11:24.120 -->
00:11:30.360And I'm still getting some really great quotes from people, which would have been good for me to be ready with that.
00:11:30.360 -->
00:11:32.020But people contact me.
00:11:32.020 -->
00:11:41.020I get a message probably every other day saying, man, the Python Testing with pytest book that you wrote has helped me so much get up to speed really quickly.
00:11:41.020 -->
00:11:43.420And I really love feedback like that.
00:11:43.420 -->
00:11:45.800So if it's helped you, please let me know.
00:11:45.800 -->
00:11:46.320It'd be great.
00:11:46.320 -->
00:11:47.140Yeah.
00:11:47.140 -->
00:11:48.940I'm about to release a FastAPI course.
00:11:49.080 -->
00:11:53.800It may actually be out by the time people hear this because there's this time travel thing that we do with podcasting.
00:11:53.800 -->
00:11:54.940Not that much, but a little bit.
00:11:54.940 -->
00:11:58.680So people should definitely check that out over at Talk Python Training.
00:11:58.680 -->
00:12:00.940And I've already started writing the next course.
00:12:00.940 -->
00:12:01.700So that'll be fun.
00:12:01.700 -->
00:12:02.760Big secret there.
00:12:02.760 -->
00:12:03.960You're cranking them out.
00:12:03.960 -->
00:12:05.400I'm really liking this stuff.
00:12:05.400 -->
00:12:07.380And I'm really looking forward to the FastAPI course.
00:12:07.380 -->
00:12:07.680Yeah.
00:12:07.680 -->
00:12:07.980Thanks.
00:12:07.980 -->
00:12:10.320It's all done, recorded.
00:12:10.320 -->
00:12:12.680It just needs the final editing set on the videos.
00:12:12.680 -->
00:12:14.280And it's going to be really fun.
00:12:14.280 -->
00:12:15.460I think people will love that framework.
00:12:15.460 -->
00:12:17.100I had a lot of fun exploring it.
00:12:17.100 -->
00:12:17.260Cool.
00:12:17.260 -->
00:12:18.340You know what's not a lot of fun?
00:12:18.840 -->
00:12:26.560When you get a DMCA complaint from the Record Industry Association of America to take down your GitHub project.
00:12:26.560 -->
00:12:27.000What?
00:12:27.000 -->
00:12:28.000That happens?
00:12:28.000 -->
00:12:29.520Apparently.
00:12:29.520 -->
00:12:34.020It happens to me all the time on a really funny story.
00:12:34.020 -->
00:12:37.640I did a webcast years ago when I first moved to Oregon.
00:12:38.460 -->
00:12:41.240And there were some people who had dialed in.
00:12:41.240 -->
00:12:43.500And it was so frustrating.
00:12:43.500 -->
00:12:45.740Like there's all these hundreds of people.
00:12:45.740 -->
00:12:50.120Somebody put the call on hold because they had someone come in their office.
00:12:50.400 -->
00:12:55.340It started playing like the hold music to the whole organization.
00:12:55.340 -->
00:12:57.940Everyone, like all hundred people were hearing this hold music.
00:12:57.940 -->
00:13:01.020And we're like, how do we get rid of this one person without getting rid of the rest?
00:13:01.020 -->
00:13:01.920It was really bad.
00:13:02.300 -->
00:13:07.960But the reason I bring this up now is it was like a song, an actual copyrighted song.
00:13:07.960 -->
00:13:17.860When I published the webcast to YouTube, it got taken down because the hold music that was interrupting the webcast got a DMCA complaint.
00:13:18.460 -->
00:13:19.940So anyway, these things are super frustrating.
00:13:19.940 -->
00:13:20.440You're like, why?
00:13:20.440 -->
00:13:21.740This makes no sense.
00:13:21.740 -->
00:13:23.540Anyway, so here's the story.
00:13:23.540 -->
00:13:28.640GitHub had taken down YouTube-DL.
00:13:28.640 -->
00:13:36.460YouTube-DL, I believe it's a Python project that allows, basically gives you a CLI for downloading content off of YouTube.
00:13:36.460 -->
00:13:39.020So if you're like, oh, that video is really awesome.
00:13:39.020 -->
00:13:40.180I wish I had it offline.
00:13:40.180 -->
00:13:48.120YouTube-DL space URL-format or whatever, you know, you give it, you just run that and it downloads it.
00:13:48.860 -->
00:13:59.640However, because the record industry puts a lot of songs and music videos and stuff up on YouTube, they said this theoretically could be used to download a song.
00:13:59.640 -->
00:14:01.300Therefore, we hate it.
00:14:01.300 -->
00:14:05.220And so we asked GitHub to take it down and get up dead.
00:14:05.220 -->
00:14:05.800Interesting.
00:14:05.800 -->
00:14:06.180Yeah.
00:14:06.180 -->
00:14:07.500But here's the news.
00:14:07.500 -->
00:14:15.200They revamped their copyright takedown policy, put a bunch of other policies in place, set up a legal defense fund, and restored YouTube download.
00:14:16.160 -->
00:14:19.820And gave the middle finger to RIAA, basically.
00:14:19.820 -->
00:14:25.660Yeah, because this tool, I mean, maybe this tool helps you do something you shouldn't, but it's not itself.
00:14:25.660 -->
00:14:26.560Yeah, yeah.
00:14:26.560 -->
00:14:39.040So also, you know, big shout out to the EFF, Electronic Frontier Foundation, in that they helped, like, critique and go through the actual legal bits of this and show GitHub, like, you know what?
00:14:39.100 -->
00:14:42.660Actually, their main complaint is actually not even what's happening.
00:14:43.560 -->
00:14:56.900So the RIAA argued that the tool ran afoul of Section 1201 of U.S. copyright law by giving people the means to circumvent YouTube's DRM, digital rights management.
00:14:57.520 -->
00:14:59.380So that's the important part, right?
00:14:59.380 -->
00:15:03.960Like, it's breaking this encryption prevention of copying that YouTube has.
00:15:03.960 -->
00:15:11.920But then the EFF looked at the claims and said, you know, what it actually does is it just grabs the video stream and saves it to a file.
00:15:11.920 -->
00:15:14.920It doesn't decrypt it or re-encode it or anything.
00:15:15.420 -->
00:15:22.000So for things like Netflix or Widevine or things like that that use DRM, this actually has no effect on it.
00:15:22.000 -->
00:15:28.160Only if the video is in an unprotected, like, MP4 format will it even work.
00:15:28.160 -->
00:15:34.220So their main complaint that, oh, it breaks this DRM, it doesn't break DRM.
00:15:34.220 -->
00:15:36.460So they said, we're putting it back.
00:15:36.460 -->
00:15:36.720Okay.
00:15:36.720 -->
00:15:37.100Yeah?
00:15:37.100 -->
00:15:40.800And as part of this, there's, like, a pretty big uproar, I believe.
00:15:40.800 -->
00:15:46.500So GitHub is implementing new policies to avoid the repeat of such a situation moving forward.
00:15:46.500 -->
00:15:54.660First, it says the team of technical and legal experts will manually evaluate every single section 1201 claim.
00:15:54.660 -->
00:15:55.740That's cool.
00:15:55.740 -->
00:15:56.020Yeah.
00:15:56.020 -->
00:16:04.580And instead of just going, whoop, it goes down, they said if the company's team, technical and legal teams, ultimately find issues with the project,
00:16:04.580 -->
00:16:08.100GitHub will give its owners a chance to address those problems before taking down their work.
00:16:08.100 -->
00:16:08.640That's nice.
00:16:08.640 -->
00:16:09.400Yeah, that's cool.
00:16:09.720 -->
00:16:17.100And GitHub is establishing a $1 million legal defense fund for developers if somebody sues them about their GitHub project.
00:16:17.100 -->
00:16:18.240That's actually awesome.
00:16:18.240 -->
00:16:20.020Yeah, this is a feel-good story, right?
00:16:20.020 -->
00:16:20.400I think.
00:16:20.400 -->
00:16:28.620Well, yeah, because the individual developers sometimes are just, like, you know, a handful of people or even just one person making some cool tool that they think is neat.
00:16:28.620 -->
00:16:30.560You're giving this stuff away.
00:16:30.560 -->
00:16:33.740You can't get a lawyer or whatever to defend yourself.
00:16:33.740 -->
00:16:38.440And a lot of times it's published through GitHub under your personal name, right?
00:16:38.640 -->
00:16:48.740So, like, Talk Python has an organization, and we pay GitHub, like, 50, 60 bucks a month to have our organization maintain repos on there, right?
00:16:48.740 -->
00:16:55.760But a lot of people, it's just, you know, GitHub.com slash Brian Okken or slash Mike C. Kennedy or whatever.
00:16:55.760 -->
00:16:59.140There's no, like, legal guards there, right?
00:16:59.320 -->
00:17:00.920So, it's really cool that they're doing this.
00:17:00.920 -->
00:17:01.240Yeah.
00:17:01.240 -->
00:17:02.300I like it.
00:17:02.300 -->
00:17:07.720And as I was researching this into my inbox, dropped a newsletter from the EFF.
00:17:07.720 -->
00:17:09.920Apparently, I'm a subscriber to their newsletter.
00:17:09.920 -->
00:17:19.500And they said they just launched a podcast miniseries called How to Fix the Internet that examines potential solutions to six ills facing the modern digital landscape.
00:17:19.500 -->
00:17:20.480And this sounds like one of them.
00:17:20.560 -->
00:17:23.020So, people are, like, really interested in this.
00:17:23.020 -->
00:17:25.340They can actually listen to the EFF series there.
00:17:25.340 -->
00:17:25.740Yeah.
00:17:25.740 -->
00:17:26.600Nice.
00:17:26.600 -->
00:17:27.960Anyway, that's a wild story, right?
00:17:27.960 -->
00:17:28.880It is very wild.
00:17:28.880 -->
00:17:29.180Yeah.
00:17:29.180 -->
00:17:29.820All right.
00:17:29.820 -->
00:17:30.460What you got next here?
00:17:30.460 -->
00:17:31.660Another one of my favorite topics?
00:17:31.660 -->
00:17:32.660Yeah.
00:17:32.660 -->
00:17:34.240So, you like MongoDB, right?
00:17:34.240 -->
00:17:34.640I do.
00:17:34.640 -->
00:17:35.020I love it.
00:17:35.120 -->
00:17:40.200So, I was actually thinking the other day, how small of a machine could I put MongoDB on?
00:17:40.200 -->
00:17:48.040And then Mark Smith comes out with an article that says that's how to install and configure MongoDB on a Raspberry Pi.
00:17:48.040 -->
00:17:48.420Wow.
00:17:48.420 -->
00:17:48.840That's awesome.
00:17:48.840 -->
00:17:49.960Which is totally cool.
00:17:49.960 -->
00:17:53.180So, it's a fairly comprehensive little guide.
00:17:53.180 -->
00:17:56.820But I didn't know you could put Ubuntu server on a Raspberry Pi either.
00:17:56.820 -->
00:17:59.140So, that's how he does it.
00:17:59.140 -->
00:18:05.100He installs the Ubuntu server 64-bit on a Raspberry Pi, configures the Wi-Fi, installs MongoDB.
00:18:05.100 -->
00:18:11.320But there's like a kind of a quirk on how you're supposed to install MongoDB on it.
00:18:11.320 -->
00:18:18.320And then set up an account so that you can safely have a MongoDB server running in your house.
00:18:18.320 -->
00:18:23.760He recommends this is like a local network thing, not even a company-wide thing.
00:18:23.760 -->
00:18:26.000Just if you're using it yourself, go for it.
00:18:26.000 -->
00:18:38.960If you already have a Raspberry Pi and that's like your thing that is running, that is your sort of file server or whatever reason that you have it running for, and you want a database, it's cool that you can set this up here, right?
00:18:38.960 -->
00:18:42.740I mean, you probably wouldn't host like a professional website on it.
00:18:42.740 -->
00:18:43.460But who knows?
00:18:43.460 -->
00:18:44.120Maybe you would.
00:18:44.120 -->
00:18:45.540I've got stories.
00:18:45.740 -->
00:18:51.240One of the things I love about MongoDB is just the ease of like setting up storage areas for it and stuff.
00:18:51.240 -->
00:18:52.120And you can just...
00:18:52.120 -->
00:18:52.280Yeah.
00:18:52.280 -->
00:18:52.680It's easy.
00:18:52.680 -->
00:18:56.100You just talk to it like you expect it to be and it just becomes that way, right?
00:18:56.100 -->
00:18:58.380You don't have to like run migration scripts and all that.
00:18:58.380 -->
00:18:58.600Yeah.
00:18:58.600 -->
00:19:06.820So, this would be, I mean, things like a home network to collect like, I don't know, temperature data from different places and some of that stuff.
00:19:07.560 -->
00:19:08.780Or, you know, whatever.
00:19:08.780 -->
00:19:11.340Things like that might be kind of a neat use for that.
00:19:11.340 -->
00:19:11.900Definitely.
00:19:11.900 -->
00:19:15.680If you've got like an IoT thing, smart home thing going on and you want to store it somewhere.
00:19:15.680 -->
00:19:16.540Yeah.
00:19:16.540 -->
00:19:16.760Yeah.
00:19:16.760 -->
00:19:17.140Very cool.
00:19:17.140 -->
00:19:17.660I love it.
00:19:17.660 -->
00:19:18.020Nice.
00:19:18.020 -->
00:19:19.240Good find there.
00:19:19.240 -->
00:19:25.920So, this next one is like this new little section I've just invented just for this one time called Extra, Extra, Extra, Hear All About It.
00:19:25.920 -->
00:19:29.620So, normally we have our extras at the end, but I had so many extras this time.
00:19:29.620 -->
00:19:31.880I'm like, this show is going to be super long if we just keep going.
00:19:31.880 -->
00:19:35.220So, this is like all the other little tiny things grouped into one.
00:19:35.220 -->
00:19:38.240So, four, at least four more little things, but all combined.
00:19:38.240 -->
00:19:38.600Okay.
00:19:38.600 -->
00:19:38.980Okay.
00:19:38.980 -->
00:19:41.820Let's start with some listener feedback.
00:19:41.820 -->
00:19:50.420So, remember I went on a rant, I'm known to do that sometimes, about the Stack Overflow Survey and how they were comparing things that were like simply not comparable?
00:19:50.420 -->
00:19:51.420Yes.
00:19:51.420 -->
00:19:54.180And one of the things I picked on was SQL.
00:19:54.180 -->
00:20:01.180And I said it doesn't make any sense to have SQL compared to the popularity of SQL compared to the popularity of Python or the popularity of C#.
00:20:01.180 -->
00:20:05.080Because people who do C#, they got to use SQL.
00:20:05.400 -->
00:20:08.940People who do Python, they got to use SQL, but not the other way around, right?
00:20:08.940 -->
00:20:10.000It's like, I don't know.
00:20:10.000 -->
00:20:11.680It's just, it didn't seem like they were right.
00:20:11.680 -->
00:20:17.380Like the numbers for SQL were inflated because all the other people were also happening to use SQL.
00:20:17.380 -->
00:20:20.580But if you ask them like, what kind of developer are you?
00:20:20.580 -->
00:20:22.040They wouldn't say I'm a SQL developer.
00:20:22.180 -->
00:20:27.840They would say I'm a Python developer or I'm a Java developer or .NET or whatever is not SQL, right?
00:20:27.840 -->
00:20:32.840So, John Nickerson said, hey, I feel like you're saying that people just use SQL or not real developers.
00:20:32.840 -->
00:20:34.600I just want to point out that, no, no, no.
00:20:34.600 -->
00:20:36.120That's not at all how I felt about it.
00:20:36.160 -->
00:20:39.560I think if like your job mainly is to use SQL, then you should check that box.
00:20:39.560 -->
00:20:40.440You should say SQL.
00:20:40.440 -->
00:20:50.740I'm just criticizing that we've got these two things side by side in these surveys where one of them is standalone.
00:20:50.740 -->
00:20:57.000And then one of them also adds to the other, but they're put together as if they're separate and being compared.
00:20:57.000 -->
00:20:59.120And that just didn't feel right to me.
00:20:59.120 -->
00:20:59.380Yeah.
00:20:59.380 -->
00:21:03.740I mean, yeah, there's definitely people that specialize SQL queries.
00:21:03.740 -->
00:21:05.540That's a cool thing.
00:21:05.540 -->
00:21:09.100And there are people that do that as professionally.
00:21:09.100 -->
00:21:10.500And I think that's super cool.
00:21:10.500 -->
00:21:17.160But like you said, having SQL being used by your Python is not the same as being a SQL developer.
00:21:17.160 -->
00:21:17.660Right.
00:21:17.660 -->
00:21:19.620JavaScript has exactly the same problem.
00:21:19.620 -->
00:21:20.540Yeah.
00:21:20.540 -->
00:21:25.080All the web developers that use any technology whatsoever, they also use JavaScript.
00:21:25.080 -->
00:21:29.340But that doesn't mean Node.js is massively more popular than everything else.
00:21:29.340 -->
00:21:31.500Also, I just wanted to quickly follow up.
00:21:31.500 -->
00:21:35.440When people fill out those surveys, they check anything that they've ever done.
00:21:35.440 -->
00:21:36.380Yes.
00:21:36.380 -->
00:21:38.800Exactly.
00:21:38.800 -->
00:21:40.840Have I touched CSS this year?
00:21:40.840 -->
00:21:42.140Yes, I'm a CSS developer.
00:21:42.140 -->
00:21:42.820All right.
00:21:42.820 -->
00:21:45.620Next of the extra, this is extra number two.
00:21:45.620 -->
00:21:49.640So remember we talked a little while ago about Peter Van Rassen,
00:21:49.860 -->
00:21:52.100creator Python, retiring.
00:21:52.100 -->
00:21:56.160We talked about him stepping down from the steering council and saying,
00:21:56.160 -->
00:21:57.300I'm just going to chill for a while.
00:21:57.300 -->
00:21:57.680Yeah.
00:21:57.680 -->
00:21:58.180Yeah.
00:21:58.180 -->
00:21:58.800He's done chilling.
00:22:01.060 -->
00:22:07.100So actually the big news, I think this is pretty big news, is that he joined, maybe as a technical fellow.
00:22:07.100 -->
00:22:10.520I'm not sure exactly what the official role is, but he joined Microsoft now.
00:22:10.520 -->
00:22:12.020That's pretty high up.
00:22:12.020 -->
00:22:12.100That's awesome.
00:22:12.100 -->
00:22:12.420Yeah.
00:22:12.520 -->
00:22:13.700I think he should do call support.
00:22:13.700 -->
00:22:14.380That'd be great.
00:22:14.380 -->
00:22:15.840Yeah.
00:22:15.840 -->
00:22:17.440So he said he decided to join.
00:22:17.440 -->
00:22:22.360He said, I decided that retirement was boring and have joined developer division at Microsoft.
00:22:22.360 -->
00:22:23.520To do what?
00:22:23.520 -->
00:22:26.840Too many things to say, but it'll make using Python better for sure.
00:22:26.840 -->
00:22:27.820And not just on Windows.
00:22:27.960 -->
00:22:29.320There's lots of open source here.
00:22:29.320 -->
00:22:30.220Watch the space.
00:22:30.220 -->
00:22:35.380And there are 5,000, no, 2,100 quoted tweets.
00:22:35.820 -->
00:22:42.860And I'm not sure how to tell me how many conversations, but there's like an insane number of replies to it as well.
00:22:42.860 -->
00:22:47.580And a bunch of familiar faces and listeners actually right there all replying to Guido.
00:22:47.580 -->
00:22:55.380One in particular I'd like to point out is, I'll link to this in the show notes as well, is somebody said,
00:22:55.380 -->
00:23:00.320I'm wondering, you know, at this point in your career, do they still ask you to submit a resume?
00:23:00.320 -->
00:23:02.140Yes, they did.
00:23:02.140 -->
00:23:05.440And I got interviewed by Kevin Scott and Andrew Salzberg and others.
00:23:05.500 -->
00:23:06.000How cool is that?
00:23:06.000 -->
00:23:09.480They also asked for my diploma from university, exclamation marks.
00:23:09.480 -->
00:23:10.640Says Guido.
00:23:10.640 -->
00:23:12.820Oh my gosh.
00:23:12.820 -->
00:23:13.180Yeah.
00:23:13.180 -->
00:23:17.640I would think you're like, you just could walk up and say, hey, I created one of these languages.
00:23:17.640 -->
00:23:18.580I'm here.
00:23:18.580 -->
00:23:19.040I'm ready.
00:23:19.040 -->
00:23:19.920But nope.
00:23:19.920 -->
00:23:22.500I don't even know if I can find my diploma.
00:23:22.500 -->
00:23:24.620I'd have to dig.
00:23:24.620 -->
00:23:29.980I think I know where it is, but I know generally what part of the house it's in, but it's in boxes under boxes.
00:23:29.980 -->
00:23:32.900Anyway, that's really interesting.
00:23:32.900 -->
00:23:33.600Okay.
00:23:33.600 -->
00:23:34.460That's two.
00:23:34.740 -->
00:23:35.860So extra, extra, extra.
00:23:35.860 -->
00:23:41.000If you think about popular editors in the Python space, really these days, it feels like it's
00:23:41.000 -->
00:23:43.640narrowing down into VS Code and PyCharm.
00:23:43.640 -->
00:23:47.720Like it used to be just completely all over the map when I asked that question on Talk Python.
00:23:47.720 -->
00:23:51.720And these days it's VS Code, PyCharm, VS Code, or I was on one and switched to the other.
00:23:51.720 -->
00:23:53.000And Vim.
00:23:53.160 -->
00:23:53.340Yeah.
00:23:53.340 -->
00:23:53.740And Vim.
00:23:53.740 -->
00:23:55.440They don't say something like that.
00:23:55.440 -->
00:23:56.640It's either Vim or Emacs.
00:23:56.640 -->
00:23:56.900Yeah.
00:23:56.900 -->
00:23:58.240It's like one of those types.
00:23:58.240 -->
00:24:05.840But right here in Portland, Oregon, roaming the streets, we now have a new editor called Nova from Panic.
00:24:05.840 -->
00:24:06.500Yeah.
00:24:06.500 -->
00:24:07.340Panic.
00:24:07.840 -->
00:24:08.040Yeah.
00:24:08.040 -->
00:24:08.060Yeah.
00:24:08.060 -->
00:24:14.200Panic is a developer-oriented company that makes native Mac apps.
00:24:14.200 -->
00:24:17.500And they are right downtown by Pal's Books.
00:24:17.660 -->
00:24:20.480You can see their office from the coffee shop, I think.
00:24:20.480 -->
00:24:20.740Cool.
00:24:20.740 -->
00:24:21.100Yeah.
00:24:21.100 -->
00:24:30.300So anyway, they built this thing called Nova, which is like a reinterpretation of their interpretation of what a code developer editor should be.
00:24:30.300 -->
00:24:39.440And it's got cool things like GitHub integration where it shows you, say, the issues around the code that you're working on and stuff like that as you're going through it.
00:24:39.640 -->
00:24:41.860So I'm sticking with PyCharm.
00:24:41.860 -->
00:24:42.520I looked at this.
00:24:42.520 -->
00:24:43.860It looks neat and all, but I'm not using it.
00:24:43.860 -->
00:24:51.240That said, I think it's worth pointing out that there's a new developer editor out there from a pretty reputable company that's putting a lot of energy into it.
00:24:51.240 -->
00:24:51.820So that's kind of cool.
00:24:51.820 -->
00:24:52.180Yeah.
00:24:52.180 -->
00:24:53.160It's got a Vim mode.
00:24:53.160 -->
00:24:53.600I'll try it.
00:24:53.600 -->
00:24:54.440I think it does.
00:24:54.440 -->
00:24:55.360I'm pretty sure I remember it.
00:24:55.360 -->
00:24:56.160All right.
00:24:56.160 -->
00:24:56.700Last thing.
00:24:56.700 -->
00:24:58.220Extra, extra, extra, extra.
00:24:58.220 -->
00:25:02.600I installed Big Sur on my Mac and it didn't die.
00:25:02.600 -->
00:25:04.540And all the Python things seem to be working.
00:25:04.540 -->
00:25:05.980All the websites run.
00:25:05.980 -->
00:25:07.180The MongoDB stuff's working.
00:25:07.180 -->
00:25:09.220So that's really pretty neat.
00:25:10.220 -->
00:25:14.180Homebrew stopped working, which is very frustrating because that's how I manage things like Python.
00:25:14.180 -->
00:25:18.140But I just had to upgrade Xcode to the latest edition and then it was good again.
00:25:18.140 -->
00:25:20.360I don't think I put Homebrew on my computer.
00:25:20.360 -->
00:25:21.100I love Homebrew.
00:25:21.100 -->
00:25:21.780I probably do.
00:25:21.780 -->
00:25:22.080Yeah.
00:25:22.080 -->
00:25:22.940I like it.
00:25:22.940 -->
00:25:23.780Install Python.
00:25:23.780 -->
00:25:24.480Install MongoDB.
00:25:24.480 -->
00:25:25.760Install a lot of things like that.
00:25:25.760 -->
00:25:26.480Open SL.
00:25:26.480 -->
00:25:27.160SSL.
00:25:27.160 -->
00:25:28.240Seems always getting there somewhere.
00:25:28.240 -->
00:25:36.540And also I said that I ordered a new MacBook Pro instead of the Apple Silicon thing.
00:25:36.700 -->
00:25:40.460I actually canceled that and I'm getting a MacBook, a Mac mini, Apple one.
00:25:40.460 -->
00:25:41.140Very exciting.
00:25:41.140 -->
00:25:41.880I'll let you know how it goes.
00:25:41.880 -->
00:25:42.760Oh, I can't wait.
00:25:42.760 -->
00:25:45.240Actually, I didn't know they were still making minis.
00:25:45.240 -->
00:25:46.260They revamped it.
00:25:46.260 -->
00:25:50.880It is now faster than any mobile Mac.
00:25:50.880 -->
00:25:55.460And the only thing that will beat the Mac mini is the Mac, like the $5,000 Mac Pro.
00:25:56.260 -->
00:26:00.820But sometimes the $600, $700 Mac mini will still beat the $5,000 Mac Pro.
00:26:00.820 -->
00:26:01.600It's like ridiculous.
00:26:01.600 -->
00:26:03.260I'm not going to get one of these.
00:26:03.260 -->
00:26:06.100I already got like a really beefy monitor.
00:26:06.100 -->
00:26:06.860Yeah, exactly.
00:26:06.860 -->
00:26:09.920It'll do one 6K and one 4K monitor.
00:26:09.920 -->
00:26:12.180So dual monitors, 6 and 4K.
00:26:12.180 -->
00:26:15.120I'm telling you, man, this thing looks incredible.
00:26:15.120 -->
00:26:16.700You look at the Geekbench scores.
00:26:16.700 -->
00:26:17.640You look at the reviews.
00:26:17.640 -->
00:26:18.960It's really awesome.
00:26:18.960 -->
00:26:19.840And the price is like.
00:26:19.840 -->
00:26:20.200Okay.
00:26:20.360 -->
00:26:25.300So I got like $1,500 back by canceling my MacBook order and a faster computer.
00:26:25.300 -->
00:26:25.720Nice.
00:26:25.720 -->
00:26:27.380So anyway, we'll follow up on that.
00:26:27.380 -->
00:26:28.120Let's see how it goes.
00:26:28.120 -->
00:26:30.460Anyway, that was extra, extra, extra, extra.
00:26:30.460 -->
00:26:31.440You're all about it.
00:26:31.440 -->
00:26:31.920Nice.
00:26:31.920 -->
00:26:37.160Well, so normally my spot would be number 6, but that'd be like, what are we at?
00:26:37.160 -->
00:26:38.360Like 9 now or something?
00:26:38.360 -->
00:26:38.940Yeah, we're at 9, yeah.
00:26:38.940 -->
00:26:39.300Okay.
00:26:39.300 -->
00:26:42.640So actually, this is a cool article.
00:26:42.640 -->
00:26:44.060I love this story.
00:26:44.060 -->
00:26:49.460Dale Markowitz wrote an article called, I'm masquerading it right now.
00:26:49.460 -->
00:26:53.940But it's a Python-driven AI stylist inspired by social media.
00:26:53.940 -->
00:26:55.420No way.
00:26:55.420 -->
00:26:59.560So it looks at like Instagram and like influencers and stuff and says, this is how we think you
00:26:59.560 -->
00:27:00.260should dress and look?
00:27:00.260 -->
00:27:00.560Yeah.
00:27:00.560 -->
00:27:03.720So one of the cool ideas, and it's so cool.
00:27:03.720 -->
00:27:05.360So she works for Google.
00:27:05.360 -->
00:27:09.720So she's using a whole bunch of Google tools that are available to everybody else too.
00:27:09.720 -->
00:27:15.840Things like Google Storage, Firebase, Cloud Vision API, Product Search API and stuff, which
00:27:15.840 -->
00:27:19.120actually I've never played with any of these, but it's kind of neat that they're
00:27:19.120 -->
00:27:21.260available to really anybody that they want.
00:27:21.260 -->
00:27:28.080And so the idea is she took pictures of all of her, every item in her closet.
00:27:28.080 -->
00:27:34.800And then has like folders for containing the pictures of her related.
00:27:34.800 -->
00:27:39.100So like, let's say if you've got a shirt or jacket, a few angles of the shirt, and then
00:27:39.100 -->
00:27:42.880threw those in a directory and then did that for everything in her closet.
00:27:43.140 -->
00:27:50.320And then took influencers that she likes, like a couple of social media accounts that do fashion
00:27:50.320 -->
00:27:52.440shots that she likes how they dress.
00:27:52.440 -->
00:27:56.600And then throws AI at it and scripts the whole thing with Python.
00:27:56.600 -->
00:28:03.520So this thing will tell her for this particular person that this look for this from this photo,
00:28:03.520 -->
00:28:09.120you can kind of do this look if you use this shirt and those pants and these shoes.
00:28:09.520 -->
00:28:13.120So you've already like what you've already got, you can remix it this way.
00:28:13.120 -->
00:28:13.480Yeah.
00:28:13.980 -->
00:28:20.440And I think that's, it's probably more of an ad for Google AI products, but I think it's
00:28:20.440 -->
00:28:26.760a cool, like you could do this, you know, with some free time and stuff and with some Python
00:28:26.760 -->
00:28:28.100code to push it together.
00:28:28.100 -->
00:28:29.240I love this idea.
00:28:29.240 -->
00:28:29.880It's pretty cool.
00:28:29.880 -->
00:28:30.160Yeah.
00:28:30.160 -->
00:28:30.460It's pretty.
00:28:30.460 -->
00:28:30.840All right.
00:28:30.840 -->
00:28:31.280Two thoughts.
00:28:31.840 -->
00:28:36.140So one, I remember my statistics class, they talked about, well, if you have like three
00:28:36.140 -->
00:28:42.680shirts and two pants and five socks and two pairs of shoes, how many, you know, here's
00:28:42.680 -->
00:28:47.220the combinatorics of how many like combinations you might have.
00:28:47.220 -->
00:28:47.420Right.
00:28:47.420 -->
00:28:47.660Yeah.
00:28:47.660 -->
00:28:49.960So those numbers get enormous, like super quick.
00:28:49.960 -->
00:28:55.000So this just says like, there's these, these outfits that you didn't even know you could create
00:28:55.000 -->
00:29:00.160out of like the a hundred million possible things from your closet, which is a combinations
00:29:00.160 -->
00:29:00.740from your closet.
00:29:00.820 -->
00:29:01.260That's pretty cool.
00:29:01.260 -->
00:29:01.560Yeah.
00:29:01.560 -->
00:29:03.620And also like she had to put it in place.
00:29:03.620 -->
00:29:05.980One of the things she had to do is put in place like a score.
00:29:05.980 -->
00:29:11.160So if you like, for instance, if you've got like multiple gray shirts, they all might fit
00:29:11.160 -->
00:29:16.500picture with the gray shirt, but they, she made it so that there was scoring so that you'd
00:29:16.500 -->
00:29:20.000get the, like the, you can pick the highest score outfit or something.
00:29:20.000 -->
00:29:20.400Nice.
00:29:20.400 -->
00:29:21.480All right.
00:29:21.480 -->
00:29:21.940That's cool.
00:29:21.940 -->
00:29:26.400My other one is somebody should do this, but just for hairstyles and like beard styles,
00:29:26.400 -->
00:29:28.720if you're a man, have it pick a style.
00:29:28.900 -->
00:29:31.000And then that person has to get that cut.
00:29:31.000 -->
00:29:33.100Right.
00:29:33.100 -->
00:29:37.760You're like, all right, this month I'm going to look like this.
00:29:37.760 -->
00:29:38.400Oh my gosh.
00:29:38.400 -->
00:29:38.840All right.
00:29:38.840 -->
00:29:39.700Here we go.
00:29:39.700 -->
00:29:41.100Why not?
00:29:41.100 -->
00:29:41.820Oh, okay.
00:29:42.340 -->
00:29:47.600You'd have to like, sort of make it like short, long to short or something because you can't
00:29:47.600 -->
00:29:48.400go backwards.
00:29:48.400 -->
00:29:48.880Yeah.
00:29:48.880 -->
00:29:49.240Yeah.
00:29:49.240 -->
00:29:53.440I guess you'd have to like sort by a order because it takes, you got to wait longer to
00:29:53.440 -->
00:29:54.540get it to grow back out.
00:29:54.540 -->
00:29:55.420Sort by handling.
00:29:55.420 -->
00:29:55.840Yeah.
00:29:55.840 -->
00:29:56.280There you go.
00:29:56.280 -->
00:29:56.720Awesome.
00:29:56.720 -->
00:29:56.960Yeah.
00:29:56.960 -->
00:30:01.920But there's, there's some facial hairstyles that if we could get a tool that would tell people
00:30:01.920 -->
00:30:08.680to not try certain facial hairstyles based on what they, their face shape is, that would
00:30:08.680 -->
00:30:08.940be good.
00:30:08.940 -->
00:30:14.320That would be very, I did see a guy who had like a super big beard and decided to cut it
00:30:14.320 -->
00:30:14.500off.
00:30:14.500 -->
00:30:18.300But instead of just shaving it off, they were very careful and they came up with like 10
00:30:18.300 -->
00:30:19.500or 11 different styles.
00:30:19.500 -->
00:30:22.600They shave it to one, take a picture, shave it to the next, take a picture.
00:30:22.600 -->
00:30:23.880It was actually pretty interesting.
00:30:23.880 -->
00:30:24.380Yeah.
00:30:24.540 -->
00:30:25.960But yeah, there's some that shouldn't be done.
00:30:25.960 -->
00:30:27.680All right.
00:30:27.680 -->
00:30:30.620Well, I already went off the, off the deep end on the extras.
00:30:30.620 -->
00:30:31.020How about you?
00:30:31.020 -->
00:30:31.500Yeah.
00:30:31.500 -->
00:30:33.720Let's skip to the joke, man.
00:30:33.720 -->
00:30:34.180Oh man.
00:30:34.180 -->
00:30:35.300Sounds good to me.
00:30:35.300 -->
00:30:36.340All right.
00:30:36.340 -->
00:30:40.800So this is a little bit of back to the future, Marty McFly and doc, all that stuff.
00:30:40.800 -->
00:30:46.820So, you know, he's got that cool DeLorean, that stainless steel DeLorean and it's got
00:30:46.820 -->
00:30:47.740the flux capacitor.
00:30:47.740 -->
00:30:53.280So this is a little, little graphic from a dev humor from comic strip.com.
00:30:53.640 -->
00:30:57.140And it's set in January, 2006.
00:30:57.140 -->
00:30:57.980All right.
00:30:57.980 -->
00:30:59.860I'll be Marty and you can be doc.
00:30:59.860 -->
00:31:00.140Okay.
00:31:00.140 -->
00:31:00.560Okay.
00:31:00.560 -->
00:31:01.000All right.
00:31:01.000 -->
00:31:04.420So sitting in the DeLorean about to take off this.
00:31:04.420 -->
00:31:06.260So what's it like in the future doc?
00:31:06.260 -->
00:31:07.960Is everyone using CSS three?
00:31:07.960 -->
00:31:09.580Wait, wait, you'll see.
00:31:09.580 -->
00:31:11.420We're heading to 2020.
00:31:11.420 -->
00:31:16.720Knowing all the problems you have with IE6, I'll give you something to look forward to.
00:31:16.720 -->
00:31:20.780Then in May, 2020, there's a big billboard that says Microsoft edge.
00:31:20.900 -->
00:31:24.080The IE successor based on Google Chromium engine is coming to Linux.
00:31:24.080 -->
00:31:25.420Incredible.
00:31:25.420 -->
00:31:27.120Why?
00:31:27.120 -->
00:31:27.880Okay.
00:31:27.880 -->
00:31:29.020Yeah.
00:31:29.020 -->
00:31:30.580Because it can.
00:31:30.580 -->
00:31:32.660Just because it can.
00:31:32.660 -->
00:31:33.960I have.
00:31:33.960 -->
00:31:38.800So I've got a work computer that's Windows and I still don't use Edge.
00:31:38.800 -->
00:31:40.080And you're so far behind the times.
00:31:40.080 -->
00:31:41.380I've got Edge installed on my Mac.
00:31:41.380 -->
00:31:42.000You do?
00:31:42.180 -->
00:31:43.360Apparently it installs on a Mac.
00:31:43.360 -->
00:31:43.560Yeah.
00:31:43.560 -->
00:31:46.080But do you, did you install it?
00:31:46.080 -->
00:31:46.600I did.
00:31:46.600 -->
00:31:49.100Now the question is, do I use it?
00:31:49.100 -->
00:31:52.060I've got like several browsers that I just don't really use.
00:31:52.060 -->
00:31:53.420I've got Edge.
00:31:53.420 -->
00:31:54.940I've got Brave.
00:31:54.940 -->
00:31:56.840And I've got Opera.
00:31:56.840 -->
00:31:58.400And I don't really use any of those.
00:31:58.400 -->
00:31:59.960I just basically use Firefox.
00:31:59.960 -->
00:32:01.720Unless Firefox doesn't work, then I use Chrome.
00:32:01.720 -->
00:32:02.040Yeah.
00:32:02.040 -->
00:32:02.500Okay.
00:32:02.560 -->
00:32:03.060So, yeah.
00:32:03.060 -->
00:32:04.680But I technically have it installed.
00:32:04.680 -->
00:32:08.920I get this big pop-up that has to update it about every three weeks.
00:32:08.920 -->
00:32:10.180Like, there's an update for your computer.
00:32:10.180 -->
00:32:11.440Click here to upgrade Edge.
00:32:11.440 -->
00:32:13.000I'm like, I don't even run this thing.
00:32:13.000 -->
00:32:13.940Why do I keep getting this?
00:32:13.940 -->
00:32:15.120I know I get it.
00:32:15.120 -->
00:32:16.780But like, why do I have to keep getting it, I guess?
00:32:16.780 -->
00:32:20.040You know, there's still lots of people that don't know what browser they use.
00:32:20.040 -->
00:32:24.320They just, they don't even know what, if you ask them what browser they use, they
00:32:24.320 -->
00:32:25.240don't know what you're saying.
00:32:25.240 -->
00:32:25.560Yeah.
00:32:25.560 -->
00:32:27.400It's just the internet.
00:32:27.400 -->
00:32:29.800Well, what do you look on the websites for?
00:32:29.800 -->
00:32:30.720I open the internet.
00:32:31.200 -->
00:32:33.480You know, the internet is not an application.
00:32:33.480 -->
00:32:34.960What?
00:32:34.960 -->
00:32:35.480It's not?
00:32:35.480 -->
00:32:36.760Awesome.
00:32:36.760 -->
00:32:37.020Yeah.
00:32:37.020 -->
00:32:41.320So, that's a pretty good little shoot to the future one.
00:32:41.320 -->
00:32:41.760Yeah.
00:32:41.760 -->
00:32:42.960So, link to that in the show notes.
00:32:42.960 -->
00:32:44.100People want to check out the graphics.
00:32:44.100 -->
00:32:45.460Well, thanks a lot.
00:32:45.460 -->
00:32:45.960Yeah, you bet.
00:32:45.960 -->
00:32:46.580Thanks for being here.
00:32:46.580 -->
00:32:47.760And thanks to everyone for listening.
00:32:47.760 -->
00:32:48.140See y'all.
00:32:48.140 -->
00:32:48.340Bye.
00:32:48.340 -->
00:32:50.340Thank you for listening to Python Bytes.
00:32:50.340 -->
00:32:52.860Follow the show on Twitter via at Python Bytes.
00:32:52.860 -->
00:32:55.720That's Python Bytes as in B-Y-T-E-S.
00:32:55.720 -->
00:32:58.960And get the full show notes at pythonbytes.fm.
00:32:58.960 -->
00:33:03.160If you have a news item you want featured, just visit pythonbytes.fm and send it our way.
00:33:03.160 -->
00:33:05.860We're always on the lookout for sharing something cool.
00:33:05.860 -->
00:33:08.980On behalf of myself and Brian Okken, this is Michael Kennedy.
00:33:08.980 -->
00:33:12.400Thank you for listening and sharing this podcast with your friends and colleagues.