#243: Python on Windows is OK, actually Transcript
00:00 Michael Kennedy: We all love the Python language, but it's the 200,000+ packages that actually make Python incredibly useful and productive. But installing these packages and even installing Python itself can vary across the different platforms. In particular, Windows has had a hard time. Many of the library authors don't use Windows, and so they don't test their packages on that platform. Tutorial authors often start their tutorial steps by activating a virtual environment. That's great. That's the great first step, but is usually source venv/bin/activate. And that doesn't work on Windows. Yet over 50% of all developers programming in Python, do so on Windows. In this episode, we'll welcome back Steve Dower. He works at Microsoft and is a Python core developer. He has a bunch of statistics around Python and Windows for us. He also has tons of good news on how Python and Windows is getting much better. This is Talk Python To Me, Episode 243. Recorded on location at Microsoft Ignite in Orlando, Florida, November 8th, 2019. Welcome to Talk Python To Me. a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via @talkpython. Hey everyone, Michael here. I'm excited to tell you about our latest course. Yes, we just released one a week or two ago, but here's another. This time it's a nine hour course called Python for the .NET developer. The idea is, if you have experience with C# and .NET and would like to get better at Python, we'll take a bunch of common applications from the .NET space and recreate them in Python. For example, we'll take a data driven web app in ASP.NET and Entity Framework and recreate that in Flask and SQLAlchemy. This means you can take all the concepts and ideas that you know if you're a .NET developer and quickly transitioned to being an effective Python developer. Are you the sole Python developer and a .NET shop? Maybe your team or coworkers could quickly use their .NET background to get up to speed on Python. To make it an important part of your tech stack. There's even up a for my team button. Just click that, enter the number of team members you have and you'll probably get a discount to boot. I was also just a guest on the excellent .NET Rocks podcast with Carl Franklin and Richard Campbell. If the idea of the Python for .NET developer course intrigues you, just visit dotnetrocks.com?show=1665 to hear us discuss this from both sides of the technology fence. So check out the course at talkpython.fm/dotnet, D-O-T-N-E-T, and convert those C# skills to Python skills. Now let's go talk with Steve. Steve, welcome back to Talk Python To Me.
02:57 Steve Dower: Thanks for having me back.
02:58 Michael Kennedy: It's great to have you here. We're recording on location here at Microsoft Ignite. So, a lot of fun to do that at the conference here.
03:05 Steve Dower: Yeah, is this your first time at Ignite.
03:07 Michael Kennedy: It is my first time I at Ignite.
03:08 Steve Dower: How have you found it? I've been a couple of times.
03:11 Michael Kennedy: I am very surprised at this place to be honest. So to me, big conferences are PyCon. Microsoft Build is a pretty big conference. This thing is like six times, seven times as large as those. The scale is crazy.
03:27 Steve Dower: This is 30,000 attendees, at least on the first day, I feel like it drops off.
03:30 Michael Kennedy: I don't think there's 30,000 today.
03:32 Steve Dower: We're on the last day. It's kind of quiet.
03:34 Michael Kennedy: Yeah, it's way, way more quiet. But yeah, I actually found it really nice. I've made a lot of cool connections and met a lot of people. I've met a lot of Python people even, run into some some folks. So I'm finding it to be a cool event.
03:47 Steve Dower: You had an interesting person come up and ask you about your laptop.
03:50 Michael Kennedy: Oh, yeah. Yeah. So it is, the mix of the audience. It's not really a developer crowd. It is sometimes it is a developer crowd, but it's also an IT crowd, it's a SharePoint crowd. It's a dev ops crowd, it's a cloud person. There's all these different, like all the computing and IT folks brought together. So I was sitting around, actually getting ready for this interview to talk with you. I was taking some notes about what we're going to talk about. And this guy comes up next to me. He's like, "Hey, that's a cool Surface Book you got there. I don't think I've seen that one before." I'm like, "It's really cool, but it's a Mac Book." Not a surface Surface Book or Surface laptop, or whatever he called it. So yeah, it's just it's really funny. And I think that actually is, it's an interesting angle to what we're going to talk about today.
04:31 Steve Dower: Yeah, it's such a different crowd here compared to the Python conferences where we'd normally hang out. I feel like I've invited you into my house for this one.
04:39 Michael Kennedy: Yeah, I've come to visit you this time, not the other way around, that's right. So yeah, I think at PyCon, non Windows computing or development is pretty common. And here like, no joke, they are they were mistaking my Mac for a Windows machine and like, "Oh, well, I only do C#." "Okay, that's cool, yeah, I know C# too, but now I'm doing Python over here right now." Things like that. And it's cool to be part of these different communities.
05:05 Steve Dower: And it's been really exciting to see the change at Ignite over the years, and Build in fact, 'cause they are very different communities. But the growing Python that's showing up in them, I feel the first or second time I was at Build and Ignite, which would have been 2014 or so, about five years ago. People were asking, what's Python? Why are you here? Well, which is...
05:27 Michael Kennedy: What are you doing that our conference? Why did you invade it with your open source weirdness?
05:32 Steve Dower: Right, exactly. It's like, what's your angle here? And they were kind of suspicious. And now it's at the point where I actually had someone come up to me yesterday and say, "Because I was here, because I was actually here and saw everything going on, I now want to learn Python." And that, I mean, I've never heard of that happening at the Microsoft conferences before, but that's really excited.
05:53 Michael Kennedy: Super exciting, yeah, it is exciting. I don't know, maybe they saw some kind of machine learning presentation or something, and they're like, wow, I thought this was a scripting language. Look what they're doing.
06:04 Steve Dower: Yeah, we had a lot this year. I think two years ago, I was the only Python presentation at the entire conference, which was...
06:11 Michael Kennedy: There's a lot of presentations at this. That's a very small percentage, right?
06:14 Steve Dower: There's like, I don't know, we have this huge screen behind us with about eight sessions running in parallel. And that's just this end of the rebroadcasting. There's probably like 15 tracks or something crazy going on. But no, this year, we had, 30 or so sessions about Python. And yeah, a lot of machine learning a lot of data science, a lot of app development. We're covering a lot more angles now. And it's really exciting.
06:41 Michael Kennedy: Yeah, it's super cool. It's not exactly what we're talking about today. But we'll talk about it at some point in the future. You gave a really interesting talk on Python security and plugging that into operating level security. Maybe talk really quickly about some of the stuff that's coming there, and what you talked about.
07:00 Steve Dower: I move from projects to projects that I'm working on. One of the biggest things I've been working on recently is getting auditing hooks, which was PEP 578 into CPython.
07:07 Michael Kennedy: That's in 3.8?
07:08 Steve Dower: That released in Python 3.8. And now it's time for me to go around and teach everyone what you meant to use them for. Because it's like, they don't actually do anything on their own right now. It's just a way of raising low level events from inside the runtime. So you'll get notifications from the socket module, every time it connects to a socket, or every time a file gets opened, every time C types gets used. All of the stuff that you really want to know is going on, but Python doesn't really give you a way to see it. And so the security applications of that, essentially logging, you want to collect all that information. And, as I said, in some variants of the talk, build a haystack of every single event so that when you figure out there's a needle in there, which is someone attacking you're systems, then you've got a chance of figuring out what they were doing.
07:56 Michael Kennedy: At least you have a record of it. It's not just, "Well it's hacked into, nobody knows why."
08:01 Steve Dower: Right, it's like, "Oh, I know we got hacked because people are buying our customer database off the dark web."
08:03 Michael Kennedy: Yeah, and honestly, I think a lot of customers find out they were hacked by saying, I only gave this email address to this. They do the plus thing, like such and such, plus, right by name or whatever @gmail.
08:20 Steve Dower: Or you get one of those emails. It's like, "I know your password, and here it is." An you're like, "How did they get that?"
08:26 Michael Kennedy: Yeah, well, that speaks to a whole nother level of badness. I recently had to sign into a bunch of bank accounts. I'm trying to consolidate, just some retirement boring stuff. But I finally broke down and said, "I have to do this, so here I go." And I tried to log into the bank. There was some workflow where I created an account and I used a 30 character randomly generated password and I couldn't log in again. And I kept getting an error, too long sort of thing. And they were saying, "The password has to be 16 characters or less." And the hash of a password is always the same size no matter how large the input. So what are they doing with that password, if they care about the length of it?
09:04 Steve Dower: I'm not going to speculate on that one.
09:06 Michael Kennedy: But it's probably not good.
09:08 Steve Dower: That may not be where you want to consolidate all of your retirement savings.
09:10 Michael Kennedy: I was trying to get away from that place. So I feel all right about that. So what you were talking about with the the Python stuff is, there's really interesting hooks that you can plug into for compile, or evaluate, or execute code. There's a bunch of neat stuff that you got going on.
09:26 Steve Dower: Yeah, and that's one of the really scary things that Python can do, that most other tools installed on the system can't do, is you can obfuscate the command line. And so you can pass in, the example I showed was, a big fat base64 string, wrapped up in a little bit of decoding and eval, to dynamically essentially decrypt code and run it without anyone actually being able to see what it is and so you don't know what it's doing until you go through and decrypt it. The sample I showed then went off and downloaded more code off the internet and decrypted that.
09:55 Michael Kennedy: Yeah, 'cause once it started, then it's trouble.
09:57 Steve Dower: Yeah, and so being able to hook the compile event every time a bit of Python code gets execed, or evaled. You see what's going on. And it's really hard. People have tried to sandbox Python and just take those things out. And it turns out that doesn't work well. Firstly, because you need them for a variety of things in the language and standard library. And there are other ways to work around that and to still compile code. So this way, you don't block it hard. But you get to see everything that goes through it. And then if something bad does happen, at least you know about it.
10:27 Michael Kennedy: Yeah, it looks really positive. And I don't want to talk more about it, because it's not really the topic of the show.
10:32 Steve Dower: Let's do that one later.
10:33 Michael Kennedy: Yeah, we'll do that as another show. But that's what you were here talking about. And the audience was full, people are really interested in this.
10:38 Steve Dower: Yeah, there's a lot more security minded people here. I did run around and do a quick survey, or just a quick chat with everyone who was attending. It was a really interesting diverse crowd.
10:49 Michael Kennedy: What was the mix?
10:50 Steve Dower: It was equal parts developers, security administrator, IT management. It was a pretty good spread across all the roles that would be interested in managing where and how Python is used in the setup.
11:03 Michael Kennedy: Yeah, the people asking questions afterwards were like, "I'm not a developer, but I have to oversee the execution and protection of this stuff, and so on. So help me understand how to do that with Python." That's pretty cool. All right. Now, let's talk about Python on Windows. It's okay, actually.
11:19 Steve Dower: It's okay, actually, yeah.
11:21 Michael Kennedy: That's awesome. You know, when I go to a lot of conferences and especially I think PyCon falls under this banner, you walk in and it does feel like most people are on some kind of Mac, or maybe they're running Linux. There's some Windows folks there. There's some Surfaces and whatnot, but it doesn't seem to be very, doesn't seem to be the majority does it?
11:44 Steve Dower: There are more and more Surfaces, which we're very excited about. But, yeah, there is always an army of glowing fruit staring back at you while you're speaking to that crowd.
11:53 Michael Kennedy: That's right. They just stand out, mocking you there. Their little bite. Yeah, so it can feel like, to a lot of Python developers, and especially I think the most relevant audience is the people building Python packages.
12:07 Steve Dower: Yeah, so it is certainly the most popular platform, that and Linux, for the people that are building the open source stuff that we know and love and rely on. And I think what's really interesting is that that's about the only data point that really looks like that. It's a bit of conference bias, I think. As we see at Ignite, as well, it's biased in the other way. And just through that kind of selected audience, you're going to see a certain set of people. But the problem with that, and the problem with all diversity type topics is, that's all you see, and that's what you believe reflects reality.
12:42 Michael Kennedy: Right, how would you know otherwise?
12:44 Steve Dower: Exactly.
12:45 Michael Kennedy: It's not exactly that the same thing. But Scott Hanselman, also from Microsoft, has a really interesting thing. He did a blog post on dark matter developers. Are you familiar with this idea? Yeah, it's that there's a whole bunch of folks out there, who write code, they go to work. Maybe they work at some big company. They're not so passionate that they're on Twitter all the time. They're not going to conferences or the meetups. They just, they're happy programming. They do their job and they go home, and they're not blogging, tweeting podcasting about it. And that world probably looks a little bit different. What those people need, but it's still they're really important consumer and user of programming languages.
13:21 Steve Dower: Yeah, absolutely. And I've met quite a few of those developers. And through visiting, any of the big companies or financial institute's, like in New York. I've gotten to meet some of those guys. And it's like, yeah, they show up in a suit. And then they go home and they stop thinking about coding completely for the night.
13:39 Michael Kennedy: That's fine, right? If that's the...
13:40 Steve Dower: That sounds great. I wish I could stop thinking about coding at night.
13:43 Michael Kennedy: I know, exactly, exactly. So let's talk about it. So it feels like conference reality is like I don't know. 70% Mac, 15% Linux, 15% Windows. But then in your presentation you did a PyCon, you talked about, "Well, that might be what the survey around here is. But let's just look at the numbers. The real numbers." So what are some of the numbers?
14:07 Steve Dower: Yeah, so I went and tracked down. There's there's a few data sources that everyone has access to, that I went and looked at And there's a few that I've managed to speak to some people individually and get some numbers out. PyPI is a great source of who's downloading various packages. And so I pulled that one up and checked out a few packages. There's no easy way to query the whole thing. And it doesn't really make sense to do that.
14:31 Michael Kennedy: It doesn't make any sense to measure pywin32, or something like that.
14:35 Steve Dower: Pywin32 doesn't get installed very often on Mac, oddly enough. So I tried to look at the ones that get installed everywhere and it turned out that it was roughly, majority Linux and roughly equal Windows and Mac. Which already is saying okay, this is different from the PyCon crowd. And interestingly, since then, we've done some more analysis on the PyPI data and found that there's a few packages that have long list of dependencies that may be skewing those numbers even further, in favor of Linux. So there's one particular package, that I won't name, but it's one of the major cloud providers tools.
15:17 Michael Kennedy: So if you grab it and then it's going to grab 20 other things so that counts for 20 downloads from Linux or something like that.
15:20 Steve Dower: It's going to count as a Linux download for those. And we found that particular package had a massive spike on Linux for some reason, and I don't think anyone has dug into exactly why. It's like in the 10s of thousands of downloads a day, well beyond where any other reasonable package should be.
15:40 Michael Kennedy: Right okay.
15:41 Steve Dower: So those numbers are still skewed but they are saying it's majority Linux, whereas the conference is not majority Linux. I had a chat with the the Anaconda folks to see what they can tell me about people downloading from conda.
15:52 Michael Kennedy: I feel like they're a little more enterprise focused and that might have a different crowd.
15:56 Steve Dower: There's a little more enterprise. You see the percentage of Windows downloads increasing there, so it's roughly double what it is for Mac. And Linux is still about half of the overall downloads. The PSF survey, and we've had two of these now. And I believe that there's one going on right now.
16:13 Michael Kennedy: It'll probably be over by the time we finish, by the time we released this, so it's a little bit, I wish we could encourage people to take it. But it'll be great to look at the 2019 results. I suspect we'll see some interesting trends.
16:24 Steve Dower: Yeah, so the interesting thing that happened with that is they change the question slightly between the 2017 and 2018 one. So in 2017, they didn't actually ask the question. And they looked at people's user agents to figure out which OS they were coming from. And that one showed half of all the survey respondents are on Windows, and fewer on Mac, fewer on Linux. And then then there was a big gap. Which some of us speculate it's probably Android and iOS phones. 'Cause you can take the survey on whatever you're on, but half the people responding we're on Windows, which means, that's kind of like a max level, I feel. But then the following year, they asked the question again. But this time they let you choose multiple responses. They say, which ones you develop for? And so the interesting, the only thing that really changed between the two sets of data is that Windows is still 50%. And Linux went from about 10% up to 60%.
17:19 Michael Kennedy: Wow, so deving on Windows, but pushing to the cloud on Linux.
17:24 Steve Dower: My hypothesis and we haven't checked it, and hopefully the current surveys going to help clarify this is if people develop on Windows and deploy on Linux, or they work on Windows, deploy to Linux. And so you already have a much bigger chunk of Windows showing up there than you ever see at a conference.
17:41 Michael Kennedy: How much do you think Docker influences this? Because Docker is like, I feel like it would over count the Linux side of things, because you so often recreate these images and they reinstall and reinstall.
17:54 Steve Dower: Definitely, but virtual environments are going to be much the same thing. So yeah, I think there's a lot of repetition. But I guess virtual environments like now cached for things like PyPI,
18:03 Michael Kennedy: But a fresh, like a fresh change they're not actually going to count the download again. of a low level part of a Docker image, might as well, or CI as well. But CI is probably cached.
18:14 Steve Dower: Ultimately, the point that that I eventually got to with all these numbers is, we don't have a good answer. For how many people are using this. You go and look at at the editors, that we also have numbers for, so VS Code, PyCharm, and their majority Windows, either slim or significant majority Windows and smaller Mac, very little Linux. And about all we can really say is that the numbers don't line up. They definitely don't line up with what we see at a conference. And when you walk around PyCon and you come away going, literally everyone is running on a Mac. Then all we can say is, we know that that's not true. So I feel like conservatively probably half the Python community, half the Python user base is running on Windows either for development and deployment, or just for development then deploying to another platform. So the other stat that I pulled out just for fun, because it's a big number, but is obviously biased. So the python.org downloads, which is mostly where Windows developers will get their Python from. And we see that in the stats that that is vast majority Windows. But the number, it's, I ran some of the analysis for one month, about a year ago now, and there was 20 million unique downloaders in that month. Which is...
19:29 Michael Kennedy: For Windows?
19:29 Steve Dower: For Windows. And most estimates of the size of the Python community, like five to six million developers. And we got 20 million downloads, for Windows, in that month.
19:42 Michael Kennedy: How interesting.
19:43 Steve Dower: So we don't know the exact numbers, but I think we can say that, it's certainly not a minority of the Python community. I would estimate it's about half, maybe more. And it's certainly a big number. And that's about all I'm prepared to say concretely.
19:57 Michael Kennedy: Yeah, sure, and so maybe one of the takeaways from this section is, we need to treat the Windows dev story, importantly, in the Python community. Because a lot of people are doing that. And they're either having a good experience and liking Python more, or a bad experience, and not feeling welcome.
20:17 Steve Dower: Right, and so the thing that concerned me out of that is where are they? Where are these developers at conferences? We have all of these Python conferences all the time. And the numbers vary, but there's nowhere near a representative number of Windows devs coming to our Python conferences. And there's also not a representative amount of pain and suffering that you hear online. I mean, this is my area so I watched the Twitter feed for Python and Windows. And there's a lot of pain out for a variety of reasons. And so I just wonder how much is people trying to get started using Python on Windows and give up, or they just don't feel about welcome, because things are painful. And it seems like they're just, no one's aware of them. No one sees them, no one knows they're there.
21:08 Michael Kennedy: This portion of Talk Python To Me is brought to you by Linode. Whether you're working on a personal project, or managing your enterprises infrastructure, Linode has the pricing, support, and scale that you need to take your project to the next level. With 11 data centers worldwide, including their newest data center in Sydney, Australia. Enterprise grade hardware, S3 compatible storage and the next generation network, Linode delivers the performance that you expect at a price that you don't. Get started on Linode today with a $20 credit, and you get access to native SSD storage, a 40 gigabit network, industry leading processors, their revamped Cloud Manager at cloud.linode.com, root access to your server, along with their newest API, and a Python CLI. Just visit talkpython.fm/linode when creating a new Linode account, and you'll automatically get $20 credit for your next project. Oh, and one last thing, they're hiring. Go to linode.com/careers to find out more. Let them know that we sent you. How many of those do you think are students?
22:09 Steve Dower: I do have some slightly more demographic data from the Python in the Windows Store distribution. So that gives me a little bit more information. There's some age banding and some regional information. And that does certainly make it look like the majority of people installing Python on Windows are college students in the US and China primarily.
22:31 Michael Kennedy: Okay, oh, that's pretty interesting. Yeah, okay, well, it might not be that they're developing on it, they might just need it to run something as well.
22:39 Steve Dower: They may just need it to run. But given how new the Windows Store distribution is, it's kind of unlikely that you'll find it unless you're looking for it.
22:46 Michael Kennedy: Okay, yeah, so, I guess the story is, here's the numbers that you're giving us. You've got a lot of different sources. And they all seem to point at, generally the same trend. Now, what? What do we do about that?
23:00 Steve Dower: Well, and so I was giving a conference talk. So I had to speak to the people in the room, you can, there's only so much value in getting up in front of a crowd of people and telling them that someone else has to do something. I don't like doing that. So I was like, "Okay, what pieces can the people here help with?" Because it's no one's fault, really. It's like, when a conference doesn't reflect the the general population for it's area. It's really hard to say whose fault that is. But I think it's easier to say, knowing who you are, who's here, here are things you can do that will be net positive. So PyCon, as we said, a lot of library developers, a lot of enthusiasts, people writing code, people publishing code. People who are getting paid to do Python development already. A different demographic and whatnot, to some degree as well. And so from that, I'm like, Well, okay, these are the people who are potentially writing the libraries that just grate a bit on Windows. Like for one little reason don't work well for this Windows crowd. And maybe contributing to that, the Python community doesn't really think about Windows. And so I built the talk around that and went through some of the major cross platform mistakes or assumptions that I see people make, that don't actually translate cross platform well. Python already does a fantastic job of hiding most of that, right. And then there's some things that bleed through that can, if you're not aware of them, then you are going to make code that doesn't work well on other platforms. And the best part about it all, is when I started going through those, and planning out the right way to do things. Turned out, they're all just best practices anyway. And they make your code better on all platforms.
24:49 Michael Kennedy: Like, don't treat path as strings, treat them as...
24:50 Steve Dower: Right, treat them as path objects.
24:52 Michael Kennedy: Yeah, exactly.
24:53 Steve Dower: So yeah, that's one of the big ones because most people are aware Windows uses backslashes to separate path segments and POSIX uses forward slashes. And so that's an immediate difference where if you've written your code using the string functions, and so string.split forward slash, that doesn't split anything on Windows.
25:13 Michael Kennedy: Yeah, that's a bad time. Let's start the story of what we can do on Windows, which you say is really actually just best practices for Python code anyway. But we got to get started by having Python on Windows. And you've done some interesting work there.
25:30 Steve Dower: And the fun thing is, this actually happened between two of the times I gave this talk. And so I had to go back and and say, you assumed that this is true. Yeah, and now you're right, because I fixed it in between.
25:44 Michael Kennedy: I've fixed your assumption.
25:46 Steve Dower: People have kind of got the hang of installing Python from the python.org installer. And one of the big differences that that has from if you install it on Mac or Linux is it doesn't put Python on path, by default. There's a checkbox, which I really don't like. I put that there under protest. And I don't like it because when you put a directory on path in Windows, it's not the same thing as putting a symlink in an already shared directory. So you do that on Linux. And you put it in the user's bin directory, and then it just shows up, and the only thing that they get access to is Python. But on Windows, when you do this, you're injecting an entire path with every single file in that directory.
26:30 Michael Kennedy: All the executable stuff, that's hanging out with python.exe
26:34 Steve Dower: All the executables, all the dynamic libraries. So if some other application tries to load the Python dll, it might find the one that you put on path, because that's how the resolution works.
26:44 Michael Kennedy: Right, right, right. And maybe that's like version one of, I don't know, some D library and they're actually looking for version two. And of course, they're compiled against the header for version two. So they are going to hard crash because that's not going to line up. That's a big problem.
27:01 Steve Dower: Yeah, exactly. So I'm not a fan of putting Python on path. That said, my fix for this, which I'll get to, I'm very happy with. But it also doesn't come as a python3.exe or python3.7.exe, it would just be python. Which goes against all of the instructions that are out there on how to run it.
27:18 Michael Kennedy: Right all the getting started tutorial say, type python3 this, pip3 that Probably sources thrown in there. or dot.
27:25 Steve Dower: Oh, source activate, yeah. There's just all these little rough differences. And the first few times I gave the talk, I pointed those out. The last time I gave the talk, I got to actually say, Hey, there's a new package for this. There's a new installer for Python, which comes through the Microsoft Store. It's still released by the Python Software Foundation. It's exactly the same as the one that you get from python.org. It just comes in different packaging. And the nice thing about this is, this one has a more POSIX like system for putting shortcuts on path. So it already comes with, it has a directory that's already on the user's path, that only has essentially symlinks in it. And so in there, I was able to put a python3, a python, a python3 and the python3.7 or 3.8 shortcut, that doesn't have any of the downsides of putting all the other directories on there as well. And so that now makes all of the commands available on Windows, as well as Mac and Linux, in exactly the same way.
28:22 Michael Kennedy: Yeah, that's such a positive thing. So you can go there, and you can now type python3 on Windows. And it means basically the same thing. You don't have to be an admin on the box to install it. As long as you get the store it just lives on, you probably are not even affecting other users on that Windows system, right?
28:39 Steve Dower: No, the only impact it may have another users is if they install Python from the store, then Windows will go, "Oh, I've already got this once, I'll give you the same one." And it's so separates everything by user but it does save them the download.
28:53 Michael Kennedy: Right, but you're not going to break one of their apps by installing it.
28:55 Steve Dower: You can't install anything in their space. They can't install anything in yours. It's a good setup for multi-user Python.
28:59 Michael Kennedy: That's super cool. Another thing that's worth pointing out is even if you don't do that, on Windows 10 now. If it's properly updated to the latest, and you type python3, it doesn't say Python not found, or python3 not found.
29:13 Steve Dower: Right, that was one of the big benefits of putting it in the store is made it really easy for the Windows team to come around and say, "Well, what if we just put a shortcut in there?" It's like, everyone's been asking for years, "Can you just put Python in Windows?" And we figured out the best we could do without taking on a massive maintenance burden, which was, we'll just put a shortcut in there. So you run python, you run python3, and it'll bounce you to the store, where it's then one click to actually get the python and python3.
29:40 Michael Kennedy: Then you type it again, then you're good.
29:43 Steve Dower: Type it again, and you're good. And we're actually seeing literally thousands of people a day installing Python through that.
29:49 Michael Kennedy: And they they probably, maybe didn't even know that that was what they needed to do. They just wanted to run Python. They typed it and it said you don't have it, but click this button and you'll have it
29:57 Steve Dower: I've recommended it to a few trainers and teachers, and they absolutely love it. Because they can now go into a classroom and say, "Just type python3 on your machine. and if it pops up with this, click install. "And now type python3 again." and everyone in the room is ready to go.
30:14 Michael Kennedy: Yeah, a lot of those training situations as well. Those folks don't have permission to install wide open MSIs, and all sorts of stuff that will shut down a class. You're like, "Okay, the first thing we're going to do is install this. We can't install it." Well, this is going to be a real short presentation.
30:33 Steve Dower: The next two hours are going to fly by.
30:35 Michael Kennedy: Exactly, you just going to have to watch. Alright. So I think we started on the first thing is, How do I run Python? Things are not always in the path. The path story is different. Typing python3, until recently used to be a problem they would run into. People would have to Google. Why does python3 not work? How do I get python3? It says, I have Python installed in my installed apps, but I typed python3, and it does not work. So I think people still need to be cognizant of that. Because even though the fix is now there, it's going to be a while before all the Windows machines live in that world.
31:15 Steve Dower: Yeah, it always takes time to roll out new things. And hopefully over time, as more and more people see it, then we'll see more instructions. I'm really looking forward to people not posting new instructions every day on how to install Python the old way. And we start seeing some more people posting how to install it the new way.
31:35 Michael Kennedy: Right, here's the store, click it.
31:36 Steve Dower: And so in an effort to do that, we actually convinced some of the the Microsoft documentation team to put our own how to install Python on Windows page up. So we'll have to double check the URL, but I think docs.microsoft.com/windows/python will get you to some of our getting started with Python on Windows page.
31:57 Michael Kennedy: That's pretty cool.
31:58 Steve Dower: That we invested in writing up and getting good steps. And it'll take you all the way through to, oh you're a student. Here's how to build your first game with pygame. You're a system admin. Here's how to build, how to write a script that will do like some file scanning. So yeah, we're trying to move the entire world forward, rather than leaving everyone in the, here's how to install Python 3.4 instructions, which I still saw pop up recently.
32:23 Michael Kennedy: Oh, my goodness. Yeah, I'm definitely looking forward to a world where there's not a bifurcation of every step until you actually get to running your code. As we do on Mac and Linux, we do on Windows. Another thing that varies is pip3, right?
32:40 Steve Dower: Yeah, so pip always been a little bit better of because it would generate the version shortcuts. It's done that for quite a while. One of the downsides of the Windows Store installation is that you can only add shortcuts into that directory if you're actually the installer itself. So I have to pre declare all of those in the package. And it means that when you pip install a package, it can't update those global shortcuts. And so they go into a directory that's not on your path. pip, these days will print a message saying you should add this to your path. And if you do that, then you'll be just fine. But it does mean that most command line tools that you might install, with pip, you won't get to through the usual name.
33:21 Michael Kennedy: Like Black or PIPx or something like that?
33:24 Steve Dower: Exactly, and that's always been an issue that's always run into problems here and there on Python. And the recommendation for a long time for all platforms, in fact, has been to use python3 -m and the name of that command, rather than try to use...
33:39 Michael Kennedy: Python knows where it is.
33:40 Steve Dower: Python knows exactly where it is. And the other advantage is, if you know, that's the Python you're working with. So we generally recommend this for pip as well. Because if you pip install something, and then Python try and to import it, and your path is messed up. And this can happen on any OS, it happens on Linux, happens on Mac, happens on Windows. Then you'll go, "Why can't I import that package?"
34:03 Michael Kennedy: Right, you type pip instead of pip3 and it accidentally goes into Python 2 because that's earlier, or something like that.
34:08 Steve Dower: Exactly, yeah. And so we definitely recommend, python3 -m pip, even for pip.
34:23 Michael Kennedy: Yeah, Bret Cannon just wrote a big article about that. Talking about how we recommend python3 -m, for all the different things. This portion of Talk Python To Me is brought to you by brilliant.org Let me knock something off your holiday to do list. Gifts. Spread the love to your loved ones by gifting them Brilliant This really excites me, because it's such a fun way to nurture curiosity, build confidence and develop problem solving skills crucial to school, job interviews, or to their career. Brilliant's thought provoking content breaks up the complexities into bite sized understandable chunks that will lead them from curiosity to mastery. Go to talkpython.fm/brilliant and grab a gift subscription to help your loved ones finish their day a little smarter this season. That's talkpython.fm/brilliant or just click the link in the show notes. Or cause some false assumptions that you have that people often make about writing code. So we touched on this first one a little bit. Everyone uses forward slash for path.
35:15 Steve Dower: Yeah, I see this assumption pop up a lot. And it normally looks like, using the string functions, so string.split, .partition, and just passing in a forward slash. That works fine as long as every platform you're on is using forward slashes. But there's plenty that don't.
35:31 Michael Kennedy: I use built in pathlib, or OS.path style to process that, even if I know it's only going to run on a POSIX system, because I don't have to deal with thinking about that.
35:34 Steve Dower: Yeah, there's a lot of, Python has about five different ways you can do this. But certainly the OS.path module is very useful. And the nice thing about that, is you can also import POSIX path directly or NT path directly. If you know you need cross platform behavior, a specific platform behavior.
35:59 Michael Kennedy: Okay, very cool, yeah,
36:01 Steve Dower: I've definitely written code that uses OS.path for some things, and POSIX path for other things. Because that's going to look more like URL, or it's going to be sent to a different system. So we have that option there. But really, we have pathlib now. And we've had pathlib since I think Python 3.4. And that's just so much nicer.
36:20 Michael Kennedy: Yeah, pathlib's really nice. And yeah, but definitely not strings, right.
36:23 Steve Dower: Definitely not strings.
36:24 Michael Kennedy: Okay, because I guess the tie back to Windows is It will break on Windows. You shouldn't do it anytime, but it will actually break, not just be less convenient.
36:34 Steve Dower: It will break, because if you get a Windows path, and so the thing that Windows makes a little more complicated here, is if you give windows a path that has forward slashes, it will go through and corrected for you, most of the time. Not all the time, but most of the time, it'll correct forward slashes to back slashes. But any path that it gives you, or any path that a user gives you, is going to have back slashes in it. And you can't split on forward slash then. You'll always get one element back. And that's probably not what you wanted.
37:00 Michael Kennedy: No, that's not good. Also route paths are kind of funny. It could be weird maps or volumes are other stuff. Like the C colon back slash.
37:08 Steve Dower: It gets very interesting the range of shortcuts for identifying a drive or a mount point. So there's the internal system representation, which for a drive often looks like a guid, like it's a globally unique identifier, and no one's typing those. So we have a shortcut that's going to be like C: or D: There's SMB shares, which are backslash backslash computer name, backslash to enslave. Which part of this is the root of the drive? It's like, if I'm dot dotting up the directory, how far do I go before I have to stop? Because it varies, and it's different. And the Python libraries know how to handle that. We've built that logic in.
37:47 Michael Kennedy: Yeah, so just don't use strings for paths.
37:50 Steve Dower: Don't use strings for path, thank you.
37:51 Michael Kennedy: Absolutely.
37:52 Steve Dower: Use pathlib.
37:53 Michael Kennedy: Speaking of paths. ~/ is always good, that gets me home, right? There's no place like ~/.
38:00 Steve Dower: No place like ~/. Yeah, people love putting the configuration files in ~/. And so Windows doesn't have tilda. Tilda is just a path character. You can put that anywhere you want. And it's just another part of the name.
38:16 Michael Kennedy: That lives in the working directory.
38:17 Steve Dower: That lives exactly where you are right now. It is where your heart is, not where you want to be. But people do make the, they do very quickly figure out. Oh, I should be using the user profile environment variable, or figure out the home directory some other way to do that. But even that, depending on what you're planning to use it for, doesn't necessarily line up. You see ~/ dot something, for a lot of configuration files on Linux, but on windows that just gets thrown into the root of the users directory, which actually has a set of sub directories for different purposes. And you start digging down, particularly for app data, local app data roaming, all that kind of stuff. And they all have different reasons and different behaviors. So app data roaming will actually propagate between different machines on a network, if that's configured for that. So anything you put there is going to be copied, or maybe copied onto a network share, and automatically copied down if the user logs in somewhere else. Which is really handy, but if you're using it for 10 gigabytes worth of log files, then everyone's going to be real upset about saturating the network and login taking so long. Yeah, exactly. The domain controllers out of disk space, we don't know why or wherever it gets stored. But the other thing is, that's a very hidden directory to use. It's about as hidden as a dot file. But if you're creating something that you want the user to see and modify, then they have a Documents folder for that. And you probably want a subdirectory in that Documents folder anyway, just for organizational purposes. And so you start looking at a very different layout from where you would keep all of this stuff on on a POSIX based system.
39:52 Michael Kennedy: It makes me crazy when every program thinks it's projects folder needs to live in the root of my user directory. Like, no. Wouldn't need to be top of.
40:02 Steve Dower: Doesn't need to be. And that doesn't even help on Windows, because it's such a pain to get there, because all of the shortcuts go deeper. Documents is really easy to get to. Pictures is real easy to get to, Videos is really, that random folder you created is very hard to get to.
40:15 Michael Kennedy: If you use the address bar of the file stuff. Yeah, for sure. So the fix for all the path problems, were to use some of the built in path libraries. What's the fix for this?
40:26 Steve Dower: So this one, the recommendation I have is to use aptos, which is a module made for this purpose. It's slightly opinionated. So you will see good programs not behaving exactly like it does, but it's a very simple module. It's a single file, so you may even just copy it into your project and keep it around. But it lets you query for a specific kind of purpose, and so you can say give me the users data directory, give me the users configuration directory. Give me a cache directory
40:54 Michael Kennedy: The documents directory.
40:56 Steve Dower: Yeah, I believe it will give you the documents directory. I think that may be one of the ones that's missing.
41:01 Michael Kennedy: Okay, well you can obviously, get the home directory and add documents.
41:04 Steve Dower: An that's, exactly. That one's not too difficult to add in if you find yourself needing that. But it does it cross platform. So you input the module and you query for a directory and it will pick depending, on what platform you're on, and give you a sensible layout that's not going to surprise, not going to upset anyone who's using it.
41:22 Michael Kennedy: Yeah, that's great. Strings are also interesting.
41:25 Steve Dower: Strings, well, yeah. Unicode is the interesting thing. This section of my talk got better and better every time I gave it because people came and gave me more context and more information. But let me pose your a trivia question. Which was invented first, or which was released first, Windows 1.0, or the Unicode standard?
41:47 Michael Kennedy: I would Initially guess Unicode but I'm thinking this might not be right.
41:51 Steve Dower: You'd think so Unicode is, Unicode, it's been around for a long time.
41:54 Michael Kennedy: Stuffing quotes, it doesn't seem like that's totally new. It seems like that should have been right at the beginning.
41:59 Steve Dower: It should have been, unfortunately not, Windows came out first.
42:03 Michael Kennedy: There were no emojis, that's the problem.
42:05 Steve Dower: Yeah no one needs, no one wanted emojis at that point yet. But because Windows came out first, they had to handle internationalization without Unicode, which is why the code page system is there. And there were previous systems that were already using it. So this well predates Unicode regardless. But it was released in Windows. And about six years before Unicode even came out, it was released in Windows. Which means that we have this very ingrained system of code pages and eight bit character encodings. That now you have a compatibility burden. So when Unicode did come out, then it just wasn't possible to go back and say, well forget all of that, we're going to switch to Unicode.
42:42 Michael Kennedy: And so much of it was at the C level where you pass char pointers. Char pointers are the wrong size for Unicode.
42:49 Steve Dower: And so okay, trivia question number two, which came first UTF8 or UTF16?
42:53 Michael Kennedy: You start with a smaller one, right?
42:54 Steve Dower: You start with a small.
42:55 Michael Kennedy: UTF8?
42:56 Steve Dower: Afraid not, UTF 16, or in fact, UCS2. So the two byte character encoding was the first one. And turns out windows did actually go, Oh, we should adopt to this because this is now the standard. And that's why the Unicode encoding is two bytes throughout windows, because that was the official standard at the time window said, Oh, hey, let's do this. And then UTF8 came as proposed, like four or five years later, and eventually, and now that's the standard. And I have no doubt that if Windows restarted,
43:24 Michael Kennedy: It would just be pure UTF8.
43:26 Steve Dower: It would just be pure UTF8, absolutely. You do get some bloat on a number of languages and a number of very important languages to Windows. So arguably, there's a kind of equalization of memory wastage for certain character sets. If you're in English, then yeah, UTF8 is vastly more efficient. But as soon as you get into many of the Asian languages, and some of the European languages, the 16 bit.
43:52 Michael Kennedy: It takes more bytes to actually do the UTF8 stuff.
43:55 Steve Dower: You end up with every single character taking four or five UTF8 bytes.
43:58 Michael Kennedy: Okay, that could be a lot.
44:00 Steve Dower: Whereas it would only be one on or in some cases two UTF 16 words. Which averages out to be smaller. So maybe there's a case for either of those. But just for historical reasons, Windows has ended up with UTF16 as the default choice of Unicode. And there's no real way to go back and undo that, at this point, without massively disrupting the entire ecosystems
44:23 Michael Kennedy: No ones rewriting Window with breaking changes that big.
44:27 Steve Dower: And so what that leads to, as far as Python is concerned, is a fundamental difference in how paths get passed around as strings. Because on POSIX, it's bytes on the lowest level it's bytes. And when it comes into Python, then you can keep it as bytes and pass it back out as bytes, and make sure that nothing changes and gets disrupted on the way there. And Windows has the API's for that. But it's doing a silent conversion in the background through the old legacy code page system, which can lose data, it can absolutely lose data. And it seems semi random. This was a big Python 2 problem was it would do this, and so you get...
45:05 Michael Kennedy: This was one of the major breaking changes from 2 to 3, honestly, right. in terms of the effect that it had.
45:11 Steve Dower: In terms of the effect, but it's also one of the most positive ones. Because I heard from many, many students in particular, who logged into Windows with their name, and their name is Chinese characters or Korean characters. It's a language that Python 2 could not support. And sometimes they do it on machines where the code page, so the legacy support for Windows can't handle it either.
45:36 Michael Kennedy: Can't even say my name.
45:38 Steve Dower: They couldn't even print their own name, it made them feel terrible. So the break for that, for Python 3, was painful. But have a handful of other libraries that still use bytes for paths. Because it's more performant in their context. But it's also going to break these people, again, even on Python 3 if you're forcing all the file system stuff to go through this arbitrary encoding. And so the preferred one is to just use string on Windows. Str, instead of bytes. And in fact, it works fine on POSIX as well. We implemented on that side, the conversion for file system stuff to be perfectly round trip. So even if there's characters in paths, that if you converted to text would be corrupt, and it would throw exceptions, we actually preserve those, and they'll pass back in. So there's a little bit of a performance impact.
46:31 Michael Kennedy: But it'd be better to be slow and right than fast and wrong.
46:34 Steve Dower: Absolutely, absolutely.
46:36 Michael Kennedy: Right, and that's a super easy fix, just like use string.
46:39 Steve Dower: It's never quite as easy as just use string. But where it gets really interesting is if you're doing things like reading in a list of files of the file system and writing it out to another file, because you're in control of that encoding. So Python has not, and probably will not, change the default encoding of a file. Where you open a file to write text.
46:59 Michael Kennedy: What is the default encoding?
47:01 Steve Dower: The default is the system locale, typically, which for most non Windows users these days, is UTF8. And for every Windows user whatever the legacy encoding is. And this is a backwards compatibility thing. We would love to change it to be UTF8 by default, but now you can't read in the file that you wrote with the previous version of Python.
47:25 Michael Kennedy: That's tricky, that's a hard sell. Very disruptive and concerning. Like, what do you mean my files corrupted? Yeah, yeah, that won't feel good.
47:34 Steve Dower: And so even opening a file to write to, if you want it in UTF8, then you should just specify.
47:41 Michael Kennedy: I always put UTF8. I wasn't sure what I'd get if I don't put that though.
47:43 Steve Dower: Yeah, you will get, it's not it's not entirely random.
47:46 Michael Kennedy: But it's not entirely the same always.
47:48 Steve Dower: It's not a complete encoding. So there will be characters that can't be written out in that.
47:54 Michael Kennedy: Well, let's maybe round this out with one more false assumption here. We're sitting here looking at my very fancy Surface Book Pro, no, I mean Mac Book Pro. And I'm a library developer. And maybe I can't test on Windows, I'm sympathetic. Half of my users are Windows developers, but I can't verify whether my library works, or not.
48:18 Steve Dower: Yeah, and I get this one. It's very easy to, like. Or it's not very easy to get a Windows setup, necessarily, that it's very hard to switch the platform you're used to another one, just for the sake of being able to address all of your users. But at the same time that's drawing the line too close. And it's like, I'm aware of a problem. And I'm aware that I need to solve it. And I think of one solution, and that's too hard. And so I stopped thinking about it.
48:47 Michael Kennedy: Yeah, that's hard.
48:48 Steve Dower: And that's kind of what I see happen occasionally here. And it just, it makes me just choke up a little bit because I'm like, that's just bad and lazy. And we have so many better options these days.
49:02 Michael Kennedy: It's really saying, thanks, but you're not welcome here, to half the users.
49:08 Steve Dower: Absolutely, And I could get it 10 years ago, because 10 years ago, we didn't have GitHub. Or if we did have GitHub, we didn't have the reach of GitHub like we do now.
49:18 Michael Kennedy: Right, or Azure pipelines, or all the CIs.
49:21 Steve Dower: Azure pipelines, GitHub actions, we didn't have all of these things where you can either set up to do it automatically and not need to own the machine yourself. And we didn't have the reach to be able to say, Hey, I need help with this. Can someone come and help me test on Windows? Because that's how it always happened, essentially.
49:39 Michael Kennedy: Honestly, I think the hardest one to, if it's not you, the hardest one to test for is Mac.
49:44 Steve Dower: Yeah, right because I test none of my stuff on Mac. That's not quite true. That's not quite true, but I do it all through CI.
49:51 Michael Kennedy: Yeah, exactly. But it's tougher to get CI for Mac.
49:55 Steve Dower: It is, yeah, it is.
49:56 Michael Kennedy: Windows and Linux are pretty easy to get there.
49:59 Steve Dower: They're pretty easy. And Azure pipelines and GitHub actions both have Windows, Mac and Linux. And I think at this point, they have multiple choices for all of those.
50:07 Michael Kennedy: Okay, so like Mojave versus Catalina. I think Windows 7 versus 10 or something,
50:12 Steve Dower: I don't think we're offering Windows 7 as an option on any of those.
50:15 Michael Kennedy: I heard that.
50:16 Steve Dower: The builds actually run on Windows Server, not even Windows client. So you do get a choice between Windows Server 2016 and 2019. And choice of the Visual Studio version, which is primarily, people should just be on the latest, for the most part. Python stuff is not that involved in the build tool sets to really need to, I must stay on the old one anymore. We made sure that Python works with future builds as well. So you can build for old versions of Python with newer tools now.
50:42 Michael Kennedy: Yeah, so that's cool.
50:43 Steve Dower: So the options and the opportunities there is really good. And they're all free. It doesn't cost anything to just put on your page, I'm looking for someone to help with Windows maintenance. And it doesn't cost anything for an open source project to be on GitHub actions.
50:58 Michael Kennedy: And people are probably excited if they're working on Windows. Oh, this is a really easy way for me to contribute to this project. All I got to do is run the test, and just try a few things out.
51:08 Steve Dower: You'll get more contributors, because you're not telling them you have to switch to Linux to contribute to my project, because you've got the CI running on Linux as well. So it opens up the pool of contributors. And it helps with releases. One of the biggest problems we see every time we release an update to Python. So Python 3.8 came out, and we're seeing this happen a bit, is packages don't have wheels ready. They don't have builds that they're not actually ready for Python 3.8. And once you've got to CI set up going.
51:35 Michael Kennedy: Which is almost automatic.
51:36 Steve Dower: Yeah, it's almost automatic. As soon as the CI service has that version of Python on there, or has a way to get it sooner, and we're we're working on making that happen faster, then it's very easy to just spin another build and release that. And all of your users are now successful installing your package.
51:53 Michael Kennedy: Good advice. So that pretty much wraps it up. Do you want to give us the quick summary.
51:58 Steve Dower: The quick summary?
51:59 Michael Kennedy: The checklist, you had a checklist. You don't have to remember all this? Here's the checklist of what you got to do?
52:03 Steve Dower: Yeah, it annoys me when I see people holding their phones up at me while I'm speaking, because all my slides build up. And so there'll be stuff on the slide that's bad. And a big red line is about to appear through it. And someone's already taking a photo.
52:14 Michael Kennedy: Share it on social media.
52:15 Steve Dower: And I'm like, No, wait, wait until it gets crossed out. So I told everyone to wait for the checklist at the end of the talk. Because I did want to make this really actionable and really easy for people to follow up. So the things that I would recommend you check just before the next release of your project, anytime you feel like it. Does the -m option work on it? So if you've got a script entry point. Can you also start your project running by typing python3 -m, name of your project? And document it. Tell your users, this is how you can use it. Are you manipulating paths by hand anywhere? Do you have any .split instead of OS.path.split? Or pathlib objects?
52:50 Michael Kennedy: I like this recommendation, because it's just you should do the thing that's easier and safer. And you'll be, you'll be in good shape.
52:57 Steve Dower: Do I put configuration in weird places? Which, arbitrary paths for storing stuff? It can make a mess but you can lose information and make things a little harder to find. Are you still using bytes for strings? If you've gotten out of Python 2 and into Python 3, then there's no need to do that anymore. That was the problem that we will try to move people off. So feel free to stop, just use the string type. The string type is very optimized for what it does. And do you have continuous integration tools or collaborators on your project? If it's just you on the project, and the problem is that you are not representative of your entire audience. No one person can be.
53:36 Michael Kennedy: No matter who you are, or what you do,
53:37 Steve Dower: No matter who you are, there are people out there who are using your code who are doing things differently from you. And with continuous integration tools, GitHub actions, Azure pipelines. You can have automated systems that look like more of your users, but just welcoming more people in to contribute and collaborate. Even if it's just, Hey, I'll email you when I'm about to do a release. Can you run your tests on it? And a lot more people are willing to do that, than you think.
54:04 Michael Kennedy: Alright, well, it's all good advice. And I definitely think the stats that you laid out are pretty interesting, though.
54:10 Steve Dower: Thanks. Yeah.
54:11 Michael Kennedy: Not the world we often see around us, but it's the world as it is. At least as good as the stats can measure from what we're using now. Cool, alright, before we wrap up the show, let me ask you the final two questions. You're going to write some Python code, what editor to use?
54:25 Steve Dower: I'm bouncing between editors all the time right now.
54:28 Michael Kennedy: What's in the orbit?
54:29 Steve Dower: I use Visual Studio until it annoys me, then I use Visual Studio Code until it annoys me. Then I use Notepad 2 until it annoys me. Then I go back to Visual Studio.
54:38 Michael Kennedy: That's the three body problem, the three editor problem.
54:41 Steve Dower: The three editor problem, yeah.
54:42 Michael Kennedy: Indeed. And then notable PyPI package. What have you come across lately, that's like, "Oh, this is pretty amazing."
54:48 Steve Dower: Oh, I forgot this question was going to be here. So I hadn't thought about it.
54:50 Michael Kennedy: This is like, on the spot.
54:54 Steve Dower: I was playing with something the other day that I've really enjoyed.
54:58 Michael Kennedy: While you're here thinking, I'll tell you about one that I found recently that I though was kind of cool, was httpx.
55:02 Steve Dower: Oh, yes, okay, I do like that one.
55:04 Michael Kennedy: I like it because it's requests compatible, but it also does HTTP 2 and async. And then there's also some intermediate like simpler async parallelism built in it. It's a cool one.
55:14 Steve Dower: I've been helping promote that one. That's in it's early stages. They're looking for contributors who are interested in the next big HTTP project. So I'm excited about that one. I guess I can't claim it.
55:25 Michael Kennedy: Yeah, you claim it, go ahead.
55:26 Steve Dower: I can claim it? Okay, we both like httpx. It is a good one.
55:29 Michael Kennedy: Yeah, it is early days and it could use some help, but I like it as well. I think it's got promise. Cool, alright. Well, Steve, final call to action. People are working their packages or working on their non Windows machines. What can they do to welcome the Windows people?
55:44 Steve Dower: I think it's literally just that, welcome the Windows people. You know, I gave a few simple things you can do to make them feel welcome. But it really just is, this also works on Windows, or if it doesn't, we want it to, please help.
55:58 Michael Kennedy: Yeah they got the checklist.
55:58 Steve Dower: Yep.
55:59 Michael Kennedy: Alright, well, thanks for being here.
56:00 Steve Dower: Great, thanks, bye.
56:00 Michael Kennedy: Bye. This has been another episode of Talk Python To Me. Our guest in this episode was Steve Dower, and it's been brought to you by Linode and brilliant.org. Start your next Python project on Linodes state-of-the-art cloud service. Just visit talk python.fm/linode, L-I-N-O-D-E. You'll automatically get a $20 credit when you create a new account. Brilliant.org encourages you to give the gift of critical thought and knowledge. Visit talk python.fm/brilliant and grab a gift subscription to help your loved ones finish their day a little smarter this season. Want to level up your Python? If you're just getting started, try my Python Jumpstart By Building 10 apps course, or if you're looking for something more advanced, check out our new Async course, that digs into all the different types of async programming you can do in Python. And of course if you're interested in more than one of these be sure to check out our Everything Bundle. It's like a subscription that never expires. Be sure to subscribe to the show, open your favorite pod catcher and search for Python. We should be right at the top. You can also find the iTunes feed at /itunes, the Google Play feed at /play, and the direct RSS feed at /rss on talkpython.fm. This is your host, Michael Kennedy. Thanks so much for listening. I really appreciate it. Now get out there and write some Python code.