WEBVTT

00:00:00.001 --> 00:00:05.700
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:00:05.700 --> 00:00:11.760
This is episode 37, recorded July 31st, 2017. I'm Michael Kennedy.

00:00:11.760 --> 00:00:12.780
And I'm Brian Okken.

00:00:12.780 --> 00:00:14.980
And we've got a bunch of sweet stuff lined up for you.

00:00:14.980 --> 00:00:18.680
Brian, let's talk about contributing to Python.

00:00:18.680 --> 00:00:24.700
If there's something in CPython itself we want to change, and we don't like how it works, maybe we just go change it.

00:00:24.700 --> 00:00:25.560
It is open source, right?

00:00:25.560 --> 00:00:31.600
Right, it is open source. And there is and has been a developer's guide for a long time for CPython.

00:00:31.600 --> 00:00:36.520
But the URL has changed recently. I think I saw that recently.

00:00:36.520 --> 00:00:41.120
But it's at devguide.python.org.

00:00:41.120 --> 00:00:46.920
And I bring it up mostly because the URL changed, and I like that URL.

00:00:46.920 --> 00:00:49.640
But also, it is how to contribute to Python.

00:00:49.640 --> 00:00:54.160
But I was looking over the initial page where it drops in.

00:00:54.160 --> 00:00:57.740
And there's some really cool links in there.

00:00:57.740 --> 00:01:00.440
And one of them is just for everybody.

00:01:00.440 --> 00:01:02.340
It's how to contribute to open source.

00:01:02.340 --> 00:01:05.400
And another one is building welcoming communities.

00:01:05.400 --> 00:01:08.900
And those are both at opensource.guide.

00:01:08.900 --> 00:01:11.280
But they're pretty good articles.

00:01:11.580 --> 00:01:15.260
I also liked basically the structure of some of the getting started.

00:01:15.260 --> 00:01:18.960
They have a whole bunch of, I think it's a good onboarding thing.

00:01:18.960 --> 00:01:30.380
Even if you're not going to contribute to CPython, I think it's a nice outline of things to include in any large open source project to try to get people onboarded fairly quickly.

00:01:30.380 --> 00:01:31.120
Yeah, for sure.

00:01:31.220 --> 00:01:35.660
We've got, like, here's how you propose changes to Python itself.

00:01:35.660 --> 00:01:40.320
They've got some nice things that take you through the whole, like, get flow style.

00:01:40.320 --> 00:01:45.840
You know, the lifecycle of a pull request, running and writing tests, talking about coverage.

00:01:45.840 --> 00:01:46.900
You know, there's a lot of good stuff here.

00:01:46.900 --> 00:01:48.540
Yeah, and talking about the issue tracker.

00:01:48.540 --> 00:01:53.840
And apparently there's an experts index, which is kind of native, like, who do you send issues to.

00:01:53.840 --> 00:01:57.940
And then even things like how to run the tests and stuff.

00:01:57.940 --> 00:01:58.840
So it's nice.

00:01:58.840 --> 00:01:59.060
Yeah.

00:01:59.060 --> 00:02:00.020
Yeah, very nice.

00:02:00.020 --> 00:02:00.640
Cool.

00:02:00.640 --> 00:02:05.060
So if you have an idea for CPython, the thing is still changing a lot.

00:02:05.060 --> 00:02:08.260
Like, we just covered recently the 362 changes.

00:02:08.260 --> 00:02:14.980
And that was pretty extensive for just a little, you know, tiny release to, like, basically a maintenance release.

00:02:14.980 --> 00:02:18.760
So how would you like to rule over your shell, Brian?

00:02:18.760 --> 00:02:20.020
Rule over my shell.

00:02:20.020 --> 00:02:20.420
Yeah.

00:02:20.420 --> 00:02:24.000
In fact, not just ruling over your shell, but over many of the shells.

00:02:24.000 --> 00:02:26.360
Like, even the shells that are in the outer kingdoms.

00:02:26.360 --> 00:02:29.720
So the thing that I want to talk about next is called Sultan.

00:02:30.060 --> 00:02:32.760
And it says, command and rule over your shell.

00:02:33.280 --> 00:02:41.740
And so basically you can run shell commands using this library, this package called Sultan in a Pythonic manager.

00:02:41.900 --> 00:02:46.020
So the simplest thing, like, let's suppose you want to install tree.

00:02:46.020 --> 00:02:50.440
So you can type tree and you get this cool, like, ASCII hierarchical view of your files.

00:02:51.220 --> 00:02:52.720
And you would just say, you know, pip install Sultan.

00:02:52.720 --> 00:02:54.800
And then you would say, you know, pip install Sultan.

00:02:54.800 --> 00:02:56.580
And then you would say, create a Sultan object.

00:02:56.580 --> 00:03:00.940
And you can say, Sultan.sudo yum install tree is a string.

00:03:00.940 --> 00:03:02.280
And then say, dot run.

00:03:02.280 --> 00:03:08.480
And it will actually go and it will run that command as sudo on your system.

00:03:08.480 --> 00:03:09.100
Right?

00:03:09.180 --> 00:03:10.060
That's pretty cool.

00:03:10.060 --> 00:03:17.200
And you can do things like work with aptitude or yum or ls or all the shell commands.

00:03:17.200 --> 00:03:17.420
Right?

00:03:17.420 --> 00:03:24.620
And they also have a way to work with it inside of a with block, a context manager, so that it can clean up with itself.

00:03:24.740 --> 00:03:30.040
It runs a slightly different command that I think has some sort of better cleanup.

00:03:30.040 --> 00:03:33.260
I don't actually know all the details with yum.

00:03:33.260 --> 00:03:35.380
So anyway, it's pretty cool.

00:03:35.380 --> 00:03:36.920
It even works remotely.

00:03:36.920 --> 00:03:45.880
So I could, like, say, Sultan.load and give it a host name and say to do that as sudo and then run that remotely on the server.

00:03:45.880 --> 00:03:51.600
And if there's any errors or whatever, it brings all that information back and prints it out for you in the warnings, I think.

00:03:51.600 --> 00:03:52.720
I think it would be useful.

00:03:52.720 --> 00:04:00.440
I think it right off the bat, some of the automation stuff that just large projects have, like build scripts and whatever.

00:04:00.440 --> 00:04:07.440
I'd like to have them in Python, but sometimes I don't really know how to do it within Python itself.

00:04:07.440 --> 00:04:09.100
But this is kind of neat.

00:04:09.100 --> 00:04:10.140
I'll have to check this out.

00:04:10.140 --> 00:04:11.180
Yeah, it's pretty cool.

00:04:11.180 --> 00:04:19.440
I think it's pretty focused on the use case that, you know, people have, like, running stuff over SSH, remote servers, a lot of shell stuff.

00:04:19.440 --> 00:04:23.840
But if you find yourself doing that a lot and you want to do more of it in Python, here's a pretty cool library.

00:04:23.840 --> 00:04:24.400
It's really simple.

00:04:24.400 --> 00:04:25.380
So what is yum?

00:04:25.380 --> 00:04:27.080
Yum is a package manager.

00:04:27.080 --> 00:04:32.120
I don't remember which distribution it's for, but, like, Ubuntu has aptitude, you know, like apt-get.

00:04:32.120 --> 00:04:34.840
Yum is for some of the other distributions.

00:04:34.840 --> 00:04:35.620
For some others.

00:04:35.620 --> 00:04:36.120
Okay.

00:04:36.120 --> 00:04:36.920
Got it.

00:04:36.920 --> 00:04:37.500
Yeah, I don't remember.

00:04:37.500 --> 00:04:39.080
I probably just haven't run into that yet.

00:04:39.080 --> 00:04:39.660
Yep.

00:04:39.660 --> 00:04:39.900
Okay.

00:04:40.000 --> 00:04:40.440
It's tasty.

00:04:40.440 --> 00:04:43.420
Okay.

00:04:43.420 --> 00:04:48.180
Next, I just want to talk about a tool that helped me a lot recently.

00:04:48.180 --> 00:04:55.440
And I've been working on the book, which I'm not working on it anymore because it's turned into my editor.

00:04:56.560 --> 00:05:01.500
I've been using Sublime to write it and write all the code for it.

00:05:01.500 --> 00:05:08.740
But one of the things I wanted to do was to, I got harassed by not being PEP 8 compliant in a couple places.

00:05:09.080 --> 00:05:11.880
So I wanted to quickly go through and just check everything.

00:05:11.880 --> 00:05:15.540
Once, of course, I can use Flake 8 just on the command line.

00:05:15.540 --> 00:05:20.960
But once I know that there's a bunch of files with errors, what's the fastest way to go fix them?

00:05:20.960 --> 00:05:24.960
And for me, it was a Sublime Text plugin called Flake 8 Lint.

00:05:24.960 --> 00:05:29.920
And I know there's a lot of Sublime Text linters out there.

00:05:29.920 --> 00:05:35.520
But this one, like, did everything I needed it to do just right off the bat and was super easy.

00:05:35.520 --> 00:05:37.720
It just installed it and it just worked.

00:05:38.340 --> 00:05:41.300
So I highly recommend Flake 8 Lint.

00:05:41.300 --> 00:05:49.800
It's got all the, it's got Flake 8, of course, and it's also got PyDoc style and some naming conventions, import order and stuff.

00:05:49.800 --> 00:05:53.600
Yeah, I think having these automated tools makes tons of sense, right?

00:05:53.600 --> 00:05:57.840
Like, your editor should do as much of the work for you as possible.

00:05:57.840 --> 00:06:00.420
So definitely a good recommendation there.

00:06:00.420 --> 00:06:06.440
So one example is I would bring up, if I knew that there was a directory with a bunch of files that had problems,

00:06:06.440 --> 00:06:08.660
I would bring it up, open up a file.

00:06:09.360 --> 00:06:11.660
And the default, I didn't ever change it.

00:06:11.660 --> 00:06:13.680
The default is just to check it on save.

00:06:13.680 --> 00:06:21.440
When I would save the file, it would check everything and then also pop up a pop-up window with all the errors.

00:06:21.440 --> 00:06:27.520
So I could, if I could just hit enter, it would take me to like the very first error and I could just walk through all the errors.

00:06:27.520 --> 00:06:28.600
It was great.

00:06:28.760 --> 00:06:28.940
Nice.

00:06:28.940 --> 00:06:34.040
And it's not just, just purely following like the PEP 8 rules.

00:06:34.040 --> 00:06:38.560
Like, for example, it has a cyclomatic complexity checking, which is pretty sweet.

00:06:38.560 --> 00:06:45.000
So that's like, hey, I've got a highly, highly nested 500 line method.

00:06:45.000 --> 00:06:46.300
What's wrong with that?

00:06:49.040 --> 00:06:51.940
It only has 20 if blocks, loops, whatever.

00:06:51.940 --> 00:06:54.660
It would complain about that if it goes over 10.

00:06:54.660 --> 00:06:55.040
That's cool.

00:06:55.040 --> 00:06:55.640
All right.

00:06:55.640 --> 00:07:01.500
So how would you be like, how would you like to, you know, travel time and be sucked into, say, like a magic wormhole?

00:07:01.500 --> 00:07:03.680
I'm pretty excited to hear about magic wormhole.

00:07:03.680 --> 00:07:05.120
Magic wormhole is pretty cool.

00:07:05.120 --> 00:07:06.400
Maybe you guys have heard of this.

00:07:07.260 --> 00:07:17.800
So the problem magic wormhole is trying to solve is I want to get things, be this text, be this a small file, be this a huge file from one computer to the other safely.

00:07:17.800 --> 00:07:22.780
So encrypted in a way that other people can't get to and things like that.

00:07:22.780 --> 00:07:36.240
So magic wormhole is basically a command line thing where you just type wormhole and it will come up with like a code that your computer has.

00:07:36.240 --> 00:07:36.560
Right.

00:07:36.680 --> 00:07:39.900
So you say, I want to create a wormhole and send this file and it'll come up with a code.

00:07:39.900 --> 00:07:48.060
If you give that code to someone else, they can run wormhole receive on their command line, enter that code.

00:07:48.060 --> 00:07:56.640
And then over an encrypted connection that will automatically connect the two computers, even if they both have firewalls blocking it.

00:07:56.640 --> 00:08:02.100
There's like some sort of intermediary server that will link them together.

00:08:03.100 --> 00:08:08.500
And it'll just do, from what I understand, end-to-end encryption between these two things.

00:08:08.500 --> 00:08:21.040
So if you need to get something and you don't want to put it somewhere public like Dropbox or you don't want to put it somewhere that's hard to erase or just hard to actually physically transfer like a USB drive, you can wormhole it.

00:08:21.040 --> 00:08:26.320
And there's even a PyCon presentation on this at PyCon 2016.

00:08:26.880 --> 00:08:27.920
So you can check it out.

00:08:27.920 --> 00:08:29.160
What do you think about that, Brian?

00:08:29.160 --> 00:08:30.160
That looks pretty cool.

00:08:30.160 --> 00:08:33.780
I don't think I've got a use for it, but I want to have a use for it.

00:08:33.780 --> 00:08:34.460
I know.

00:08:34.800 --> 00:08:43.580
Well, you know, like suppose you want to get something to some server you're maintaining, maybe, or say you're on vacation and you want to send something back.

00:08:43.580 --> 00:08:44.800
You don't want to send it over Dropbox.

00:08:44.800 --> 00:08:46.740
I can see some good uses for it.

00:08:46.740 --> 00:08:52.960
They talked about things like here's a way that you might be able to share like SSH keys that you don't want to put anywhere, but you've got to get them somewhere.

00:08:52.960 --> 00:08:54.100
Things like that.

00:08:54.100 --> 00:08:54.500
Yeah.

00:08:54.500 --> 00:08:55.620
Yeah, it's pretty cool.

00:08:56.000 --> 00:09:01.220
The codes, one of the things I thought was a nice touch was the codes are short and human pronounceable.

00:09:01.220 --> 00:09:01.800
Oh, wow.

00:09:01.800 --> 00:09:02.480
Yeah.

00:09:02.480 --> 00:09:03.940
So they had some nice examples.

00:09:03.940 --> 00:09:05.160
Let me see if I can find it.

00:09:05.160 --> 00:09:05.300
Yeah.

00:09:05.300 --> 00:09:11.640
So like the one that they have an example on the website is 7-crossover-clockwork.

00:09:11.640 --> 00:09:18.140
So pretty long password, if you will, but also you can tell it to someone over the phone.

00:09:18.140 --> 00:09:27.260
So the idea is like this is when you have the ability to communicate with a person, but your computer and their computer don't necessarily have a way to directly connect.

00:09:27.260 --> 00:09:27.900
Oh, great.

00:09:27.900 --> 00:09:32.520
So you don't have to like email them the secret code or something non-secure.

00:09:32.520 --> 00:09:32.900
Yeah.

00:09:32.900 --> 00:09:34.080
I emailed you the ISO.

00:09:34.080 --> 00:09:35.400
It was only three gigs.

00:09:35.400 --> 00:09:36.300
I'm sure it'll be fine.

00:09:36.300 --> 00:09:36.940
Thanks for that.

00:09:36.940 --> 00:09:41.640
And finally, there's actually an API that's part of this.

00:09:41.640 --> 00:09:43.680
So it's not just a command line tool.

00:09:43.800 --> 00:09:50.780
You can actually make wormhole capabilities in your own applications by just by importing the library.

00:09:50.780 --> 00:09:51.180
Okay.

00:09:51.180 --> 00:09:53.440
Now that sounds even more fun.

00:09:53.440 --> 00:09:55.180
I don't know what to do with it, but it sure sounds fun.

00:09:55.180 --> 00:09:55.920
It sure does.

00:09:55.920 --> 00:09:56.180
Yeah.

00:09:56.180 --> 00:09:58.360
So take us back to some fundamentals.

00:09:58.360 --> 00:10:04.120
One of the things that I think we really don't do enough with as developers is virtual environments.

00:10:04.120 --> 00:10:04.540
What do you think?

00:10:04.540 --> 00:10:08.960
It's one of those things that I forget that it's hard to figure out the first time.

00:10:09.620 --> 00:10:15.140
So virtual environments are something, if you're not using virtual environments, you need to be.

00:10:15.140 --> 00:10:21.920
And there's an older tutorial, but this is from realpython.com.

00:10:21.920 --> 00:10:24.620
And it's a Python virtual environments, a primer.

00:10:24.620 --> 00:10:26.720
It covers what they are.

00:10:26.720 --> 00:10:27.580
Why do we need them?

00:10:27.580 --> 00:10:28.560
How do you use them?

00:10:28.560 --> 00:10:29.080
Of course.

00:10:29.260 --> 00:10:39.200
And then it also covers a few extra tools that a lot of people use, like Pyvenv for that came with Python 3.6 and virtual env wrapper.

00:10:39.200 --> 00:10:47.640
I point to it because it's a pretty good, this article is a pretty good description of really the, why do we need them and how and what they are for?

00:10:47.640 --> 00:10:50.420
If you're not understanding of what they're, why you need them.

00:10:50.660 --> 00:10:53.800
This is a good, good document to talk about it.

00:10:53.800 --> 00:11:00.220
The thing that I ran into recently was I was, I was trying to help somebody and install something.

00:11:00.220 --> 00:11:06.000
And it turned out that the problem that they were, that they were having was they were not using virtual environments.

00:11:06.000 --> 00:11:11.740
And when they would pip install something, they weren't able to import it from within the tests.

00:11:12.260 --> 00:11:19.180
And the problem was that their pip was pointing to a different Python than the py test was using a different Python.

00:11:19.180 --> 00:11:29.960
So when you pip install something, it goes into the virtual environment or the site packages for that version of Python, not for all of Pythons.

00:11:29.960 --> 00:11:33.240
So yeah, he was pip installing it with Python.

00:11:33.240 --> 00:11:38.100
His pip was 2.7 and it goes into 2.7 folder then.

00:11:38.100 --> 00:11:51.540
And for me, that's the main reason why I, one of the main reasons why I use it is because once you use virtual environments, your pip and your Python and your py test and everything are all using the same Python and they don't get confused.

00:11:51.540 --> 00:11:52.380
Yeah, it's great.

00:11:52.380 --> 00:12:02.340
I use it a lot to basically, basically make it very, very clear what versions a particular web app of mine is running and what I need to deploy and things like that.

00:12:02.340 --> 00:12:07.400
I think your point about it's easy to forget why this should ever be hard.

00:12:07.400 --> 00:12:14.300
Like it's just second nature for those of us who've been doing a long time, but your example is perfect.

00:12:14.300 --> 00:12:16.120
Like helping someone out who is somewhat new.

00:12:16.120 --> 00:12:18.220
Like I thought Python was simple.

00:12:18.220 --> 00:12:19.280
Why is this not working?

00:12:19.280 --> 00:12:20.260
What is this?

00:12:20.260 --> 00:12:22.920
That happens all the time.

00:12:22.920 --> 00:12:31.700
And the, all the extra stuff like virtual and wrapper and py environment and all these, these extra things, those are great for the people that work with them.

00:12:31.780 --> 00:12:40.200
But if you, if you try these out and they don't work for you, it might not be your fault or maybe it is, but I haven't been able to get any of these extra things to work.

00:12:40.200 --> 00:12:41.680
I've tried virtual and wrapper.

00:12:41.680 --> 00:12:43.360
It's never worked for me.

00:12:43.460 --> 00:12:48.400
So I don't know what I'm doing wrong, but just the straight, straight virtual environments work great.

00:12:48.400 --> 00:12:49.280
So that's what I use.

00:12:49.280 --> 00:12:49.500
Yeah.

00:12:49.500 --> 00:12:49.700
Yeah.

00:12:49.700 --> 00:12:50.420
That's, that's cool.

00:12:50.420 --> 00:12:52.480
Nice to have a little reference there.

00:12:52.480 --> 00:12:58.120
So last thing I want to touch on is an interesting article that actually highlights a couple of projects.

00:12:58.220 --> 00:13:00.180
I think there's four projects that highlights.

00:13:00.180 --> 00:13:00.540
Okay.

00:13:00.540 --> 00:13:00.860
Yeah.

00:13:00.860 --> 00:13:10.640
And the idea is Rust, Rust, the programming language from Mozilla is a pretty interesting alternative to C, right?

00:13:10.640 --> 00:13:20.080
It's, it's kind of a systems level programming language like C is, but it has a type system that helps eliminate memory leaks.

00:13:20.080 --> 00:13:21.420
It has proper interfaces.

00:13:21.420 --> 00:13:27.600
It has better type inference, better support for concurrency, better support for first class functions, those kinds of things.

00:13:27.600 --> 00:13:31.320
And so compared to C, it's a pretty nice language.

00:13:31.320 --> 00:13:43.380
And so when you think of a lot of the important Python packages, many of their important internal low level pieces are written as C extensions, right?

00:13:43.380 --> 00:13:43.640
Yeah.

00:13:43.640 --> 00:13:43.920
Yeah.

00:13:43.920 --> 00:13:48.680
So could those be written in a better language than something like C?

00:13:48.680 --> 00:13:50.200
How about Rust?

00:13:50.200 --> 00:14:03.420
So here's four projects that make it easier to implement the, what would be the C extensions, the native compiled hotspot type of code, but do it in Rust instead of in C.

00:14:03.420 --> 00:14:07.320
So the first one is Rust dash CPython.

00:14:07.320 --> 00:14:11.960
So that's an interesting, just describes what it is.

00:14:11.960 --> 00:14:15.920
So it's a set of bindings for Rust for the CPython runtime.

00:14:15.920 --> 00:14:21.740
It allows Rust to connect to CPython using its application binary interface, which is a Rust thing.

00:14:21.740 --> 00:14:32.600
And you can run Python programs from Rust or work with Python objects directly, the representations of Python objects directly in Rust.

00:14:33.140 --> 00:14:39.780
So this is actually for if you want to, if you're a Rust programmer and you want to hook into CPython and control it from the outside.

00:14:39.780 --> 00:14:51.820
There's Py03, which is a way for, for people to write software, Rust software with bindings of Python in both directions.

00:14:51.820 --> 00:15:04.500
So a Rust program can interface with Python objects and the Python interpreter, and it can expose Rust methods to the Python program the same way like a C module does.

00:15:05.620 --> 00:15:07.460
All right, so that's pretty cool.

00:15:07.460 --> 00:15:18.020
Then there's Snake, S-N-A-E-K, which is a kind of early stage project, but it lets developers create Rust libraries that are loaded dynamically into Python as needed.

00:15:18.020 --> 00:15:22.400
And they don't have to be statically linked against Python's runtime, which is kind of cool.

00:15:23.260 --> 00:15:35.240
And I think it pulls it off using CFFI, which is the C interoperator for PyPy, the alternate interpreter JIT compiler for Python, rather than C types.

00:15:35.240 --> 00:15:43.880
So if you don't have some old library that is based on C types, like say in C and you want to upgrade, then this might be a pretty sweet option.

00:15:43.880 --> 00:16:00.240
And then finally, there's actually a cookie cutter template, and it says, the goal of this project is to be able to produce a binary distribution, a wheel, which will not require the end user to actually compile Rust code themselves, which everyone would appreciate that, right?

00:16:00.240 --> 00:16:09.560
So here's a bunch of cool options if you are like, I really don't want to write this in C, but it probably should be written, you know, not in Python, but in some other way.

00:16:09.560 --> 00:16:12.000
Like, maybe try Rust if you're looking to check that out.

00:16:12.000 --> 00:16:13.240
That actually looks pretty cool.

00:16:13.620 --> 00:16:14.640
Have you done any Rust yet?

00:16:14.640 --> 00:16:20.800
No, I've, it's one of the languages I want to learn that I'm kind of intrigued by.

00:16:20.800 --> 00:16:23.200
I looked at Go a little while ago.

00:16:23.200 --> 00:16:26.960
I'm not a huge fan of Go, but people sort of compare these a lot.

00:16:26.960 --> 00:16:28.080
So I want to check out Rust.

00:16:28.080 --> 00:16:29.440
I think it's pretty different than Go.

00:16:29.440 --> 00:16:31.840
Yeah, it's definitely something on my to-do list.

00:16:31.840 --> 00:16:32.880
Yeah, cool.

00:16:32.880 --> 00:16:33.960
Check this out.

00:16:33.960 --> 00:16:34.520
Yeah.

00:16:34.520 --> 00:16:38.480
Do you guys have any uses for Rust with all the hardware stuff you're doing?

00:16:38.480 --> 00:16:42.220
I'm sure we could come up with, invent some reason to use Rust.

00:16:42.220 --> 00:16:43.120
There you go.

00:16:43.220 --> 00:16:43.460
Perfect.

00:16:43.460 --> 00:16:45.200
All right.

00:16:45.200 --> 00:16:45.640
How about you?

00:16:45.640 --> 00:16:48.280
Any, any personal news here at the end of the show?

00:16:48.280 --> 00:16:50.220
Just that I'm not writing anymore.

00:16:50.220 --> 00:16:51.120
Congratulations.

00:16:51.120 --> 00:16:52.080
That's awesome.

00:16:52.080 --> 00:16:52.600
How's it feel?

00:16:52.600 --> 00:16:53.960
It feels incredible.

00:16:53.960 --> 00:16:54.420
Yeah.

00:16:54.420 --> 00:16:59.060
To go from, I'm, I'm writing a book to, I wrote a book is great.

00:16:59.060 --> 00:16:59.440
So.

00:16:59.440 --> 00:16:59.800
Yeah.

00:16:59.800 --> 00:17:00.940
That's cool.

00:17:00.940 --> 00:17:04.060
Was your wife and kids like, Hey, there's some random guy in our house.

00:17:04.060 --> 00:17:04.700
What's going on?

00:17:04.740 --> 00:17:06.120
Oh wait, no, it's just Brian.

00:17:06.120 --> 00:17:06.540
It's dad.

00:17:06.540 --> 00:17:07.000
Yeah.

00:17:07.000 --> 00:17:14.500
No, I've tried to, I've tried to limit the writing to, to things, obscene things like early in

00:17:14.500 --> 00:17:15.600
the morning and late at night.

00:17:15.600 --> 00:17:16.180
But yeah.

00:17:16.180 --> 00:17:18.020
So punish yourself instead of your family.

00:17:18.160 --> 00:17:18.800
Yeah, exactly.

00:17:18.800 --> 00:17:19.500
So.

00:17:19.500 --> 00:17:20.780
Cool.

00:17:20.780 --> 00:17:21.840
All right.

00:17:21.840 --> 00:17:25.520
Well, I am packing my bags and I'm going on vacation.

00:17:25.520 --> 00:17:31.380
So either we might be a little bit intermittent or, you know, there's, there's some talk that

00:17:31.380 --> 00:17:33.700
we might have some guests co-hosts coming in here.

00:17:33.700 --> 00:17:34.640
We'll see.

00:17:34.640 --> 00:17:40.300
so if you don't see some podcasts in the next few weeks, don't worry, it'll come back,

00:17:40.300 --> 00:17:43.060
but you might see them anyway with, some new faces.

00:17:43.060 --> 00:17:44.480
So yeah, that would be awesome.

00:17:44.480 --> 00:17:46.700
So either way, great chat with you, Brian.

00:17:46.700 --> 00:17:47.620
Thanks everyone for listening.

00:17:47.620 --> 00:17:48.000
All right.

00:17:48.000 --> 00:17:48.400
Thanks.

00:17:48.400 --> 00:17:48.740
Yep.

00:17:48.740 --> 00:17:49.140
Bye.

00:17:50.420 --> 00:17:52.240
Thank you for listening to Python Bytes.

00:17:52.240 --> 00:17:54.800
Follow the show on Twitter via at Python Bytes.

00:17:54.800 --> 00:17:57.700
That's Python Bytes as in B-Y-T-E-S.

00:17:57.700 --> 00:18:01.140
And get the full show notes at pythonbytes.fm.

00:18:01.140 --> 00:18:05.460
If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

00:18:05.460 --> 00:18:08.160
We're always on the lookout for sharing something cool.

00:18:08.160 --> 00:18:11.560
On behalf of myself and Brian Okken, this is Michael Kennedy.

00:18:11.560 --> 00:18:15.180
Thank you for listening and sharing this podcast with your friends and colleagues.

