Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds. This is episode 280, recorded April 19th, 2022. I'm Michael Kennedy. And I'm Brian Okken. And I'm Pat Decker. Welcome, Pat. Good to have you here. Well, thanks for having me on. Yeah, it's really exciting. You and I were chatting a bit about less new programming languages a bit over email.
And yeah, it'd be fun to just have you come on and share some of the things that you're passionate about and whatnot. Tell people a bit about yourself. I got started with computers way back in the day. High school, I had an Apple II computer at school. Eventually got a Commodore 64 at home. I did Pascal on cards at Iowa State University. And I did a data processing program at Kirkwood in Cedar Rapids. And got my first job out of there about 30 years ago or so.
So I've worked mainframe and PC, Cobalt, C, and a little bit of Python here and there. Fantastic. And it sounds like you're doing DevOps type things today. Yeah, the company has, like many, gone from on-site in their own data center to 80% or so running on AWS. And so I get to share your same frustration with the AWS interface in Python. It's not always obvious how that works. It's updated every week.
And I know the way it is updated every week has got to be some code gen is running somewhere that regenerates it. And it's just never quite discoverable. Right. It's fine once you get it working, as long as you don't touch it or have to understand it. This is not the sign of a fantastic API, but it's cool. You get it working in AWS. Cool. Well, great to have you here. Now, Brian, before we jump over to your first topic, I just want to say this episode is brought to you by Mergify.
I am psyched about what these guys are offering. Mergify is super cool. It's all about automating Git collaboration. And I have a lot to say about Git, but I want to start with Pi because I love Pi. Banana cream pie is my favorite. I'll take a cheesecake. Does that count as a Pi? Is that what we're talking about? No, we're talking about HTT Pi. Still a good Pi. Yeah. The website actually lists in their readme, tells you exactly how they wish you to pronounce it right off the bat. H-A-T-T-Pi.
Anyway, it's a really cool tool. It's a command line tool, and I think we've covered it before, for interacting with... It's especially useful for APIs. So, you know... It's one of the first things I install on any server on my Mac if I get a new one. Straight up, this thing is fantastic. Yeah, yeah. And it's so fantastic that it had 60... This is what I want to cover. I'm sorry to laugh. It had 54,000 stars on GitHub, and then it lost them. Then it didn't? Then it didn't. So, oof, what a cliff.
So, how many does it have now? Right now, if we look, it's got 16.1 thousand. Oh my gosh, it's way back. Yeah. Actually, this morning when I looked, it was just 16.0 thousand. So, it's gotten 100 stars just as I was researching this. So, anyway, the... That's one of the... I guess what I want to shout out to these guys of... It's a cool tool. If you're doing APIs, check it out. And also, if you've started before, restart it because they deserve it.
And what happened was they accidentally put their repo private for... Somebody was trying to do make it private, make something, some other test repo private. And they accidentally put the main one private. And if you're even private for a second, you lose all your stars. So, warning. Don't make your public stuff private. Don't do that. Oops. Wow. That is... Yeah. It's a good warning. It's a great tool, but a good warning. It does have a danger zone. Danger zone. This is going to happen.
But unfortunately, the warning is equivalent if there's zero followers and zero people interested in it. Or you have one of the most popular things on GitHub. Like, it should be like, this is super duper important. You're going to lose 54,000 GitHub stars. Are you doing it? Yeah. Well, and also, I mean, if you work with a lot of GitHub repos and you're like, maybe you made something public for a talk and then you're making it private because, I don't know, the talk's over or whatever.
Or you just don't want to maintain something like, I'm just done with this thing. If you're working with it a lot, maybe you've seen that warning so many times that you're not really reading it anymore and double checking. So, I guess this is just a warning. Double check it. If you can see that warning box, make sure you're on the right repo. Indeed. And Pat, what do you think about this? Yeah, it's pretty tragic.
It's kind of like those end user license agreements where we all see them so often, they just automatically click, I think. Yeah, exactly. The confirmation dialogues and stuff. You're like, well, I have to copy this and paste that there. I just can't continue. So, I'm going to just, you know. Instead of warning danger, I think people see, I want to get my work done. So, click here to get my work done. And then, oh, no, what happened?
Yeah. Yeah. Yeah. Well, Brian, I believe you have at least helped a little bit. David, out in the audience, starting it right now. Oh, I forgot to start also. I'm going to go start. You better get in there and start. Boom. All right. Plus two. Couldn't you? I was going to start myself, but I'm not logged in any of my browsers for some reason on this account. So, no, starting. I have to start it later. Okay. Also, a little bit out of order, but I want to also just cover this other thing.
We are generally, not 100% of the time, because there's still a little bit of long tail stuff happening. But generally, we are moving our live stream of the recording, the one where David said, I'm starting right now. Thanks for being here, David. That recording is now moving to Tuesdays at noon Pacific time. So, if people want to come be part of the live show, see the video version, as well as, you know, just make comments or whatever, not Wednesday, Tuesdays in general.
But check for the next week, couple of weeks, because it is still like some pre-scheduled stuff. Yeah. So, how do people find out when it's coming up next? I would say the best way is just to subscribe to the YouTube channel. And then, you know. Okay. I hate to say it, but push the little bell for notifications. So, it'll tell you like, hey, this thing's coming up. And it'll let you know that we're gone live. Yep. Yep. I don't have a great, better way.
Maybe we could do a mailing list, but it's a little tricky. But usually, stick around on Tuesday Pacific. Tuesday noon Pacific, we'll be recording. Yeah. If you check YouTube once a week, you'll see it's scheduled pretty far out. And then you can get a reminder for just that one thing. You don't have to always get messages. Okay. So, this is a fun one. You mentioned some of the older programming languages.
When I was in college, I was studying chemical chemistry, chemical engineering, math, all these different things. And as part of that, they said, you're going to have to take a programming class. I'm like, super. What's it going to be? Like C++ or something? Remember, this is like early 90s. So, that was a good choice then. And they said, no, you're going to take the most important programming class you're ever going to take in your career. You're going to learn Fortran. I'm like, wait a minute.
No. No, no. I don't want to do that. That doesn't sound like the most important thing ever. But nonetheless, that was one of my first courses I had to take. I only took a couple. Eventually got to take some C++. But Fortran was where it started. So, here is an article that was recommended to us by, let me make sure I get the name right, Galene Swint. And Galene is a PhD researcher and said, hey, here's a really interesting article.
The article I don't believe is by them, but it's about the sort of, I think it was something in their lab they were talking about. It says, the title is, The Counterintuitive Rise of Python in Scientific Computing. Why is it counterintuitive? Because Fortran is fast. And what you want to do is process lots of data and you want to do it fast.
So, here's a really interesting story of people who were doing older stuff like Fortran and C sort of were forced in, coerced into doing a little bit of Python and accidentally made their supercomputer stuff go like a hundred times faster or something in Python rather than in C or rather than Fortran, which is a counterintuitive result, right? Yes, it is. Yeah. So, I think that I'll cover a few details of this article, just put some highlights.
But the reason I'm bringing an article instead of like a tool or something is I think this would be interesting for people to share if they're in a situation where they're like, oh, Python is no good. This is such a slow language. It's like doing math is like a thousand times slower than C. I don't actually know what it is, but it's a lot, lot slower, right? So, it goes through here. And here's a couple of things.
It says, in our laboratory, a polarizing debate rages since, has been raging since 2010. Summarized by the question, why are more and more time-critical scientific computations formerly performed in Fortran now written in Python, a slower language? Ah, Python, a slower language. So, Python does have the reputation of being slow and especially around math. I think it's, honestly, it's earned it.
Unfortunately, I would really love, sidebar, I would really love to see Python adopt something along the lines of value types that can be boxed back to PyLongs, right? So, like, on the stack locally, it's a number, but it gets complicated. But I think that would actually solve a ton of stuff. Anyway, so, yeah, plain Python is slower than Fortran. But when you do computational stuff, you don't do plain Python. What you do is you do NumPy, SciPy, Dask.
All of these things are written in C with a thin coordination layer in Python as part of its API, right? So, here's, like, some graph you can see on the article. And it says, here's, like, you know, 10 to the 1 versus 10 to the minus 2. So, is that 100 times faster if you use Cython or NumPy and so on? So, pretty interesting. And it also shows, guess what? Shocker. Be-de-de-de-de-de-de-de-de. News alert. Fortran is somewhat less popular than it used to be.
Oh, no. Oh, no. So, there's an interesting story of this project nicknamed Projector, written in, written around 2010. So, modern, in quotes, Fortran, by somebody named Bob. So, Bob worked on this project, and there's apparently, let me find the numbers here. It's, like, 1.5 thousand lines of Fortran code. So, a lot of Fortran code. Like, a lot of complicated math bits. The kind you kind of don't want to touch after it works. And it's going to do, it's trying to project something.
Thousands of multiple, multi-perforations of combustion liner onto a 3D complex shape made of millions of polygons. So, that might get complicated when you multiply those numbers together. You know? And it turns out, Bob soon discovered that he was going to use NumPy and this thing called a KD tree. Because there's a bunch of people working in the lab that only knew Python. So, like, here's a Python version you can use. And he thought, this is going to be rough. It's going to be super slow.
So, he went and ran it after he got it done. And the Fortran version ran in 6 hours and 30 minutes. The Python version, 4 minutes. Wow. So, what happened? Is Python 100 times faster? No. Python is easier to work with and has many more built-in algorithms and data structures. This KD tree thing was using a different data structure, is a different data structure that has O log N complexity.
Whereas the Fortran version, because it's so hard to write code in, they just wrote it in the simplest way they can make it work. So, O N. And when you have billions times millions times thousands, O log N wins, even if it's in a slower language. So, the conclusion was, Fortran would have been faster if they had implemented this KD tree algorithm in it. But the people working on it, they're like computational scientists, not PhD data structure type people, right?
Like, they're already super busy just trying to do the programming and not working on, like, cutting edge data structures and optimizations and stuff. So, it was very easy to try one new thing in Python, which would have been very hard in Fortran, and it was a big win. So, anyway, I think the debate about performance, developer speed versus execution speed, but also straight up execution speed, I think it's really interesting in Python. And it's hard to be nuanced enough.
It's always there's some little interesting wrinkle like this. Yeah. And if you're really, you're going to hand code everything anyway, it's also faster in assembly. So, just write assembly. There's a downside to that. Yeah. Why not? I've always wanted to stick to this one processor I really loved forever. But this is interesting. I like it. But it sort of reads like a commercial. So, Bob was programming scientific computing and he was not happy in Fortran. Bob tried Python and now he's happy.
Well, I think Bob unwillingly tried Python and eventually he was happy. Like, it sounded like he didn't want it. He was dragged through it. I like it. Yeah, yeah. I know it does read a bit like that, but I think it's an interesting story. Pat, what do you think? You've had, you have a bit of a historical perspective on all this. Yeah. I didn't go to school for chemistry, but I bet Fortran's not popular among chemistry students, is it? No, not anymore. I'm sure.
I did a little benchmark the other day. I was trying to just see how fast some EFS storage was on AWS versus EBS. And so I wrote a Python script to do that and wrote 10 million records out. And I thought, well, maybe Python is going to be slow. So I thought I'll just whip up a quick thing in Rust here. And as it turned out, Python was 10 times faster at that too. On the same exact hardware. And I'm not sure why that was.
I may not have done something that was optimal for Rust, but there it is. 10 times faster. Yeah, sure. No, that's super interesting. I've seen Python just rip across like OS type stuff like that. It's pretty good. All right. Well, what's your first item, Pat? Are we off to the metaverse? Or is the metaverse off to us? I stumbled across this the other day. We've had Lucas Longa on the show, the programmer in residence.
And it looks like they're going to get another year due to a donation from a meta of $300,000 to the Python Software Foundation. And it was specifically for that purpose. That's a really big deal. And like you said in the past too. Python is very important to meta. Facebook's parent company now. Because much of their infrastructure is built on it. PyTorch in particular. They use it a lot. So their internal implementation of Python is called Cinder apparently.
Which I think I've seen mentioned a few times. But they would like to see continued development. And they're going to fund it, which is awesome. Yeah, that's really neat. I think Cinder is a fantastic thing they've created. And it's interesting. It's open source in the sense of maybe the better term would be source open. Like, here, we're going to put this out here. We don't expect any contributions. And we don't want to put it out there as like a project to grow on its own.
But we think it might inspire people. So here's the source. But what they have contained in there is amazing. There's just so many optimizations and different things. I think they might even have that value type thing I discussed. And I can't remember. But yeah, that's a really cool project that they're working on. So this is great. You know, I think Lucas Schelenga has gone sort of full circle, right? He was independent. He was at Instagram for a while, which is, you know, part of Meta.
And then left to sort of do his own thing and found his way to this developer in residence. And now Meta is sending money so that he stays there. That's like an interesting circle, I think. Yeah, that's good. It seems tenuous, though, that we have it at like one year at a time. That we don't know if we're going to have a developer in residence longer than another year. It's like a postdoc. Hopefully it's a game of tag with Microsoft coming next or something. Yeah, exactly. That'd be great.
And I think there are a couple of organizations doing this. So I know that there was a talk about having multiple folks sort of participating in that group, which would be great because I know there's way more work than Lucas can do on himself. He's quite busy. Alvaro in the audience has a fine name proposal here. The PSF developer in residence should be called the PSF Dunderder. Underscore, underscore, D-I-R, underscore, underscore. I hereby am opening a pep. Well done, Alvaro.
No, just kidding. I want to give him more work for something silly like that. But that's pretty awesome. The PSF Dunderder. Cool. Well, thank you, Pat. Now, before we move on to the next item, let me tell you all about our sponsor today. And like I said, I'm really excited about this. I'm actually doing a bunch of work on some Git presentations. And so I'm just trying to think about what's the workflow with Git and how can we work better, especially doing team type stuff.
So Mergeify is a service that will help you and especially your team be way better with Git. So it's an amazing tool to make you and your team be more productive with GitHub in particular. It's all about leveling up for requests. So some of the features of their platform that you hook into your repositories are automatic merges. So you can set up conditions for an automatic merge. And Mergeify will take care of merging the PR as soon as it's ready and passes all the details.
There's automatic updates. So if you have multiple pull requests, it'll merge the pull requests serially on top of each other. So there's no way to introduce a regression. There's also merge queues. So if you've got like a long CI process and things are slow or you've got lots of code, you can set up priorities and have the most important ones merge fix like bug requests or bug fixes, especially if they're security fixes. They go right here, right at the front. Do those now. So that's awesome.
They also have something called backports. So Mergeify will copy the pull requests to other branches once it's merged, if you set that up, so that you can ship bug fixes to multiple branches, feature branches and whatnot. Automatically or even older versions, right? Version 1.0 of your app versus, you know, 2.0, 2.2, whatever. Have those automatically merge those bug requests, bug fixes in. Super cool. So Mergeify does all these things automatically that you would otherwise have to do manually.
So you save time. You and your team will focus on projects that matter the most. Mergeify is coordinated with any CI and is fully integrated into GitHub. They also have a startup program that can give your company up to $21,000 of credits. So if you're doing a startup and you want to use them to help grow, you can reach out to them for sure. Do that by going to pythonbytes.fm/Mergeify. Sign up for a demo and get started. The link is at the top of your podcast player show notes. So just click it.
Thanks to Mergeify for supporting our show. Very cool project. Yeah. All right, Brian. What's the next one here? Well, we were talking about data science a little bit and people using Python for data science. But one of the things that people use when they're doing data science, plus other stuff and DevOps and whatever, is dashboards. Dashboards in Python. And that's one of the powerful reasons to use it. And so there's a couple things I want to discuss around dashboards.
Both of them come via suggestions from Mark Skov-Madsen. So thanks, Mark. First is the easiest way to create interactive dashboard in Python. Obviously, it's their opinion, but it does look pretty easy. Is to use hvplot.interactive. So this is an article that talks about how to do this. And it really looks nice. This panel looks pretty good. Oh, yeah. That's great. Pulling data out, you got dark and light, and you've got the controls on the one side. Interactive sliders?
Yeah. Okay. So this is just using some pre-canned data, but you can use, obviously, your own data. But the article's pretty short. And one of the things I love about it, of course, is it's got an animated GIF to show you exactly what you're getting into. And then also a video. So one of the authors, Sophia, just reads the, like, pretty much goes through the article and talks about it and shows the demo of everything. So that's nice. And it's only, like, six minutes.
I was watching it this morning. So really cool if you want to try. So HVPLOT is part of the HoloViz family of tools. So a lot of people are already using that. Or if you're not, check that out. Cool stuff. Yeah. This looks great. I always want to have good use cases for this. And I just, I don't find myself doing lots of dashboards and stuff. But every time I see them, I'm like, well, what can I build a dashboard for? That would be great to have this.
Well, so I have some use cases for dashboards, but I really don't want to spend a lot of time on it. And I think even though this is, like, six-minute video of how to get through it, I think that probably I'd have to set aside maybe a half day to figure out something to get it usable. But it does show that once you understand what you're doing, you can throw together dashboards pretty quickly and be able to.
Well, we didn't, in the demo, one of the dashboard items was, and the controls is, like, let's say you've got a whole bunch of columns or some different elements in a row or in a column that you want to filter out. So there's ways to filter your data so that you're looking at different stuff. And I was like, I have an exact use case for this, so I'm pretty excited. The other thing around plots is maybe HV plot or dashboards is maybe HV plot isn't the right thing for you.
Well, we've got another thing is the PyData Global 2021. There's a video stream up on YouTube called Python Dashboarding Shootout in Showdown. And so this is a whole bunch of different presenters talking about building dashboards in Python using either dash or panel or voila or streamlet. So watch different people do it. So if you want to watch some, use something other than HV plot, watch this video.
One of the things I love about this is if you're only looking forward to one of them, one of the commenters on this video put up hyperlinks to each of the different sections. So you can just hop right to the video part that you want to watch. Oh, yeah, that's great. Yeah, looks good. I love these dashboards. It's definitely one of their powers. Pat, do you do anything with them? Sorry, Brian. I cut you out. We do have some pre-built dashboards to model the EKS cluster in Grafana and Elastic.
But this is another option. It'd be good to do something ad hoc. If it's a quick and dirty, maybe I could put one out. So, Brian, do you just like grab a Pandas data frame and then make it interactive? No. Well, not quite, but it's almost. I mean, this is built to go really closely with Pandas data frames. So the code is, you know, you're doing some filtering, some pipeline processing, like group buys and selecting in to see what index you're going to use.
And then, yeah, it's pretty much interactive at that point. But the code around this is building the widgets for the controls. You got to define the UI and how people interact with it. Got it. Yeah, it's not. But it's pretty easy. I can't imagine. I mean, it's not obvious. So you have to kind of, it's good to watch a tutorial or something. But it's also not difficult. And then putting it together.
Yeah. So most of the code in here is not the interactive plot because that's kind of already happens. But it's the widgets. Got it. Cool. Thanks. All right. I think you all will be excited about this. I think this is quite a neat project. Now, let's see. This was sent over by Dave Chevelle. Well, actually, it is posted over and is by Dave Chevelle. So, I don't know. Brian, do you ever use entry points in Python packages? You know, so you can set up and pip install a package.
And then if you have that Python active, then you can just type a CLI command that is one of the entry points there. You know what I'm talking about? Yeah. I do that all the time. That's great. But there is some overhead to set it up, right? I've got to install it as a package and whatnot. This project called sourcepy allows you to basically turn any function into a CLI command, straight CLI command in one line. So, let me show you what I'm talking about.
And it doesn't involve packages and installing or anything like that. So, imagine you've got some file here and it's got a function, just a def function. Pygrep is the example here. And it has a pattern, which is actually a regular expression pattern. Note the typing. It has grep data, which is a list of text inputs. So, it could be a string or something, but it could also be like something piped or standard in or something along those lines, right?
So, if I have this script that just does that work with that type assigned data and I have sourcepy installed, I can say source this file here. And what it will do is it'll actually add up the, it'll expose those functions like pygrep and so on. So, then I can just type pygrep and it'll tell me how it works. And somewhere in here, where's the example running it? Oh, right here, I think it is. So, what you can do is you can just run pygrep against, now, as a function, right? As a CLI function.
So, it has all sorts of cool features. For example, it has this type handling. So, type hints that we talked about can be used to coerce inputs off the command line into like integers and patterns and I.O. streams for like files and standard in and such. Let's see. It just takes basically any function like this and turns it into something you run on the shell. And then you can also go down and you can do like, I believe there's some sort of class based way to work with it and so on.
But yeah, this is pretty neat. What do you think? I guess I'm confused at how it works with the normal source command. That is a good question. Like, how does it not break normal source? Yeah. That's a good question. Yeah. It is a good question. Like, does it replace it for while you've got it installed or does it extend it somehow? Yeah, I don't know. I haven't looked at it enough to understand how it either coordinates or overrides source. Sorry to put you on the spot there.
No, no, no. It's a great question. Yeah. I haven't played with it, but it's really important. You would want to know because you want to break your regular source stuff. I'm sure you could alice it if for some reason it conflicted, but I don't know. I think. So I think this would be really helpful for, aside from that, if that's all working great, then aside from that, I think it's a very useful way to have like a handful of little tools for a project to be able to use that.
If you're trying to share it with other people, I kind of think packaging it the right way to have entry points is probably the right way to go. Yeah. If you want to do a more formal, like a PIPX style, but this feels way more ad hoc, right? Like Pat was talking about his little script that he built to test some stuff. You could run this and then just call those functions as if they were built into Bash or ZShell or whatever. Definitely.
Also, also worth pointing out, it has built in native async support. So if you have async functions and you source it, then you can just call, call it as if it was a regular command line command and it's, it still just takes it and runs. And Kim Benwick, who's been a co-host here before has a clever thought. I suspect it wraps the normal source command and hands it over to the normal source. If it isn't Python, it's a good idea. Probably. Yeah, probably.
Although, like I said, I haven't really looked at the mechanism there, but this looks like a cool project. It's got all sorts of supported types like JSON and unions and date time objects and all kinds of stuff. So check it out. If you do a bunch of kind of ad hoc stuff with Python on the command prompt terminal, Pat, how's this strike you? I know that this might touch some of the things you're doing in your world. Right.
Yeah. just yesterday, one of the guys was contacting me because he needed to go and cycle through a list of addresses to, to hit an API. And this, this could be something you'd use like that. Consume this file and hit the API with each example and away we go. Yeah, absolutely. Yeah. This looks great for putting a little, making those little scripts you build with Python, like literally scripts. I know a lot of people call everything Python scripts, but this is really for those types of apps.
A single file script. Yeah. Yeah. A single file thing, not like a 20,000 line Flask app, right? That thing starts to stretch the terms of what script might mean, but this is exactly for those things. Yeah. All right. What's your final one, Pat? This, this is, is similar to what you just covered. Actually, you've, you've talked, I think a little bit about it before. Conch shell combines the best of bash shell and Python in the Linux terminal terminal. I ran across this.
This is way more than what I covered. This, this is like another level here. It takes it to another level. Yeah. I ran across it on its boss, which is, is a nice site for open source type things. In a nutshell, what, what it does is provide you with a new shell where as they demonstrate here, you can use straight Python.
You can import JSON, for example, and, and define a, a, a variable or a table, print, print that out and, format it, the length function here, but you can also then mix in regular bash functions where we, for example, here it curls from a website. The result comes back and the length function tells you the length of that curl. Oh, how interesting. And one of their famous. That's a little bit like, almost like a Jinja Django template, but in your terminal, right?
You put a little dollar to say, here's a, a bit of code to run on the shell. Yep. Um. Shell to run here. The one famous statement they have is, you know, I always forget how to do a for loop in, in bash, but in Python, it's pretty easy. Um, and, and they have kind of a rule that it evaluates. To Python first. If it evaluates to Python, it executes as Python. If it doesn't, then it more or less executes as bash.
Um, and I do have a link we could, we could put in the show notes too, to a, a video demonstration from, from their homepage. Um, and the guy does a spectacular, demonstration with auto completes and, and they have, what they call contributions. And, and that also begins with an X. Um, so it's, it's like a plugin or an add on, but it's a contribution. Uh, it, it, it, it is get aware and it is, virtual environment aware.
Um, it sounds like a killer environment, but it would take some getting used to. I have a lot of muscle memory to overcome, to take full advantage. I think. This is cool. Brian, have you played with us? You know, I tried to play with it a couple of years ago, but I, but now I, and then I haven't, but I do want to. And I think one of the things I didn't give it a fair shake.
And I think it would be good to just say for a week, maybe I'm going to try to just use this instead of pulling up my normal terminal just to see if I can get used to it. That's the thing. I think you have to immerse yourself probably. And, and it is about five years old. I think it's fairly mature. Yeah. And yet also the less I write bash scripts, the more I wish that I bash scripts were more like Python scripts. So now they are. Yeah, this is great.
a good find and it's something I've also wanted to play with, but haven't. Nice. Brian, you got any extras you want to share with people? I don't this week. How about you? I thought I didn't, but then I did. I just want to do a quick follow-up. Okay. Um, I was just thinking about a couple episodes ago where we talked about the March Madness package tournament that Chris May had sent in. And I was thinking, you know, it's probably done now, isn't it? Let's see who won.
Cause I think we were at the point where we were at the elite eight, weren't we? Or yeah, I believe we were at the elite eight. So we had a showdown to put between NumPy and Pip. NumPy crushed it. We had a showdown between pandas and requests. Pandas crushed it. And it was an all data science finale. And NumPy and pandas went to head, went head to head. And it was pandas, 55% taking the winter. So I just want to do a quick follow-up on that. Very important news. We have a champion. It's good.
But try using pandas without NumPy. That'd be tough. There you go. Yeah, indeed. I was. Pat, do you have anything else you want to get a, give a shout out to? I do have one extra. Um, quick, like, it's easy to bash Microsoft, but they've been involved in. They bought GitHub. They, have lots of our Python code developers working for them and they have this rewards program and they want you to use Bing search, obviously. But what you can do is choose a, a charity to give points to.
Um, you can also get like a $5 gift certificate to AWS or, or Amazon or something, for yourself if you'd rather. And, and every day you just kind of click on these little links and, and I just got five points or 10 points and, oh, now we got to do a quiz. I'll come back to that later. Um, and, and as you do this, you accumulate more points each day and those points then can go to your charity. And I did, the red cross for a while and I did the, the CDC during our, our lockdown year there.
And you can also donate to the Python software foundation. So that's some, that's a way we can all contribute. So if you're Googling stuff with Bing, go ahead and set up the rewards. You're Googling stuff with Bing. If you're Googling stuff with Bing, set up the rewards to go to the PSF. You might as well, right? That's right. It's fantastic. Awesome. All right. Well, thanks. That's a good one.
Um, I got a joke for you all here and I know Brian, you do as well, but I feel like this one, I better take this one because I don't feel you're in a position to, to make an unbiased decision here. Cause it's so close to your heart. Okay. All right. Okay. So this one is over on the Reddit programming humor one and it poses a question. What seems like a straightforward question for a piece of software? How do you exit them?
And it types, it, there's some, you know, a couple of interesting options here. You get colon exit. 7% of the people think you type colon exit. They're wrong. You type colon WQ, which I guess if you want to make changes, cool. Save your changes and exit. You could do most people got that one. And then you could do colon quit 7% again. You could click the close button hard for a non UI app, but or almost 20% of the people said, you know what? The way you restart Vim, this horrible thing.
I can't get out of it. I'm going to restart the computer. I'm trapped in here. I just, I got to get out. I tried command Z or control Z and it just background it. And now what's it doing? It keeps coming back. And I think people clicked restart the computer to be funny. I don't. I know they did. I thought, and I pulled it up as a joke to be funny as well, but there you go. So have you, I don't know the, the, the close button works for me. Um, I don't know. Well, it closes the terminal, right?
Yeah. Yeah. Um, so I mean, who doesn't, you got to say, do you want to terminate the running program? Right. You get like a warning that you're doing it wrong. I'm with you, Brian. I'm a boom guy. It's not hard. And actually I haven't, I don't use straight Vim except for on the command line. You're right. I guess I do that on the command line, but I do, I essentially use Vim within PyCharm or VS Code as well. But yeah. Vim emulation. Yeah. Okay. It's fun.
So I, I wanted to share a joke also because I just thought this was so funny. I could stop laughing this morning. Um, so ran across this, tweet by, mediocre superheroes. Um, it's a little cartoon thing. So, so the guy, you know, finds a genie, genie says three wishes. Hey, can I wish for more wishes? Not with me? No. Well, fine. I wish you couldn't count. And the genie, done. How many wishes do you have left? A billion. Hmm. That sounds right. I love it. Uh, anyway, that was funny.
It's an inventive way around an old joke. So that's great. Anyway. Uh, oh, quick. Oh, a bit of audience feedback as well. Henry Schreiner says, restart the computer. Isn't that how you get out of email? Also true. Yeah. Yeah. What, what key chord do I hit to get out of that one? Fantastic. It's probably control something. Yeah. I bet it involves a control K something somehow. Anyway, thanks for, everything. Brian, thanks for being here. Thanks for the jokes and pan. It was great.
You could join us. Yeah. Thanks, Brett. Thanks for having me on guys. Bye everybody. Bye everyone.