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

« Return to show page

Transcript for Episode #154:
Code, frozen in carbon, on display for all

Recorded on Wednesday, Oct 23, 2019.

00:00 KENNEDY: Hello and welcome to Python Bytes. Where we deliver Python news and headlines directly to your earbuds. This is Episode 154 recorded October 23, 2019. I'm Michael Kennedy.

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

00:12 KENNEDY: And we have a special guest Bob Belderbos, welcome Bob.

00:14 BELDERBOS: Hi, thanks for having me.

00:15 KENNEDY: Yeah, yeah welcome back. Been too long since you've been on the show.

00:18 BELDERBOS: Yeah it was a while back. Glad to be back.

00:20 KENNEDY: For sure. Glad you're here, so before we get on to other things this show is brought to you buy Datadog. Check them out at 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?" And I'm going to switch to that now. Do you have that same problem?

00:43 OKKEN: No I don't actually.

00:46 KENNEDY: You find em and stick with em, huh?

00:48 OKKEN: I never really thought about the font I used 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 APL385 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 that there's 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 you know coding fonts that's pretty much your personal use. You can just download it and add it and I just, so 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 just trying a different font might be a good idea.

02:23 KENNEDY: 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 moniter. 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. Source Code Pro is really nice. But I am just all about the Fira Code these days. Fira Code with its font ligatures on.

02:56 OKKEN: [Brain] Okay, we should put a link to some of those. Cause I've never even heard of some of these.

02:59 KENNEDY: Yeah, I mean they're a referenced but they're not linked in this article. Fira Code and I guess all of the font ligature ones are crazy because you know in like math you were taught that not equals, you have the equals sign and you put a line through it, right? But we don't have that symbol on our keyboard. You'd say exclamation "!=". Or if you said "<" it would have like the arrow and then like the double arrow on the bottom to say "<=" When you turn on font ligatures with like Fira Code and I see some of the fonts here, calling out here also has a category 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 equal and a slash through it.

03:36 BELDERBOS: Okay, well that's useful.

03:37 KENNEDY: 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.

03:54 OKKEN: In the Input family, it's a huge family and there's even like some non-mono space fonts within it. And they're all intended to be good on your eyes while editing. I didn't even, it occurred to me to not use a mono space font but sometimes it's nice to have things a little bit more condensed and an "I" character doesn't have to take up the same width as a "Z" for instance or whatever.

04:17 KENNEDY: That's cool. Bob how about you, what's your thoughts on them?

04:19 BELDERBOS: I have honestly not really used many font types. But I'm really eager to check it out now. That's, yeah, as you get older and older the screen time it's definitely fundamental. I have a big screen I lately started using at work. It makes all the difference. So yeah, I'm eager to try it out now.

04:39 KENNEDY: Yeah, you might have even a higher res screen than I do. You might have 5K or something like that, right? It's pretty close.

04:45 BELDERBOS: I'm not exactly sure. I have the iMac 27 so, it's a...

04:50 KENNEDY: That's pretty awesome.

04:51 BELDERBOS: It's got some potential there.

04:53 OKKEN: [Brain] Mike you just wrote down Fira 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"

05:02 KENNEDY: Fear of code. You may have fear of code. And you may be looking at that code with Fira Code but they're not necessarily related. That's awesome, I love that that the font ligatures 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 on here that kind of has blown my mind I was thinking you maybe pulled up something not safe for work here, Brian. It has something on Reddit at /r/unixporn. 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.

05:43 OKKEN: What a weird name for a Reddit channel or a Reddit, whatever you call those things.

05:48 KENNEDY: It is weird but man it's I could just flip through those for a while it's pretty awesome. Let's move onto the next one. Bob what do you got for us here? You're a fan of Django, right?

05:57 BELDERBOS: Not a new 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 Djnago developer you inevitably will be using the Admin. I use it both for co-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.

06:36 KENNEDY: Yeah what are they?

06:37 BELDERBOS: 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. And so what I learned from the book was that you can override the get querie set and do like one annotative query. And so for the whole list view you'd then have like one big query instead of a query per row in that page.

07:03 KENNEDY: Oh, interesting. It's almost like a like the n plus one problem of ORMs where you have a relationship that you should've pre-joined but you didn't. I didn't realize that that was happening in the admin section, that's cool.

07:15 BELDERBOS: Yeah but like select related.

07:16 KENNEDY: Yeah, exactly, uh huh.

07:17 BELDERBOS: So I used that for a page and yeah. I had the problem with that property and it 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 analysis so that's neat to have that interface. And another one I like is overriding the save behavior for Django Admin. I used that lately when we 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 we can override the save method of the model.

08:03 KENNEDY: Wow, you're using the Admin to trigger like a outbound notifications, interesting.

08:08 BELDERBOS: Yeah, so you can just override the save 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've added the object and you don't do the action so it's very nice to to do that with overriding the save method. So that's all stuff I got from this document and then I subscribed with my email got a couple of PDF, some more. It's a nice resource.

08:31 KENNEDY: Yeah that looks really cool, yeah. Awesome. Another one that looks really useful 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 and they're a cloud-scale monitoring platform built by engineers for engineers. And their tracing client auto instruments all of the good things like Django, for example but Flask and Async IO and MongoDB, and all that. And let's 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 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, man, 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, a friend of the show and you know, we haven't covered that much by him it's probably been a few weeks since we've covered something that he's done. And he wrote this article that Bob properly referred to as a book over at Real Python, right Bob?

09:52 BELDERBOS: Yeah.

09:53 KENNEDY: It's really good over there it's called "Your Guide to the CPython Source Code." Now basically it gets your started by checking out the source code and it 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 "Here are the objects. And here is the data structure that does x, y, and z, and let's all look here how it's implemented as a linked list of arenas for a 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've pulled up 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. Git clone, That's it, right? I think it's awesome that Cpython is on GitHub.

10:57 OKKEN: Yeah, that's nice.

10:57 BELDERBOS: Indeed.

10:59 KENNEDY: [Micheal] Yeah. And then how 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, Mac OS, Windows, and Linux. How you go through them. On Mac OS, I did that. It took me about five minutes to get the whole thing compiled, set up and compiled and it was 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. Though 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 parts that you can use. All of the C included 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 that I think of them as. So for example I was looking at the concurrent C section so Lib/concurrent/futures. There's like and and stuff like that. And they're 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.

12:51 OKKEN: Oh wow.

12:51 KENNEDY: Yeah. Similarly if you go to like the JSON module it's got like diagrams in ASCII about what's happening there. I was like "Wow, really this is better than I expected!"

13:01 BELDERBOS: Wow.

13:01 KENNEDY: So it's super fun to poke around in there and see the parts of the library that are written in Python. Also I 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 the Python for the CPython interpreter and tools for the 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 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 a byte code 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 cause it covered so much. It's like oh yeah, well let's add actually a new key word 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.

15:03 BELDERBOS: That's really impressive. The amount of detail and diagrams and the code. I'm really thankful for that this article's out there, right? Because it can be quite intimidating and here you have this guide that walks you through it with nice graphs and explanations.

15:21 KENNEDY: For sure.

15:22 BELDERBOS: I'll have to look into it.

15:23 KENNEDY: Set aside.

15:24 OKKEN: 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.

15:32 KENNEDY: Absolutely. Brian what do you got next for us?

15:34 OKKEN: The next one is 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 were fun and I haven't used them either. So the article goes through six tags but I'm pulling out a few of em. 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 texts or extra HTML output for if there's nothin there. That's kind of neat.

16:19 KENNEDY: Yeah like, here's where the list would go but you know, nothing yet.

16:22 OKKEN: Or oops, there's nothing there yet you have to add.

16:24 KENNEDY: That's cool.

16:24 OKKEN: There's a built in Lorem Ipsum generator.

16:27 KENNEDY: I had no idea! Bob did you know about this?

16:30 OKKEN: So this is just cool. And it, 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?

16:40 BELDERBOS: No, I'm surprised that I don't know about any of those six. And I see already some refactoring candidates especially the for empty. I would definitely look at student list at 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.

17:02 OKKEN: Well especially when you're trained 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.

17:26 KENNEDY: You know a place where that verbatim looks interesting? I was just, 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.

17:43 OKKEN: Yeah.

17:43 KENNEDY: And they're like "well I want 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.

17:54 OKKEN: In the article it mentions that if you got something else down the tool chain like your Javascript library or something that's going to...

18:01 KENNEDY: Yep.

18:01 OKKEN: re-change things you can use this to make sure Django doesn't.

18:04 KENNEDY: 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 couldn't get like random sort of Latin stuff in there 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., if you go there you can generate it it has a little generator that 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.

18:46 OKKEN: Oh yeah I just did that!

18:48 KENNEDY: Selfies, three, wolf, moon, Edison bulb adapt, Ken, cray, organic, venmo. What do you got?

18:55 OKKEN: Portland, Bahn mi, vaper wear, Poloroid, farm to table, Iceland, selfies.

19:01 KENNEDY: I love it. But it is really cool that Lorem Ipsum is built into Django, I had no idea.

19:08 OKKEN: Could we get Hipsum built into Django? That would be better.

19:11 KENNEDY: 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've just learned that what it is today.

19:25 BELDERBOS: Yes so you want to post some code on Twitter and you want to look it nice? So we're using a carbon-now-sh a lot. It basically lets you create those terminal PNG images of code, that nice color formatting. And yeah, that's very easy to use you just choose the font, talking about fonts.

19:49 KENNEDY: Yes exactly.

19:49 BELDERBOS: The language and put the code in there and there'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 to generate a cached image or I think it post image to Twitter and then provides you a Twitter link. And then you can embed that link in your Tweets. And that's actually today yeah, more developers overall these days using it on Twitter I see a lot of those images and they're probably, probably all from a

20:24 KENNEDY: Yeah they probably are.

20:25 BELDERBOS: They just look very nice.

20:27 KENNEDY: 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.

20:51 OKKEN: Yeah.

20:51 BELDERBOS: 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.

21:01 KENNEDY: 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.

21:11 OKKEN: It looks like the default font is Hack. So that's nice.

21:15 KENNEDY: Oh yeah, speaking of which, that's a good one. Yeah, I love Hack, that's cool. All right well this is a great one and if you're wanting to post any code you got, one of the problems with posting any form of code you know, certain places it'll like not accept the formatting and it'll just completely wreck it. Like for example, if I'm in a Zoom meeting and 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. Yeah I really like this, it's great. I'm going to start using it. So the last thing I want to cover, our main items this week is about bugs in Python code. And yeah, it's a pretty interesting this one was sent to us by actually quite a few people this week. So it comes from Jaclyn Wilson, Jesper Kyer, 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 find, found a bug in a Python script that was super subtle. Really based on an assumption that may have affected hundreds of academic peered reviewed published studies. That sounds bad, right?

22:30 BELDERBOS: Yeah.

22:32 KENNEDY: 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 publish in October 8 that's 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.

23:01 OKKEN: That's bad.

23:02 KENNEDY: That's not amazing. It turns out that they were using Python's glob.glob in assuming it was sorted but it was not sorted sometimes.

23:12 BELDERBOS: Wow.

23:12 KENNEDY: The reason that matters is something what 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 results. 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 in Mac OS Mavericks and Windows 10 but Mac OS Mojave and on Ubuntu the results were off. So like even across different versions of Mac OS it changed because they were relying on the underlying operating system to do some sorting that they needed and apparently not so much.

23:59 BELDERBOS: Glob is very close to the OS, right?

23:59 KENNEDY: 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 of running against the same nuclear magnetic resonance spectroscopy in a mar data. And, yeah it turned out to be so, 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 results. 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 it becomes wrong over time because it was never a promise it was just implicit. And yeah, stuff breaks.

23:59 OKKEN: Wow, testing on multiple machines is good.

23:59 KENNEDY: Yes. It's a very good idea, right?

23:59 OKKEN: 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.

23:59 KENNEDY: That seems like it could work in a reasonable way, for sure. Yeah so basically the conclusion of all of this is one of the professors who wrote the 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?

23:59 OKKEN: Yeah.

23:59 KENNEDY: Last part's my my bit I throw in there for him. But yeah, anyway this is 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. Like it, it's on a very unstable foundation sometimes.

23:59 OKKEN: One of the differences now is that people can follow what kind of they're even able to reproduce some science or if they're 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 run once on somebody's computer in their lab, they publish the paper and then they put it away.

23:59 KENNEDY: Right, they say "Here's the results of our computation and here's what we did and here was our methodology for doing it." But not "Here is the open sourced package on PyPi. Why is is not working for you?" right? That's pretty cool.

23:59 OKKEN: So this is good to highlight some of the things to look for and that we I mean, we always have to be a little bit more cautious than we were before.

23:59 KENNEDY: 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?

23:59 OKKEN: 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 if I, Vicki Boykis brought it up or at least she highlighted it on Twitter. That if you, 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.

23:59 KENNEDY: Oh, how interesting. Yeah, Vicki's doing some really cool stuff. She's got this. She did Hack Your Name for a while which was that YCombinator startup namer thing and yeah, a bunch of cool projects.

23:59 OKKEN: That's cool.

23:59 KENNEDY: 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. But yeah, she's doing a bunch of cool work this is great.

23:59 OKKEN: Yep, the other thing I wanted to bring up is the second Portland West Python Meetup is November 5. So that's a week earlier, we're shifting to the second or the first Tuesday of the month. Because the second Tuesday's colliding with a data meetup.

23:59 KENNEDY: 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 have like four 4K, 70 inch screens or something all for people to watch on. Yeah, it's going really well. Like 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.

23:59 OKKEN: It'll be awesome.

23:59 KENNEDY: Yeah, cool.

23:59 OKKEN: How about you?

23:59 KENNEDY: 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 of 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, it's 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.

23:59 OKKEN: Wow.

23:59 KENNEDY: 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 blocking all the other systems that were just trying to get their job done. Another big piece of news for us is over on 201,227 projects, we have passed over 200,000 projects which is awesome. Thanks to Real Python for shouting that out. And then, Brian we discussed about this xkcd that we talked out a few episodes ago. It said, well it was episode 1,425. And it talked about some things that are either hard or easy in programming or sometimes difficult to distinguish. So Andre Yannish sent over this thing called which is a Wiki of every one of those with like a detailed analysis of the xkcd and also includes the date.

23:59 OKKEN: Yeah, so this one has do you remember what the date is?

23:59 KENNEDY: This was, the date that we talked about it or the date when it was done?

23:59 OKKEN: It was done, it was done in like 2014 or something, right?

23:59 KENNEDY: Yeah, yeah exactly.

23:59 OKKEN: 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.

23:59 KENNEDY: 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.

23:59 OKKEN: That was before not a hot dog.

23:59 KENNEDY: Yes, exactly. All right, Bob what have you been up to? Anything you want to tell people about?

23:59 BELDERBOS: Yeah, the platform has grown rapidly and a lot of development works. And we added some nice linters flake8, black. And I'll blackify your code and yeah, UI changes. Making it easier and more Python ninjas coming in. Another coding founder.

23:59 KENNEDY: Yeah, that's awesome. Last week we talked about all auto-formatters autopep8, 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?

23:59 BELDERBOS: Well it's, they'll have to do it manually. It's just a button, right?

23:59 KENNEDY: But they press it but then it'll like clean it up automatically with black?

23:59 BELDERBOS: Yeah. Made a new Lambda and it runs black against the code. Yeah, returns it.

23:59 KENNEDY: 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 a little bit off. But Brian wants to make me say it so...

23:59 OKKEN: I'm giggling in the background.

23:59 KENNEDY: So here's our joke. What did the network administrator say when they caught a nasty virus?

23:59 OKKEN: I don't know, what?

23:59 KENNEDY: It hurts when IP. Letter "I", "P".

23:59 OKKEN: Oh, I love this joke.

23:59 KENNEDY: It's so bad.

23:59 OKKEN: Yeah.

23:59 KENNEDY: But this episode was not bad, it was good. Thank you guys for being here. Thanks Brian, thanks Bob.

23:59 OKKEN: Is it IPv4 or IPv6?

23:59 KENNEDY: It hurts way worse when it's IPv6.

23:59 OKKEN: All right, thanks a lot.

23:59 BELDERBOS: Alright, thanks.

23:59 KENNEDY: All right, guys. Thank you for listening to Python Bytes. Follow the show via Twitter via @pythonbytes. That's Python Bytes as in b, y, t, e, s. And get the full show notes at If you have a news item you want featured just visit and send it our way. We're always on the lookout for sharing something cool. On behalf of myself and Brian Okken this is Michael Kennedy. Thank you for listening and sharing this podcast with your friends and colleagues.

Back to show page