Python Bytes - #154 Code, frozen in carbon, on display for all

Episode Date: October 29, 2019

Topics covered in this episode: Lesser Known Coding Fonts Django Admin Handbook Your Guide to the CPython Source Code Six Django template tags not often used in tutorials Beautiful code snippets wi...th Carbon Researchers find bug in Python script may have affected hundreds of studies Extras Joke See the full show notes for this episode on the website at pythonbytes.fm/154

Transcript
Discussion (0)
Starting point is 00:00:00 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 Eichen. And we have a special guest, Bob Belderbos. Welcome, Bob. Hi, thanks for having me. Yeah, yeah, welcome back. Nice to be here.
Starting point is 00:00:16 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 slash 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
Starting point is 00:00:36 or picking like the right font. 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.
Starting point is 00:00:54 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
Starting point is 00:01:34 interested me at the end of there's there's a one called input mono and there's a professional font designer jonathan david ross that developed. 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. 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 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
Starting point is 00:02:17 screen or having to push their, 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.
Starting point is 00:02:48 Source Code Pro is really nice. But I am just all about the Fira code these days. Fira 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.
Starting point is 00:03:02 Fira 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.
Starting point is 00:03:22 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.
Starting point is 00:03:38 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-monospace 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 monospace font, but sometimes it's nice to have things a little bit more condensed.
Starting point is 00:04:11 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. Yeah, as you get older and older screen time, it's definitely fundamental. And a big screen I lately started using at work,
Starting point is 00:04:35 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? It's pretty close. I'm not exactly sure. I have the iMac 27, so it's... That's pretty awesome.
Starting point is 00:04:51 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.
Starting point is 00:05:04 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 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
Starting point is 00:05:26 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.
Starting point is 00:05:43 What a weird name for a Reddit channel or Reddit, whatever you call those things. It is weird, but man, 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?
Starting point is 00:05:57 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
Starting point is 00:06:17 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 I have 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.
Starting point is 00:06:47 So what I learned from the book was that you can overwrite 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 and that page...
Starting point is 00:07:03 Oh interesting. It's almost like a like the N plus one problem of ORMs where you have a relationship that you should have pre-joined, but you didn't. But I didn't realize that that was happening in the admin section. That's cool. Yeah, a bit like select related. Yeah, exactly.
Starting point is 00:07:17 So I use 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
Starting point is 00:07:46 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 you can overwrite the save method of the model. Wow, you're using the admin to trigger outbound notifications. Interesting. Yeah, so you can just overwrite 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 edit the object and you don't do the action.
Starting point is 00:08:20 So it's really nice to do that with overwriting the save method. So that's all stuff I got from this document and then I subscribed in my email got a couple of PDFs more it'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
Starting point is 00:08:38 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 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.
Starting point is 00:08:58 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 pythonbyst.fm slash 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
Starting point is 00:09:56 CPython Source Code. Now, basically, it gets you started by checking out the source code and then talks you through it and highlights a bunch of different scenarios and then looks at the c python 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's 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 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 pulled out that I thought were pretty awesome. So first of all, if I want
Starting point is 00:10:43 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 github.com slash python slash c python that's it right it's i think it's awesome that c python 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,
Starting point is 00:11:15 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 it compiled, and super easy to follow along. So that was great.
Starting point is 00:11:26 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,
Starting point is 00:12:13 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 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
Starting point is 00:13:02 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.
Starting point is 00:13:15 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
Starting point is 00:13:33 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 c python compiler and execution loop right people don't think of your c python code is it compiled but it 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
Starting point is 00:14:10 looking at the objects and how those are managed in python on the standard library and then finally one of the things covered in the article just like a little minor section of it because it's covered 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 uh 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
Starting point is 00:14:58 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. You want to look into it. Set aside.
Starting point is 00:15:24 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
Starting point is 00:15:39 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 a couple Django sites. These were fun, and I haven't used them either. So the article goes through six tags,
Starting point is 00:15:56 but I'm pulling out a few of them. So the empty tag, there's a for loop you can do 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 cool there's a built-in lorem ipsum generator i had no idea bob did you know about this so this
Starting point is 00:16:30 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 for 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.
Starting point is 00:17:01 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
Starting point is 00:17:18 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 was just, I had the office hours for TalkPython courses and some folks in there were saying, I found it a little bit tricky to combine
Starting point is 00:17:35 Django and Vue.js because they have the same similar tags. The double handlebars mean certain things and whatnot. 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. And the article mentions that if you've got something else down the tool chain,
Starting point is 00:17:58 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 you've got to to take it up a notch and there's a place called hipster ipsum
Starting point is 00:18:29 some.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 uh you run it and it comes up with with stuff that is super hipstery. Oh, yeah. I just did that. Selfies, three, wolf, moon, Edison bulb, adapt, gen, cray organic, Venmo. What do you got? Portland, bond me, vaporware, Polaroid, farm to table, Iceland, selfies.
Starting point is 00:19:02 I love it. I love it. But it is really cool that lorem ipsum is built into Django. I had no idea. Can 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
Starting point is 00:19:18 next, this is brand new to me. I guess I've seen it all over, but I just learned 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.
Starting point is 00:19:48 I'm talking about fonts. Yes, exactly. The language and put code in there. And that's nice integration with Twitter. You can click Tweet button. But we actually use it with Selenium to populate it automatically with our tips.
Starting point is 00:20:04 And it generates a cached image, or I think it posts the image to Twitter and then provides you a Twitter link. And then you can embed that link in your tweets. And I saw 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 Carmen.now.
Starting point is 00:20:24 Yeah, they probably are. They just look very nice. Yeah, this is great. It gives you a screenshot of a generic-ish terminal with code in it that's color formatted and indented and then it just lets you export an image or directly tweet it.
Starting point is 00:20:39 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, it's really cool. I like it. Especially for Twitter, right? The code doesn't fit in 140 characters.
Starting point is 00:20:57 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
Starting point is 00:21:10 to decide. It looks like the default font is Hack. That's nice. Oh, yeah. Speaking of which, that's a good one. 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, 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 gonna say yeah here this code you know that's
Starting point is 00:21:35 gonna 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 main 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,
Starting point is 00:22:10 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.
Starting point is 00:22:43 So in a paper published on 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 what i'm kind of thinking is it worked this script works with a bunch of files
Starting point is 00:23:19 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 okay 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 mac os mavericks and windows 10 but on mac os mojave and on ubuntu the results were off so we 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 glob is very close to the os right yeah it just basically, there's no promises about sorting.
Starting point is 00:24:05 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?
Starting point is 00:24:34 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. comes 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
Starting point is 00:24:57 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 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's my bit. I'll throw in there for him. But yeah, anyway, this is rough. I don't know. I feel like a lot of science is,
Starting point is 00:25:40 both science is incredibly amazing and yet 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.
Starting point is 00:26:09 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 then we, I mean, we always have to be
Starting point is 00:26:24 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, if I, Vicky Boyk has brought it up,
Starting point is 00:26:51 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.
Starting point is 00:27:11 And Vicky'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 That's cool. I think it was. Yeah, hopefully I don't misattribute that.
Starting point is 00:27:25 It's not up anymore, so I can't double check it. But yeah, I think it was. Yeah, she'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.
Starting point is 00:27:39 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 four 4K 70-inch screens or something all up there for people to watch on. Yeah, it's going really well.
Starting point is 00:28:03 Unfortunately, I can't make this one. I'm going to be out of town. But generally 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.
Starting point is 00:28:40 And so more of the DDoS attack that I'm talking about. But it 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.
Starting point is 00:29:01 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 and programming are sometimes difficult to distinguish so andre janice sent over this thing called explain xkcd.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 uh the date that we talked about or the date when it was done it was done it was like it done in 2014 or something right yeah yeah yeah exactly. It was explaining that checking to see whether a photo had a bird in it was a difficult problem in 2014.
Starting point is 00:30:08 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.
Starting point is 00:30:24 Bob, what have you been up to? Anything you want to tell people about? Yeah, the platform, codechallenge.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. Yeah, UI changes, making it easier. And more Python ninjas coming in in a lot of coding down there yeah
Starting point is 00:30:48 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 on the website like it'll just clean it up for them well it said 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. Yeah. Returns it. Yeah, good to see that that's
Starting point is 00:31:13 coming along strong. Alright, 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, so. I'm giggling in the background. So here's our joke. what did the network administrator say when they caught a nasty virus i don't know what it hurts when the ip or ip i love this joke it's so bad yeah but this episode was not bad it was
Starting point is 00:31:42 good thank you guys for being here thanks Thanks, Brian. Thanks, Bob. Is it IPv4 or IPv6? It hurts way worse when it's IPv6. All right. Thanks a lot. Thanks. Bye, guys. Thank you for listening to Python Bytes.
Starting point is 00:31:56 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 Ocken, this is Michael Kennedy.
Starting point is 00:32:15 Thank you for listening and sharing this podcast with your friends and colleagues.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.