Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book

Transcript #104: API Evolution the Right Way

Return to episode page view on github
Recorded on Thursday, Nov 15, 2018.

00:00 KENNEDY: 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.

00:10 OKKEN: And I'm Brian Okken.

00:11 KENNEDY: Hey Brian, how ya doing?

00:12 OKKEN: I am great!

00:13 KENNEDY: Yeah, it's a wonderful day, isn't it?

00:14 OKKEN: Yeah, it is and I'm doing one of my favorite things, talking to you on a podcast.

00:19 KENNEDY: Yeah, same here. You're all about podcasting today. It's like you just put a block the whole calendar day, and it's just all podcasting all day.

00:26 OKKEN: Oh yeah, yep.

00:27 KENNEDY: Right on. Well I'm sure your other episodes on Test and Code will come out good, as well. But before we get to our episode, let's just say thanks to Digital Ocean, they support the podcasts massively and we're very thankful for that. Check them out at, get a $100 credit for free for new users to use towards your virtual machines and what not, tell you more about that later. Brian, I would normally ask you, you know, what your first assignment is, or make some, like, not very great transition into it about like coyotes or something, but we're not going to go down the coyote route.

01:00 OKKEN: Yeah we have some exciting news.

01:01 KENNEDY: Yeah, we do. So, there's two things I would like to tell you about the podcast, 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? Our episodes are 25 minutes, wouldn't it be nice if like you were 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 whatever? Yeah, like you said, if you wanted to, you know, 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 flip 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 'em. 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.

02:02 OKKEN: Yeah, it's nice.

02:02 KENNEDY: It also works on Apple Podcast, you got to swipe up and all the other podcast players, I don't know, but they support them, most of 'em. Which one, what do you listen with, Brian?

02:11 OKKEN: What do I listen to? Tried Pocket Cast for awhile. Overcast.

02:13 KENNEDY: Yeah, Overcast. I like Overcast, it's not perfect, but it's better than the others, in my opinion, at least for IOS.

02:18 OKKEN: Yeah, I like it, I like a lot of the features of it, so.

02:21 KENNEDY: 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 capability. So there's a little play icon 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, 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 you know, as long as we're doing it, I'll put it on the website and you can click there, as well.

02:54 OKKEN: And one of the things I like about the website is if, like, I'm looking at a, you know, in the future and I'm looking back at an old episode, yeah, I can listen to it without downloading the whole thing onto my iPhone or something, so, yeah, it's good.

03:06 KENNEDY: Yeah, and I think people also don't understand how much we use our own site as reference. I'm like did we talk about it? Alright, 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?

03:20 OKKEN: Yeah, I mean, we have over 100 episodes, six topics, we've covered over 600 things, so, yeah, it's hard to keep track.

03:27 KENNEDY: Yeah, sometimes a multiple, 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?

03:41 OKKEN: Yes, friends of the show.

03:43 KENNEDY: 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 just send out notifications for everyone that cares. So if you visit, or just 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 probably won't get it. So, be sure to do that. You can even open up, say Overcast, go to share 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.

04:18 OKKEN: So, are we going to like collect all these email addresses and then sell 'em to some list so that...

04:23 KENNEDY: Yeah, I think we're going to be so rich, we could probably sell 'em for two cents an email.

04:27 OKKEN: No, we're not going to share those, of course.

04:29 KENNEDY: No, we hate spam, we won't do that either, of course. Alright, now it's time for the Wiley Coyote.

04:34 OKKEN: Yes, the Wiley Coyote and...

04:36 KENNEDY: And more friends.

04:37 OKKEN: Right, so Anthony Shaw, we've talked about, he's been on the show, he's been on both of our podcasts, also, 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, so.

04:56 KENNEDY: Nice.

04:56 OKKEN: 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 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 complexity of your test 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, 'cause 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, it is pip installable 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 like 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 Tox setup, so there's Tox configuration in there, there's Black configuration within the project, there's all the things you'd expect, plus he's got pre-commit hook's 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 with, there's an example hook there. It's got a lot of goodies and it's not very much code, so I like it as an example.

06:35 KENNEDY: Yeah, nice work, Anthony. That's really cool, I like the use of pyproject. Do you know if he's using Poetry?

06:41 OKKEN: He's using Flit.

06:42 KENNEDY: Flit, okay, right. So Flit is another one of the ones, like Poetry or Pipenv, but one of the ones that understands pyproject.toml.

06:52 OKKEN: And if you're curious to learn more about pyproject.toml, we talked about in Python Bytes 100 and then I also talked about it with Brett Cannon on Testing Code 52.

07:01 KENNEDY: Nice, yeah, that's a really good example. Leave it to Anthony to be on the cutting edge of packaging.

07:05 OKKEN: Yeah, the other thing I wanted, 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 instead of having it as a separate file, I like the idea of having it in the contributing guide.

07:20 KENNEDY: Yeah, I think the contributing guides are just linked to Brett Cannon's presentation about open expectations.

07:27 OKKEN: Yeah, anyway, don't be a jerk.

07:28 KENNEDY: Yeah, you're giving me a puppy with this PR, just understand. Thank you thank you for the puppy.

07:35 OKKEN: I think I will link to that in certain projects, 'cause I've got like, you know, like four contributors on my project, so, wow, it's just exploding.

07:42 KENNEDY: That's actually pretty good. I think the step from zero to one is bigger than from like one to 10.

07:49 OKKEN: Maybe.

07:49 KENNEDY: For most projects to get anybody to care, right?

07:51 OKKEN: Yeah, well I'm having trouble getting myself to do more work on it.

07:55 KENNEDY: Yeah, that's a different problem.

07:57 OKKEN: So, speaking of different problems.

07:59 KENNEDY: 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. 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, for like real projects, probably stick to PyCharm. But, VS Code has definitely come along.

08:28 OKKEN: I'm sure Brett Cannon will love that, "For real projects."

08:31 KENNEDY: I know, I think it's more that PyCharm is more focused on working with lots of files and projects, and it doesn't make a lot of sense, as much sense, to just open it up for like one file. It sort of can. But not as much.

08:42 OKKEN: I got, yeah.

08:43 KENNEDY: Yeah, it's getting that. So, VS Code is definitely coming along and one of the things it 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 Jupyter Notebook-type of support.

08:59 OKKEN: Oh wow.

09:00 KENNEDY: Right, so normally Jupyter Notebook is like you go and you open up the Notebook and you got these cells and you type in the cells and you run the cells and there's like these ipnb 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 like get into the Notebook and whatnot. So, VS Code has taken like a pretty unique approach where what they'll do is they will turn their editor into like a Notebook-like surface, but it's actually still a single Python file and you just put, what's the syntax? You put #%%, 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 and like a side window out of the Jupyter Notebooks, but you have a single Python file that you still treat as a single Python file.

09:59 OKKEN: Okay, does it generate a Notebook file?

10:03 KENNEDY: I don't know if it generates 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.

10:11 OKKEN: Oh, okay, neat.

10:12 KENNEDY: 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.

10:24 OKKEN: Yeah, neat. I do like that they're continuing, I know that there's a lot of work on VS Code, they're trying to make it even better and better all the time, and that's a good thing.

10:35 KENNEDY: Yeah, I guess some of the other things to throw out there that I added, now it has better support for virtual environments. 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, what-not. But the big deal is really the Jupyter, pseudo Jupyter support.

10:53 OKKEN: Yeah, cool.

10:54 KENNEDY: 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.

11:01 OKKEN: Yeah, I don't play a doctor on TV, but nevermind.

11:05 KENNEDY: Alright, so speaking of the right way.

11:07 OKKEN: Speaking of the right way, so a lot of people have projects they're supporting, or thinking about, maybe not a lot of people, there are a lot of open source projects. One of the things that 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. So, and API's evolved and so there's an article called The API Evolution The Right Way and this is written A. Jesse Jiryu Davis 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.

11:51 KENNEDY: He's a super storyteller and this one is no doubt part of that, so check it out for that alone, right?

11:57 OKKEN: 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 an analogy of, you know, 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. And he also, and adding and removing, like, he probably wouldn't remove parameters from an API call, but you might add some, how to go about doing that. Changing behaviors, sometimes things just aren't working the way they should and they should work different ways. And he also gives 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 datetimes. So if you did datetime.time(0, 0). So, that's an odd time, but it does happen 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 X or if time, that'll return true sometimes if it says 0, 0. So that's converting rules to time, or time to rules. A valid time should return true, but it used to return false and that was in pre, yeah, 3.4 and before.

13:28 KENNEDY: Oh my gosh.

13:29 OKKEN: It returned false 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.

13:42 KENNEDY: Yeah, he's got some good advice, for sure. One of them includes not putting feathers on snakes. Another one, is like, evolve cautiously. You know, avoid bad features, if you knew, right? Minimize features, less to maintain. Keep features narrow, mark experimental features as provisional, delete gently, and stuff like that.

14:02 OKKEN: 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 and I guess just recently deprecated them. So, they've been deprecated for awhile, but it took awhile to, it's hard to remove stuff, because people might be using it.

14:27 KENNEDY: Yeah, yeah, definitely. Even if you say provisional, someone's going to be like, "Wait, why did that leave? I needed that." Like it was a test. I don't know, maybe separate branches, 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.

14:45 OKKEN: Thanks for that advice.

14:46 KENNEDY: Yeah, yeah, Jesse, 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. Now before we get back on one of our kicks, because it has returned, so I want to tell you all about Digital Ocean. So, Digital Ocean, 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 Colten, from Adobe, talking about managing the security of 40,000 servers for some of their backend 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, you can do quick, easy, affordable, reliable, go check out Digital Ocean. So, we use them, WeWork, Docker, GitLab, Slack, all those folks use them and it's way, way cheaper, way, way simpler, you can get started right away. So check them out at, get a $100 to play around and get started and definitely recommend them, working out well for us, probably will for you, as well.

16:08 OKKEN: Yeah, thanks.

16:08 KENNEDY: Yep, thanks, Digital Ocean. Now, I'm trying to remember, have we spoken about GUIs?

16:11 OKKEN: I don't think we have, we should probably.

16:13 KENNEDY: We should totally do that, let's talk about them. So, actually, this is a thing, this is a, we talk about GUI so much, this item is back on Python Bytes. Like it has previously, on Episode 90, we spoke about this thing called PySimpleGUI. And PySimpleGUI, G, U, I, is, I would put it in a category of this other thing called Gooey, G, O, O, E, Y, which is, these are like really simple ways to build, kind of standard, not superly, not overly customized UIs. I just like quickly want to get like 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 like massively complicated, right? Like you wouldn't build like a full-on web browser in here, but you might build like a little utility UIs. So the idea is you sort of declare 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 TKInter and it looks like it's straight out of 1990, which was amazing. 'Cause I love history, but I don't want my modern apps to look that way, right? And I mean, that's not a...

17:25 OKKEN: It was great music, bad user interfaces.

17:27 KENNEDY: 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 TKInter, 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, 'cause Qt looked 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? And Cocoa, something like that, on Mac. So, he took a shot at it and like in one week he fully created a Qt version. So now you have TKInter if you want no dependencies and you have a Qt version if you want it to not look like, you know, Pearl Jam left it.

18:18 OKKEN: It really does look nice, so I'm excited about this, actually, so, good.

18:22 KENNEDY: Yeah, the new one is looking quite good, 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 the WxPython and a Kivy. And if he gets Kivy going, that would be pretty sweet because that would be mobile. 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.

18:50 OKKEN: 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 ran it, generated all these different versions and then you can kind of look to see which one you like better.

19:02 KENNEDY: Yeah, exactly, and I should point out, the API is identical from TKInter and Qt, right?

19:09 OKKEN: Yeah, it's awesome.

19:10 KENNEDY: So, you just do a different import statement, you import the Qt one instead of the standard one and as long as you have the dependencies in place, like the API doesn't change. So you could, I mean, 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, but if you want this to look better you got to take over on this line. Now, you should do something like, check out the FMan Build System, which will let you then take this thing, package it up as a installer in binary, standard and binary for the various OSs, and then you'll be in business.

19:41 OKKEN: And you can make millions.

19:42 KENNEDY: Millions and millions of cents, okay.

19:44 OKKEN: Okay.

19:47 KENNEDY: Alright, so, nothing major, but sort of a 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 'cause nobody knows who to ask on how something gets approved, who approves it or anything. Tell us more about this.

20:09 OKKEN: People at the heart of Python, are the core developers, they're trying to figure out all this stuff 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.

20:27 KENNEDY: I think it used to be go ask Guido for final word, and that was that.

20:31 OKKEN: Yeah, they may have been like a little more like structured than that, but there's...

20:36 KENNEDY: I'm summarizing, I'm summarizing.

20:37 OKKEN: How do we go forward is a topic and Victor Stinner, who is one of the core developers also, I met him last year at PyCon, great guy, he came up with this summary of there's a whole bunch of different, competing governance models and they are summarized at, actually there's one PEP called PEP 8000 that summarizes all of them, but it doesn't really compare them, it's just a quick summary of the different ones. But they're numbered 10 through 16, why is that? No, 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 and how in different ways, so for instance, comparing 'em, what their hierarchy's like? How many people are involved? What term 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 for your future, you can look at some of this stuff.

21:47 KENNEDY: 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... 'Cause Guido explicitly said when he 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 core developer team, I don't know?

22:07 OKKEN: Yeah, so there's always events of, 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, that technical leader governance model. There's one that's lead by a trio, so, kind of like Guido, but three other people kind of share that.

22:25 KENNEDY: You know, when we talked to Brett Cannon and Carol Willing, back on what was that episode? Around 90ish, I'm not sure, do you remember?

22:33 OKKEN: Wasn't it 100?

22:34 KENNEDY: No, that was a different one.

22:35 OKKEN: Oh, okay, yeah.

22:36 KENNEDY: We did a special dedicated one on this whole topic, I just don't remember exactly what the number was, but anyway, I thought it was really interesting that, I thought, of course, there was going to have to be an odd number of leaders because you're going to need a tiebreaker, alright? 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 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 interesting option.

23:10 OKKEN: Yeah, but I think it's kind of cool that this is all happening in the open and people can comment on the different proposals and they can also comment on this summary.

23:19 KENNEDY: Yeah they definitely can, right at the bottom of their show page. Nice. Alright, well thanks for featuring that. It's going to be interesting and I would guess we hear by the time PyCon happens what the decision is. I doubt they can go that long, more than, you know, close to a year without having any form of leading person or group.

23:39 OKKEN: One of the options that's not on the table is we just say we're done and not develop Python anymore.

23:44 KENNEDY: No, that's not an option, we can't do that. We can't do that.

23:46 OKKEN: Right.

23:47 KENNEDY: It's just doing too well, but, you know, I guess that's an always an implicit option, is we cold just stop. Alright, so the last one that I want to cover, the last main topic is this thing called Shiboken, because it comes from GUIs and I'm back on my GUI kick. No, that's sort of true, but that's not why I care about it. So, Shiboken is this subsystem that the Qt folks made to create the Qt for Python, which is basically they go to the Qt 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 Qt one, here's the Python one, they'll get out of sync and what-not. So they created this thing called Shiboken and the idea is you can run Shiboken against arbitrary C, C++ code and it will output Python libraries that interact with that at a C level.

24:38 OKKEN: Oh, that's cool.

24:38 KENNEDY: Right? 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 * in C, well, what that means is actually this type in Python, right? So you can, you know, manage that a little bit, right? Like, standard string is actually, you know, str in Python and you can tell it to do those mappings. But then you pointed out these libraries, and it can, you know, extract them, you can hide functions or add functions, all sorts of stuff. So it's pretty cool.

25:12 OKKEN: That is great, automating the boring stuff.

25:14 KENNEDY: Exactly, definitely automating the boring stuff. So, these folks are creating and maintaining it to build PySide2, basically, at least the wrapper part of PySide2. 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 Qt for Python Under the Hood, which I'll link to, and that one basically shows you how this 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. 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.

26:08 OKKEN: Yeah, that is neat. Any idea where the name come from?

26:11 KENNEDY: No. No idea at all. There's probably a really great story where the name came from, 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, I think this is sort of a more modern way to explicitly write these mappings. And Dan Bader over on 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. And then you just start using it in Python. Of course you got to compile your Cython code with Cython, but it's pretty nice. Until there's a good example of doing that from scratch, as well. So, Shiboken, these other two, they're all quite interesting. I'll link to 'em all.

27:07 OKKEN: Nice.

27:07 KENNEDY: Yeah. Well, and that's it for our official items, right? You got anything else you want to share?

27:10 OKKEN: I don't, do you?

27:12 KENNEDY: 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, whew!

27:20 OKKEN: I still need to do that exciting.

27:23 KENNEDY: 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 looking, you know, 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 'cause it's going to be fun, it's always fun. I'm looking forward to getting there with you, Brian.

27:46 OKKEN: Yeah, definitely, yep.

27:47 KENNEDY: 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. PyCascade's tickets also went on sale just a couple days ago and this is the much smaller, like 200 person conference in Seattle. And this one will definitely sell out because it's so small. I think they received over 200 talk submissions and they can only have 200 people, so I'm pretty sure it's going to sell out. 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.

28:19 OKKEN: 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.

28:24 KENNEDY: 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. You know, definitely the PyCon one is a big deal. The other one is, have I talked about GUIs? No so-- The other one is a book that caught my attention. I think there's tons of Python books and, you know, 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 using Pygame and Pygame 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.

29:10 OKKEN: I'm kind of excited to check this out, too. It looks fun.

29:12 KENNEDY: 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 yourself.

29:19 OKKEN: 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.

29:28 KENNEDY: Yeah, yeah for sure. Much of it here on Python, but that bucket is getting quite full. But this is definitely one of the things that's tempting me to like add one more thing to the bucket, it looks interesting. Alright. Brian, thanks for being here and sharing all this with me and everyone else.

29:41 OKKEN: Yeah, thank you.

29:41 KENNEDY: You bet. Bye.

29:42 OKKEN: Bye.

29:43 KENNEDY: Thank you for listening to Python Bytes. Follow the show on Twitter via @pythonbytes, that's Python Bytes as in B, Y, T, E, S. And get the full show notes at If you have a news item you want featured, just visit and send it our way. We're always on the lookout for sharing something cool. On behalf of myself and Brian Okken, this is Michael Kennedy. Thank you for listening and sharing this podcast with your friends and colleagues.

Back to show page