Python Bytes - #267 Python on the beach

Episode Date: January 21, 2022

Topics covered in this episode: Box: Python dictionaries with advanced dot notation access Reading tracebacks in Python Raspberry Pi: These two new devices just went live on the International Space... Station Make Simple Mocks With SimpleNamespace * Extra, extra, exta* 3 Things You Might Not Know About Numbers in Python Extras Joke See the full show notes for this episode on the website at pythonbytes.fm/267

Transcript
Discussion (0)
Starting point is 00:00:00 Hey there, thanks for listening. Before we jump into this episode, I just want to remind you that this episode is brought to you by us over at TalkPython Training and Brian through his PyTest book. So if you want to get hands-on and learn something with Python, be sure to consider our courses over at TalkPython Training.
Starting point is 00:00:17 Visit them via pythonbytes.fm slash courses. And if you're looking to do testing and get better with PyTest, check out Brian's book at pythonbytes. get better with PyTest, check out Brian's book at pythonbytes.fm slash PyTest. Enjoy the episode. Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds. This is episode 267, recorded January 19th, 2022. That's it. I'm Brian Akin. I'm Michael Kennedy.
Starting point is 00:00:44 I've got kind of a, I've got a cool green screen today. I know some days we have cool stuff to talk about and cool things to share, but you're taking the next level. You are live streaming and recording right from the beach in Hawaii. So, uh, yeah, I'm looking out. I'm so right now. So it's nice. It's you could probably handle doing it more than one week, right? You could just do this for a while. Yeah, we should. I should move here about a month every year.
Starting point is 00:01:10 That'd be great. But anyway, let's move on to our topics. Michael, you want to talk about boxes? I really do want to talk about boxes. This is such a cool library that I found. So here's the thing. We have Python classes and we have dictionaries. Where's all the data stored for most classes? In the dunderdict, right? Which
Starting point is 00:01:33 is a dictionary of what is your field? Here's its value. Each instance of the class, each object gets its own instance of that dictionary, right? Yeah. And yet when we have a dictionary, we can't get the values of the dictionary in the same way that we do have a class. A class, you say thing.field. Well, wouldn't it be nice if you could go to your dictionary and say it has a key.name, so just d.name to access it. That's the basic idea behind this thing called Box by C.D. Griffith. And that enough, that was enough to get me interested and think, all right, this is a cool idea that I would love to play with and maybe I should use it more. But then I started to look a little bit further. So if you go down here, it says, all right, well, sometimes these keys, they have a structure that won't allow you to treat them that way,
Starting point is 00:02:26 like a space or a colon in the example of spaces and colon. So for example, they have a key that is the name of a movie and then data about that movie. So Robin Hood spaces, colon men in tights with spaces. And by default, it'll actually convert that into something that you can use by just, you know, replacing spaces with underscores and colons just go away and stuff like that. Oh, that's awesome. You can still do that, which is cool, but there's a lot more stuff. It says, check out the box GitHub wiki, which is right on the homepage, the GitHub that I linked to. And there's all sorts of things. So they show, start by showing just the basic stuff. Like here's a box and you just, you can create it through keyword
Starting point is 00:03:10 values or pass it a dictionary. It'll initialize out of that. So they've got like funny movie equals something. And you just say my box dot funny movie, just like it was a class. And that was like, I described the first thing. However, there's more that you can do with it. So if you go over to the types of boxes, they have conversion box, default boxes, box dots, camel killer box, which is awesome. Frozen boxes, converters. So not just only will it work in all these ways, which I'm about to describe, it will convert to and from dictionaries, to and from JSON, to and from YAML, to and from message pack and CSV. Oh, okay.
Starting point is 00:03:47 So let's go to the types of boxes and check this out. So by default, you get the conversion box, which is what I described where there's a space. It'll put an underscore. Yeah. All of them you can access in this key value way. It's just a matter of what happens to the keys if there's a way to make them more accessible. But you can turn that off. You can have, you know, a default dictionary, right?
Starting point is 00:04:06 Where if the thing is not there, instead of throwing a key or it'll create whatever you say the default is like create a list because I want to add up things or create start with a number zero because we're trying to count each one of those as we build it up or something like that, right? So it can also be a default dictionary. They call that a default box, which is cool. And it can also do a default dictionary. They call that a default box, which is cool. And it can also do what it calls box dots.
Starting point is 00:04:36 So in a string, you can traverse the hierarchy of the stuff contained in the box through the dot notation. So you could say, you know, my box dot A dot B dot C, and it has this fluent interface where the thing that it returns from each level is either a primitive thing like a number but if it's a sub dictionary it'll return a sub box i guess right so you can keep going on it you can also then just say quote a dot b dot c to traverse that hierarchy as a string if that's more programmable this one is great are you working against an api or some data source that is written in a different language style? So especially I'm thinking C sharp here where it's not lowercase and underscores is the separator, but A, capital A, capital K, all one thing. And like, if you're going to say dot the thing, well, guess what? You're going to have to write that in your code, right?
Starting point is 00:05:30 Yeah. Unless you make it a camel killer box and then it converts it to snake case, pesky underscore and underscore and annoying and keys. So if you program against an API that's written in another language, you can still do this Pythonic code, which is, that's amazing, right? Yeah. I like that. that's great. I know, it's a good name.
Starting point is 00:05:49 I mean, kinda. Frozen box. I would, it's a fun thing. I personally wouldn't recommend it because then your code, it's hard to look up the documentation because it'll be wrong, things like that. Yeah, maybe something more in the affirmative like snake case converted or I don't know, whatever.
Starting point is 00:06:06 They have a frozen box, so it's unmutable and hashable, which is pretty cool. Yeah. A recast, so if you put in strings to this key and you want it to be numbers, it'll always convert it to a float or whatever. So those are all pretty awesome. And then it'll even do things like put a prefix for stuff that couldn't be valid, non-quoted
Starting point is 00:06:28 symbols, right? You could, you can say dot name, but you can't say dot three 27 name, right? So you can say, put an X. So it's X three one seven or whatever. All those things are pretty awesome. Uh, let's, let me go back here. The other thing is just the converters, right? So there's all the converters you might go to dictionary, to YAML, to TOML, and also from
Starting point is 00:06:51 all those things, which I think is pretty neat. So what do you think? Like it? Yeah, I do. And there's times where I've really wanted to conveniently just create something with a dictionary, but I wanted to use dot notation. so i've used like a name tuple or something like that and um and this this is actually this does it for you so nice it's really nice and i've done stuff like that as well where i'm like all right i'm going to create an own class it derives from dictionary and just give it a set adder get adder so you can do the dot thing on it but this seems to have just so many more other features on top of it that i don't think i'll ever do that again i'm just going to use this box thing seems so much better nice it's cool yeah so i think there's just a few comments that i got to
Starting point is 00:07:34 bring in yeah roman right out there points out that the setting default box is not the default setting which is pretty awesome yeah chris Chris May points out that for this, someone needs to think outside this package to get something, outside the box, right, to get something really amazing. And just, you know, Brandon Branner is a little bit jealous of your green screen. Hey, Brandon's the one I had as a guest for Testing Code recently. Hi, Brandon.
Starting point is 00:08:03 Right on. Yeah, very cool. All right. What's next? What's next is mocking, sort of mocking. So Adam Johnson has an article called Making Simple Mocks with Simple Namespace. And I had never heard of this,
Starting point is 00:08:21 so I'm really glad he wrote this article. It's really pretty great. Oh, do I have the wrong? Yeah, let's just cover this one need my notes never mind um so adam's actually been crushing it lately he's got a lot of recent blog posts so good job adam um the uh the simple namespace is pretty neat it comes from the type standard library so it's not an extra package you have to have to bring in uh which that's cool but one of the things so it's like normally we use unit test mock um or you can to mock something but one of the problems with mocks is by default if you misspell something it's going to be fine it mock just lets you do whatever attribute access you want and that's
Starting point is 00:09:04 usually not something you want. Right. Usually the mock is like, let me just get in the way and just let things keep working no matter what, right? And just don't do anything unless you say, return this value for this function call or something. Right. You can pass in specs.
Starting point is 00:09:18 And if you have a known object that you're mocking, you use specs and that works. But sometimes you don't need that much of stuff so simple namespace is a thing that just lets you fill in attributes and then it works to access them it works kind of like a name tuple or something like that but the usage of it is super simple and then and then you can pass this around and so in the in the parlance of uh of like testing this would be for a fake or a stub uh not really a mock because you don't interrogate it but if you just need to fill it have something that that uh you know walks like a duck and quacks like a duck
Starting point is 00:09:56 you can use one of these to create a duck um and have it get passed in it's pretty cool and super simple and really easy love it yeah it seems a lot like just what people would have expected mocks to do if you described it yeah um like it so uh when he has a is a great quote it's as simple as possible with no faff around being callable or tracking usage or something so um in in a lot of sometimes with mocks you uh try to interrogate so you have a function call and you interrogate the mocks to say, did it get called by my code? These don't do that. You can't do that.
Starting point is 00:10:29 But you set it up with the attributes you want, pass through, and it's just pretty neat. I'm going to use these all the time now. Yeah, it looks fantastic. Very nice find. All right. For the next one that I want to talk about, let's go to space. Space. And embedded things in space. So this is pretty fun. This is an article on ZDNet talking about
Starting point is 00:10:54 Raspberry Pis. So apparently the European Space Agency has uploaded and installed and configured two new Raspberry Pis. And not just any Raspberry Pis. They're these, what is it, Astro Pi? That's what it is. These are regular Raspberry Pi 4 boards, Model Bs with 8 gigs of memory, that have been hardened for space. Okay? Wow, okay.
Starting point is 00:11:22 And the whole goal of having them up here is so that students and kids can write code and run experiments and just play with automation, but literally using the sensors of the international space station and actually writing Python code and machine learning stuff that runs up there in space. Isn't that cool? That's incredible. Yeah, yeah. So apparently there's 500 student programming teams in Europe who are all participating in this thing called the European AstroPie Challenge, which is like an education-focused competition or startup or whatever. Okay. Yeah.
Starting point is 00:12:01 Very cool. Out of this world. It's out of this world, absolutely. It's really cool to see Python in space, right? And here's just more of it, right? And Raspberry Pis. I know. You can practice your stuff at home and then have it go up there.
Starting point is 00:12:14 Neat. Yeah. Very cool. So you have things like the humidity reading and board the ISS and the various sensors and things on there that you can work with. And then just do science-y things. I mean, when I was a kid, the science fair was like, well, let's make a little volcano that erupts and like oozes stuff out of paper mache. And, you know, these kids get to write code that runs in space.
Starting point is 00:12:38 That's, that's the next level. Yeah. I admit that I've never done the volcano thing though. I kind of, I should do that. Yeah. I haven that I've never done the volcano thing, though. I kind of should do that. Yeah, I haven't either. Very much. I mean, I did some paper mache thing and I think I had a failed volcano once, but that's about it. Anyway, I just think this is really cool and it's a neat use of Raspberry Pis.
Starting point is 00:12:56 It's a cool way to take like a semi-modern computing environment, put it somewhere neat where it has access to real, the real world and let kids and other researchers write code on it without going, yeah, we're not going to install your program on the ISS. No, no thanks to that. This is so neat. I'm just blown away. I would have never thought that something like this was going to happen in my lifetime. It's nice. Yeah. Yeah. So many neat things. All right. Well, that's, that's all I got to say about that, but definitely fun. So one of the things that new coders have to deal with, and unfortunately it's hard to tell them ahead of time how to deal with it, is tracebacks. So tracebacks are just part of life with coding.
Starting point is 00:13:41 And Trey Hunter has an article called Reading Tracebacks in Python. And it's a really great simple introduction i love it um one of the things i want to comment on is um just just the order in which we teach people things and it teaching people how to do tracebacks is something that it really needs to be early maybe like right before testing, right after the hello world. But seriously, tracebacks happen so fast. And when you start coding, an assertion happens that you don't catch
Starting point is 00:14:11 and you get a traceback and people panic and go, oh my God, I suck as a programmer. And you don't, it's not overwhelming. Just kind of walk through it simply. And that's what this article is about is how to walk through it simply. And so we're going to, if people are new to python listening to this or how to teach people you just teach
Starting point is 00:14:31 people to start at the bottom you read the last line first so the last line in a traceback is the error message let's uh scroll to one on here which is good to know because that's not true for other programming languages the error is at at the top and it's kind of inverted. Oh, really? Yeah. I forget. But, yeah. So the last line is the exception and then also the message for the exception if it's there.
Starting point is 00:14:56 And then you read up. And the next two lines up are you've got a file name and a line number and, and then a copy of what the line is. Um, and if, and that's, that's the place where the exception actually happened. And these two double things, these two lines, the line is called, um, uh, what do you call it? They're the, uh, stack trace the stack, whatever. Yeah.
Starting point is 00:15:19 Call stack. Yeah. It's, this is the call stack. Um, and that's even more so because you get lines within functions right not just the yeah yeah and then uh um and then if you don't understand why you have an exception there you just keep going up you keep going up to and sometimes the the exception happened not in your code but in some some library call that you went called so you're not going to debug that so you have to debug
Starting point is 00:15:45 your your code so you it's good to go up enough to where it's in your code and then if you can't figure it out you just keep going up um and this this example is actually not obvious to me what was going on so i'm glad he walks through it so trey walks through how to read this and it goes up to um the fact that so this is the the example has a type error because you can't concatenate a string to an integer um and that's weird because it doesn't look like it's trying to do that but uh then he walks up to find out that the the function is actually taking the standard input um and passing it in as a number and one of the argvs, and you have to convert it to an int first.
Starting point is 00:16:29 So that's a, I'm glad you used that example because people new to command line interface coding often forget that, that the input is usually a string, even though if you pass in a five, it's still gonna be a string with a five in it. Right, it looks like a number, but it's not a number. Yeah. So you have to convert those.
Starting point is 00:16:47 And a reminder here, this is user input, even in, so in this case, it's not going to be harmful just to convert it to an int, but even command line input is input from a user. So you have to sanitize it if you need, if you're doing anything like with a database or something. So absolutely. Oh, that's, that's great. I think definitely that's the kind of thing you need to start with when you're teaching people Python, like almost before you teach them to code, like how to, if you run into an error, here's how you understand it a little bit. And here's how you Google it or go about finding some way to fix it. Yeah. And if you start, especially if
Starting point is 00:17:23 you start at the top, it's going to be a mess because if you've got a call stack like 50 functions deep, hopefully not, it's going to be a really big traceback and you don't want to try to untangle all of it. Just start at the bottom. Yeah, absolutely.
Starting point is 00:17:36 And Dean out in the live stream says, you know, when you use some Python wrapper on top of a Java microservice and you get a 500 line exception, you're like, what have I done wrong to deserve this? Yeah, that's like the advanced version of this. Yeah. Speaking of advanced, how about some intrigue?
Starting point is 00:17:52 Ooh. Nice picture. Yes. So you and listeners may have heard of this person who turned out to go a little bit bonkers on their open source code, luckily in NPM and not Python, so JavaScript space. So there's colors and JS, which are two widely used,
Starting point is 00:18:15 no padding margin NPM libraries used for JavaScript and no JS. Well, this developer, Marek Squires, first they thought it was a supply chain vulnerability and somebody hacked the account. But it turns out, no, no, no. Marek intentionally corrupted both of his libraries. So they ran an endless loop spitting out random political messages
Starting point is 00:18:35 while it would loop around and just fill the screen with garbage. So initially he thought it'd be a hack, but political and personal messages included in the code and on his related websites indicate that it may be the work of a disgruntled lashing out developer. Wacky. Wacky.
Starting point is 00:18:52 Okay. So that's not, I was not going to cover that. I saw that and I thought that that was pretty interesting. And then Mike LaFontaine points out, oh, Brian Krebs, the security guy. I just noticed that this Myrick Squires seems to be the same fellow who sabotaged two of his own popular open source libraries the next week. And he links to an article in my post,
Starting point is 00:19:15 residents of Queen home with suspected bomb making materials charged for some sort of like terrorism type of thing. So the same person who sabotaged their NPM packages then was like in the process of making bombs. And it just kind of shows you an interesting spectrum of where all this stuff lands. That's crazy, huh? Yeah, weird.
Starting point is 00:19:42 Yeah, yeah, very weird. Oh, I also forgot to point out, this is an extra, extra, extra section. So short, I got more stuff. But the first one is the guy that went and messed up all the stuff on NPM and everybody's dependencies recently has now been charged with creating bombs in Queens, New York. So yeah, there's that. Here's one that's really positive. Andy Griffiths, don't know this person, but they posted something incredibly simple that is super helpful when
Starting point is 00:20:11 you're building websites and trying to design them. You know, you can go to inspect element and you can like hover over different parts of your page and highlight and it'll show, okay, this is actually the div here that is containing this and it has a margin and so that's why it looks like that. Yeah. This guy posted, hey, struggling with layout? Turn on CSS outlines. It's a superpower. And all you have to do is write
Starting point is 00:20:35 this incredibly simple CSS. Star is the CSS selector. Outline colon one PX solid red. And what you get is your entire site now highlights all the elements on the page so you can figure out how to style them oh that's pretty cool given the amount of work isn't that amazing yeah yeah so i definitely think this is something i'm going to try to use when i'm working on uh design and stuff because it's just so so much easier than trying to like hunt around with like the
Starting point is 00:21:05 debug tools and then you know you reload the page and it changes and all that so quick tip for people there who do web stuff python 310.2 is out and there's actually a decent amount of stuff shipped in it if I do some quick scrolly scrolly I would say that's like 30, 40 changes and bug fixes and so on. Wow. So things like fix hang in run test underscore impede due to race condition or fix this thing in documentation or fixed hash lib used for security option to work correctly with the new version of open SSL. Fix memory leak in pyval.evalcodex.
Starting point is 00:21:44 That sounds like it might be used a lot of places. And used in the conjunction with the word memory leak, that might be good to fix. Anyway, I already installed this on all my servers and have it running production, and nothing seemed to catch fire. So that's good. Yeah, very good.
Starting point is 00:21:59 Yeah. So Python 3.10.2 is out. That's cool. All right. One, I think one more thing. Two more things. Related. I'm doing a YouTube series
Starting point is 00:22:10 on a bunch of little short Python lessons and I've got about 100 videos I want to make and I've made five of them and published or scheduled them to go out already. So I've got a list. Don't make this a thing. Anyway, a bunch of little tips like parsing data with PyDantic or counting the number of occurrences of items in a list
Starting point is 00:22:30 or you've got foreign loops, convert them to list comprehensions. These are all like four minute videos that just teach you something really quick in Python. So if people are interested in that, they can click the link and then subscribe to my personal channel, not the Python Bytes YouTube channel, which is awesome, but doesn't have this content, to get more of those.
Starting point is 00:22:47 So that's fun. Cool. How do you find time for all this stuff, Michael? You're like everywhere. I've been wanting to do some of these YouTube videos and just try and explore some of the ways in which people are presenting and teaching coding for like six months. And I've just decided I'm just going to take two days and just going to do it because i've been putting off for like months so there's that
Starting point is 00:23:10 speaking of time i also um am controlling our stream and doing all sorts of fun stuff with like this device called a stream deck which you may have heard of the stream deck you have one too right but just not hawaii Stream Deck is this little device here that lets you basically set up a bunch of buttons and control things, which is super fun. And it's built for streamers and whatnot. I decided to see what you could do if, let's see. I pulled up the wrong link.
Starting point is 00:23:40 I decided to see what you could do around the Stream Deck and software development. So, so far I have two profiles, one for PyCharm, where you can control all sorts of things like click a button on your little device and it'll show your PRs or switch the select modes. You can write and call it multi-columns and all sorts of stuff. And then also one for Jupyter that are like launch Jupyter and insert, insert your standard imports and add cells above and below and rerun
Starting point is 00:24:05 them or show me the command palette and stuff neat so yeah that also has a video on it as well and people can check that out but i've i've got this youtube profile not youtube uh github profile um repository where it has all the profiles for uh stream deck. So if you want to download it, play with it, customize it, those are up there as well. All right. That's it for all of my extras. You got any yourself? Yeah. So I wanted to talk about, so this is a cool article by David Amos. So David's awesome. He's one of the, one of the gang, the people at real Python, but it's,
Starting point is 00:24:43 the articles are three things you might not know about numbers and in python and uh one of the i don't know where the line is oh it's near the top it's so awesome he's got a line that says um uh there's a good chance that you've used a number in one of your programs yeah i think so this so. This is, I could get behind that statement. Yeah, so one of the things that, like strings have functions attached to them. They've got methods. And we know that.
Starting point is 00:25:15 It's kind of different than other languages, but numbers do too. And this is something actually didn't occur to me that you can do like two bytes and stuff. So there's functions that you can call on a number. There's a trick, though. You can't do like 255 dot two bytes. You have to put it in a variable name so that it doesn't think it's a decimal point.
Starting point is 00:25:40 And you also, or you can put parentheses around it. So you can do 255 with parentheses around it and then call uh to bytes or something like that so there's uh integers have two bytes so you can convert it to bytes you can use the class uh class method from bytes and you can also do like bit length and a bunch of other functions that are pretty cool around integers, which is neat. And then floats have their own methods. Floats have like a, is an integer or is integer ratio or as integer ratio. So it'll convert it to an integer ratio.
Starting point is 00:26:14 That's pretty cool. Wow. Like the, some sort of approximation and rational numbers like, yeah. So yeah, I don't have, I don't have that example pulled up, but no, but that's cool. There's some, I have no idea about this stuff. Yeah. I've got a bunch, there, yeah, I don't have that example pulled up.
Starting point is 00:26:25 No, but that's cool. I have no idea about this stuff. Yeah, I've got a bunch. There'll be some links in the show notes to the Python documentation for these. It's pretty nice. Okay, so that's the first thing that you should know about numbers is there's methods there. So look them up in the documentation. And we'll have links to the documentation. And then the second thing
Starting point is 00:26:48 you should know about numbers, second over the third, is numbers have hierarchy. So there's four abstract types in Python for numbers. There's complex, real, rational, and integral. So complex is the complex. Most of them only have one type in it. Complex, the abstract type of complex, has complex.
Starting point is 00:27:12 Real has float. Rational has fraction. But integral has both int and bool. So that's neat. Their bool and ints are related. But then we also have these decimalsimals um yeah so there's i wanted to find his stuff on decimal decimals don't fit so decimals have their they're not really part of this hierarchy at all but they're they're their own decimal class so there's not uh there's not
Starting point is 00:27:39 an abstract class but that's okay decimals are great and people should remember decimal is around if you have around if you have um if you're working with money or something like that use super precise science um so yeah these are good uh also uh because these are just normal types um numbers are extensible oh yeah a comment about floats are weird yes um those are always weird floats are weird yeah the numbers are extensible since these are classes you can you can derive from them uh but he comments which is good you have to be really careful because if you uh want to extend a class there's a whole bunch of dunder methods that you have to make sure work right so maybe you don't want to extend it but you can you
Starting point is 00:28:23 can make your own numeric types. So this is the third thing. Anyway, kind of a neat article. Trying to wonder what you might actually create those for. I mean, maybe you might. Well, maybe we'll create an integer that has a bounds and is an error if you try to make one too large or something. Yeah, I'm not sure. But there's cases.
Starting point is 00:28:42 I'm thinking on the spot here. Yeah. Yeah. Another thing that's amazing is complex numbers are natively built into Python. Yeah, and that's really great. And that's essential for a lot of scientific and measurement work and stuff is to have complex numbers around.
Starting point is 00:28:59 They're truly amazing. All right. Well, I think that's all. I mean, I already did my extras. I skipped your set here, your articles to ask you about your extras. Do you have any actual extras you want to cover? I don't have any actual extras. Have you had any dangerous encounters with like warm water? Have you maybe stubbed your toe on a rock or was there a turtle that came by or you could run into like an eel? There are eels in the reefs there that you might want to stay with. So I've only been here a couple days so far. I've been swimming a couple times right out.
Starting point is 00:29:30 You have to look down, not across, to see the beach from where I'm staying. And so I went swimming right here. It's kind of fun because it drops off right away. So there's a little beach, and then it drops off right away so there's a little beach and then it drops it drops deeper right away and that's but it's not like a big current so you can swim really with only going out a few feet which is nice and then we went to another beach that was like shallow for a long time but then it had coral and stuff and that was really fun to scuba dive or to not scuba but uh snorkel over uh and look around but if you're just wanting to walk out, that coral's like tough to walk on and it hurts.
Starting point is 00:30:09 Yeah, that stuff's super sharp. But having a lot of fun. Awesome. Good to hear. Well, I think we should round it out with one or two things here. We got some jokes. Now I saw Josh out in the audience and he sent in some jokes, which we'll make part of this soon, but I didn't have time for this episode. So we got four, oh really book covers.
Starting point is 00:30:31 I love these. Not the O'Reilly because you know, the O'Reilly books, they always have an animal and a title and whatnot. So, oh really art takes that kind of puts a funny spin on it. I'll do this first one. We got 40, we could do two each. The first one here has a platypus on the screen. It says the little subtitle is, the quote is the original developer isn't here for a reason. And the title is Losing Your Will to Live, a Code Maintenance Guide.
Starting point is 00:30:59 Yes. Written by the intern. You want to take this one? So the title is Expert Vague Understanding of Computer Science. Probably be able to explain a sorting algorithm if it ever comes up. By the practical dev? Yeah, by the practical dev. Very good.
Starting point is 00:31:22 Very good. Okay. The next one is an elephant very proud speaking out loudly yes it depends the definitive guide the answer to every programming question ever conceived it's a short book exactly all right uh bring it bring us home with this last one okay so uh works on my machine uh the definitive guide how to convince your manager uh yeah i love it very good very good yeah well brian everyone listening almost everyone is jealous i'm sure there's some people in hawaii like yeah i just
Starting point is 00:32:00 go there every day but most other people people are probably jealous where you get to record from today. So thanks for making the time. Thank you. It's always fun to be here with the Python Bytes people. Thanks 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. Get the full show notes over at PythonBytes.fm.
Starting point is 00:32:22 If you have a news item we should cover, just visit PythonBytes.fm and click Submit in the nav bar. We're always on the lookout for sharing something cool. If you want to join us for the live recording, just visit the website and click Livestream to get notified of when our next episode goes live. That's usually happening at noon Pacific on Wednesdays over at YouTube. On behalf of myself and Brian Ocken, this is Michael Kennedy.
Starting point is 00:32:46 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.