Transcript #209: JITing Python with .NET, no irons in sight
Return to episode page view on github00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:05 This is episode 209, recorded on November 18th, 2020. I'm Michael Kennedy.
00:10 And I'm Brian Okken.
00:11 And this episode is brought to you by us and all the things we're offering to the Python community.
00:15 But 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:24 Isn't that a weird thing for me to do on a Python podcast?
00:26 Yeah, but you're kind of a .NET kind of guy in your past.
00:30 I like C#, all right. Like if I wasn't doing Python, that's probably what I would be doing.
00:34 But look.
00:35 Well, thank God for Python.
00:36 Yes, I know. Well, also, I just want to point out, this is not my fault. This is Anthony Shaw's fault.
00:43 Oh, okay.
00:44 Yeah. So, Anthony Shaw wrote an article showing you how to use one of the more exciting inventions, evolution, something like that,
00:55 with regard to Python and how it's actually executed.
00:58 And it has to do with .NET.
00:59 So, he wrote an article called Running Python on .NET 5.
01:03 So, there's a couple of layers we got to unpack here to finally put this together for everyone.
01:09 So, 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.
01:20 Okay.
01:21 So, 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.
01:37 When you run Python, it gets compiled to those P-Y-C files into bytecode.
01:41 But 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.
01:53 That is Python's runtime, right?
01:55 So, it gets like mixed into that workflow and it can actually take that.
02:01 And there was talk about maybe compiling to the JavaScript Chromium engine, potentially, or to .NET, right?
02:09 Those 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.
02:18 Cool, right?
02:19 Okay.
02:19 So, 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.
02:27 Okay.
02:28 So, that's thing one.
02:30 Thing two is .NET traditionally used to be this thing that ran on Windows and it only ran on Windows.
02:37 And that was a problem for a lot of people.
02:39 So, Microsoft came up with this thing called .NET Core, which was the open source version, a multi-platform open source version of .NET.
02:47 And just recently, they said, it's really silly to have these two things.
02:51 So, 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.
02:57 Okay?
02:58 Okay.
02:59 And I'm leaking to like some of the announcements.
03:01 They just did a conference over there.
03:02 People can check it out if they want to go deep.
03:04 Number three, things that run in .NET often are faster than Python.
03:08 Like, you can debate that.
03:10 But like, especially the numerical types of bits because they work with, you know, integers and floats, not PyObject long pointers and so on.
03:17 And 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#.
03:25 Like, that's outside the margin of error probably.
03:29 It's not good.
03:31 I mean, we can debate about whether or not Python is fast or slow.
03:34 And I think that's a really interesting conversation because developing it is faster.
03:39 If you bring in things like NumPy, all of a sudden you're down to C++, which is probably flat out faster.
03:43 And there's just all these variations, right?
03:45 Yeah.
03:45 So, not to put too much of a point on it, but it is a place where code runs pretty quickly.
03:50 So, if you could get some Python code to run on that place as well, that would be pretty sweet.
03:54 So, 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.
04:02 You know, things like NumPy might do that.
04:04 Or 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.
04:14 So, there's like this sort of escape hatch, right?
04:16 Yeah.
04:16 So, .NET has this JIT compiler that comes with it.
04:20 Pigeon is this project that allows you to plug a JIT compiler into the Python execution.
04:25 So, 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.
04:35 And they're now, you can now use this Pigeon project in Python 3.9.
04:40 And 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.
04:51 And that's where you might take out Interpreter and inject JIT compiler.
04:57 So, basically, they've just, you know, now that 3.7 came out with that, they've been building on that.
05:01 And he's got some really cool examples.
05:03 Like, all you go over there is you pip install Pigeon, you know, import Pigeon, Pigeon.enable, or like something like that to say start.
05:11 And that's it.
05:12 There's no other changes to your code.
05:14 And now it's running JIT compiled on .NET 5 cross-platform.
05:19 That's pretty cool.
05:20 It's got some real interesting possibilities there, right?
05:22 Yes.
05:23 And 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.
05:32 This is not that.
05:33 This literally uses the same standard library.
05:36 Your C extensions are supposed to still work, right?
05:40 So, what they did is they actually said, they actually went and they tested the entire CPython test suite on all platforms with this.
05:49 And this is actually the first JIT implementation to ever pass the test suite.
05:52 Oh, that's pretty cool.
05:53 Yeah?
05:53 Right?
05:54 Because 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?
06:02 So, 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.
06:12 Yeah.
06:12 So, it's running which version of Python?
06:16 3.9.
06:16 Oh, okay.
06:17 That's awesome.
06:18 Yeah.
06:18 So, 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.
06:25 And 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.
06:35 How do you do that?
06:36 It's just that little bit that changes.
06:38 So, 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.
06:43 Yeah.
06:44 So, that's pretty awesome.
06:45 Yeah.
06:45 I'm pretty excited.
06:46 It is pretty awesome.
06:46 And then a little, like some extra news on this, unless you already mentioned it.
06:51 This happened a couple days ago.
06:53 Pigeon is unfortunately frozen in the Microsoft repo, but Anthony's fork is now the official fork.
07:02 What?
07:02 Yeah.
07:03 He's doing so much interesting low-level stuff, Anthony is.
07:07 Yeah.
07:08 He's got his, like, CPython source code book and, yeah, so, yeah, that's cool you're linking over to it.
07:12 So, all this stuff is very exciting and it has the possibility for code to run much faster.
07:18 So, for example, given something that it can tell is here's a pi long object pointer thing.
07:25 Could we convert that?
07:27 And it's small.
07:27 Could we convert that to just a, you know, four byte integer and do integer math instead of, like, complex math, right?
07:34 Like, that would make a tremendous difference in speed.
07:36 Yeah.
07:36 That said, what they've done here so far is just let's make it run and not break.
07:42 Yeah.
07:43 And now they're going to start working on the optimization.
07:46 So, this JIT compiler hasn't done any optimizations yet, but they're going to start teaching Pigeon how to understand the Python code.
07:53 Say, could we restructure that to get the same outcome, but in a much more native to the machine way?
07:59 So, is it faster?
08:00 A little bit.
08:01 Not a ton yet.
08:02 But 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.
08:12 Yeah.
08:12 And this sort of cross work and stuff is interesting.
08:15 Just 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.
08:23 It's a very interesting story.
08:24 Yeah.
08:25 Yeah.
08:26 And 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.
08:33 So, anyway, JIT seemed to be an interesting option here.
08:36 So, from PEP 523 to 621, let's keep rolling on the PEP, man.
08:41 The PEP 621 is, I guess, trying to standardize some of the metadata in PyProject.toml.
08:50 So, we've talked about packaging in PyProject.toml a lot, I think.
08:54 The 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.
09:09 Like, but are we forbidden?
09:11 No, let's do it.
09:13 No, yeah.
09:13 So, they took out the recommendation to not do that.
09:16 But there's motivation to sort of standardize on the things that are building packages and building wheels.
09:22 It'd be really great if, like, we could kind of standardize on what is in there and what names.
09:28 The big players are set up tools and poetry and Flit, of course.
09:33 But there's others around that do this.
09:35 And this PEP actually includes the authors of all of those in trying to get some of this together.
09:42 Some of the motivation is to try to have some of the metadata statically defined so that other tools can read it quickly.
09:51 And we can build an ecosystem around just a standard set of things.
09:56 That makes a lot of sense.
09:57 If you're going to put it there anyway, make it at least interchangeable and useful.
10:00 Yeah, and just kind of define what it means to have these things in there.
10:04 And 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.
10:14 And it's nice to see that both name and, I mean, usually you should put, like, an author or maintainer name.
10:20 And email is encouraged, but I don't want to put my email in there.
10:24 And it's optional, so that's cool.
10:26 Yeah, exactly, because then it gets published up IPI.
10:29 And, man, anytime you put your email on the internet, you just get communication.
10:33 This is still in draft form officially, I think, but I think it'll go forward.
10:39 It doesn't change any of the existing core metadata, and it doesn't attempt to standardize all things that you could put in there.
10:46 But some of the common things like name, version, description, where the readme is, which Python version is required, what license you have.
10:55 These are all sort of standard things that used to be other places, but having them in the PyProject.tom will be great.
11:03 Yeah, it seems like they belong together in there.
11:05 So, like, you know, what is the name of the project?
11:08 What version of Python does it require?
11:10 And so on, that's reasonable.
11:11 Yeah.
11:12 I'm actually surprised.
11:13 I'm like, well, we haven't already standardized this stuff.
11:16 Exactly.
11:16 You know what else is reasonable?
11:18 Is learning pytest.
11:19 Yeah.
11:20 That's a pretty reasonable thing.
11:21 And often people do it with a book?
11:22 They do.
11:24 And I'm still getting some really great quotes from people, which would have been good for me to be ready with that.
11:30 But people contact me.
11:32 I 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.
11:41 And I really love feedback like that.
11:43 So if it's helped you, please let me know.
11:45 It'd be great.
11:46 Yeah.
11:47 I'm about to release a FastAPI course.
11:49 It may actually be out by the time people hear this because there's this time travel thing that we do with podcasting.
11:53 Not that much, but a little bit.
11:54 So people should definitely check that out over at Talk Python Training.
11:58 And I've already started writing the next course.
12:00 So that'll be fun.
12:01 Big secret there.
12:02 You're cranking them out.
12:03 I'm really liking this stuff.
12:05 And I'm really looking forward to the FastAPI course.
12:07 Yeah.
12:07 Thanks.
12:07 It's all done, recorded.
12:10 It just needs the final editing set on the videos.
12:12 And it's going to be really fun.
12:14 I think people will love that framework.
12:15 I had a lot of fun exploring it.
12:17 Cool.
12:17 You know what's not a lot of fun?
12:18 When you get a DMCA complaint from the Record Industry Association of America to take down your GitHub project.
12:26 What?
12:27 That happens?
12:28 Apparently.
12:29 It happens to me all the time on a really funny story.
12:34 I did a webcast years ago when I first moved to Oregon.
12:38 And there were some people who had dialed in.
12:41 And it was so frustrating.
12:43 Like there's all these hundreds of people.
12:45 Somebody put the call on hold because they had someone come in their office.
12:50 It started playing like the hold music to the whole organization.
12:55 Everyone, like all hundred people were hearing this hold music.
12:57 And we're like, how do we get rid of this one person without getting rid of the rest?
13:01 It was really bad.
13:02 But the reason I bring this up now is it was like a song, an actual copyrighted song.
13:07 When I published the webcast to YouTube, it got taken down because the hold music that was interrupting the webcast got a DMCA complaint.
13:18 So anyway, these things are super frustrating.
13:19 You're like, why?
13:20 This makes no sense.
13:21 Anyway, so here's the story.
13:23 GitHub had taken down YouTube-DL.
13:28 YouTube-DL, I believe it's a Python project that allows, basically gives you a CLI for downloading content off of YouTube.
13:36 So if you're like, oh, that video is really awesome.
13:39 I wish I had it offline.
13:40 YouTube-DL space URL-format or whatever, you know, you give it, you just run that and it downloads it.
13:48 However, 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.
13:59 Therefore, we hate it.
14:01 And so we asked GitHub to take it down and get up dead.
14:05 Interesting.
14:05 Yeah.
14:06 But here's the news.
14:07 They revamped their copyright takedown policy, put a bunch of other policies in place, set up a legal defense fund, and restored YouTube download.
14:16 And gave the middle finger to RIAA, basically.
14:19 Yeah, because this tool, I mean, maybe this tool helps you do something you shouldn't, but it's not itself.
14:25 Yeah, yeah.
14:26 So 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?
14:39 Actually, their main complaint is actually not even what's happening.
14:43 So 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.
14:57 So that's the important part, right?
14:59 Like, it's breaking this encryption prevention of copying that YouTube has.
15:03 But 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.
15:11 It doesn't decrypt it or re-encode it or anything.
15:15 So for things like Netflix or Widevine or things like that that use DRM, this actually has no effect on it.
15:22 Only if the video is in an unprotected, like, MP4 format will it even work.
15:28 So their main complaint that, oh, it breaks this DRM, it doesn't break DRM.
15:34 So they said, we're putting it back.
15:36 Okay.
15:36 Yeah?
15:37 And as part of this, there's, like, a pretty big uproar, I believe.
15:40 So GitHub is implementing new policies to avoid the repeat of such a situation moving forward.
15:46 First, it says the team of technical and legal experts will manually evaluate every single section 1201 claim.
15:54 That's cool.
15:55 Yeah.
15:56 And 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,
16:04 GitHub will give its owners a chance to address those problems before taking down their work.
16:08 That's nice.
16:08 Yeah, that's cool.
16:09 And GitHub is establishing a $1 million legal defense fund for developers if somebody sues them about their GitHub project.
16:17 That's actually awesome.
16:18 Yeah, this is a feel-good story, right?
16:20 I think.
16:20 Well, 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.
16:28 You're giving this stuff away.
16:30 You can't get a lawyer or whatever to defend yourself.
16:33 And a lot of times it's published through GitHub under your personal name, right?
16:38 So, 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?
16:48 But a lot of people, it's just, you know, GitHub.com slash Brian Ockin or slash Mike C. Kennedy or whatever.
16:55 There's no, like, legal guards there, right?
16:59 So, it's really cool that they're doing this.
17:00 Yeah.
17:01 I like it.
17:02 And as I was researching this into my inbox, dropped a newsletter from the EFF.
17:07 Apparently, I'm a subscriber to their newsletter.
17:09 And 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.
17:19 And this sounds like one of them.
17:20 So, people are, like, really interested in this.
17:23 They can actually listen to the EFF series there.
17:25 Yeah.
17:25 Nice.
17:26 Anyway, that's a wild story, right?
17:27 It is very wild.
17:28 Yeah.
17:29 All right.
17:29 What you got next here?
17:30 Another one of my favorite topics?
17:31 Yeah.
17:32 So, you like MongoDB, right?
17:34 I do.
17:34 I love it.
17:35 So, I was actually thinking the other day, how small of a machine could I put MongoDB on?
17:40 And then Mark Smith comes out with an article that says that's how to install and configure MongoDB on a Raspberry Pi.
17:48 Wow.
17:48 That's awesome.
17:48 Which is totally cool.
17:49 So, it's a fairly comprehensive little guide.
17:53 But I didn't know you could put Ubuntu server on a Raspberry Pi either.
17:56 So, that's how he does it.
17:59 He installs the Ubuntu server 64-bit on a Raspberry Pi, configures the Wi-Fi, installs MongoDB.
18:05 But there's like a kind of a quirk on how you're supposed to install MongoDB on it.
18:11 And then set up an account so that you can safely have a MongoDB server running in your house.
18:18 He recommends this is like a local network thing, not even a company-wide thing.
18:23 Just if you're using it yourself, go for it.
18:26 If 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?
18:38 I mean, you probably wouldn't host like a professional website on it.
18:42 But who knows?
18:43 Maybe you would.
18:44 I've got stories.
18:45 One of the things I love about MongoDB is just the ease of like setting up storage areas for it and stuff.
18:51 And you can just...
18:52 Yeah.
18:52 It's easy.
18:52 You just talk to it like you expect it to be and it just becomes that way, right?
18:56 You don't have to like run migration scripts and all that.
18:58 Yeah.
18:58 So, 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.
19:07 Or, you know, whatever.
19:08 Things like that might be kind of a neat use for that.
19:11 Definitely.
19:11 If you've got like an IoT thing, smart home thing going on and you want to store it somewhere.
19:15 Yeah.
19:16 Yeah.
19:16 Very cool.
19:17 I love it.
19:17 Nice.
19:18 Good find there.
19:19 So, 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.
19:25 So, normally we have our extras at the end, but I had so many extras this time.
19:29 I'm like, this show is going to be super long if we just keep going.
19:31 So, this is like all the other little tiny things grouped into one.
19:35 So, four, at least four more little things, but all combined.
19:38 Okay.
19:38 Okay.
19:38 Let's start with some listener feedback.
19:41 So, 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?
19:50 Yes.
19:51 And one of the things I picked on was SQL.
19:54 And 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#.
20:01 Because people who do C#, they got to use SQL.
20:05 People who do Python, they got to use SQL, but not the other way around, right?
20:08 It's like, I don't know.
20:10 It's just, it didn't seem like they were right.
20:11 Like the numbers for SQL were inflated because all the other people were also happening to use SQL.
20:17 But if you ask them like, what kind of developer are you?
20:20 They wouldn't say I'm a SQL developer.
20:22 They would say I'm a Python developer or I'm a Java developer or .NET or whatever is not SQL, right?
20:27 So, John Nickerson said, hey, I feel like you're saying that people just use SQL or not real developers.
20:32 I just want to point out that, no, no, no.
20:34 That's not at all how I felt about it.
20:36 I think if like your job mainly is to use SQL, then you should check that box.
20:39 You should say SQL.
20:40 I'm just criticizing that we've got these two things side by side in these surveys where one of them is standalone.
20:50 And then one of them also adds to the other, but they're put together as if they're separate and being compared.
20:57 And that just didn't feel right to me.
20:59 Yeah.
20:59 I mean, yeah, there's definitely people that specialize SQL queries.
21:03 That's a cool thing.
21:05 And there are people that do that as professionally.
21:09 And I think that's super cool.
21:10 But like you said, having SQL being used by your Python is not the same as being a SQL developer.
21:17 Right.
21:17 JavaScript has exactly the same problem.
21:19 Yeah.
21:20 All the web developers that use any technology whatsoever, they also use JavaScript.
21:25 But that doesn't mean Node.js is massively more popular than everything else.
21:29 Also, I just wanted to quickly follow up.
21:31 When people fill out those surveys, they check anything that they've ever done.
21:35 Yes.
21:36 Exactly.
21:38 Have I touched CSS this year?
21:40 Yes, I'm a CSS developer.
21:42 All right.
21:42 Next of the extra, this is extra number two.
21:45 So remember we talked a little while ago about Peter Van Rassen, creator Python, retiring.
21:52 We talked about him stepping down from the steering council and saying, I'm just going to chill for a while.
21:57 Yeah.
21:57 Yeah.
21:58 He's done chilling.
22:01 So actually the big news, I think this is pretty big news, is that he joined, maybe as a technical fellow.
22:07 I'm not sure exactly what the official role is, but he joined Microsoft now.
22:10 That's pretty high up.
22:12 That's awesome.
22:12 Yeah.
22:12 I think he should do call support.
22:13 That'd be great.
22:14 Yeah.
22:15 So he said he decided to join.
22:17 He said, I decided that retirement was boring and have joined developer division at Microsoft.
22:22 To do what?
22:23 Too many things to say, but it'll make using Python better for sure.
22:26 And not just on Windows.
22:27 There's lots of open source here.
22:29 Watch the space.
22:30 And there are 5,000, no, 2,100 quoted tweets.
22:35 And I'm not sure how to tell me how many conversations, but there's like an insane number of replies to it as well.
22:42 And a bunch of familiar faces and listeners actually right there all replying to Guido.
22:47 One in particular I'd like to point out is, I'll link to this in the show notes as well, is somebody said,
22:55 I'm wondering, you know, at this point in your career, do they still ask you to submit a resume?
23:00 Yes, they did.
23:02 And I got interviewed by Kevin Scott and Andrew Salzberg and others.
23:05 How cool is that?
23:06 They also asked for my diploma from university, exclamation marks.
23:09 Says Guido.
23:10 Oh my gosh.
23:12 Yeah.
23:13 I would think you're like, you just could walk up and say, hey, I created one of these languages.
23:17 I'm here.
23:18 I'm ready.
23:19 But nope.
23:19 I don't even know if I can find my diploma.
23:22 I'd have to dig.
23:24 I 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.
23:29 Anyway, that's really interesting.
23:32 Okay.
23:33 That's two.
23:34 So extra, extra, extra.
23:35 If you think about popular editors in the Python space, really these days, it feels like it's
23:41 narrowing down into VS Code and PyCharm.
23:43 Like it used to be just completely all over the map when I asked that question on Talk Python.
23:47 And these days it's VS Code, PyCharm, VS Code, or I was on one and switched to the other.
23:51 And Vim.
23:53 Yeah.
23:53 And Vim.
23:53 They don't say something like that.
23:55 It's either Vim or Emacs.
23:56 Yeah.
23:56 It's like one of those types.
23:58 But right here in Portland, Oregon, roaming the streets, we now have a new editor called Nova from Panic.
24:05 Yeah.
24:06 Panic.
24:07 Yeah.
24:08 Yeah.
24:08 Panic is a developer-oriented company that makes native Mac apps.
24:14 And they are right downtown by Pal's Books.
24:17 You can see their office from the coffee shop, I think.
24:20 Cool.
24:20 Yeah.
24:21 So anyway, they built this thing called Nova, which is like a reinterpretation of their interpretation of what a code developer editor should be.
24:30 And 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.
24:39 So I'm sticking with PyCharm.
24:41 I looked at this.
24:42 It looks neat and all, but I'm not using it.
24:43 That 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.
24:51 So that's kind of cool.
24:51 Yeah.
24:52 It's got a Vim mode.
24:53 I'll try it.
24:53 I think it does.
24:54 I'm pretty sure I remember it.
24:55 All right.
24:56 Last thing.
24:56 Extra, extra, extra, extra.
24:58 I installed Big Sur on my Mac and it didn't die.
25:02 And all the Python things seem to be working.
25:04 All the websites run.
25:05 The MongoDB stuff's working.
25:07 So that's really pretty neat.
25:10 Homebrew stopped working, which is very frustrating because that's how I manage things like Python.
25:14 But I just had to upgrade Xcode to the latest edition and then it was good again.
25:18 I don't think I put Homebrew on my computer.
25:20 I love Homebrew.
25:21 I probably do.
25:21 Yeah.
25:22 I like it.
25:22 Install Python.
25:23 Install MongoDB.
25:24 Install a lot of things like that.
25:25 Open SL.
25:26 SSL.
25:27 Seems always getting there somewhere.
25:28 And also I said that I ordered a new MacBook Pro instead of the Apple Silicon thing.
25:36 I actually canceled that and I'm getting a MacBook, a Mac mini, Apple one.
25:40 Very exciting.
25:41 I'll let you know how it goes.
25:41 Oh, I can't wait.
25:42 Actually, I didn't know they were still making minis.
25:45 They revamped it.
25:46 It is now faster than any mobile Mac.
25:50 And the only thing that will beat the Mac mini is the Mac, like the $5,000 Mac Pro.
25:56 But sometimes the $600, $700 Mac mini will still beat the $5,000 Mac Pro.
26:00 It's like ridiculous.
26:01 I'm not going to get one of these.
26:03 I already got like a really beefy monitor.
26:06 Yeah, exactly.
26:06 It'll do one 6K and one 4K monitor.
26:09 So dual monitors, 6 and 4K.
26:12 I'm telling you, man, this thing looks incredible.
26:15 You look at the Geekbench scores.
26:16 You look at the reviews.
26:17 It's really awesome.
26:18 And the price is like.
26:19 Okay.
26:20 So I got like $1,500 back by canceling my MacBook order and a faster computer.
26:25 Nice.
26:25 So anyway, we'll follow up on that.
26:27 Let's see how it goes.
26:28 Anyway, that was extra, extra, extra, extra.
26:30 You're all about it.
26:31 Nice.
26:31 Well, so normally my spot would be number 6, but that'd be like, what are we at?
26:37 Like 9 now or something?
26:38 Yeah, we're at 9, yeah.
26:38 Okay.
26:39 So actually, this is a cool article.
26:42 I love this story.
26:44 Dale Markowitz wrote an article called, I'm masquerading it right now.
26:49 But it's a Python-driven AI stylist inspired by social media.
26:53 No way.
26:55 So it looks at like Instagram and like influencers and stuff and says, this is how we think you
26:59 should dress and look?
27:00 Yeah.
27:00 So one of the cool ideas, and it's so cool.
27:03 So she works for Google.
27:05 So she's using a whole bunch of Google tools that are available to everybody else too.
27:09 Things like Google Storage, Firebase, Cloud Vision API, Product Search API and stuff, which
27:15 actually I've never played with any of these, but it's kind of neat that they're
27:19 available to really anybody that they want.
27:21 And so the idea is she took pictures of all of her, every item in her closet.
27:28 And then has like folders for containing the pictures of her related.
27:34 So like, let's say if you've got a shirt or jacket, a few angles of the shirt, and then
27:39 threw those in a directory and then did that for everything in her closet.
27:43 And then took influencers that she likes, like a couple of social media accounts that do fashion
27:50 shots that she likes how they dress.
27:52 And then throws AI at it and scripts the whole thing with Python.
27:56 So this thing will tell her for this particular person that this look for this from this photo,
28:03 you can kind of do this look if you use this shirt and those pants and these shoes.
28:09 So you've already like what you've already got, you can remix it this way.
28:13 Yeah.
28:13 And I think that's, it's probably more of an ad for Google AI products, but I think it's
28:20 a cool, like you could do this, you know, with some free time and stuff and with some Python
28:26 code to push it together.
28:28 I love this idea.
28:29 It's pretty cool.
28:29 Yeah.
28:30 It's pretty.
28:30 All right.
28:30 Two thoughts.
28:31 So one, I remember my statistics class, they talked about, well, if you have like three
28:36 shirts and two pants and five socks and two pairs of shoes, how many, you know, here's
28:42 the combinatorics of how many like combinations you might have.
28:47 Right.
28:47 Yeah.
28:47 So those numbers get enormous, like super quick.
28:49 So this just says like, there's these, these outfits that you didn't even know you could create
28:55 out of like the a hundred million possible things from your closet, which is a combinations
29:00 from your closet.
29:00 That's pretty cool.
29:01 Yeah.
29:01 And also like she had to put it in place.
29:03 One of the things she had to do is put in place like a score.
29:05 So if you like, for instance, if you've got like multiple gray shirts, they all might fit
29:11 picture with the gray shirt, but they, she made it so that there was scoring so that you'd
29:16 get the, like the, you can pick the highest score outfit or something.
29:20 Nice.
29:20 All right.
29:21 That's cool.
29:21 My other one is somebody should do this, but just for hairstyles and like beard styles,
29:26 if you're a man, have it pick a style.
29:28 And then that person has to get that cut.
29:31 Right.
29:33 You're like, all right, this month I'm going to look like this.
29:37 Oh my gosh.
29:38 All right.
29:38 Here we go.
29:39 Why not?
29:41 Oh, okay.
29:42 You'd have to like, sort of make it like short, long to short or something because you can't
29:47 go backwards.
29:48 Yeah.
29:48 Yeah.
29:49 I guess you'd have to like sort by a order because it takes, you got to wait longer to
29:53 get it to grow back out.
29:54 Sort by handling.
29:55 Yeah.
29:55 There you go.
29:56 Awesome.
29:56 Yeah.
29:56 But there's, there's some facial hairstyles that if we could get a tool that would tell people
30:01 to not try certain facial hairstyles based on what they, their face shape is, that would
30:08 be good.
30:08 That would be very, I did see a guy who had like a super big beard and decided to cut it
30:14 off.
30:14 But instead of just shaving it off, they were very careful and they came up with like 10
30:18 or 11 different styles.
30:19 They shave it to one, take a picture, shave it to the next, take a picture.
30:22 It was actually pretty interesting.
30:23 Yeah.
30:24 But yeah, there's some that shouldn't be done.
30:25 All right.
30:27 Well, I already went off the, off the deep end on the extras.
30:30 How about you?
30:31 Yeah.
30:31 Let's skip to the joke, man.
30:33 Oh man.
30:34 Sounds good to me.
30:35 All right.
30:36 So this is a little bit of back to the future, Marty McFly and doc, all that stuff.
30:40 So, you know, he's got that cool DeLorean, that stainless steel DeLorean and it's got
30:46 the flux capacitor.
30:47 So this is a little, little graphic from a dev humor from comic strip.com.
30:53 And it's set in January, 2006.
30:57 All right.
30:57 I'll be Marty and you can be doc.
30:59 Okay.
31:00 Okay.
31:00 All right.
31:01 So sitting in the DeLorean about to take off this.
31:04 So what's it like in the future doc?
31:06 Is everyone using CSS three?
31:07 Wait, wait, you'll see.
31:09 We're heading to 2020.
31:11 Knowing all the problems you have with IE6, I'll give you something to look forward to.
31:16 Then in May, 2020, there's a big billboard that says Microsoft edge.
31:20 The IE successor based on Google Chromium engine is coming to Linux.
31:24 Incredible.
31:25 Why?
31:27 Okay.
31:27 Yeah.
31:29 Because it can.
31:30 Just because it can.
31:32 I have.
31:33 So I've got a work computer that's Windows and I still don't use Edge.
31:38 And you're so far behind the times.
31:40 I've got Edge installed on my Mac.
31:41 You do?
31:42 Apparently it installs on a Mac.
31:43 Yeah.
31:43 But do you, did you install it?
31:46 I did.
31:46 Now the question is, do I use it?
31:49 I've got like several browsers that I just don't really use.
31:52 I've got Edge.
31:53 I've got Brave.
31:54 And I've got Opera.
31:56 And I don't really use any of those.
31:58 I just basically use Firefox.
31:59 Unless Firefox doesn't work, then I use Chrome.
32:01 Yeah.
32:02 Okay.
32:02 So, yeah.
32:03 But I technically have it installed.
32:04 I get this big pop-up that has to update it about every three weeks.
32:08 Like, there's an update for your computer.
32:10 Click here to upgrade Edge.
32:11 I'm like, I don't even run this thing.
32:13 Why do I keep getting this?
32:13 I know I get it.
32:15 But like, why do I have to keep getting it, I guess?
32:16 You know, there's still lots of people that don't know what browser they use.
32:20 They just, they don't even know what, if you ask them what browser they use, they
32:24 don't know what you're saying.
32:25 Yeah.
32:25 It's just the internet.
32:27 Well, what do you look on the websites for?
32:29 I open the internet.
32:31 You know, the internet is not an application.
32:33 What?
32:34 It's not?
32:35 Awesome.
32:36 Yeah.
32:37 So, that's a pretty good little shoot to the future one.
32:41 Yeah.
32:41 So, link to that in the show notes.
32:42 People want to check out the graphics.
32:44 Well, thanks a lot.
32:45 Yeah, you bet.
32:45 Thanks for being here.
32:46 And thanks to everyone for listening.
32:47 See y'all.
32:48 Bye.
32:48 Thank you for listening to Python Bytes.
32:50 Follow the show on Twitter via at Python Bytes.
32:52 That's Python Bytes as in B-Y-T-E-S.
32:55 And get the full show notes at pythonbytes.fm.
32:58 If you have a news item you want featured, just visit pythonbytes.fm and send it our way.
33:03 We're always on the lookout for sharing something cool.
33:05 On behalf of myself and Brian Okken, this is Michael Kennedy.
33:08 Thank you for listening and sharing this podcast with your friends and colleagues.