Python Bytes - #104 API Evolution the Right Way

Episode Date: November 17, 2018

Topics covered in this episode: [play:4:32] wily: A Python application for tracking, reporting on timing and complexity in tests and applications. [play:8:00] Latest VS Code has Juypter support [pl...ay:11:17] API Evolution the Right Way [play:16:10] PySimpleGUI now on Qt [play:19:57] Comparison of the 7 governance PEPs [play:23:54] Shiboken (from Qt for Python project) Extras Joke See the full show notes for this episode on the website at pythonbytes.fm/104

Transcript
Discussion (0)
Starting point is 00:00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds. This is episode 104, recorded November 15th, 2018. I'm Michael Kennedy. And I'm Brian Ocken. Hey Brian, how you doing? I am great. Yeah, it's a wonderful day, isn't it? Yeah, it is.
Starting point is 00:00:16 And I'm doing one of my favorite things, talking to you on a podcast. Yeah, same here. You're all about podcasting today. It's like you just put a block the whole calendar day. It's just all podcasting all day. Yeah. Right on. Well, I'm sure your other episodes on TestCode will come out good as well.
Starting point is 00:00:31 But before we get to our episode, let's just say thanks to DigitalOcean. They support the podcast massively, and we're very thankful for that. Check them out at pythonbytes.fm slash DigitalOcean. Get $100 credit for free for new users to use towards your virtual machines and whatnot. Tell you more about that later. Brian, I would normally ask you what your first assignment is or make some not very great transition into it about coyotes or something, but we're not going to go down the coyote route. Yeah, we have some exciting news. Yeah, we do. So there's two things I would like to tell you about the podcast.
Starting point is 00:01:06 One is new and awesome, and one has just been around, but we haven't really bothered to talk about it, and I don't know why, so let's talk about it real quick. First of all, we talk about six items and maybe a few extras more or less each week, right, Brian? Yeah. Our episodes are 25 minutes. Wouldn't it be nice if you were interested interested in say the third thing to be able to just click on the third thing and hear just that if you wanted to jump back as a refresher or
Starting point is 00:01:29 whatever? Yeah. Like you said, if you wanted to, you heard it before and you're like, what did they say about Wiley? And you could go back and listen to that. So exactly. And we do have transcripts. We've always had transcripts and that's great. But now the podcast MP3 comes with chapters in each episode. So if I open up, say, Overcast on my iPhone, and I flip over, I think I flipped to the right two times or something funky like that, I see every topic that we cover now, and you can click on any of them.
Starting point is 00:01:56 It tells you how much time we spend on each one. You can click on it. You can get a little independent progress bar. It's beautiful. Yeah, it's nice. It also works in Apple Podcasts. You've got to swipe up, and all the other podcast players. I don't know, but they support the most of them. Which one? What do you listen with Brian? What do I listen to?
Starting point is 00:02:12 Trade podcast for a while. Yeah. Overcast. I like overcast. It's not perfect, but it's better than the others in my opinion, at least for iOS. Yeah. I like it. I like the, um, a lot of the features of it. So I do too. So chapters Chapters are awesome and they are now in there. And also, if you go to the episode page, I've updated the website for roughly the same capabilities. So there's a little play icon
Starting point is 00:02:32 next to each chapter or each thing that we talk about. And this only works for episode 103 and forward. This doesn't work going way back in the past. But everything going forward, assuming we keep this up,
Starting point is 00:02:44 it's a lot of work to do the chapters and figure out the times and put in all the pieces. But hopefully people like it. And as long as we're doing it, I'll put it on the website, and you can click there as well. One of the things I like about the website is if I'm looking at it, in the future, I'm looking back at an old episode, yeah, I can listen to it without downloading the whole thing
Starting point is 00:03:03 onto my iPhonehone or something so yeah yeah and i think people also don't understand how much we use our own site as reference yeah i'm like did we talk about all right throw it in the search engine uh no it's not there so we probably didn't talk about it let me look at this other thing yeah like it's good for us and other people can use it too right yeah i mean we've have over over 100 episodes six topics we've covered over 600 things. So, yeah, it's hard to keep track. Sometimes multiple.
Starting point is 00:03:27 Yeah, there's a ton of stuff in there, and it's good to go back and find the links and comments we put. So, chapters, hopefully people enjoy them. Be sure to take advantage of them in your podcast player, especially for reference. And the other one is we have friends. It's great to have friends, isn't it? Yes, friends of the show. We have friends of the show in the sense of people who send us stuff, and we love that. We also have the ability to send out notifications for everyone that cares.
Starting point is 00:03:50 So if you visit pythonbytes.fm slash friends dash of dash the dash show, or just pythonbytes.fm and click on it in the banner, then put in your email address and you'll get notifications. I'm going to try to start sending out more interesting stuff more frequently. You can check that out. But if you're not signed up there, you and you'll get notifications. I'm going to try to start sending out more interesting stuff more frequently. You can check that out. But if you're not signed up there, you probably won't get it. So be sure to do that. You can even open up, say, Overcast.
Starting point is 00:04:12 Go to the show notes, click the title, and even become a friend of the show right from your podcast player. I think that's probably the most appropriate way to do it. So are we going to collect all these email addresses and then sell them to some list? Yeah, I think we're going to be so rich. We could probably sell them for two cents an email no we're not gonna we're not gonna share those of course no we hate spam we won't do that either of course all right now it's time for the wily coyote yes the wily coyote and uh and more friends right so anthony shaw we've we've talked about he's been on the show he's been on both of our podcasts also.
Starting point is 00:04:46 And he joked recently that he's going to, at PyCon 2019, he might put friend of the show as his name on his badge. Nice. So then one of the things that Ant or friend of the show or Anthony has been working on is a project called Wiley. And it is a Python application for tracking, reporting on timing and complexity of tests of the tests of your application. So it's sort of like we have some complexity checks for your application or for your module, but this is a complexity of your tests.
Starting point is 00:05:20 And it's kind of an interesting project. But I'm not going to actually talk about the testing part of it. Why I brought it up is he's done something that I'm not going to say he's the first because it's possible that somebody else has done, but it's the first that I've heard of, somebody that's done this new PyProject.toml style packaging. So there's no setup.py. It is pip installable,
Starting point is 00:05:43 and there's a lot of extra goodies that you can do with that. And he's figured out all of the weird things that you have to figure out to make this all work. So he's got hooked up to read the docs. So the read the docs is generated. It's a restructured text-based documentation that gets pushed to read the docs. He's got it working on the talks is set up. So there's talks configuration in there. He's got it working on the talks is set up. So there's talks configuration in there. There's a black configuration within the project. There's all the things you'd expect.
Starting point is 00:06:12 Plus he's got pre-commit hooks set up. And this isn't really part of the PyProject part, but there is a pre-commit hook for an example. And also how to use, if you're writing a tool that you want somebody else to be able to do pre-commit hook for an example, and also how to use, if you're writing a tool that you want somebody else to be able to do pre-commit with, there's an example hook there. It's kind of a lot of goodies,
Starting point is 00:06:32 and it's not very much code, so I like it as an example. Yeah, nice work, Anthony. That's really cool. I like the use of PyProject. Do you know if he's using Poetry? He's using Flit. Flit, okay.
Starting point is 00:06:43 Right, so Flit is another one of the ones, like Poetry or PIPFEMP, but one of the ones that understands pyproject.toml. And if you're curious to learn more about pyproject.toml, we talked about it in Python Bytes 100, and then I also talked about it with Brett Cannon on Testing Code 52. Nice. Yeah, that's a really good example. Leave it to Anthony to be on the cutting edge of packaging.
Starting point is 00:07:06 The other thing I want to, it's a small package, but one of the things I like is his contributing guide includes the code of conduct right in there. And I think that's, instead of having it as a separate file,
Starting point is 00:07:17 I like the idea of having it in this contributing guide. Yeah, I think the contributing guide should just link to Brett Cannon's presentation about open source expectations. Yeah, anyway, don't be a jerk. Yeah, you're giving me a puppy with this PR, just understand. Thank you. Thank you for the puppy. I think I will link to that in certain projects.
Starting point is 00:07:37 Because I've got like four contributors on my project, so wow, it's just exploding. That's actually pretty good. I think the step from zero to one is bigger than from like one to 10. Maybe for most projects to get anybody to care, right? Yeah, well, I'm having trouble getting myself to do more work on it. Yeah, that's a different problem. So speaking of different problems, yes. So let's talk about data science for a minute. The Visual Studio Code folks are building some really interesting tools, and there's some quite unique things coming from it.
Starting point is 00:08:10 So, you know, I'm a big fan of PyCharm, but if I'm not using PyCharm, VS Code is the thing that I would pick up and use, right? So it's like, if I have something really small, I'll probably open it up with VS Code, like real projects probably stick to PyCharm. But VS Code is definitely coming along.
Starting point is 00:08:28 I'm sure Brett Cannell will love that. For real projects. I know. I think it's more that PyCharm is more focused on working with lots of files and project stuff, and it doesn't make a lot of sense, as much sense as just opening up for like one file. It sort of can, but not as much. So VS Code is definitely coming along, and one of the things it hasn't had for like one file it sort of can but not not as much that's what yeah it's getting that so vsgo is definitely coming along and one of the things that hasn't had a lot of is support for some of the data science tools but now with the latest release they just announced a really unique way of doing uh jupiter notebook type of support oh wow right so normally jupiter notebook is like
Starting point is 00:09:02 you go and you open up the notebook and you've got these cells and you type in the cells and you run the cells. And there's like these IP and BBE files, whatever the extension is. They're not really Python files. They're like XML or something weird in there that has like embedded Python that can run, right? So this leads to all sorts of funky things like profiling it or testing it. All those can be somewhat challenging right because you've got to get into the notebook and whatnot so vs code is taking like a pretty unique approach where what they'll do is they will turn their editor into like a notebook like surface but
Starting point is 00:09:38 it's actually still a single python file and you just put what's the syntax you put hash percent percent and that line defines a cell in the file and you get separate what's the syntax you put hash percent percent and that line defines a cell in the file and you get separate output from them you get separate graphs and all sorts of stuff that you would have like a side window out of the jupiter notebooks but you have a single python file that you still treat as a single python file okay does it generate a notebook file i don't know if it generates it it It will import them. So you could tell it to open a proper notebook, and it'll convert it to this format that I just described.
Starting point is 00:10:11 Okay, neat. Yeah, so if you're doing any sort of thing with notebooks, this is a really nice way to kind of work in a full-on text editor style, but still get all the benefits, or most of the benefits at least, of Jupyter. Yeah, neat. i do like that they're continuing i know that there's a lot of a lot of work on vs code making it they're trying to work make it even better and better all the time that's a good thing yeah i guess some of the other things to throw out there that i added now it has better support for virtual environments
Starting point is 00:10:39 so you can like create a virtual environment in your project level directory and it'll detect it, things like that. So there's a few other nice things, better completion, whatnot. But the big deal is really the Jupyter, pseudo-Jupyter support. Yeah, cool. Yeah, it's pretty cool. I don't do that much with Jupyter, but if I did, I would definitely consider this. I don't know if you would say it's the right way, but it's definitely a good way. Yeah.
Starting point is 00:11:02 I don't play doctor on TV, but nevermind. All right. So speaking of the right way, speaking of the right way. So a lot of people have projects there. They're supporting and we're thinking about, maybe not a lot of people. There are a lot of open source projects.
Starting point is 00:11:16 One of the things that we we've talked about is it's if you have users, they might get upset if you change things. And change is inevitable. Don't fear change. Send it to me. But one of the things you've got to think about is your API. And APIs evolve. And so there's an article called API Evolution the Right Way. And this is written by A. Jesse Giroux-Davis.
Starting point is 00:11:41 And he is an excellent writer. I mean, even if you don't care about this topic, he puts really cool graphics in his articles, and also he's just a good writer. He's a super storyteller, and this one is no doubt part of that. So, check it out for that alone, right? Yeah. And like it's, okay, the first line is, imagine you're a creator deity. I mean, that's just good. So, he does in an analogy of a snake gaining wings and things like that. But anyway, he talks about how to go about adding features, removing features, deleting features. That's something you sometimes have to do.
Starting point is 00:12:18 And he also, adding and removing, you probably wouldn't remove parameters from an api call but you might add some how to go about doing that changing behavior sometimes things just aren't working the way they should and they'll they should work different ways and he also gives some some examples and some examples of things that even in the python standard library that changed because the way it used to work just was weird. One of his examples was that you could date times. So if you did datetime.time with the parameters 0-0, so that's an odd time, but it does happen.
Starting point is 00:13:01 And it happens if you have it in a loop and are checking to see if the time is not null or something, but you just said if, if X or if time, that'll return true sometimes if it's a 0.0. So that's converting bools to time or time to bools. A valid time should return true, but it used to return false. And that was in pre, yeah, 3.4 and before. Oh my gosh. It returned false.
Starting point is 00:13:30 And that's just weird. You know, sometimes there's just behaviors in your code that you didn't intend that you need to change and how to go about doing that in a nice way if you've got users and a public API. So it's a good article. Yeah, he's got some good advice for sure. One of them includes not putting feathers on snakes. Another one is like evolve cautiously, avoid bad features, if you knew, right?
Starting point is 00:13:53 Minimize features, less to maintain. Keep features narrow. Mark experimental features as provisional. Delete gently and stuff like that. Yeah, provisional features actually are interesting. But they're still tricky. Like, for instance, PyTest introduced an experiment on how to deal with fixtures at one point,
Starting point is 00:14:15 and they're still, I guess, just recently deprecated them. Or they've been deprecated for a while, but it took a while to... It's hard to remove stuff because people might be using it. Yeah, yeah, definitely. Even if you say provisional, someone's going to be like, wait, why did that leave? I needed that. Yeah.
Starting point is 00:14:33 It was a test. I don't know. Maybe separate branches. Maybe – I don't know. It's hard to know what to do to really push that out and let people test it but then actually take it away. Yeah. That's a tough one. Thanks for that advice. Yeah, yeah, Jesse. that's, I mean, that's a great article. I really love it the way all the pictures and the storytelling and he's a great writer, nicely done.
Starting point is 00:14:54 Now, before we get back on one of our kicks, because it has returned, so I tell you all about DigitalOcean. So DigitalOcean, super big supporter of the show. They're sponsoring every episode for the second half of this year. So thank you to them for that. And we've talked about you're not Netflix. You're not LinkedIn. You're not Facebook. I just interviewed some guy from, a guy Colton from Adobe,
Starting point is 00:15:20 talking about managing the security of 40,000 servers for some of their back-end stuff and how they do that. Some people have those problems. And the systems that manage that get pretty complicated. But most people don't have that problem. And they shouldn't have to deal with systems that are way complicated to handle that kind of stuff, right? Most people want to spin up a server, have a database server, maybe a firewall, a static IP. And if that's the kind of thing you want, can do quick easy affordable reliable go check out digital ocean
Starting point is 00:15:49 so we use them we work docker get lab slack all those folks use them and it's way way cheaper way way simpler and get started right away so check them out at pythonbytes.fm slash digital ocean get a hundred dollars to play around and get started and definitely recommend them. Working out well for us, probably will for you as well. Yeah, thanks. Yep, thanks, DigitalOcean. Now, I'm trying to remember, have we spoken about GUIs? I don't think we have.
Starting point is 00:16:13 No, let's talk. We should totally do that. Let's talk about them. So actually, this is the thing. This is a, we talk about GUIs so much, this item is back on Python Bytes. Like it is previously on episode 90, we spoke about this
Starting point is 00:16:25 thing called pi simple gui and pi simple gui gui is i would put it in the category of this other thing called gui g o o e y which is these are like really simple ways to build kind of standard not superly overly customized uis i just like quickly want to get a UI up where I can get some input, show some stuff to the user. This one is more advanced than GUI, but still, it's kind of meant to be, I want to get up something quick and not massively complicated, right? You wouldn't build a full-on web browser in here, but you might build a little utility that you all use.
Starting point is 00:17:03 So the idea is you sort of declare the the types of controls that go on your layout and then it pops up now one of my complaints back when we were on this kick in episode 90 was this is based on tk enter and it looks like it's straight out of 1990 which was amazing because i love history but i don't want my modern apps to look that way right and i, that's not a... It's great music, bad user interfaces. Exactly. I mean, come on, Black, Pearl Jam, we even have a package named after it. Anyway, so the idea is you can simply create these GUIs, but the drawback was it was built on TKEnter,
Starting point is 00:17:44 right? Which you can build nice stuff, but it just looks a little out of place. I think maybe based on our feedback, certainly on other people's feedback, Mike decided, you know what? Let's try to create this for Qt. Because Qt looks modern. Qt looks nice, right? Like Qt is definitely a good-looking framework. Like if you build an app in there, you might not know that it's not native. It's not built with Xcode, right?
Starting point is 00:18:01 And Coco, something like that on Mac. So he took a shot at it, and in one week, he fully created a cute version. So now you have TKEnter if you want no dependencies, and you have a cute version if you want it to not look like, you know, Pearl Jam loved it. It really does look nice, so I'm excited about this, actually. Yeah, the new one is looking quite good,
Starting point is 00:18:24 so it's sort of a declarative little builder. All you got to do is pip install pyside2, and it has no dependencies. It's a single Python file. It only works on modern Python as well, but he's sort of inspired by this. He's also working towards a WXPython and a Kivy. And if he gets Kivy going, that would be pretty sweet
Starting point is 00:18:41 because that would be mobile. Yeah. Right, so so far everything has been desktop. But if he can get Kivy going, K be pretty sweet because that would be mobile yeah right so so far everything has been desktop but if he can get kivy going kivy's a mobile python framework and that would be pretty killer well and also it'd be kind of a cool thing to like to try to do something like if you had similar code and and ran it generated all these different versions and then you can kind of look to see which one you like better. Yeah, exactly. And I should point out the API is identical from TKinter and Qt. So you just do a different import statement. You import the Qt one instead of the standard one.
Starting point is 00:19:14 And as long as you have the dependencies in place, the API doesn't change. So you could even do that at runtime, like see if they have Qt installed. If they don't, fall back to TKinter and apologize a little bit. Sorry. If you want this to look better, you're going to have to go run this line. No, you should go do something like check out the FMAN build system,
Starting point is 00:19:32 which will let you then take this thing, package it up as an installer for a binary, standalone binary for the various OSs, and then you'll be in business. And you can make millions. Millions and millions of cents. Yes. Okay. Okay. Okay. All right. So nothing major,
Starting point is 00:19:49 but just sort of an update on that one because I think the featuring, the ability to use Qt here is actually a really, really big deal. One of the other major things happening right now is a lot of the core development around Python is kind of put on hold because nobody knows who to ask on how something gets approved,
Starting point is 00:20:06 who approves it, or anything. Tell us more about this. People at the heart of Python are the core developers. They're trying to figure out all this stuff. And since Guido has stepped down as official benevolent dictator for life, I'm not sure how that works, but the governance model around Python is changing. I think it used to be go Asciido for final word,
Starting point is 00:20:30 and that was that. Yeah, I think it may have been a little more structured than that. I'm summarizing. How do we go forward is a topic, and Victor Stinner, who is one of the core developers also met him last year at pycon great guy he came up with this uh summary of there's a whole bunch of different competing governance models and they are summarized at actually what there's one pep called pep 8000 that summarizes all of them but they don't it doesn't really compare them it's just a quick
Starting point is 00:21:03 summary of the different ones. But they're numbered 10 through 16. Why is that? There's zero, one, two, three. I think there's seven different models, of course. Victor has put together a comparison of the different ones in different ways. So for instance, comparing them, what their hierarchy is like, how many people are involved, what the terminal limits look like, what's the PEP process going to be like, and whether they include code of conduct and stuff. And my guess is none of these are going to win just wholeheartedly. There's probably going to be pieces of the different PEPs that get combined into whatever we end up with. But if you're curious about what the core developers are up to
Starting point is 00:21:43 for your future you can look at some of this stuff yeah this is really interesting and it's a bit of a catch-22 right like who even decides on the governance model well right you know explicitly said when he stepped stepped back to just standard core developer was and i'm not going to decide for you you all have to decide for yourselves i guess maybe vote by a core developer team. I don't know. Yeah. So there's only seven. So like, for instance, the first one is we just pick another leader. So it's something kind of like we have now, but it's a different person, a technical leader governance model. There's one that's led by a trio. So kind of like that, kind of of like you know but three other people kind of share
Starting point is 00:22:25 that you know when we talked uh to brett cannon yeah we care willing back on what was that episode around 90s i'm not sure do you remember wasn't it 100 no that was a different one okay yeah we did a special dedicated one on this whole topic i just don't remember exactly what the number was the number was but anyway i thought it was really interesting that I thought, of course, there's going to have to be an odd number of leaders because you're going to need a tiebreaker. Right. And Brett pointed out that some people are saying, you know, actually it may be better to have an even number. So ties mean do nothing. And you have to have a majority, like a clear majority to make any changes, which actually I think, so maybe like led by four or six or something like that actually is an
Starting point is 00:23:09 interesting option. Yeah. But I think it's kind of cool that this is all happening in the open and people can comment on, people can comment on the different proposals and they can also comment on this summary. Yeah, they definitely can.
Starting point is 00:23:20 Right at the bottom of the show page. Yeah. Nice. All right. Well, thanks for featuring that. It's going to be interesting. And I says,
Starting point is 00:23:29 I would guess we hear by the time PyCon happens what the decision is. I doubt they can go that long, more than close to a year, without having any form of leading person or group. One of the options that's not on the table is we can just say we're done and not develop Python anymore. No, that's not an option we can't do that right it's just doing too well but i you know i guess it's always an implicit option if we could just stop all right so the last one that i want to cover last main topic is this thing called shibokin because it comes from guis and i'm back on my gui kick
Starting point is 00:24:01 no that's sort of true but that's not why i care about it so shaboken is this subsystem that the cute folks made to create the cute for python which is basically they go to the cute libraries which are all c++ header files and they want to make python versions of that without maintaining a separate library that is you know here's the cute one here's the python one they'll get out of sync and whatnot. So they created this thing called Shaboken. And the idea is you can run Shaboken against arbitrary C, C++ code, and it will output Python libraries that interact with that at a C level. Oh, that's cool. Right?
Starting point is 00:24:39 So if you have any C code you want to interact with, you can just run this against it. And it has like a type system, which is an XML file type of thing that you can customize it. If you see, you know, this thing star in C, well, what that means is actually this type in Python, right? So you can manage that a little bit, right? Like standard string is actually, you know, stir in Python, and you could tell it to do those mappings. But then you point it at these libraries and it can extract them. You can hide functions or add functions,
Starting point is 00:25:10 all sorts of stuff. So it's pretty cool. That is great. Automating the boring stuff. Exactly. Definitely automating the boring stuff. So these folks are creating and maintaining it to build PySide 2, basically,
Starting point is 00:25:22 at least the wrapper part of PySide 2. But you can use it for whatever you want if you have C code. It has nothing to do with GUIs or Qt or anything like that. And there's two interesting blog posts. One is cute for Python under the hood, which I'll link to. And that one basically shows you how this
Starting point is 00:25:40 fits into their overall build system, which has Clang and C++ and CPython and all sorts of stuff. And then one that's sort of a tutorial called Write Your Own Python Bindings, and that one takes you through the process of more or less what I'm describing here.
Starting point is 00:25:56 It creates some non-trivial C++ classes with public-private members using the standard library and things like that. And then it creates a Python wrapper and then uses it. It's pretty cool. Yeah, that is neat. Any idea where the name came from? No.
Starting point is 00:26:13 No idea at all. There's probably a really great story where the name came from. Yeah. But I don't know where it came from. So this is, yeah, this is one of the options if you want to do C++ stuff. But there's others as well, right? So you could use CFFI. This is sort of a more modern way to explicitly write these mappings.
Starting point is 00:26:33 And Dan Bader over on dbader.org actually has a good write-up on that, so I'll link to that. Or you could use Cython, which actually is a really cool way to just directly import and start using C libraries. You just basically define the function shape, and then you import the header. You say, this function comes from this header file. Let's roll with that.
Starting point is 00:26:54 And then you just start using it in Python. Of course, you've got to compile your Cython code with Cython, but it's pretty nice. And so there's a good example of doing that from scratch as well. So Shibokin, these other two, they're all quite interesting. I'll link to them all. Nice. Yeah. Well, that's it for our official items, right?
Starting point is 00:27:09 You got anything else you want to share? I don't. Do you? I actually have a whole bunch of stuff that I'm very excited about, but it's very short. So let me just tell you. First of all, I bought my PyCon ticket. Woo! I still need to do that.
Starting point is 00:27:22 Yeah. It's exciting. The big news is that the PyCon tickets went on sale just like three or four days ago. So I don't know if it sold out last year or not, but you don't want to be standing outside there by the Great Lakes in Cleveland looking at the windows with all the people enjoying themselves and not be able to go in, get your PyCon ticket as soon as you can because it's going to be fun.
Starting point is 00:27:44 It's always fun. I'm looking forward to being there with you you can because it's going to be fun. It's always fun. Looking forward to being there with you, Brian. Definitely. It's going to be awesome. And if you would like a closer, smaller, but still fun version, closer by definition to Brian and me, PyCascades tickets also went on sale just a couple days ago. This is the much smaller 200-person conference in Seattle.
Starting point is 00:28:01 And this one will definitely sell out because it's so small. I think they received over 200 talk submissions submissions and they can only have 200 people. So I'm pretty sure it's going to sell out. Yeah. Yeah. So look into that. That one's cheaper, smaller. And if you're in the Northwest, closer. But that doesn't describe many of the listeners, but yeah, it does for us. So I'm going to be going this year, but it's the first time. I didn't go last year, so I'm excited to check it out.
Starting point is 00:28:24 Yeah, I'm excited. This will be my second year. I'm also going and it's going to be going this year, but it's the first time. I didn't go last year, so I'm excited to check it out. Yeah, I'm excited. This will be my second year. I'm also going, and it's going to be great. Okay, so those are the conference stories. Those are the two big conferences. Definitely the PyCon one is a big deal. The other one is, have I talked about GUIs? No.
Starting point is 00:28:38 The other one is a book that caught my attention. There's tons of Python books, and sometimes they're interesting sounding, but this one really seemed to have a unique like really to draw the reader in it was really a cool angle on it it's called mission python code a space adventure game so basically it sets up the story of this universe that you have to save and it takes you using pi game and pi game zero and all sorts of stuff to create games with sounds and graphics and just walks you through building this game. And I think it looks like a super fun way to get into Pygame. That's kind of exciting to check this out, too.
Starting point is 00:29:12 It looks fun. Yeah, I'm like, maybe this needs to be one of my projects. And then I remind myself, no, you're already too busy. Please don't do this to yourself. Yeah, like somebody said that we ought to go off and learn data science together. But yeah, there's a lot going on in both of our lives. Yeah, yeah, for sure. Much of it around Python, but that bucket is getting quite full.
Starting point is 00:29:32 But this is definitely one of the things that tempted me to add one more thing to the bucket. It looks interesting. Yeah. All right, Brian, thanks for being here and sharing all this with me and everyone else. Yeah, thank you. You bet. Bye. Bye. Thank you for listening to Python Bytes.
Starting point is 00:29:43 Follow the show on Twitter via Python Bytes. That's Python Bytes as in B-Y-T-E-S. And get the full show notes at PythonBytes.fm. If you have a news item you want featured, just visit PythonBytes.fm and send it our way. We're always on the lookout for sharing something cool.
Starting point is 00:30:00 On behalf of myself and Brian Ocken, this is Michael Kennedy. Thank you for listening and sharing this podcast with your friends and colleagues.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.