Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 154, recorded October 23rd, 2019.
I'm Michael Kennedy.
And I'm Brian Okken.
And we have a special guest, Bob Belderbos.
Welcome, Bob.
Hi, thanks for having me.
Yeah, yeah, welcome back.
Nice to be here.
Been too long since you've been on the show.
Yeah, I was a while back.
Glad to be back.
For sure.
Glad you're here.
So before we get on to other things, this show is brought to you by Datadog.
Check them out at pythonbytes.fm.
Datadog.
All sorts of good stuff happening there.
Tell you more about that later.
Brian, I feel like when I'm working on my editors, I'm never done tweaking my colors or picking like the right font.
And as soon as I get comfortable with one, I'm like, oh, but did you see this one?
I'm going to switch to that now.
You have that same problem?
No, I don't, actually.
You find them and stick with them, huh?
I never really thought about the font I use during coding.
I mean, I do sometimes.
So I'm nearing 50 years old.
My eyes are 50-year-old eyes.
So I do have to do things like make the font bigger and stuff.
It never occurred to me to try a different font for my editor until I read this article.
So there's an article called Lesser Known Coding Fonts that talks about some of the benefits and drawbacks,
or mostly benefits of some of the different fonts out there that I hadn't even heard of.
There's an APL 385 Unicode font, which actually looks pretty nice.
Go Mono that was developed.
I'm not sure if it's part of the Go programming language thing, or I don't know.
The one that interested me at the end, there's one called Input Mono.
And there's a professional font designer, Jonathan David Ross, that developed it.
It's not free, but it's sort of free.
If it's for your personal use and for coding fonts, that's pretty much your personal use.
You can just download it and add it.
And I just downloaded this and added it.
And I kind of like using it.
It's easier for me to read quickly.
And there's a really kind of a nice video called Cracking the Code,
where Jonathan himself talks about developing it and basically why he cares about fonts and coding fonts.
Anyway, I thought it was interesting,
especially people that might have trouble seeing their screen or having to push their monitor closer to their eyes.
Maybe trying a different font might be a good idea.
Yeah, for sure.
You know, the thing that I did, I love this article.
The thing that I did that has made a tremendous difference,
and I'm getting older, my eyes are definitely getting less good as well,
is to get a 4K 32-inch monitor night and day.
It's made all the difference.
And it's only made me more obsessive about my fonts,
because now they're even more crisp and clear.
I'm like, oh, now I really got to dial these babies in.
I love some of the ones mentioned here.
I use Hack a lot.
That's a great one.
SourceCode Pro is really nice.
But I am just all about the Fear of Code these days.
Fear of Code with its font ligatures on.
Okay.
We should put a link to some of those, because I've never heard of some of these.
Yeah, I mean, they're referenced, but they're not linked in this article.
Fear of Code, and I guess all the font ligature ones, are crazy,
because, you know, in like math, you were taught that not equals,
you have the equal sign, you put a line through it, right?
But we don't have that symbol on our keyboard.
You would say exclamation mark equals.
Or if you said less than, you would have like the arrow,
and then like the double arrow on the bottom to say less than or equal to.
When you turn on font ligatures with like Fear of Code,
and I see some of the fonts you're calling out here also,
it has a category of font ligatures, yes or no.
When you turn those on, it becomes those symbols.
So like exclamation mark equals is one character on the screen
with like an equal and a slash through it.
Okay.
That's useful.
It's really interesting.
What's cool is it's not changing your code.
It just changes how your code is shown to you.
So you're not actually, no one else on your team has to like it or agree with it or whatever.
But if you like it, it's like, and it does a bunch of cool stuff for like other representations.
Yeah, I really like this one here at the end that you pick input mono.
And the input family, it's a huge family.
And there's even like some non-monos based fonts within it.
And they're all intended to be good on your eyes while editing.
It didn't even occur to me to not use a monos based font.
But sometimes it's nice to have things a little bit more condensed.
And an eye character doesn't have to take up the same width as a Z, for instance, or whatever.
That's cool.
Bob, how about you?
What's your thoughts on that?
I have honestly not really used many font types, but I'm really eager to check it out now.
It's, yeah, as you get older and older screen time, it's definitely fundamental.
And a big screen I lately started using at work, it makes all the difference.
So yeah, I'm eager to try it out now.
Yeah, you might have even a higher res screen than I do.
You might have 5K or something like that, right?
Pretty close.
I'm not exactly sure.
I have the iMac 27.
So it's pretty awesome.
Got some potential there.
So Mike, you just wrote down fear of code and it's F-I-R-A.
And yes, I have tried that.
That's nice.
When you said it at first, I thought you were saying like fear of code.
Fear of code.
You may have fear of code and you may be looking at that code with fear of code, but they're not necessarily related.
It's awesome.
Yeah, I love that, that the font literature is turned on.
And you've got to, even if you enable those fonts, you have to enable your editor to show
the ligatures, not just the fonts, just so you know, like if you're trying that out.
Also, another thing that's down here that kind of is blowing my mind.
I was thinking maybe you pulled up something not safe for work here, Brian.
It has something on Reddit at slash r slash Unix porn.
But then I pulled up the link and wow, what a cool place to just flip through awesome stuff
about Linux, like screenshots and fonts and all sorts of stuff.
What a weird name for a Reddit channel or Reddit, whatever you call those things.
It is weird, but man, it's I could just flip through those for a while.
It's pretty awesome.
Let's move on to the next one.
Bob, what do you got for us here?
You're a fan of Django, right?
And not a news item per se.
I think this resource has been out there for a while.
It's the Django admin handbook.
It's a free online page and PDF if you subscribe with your email.
I think the PDF is about 40 pages or so.
You can just read it in the evening.
And it's chock full of useful tips and tricks using the Django admin.
And as a Django developer, you inevitably will be using the admin.
I use it both for code challenges as well as a project at work.
And just reading this doc, I learned a bunch of useful tricks.
I have a couple of favorite, actually.
Yeah, what are they?
On the list view of an admin page of a model, I had some expensive property going on.
And that would trigger a query for every row.
So what I learned from the book was that you can override the get query set and do like one
annotated query.
And so for the whole list view, you then have like one big query instead of a query per row.
Oh, interesting.
It's almost like the N plus one problem of ORMs where you have a relationship that you
should have pre-joined, but you didn't.
I didn't realize that that was happening in the admin section.
That's cool.
Yeah, a bit like select related.
Yeah, exactly.
So I used that for a page.
And yeah, I had the problem with that property and got resolved just reading this document.
The other thing, a nice little trick there, how to export CSV from a Django admin.
So you have a lot of data in your database.
You can just export it to CSV and then dump it in a Jupyter notebook and do some pandas analysis.
So that's neat to have that interface.
And another one I liked is overriding the safe behavior for Django admin.
I used that lately when we did an exercise on the platform and we made an opt-in that people get an email right at the moment that we save the new exercise.
And for that, you can overwrite the safe method of the model.
Wow, you're using the admin to trigger like outbound notifications.
Interesting.
Yeah.
So you can just overwrite the safe method.
And if the object is not yet in the database, then the first time it's created, you do some action.
And then after that, you added the object and you don't do the action.
So it's really nice to do that with overwriting the safe method.
So that's all stuff I got from this document.
And then I subscribed to my email, got a couple of PDFs more.
That's a nice resource.
Yeah, that looks really cool.
Yeah, awesome.
Another one that looks really useful is sorting by calculated fields and filtering by them.
And yeah, a lot of nice stuff.
Cool.
Well, before we move on to the next one, let me tell you all about Datadog.
They're sponsoring this episode.
They're a cloud-scale monitoring platform built by engineers for engineers.
And they're tracing client auto instruments, all the good things like Django, for example,
but Flask and AsyncIO and MongoDB and all that.
And lets you pivot seamlessly between requests across your different systems.
So from your database to your web app, things like that, down to the frameworks, get metrics and logs,
and just visit pythonbytes.fm/Datadog.
Start a free trial.
Get a cool Datadog t-shirt to go with it.
Now, I want to cover something that's kind of major here.
I'm going to talk about a project that has been in the works, oh, geez, almost 30 years.
I don't know.
A very long time, right?
So I'm going to talk to you about CPython, the code, source code.
So Anthony Shaw, friend of the show, and we haven't covered that much by him.
It's probably been a few weeks since we've covered something that Anthony's done.
And he wrote this article that Bob properly referred to as a book over at RealPython, right, Bob?
Yeah.
It's really good over there.
It's called Your Guide to the CPython Source Code.
Now, basically, it gets you started by checking out the source code and then talks you through it
and, like, highlights a bunch of different scenarios and then looks at the CPython source code
so you understand it better, right?
Like, the article talks about Python's memory management.
It says, and here are the objects, and here is the data structure that does X, Y, and Z.
And it's, oh, look here how it's implemented as a linked list of arenas for small object allocation,
for example, right?
We actually talked about that a while ago, Brian.
And so if you are thinking, hey, I want to understand CPython code better, like the source code of CPython,
definitely check out this article.
So I'm just going to talk about a few things that I pulled out that I thought were pretty awesome.
So first of all, if I want to get the code to CPython, there used to be a bunch of options.
It was under Mercurial for a while, but now it's pretty natural.
Gitclone, github.com/Python slash CPython.
That's it, right?
I think it's awesome that CPython is on GitHub.
Yeah, that's nice.
Indeed.
Yeah.
And then how do you compile it?
Like, something as massive as CPython itself, with all the variations and all the C code,
you might think it's going to be challenging to compile.
But he has a bunch of good steps for the three main platforms, macOS, Windows, and Linux, how you go through them.
On macOS, I did that.
It took me about five minutes to get the whole thing compiled, set up and compiled, and super easy to follow along.
So that was great.
And on Windows, you know, there's a Visual Studio solution project.
You just open that up, set a few settings, and you're off to the races.
So getting the source code and compiling it is actually, you know, just a couple of commands on command prompt, terminal, and you're good to go.
Then one of the things that's pretty interesting is to look at what you get after you check it out, right?
So let's just maybe talk through the structure of CPython a little bit.
So you've got, I don't know, what is this?
14, 13 different directories.
So if you look at what you get when you get CPython, you get the docs, which is source for documentation.
You get the grammar on how that's all defined, right?
It's the thing that's converted by the peg parser into actual parser that you can use.
All the C include header files.
And then a lib folder that has all the parts of the standard library that are written in Python.
And looking through here, I saw a bunch of interesting stuff.
So there's some cool little hidden goodies.
I think of them as, so for example, I was looking at the concurrency section.
So lib, concurrent, futures.
There's like process.py and thread.py and stuff like that.
And I'm like, oh, what's the process one look like?
If you open that up, there's a giant ASCII diagram.
Inside there that shows you the workflow and the data exchange, like swim lanes and all sorts of stuff in the source code in the comments.
Oh, wow.
Yeah.
Similarly, if you go to like the JSON module, it's got like diagrams in ASCII about what's happening in there.
I was like, wow, really?
This is better than I expected.
Wow.
So it's super fun to poke around in there and see the parts of the library that are written in Python.
I also have some other stuff.
Mac support files, miscellaneous modules.
This is the opposite of the lib section.
This is the standard library parts written in C.
So if you want to see how that works.
Stuff for the object model, the parser, PC and PC build stuff for Windows,
programs for source code for the Python executable and binaries and things like that.
Then actually this Python for the CPython interpreter and tools for standalone tools for building and extending Python.
So this is what you get.
And then this article kind of talks you through a whole bunch of it.
So you can read the article and dig in some more stuff that I don't think we really have time to cover,
but I thought was pretty interesting was like deeply looking at the Python interpreter process and how that works,
you know, with the C source code as reference, the CPython compiler and execution loop.
People don't think of your CPython code as it compiled, but it is.
It's only just partway compiled.
It's compiled to the bytecode, the PYC files, and then it's evaluated, not JIT compiled or whatever.
Looking at the objects and how those are managed in Python and the standard library.
And then finally, one of the things covered in the article, just like a little minor section of it,
because it covers so much, it's like, oh yeah, well, let's add actually a new keyword to Python and whatnot
as like a small part in the parsing section.
And so if you actually wanted to like do some change and then deploy it and run it,
it talks about installing like a custom version, like taking this version and installing it and stuff.
So, you know, as I was going through this, I'm thinking really, you know,
if you're a professional Python developer knowing this kind of stuff, you should probably know it.
You should know Python has two types of garbage collection, primarily reference counting,
but also garbage collection.
Oh, and when does it run?
And like, what are the pressures and what are the trade-offs and so on?
Like this type of reference is what you need to dig down at that detail without actually becoming a core developer.
That's really impressive.
The amount of detail and the diagrams and the code.
I'm really thankful that this article is out there, right?
Because it can be quite intimidating.
And here you have this guy that walks you through it with nice graphs and explanations.
Yeah, for sure.
I'm going to look into it and set aside.
It used to be a lot more complicated than it is now.
So highlighting it in an article that it really is only a few minutes to get started.
That's really cool.
Absolutely.
Brian, what do you got next for us?
The next one is, I'm not sure why I hesitated.
Six Django template tags not often used in tutorials.
And so this intrigued me.
I'm not a Django expert, but I've looked through several tutorials before and done some, a couple Django sites.
These are fun and I haven't used them either.
So the article goes through six tags, but I'm pulling out a few of them.
So the empty tag, there's a for loop you can do with it with the tagging system.
So you can iterate through collections or arrays to populate, to fill out your HTML file.
But if there's nothing in the array, you can have an empty section to have some extra text or extra HTML output for if there's nothing there.
That's kind of neat.
Yeah.
Like here's where the list would go, but you know, nothing yet.
Or oops, there's nothing there yet.
You have to add.
That's cool.
There's a built-in lorem ipsum generator.
I had no idea.
Bob, did you know about this?
So this is just cool.
And basically, that's it.
You don't have to add anything.
Django apparently has a built-in lorem ipsum generator.
That's neat.
So have you used this, Bob?
No.
I'm surprised that I don't know about any of those six.
And I see already some refactoring candidates, especially the four empty.
I would definitely look if student list had something before looping.
Now you can just use empty.
Or lorem, I would probably pass in some lorem text from the view and just do it in the template.
Pretty impressive.
Well, especially when you're trying to get your template looking right, it's hard to see that when it's empty.
So being able to throw some stuff in there, that's kind of cool.
And then verbatim, that'd be good if you're going to basically, for instance, if you're going to talk about Django template tags, it would be hard to do that unless you had some way to turn off the parsing of it.
So you can use these.
You know a place where that verbatim looks really interesting?
I had the office hours for Talk Python courses.
And so folks in there were saying, I found it a little bit tricky to combine Django and Vue.js because they have the same similar tags.
The double handlebars mean certain things and whatnot.
Yeah.
And they're like, well, I'm going to put some Vue.js section into my Django templates.
But Django keeps like wrecking my Vue.js templates.
You can just wrap your whole Vue.js app in this.
In the article, it mentions that if you've got something else down the tool chain, like your JavaScript library or something that's going to rechange things, you can use this to make sure Django doesn't.
I think it's really cool that it's got built in lorem ipsum.
It's something that I've been using just that seems like lorem ipsum is cool, right?
You can get like random sort of Latin stuff in there that obviously is fake, but it looks like real text, right?
It doesn't look like just the same words repeated or something.
But, you know, being from Portland, I find that it's, you got to take it up a notch.
And there's a place called Hipster Ipsum.
Ipsum.co.
And if you go there, you can generate, it has a little generator to say, how many paragraphs do you want?
And do you want like hipster neat or hipster with a shot of Latin?
And you run it and it comes up with like stuff that is like super hipstery.
Oh, yeah.
I just did that.
Selfies 3, Wolf, Moon, Edison, Bulb, AdaptGen, Cray Organic, Venmo.
What do you got?
Portland, Bonmi, Vaporware, Polaroid, Farm to Table, Iceland, Selfies.
I love it.
But it is really cool that lorem ipsum is built into Django.
I had no idea.
Could we get ipsum built into Django?
That would be better.
We should definitely get it built in there.
Awesome.
So, Bob, this one that you're going to cover next, this is brand new to me.
I guess I've seen it all over, but I just learned that what it is today.
Yes.
So you want to post some code on Twitter and you want to look at nice.
So we're using carbon.now.sh a lot, which basically lets you create those terminal PNG images of code with nice color formatting.
And yeah, it's very easy to use.
You just choose the font.
I'm talking about fonts.
Yes, exactly.
So we're using the language and put the code in there and that's nice integration with Twitter.
So you can click Tweet button.
But we actually use it with Selenium to populate it automatically with our tips.
And it generates a cached image or I think it posts the image to Twitter and then it provides you a Twitter link.
And then you can embed that link in your tweets.
And so actually today, yeah, more developers overall these days using it on Twitter.
I see a lot of those images and they're probably all from carbon.now.
Yeah, they probably are.
They just look very nice.
Yeah, this is great.
Yeah, it gives you like a screenshot of a generic-ish terminal with code in it that's like color formatted and indented.
And then it just lets you export an image or directly tweet it.
I love it.
I say generic-ish because it's got the three Mac windowing icons in the left and not the Windows or the Ubuntu ones or whatever.
But still, like it's really cool.
I like it.
Yeah, especially for Twitter, right?
The code doesn't fit in 140 characters.
It's nice to put it on an image.
And besides, it just looks way better.
I love it.
This is awesome.
I'm going to start using this.
I don't know yet for what.
I'm very tempted to use it for my courses, but I'm not sure it fits the Zen exactly.
So I have to decide.
It looks like the default font is Hack.
That's nice.
Oh, yeah.
Speaking of which, that's a good one.
Yeah, I love Hack.
That's cool.
Great.
All right.
Well, this is a great one.
And if you want to post any code, yeah, one of the problems with posting any form of
code, you know, certain places, it'll like not accept the formatting.
It'll just completely wreck it.
Like, for example, if I'm in a Zoom meeting, I'm going to say, yeah, here, this code, you
know, that's going to come out completely destroyed.
The people receiving it.
And then on Twitter, like you said, you want to talk about the code, but you don't want
the code to count as towards your 280 words.
I really like this.
It's great.
I'm going to start using it.
So the last thing I want to cover our made items this week is about bugs in Python code.
And yeah, it's pretty interesting.
This one was sent to us by actually quite a few people this week.
So it comes from Jacqueline Wilson, Jesper Sorensen, sorry about that, and Eric Palmer all sent this
over and said, hey, this is crazy.
You all should talk about this.
So researchers found a bug in a Python script that was super subtle, really based on an
assumption that may have affected hundreds of academic peer-reviewed published studies.
That sounds bad, right?
Yeah.
So it turns out that in this, there's a paper, of course, how do you rebut code bugs in academia?
You publish a paper.
So in a paper published in October 8th, a couple weeks ago, some folks at the University of Hawaii,
researchers there, found a programming error in a set of Python scripts used for computational
analysis of chemistry data.
It started returning different results based on the operating system you were running on.
That's bad.
That's not amazing.
It turns out that they were using Python's glob.glob and assuming it was sorted, but it was not
sorted sometimes.
Wow.
The reason that matters is something that I'm kind of thinking is it worked.
This script works with a bunch of files, one after another, after another, and they kind of build up
together to generate a result.
And so if you don't take them in order, it doesn't mean the same thing.
I'm sure everyone's thinking like, oh, yeah, it was probably on Windows it did this, but on Linux
it did that, but on Mac it did that.
It was actually worse.
It was more subtle than that.
So they found that it returned correct results on macOS Mavericks and Windows 10, but on macOS
Mojave and on Ubuntu, the results were off.
So even across different versions of macOS, it changed because they were relying on the underlying
operating system to do some sorting that they needed, and apparently not so much.
Glob is very close to the OS, right?
Yeah.
It's just basically, there's no promises about sorting.
It just happened to be the OS they first developed it on.
It was.
Yeah.
So they were trying to analyze the results from an experiment involving cyanobacteria, and
they discovered significant variations in the results run against the same nuclear magnetic
resonance spectroscopy, NMR data.
And yeah, it turned out to be not so good.
So basically, the fix was incredibly simple, right?
Like you get the glob data and you just like call sort on the result.
You know what I mean?
And then you process it.
It's just one of those things.
You make an assumption and the assumption is wrong or it becomes wrong over time because
it was never a promise.
It was just implicit.
And yeah, stuff breaks.
Wow.
Testing on multiple machines is good.
Yes.
It's a very good idea, right?
One of the reasons.
I mean, especially running some of these tests on, this would be like a system level,
having to have the files there and test them.
I don't know how you would do that individually.
But doing it out on continuous integration service that used multiple operating systems, I guess,
would be good.
That seems like it could work in a reasonable way for sure.
Yeah.
So basically, the conclusion of all this, one of the professors who discovered the problem,
William, said that he hopes the paper will get scientists to pay more attention to the computational side of experiments in the future
and maybe do a little more things like unit testing and whatnot, right?
Yeah.
Last part is my bit I threw in there for him.
But yeah, anyway, this is rough.
I don't know.
I feel like a lot of science is both science is incredibly amazing and yet like kind of rickety.
It's on a very unstable foundation sometimes.
One of the differences now is that people can follow what kind of they're even able to reproduce some science
or able to reproduce the analysis part, whereas this wouldn't have been caught before.
It wouldn't have even ever been run again.
It was just it would be run once on somebody's computer in their lab.
They publish the paper and then they put it away.
Right.
They say, here's the results of our computation.
Here's what we did.
And here was our methodology for doing it.
But not here is the open source package on PyPI.
Why is it not working for you, right?
That's pretty cool.
So this is good to highlight some of the things to look for.
And I mean, we always have to be a little bit more cautious than we were before.
Yeah, absolutely.
Well, pretty cool.
And that's it for our main topics this week.
Brian, you got anything else you want to throw out there?
This wasn't really big enough to warrant a big topic, but there was an interesting discussion called using big tech tools.
And I just wanted to highlight it because it's a little bit interesting.
Basically, the question is, Vicki Boykus brought it up, or at least she highlighted it on Twitter, that if you like things like PyTorch and other things, there are some projects that are sponsored and heavily built by large corporations.
Should you use them if you don't like the corporation?
I don't have an answer for it, but it's an interesting question.
Oh, how interesting.
Yeah.
And Vicki's doing some really cool stuff.
She's got this.
She did Hack Your Name for a while, which was that Y Combinator startup namer thing.
And yeah, a bunch of cool projects.
That's cool.
I think it was.
Yeah.
Hopefully, I don't misattribute that.
It's not up anymore, so I can't double check it.
But yeah, I think it was.
Yes, he's doing a bunch of cool work.
This is great.
Yeah.
The other thing I wanted to bring up is the second Portland West Python meetup is November 5th.
So that's a week earlier.
We're shifting to the first Tuesday of the month because the second Tuesday is colliding with the data meetup.
That's awesome.
It's going really well.
The first meetup we had was a big success.
The venue that you got put together at your new office is fantastic.
We had like four 4K 70-inch screens or something all up there for people to watch on.
And yeah, it's going really well.
Unfortunately, I can't make this one.
I'm going to be out of town.
But generally, definitely going to go to this.
It's great.
It'll be awesome.
Yeah.
How about you?
So just reminded yesterday that it's turtles all the way down.
And sometimes you have to stand upon a turtle but not control the turtle.
What I mean is the Talk Python training site started behaving weirdly for some users.
It seems like it's working for me.
I don't know what's going on.
And it turns out we use Amazon for some of the video delivery of the courses.
And Amazon was under a DDoS attack for like 12 hours straight yesterday.
And so more of the DDoS attack that I'm talking about.
But it like basically knocked a whole bunch of stuff off the internet, which was crazy.
Wow.
Yeah.
So people can check that out.
But they were trying to mitigate the DDoS attack against their DNS systems.
And by doing so, they were basically overprotecting and like blocking all the other systems that were just trying to get their job done.
Another big piece of news for us is over on PyPI.org.
201,227 projects.
We have passed over 200,000 projects, which is awesome.
Thanks to RealPython for shouting that out.
And then, Brian, we discussed about this XKCD that we talked about a few episodes ago.
And said, well, it was episode 100 or 1425.
And it talked about how some things that are either hard or easy in programming are sometimes difficult to distinguish.
So, Andre Janisch sent over this thing called explainxkcd.com, which is a wiki of every one of those with like a detailed analysis of the XKCD and also includes the date.
Yeah.
So, this one has, do you remember what the date is?
This was the date that we talked about or the date when it was done.
It was done.
It was like done in 2014 or something, right?
Yeah.
Exactly.
It was explaining that checking to see whether a photo had a bird in it was a difficult problem in 2014.
And now you can have code that figures that out on a Raspberry Pi.
Exactly.
Maybe your watch will do it.
Like you just shake your watch at the picture and it just like vibrates in a bird shape.
I don't know.
That was before not a hot dog.
Yes, exactly.
All right.
Bob, what have you been up to?
Anything you want to tell people about?
Yeah, the platform, cochallenge.es.
It's growing rapidly.
And a lot of development work.
So, we added some nice linters, flake 8, black.
You can now blackify your code.
And yeah, UI changes, making it easier.
And more Python ninjas coming in.
A lot of coding down there.
Yeah, that's awesome.
Last week, we talked about all the auto formatters, auto PEP 8 and black and stuff.
So, you're using black basically to, as people work on the website, like it'll just clean it up for them?
Well, they have to do it manually.
It's just a button, right?
But they press it, but then it'll like clean it up automatically with black.
Yeah.
Made a new lambda and it runs black against the code.
And yeah.
Returns it.
Yeah.
Good to see that that's coming along strong.
All right.
Now, let's wrap this up with a joke.
I think it's safe for work, but it's a little bit off.
But I don't know.
Brian wants to make me say it.
I'm giggling in the background.
So, here's our joke.
What did the network administrator say when they caught an at-stivirus?
I don't know.
What?
It hurts when the IP.
The letter IP.
Oh, I love this joke.
It's so bad.
Yeah.
But this episode was not bad.
It was good.
Thank you guys for being here.
Thanks, Brian.
Thanks, Bob.
Is it IPv4 or IPv6?
It hurts way worse when it's IPv6.
All right.
Thanks a lot.
All right.
Thanks.
Bye, guys.
Thank you for listening to Python Bytes.
Follow the show on Twitter via at Python Bytes.
That's Python Bytes as in B-Y-T-E-S.
And get the full show notes at pythonbytes.fm.
If you have a news item you want featured, just visit pythonbytes.fm and send it our way.
We're always on the lookout for sharing something cool.
On behalf of myself and Brian Okken, this is Michael Kennedy.
Thank you for listening and sharing this podcast with your friends and colleagues.