Transcript #170: Visualize this: Visualizing Python's visualization ecosystem
Return to episode page view on github00:00 Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds.
00:05 This is episode 170 recorded February 19th, 2020. I am Brian Okken.
00:11 And I'm Michael Kennedy.
00:12 And this episode is brought to you by DigitalOcean. They've got something cool we're going to share with you a little later. But first, tell me about whatever you're going to tell me about first.
00:21 I want to kick things off by building a picture for you. A picture of something awesome and yet something fairly complex. The Python visualization space. I don't know how you feel about it, but whenever I think, "Oh my gosh, I gotta go make some cool pictures and do neat things with Python," I'm like, "Map, plot, lib, bokeh, pyplot, what else should I learn? All these other things." And then if I want to do this graph, there's a lot of stuff out there. So, Prace and Daniel sent across a website, a resource for anyone who feels like and says, "Ah, there's an overwhelming sense of all the things happening." This is called pyviz at pyviz.org.
01:05 Basically, the idea with pyviz is they've categorized and mind-mapped all the things around Python data visualization, and they've grouped it into different stuff.
01:20 The way they describe it is they say, "It's an open platform for helping users decide on the best open-source Python data visualization tools for their purpose with links, overviews, comparisons, examples, and tutorials.
01:30 >> That's cool.
01:31 >> Yeah, it sounds good, right?
01:32 So they have different sections that you can go check out.
01:34 Overview of all the packages, which is like a nice visual graph relationship thing.
01:39 High-level overview of the tools, a live table comparing maturity, popularity, and support.
01:45 Also, a special focus on building dashboards that are like interactive web things that people can interact with, for scientific visualization for rendering embedded three-dimensional objects and I said some tutorials and examples also some examples talking about if you have this kind of data here's how you visualize it.
02:05 What do you think yeah I like it that the subset is still a lot of work if you know what you want to do and you still to try to figure out.
02:11 What you want to do with it but at least it's broken it down into just a handful of things that you have to figure out absolutely well.
02:19 It doesn't entirely alleviate the challenge of this.
02:24 But like for example, if you go to the overview section, you can see there's three main sections, JavaScript, Matplotlib, and OpenGL.
02:31 And that might sound like, I thought this was Python, what's up?
02:35 Like these are, I'm going to work with Python and get the outcome as a JavaScript thing on a web page or something I can get into Matplotlib or something I can get into like an OpenGL window for interaction and whatnot.
02:48 So yeah, there's a bunch of stuff here that you can work with.
02:51 But I think it's interesting to see the relationships as well.
02:54 >> Well, we had a visualization thing that we used at work that we had originally done a JavaScript side one.
03:02 And I think that we're going to switch and go back to a Matlab plant plot website, mostly because it's whether or not it's happening on the front end or the back end.
03:12 >> Yeah. >> That's a division that we have to make, made that decision.
03:16 But you know, it's only software, you can change it.
03:19 - That's right.
03:20 It's not concrete.
03:21 - Yeah, just get another intern.
03:22 (laughing)
03:24 - Indeed, indeed.
03:25 All right, well, I definitely am gonna make use of this site if I've got some visualization to do.
03:29 And yeah, there's a couple of things I really would like to up the reporting exploration game for both the core side of things, understanding what users are up to, but also for the podcasts, right?
03:41 So we can understand how our listeners are listening a little bit better.
03:45 So I'll see what I can do around that for us.
03:47 It might involve one of these.
03:48 - Yeah, that'd be cool.
03:49 I'm intrigued by the breakdown of some of the dashboard ones.
03:52 - Yeah, would you say that that project's awesome that I was thinking about?
03:55 - I think so, yeah.
03:56 It's probably gonna be an awesome project.
03:58 - What else is awesome?
03:59 - Oh, well, Xan is awesome.
04:01 I actually like a lot of these.
04:03 I have to admit it, I like the awesome sites, the collections, awesome collections of different things usually thrown up on GitHub, and this one's also on GitHub.
04:11 - They're usually more concrete, though.
04:13 They're more like awesome async servers in Python or awesome web frameworks.
04:19 >> Right. But we want to be a little reflective here.
04:22 We've got a rabbit hole of Zen with the awesome Zen of Python.
04:26 Yeah, I was trying to make a bad pun of a rabbit hole lot of Zen.
04:30 So anyway, so the Zen of Python is a thing.
04:33 So you import this and you see it.
04:35 We've covered, I think, at least one article talking about that.
04:39 But somebody put together a collection of articles and videos and talks and some other things about the Zen of Python, because people have thought about it and written about it. And I like it.
04:51 A couple of things I wanted to point out, Al Swigert has a nice one that's Zen of Python explained.
04:57 It's a really quick reference if you're new and are curious about the Zen of Python and you read it and you don't quite get what the heck that is.
05:06 I think that he did a good start. I'll probably get his name wrong but Moshe Zadka has a meditations on the Zen of Python which is probably a longer couple paragraphs per item a little bit longer but I like his take on it as well. And one of the things I just learned recently is that there's a reference to the increment and decrement operator within the Zen of Python or not the increment and decrement but post decrement and pre decrement from C is like something that trips up see people. There's actually a joke embedded in the Zen of Python about that.
05:39 How nice. Yeah, if it has to be an interview question about what incrementing a variable does, it might be too complicated. Yeah. What happens if you test if, you know, plus plus X of this thing or whatever, right? Like that's not good. So, although I do wish Python had a X plus plus, you know, sometimes I I could go.
06:04 Yeah, just an easy increment or decrement operator would be good, but we don't need two.
06:09 No, that's right.
06:10 I got to admit, I read in, now we're getting down the C world, in a for loop, it's recommended that you do a pre-increment because there's a little bit of savings on complex objects to do pre-increment, but give me a break.
06:23 It's I++ at the end of a for loop.
06:25 I always do that.
06:26 Yeah, it is.
06:27 Definitely is.
06:28 I'm glad Python doesn't even have a for loop.
06:31 - We have four loops, just not the same.
06:34 - Yeah, not for i equals zero.
06:37 Yep, pretty sweet.
06:39 Yeah, no, this is a cool find here.
06:41 I like this.
06:42 The Xenopython is something that's frequently spoken about, but it's very terse, and there's not a lot of explanation about it.
06:51 So, you know, it's like one of those things, I remember being new, going, "Oh, the Xenopython, how cool." What does it mean?
06:57 You know what I mean?
06:58 Like, could I get an example for each line, please?
07:01 It would be nice, you know?
07:02 - Yeah.
07:03 I'm also including a link.
07:04 I think it's important to read the Zen of Python as a joke and here's why.
07:08 And it talks about a few aspects of it as to basically don't take it too seriously.
07:13 And Python is a language that you're really not supposed to take too seriously.
07:18 Yes, it's serious.
07:18 We can get a lot of work done, but don't get freaked out on stuff.
07:22 - It's named after Monty Python after all.
07:24 Come on.
07:25 - Yeah, exactly.
07:26 Lighten up, people.
07:27 You know what else is awesome?
07:30 - Kubernetes. - Kubernetes and DigitalOcean.
07:32 - And DigitalOcean, yes. - Yep.
07:35 So there is an enormous amount of material on the web about Kubernetes available both online and in print.
07:42 So the DigitalOcean community realized that it's a little, you know, you might have trouble figuring it all out, even though there's a lot of information.
07:49 So they developed a Kubernetes for full-stack developers course to provide a thorough, well-maintained, and approachable reference set of tutorials for anyone who would like to start learning about Kubernetes.
08:02 And if that wasn't cool enough, they also realized that some people don't want to take courses, they want to read about it.
08:08 So they compiled the course curriculum into an ebook to make it available for more people.
08:14 So you can see that if you go to pythonbytes.fm/do-kube and you can download the book and visit the course.
08:24 And as always, you can visit pythonbytes.fm/digitalocean to get a hundred dollar credit for new users to build something awesome.
08:31 - I think we should just keep rolling things that are awesome.
08:33 - Yeah, yeah.
08:34 - So Matt Harrison inadvertently recommended this next item to us.
08:38 - Really?
08:39 - I mean like very indirectly, but he did.
08:42 So he posted on Twitter how he is absolutely loving Juptext, J-U-P-T-E-X, Juptext.
08:51 And I didn't even see it on Twitter.
08:54 No, Twitter emailed me a summary of popular tweets which said Matt Harrison liked this.
08:59 So, thank you, Matt.
09:01 - Interesting, okay.
09:03 - Okay, so, Jupyter Notebooks are awesome.
09:05 They're super cool for exploring data, and they're really powerful for people who are doing more exploration rather than writing software, right?
09:12 You can run the first bits, they might take a while, but then you can slice and dice stuff to visualize it and explore it as much as you want.
09:20 However, they're not all the way awesome because if I put one of those things into, say, GitHub, and you were to check it out, and I were to be messing with running it, and that was getting live data, so non-deterministic results, and you did the same, and then we both put it back, it keeps those results and stuff, and it's not very friendly in Git.
09:40 Another thing that would be nice would be sometimes you want to explore stuff in Jupyter, but then productize it, turn it into a script of its natural language.
09:50 It supports a bunch of languages now.
09:52 It would be nice to be able to go, and here's the one we run where the comment, the text becomes comments or whatever.
09:58 So basically that's what Jupyter Text does.
10:01 It will take Jupyter Notebooks and turn them into Markdown documents or Python scripts.
10:07 And then you put those in source control or whatever, right, you can work with those.
10:11 So you could then export it out and work with it in like PyCharm or something like that.
10:16 You also get meaningful diffs of what changed when you look at the differences of those.
10:21 So this thing's really cool.
10:23 You can export the Jupyter notebooks in all these different script languages.
10:27 Currently it supports, ready for this, Julia, Python, R, Bash, Scheme, Closure, MATLAB, Octave, which is the open source MATLAB, C++, Q, KDB+, IDL, TypeScript, JavaScript, Scala, Rust, PowerShell, C#, F#, and my favorite, behind Python, Robot Framework.
10:46 - Nice.
10:48 - I just wanna work in the Robot Framework.
10:50 What languages do you know?
10:51 I know robot, oh really, cool.
10:53 Yeah, anyway, people who are working in Jupyter Notebooks, this looks super helpful.
10:57 And Matt, thanks for having a popular tweet that got emailed to me.
11:00 - Yeah, so can you do Scheme in Jupyter?
11:03 You must be able to.
11:04 - You must be able to.
11:06 I did Scheme as my CS 101 course.
11:09 - Yeah, me too. - A couple of CS courses.
11:12 And I'm not a fan of all the close parentheses, to be honest.
11:16 I'm like, what a crazy language this is.
11:18 But yeah, apparently you can.
11:20 - Nice.
11:20 I'd rather do that over like, rather than through like an X term or whatever, but yeah, apparently I can.
11:27 - Nice.
11:27 - Pretty cool, anyway, so if you work on Jupyter notebooks and you want to be able to export them in these cool ways and do other stuff as well, check that out.
11:33 - Well, one of the things I want to talk about is stuff that we iterate over.
11:37 (laughing)
11:38 - Okay.
11:39 - This is a failed attempt as a transition.
11:41 So a great article called "A Tour of Python IterTools" and IterTools is one of those things that you kind of, It's so cool, but you kind of blast past it when you learn it and when you're learning Python, it's a little bit more advanced than you want, but this is cool stuff.
12:00 This article is by Martin Hines, and he's just kind of briefly describes what a handful of the different tools within IterTools and a library called More IterTools does.
12:11 And all of these are around iterables and iterating over things.
12:15 And you wouldn't think right off the bat that you could do so much, but I'm going to highlight a few of these, not all of them.
12:22 For iter tools, he talks about compress, accumulate, cycle, and T. I had not been familiar with cycle and T, but they're pretty cool.
12:31 So iterables, some of them, they're empty once you go over it once.
12:37 T allows you to make multiple references to one interval.
12:41 That's pretty neat. Cycle is so cool.
12:44 It allows you to like so you if you iterate over like say a set or a list of items you can just iterate through it once but cycle allows you to just keep going over and over and over again it's like a never ending repeating herbal and the little example in the document or in this article.
13:02 This shows you how to easily iterate through characters to make a never ending spinner on a command line.
13:09 So it's kind of fun.
13:10 >> Oh, yeah. That's cool. Yeah. You just put the different ones and a list and then you just cycle it.
13:16 >> Yeah. The note is that for things like games and stuff like that, if you iterate through different players, you might have to do that.
13:23 But there's a lot of cases where I want to maybe zip through a couple of lists, but it's really just one of the lists is a cycle.
13:32 You can do that. It's cool.
13:34 More Iter tools has a whole bunch of things like he's highlighting different things that are different ways to chop up your iterations.
13:41 Like there's a divide that just divides it into different sub-iterables.
13:45 >> Like paging almost, right?
13:47 Like process them 25 at a time or something.
13:49 >> Yeah. So there's a whole bunch of different ones.
13:51 In partition is like if you have an expression to that can be mapped to true or false on any of your elements, it'll split the iterable into two iterables based on that predicate, which is pretty cool.
14:04 Side effect that I never knew about.
14:06 So if you want to add another function that gets called with each element during iteration, wow, this is cool.
14:14 I think that's neat. I don't know what to use it for, but I'm going to come up with a use.
14:17 There's bucketizing to be able to do a bunch of buckets, MapReduce, just a whole bunch of neat things.
14:24 I think this is a good, if you think you've sunk your teeth into Python and you want to take it to the next level, this is a good article to learn IterTools.
14:33 - This is super interesting and IterTools is definitely one of those things where you feel like, I'm always surprised that there's extra stuff.
14:43 Collections as well, you know, it's just like, wow, there's also that thing?
14:46 Why did I not ever use that thing, you know?
14:48 - There's some things about programming that I know some people say they'll, when they come to a problem and they need a solution for it, then they'll look up, that's how they learn new things.
14:58 But you're right, with collections and IterTools, you don't know to look it up because you don't know there's a solution there.
15:04 So these are good things to skim through so that you just have seen them once so that later when you run into a problem, you're like, oh, there's a thing in IterTools that I can use for this.
15:14 - Yeah, I know that that's true even before I look, but I don't know what it is.
15:19 I just know if I go dive around there, it's probably something I can use at some point.
15:24 But yeah, that's a cool one, and it's nice to see it put together and highlighted like that.
15:27 I just really wanna talk about this next one, okay?
15:29 - Okay. - All right.
15:30 So this next one is called JustPy, And the idea is I want to create a web application that allows me to do single page app, cool interactive front end framework type stuff that I would do with something like say Vue.js, but I don't want to write JavaScript.
15:48 So it's pretty interesting.
15:50 It's a web framework that lives on a server.
15:54 So you put it on your standard, it actually supports async stuff.
16:00 So you'd put it on like a async server like Starlette or something like that or Uviacorn.
16:06 And then you express how the pages are supposed to look in Python and it creates the JavaScript that's going to make that happen.
16:17 And then I guess web sockets or some form of back and forth back to the server to run your Python code as people interact with it.
16:25 Using effectively like Ajax type of interaction.
16:30 So yeah, it lets you create these front end and sort of full stack web apps with no front end programming.
16:37 And the way it works is like I said, it has no front end back end distinction.
16:41 All the programming is done on the back end, allowing a simpler, more productive way and more Pythonic way to create a web app.
16:48 But it intercepts the relevant events on the front end and sends them back to the back end to be processed either talking to a database or just like having the Python logic there.
16:56 Neat.
16:57 Yeah, it's a really, really different take.
16:59 And it's been getting a lot of traction.
17:02 My personal thought on it, the verdict's a little bit out.
17:05 I'm not sure how I feel about it, but I definitely think it's interesting and people should check it out to see what they think about it.
17:10 It's really based on like classes and components.
17:13 So you can create these components, which then can be put onto the page.
17:17 So like here's a login component or like a component that displays a list of podcast episodes or whatever, you put those in different places.
17:26 and you can create these custom components.
17:28 And that can either be just straight Python where you create kind of the DOM in Python.
17:33 That's part of the, if it was more HTML based, I'd be happier, but it does also support HTML components that then work with it.
17:42 And even has like interactive charts and grids.
17:44 So that's pretty cool.
17:45 - Yeah, I see what you're saying.
17:47 It's kind of neat, but also if you don't want to learn HTML and JavaScript, learn this instead.
17:53 - Yes, exactly.
17:54 It's kind of like that.
17:55 too much avoiding HTML. I think it's awesome that the logic of it is in Python and this no distinction stuff is really cool about the front and back end.
18:04 I just wish I would design the site in HTML and CSS and then plug in the liveness through this, not as much of the content definition. That said, Quasar, I suspect many listeners are not familiar with the Quasar library, but the Quasar library is a cool library that's got all sorts of stuff built on top of Vue.js.
18:26 So their little slogan is, "Build high-performance Vue.js user interfaces "in record time." So you can see they've got like, think of kind of like what Bootstrap did for web design is kind of doing that for Vue.js, right?
18:40 You get some like cool stuff going on there.
18:42 And the reason I randomly diverted sideways and started talking about Vue.js and Quasar is because JustPy is built on libraries that you would know, so Starlette and uvicorn for the server side, but vue.js for the front end, that means the Quasar library automatically plugs in its components and functionalities into JustPy.
19:03 So that gives it actually a huge boost, like oh, there's already this really cool library that just plugs into it.
19:08 - Oh, nice, okay.
19:10 - That gives it a boost.
19:11 But yeah, I wish you could define more stuff in HTML and then bring it.
19:15 Now you can say like, here's an HTML page, I'm going to import it and work with it.
19:19 But it doesn't seem to be my first reading that that's the natural way to go.
19:25 >> Yeah. Okay.
19:26 >> But nonetheless, I love that this exists.
19:28 It looks really interesting and people should check it out.
19:31 >> Nice.
19:31 >> Nice. I wonder what the maintenance story is around it though.
19:34 >> Yeah, I'm curious.
19:35 So we want to talk about maintenance.
19:38 I'm not sure why this article is titled Modularity for Maintenance.
19:42 So Modularity for Maintenance, It's a bunch of automation tools that you can use to help maintain your open source projects.
19:50 And it's really terse with links, but it's got continuous integration and talks and linting tools and type checking and dependencies and security scanning and using code coverage and formatting help and releasing and all these automation tools that help you, which is actually, it's really cool to have all these listed down in one place.
20:11 And I like that.
20:12 if you've done all this for a bunch of projects, and then you start a new project, or maybe you split one project into two projects, just the overhead of setting all that stuff up again for another project is in itself a lot of work.
20:27 And so he's hoping for some sort of cookie cutter-like thing or something for somebody to make so that he can save some time.
20:35 But all of us also, I never really thought about all of these time-saving things you actually end up of having to set up again for each project.
20:43 - Are they actually saving you time?
20:45 - Yeah, right.
20:46 - It depends how long you use the project.
20:48 Probably they are, but yeah.
20:49 - Probably, but I guess it is interesting to think about the extra overhead and you have to have some of these require like login credentials and stuff that you have to set up.
21:01 But actually I really like all this list and I kind of want to go take one of my projects and make sure, see if I can make sure I'm hitting all of these things.
21:08 - Yeah, it's super cool.
21:09 And I just last night used cookie cutter, rent the new Python package template from cookie cutter to create a Python package that I'm working on.
21:21 So yeah, this is super real.
21:23 I'm like, oh, I bet there's a cookie cutter thing to set up like the setup file, just write and integrate talks and whatnot.
21:29 And yeah, let's hit it with that.
21:30 - Where was this new cookie cutter thing?
21:32 - It's not super new.
21:33 If you go to cookie cutter, there's like a place called, a part called pantry full of cookies or something like that.
21:41 Let me go, I'll pull up really quick.
21:43 Under the documentation on cookiecutter.readthedocs, there's a pantry full of cookie cutters and then the first four are for making packages.
21:52 So there's Audrey's ultimate Python package project template creator thing.
21:59 There's a minimal package for pip installable projects and a couple of others.
22:03 The one I used was the second one, I believe.
22:07 No, third one.
22:08 I don't know, I can't remember anymore.
22:10 And it was on a different computer, so I can't get to the history of it.
22:13 - Okay, that's cool. - But yeah, anyway, these are really cool because basically it sets it up, and I used the one that was the minimal, PyPackage minimal, that it already mathematically sets it up to work with pytest, and it has the setup PY all generated based on what you tell it, and stuff like that.
22:27 It's pretty cool.
22:28 - Okay, well, if it's not using flit, I don't know if it's really minimal, but.
22:33 (laughing)
22:34 - But the thing is, it doesn't have all these things that Glyph's talking about, right?
22:39 It does have Travis CI integration in there, but there's a lot of things that it could be added, and it's pretty neat.
22:46 Somebody could fork that and then make it.
22:48 - Yeah, I definitely think so.
22:49 So yeah, hopefully.
22:51 - Yeah, nice.
22:52 All right, well, I guess that's it, huh?
22:53 What else we got?
22:54 What do you wanna let people know about?
22:55 - Here's a quick one, not really big enough to warrant a whole topic, but I noticed that Sentry is helping to fund some open source projects.
23:04 They got some money from somebody else.
23:06 They decided to match it and pass it along.
23:10 And they're gonna help fund Black, PyPI, pytest, StructLog, and a Rust tool called Gimli.
23:18 - Cool. - And that's pretty neat.
23:19 I like the, actually, I haven't played with StructLog too much.
23:23 I've played with it a little bit, but all the others I use all the time.
23:26 - Oh yeah, very nice.
23:27 Yeah, Sentry, a nice open source based company, funding open source, pretty nice.
23:33 The circle of life.
23:34 Except for Sentry's not eating any of these, but other than that.
23:37 (laughing)
23:40 - Nice.
23:41 - Thanks.
23:42 All right, a couple quick announcements on my end.
23:46 Just launched a new course, Python for Absolute Beginners.
23:48 So this is like, hey, I didn't take CS at college, what the heck is all this stuff about when people talk about memory allocation and variables and data structures, but actually really getting started with Python.
23:59 So that's a super fun one.
24:00 People can check that out, build a lot of games, but learn a lot of Python.
24:04 And then also related on TalkByThon training, started streaming a couple of our latest courses where possible, including this one I just announced, is high DPI, so almost 4K streams, and it's like night and day.
24:19 It's so awesome to sit there and look at the screen and go, that is like as if I'm looking at a real monitor, just back in time.
24:27 So anyway, I'm trying that out.
24:28 Hopefully, so far it's been working well for people, but if for some reason people can send me a note.
24:34 Here's an interesting one that comes from Anthony Sotili.
24:37 Amazon Web Services has decided to no longer publish AWS CLI, their package, AWS CLI, to PyPI, pulling a 700 million download package off of PyPI.
24:50 Think of all the bandwidth they're saving.
24:52 - That's weird.
24:53 - So this is not their Python library, potentially.
24:58 This is the CLI tool that people who don't even do Python would use.
25:04 It's just implemented in there.
25:05 So it's not a huge deal, it's not like a giant, oh my gosh, what's happening to the world sort of thing, but it's also strange.
25:12 So what's more strange is I'm linking to Anthony Sotile's Twitter thread that talks about this, but then that links over to GitHub where there's more conversation.
25:21 On one hand, it makes sense, right?
25:24 Why use pip to distribute a library that is not specifically for Python developers.
25:31 But the other bit is, well, the replacement's an unversioned zip file of script.
25:35 So, hmm, I don't know which is better.
25:39 It's a little bit funky.
25:41 And then finally, people might have noticed some weirdness with the podcast.
25:45 I don't know what has gone on, but something happened.
25:48 I think it was at Apple.
25:50 On Talk Python, it all of a sudden started showing four episodes, some from three or four years ago, as the latest.
25:58 And you might say, well, maybe something changed in the database and the dates got wrong or the number, like we changed nothing.
26:04 Didn't change the RSS feed generator.
26:07 We didn't change the data.
26:09 It just all of a sudden started going crazy.
26:11 And my theory is they've put some kind of limit on the size 'cause we were shipping like 2.5 megs of XML for each request, especially for Python bytes 'cause the show notes are large.
26:24 And I think it just went like, no.
26:27 But it's response to no was just to do something really weird.
26:30 So on Python Bytes, we now are showing just the last half year, because the alternative was to have things massively broken in the RSS, in the podcast players.
26:42 So if you want the older ones, they're still available on the website.
26:45 We're not doing anything like that, but this was the fix that I had to put in to get things to work again on the teams.
26:52 I don't know what happened.
26:53 - I think it's a fair trade-off.
26:54 - Yeah, I do too, and also it means stuff to refresh us faster for people.
26:59 They're not pulling 2.5 megs all day long with their podcast players.
27:03 I don't mind on the web server, but for them, they might mind.
27:05 - Yeah, they don't pull at all unless they download every episode or something, right?
27:09 - Well, it's constantly pulling that 2.5 megs over and over and over, right?
27:14 If you pull up the tail of the web server, it's just going choom, choom, choom against that over and over and over.
27:19 Then it pulls the actual episodes it finds that are different, so.
27:24 - Oh right, okay, got it.
27:25 - But it's hitting the full on RSS.
27:27 So now the RSS speed is like 250K, which is still pretty big, but it's not 2.5 megs.
27:32 - Oh yeah, sounds smaller.
27:33 - Are you a fan of physics, Einstein, relatively?
27:38 - I like gravity, it's good.
27:39 - Yeah, yeah, and you're also a fan of software quality, as most software people should be, I suspect.
27:46 But did you know that E equals MC squared is--
27:49 - I have heard that on T-shirts before.
27:52 - It's a statement about programming, really.
27:55 I didn't realize Einstein was into this, but it's about testing and code quality and bug rates and whatnot.
28:01 - How?
28:01 - Because E equals MC squared is errors equals more code squared.
28:07 So as you add code, the errors increase at the square of the amount of code, basically.
28:13 And that seems not totally untrue.
28:15 - Yeah, that's funny, but yeah, you're right.
28:16 It's sort of kind of true, yeah.
28:19 - I'm not sure if it's the square or it's like 1.5 or maybe it's like--
28:23 - It's definitely nonlinear though.
28:26 - You know, some polynomial, but it's nonlinear and it grows, yeah, for sure.
28:30 For sure, anyway, E equals MC squared.
28:32 That's the joke for the week.
28:33 First law of software quality, E equals MC squared.
28:36 - Nice, I like it.
28:37 - Awesome.
28:38 All right, yeah, thanks, bye.
28:40 - Bye.
28:40 Thank you for listening to Python Bytes.
28:42 Follow the show on Twitter @pythonbytes.
28:45 That's Python Bytes as in B-Y-T-E-S.
28:48 and get the full show notes at pythonbytes.fm.
28:51 If you have a news item you want featured, just visit pythonbytes.fm and send it our way.
28:56 We're always on the lookout for sharing something cool.
28:58 This is Brian Okken, and on behalf of myself and Michael Kennedy, thank you for listening and sharing this podcast with your friends and colleagues.