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


Transcript #83: from __future__ import braces

Return to episode page view on github
Recorded on Wednesday, Jun 20, 2018.

00:00 Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds.

00:05 This is episode 83 recorded June 20th, 2018. I'm Michael Kennedy.

00:09 I'm Brian Okken.

00:10 And Brian, we have a special guest, don't we?

00:12 Yes, we do.

00:12 Yeah, so Chris Medina is here to join in the fun and share his perspective on things.

00:17 Hey, Chris, welcome to the show.

00:18 Hey, guys, how's it going? Good to be here.

00:20 Yeah, it's good to have you.

00:21 And I also want to say thank you to DigitalOcean.

00:23 They are a major, major sponsor of the show and they're sponsoring this one as well.

00:27 tell you more about them. But the short version is Python bytes out of them slash digital ocean, get $100 credit for new users. Brian, speaking of new users, people are in Python, they might want to set up a server at some point, set up a server. Well, you know, eventually, eventually, they'll have a website or something, right? Once they learn to code, but you've got a really nice way for them to get started. I have been always been reluctant to try to look or play with some some of these beginning code editors, because part of learning how to code is learning an editor.

00:59 But I'm kind of warming to the idea of some of these specialized editors.

01:03 And there's one that I wasn't familiar with, which is Moo.

01:07 I think it's Moo or Mew, I don't know.

01:10 Hey, Mew, code with Moo.

01:12 It's got a whole bunch of people on board.

01:14 If I go to the, I can't remember where it is, but there's a bunch of people working on this.

01:19 And it's a kind of a neat little editor that has, I was playing with it this morning, and it has some built, you just open it up and it has built in right off the bat.

01:29 It asks you if you're gonna do it for Python 3, or if you're targeting like an Adafruit chip or a micro bit.

01:36 So it has built in targeting of those things like right away.

01:40 And there's like along the top, there's some icons for loading and saving files, running it, debugging it, popping up the REPL, interacting with the plotter.

01:51 And then there's a, even there's a theme button so you can jump back and forth between dark theme and light theme.

01:57 And it even has like a linter built in for you can check things.

02:01 And it's all like you don't have to memorize any key sequences or there's not really any menus around.

02:07 It just is all up there.

02:09 And I think this is actually be great for teaching people how to code.

02:13 So I'm gonna start using it for like demos and stuff.

02:17 - It's pretty cool, yeah.

02:18 So as you type, basically, it pulls up both the completion for the arguments that go to a method or something, but also the documentation, like while you're typing.

02:29 So, you know, you might get annoyed with that if you know what you're doing, but if you're new, it's really cool to show you like, hey, you can call these various things and here's the arguments, here's what it means, and even has a debug, it's pretty cool.

02:40 - And the-- - So it's a separate app?

02:42 - Yeah, it's a separate app, but you can, there's an installer available, so you can just, You don't even have to tell people about pip right away, 'cause you can just install it with an installer.

02:53 But you can install it with pip, 'cause it's just a Python thing.

02:56 I think it's a Qt, or Qt, I've been corrected.

02:59 It's a Qt application.

03:01 - Oh, that's really cool.

03:02 It's Qt, okay.

03:04 - Yeah, I installed it with pip.

03:05 And then one of the things that it has in the installation instructions is instructions on how to use.

03:12 So when you install it with pip, you get like a command line invocation to invoke it, but it recommends using another package called shortcut, which you just, if you pip install shortcut, you get shortcut new editor, for instance, and it'll create on my Mac, it created a, I just went ahead and created a shortcut in my launchpad to launch it.

03:36 So I didn't--

03:37 >>Oh, that's pretty cool.

03:39 >>Attach that to any Python script, you can just launch it from there.

03:44 - Nice, oh, but--

03:45 - Looks like it has different modes too.

03:47 Like you can set it up to work for writing code for Adafruit or for Pygame or stuff like that.

03:53 That looks kind of neat.

03:54 - Yeah, and then when it has the built-in REPL, if you pop open the REPL, it's not just your normal REPL, it's a Jupyter notebook, or a Jupyter REPL, which is pretty cool.

04:04 - Yeah, that's really cool, I love this.

04:06 Yeah, it's very neat.

04:07 - And there's some, like on the tutorials link, there's a whole bunch of tutorials that aren't quite there yet.

04:14 So I'm guessing they could use some people to help out with this project.

04:18 - All right, yeah, and that'd be a great easy way to get sort of get your feet wet in open source is to write some tutorials, right?

04:25 You don't have to too much to depend upon or you probably won't break anybody's code by writing one.

04:29 - Yeah. - Yeah, nice.

04:31 So Chris, one of the things I find that's pretty interesting is we love to talk about super advanced topics, but a lot of times it's really what people need or want, especially if you're helping or mentoring someone else, is like some more fundamental stuff, right?

04:45 - Yep, I found this a kind of an intro topic into how the Python parentheses system works.

04:52 It's pretty interesting also for folks that come from other languages, so you can get kind of like a quick translation from one place to another, how things operate.

05:01 - It sounds pretty simple.

05:02 I mean, it's about Python parentheses, right?

05:04 The Python princess, the primer from Reuven Lerner, shout out to him on that.

05:10 But there's some pretty advanced things going on, and a pretty cool feature coming at the end.

05:15 - Great.

05:16 - So tell us about it.

05:17 - So the fun stuff is, it goes into all the different ways that you actually use parentheses while you're doing your Python syntax and what you can use it for.

05:25 So you get a couple of the simple topics, like usually a parentheses is used in a callable to call a function and pass in parameters or to call a class that implements callable.

05:37 Things like prioritization of operations or conditionals, you also use parentheses for making tuples, but you also get a little bit into generator expressions and the advantages of that.

05:50 And a couple little quirks, you can use it for screening some of the indentation rules that Python has that some people kind of hate, but other people like me love, so I'm special.

06:02 You also get into square brackets and curly braces.

06:04 And square brackets, which are typically used for lists and for indexing.

06:10 For somebody that's new to the topic, you'll want to look at the slices section because slices are a pretty powerful little tool that you get out of Python.

06:20 If you haven't used it before, how to get specific sections of a list or a variable.

06:27 And there's also, well, not in the article itself, but some of the folks that commented on the article also mentioned that some of the new type hint stuff also uses square brackets for identifying like the variables, if you have a variable that's say a list or a container class of some sort, the data type that it's implementing.

06:50 So if you have a list of floats, you would say list curly bracket floats when you're specifying what type it is.

06:55 - Yeah, that's really interesting.

06:56 It's almost like generics in like C# or templates in C++, where you would say, this thing takes a list of strings.

07:06 You can say it's just a list, but then you don't get any help on what's contained within it.

07:11 But you could say, import the list thing and say list square bracket int square bracket.

07:15 Then it has to be a homogeneous list of ints, not just any random list, which is pretty cool.

07:19 - Exactly.

07:20 - I was looking through here and down at the bottom, they're talking about some of the ways to future-proof your code.

07:26 So you can say from dunder future import division.

07:32 - And there's a proposal for braces, huh?

07:35 - Uh-huh.

07:37 If you have a Python REPL open right now and you kind of want to try that, you'll get a neat little message of what the future will look like if you ever actually import braces.

07:47 - Right, so if you can see the coming braces feature, you can say from dunder future import braces and see what support Python's probably gonna be adding for braces soon.

07:56 Which, you know, not everyone's typing, they're probably driving this up.

08:00 So basically it throws a syntax exception error and says, not a chance, we're never adding braces.

08:08 It's beautiful.

08:09 I knew about anti-gravity, we were joking about that earlier, but I didn't know about the import braces, that's pretty sweet.

08:14 - One more interesting thing to mention, obviously it goes into curly braces and how you use that as well for set comprehensions and dictionaries.

08:21 The other thing to remind folks is Python 3.6 Plus, there is f-strings, and with f-strings, You can use braces inside a string that you prefix with F to the interpreter replaces any code that you put inside those braces actually executes it and replaces the result into the string.

08:42 Yeah, very nice.

08:43 f-strings are great.

08:44 And it's way more efficient.

08:45 Fastest and the shortest.

08:46 Cleanest.

08:47 Very nice.

08:48 So Brian, you mentioned that that Mew Editor is a Qt application and Qt is kind of making a bit of a resurgence these days.

08:55 At least I've been paying more attention to it.

08:57 - Yeah, well it had gone through some fairly dark times.

09:01 I mean, obviously we've been on our gooey kick for a while.

09:03 We're going through all these different options and there's still tons of great options.

09:06 Like WX Python had their Phoenix release, which was sort of a rebuilding of that whole thing, which is awesome.

09:13 A little while ago we talked about that.

09:14 So the Qt company, Qt company, is the company that is behind the Qt framework.

09:21 And they just announced the official release for Python for Qt, which is taking these various version mismatch, PySide 2, PyCube, all those things, and rebuilding it in a two-year project into a fresh, new, shiny version.

09:36 So that's pretty awesome that that's more or less out.

09:38 - Oh, that's exciting.

09:39 We heard recent, not too long ago, that it was coming, but having it be released, wonderful.

09:45 - Yeah, so if you're messing with this, it's version 5.11, and I think it's still in a tech preview in terms of the execution bits, but I suspect that this means the APIs are frozen.

09:56 So you can go and check that out.

09:58 Yeah, so it started two years ago, they've been working on this.

10:01 And one thing that's really nice is the way you get it, is you just pip install.

10:05 And they, right now it's not coming out of pypi.org itself, it's coming out of a different place.

10:11 So they show you the command like to pass their particular sort of dev, their dev index URL, which I put in the show notes.

10:19 So people can check that out.

10:20 - So that looks like they have their own of IPI implementation there.

10:24 - Yeah, something like that, right?

10:25 Like a little bit like what you guys are doing that we talked about over on Talk Python, right, Chris?

10:29 - Yep, exactly.

10:30 - But this one goes outside the firewall, it looks like.

10:33 Nice, so I just wanna give a shout out.

10:35 People who are looking, waiting for Qt to become more important to get revitalized.

10:41 I feel like this is the announcement we've been waiting for.

10:45 Hopefully this means lots of good things.

10:47 We'll see what happens.

10:48 - Yeah, pretty cool.

10:49 - Yeah, for sure.

10:50 So speaking of good things, DigitalOcean, they're very good.

10:52 They do all sorts of awesome stuff, right?

10:54 They're giving you guys tons of credit if you want to get started there.

10:58 And I always try to talk about different ways we are using them in our various bits of infrastructure.

11:03 And that's still true, still are still enjoying that.

11:05 But one of the things that they have that's really cool is when you go create a virtual machine, you can say I want to one click app, which really means a virtual machine configured to run something.

11:14 And they recently set up a machine learning virtual machine for you.

11:18 So you can go there, create a droplet, that's their VM terminology.

11:21 Click on one click apps, pick machine learning and AI, and you automatically get a machine with Python 3, R, Jupyter, Notebooks, TensorFlow, PyTorch, all that stuff.

11:31 And you pick like a CPU optimized, optimized CPU for your virtual machine.

11:36 All sorts of good stuff.

11:37 So if you want to check that out, you can do it real quick and affordably, just play around with those tools, which is pretty awesome.

11:43 So check them out over at pythonbytes.fm/tools.

11:48 slash DigitalOcean.

11:50 And like I said, if you go there and you're a new user, you'll get $100 credit, which is also pretty sweet.

11:56 So Brian, iteration is a key element of Python, right?

12:00 Yeah, we often deal with lots of iteration and generators and iterators and all sorts of things.

12:06 Exactly.

12:06 We've got generators.

12:07 The primary for loop is not for i equals 0, i plus plus, but it's for thing in collection.

12:13 And it's beautiful, right?

12:14 But it goes even deeper.

12:15 Developing your own iterators and generators is a fun thing to learn about, but I have to admit that I don't often do that very much.

12:23 And one of the things that I've, it's always been on my to-do list is to learn more about the IterTools module.

12:31 And I've not really ever explored it too much.

12:34 And RealPython has a blog post called IterTools in Python 3 by example.

12:41 And I really enjoyed this.

12:43 It's a nice introduction as to what is the problem that iterators and generators are dealing with?

12:50 And then, for example, it starts off with just, how does zip work to take two lists and create another list with each element?

13:00 And then what if you need not quite the same zip?

13:04 What if they're not the same length and things like that?

13:07 And some of the problems that can happen and why lazy evaluation is a good thing.

13:11 And actually, in the discussion, it used the time function, the time shell function is I guess this is a like a Unix-y kind of thing with a -f, which I've never used before, and that showed the memory used also. Didn't know that was a thing. Oh, that's cool. But as this example of using like a big example in the memory usage blew up to like huge.

13:34 And so just talk through like some of the different things that are in IterTools and why that helps you. I pulled out a couple like a lot of these things, if you don't know they're there, you'll just come up with it on your own. Like doing combinatorial sets, those are already in there. Coming up with permutations, you don't have to do a random index. You can just use their iterate, the ones that are built in.

14:02 I think that's a good example of being fluent in Python versus being able to make the code work but not really deeply knowing it. If somebody said, "Hey, I want you to take this thing and generate a set of permutations, all the permutations of say this word or whatever, you might attempt to implement the fairly complicated algorithm or you might just call IterTools permute sort of thing, right?

14:23 And then boom, it's just there.

14:24 So there's so many things like that that are just at your fingertips if you just import them.

14:29 Yeah, I mean, a lot of people are smart enough to like, if you come up with all the combinations, you can just have a nested for loop and figure out how to do that.

14:36 But you don't have to, it's already there.

14:39 One of the things I didn't know, there's some fun things like some fun uses of count and cycle.

14:45 I didn't know about cycle, that's pretty cool.

14:47 It just kind of cycles through a set and then keeps giving you more of the same.

14:52 And the tutorial also talks about, in the tutorial it's using the next function, which is for iterators, you don't have to use them in a loop, you can even just call the next function, which is kind of fun.

15:07 And then something that's I slice, I didn't know this was a thing.

15:11 So if you want to take a slice of a list or a slice of some other iterator, you can do that.

15:19 But if you want that to be an iterable also, this does it for you.

15:24 And so there's a whole bunch of goodies in here.

15:26 Yeah, one of my favorites is I slice because like Chris already said, slicing is awesome.

15:31 But if you try to do, say, slice on a generator, it'll just go fail like that.

15:35 Nope, we don't slice generators.

15:37 Well, you can I slice them and it works just fine. It's beautiful. All right, so it's you sort of make things sliceable That otherwise would not be it's really great. Yeah, so there's definitely a definitely good read to Beef up on the the inner tools. So Yeah, I recommend everybody that writes any python code to just go look at inner tools and all the things you can do There's lots of stuff online and this is a good resource Every once in a while every every time there's an article that's something about inner tools. I always go Just at least skim it because there's always some little magic in there. You're like, oh, I implemented that myself the other day Let me go delete that code and actually do something that's maintained by somebody that knows something more more than that Yeah, and maybe even in c So it's a little faster right down in the internals Nice so speaking of sort of working with collections and intervals and things like that chris I feel like your item dovetails really in well in with this right?

16:30 So the the next item is about python sets and set theory. It's a nice It's also kind of a primer on how sets work in Python, how you define them, how you work with them, and just a tiny bit on set theory.

16:46 So you can build sets different ways.

16:49 The most common way is by calling the set function to build an empty set.

16:53 But you can also use curly braces, which we were talking about earlier, to have set comprehensions.

16:59 And it's a great way of, say, deduping items in a list.

17:03 So if you have a list of a bunch of integers or something like that, you can use comprehension to iterate through the list and just grab the items that you care about.

17:12 And you only get the unique items out of it.

17:15 The interesting part about sets as well is that they're all one.

17:20 So when you're making a membership test, you can, it's fast, it's considerably faster than going through, say, a list where you have to iterate through the entire list to see if the item is in it.

17:30 Yeah, that's cool.

17:31 I definitely like the distinct aspect.

17:32 that's what I use a lot of sets for is like I have all these things, there might be duplication, I just want them one of each, you know, if there's duplicate, just don't add it right.

17:42 So you can just like, you could even say set of some list, and then, you know, just get that back as here's the distinct stuff in the list, which is great.

17:51 Also for simplifying conditionals.

17:54 So you have the example, well, real Python had the sample and the stuff you covered about parentheses of if item equals x or item equals y or item equals z or whatever, right? Like that becomes like kind of a nasty multi-line looking thing. Maybe a more Pythonic way would be say if x is in set, you know, curly set x, y, z. Right.

18:14 You can do stuff like that. It's always another point to keep in mind is sets are sets are of immutable values. So you can't put like say a normal set inside of a set, there's other value types and stuff like that.

18:32 You can't just like stick in a set.

18:33 Right.

18:33 So it has to be hashable, basically same as dictionary keys.

18:36 Yeah.

18:37 Yeah.

18:37 Right.

18:38 So it can't change.

18:39 But it's always, always interesting to remember once you've made a set that you're looking for distinct values and things like that, I always try to look through my code, if there's some sort of, if I'm checking, if item is in list one.

18:52 And also in list two, because you can always have two sets and do an intersection between them.

18:57 And then you don't have to do those for loops and the code is kind of optimized to do that for you, which I'm sure will not be O of N squared, I think, when you're writing your code, right?

19:06 Yeah, exactly.

19:07 And then just to quickly look back on immutability, if you want to make a set of sets, there's also such a thing as a frozen set, where the set itself is immutable, and you can stick that into a set.

19:20 So stuff like that.

19:21 That's very meta.

19:22 Brian, do you use sets very often?

19:23 I always have a tutorial like this or something to look up, because I forget what the operators are.

19:29 Because it does have union, intersection, difference, symmetric difference, things like that.

19:35 And remembering all of that stuff from your college days is good to try to make some elegant code.

19:43 But it has, for instance, the union operator is, you can just use the bar function for that.

19:49 And looking up all those is a good thing.

19:52 Although, since I know I have to look it up, I usually put a comment in there to tell anybody else what I'm doing to say this is a set operation going on here.

20:02 Yeah, it makes sense.

20:03 I feel like sometimes knowing the right data structure can really open people's eyes, really change the way they're doing something.

20:11 And sets and dictionaries definitely seem to fall into that space where you don't use them that much, but when you do, you're like, "Whoa, that really is better." So many ways.

20:20 also one of those things of like it's a new hammer. Try to be sure that you don't see everything as a set problem because everything isn't a set problem.

20:31 Yeah, for sure. All right, so last item that I wanted to cover on this episode is a little bit of a look ahead maybe to next week, but to put this on people's radar so when it launches you can like do maybe a backflip or something if you've been practicing. So coming up, we We just had the release of Python 3.7 release candidate one, which was on June 12, and expected or planned for June 27, which is seven days from now is the final release of Python 3.7 official.

21:02 How about that?

21:03 I'm so excited.

21:04 Do you know what makes me most excited about this?

21:06 There's certain things in here like okay, cool, date breakpoint, that's kind of nice data classes kind of nice.

21:11 But what really makes me most excited is this is the categorically fastest Python period.

21:16 So all the people that say no, we're using legacy Python, because under this particular use case, it's faster than Python three, seven, and there may still be some very narrow use case.

21:27 But generally speaking, this is the fastest Python period, it's much faster than Python three, certainly up to three, three, but it's it's even quite a bit faster than three, six.

21:38 So for example, from three, six to three, seven, when you're calling methods, especially methods that are part of classes, not standalone functions, but like bound methods to classes.

21:49 It's like 20% faster.

21:50 That's a reason right there to switch.

21:52 Yeah.

21:53 And what's cool, like all you got to do is just run on the new version, right?

21:55 There's no like, oh, I switched to pipe, pipe or something.

21:58 It's just, I now have three seven.

22:00 So life is better, especially if you're using a framework.

22:02 Yeah.

22:03 Anybody who's using a framework, remember, there's a bunch of levels of abstraction around it.

22:07 So there's a bunch of function calls.

22:08 Exactly.

22:09 Yeah.

22:10 There's tons of function calls.

22:11 So this is really, really good news.

22:14 So just to run through some of the features, there's improvements to coupling that type annotations or type hints added to the system.

22:24 So previously, if I wanted to say here's a function and it returns this type of thing, right?

22:30 It returns like this object or some type I've defined, I have to literally import that type at the top of that file.

22:37 And what that means is at import time, I pay an extra import processing that file, which I might not have otherwise loaded potentially, or at least not right then.

22:48 The other one is circular dependencies are super annoying in that.

22:52 Like, so for example, I've got like a repository class and it returns some kind of object, right?

22:59 But that object when it's defined, it has to know about the repository.

23:02 So it says it returned, like it uses this somewhere else.

23:05 Like that basically will fail and break the import because it's circular, right?

23:10 So with this new thing, this change is, instead of actually evaluating these type ints and having to import them, it's just evaluated as if you would type them as strings.

23:21 So they're not actually evaluating the true types when you do type annotation.

23:25 So that gives you more flexibility, the circular dependencies aren't a problem, and it's faster.

23:29 Yeah.

23:30 Yeah.

23:31 Yeah.

23:32 The one that this, the type annotations thing that makes me the most crazy is I have a class and it's got like some function that returns an instance of itself.

23:38 You can't say that in the previous type ins as a concrete types because you can't say the name of the class until it's fully defined.

23:46 But you're halfway through the class trying to say this method returns one of me.

23:50 You can get around it by putting quotes, but that's effectively like what this does without the syntax to put in the quotes.

23:56 So it looks more natural.

23:57 So you can do that now with the three side.

23:59 Yeah, but you have to put quotes and you have to like say the name out exactly in as a string.

24:03 Okay.

24:04 Yeah.

24:05 Let's take a look at that.

24:06 Yeah, it's pretty cool.

24:07 data classes, which are really nice. They're kind of like tuples. They have a lot of interesting hashing and equality operators on them as well as representation ones, they can be frozen, so they can be mutable or immutable, all sorts of things. So kind of like enumeration name tuple, tuple, it's stuff all brought together. It's sort of a derivative of the adders project, but they decided not to move adders into the framework because it's evolving quickly and and they don't want to like freeze it.

24:35 So data classes kind of same thing.

24:37 I just want to point out that data classes has a backport for 3.6.

24:41 So you can go ahead and start using those in 3.6 as long as you pip install them first.

24:45 Yeah, how do I get that?

24:46 Oh, did pip install data classes?

24:48 pip install data classes.

24:49 Oh, that's that's pretty killer.

24:50 I didn't know about that.

24:51 Alright, so there's a new breakpoint function, which we talked about, we don't use that much because like if you just fire a PyCharm, who cares, but there's some pretty interesting It's got to be click in the gutters.

25:03 But there's actually some pretty interesting ways to like, say, hook a remote debugger to your code, things like that.

25:09 There's really interesting stuff going on there.

25:11 AsyncIO got better.

25:12 Chris, you should be happy about that.

25:13 Did you see these?

25:14 Some of this is pretty cool.

25:15 Tell me about it.

25:16 This AsyncIO run function is a way of running a coroutine from synchronous code, which I mean that existed before, but you had to do like 50 million things to set your stuff up correctly and make sure you didn't break other.

25:28 You just call run and it will internally create the loop and do it for you?

25:32 Yep. Just call run, starts coroutine.

25:34 Oh, that is sweet.

25:35 It starts an event loop, runs your coroutine, and closes the event loop at the end.

25:40 So you're going to have to be careful when you use this. This is pretty cool.

25:42 And there's some of the task management stuff that's also a little bit better.

25:48 So this is pretty cool. I'll have to maybe write a post on this.

25:52 Yeah, that's awesome. Yeah, definitely cool.

25:53 Another one that's really nice is the time module.

25:57 and a bunch of other functions as well have become more accurate, especially over long durations, and they've taken on nanosecond resolution. So you can import time and say time, you just call time, and it'll give you a floating point value of the number of seconds since the epoch, like 1970. But this, you can also now in 3.7 say time_ns, and it'll give you the nanoseconds as an integer and because it's an integer not a float, that means there's no drift or anything in sort of the floating point operations.

26:30 It's like truly the nanoseconds, which is awesome.

26:33 All right, and finally I just wanna close out, give it like what would a Python Bytes show be without a shout out to Anthony Shaw, right Brian?

26:40 - Yeah, he's been a part of the show a lot.

26:42 - For sure.

26:43 So he actually did a brand new course on Pluralsight called What's New in Python 3.7.

26:49 So I put a link to his course there as well.

26:51 And actually, it's only about an hour long, but it goes really in-depth into the advantages or all these various things.

26:56 So quite cool.

26:58 If that's easy for you to check out, go ahead and drop over there and check out Anthony's course.

27:02 Very nice.

27:04 Yeah, so I'm really excited for when this ships.

27:06 I think it's gonna be great.

27:07 There always seems to be some latency on the Linux distributions and stuff before I can really make use of it, but pretty soon I'll be happy to be running this.

27:16 - Yeah, definitely.

27:16 - Yeah, you guys have any extra news that you wanna cover?

27:19 That's it for our official items.

27:21 I've been doing a lot of going back, went through all of the code that was in the pytest book to make sure it's 3.7 compatible, which I was happy to find out that it's fine.

27:33 So that's good. - Nice.

27:34 Yeah, very cool.

27:35 - I saw this really cool tutorial series about Mongo.

27:40 Do you know anything about this?

27:42 - May have spent an incredible amount of time working on this project.

27:45 Yeah, so I did a three-part, three-hour webcast series in partnership with MongoDB.

27:52 And basically from concept to actually deploying it on DigitalOcean actually, I rebuilt the pypi.org website in MongoDB and then published it to the internet.

28:04 Which I then deleted so I don't have to pay to keep it running 'cause there's a real one.

28:07 But yeah, it's recorded, people can go check it out.

28:10 You got the link in the show notes, so that's awesome.

28:12 - Yeah, nice, it looks pretty fun.

28:14 - Yeah, thanks for the shout out.

28:15 Chris, anything you wanna let people know about while you're here?

28:17 - Nope, I don't really have anything new.

28:18 Maybe just keep an eye out for a few new posts coming up, then try to accept that.

28:24 And my new blog.

28:26 - Awesome, yeah, there might be one about this asyncio.run, huh?

28:29 - Yeah.

28:31 - Yeah, you called it out.

28:32 You gotta write it now, so.

28:33 - Yeah.

28:34 - Remember, the internet is written in ink, and so this is permanent now.

28:39 - My next post was gonna be about one of my modules which uses asyncio a bunch, so maybe I'm going to go back and experiment with 3.7 and what changes I would have to do there to write it up.

28:50 So this is pretty cool.

28:52 Yeah, awesome.

28:53 Well, Chris, thanks for being on the show.

28:54 And Brian, thank you as always.

28:55 Yeah, thank you.

28:56 Thanks for having me.

28:58 Thank you for listening to Python Bytes.

28:59 Follow the show on Twitter via @PythonBytes.

29:02 That's Python Bytes as in B-Y-T-E-S.

29:05 And get the full show notes at PythonBytes.fm.

29:08 If you have a news item you want featured, just visit PythonBytes.fm and send it our way.

29:12 We're always on the lookout for sharing something cool.

29:16 On behalf of myself and Brian Okken, this is Michael Kennedy.

29:19 Thank you for listening and sharing this podcast with your friends and colleagues.

Back to show page