WEBVTT

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

00:00:05.300 --> 00:00:10.020
This is episode 46, recorded October 4th, 2017. I'm Michael Kennedy.

00:00:10.020 --> 00:00:10.900
And I'm Brian Okken.

00:00:10.900 --> 00:00:14.060
And we've got a bunch of cool stuff lined up for you, as always.

00:00:14.060 --> 00:00:16.880
But before we get to it, we have some kind of big news, Brian.

00:00:16.880 --> 00:00:17.280
We do.

00:00:17.280 --> 00:00:21.160
Yes, we have a new sponsor, a brand new sponsor for Python Bytes,

00:00:21.160 --> 00:00:24.100
who's come on to actually support a bunch of the show, DigitalOcean.

00:00:24.100 --> 00:00:24.840
Oh, that's awesome.

00:00:24.840 --> 00:00:28.740
Yeah, so they want to let you guys know about this thing called Spaces,

00:00:28.740 --> 00:00:30.740
which is kind of like S3, but 10 times better.

00:00:30.740 --> 00:00:34.220
And the audio you're listening to actually came to you over it.

00:00:34.220 --> 00:00:35.240
So we'll talk more about that later.

00:00:35.240 --> 00:00:36.840
I want to hear about spicy code.

00:00:36.840 --> 00:00:37.900
Spicy? Oh.

00:00:37.900 --> 00:00:40.640
I want to hear about SciPy lectures.

00:00:40.640 --> 00:00:42.760
I misread that, spicy SciPy.

00:00:42.760 --> 00:00:43.420
All the same.

00:00:43.420 --> 00:00:45.280
Yeah, it's all the same.

00:00:45.280 --> 00:00:47.320
You threw me off.

00:00:47.320 --> 00:00:49.460
I'm like, what story are you looking at, man?

00:00:49.460 --> 00:00:52.260
Anyway, SciPy lecture notes.

00:00:52.260 --> 00:00:57.260
I saw, I hadn't come across this before, but they did an update just recently to,

00:00:57.480 --> 00:01:00.780
it looks like they updated about once a year to make sure it's all current.

00:01:00.780 --> 00:01:05.500
You know, for somebody that's doing just-in-time learning for scientific Python usage,

00:01:05.500 --> 00:01:07.200
this is pretty darn cool.

00:01:07.200 --> 00:01:08.460
Their tagline is,

00:01:08.640 --> 00:01:12.040
one document to learn numerics, science, and data with Python.

00:01:12.040 --> 00:01:14.220
And it runs the gamut.

00:01:14.220 --> 00:01:18.020
It starts off with a Python language tutorial if you want to take it.

00:01:18.020 --> 00:01:21.480
You can learn about NumPy, Matplotlib, SciPy.

00:01:21.480 --> 00:01:24.340
It's got topics like debugging and optimizing,

00:01:24.340 --> 00:01:26.120
image manipulation,

00:01:26.520 --> 00:01:30.640
and things like how to deal with statistics and machine learning even.

00:01:30.640 --> 00:01:31.720
Yeah, this is really cool.

00:01:31.720 --> 00:01:35.840
I think a lot of people are getting into data science and getting into Python because of it.

00:01:35.840 --> 00:01:40.360
But also, I just think this is a great way to learn a lot of these techniques, right?

00:01:40.420 --> 00:01:42.540
These little short, focused,

00:01:42.540 --> 00:01:45.460
IPython notebook style of examples.

00:01:45.460 --> 00:01:49.420
Yeah, and for somebody that really needs to just jump in and find,

00:01:49.420 --> 00:01:50.660
the way they have it set up,

00:01:50.660 --> 00:01:53.640
it's almost like a table of contents for a book or a reference book.

00:01:53.900 --> 00:01:59.220
So you can just jump in and try to learn whatever you need today, just right away.

00:01:59.220 --> 00:02:01.860
You know what's cool about the JIT stuff is it has prerequisites.

00:02:01.860 --> 00:02:05.380
It says, like, for example, on the profiling part,

00:02:05.380 --> 00:02:08.600
it says a prerequisite is you must understand line profiler.

00:02:08.600 --> 00:02:09.200
Oh, okay.

00:02:09.200 --> 00:02:09.520
Yeah.

00:02:09.520 --> 00:02:10.420
It's pretty cool.

00:02:10.420 --> 00:02:14.760
I thought it was a great source for people that really aren't patient enough to go through a course

00:02:14.760 --> 00:02:16.460
or really don't know what they need to learn yet.

00:02:16.460 --> 00:02:16.840
What do you think?

00:02:16.840 --> 00:02:18.300
That's like 95% of people.

00:02:18.300 --> 00:02:21.140
Yeah, especially since, like we've talked about before,

00:02:21.140 --> 00:02:25.660
that Python is often a language that people pick up after their primary language.

00:02:25.660 --> 00:02:31.120
Yeah, well, and also I think we're increasingly asked and expected to build

00:02:31.120 --> 00:02:34.740
more and more complicated apps, bringing together more and more different disciplines.

00:02:34.740 --> 00:02:37.020
So would it be unreasonable to say,

00:02:37.020 --> 00:02:40.960
I would like you to write a web application that talks to the database,

00:02:40.960 --> 00:02:44.340
but also uses machine learning and the GPU?

00:02:44.340 --> 00:02:47.400
Like that I can see being a totally normal request now,

00:02:47.400 --> 00:02:49.380
whereas those used to be their own specialties, right?

00:02:49.380 --> 00:02:54.840
So this ability to jump in and pick up a little bit on demand is only going to be more required, I think.

00:02:54.840 --> 00:02:55.160
Yeah.

00:02:55.160 --> 00:03:00.900
And they also split up some of the Python stuff into like some of the beginner stuff

00:03:00.900 --> 00:03:03.120
that you just kind of have to know to start with,

00:03:03.120 --> 00:03:05.360
and then they have some more advanced things a little bit later.

00:03:05.360 --> 00:03:05.840
Yeah.

00:03:05.840 --> 00:03:06.760
Nice.

00:03:06.760 --> 00:03:11.540
So the first thing I want to talk about this week is desktop notifications.

00:03:12.060 --> 00:03:16.260
And this caught my eye because I feel like, I've said this a couple times,

00:03:16.260 --> 00:03:21.860
like one of the weaker points of Python is the whole desktop GUI type of thing, right?

00:03:21.860 --> 00:03:24.580
I know you can do it, but it's just not as easy as it should be.

00:03:24.580 --> 00:03:28.040
And so here's a real simple and easy way to build a notification,

00:03:28.040 --> 00:03:32.840
like a desktop toast type of notification for Linux using Python.

00:03:32.840 --> 00:03:34.000
Well, that's cool.

00:03:34.000 --> 00:03:34.620
Yeah.

00:03:34.620 --> 00:03:36.420
I don't know what you mean by toast.

00:03:36.680 --> 00:03:41.320
Well, so you're sitting there and there's like a little thing that pops out and say on Mac,

00:03:41.320 --> 00:03:43.820
it's in the top right and Windows, it's in the bottom right by the clock.

00:03:43.820 --> 00:03:47.180
It would pop up and say, your friend just liked your thing on Twitter,

00:03:47.180 --> 00:03:52.620
or somebody invited you to connect on LinkedIn, or your server just went down.

00:03:52.620 --> 00:03:54.260
Your boss is paging you.

00:03:54.260 --> 00:03:55.000
They're upset.

00:03:55.000 --> 00:03:57.200
You know, I finally get the toast reference.

00:03:57.200 --> 00:03:59.140
Because it pops up.

00:03:59.140 --> 00:04:00.560
At least in Windows, it pops up.

00:04:00.560 --> 00:04:04.820
I guess if you tilt your toaster on the right, then in macOS, it's also toast.

00:04:04.820 --> 00:04:05.340
I don't know.

00:04:06.360 --> 00:04:10.140
Anyway, here's an example, a little app that says,

00:04:10.140 --> 00:04:15.940
let's write a thing that will do web scraping, I guess, a Bitcoin value location.

00:04:15.940 --> 00:04:20.140
And it'll go to the website and pull that off and give you a periodic notification of the value of Bitcoin.

00:04:20.140 --> 00:04:22.400
While that's not super valuable,

00:04:22.400 --> 00:04:26.880
it does show you a really interesting use case of this package called notify2,

00:04:26.880 --> 00:04:32.180
which if you have something actually practical and interesting you want to notify people about,

00:04:32.180 --> 00:04:33.660
that's a pretty cool little use case.

00:04:33.660 --> 00:04:35.840
Actually, I think I might actually use this.

00:04:36.040 --> 00:04:36.680
This would be great.

00:04:36.680 --> 00:04:36.920
Cool.

00:04:36.920 --> 00:04:37.920
What would you do with it?

00:04:37.920 --> 00:04:39.960
For instance, we've got a bunch of remote machines.

00:04:39.960 --> 00:04:43.520
For me, I've got a bunch of VMs that are dealing with builds and whatever,

00:04:43.520 --> 00:04:46.500
and some way to keep track of them, make sure everything's alive.

00:04:46.500 --> 00:04:47.340
Yeah, that's cool.

00:04:47.340 --> 00:04:52.160
Like a build, pass, build, failed, machine, no longer responsive type of notifications.

00:04:52.480 --> 00:04:53.200
Yeah, that's awesome.

00:04:53.200 --> 00:04:54.360
That'd be really fun.

00:04:54.360 --> 00:04:57.180
It looks like a couple lines of code and you got it going.

00:04:57.180 --> 00:04:58.640
So that's really cool.

00:04:58.640 --> 00:05:05.280
Would you consider performance, like if your app becomes much slower after a check-in,

00:05:05.280 --> 00:05:08.460
like a performance degradation, like a failed build?

00:05:08.460 --> 00:05:09.480
Well, yeah, definitely.

00:05:10.180 --> 00:05:11.320
And how would you test for that?

00:05:11.320 --> 00:05:13.680
Well, funny you should ask.

00:05:14.560 --> 00:05:18.180
The next topic is a tool called pytest Benchmark.

00:05:18.180 --> 00:05:22.900
And this actually came up because, not because of, because I'm actually looking for this.

00:05:22.900 --> 00:05:28.020
I need to have chunks of functionality that we need to know whether or not we need to time them,

00:05:28.020 --> 00:05:32.080
make sure they're not getting slower with successive releases of the software.

00:05:32.780 --> 00:05:38.900
And what's interesting is the much slower or much faster or just very random timing,

00:05:38.900 --> 00:05:41.020
people might actually notice that.

00:05:41.020 --> 00:05:45.520
If you're dogfooding your own application and you're using it, you might notice this.

00:05:45.520 --> 00:05:51.160
It's the subtle things like a measurement is now, it used to be two seconds and now,

00:05:51.160 --> 00:05:54.620
and it was for like lots of releases and now it's two and a half seconds.

00:05:54.620 --> 00:05:59.880
Normal users might not, we're not, might not notice it right then, but it sure be good to check this.

00:05:59.880 --> 00:06:02.040
So this is a pytest Benchmark.

00:06:02.360 --> 00:06:04.340
And it's a very easy little thing.

00:06:04.340 --> 00:06:09.400
You can add into your code and your pytest testing to say, hey, this chunk of code,

00:06:09.400 --> 00:06:11.920
it needs to be at least this fast.

00:06:11.920 --> 00:06:14.660
And at first you don't know how fast it should be.

00:06:14.660 --> 00:06:19.860
So there's a lot of tools within it to do some graphing and table driven,

00:06:19.860 --> 00:06:21.960
showing you what the numbers are right now.

00:06:21.960 --> 00:06:29.420
And then also an ability to have a golden, some golden numbers and save off benchmark data into a JSON file.

00:06:29.860 --> 00:06:32.680
And then on future runs, compare against that.

00:06:32.680 --> 00:06:34.080
So I'm going to use it.

00:06:34.080 --> 00:06:34.320
Yeah.

00:06:34.320 --> 00:06:35.980
That looks super interesting, actually.

00:06:35.980 --> 00:06:39.340
And it has nice graphs over time and things like that.

00:06:39.340 --> 00:06:40.320
Yeah.

00:06:40.320 --> 00:06:41.900
I mean, sometimes timing doesn't matter.

00:06:42.060 --> 00:06:44.780
But other than like how users feel about it.

00:06:44.780 --> 00:06:49.700
But, you know, in certain types of real time systems or trading systems, there are actual numbers.

00:06:49.700 --> 00:06:50.920
You cannot fall below.

00:06:51.200 --> 00:06:56.480
If you're processing inbound data in real time and it's appearing every, you know, 100 milliseconds,

00:06:56.480 --> 00:07:00.120
you have to be lower than 100 milliseconds in the processing time, right?

00:07:00.120 --> 00:07:01.260
Or you won't be able to keep up.

00:07:01.260 --> 00:07:04.000
Often Python's used for other things too.

00:07:04.000 --> 00:07:08.080
Like I've heard that some people use it to control test instruments.

00:07:08.080 --> 00:07:09.200
Yes, that's possible.

00:07:09.700 --> 00:07:16.840
So, for instance, checking to make sure even application turn on and measurement times don't slow down.

00:07:16.840 --> 00:07:23.660
Because these instruments are used in production lines and it'll slow down your customer's production line if you slow down.

00:07:23.660 --> 00:07:24.480
Yeah, absolutely.

00:07:24.480 --> 00:07:27.040
All sorts of factory automation and all kinds of things.

00:07:27.040 --> 00:07:27.860
Cool.

00:07:27.860 --> 00:07:28.720
All right.

00:07:28.760 --> 00:07:29.700
So, that's really nice.

00:07:29.700 --> 00:07:32.480
I definitely, if I had a use case for that, I would definitely use it.

00:07:32.480 --> 00:07:36.140
I just don't have anything that I can say it must be this fast or it's a problem.

00:07:36.140 --> 00:07:39.220
But it still would be cool to actually see the speed over time.

00:07:39.220 --> 00:07:45.800
Now, before we get on to the next one, let me say thanks to DigitalOcean and just let you guys know about Spaces.

00:07:45.800 --> 00:07:48.720
So, you probably heard of Amazon S3, right?

00:07:48.720 --> 00:07:50.220
I think that was their first thing.

00:07:50.220 --> 00:07:56.080
But, like I said, DigitalOcean just released Spaces and I definitely think it's better.

00:07:56.620 --> 00:08:02.440
Soon as I heard about it, before they even said, hey, I want to sponsor the show and have you tell the world about it, I'm like, I'm switching to this thing.

00:08:02.440 --> 00:08:06.120
So, for one, it's like nine times cheaper than AWS.

00:08:06.120 --> 00:08:08.520
It's super predictable pricing.

00:08:08.520 --> 00:08:10.300
There's all kinds of benefits.

00:08:10.300 --> 00:08:14.580
You can use the same tools as you used to manage your S3 thing.

00:08:14.580 --> 00:08:16.200
So, same APIs and everything.

00:08:16.200 --> 00:08:21.640
So, for example, I use this cool program called Transmit for my Mac to manage all my files in S3.

00:08:21.640 --> 00:08:25.160
Just point it at DigitalOcean Spaces and it just keeps working.

00:08:25.160 --> 00:08:25.720
It's awesome.

00:08:25.820 --> 00:08:32.680
So, it's like $5 a month, 250 gigs for free in storage, a terabyte for free in bandwidth.

00:08:32.680 --> 00:08:39.200
That is quite expensive if you pay $0.09 per gigabyte at AWS.

00:08:39.200 --> 00:08:45.640
But it's completely free here and it's a really nice service just as fast but much more predictable.

00:08:45.640 --> 00:08:48.020
And even inbound data is 100% free.

00:08:48.020 --> 00:08:49.300
So, check them out.

00:08:49.380 --> 00:08:51.540
It's really a super simple API.

00:08:51.540 --> 00:08:53.720
It's one you're familiar with, the tools of work.

00:08:53.720 --> 00:09:01.580
And you can actually get, whether you're a new or existing customer, you get two months free if you just go to do.co slash Python.

00:09:01.760 --> 00:09:04.600
So, check it out.

00:09:04.600 --> 00:09:05.180
That's great.

00:09:05.180 --> 00:09:05.500
Cool.

00:09:05.500 --> 00:09:06.800
Yeah, it's a super cool project.

00:09:06.800 --> 00:09:11.700
I'm so happy they came out with it and I'm happy to be using it for this podcast and other stuff.

00:09:12.760 --> 00:09:23.620
So, we've talked, you've talked more than I have, but we've both talked a fair amount about projects, how they do packaging, Python packaging, how you should structure those and so on.

00:09:23.620 --> 00:09:34.680
So, I want to highlight an article that is, it's a fun article, but it's super in-depth and a deep look inside of how Python works and how packages are built and why they're built that way.

00:09:34.680 --> 00:09:40.020
It's an article by Vicky Boykus and it's called Alice in Python Project Land.

00:09:40.640 --> 00:09:48.820
So, it's got some cool little graphics and stuff, but the idea is like, she's a data scientist learning data science and those things.

00:09:48.820 --> 00:09:50.600
So, doing a lot of Java and doing a lot of Python.

00:09:50.600 --> 00:09:56.140
It's like, look, Python is so much better except for it's really hard to package up things.

00:09:56.140 --> 00:10:02.580
Like, how do I take some code that I've written and make it so that I could give it to you and you could use it, for example.

00:10:02.580 --> 00:10:10.360
So, instead of just going, well, these are the four steps you do to create a Python package, she says, let's look at the internals of how Python actually works.

00:10:10.360 --> 00:10:13.080
She said, how it runs, how it understands and links things together.

00:10:13.080 --> 00:10:17.860
And so, you not just know how to put things together, but you understand why.

00:10:17.860 --> 00:10:20.680
So, very, very interesting article.

00:10:20.680 --> 00:10:21.840
Pretty in-depth.

00:10:21.840 --> 00:10:25.040
So, packaging has always been kind of this weird thing that you just follow the steps.

00:10:25.040 --> 00:10:25.740
You can check this out.

00:10:25.740 --> 00:10:26.420
It's a good article.

00:10:26.420 --> 00:10:31.360
Like you said, it's in-depth, which makes it kind of a long article, but the writing is really good.

00:10:31.360 --> 00:10:33.280
So, it moves along pretty fast.

00:10:33.280 --> 00:10:34.400
Yeah, it sure does.

00:10:34.400 --> 00:10:34.880
It sure does.

00:10:34.880 --> 00:10:37.260
And it answers a lot of questions like, should you use setup tools?

00:10:37.260 --> 00:10:37.900
Should you use pip?

00:10:38.140 --> 00:10:41.660
What does __init__().py do?

00:10:41.660 --> 00:10:43.600
Should I mess with Python path?

00:10:43.600 --> 00:10:44.200
Should I not?

00:10:44.200 --> 00:10:47.400
And another thing that I saw that she referenced in there was pretty cool.

00:10:47.400 --> 00:10:48.480
It's called piprex.

00:10:48.480 --> 00:10:49.560
Have you seen this?

00:10:49.560 --> 00:10:49.920
No.

00:10:49.920 --> 00:10:50.220
Yeah.

00:10:50.220 --> 00:10:56.840
So, I think piprex, you pointed at your code and it looks at all your imports and it then knows what to create for your requirements.txt.

00:10:56.840 --> 00:10:57.220
Cool.

00:10:57.360 --> 00:11:04.500
So, instead of remembering like, oh yeah, there was that thing that I used, Colorama or whatever, and I forgot to put it in the requirements file, so it's not going to work.

00:11:04.500 --> 00:11:05.660
Like, this will just discover it.

00:11:05.660 --> 00:11:06.220
It's really cool.

00:11:06.220 --> 00:11:07.560
So, yep.

00:11:07.560 --> 00:11:15.680
If you want to get like an understanding of how Python packaging and assembly of modules at runtime works, definitely check out this article.

00:11:15.820 --> 00:11:17.700
It's super approachable, but well done.

00:11:17.700 --> 00:11:20.840
Next article, how to teach technical concepts with cartoons.

00:11:20.840 --> 00:11:22.440
Love technology.

00:11:22.440 --> 00:11:33.460
So, I personally, since I came from computer science, from the art, fine arts actually, I started out in fine arts, and I actually gave up because I was frustrated with my ability to draw.

00:11:33.460 --> 00:11:39.700
But drawing things to help people understand concepts, it's very, it helps.

00:11:39.700 --> 00:11:44.740
It's easier to understand things, and nobody expects you to draw really great pictures.

00:11:44.740 --> 00:11:50.980
This article starts off, I love this, it starts off with just saying that she draws not that great.

00:11:50.980 --> 00:11:54.740
It has really three horrible pictures of a dog, a cat, and an elephant.

00:11:54.740 --> 00:11:58.160
I don't think I can do better, but they're not great drawings.

00:11:58.160 --> 00:12:07.100
But just then going through and talking about how people should use drawings more when trying to teach things, and some tips on making them more personable.

00:12:07.100 --> 00:12:08.660
I think it's a really cool idea.

00:12:08.660 --> 00:12:14.540
You certainly can personalize and humanize technical concepts if you use pictures.

00:12:14.540 --> 00:12:20.000
Like you said, they don't have to be super fancy, so she has a dog, a cat, and an elephant, and those sorts of things.

00:12:20.180 --> 00:12:25.140
But you know, not far down, she says, oh, let's do something about a mutex.

00:12:25.140 --> 00:12:32.820
And actually represents how mutexes are used to like, for shared memory, or something like that, right?

00:12:32.820 --> 00:12:41.700
And it's completely approachable, but somehow it just makes it much more, if you looked at the formal definition of a mutex, like, oh my gosh, what is that thing?

00:12:41.760 --> 00:12:43.420
But here it's like, oh, okay, well, that's totally simple.

00:12:43.420 --> 00:12:49.680
I think you can really convey a lot and sort of disarm people with some nice drawings.

00:12:49.680 --> 00:13:00.000
One of the things I like about this article as well is it itself is a mix of hand lettering, just her normal printing, and some simple drawings with text.

00:13:00.000 --> 00:13:01.440
That's what the tutorial is.

00:13:01.440 --> 00:13:03.120
And it breaks it up a lot.

00:13:03.120 --> 00:13:13.120
And I think a lot of technical people, when they're trying to teach something, they'll think a drawing is a good idea, but then they'll get out a tool to make all the lines straight and draw it with vector graphics.

00:13:13.640 --> 00:13:17.940
And sometimes I think just a pen and paper might help convey the information better.

00:13:17.940 --> 00:13:18.960
Yeah, yeah, absolutely.

00:13:18.960 --> 00:13:23.860
I think this is really cool and hopefully inspire some people to do a little more freehand stuff.

00:13:23.860 --> 00:13:25.340
It doesn't always have to be perfect.

00:13:25.340 --> 00:13:30.080
So keeping it graphical for our last item, I want to share the Halo with you.

00:13:30.080 --> 00:13:37.700
So Halo is a project called Beautiful Terminal Spinners in Python, which is what it sounds like.

00:13:37.780 --> 00:13:46.460
It's a really simple library that will give you sort of I'm loading or I'm working or I'm thinking type of spinners and a lot of cool features.

00:13:46.460 --> 00:13:49.080
So you can have the little spinner go around and you have different styles.

00:13:49.080 --> 00:13:53.000
You have successful outcomes, failed outcomes.

00:13:53.000 --> 00:13:57.200
So like this little spinner will spin and then it'll go to like a check mark if it succeeds.

00:13:57.200 --> 00:14:01.660
Or if it fails, it'll go to like a cross and you could make it red or something like this, right?

00:14:01.660 --> 00:14:03.560
So that's really cool.

00:14:03.620 --> 00:14:07.020
We talked about progress bars where you have the progress going across.

00:14:07.020 --> 00:14:10.100
You know, I think one of the better ones is TQDM.

00:14:10.100 --> 00:14:14.220
Sometimes you don't know what the progress is going to be, right?

00:14:14.220 --> 00:14:17.220
Like I hate progress bars that go it's 5%, it's 5%.

00:14:17.220 --> 00:14:22.380
It's 90%, 91% and then it goes forever and then finally it's done, right?

00:14:22.380 --> 00:14:23.620
There's a great XKCD.

00:14:23.620 --> 00:14:25.060
I'll put it in the show notes.

00:14:25.060 --> 00:14:28.740
It's really fun about the guy who built the Windows progress bar, file copy progress bar.

00:14:28.740 --> 00:14:31.040
But sometimes progress bars aren't the answers.

00:14:31.040 --> 00:14:31.940
There are reasons why I'm bringing it up.

00:14:31.940 --> 00:14:35.320
But little spinners sort of solve that problem because it doesn't indicate progress.

00:14:35.320 --> 00:14:36.300
It's just like we're busy.

00:14:36.300 --> 00:14:40.820
And so here's a really cool way to put that into your program.

00:14:40.820 --> 00:14:43.360
It's very simple and it really looks nice too.

00:14:43.360 --> 00:14:43.980
Yeah, definitely.

00:14:43.980 --> 00:14:46.540
And it has a unicorn, a colorful unicorn.

00:14:46.540 --> 00:14:47.440
He doesn't want that.

00:14:47.440 --> 00:14:51.000
I'm not sure how the unicorn displays progress though.

00:14:51.000 --> 00:14:52.160
No, maybe in the horn.

00:14:52.160 --> 00:14:55.940
Oh, that would be cool if the horn had like colored.

00:14:55.940 --> 00:14:59.300
Yes, like the horn like flashed like rainbow.

00:14:59.300 --> 00:15:00.060
Yeah.

00:15:00.820 --> 00:15:03.200
I don't know if it does that or not, but it should.

00:15:03.200 --> 00:15:04.160
All right.

00:15:04.160 --> 00:15:06.940
But if you're looking to add some sort of user feedback like, hey, we're busy.

00:15:06.940 --> 00:15:07.780
We're not locked up.

00:15:07.780 --> 00:15:09.480
You know, Halo, super easy.

00:15:09.480 --> 00:15:10.020
Very cool.

00:15:10.020 --> 00:15:10.820
All right.

00:15:10.820 --> 00:15:12.320
That's it, Brian, for our topics.

00:15:12.320 --> 00:15:13.260
You got anything else?

00:15:13.260 --> 00:15:18.040
I don't think they would have made a full story, but I wanted to let people know that the Python,

00:15:18.040 --> 00:15:21.140
I think it's 363, is out now.

00:15:21.140 --> 00:15:22.480
So go upgrade.

00:15:22.480 --> 00:15:24.340
I don't know if there's anything major in it.

00:15:24.440 --> 00:15:26.400
I haven't looked through it, but it's around.

00:15:26.400 --> 00:15:28.060
So keeping current is good.

00:15:28.060 --> 00:15:32.060
And then there's also a bug fix release I noticed in pytest.

00:15:32.060 --> 00:15:32.700
That's around.

00:15:32.700 --> 00:15:36.740
I'm not sure what's in it, but again, it's around so people can pay attention.

00:15:36.740 --> 00:15:37.040
Yep.

00:15:37.040 --> 00:15:37.580
Okay.

00:15:37.580 --> 00:15:38.020
Very cool.

00:15:38.100 --> 00:15:39.520
So check those out.

00:15:39.520 --> 00:15:44.180
And the last thing I wanted to mention is I haven't been, I warned people that I was going

00:15:44.180 --> 00:15:46.620
to start podcasting again, but it took me a while.

00:15:46.620 --> 00:15:47.360
You warned them.

00:15:47.360 --> 00:15:47.780
Look out.

00:15:47.780 --> 00:15:48.360
I'm going to do it.

00:15:48.360 --> 00:15:48.720
Yeah.

00:15:48.720 --> 00:15:49.560
There are a couple.

00:15:49.560 --> 00:15:54.780
So at the end of September and just a couple of days ago, I released a couple different test

00:15:54.780 --> 00:15:56.020
and code episodes.

00:15:56.020 --> 00:15:58.080
One of them related to the testing pyramid.

00:15:58.080 --> 00:16:02.360
And the last one, 32, is an excellent one by an amazing speaker.

00:16:02.360 --> 00:16:05.140
It's with an amazing speaker named David Hussman.

00:16:05.140 --> 00:16:07.240
And he's a brilliant man.

00:16:07.240 --> 00:16:07.440
Yeah.

00:16:07.460 --> 00:16:08.060
That's really cool.

00:16:08.060 --> 00:16:09.340
And I'm glad you got that one out.

00:16:09.340 --> 00:16:09.720
That's awesome.

00:16:09.720 --> 00:16:10.260
How about you?

00:16:10.260 --> 00:16:11.180
Anything new going on?

00:16:11.180 --> 00:16:12.320
No, nothing new.

00:16:12.320 --> 00:16:16.380
I'm working on my courses like crazy, but the announcement's going to have to wait until

00:16:16.380 --> 00:16:20.140
next week for anything to be actually out for anyone to check out.

00:16:20.140 --> 00:16:21.620
Well, thanks a lot for doing this today.

00:16:21.620 --> 00:16:22.080
You bet.

00:16:22.080 --> 00:16:24.980
It was great to catch up with you and share all these ideas with everyone.

00:16:24.980 --> 00:16:25.740
Catch you later.

00:16:25.740 --> 00:16:28.340
Thank you for listening to Python Bytes.

00:16:28.340 --> 00:16:30.900
Follow the show on Twitter via at Python Bytes.

00:16:30.900 --> 00:16:33.800
That's Python Bytes as in B-Y-T-E-S.

00:16:33.800 --> 00:16:36.700
And get the full show notes at pythonbytes.fm.

00:16:36.820 --> 00:16:41.560
If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

00:16:41.560 --> 00:16:44.260
We're always on the lookout for sharing something cool.

00:16:44.260 --> 00:16:47.660
On behalf of myself and Brian Okken, this is Michael Kennedy.

00:16:47.660 --> 00:16:51.260
Thank you for listening and sharing this podcast with your friends and colleagues.

