WEBVTT

00:00:00.001 --> 00:00:05.140
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:00:05.140 --> 00:00:11.640
This is episode 200, I can't believe it. Recorded September 16th, 2020. I'm Brian Okken.

00:00:11.640 --> 00:00:12.480
And I'm Michael Kennedy.

00:00:12.480 --> 00:00:13.660
200, can you believe it?

00:00:13.660 --> 00:00:20.340
I actually cannot believe it. That is a ton of podcasting and everyone's been super supportive

00:00:20.340 --> 00:00:25.120
and it's been great to do 200 episodes with you. I don't think we've actually done 200 episodes

00:00:25.120 --> 00:00:28.960
because there's a few times you couldn't make it or I couldn't make it or we did some live thing.

00:00:28.960 --> 00:00:32.680
So probably like 195 together, but that's still a ton of podcasting together.

00:00:32.680 --> 00:00:36.220
Yeah, yeah, it is. It's pretty exciting. I've had a blast.

00:00:36.220 --> 00:00:38.800
Absolutely. I hope people are finding this helpful.

00:00:38.800 --> 00:00:45.000
Oh, I think they will find it helpful. We're really good at transitions.

00:00:45.000 --> 00:00:46.140
Because we've been doing it so long.

00:00:46.140 --> 00:00:53.720
Yeah. To transition into the next topic. Actually, the first. Batchelder wrote a cool article. This

00:00:53.720 --> 00:01:01.820
is great on how to be helpful online. And this is the advice that he's giving is targeted towards people

00:01:01.820 --> 00:01:07.520
that are trying to help other people online. So if you're answering a question on Stack Overflow or

00:01:07.520 --> 00:01:12.940
just even an email question somebody sends you or on Twitter or whatever, these are good advice.

00:01:13.440 --> 00:01:43.420
Actually, it's a pretty long article. There's a lot of advice there. So I want to highlight a handful of them. One of them is answer the question first. There may be other problems with their code that they're not asking about. And you want to get to the point of just helping them with their answer. All the rest of the problems on their code. Actually, I think that's really good. I've seen that people violate that all the time. The second point that he brings up is no third rails. And I don't even know where that term came from. I don't. That doesn't make sense.

00:01:43.420 --> 00:01:49.380
any sense to me. But going off the rails, I've heard of that. He gives an example of, it should

00:01:49.380 --> 00:01:55.900
be okay for someone to ask for help with a program using sockets, for example, and not have to defend

00:01:55.900 --> 00:02:01.860
their use of sockets, especially if the specific question has nothing to do with sockets. And he

00:02:01.860 --> 00:02:06.580
says things like, it's not sockets, it might be pickle or threads or globals or a singleton or

00:02:06.580 --> 00:02:13.320
something. You might have really strong opinions about some design pattern or some code

00:02:13.320 --> 00:02:17.600
that they're using or different libraries. That's not really what they're asking about.

00:02:17.600 --> 00:02:24.160
Don't attack them for their design choices. Just maybe answer the question instead. No dogpiling.

00:02:24.160 --> 00:02:29.080
I think that's self-explanatory. Once somebody's already answered a question, you don't have to

00:02:29.080 --> 00:02:33.760
answer it slightly different. If you're very different and you think you're adding to the

00:02:33.760 --> 00:02:40.200
conversation, of course, speak up. Meet their level. This is a difficult one. Try to determine

00:02:40.200 --> 00:02:45.820
what they know and give them a reasonable next step, not the ultimate solution. A suboptimal

00:02:45.820 --> 00:02:49.720
solution they understand is better than a gold standard they can't make use of.

00:02:49.720 --> 00:02:55.180
That makes a lot of sense because, you know, I think also leads to one of the other ones is

00:02:55.180 --> 00:03:03.660
your gold standard is encased in your context and your use case and so on. It's like the,

00:03:03.980 --> 00:03:08.740
you're not Facebook, you're not Google, you're not LinkedIn, probably. You might not need their

00:03:08.740 --> 00:03:13.980
gold-plated solution that's perfect for that situation. Yeah. And also odds are if you're

00:03:13.980 --> 00:03:19.960
answering questions, you're a more advanced developer than the person asking, at least in that field. So

00:03:19.960 --> 00:03:28.340
be gentle. The last one I want to highlight is use more words. IRC and Twitter and other online

00:03:28.340 --> 00:03:33.960
mediums encourage short responses, but short responses are the exactly the kind of thing

00:03:33.960 --> 00:03:40.340
that can be easily to easily misinterpreted. So use more words, especially encouraging optimistic

00:03:40.340 --> 00:03:45.960
words. I think this, and you know, also just, there's a lot of stuff people leave out, but they

00:03:45.960 --> 00:03:52.340
would say in person, they would say, Oh, it's cool that you're trying this problem. Let's look at it this

00:03:52.340 --> 00:03:58.440
other way and let me know if you have any other questions, but they don't put that stuff in text.

00:03:58.440 --> 00:04:04.480
And so I think it is important to use more words and, and, be more encouraging online. And there's a

00:04:04.480 --> 00:04:08.760
whole bunch of other stuff like humility and understanding your motivations and their motivations

00:04:08.760 --> 00:04:15.280
and trying to, you know, build a community. So great advice from Ned. I encourage the next time that you read

00:04:15.280 --> 00:04:21.020
a question and your mouth drops open and your eyes stare in shock, maybe read this article before answering.

00:04:21.020 --> 00:04:24.680
Yeah. It's a nice article and a good advice. Thanks, Ned.

00:04:24.680 --> 00:04:28.260
I don't know how to transition to magic, man.

00:04:28.260 --> 00:04:31.680
Magic is awesome. You know what else is awesome? Black is pretty awesome, right?

00:04:31.680 --> 00:04:32.780
Yeah, definitely.

00:04:32.780 --> 00:04:41.240
You know what is not awesome? Crappy code written in a Jupyter notebook that has no like proper editor

00:04:41.240 --> 00:04:46.880
support. Like I don't need black that much because I use PyCharm and I can hit command alt L and it

00:04:46.880 --> 00:04:53.700
formats it basically like Blackwood or in VS Code, I hit command shift P and type format document and it

00:04:53.700 --> 00:04:59.680
formats it basically like Blackwood, but in notebooks, it's just stuck there and it's like permanent

00:04:59.680 --> 00:05:05.380
icky form. And it's like, well, how I want to make this nicer, but I don't want to take the effort of

00:05:05.380 --> 00:05:11.220
like developing it nicely. I want the tool to just fix it for me. Right. And black is really great for

00:05:11.220 --> 00:05:19.140
that black super popular, but Jupyter doesn't have black, but magic can add black to your Jupyter notebook.

00:05:19.140 --> 00:05:26.000
So there's a cool package called black cell magic. And so with black cell magic, you can load this.

00:05:26.160 --> 00:05:31.620
It's an extension for Jupyter notebooks. You just say percent load extension, black cell magic once.

00:05:31.620 --> 00:05:38.300
And then on any cell that you want to reformat, you just say percent percent black and rerun the cell

00:05:38.300 --> 00:05:39.720
and then it formats it.

00:05:39.720 --> 00:05:40.780
Nice.

00:05:40.780 --> 00:05:46.180
Nice. Yeah. And so actually you type that command at the top of the cell, you rerun it, and then it

00:05:46.180 --> 00:05:52.180
takes that away. So it doesn't stay there basically. Yeah. So anyway, you run it once and you can even

00:05:52.180 --> 00:05:57.820
give like little command line arguments to the formatter when you put that special magic command,

00:05:57.820 --> 00:06:03.260
the percent percent, I think those are called magic commands in Jupyter. So percent percent black

00:06:03.260 --> 00:06:10.260
dash L 79 for like changing the line with the 79 characters instead of 80 by default, or there's,

00:06:10.260 --> 00:06:12.120
you can pass stuff off to black that way.

00:06:12.120 --> 00:06:13.720
This is cool. I like it.

00:06:13.720 --> 00:06:17.960
Yeah. Yeah. And if you want to know if you like it and it's for you, you go to the website,

00:06:17.960 --> 00:06:21.780
go to the link I provided and it has a cool animated GIF and you can see right away.

00:06:21.940 --> 00:06:24.720
Oh, that's cool. I want that. Or no, that's, that's weird. I don't want that.

00:06:24.720 --> 00:06:27.640
Yeah. I was watching that while you were talking.

00:06:27.640 --> 00:06:33.060
Yeah. It's cool. Right. So it just, it's always a problem. Like I need to format my Jupyter notebook.

00:06:33.060 --> 00:06:40.180
Why, why is this not built in? Well, now it's kind of sort of plug in a bowl, not part of the story,

00:06:40.180 --> 00:06:42.400
but can we go back to the whole command alt L thing?

00:06:42.400 --> 00:06:42.720
Yeah.

00:06:42.720 --> 00:06:45.780
That's in PyCharm. It reformats your code or something.

00:06:45.780 --> 00:06:46.660
It does. Yeah.

00:06:46.660 --> 00:06:47.960
Okay. I'll just check that out.

00:06:47.960 --> 00:06:51.800
It's pretty sweet. That only works on Mac and it depends on which bindings, you know,

00:06:51.800 --> 00:06:55.620
there's like multiple keyboard bindings. So maybe in the Vim one, there's like a different one.

00:06:55.620 --> 00:07:01.260
But if you go and you go find the menu command for like reformat document, it'll show you what the hockey is.

00:07:01.260 --> 00:07:06.220
And you can do better than that. You can actually right click on the project and say,

00:07:06.220 --> 00:07:12.340
reformat the project. And it'll like traverse down into all the files and it'll reformat like everything.

00:07:13.240 --> 00:07:19.000
So that's okay. But I don't know of a hockey for that, but you can like right click and say reformat this tree of stuff.

00:07:19.000 --> 00:07:21.360
Yeah. But if I'm doing a tree of stuff, I'll probably use black.

00:07:21.360 --> 00:07:22.880
Yeah, exactly. Yeah.

00:07:22.880 --> 00:07:29.640
I never use that, but generally command alt L or control alt L probably on windows or Linux.

00:07:29.640 --> 00:07:42.900
We'll do it. But black cell magic will add it to Jupyter. Now what's super annoying is you got to type that command every time on a cell and it does it one cell at a time.

00:07:42.900 --> 00:07:46.120
So if you've got a hundred cells, you got a lot of percent percent black you're typing.

00:07:46.540 --> 00:07:57.820
There is a guy named Tobin Jones who wrote a npm package that will use this over top of it and reformat all of them.

00:07:57.820 --> 00:08:01.480
And I linked to the repo, but then when I go to it, it looks like it's archived.

00:08:01.480 --> 00:08:04.860
So I have no idea whether it even works still or anything. I haven't tried that one.

00:08:04.860 --> 00:08:13.920
So people can check that out, but it would be nice if this was like leveled up to apply at least to a notebook, even if you run it on demand.

00:08:13.920 --> 00:08:17.380
Yeah, definitely. It would be cool to be able to blackify a notebook.

00:08:17.380 --> 00:08:21.920
Yeah. But nonetheless, this is better than what it was before. So it's pretty good.

00:08:21.920 --> 00:08:23.100
Do you know what else is really good?

00:08:23.100 --> 00:08:23.520
What's that?

00:08:23.520 --> 00:08:27.660
Learning awesome Python from Talk Python training.

00:08:27.660 --> 00:08:32.060
That is pretty awesome. Yeah. So this episode is brought to you by us again.

00:08:32.060 --> 00:08:36.980
And if you're in the market to learn Python, we've got a ton of courses.

00:08:36.980 --> 00:08:42.140
We're coming up on 200 hours of highly edited courses. So that's a ton of content.

00:08:42.580 --> 00:08:47.680
And we have a special enterprise plan. So if you're looking for team training and team events that are online, digital,

00:08:47.680 --> 00:08:52.060
you know, just shoot me a message and I'll get you info about that.

00:08:52.060 --> 00:08:53.760
And pytest.

00:08:53.760 --> 00:09:01.100
Yeah, definitely. If you are considering pytest or considering testing your code, please do test that.

00:09:01.740 --> 00:09:06.160
And I would like to actually highlight, I brought up, somebody made a nice comment today.

00:09:06.160 --> 00:09:07.580
I wanted to bring it up.

00:09:07.580 --> 00:09:15.600
Ken Ewens Clark, this came out a couple of days ago, says he picked up my book, Python Testing with pytest and started reading it.

00:09:15.600 --> 00:09:20.800
He was excited. And just one hour later, he posted another comment and said,

00:09:21.180 --> 00:09:25.240
I've just finished the first chapter and I can see I've barely scratched the surface.

00:09:25.240 --> 00:09:28.780
So I'm already learning something new in one chapter.

00:09:28.780 --> 00:09:29.340
So that's cool.

00:09:29.340 --> 00:09:33.280
Yeah, that's really cool. Maybe help people test smarter, not harder.

00:09:34.560 --> 00:09:36.940
Yeah, well, actually, you know, that is the goal of the book.

00:09:36.940 --> 00:09:43.860
But I also wanted to highlight an article by Luke Plant called Test Smarter, Not Harder.

00:09:43.860 --> 00:09:46.540
And this is not like a huge article.

00:09:46.540 --> 00:09:48.720
It's some nice opinion.

00:09:48.720 --> 00:09:50.900
I like opinionated testing articles.

00:09:50.900 --> 00:09:52.320
Good opinions there.

00:09:52.320 --> 00:09:56.600
There's a lot of great advice, but I wanted to pull out a couple of his suggestions

00:09:56.600 --> 00:10:00.040
because I don't think that they're talked about much.

00:10:00.040 --> 00:10:09.820
So the first suggestion that Luke has, or the first one I'm highlighting, is write your test code with the functions or methods or classes that you wish existed,

00:10:09.820 --> 00:10:11.380
not the ones you've been given.

00:10:11.380 --> 00:10:18.120
So if an API you want to use doesn't exist yet, you just use it anyway, but then you have to make it exist.

00:10:18.120 --> 00:10:21.040
So this is actually huge advice, I think.

00:10:21.040 --> 00:10:27.960
And people don't really, I think they think about it while they're coding, that you try to write the code you want, the API you want,

00:10:27.960 --> 00:10:31.160
and then make it if it isn't there.

00:10:31.160 --> 00:10:33.660
But forget to do it while testing.

00:10:33.660 --> 00:10:41.260
And while testing, it's even more beneficial, I think, because you've got to be able to read your test code really fast and understand it quickly.

00:10:41.520 --> 00:10:49.640
The other thing I want to highlight with that is if you are responsible for the API or the API that you're testing against is something you control,

00:10:49.640 --> 00:10:54.120
then pay attention to those tendencies to say, I really wish I had an easier API,

00:10:54.120 --> 00:11:00.480
because that might tell you that maybe that new API should exist and maybe you should add it to your interface.

00:11:00.800 --> 00:11:05.940
Yeah, I think this is one of the really big values of testing is that it lets you step back from the code you're writing

00:11:05.940 --> 00:11:12.280
and look at the API or the classes or library or whatever you're building, look at that from the outside and go,

00:11:12.280 --> 00:11:13.380
does that make sense?

00:11:13.380 --> 00:11:15.060
Is that the best way I want to use it?

00:11:15.060 --> 00:11:21.520
It's sort of your first chance to put it into practice as a consumer rather than a creator of it.

00:11:21.520 --> 00:11:27.360
So if you're not the person in control of the API and you're just using a different API,

00:11:27.360 --> 00:11:34.020
you can write a wrapper around that to just highlight the thing that's important for the test

00:11:34.020 --> 00:11:39.240
and not have to pass in a bunch of stuff that doesn't matter to the test, but you have to pass it anyway.

00:11:39.240 --> 00:11:41.280
I think those are great suggestions.

00:11:41.280 --> 00:11:51.100
The next suggestion is only write necessary tests, specifically tests whose estimated value is greater than their estimated cost.

00:11:51.540 --> 00:11:58.200
This is a judgment call, of course, but it does mean that at least some of the time you should be saying this test isn't worth it.

00:11:58.200 --> 00:12:02.700
And now this is a controversial sort of opinion, but I go by this.

00:12:02.700 --> 00:12:08.060
And if you have trouble convincing the people that you have to convince to skip a test,

00:12:08.060 --> 00:12:13.380
you can just say I'm prioritizing my tests and that one's lower on the priority.

00:12:13.380 --> 00:12:15.180
Maybe we can get to it later.

00:12:15.180 --> 00:12:16.980
The flip side of this, that's good advice.

00:12:17.100 --> 00:12:24.000
The flip side is that I think is not initially thought of by a lot of folks is you have to maintain your tests as your code changes.

00:12:24.000 --> 00:12:28.900
I mean, if you've got a static API and it's just fixed and it's on PyPI, it's fine.

00:12:28.900 --> 00:12:33.740
But if this is an application you're building, you might dramatically change the way things work.

00:12:33.960 --> 00:12:41.580
And when you do that, you might have to rewrite your test to correspond with that, to recreate objects in some new way or whatever.

00:12:41.580 --> 00:12:50.300
And the more maintenance burden that your tests carry, the less you're going to like writing tests and the less you're going to keep them running.

00:12:50.960 --> 00:12:54.380
And so it's not just, is it worth the value of creating the test?

00:12:54.380 --> 00:12:58.060
It's worth the value of creating and living with that test.

00:12:58.060 --> 00:12:58.400
Yeah.

00:12:58.400 --> 00:13:03.420
Test code has the same maintenance cost or more maintenance cost than production code.

00:13:03.420 --> 00:13:07.120
Also, different parts of your workflow.

00:13:07.120 --> 00:13:12.560
So early on in a project, you're really learning how to do the problem and you're learning about the code.

00:13:12.660 --> 00:13:15.180
So write tests that help you with that learning.

00:13:15.180 --> 00:13:19.200
Don't write tests that solidify the API so it's hard to change.

00:13:19.200 --> 00:13:20.040
That's the point.

00:13:20.040 --> 00:13:20.980
Yeah.

00:13:20.980 --> 00:13:24.560
Write the ones that help you learn about your code while you're putting it together.

00:13:24.560 --> 00:13:25.100
Very nice.

00:13:25.100 --> 00:13:27.780
So this podcast is pretty awesome.

00:13:27.780 --> 00:13:33.900
And for episode 200, I wanted to get something good, a package that's good to talk about.

00:13:33.900 --> 00:13:35.960
It might be the greatest package of all time.

00:13:35.960 --> 00:13:36.360
Really?

00:13:36.360 --> 00:13:37.900
Well, it's self-proclaimed.

00:13:37.900 --> 00:13:39.780
So a bit of a grain of salt.

00:13:39.780 --> 00:13:41.700
It sounds really simple.

00:13:41.920 --> 00:13:44.780
It has a crazy name and it actually is really quite useful.

00:13:44.780 --> 00:13:50.160
So this next one is called US, as in the United States, the greatest package in the world.

00:13:50.160 --> 00:13:51.940
That's literally the name of it.

00:13:51.940 --> 00:13:54.880
So this goes to us.

00:13:54.880 --> 00:13:55.520
Yeah.

00:13:55.520 --> 00:13:58.640
So Jerry Carbaugh reached out to us and said, hey, I created this package.

00:13:58.640 --> 00:13:59.040
I don't know.

00:13:59.040 --> 00:14:00.100
You think it's useful or not?

00:14:00.100 --> 00:14:01.140
I'm like, oh, okay.

00:14:01.140 --> 00:14:01.940
It's kind of interesting.

00:14:01.940 --> 00:14:08.000
It's a Python package on PyPI for working with states.

00:14:08.000 --> 00:14:11.420
States, zip codes, those types of things.

00:14:11.420 --> 00:14:12.300
And the United States.

00:14:12.300 --> 00:14:13.020
Right?

00:14:13.020 --> 00:14:13.300
Okay.

00:14:13.300 --> 00:14:21.160
And it seems like this could be motivation for things like the EU or some other place where

00:14:21.160 --> 00:14:22.900
you want to understand the geography of it.

00:14:22.900 --> 00:14:25.080
But this is really quite involved.

00:14:25.460 --> 00:14:29.000
So I envision like, okay, well, maybe it's got like a list of the states and it's got the

00:14:29.000 --> 00:14:30.240
abbreviation or something.

00:14:30.240 --> 00:14:31.520
It's got that.

00:14:31.520 --> 00:14:32.720
It's got all the territories.

00:14:32.720 --> 00:14:34.540
It has the postal abbreviations.

00:14:35.000 --> 00:14:39.040
It has associated press style abbreviations, which I don't really know.

00:14:39.040 --> 00:14:40.440
It has FIPS codes.

00:14:40.440 --> 00:14:44.220
I have no idea what FIPS codes are, but they're like lookup codes, different kinds of lookups

00:14:44.220 --> 00:14:44.660
you can do.

00:14:44.660 --> 00:14:44.980
Okay.

00:14:44.980 --> 00:14:47.780
Capitals, the year of statehood, the time zones.

00:14:47.780 --> 00:14:50.180
You can even do phonetic name lookup.

00:14:50.180 --> 00:14:54.320
So like if you can't spell Mississippi, but you can make Mississippi sounds with letters,

00:14:54.320 --> 00:14:56.980
you can put that in there and it'll go and find it.

00:14:56.980 --> 00:15:01.960
So like it basically do like lookups on misspellings, but if you get it like sounding right, it can

00:15:01.960 --> 00:15:02.680
still find it.

00:15:02.680 --> 00:15:07.820
So maybe you accept typed input or some text field that says the state, but then you can

00:15:07.820 --> 00:15:15.320
do a lookup on that to get a more canonical representation, whether the state is contiguous, like Oregon,

00:15:15.320 --> 00:15:19.540
all one thing stuck together or a very nice place like Hawaii.

00:15:19.540 --> 00:15:24.800
That's broken into a bunch of islands where there's continental or not similar difference

00:15:24.800 --> 00:15:25.060
there.

00:15:25.060 --> 00:15:26.400
That's pretty cool.

00:15:26.960 --> 00:15:32.420
If you want the geographic boundaries of them for like geospatial work, it comes with

00:15:32.420 --> 00:15:35.040
URLs to shape files that come out of the U S census.

00:15:35.040 --> 00:15:36.800
At least they're accurate up to 2010.

00:15:36.800 --> 00:15:37.300
Okay.

00:15:37.300 --> 00:15:40.000
Well, also one of the flags is, is obsolete.

00:15:40.000 --> 00:15:42.160
I was wondering if there's obsolete states.

00:15:42.160 --> 00:15:43.780
There are obsolete states.

00:15:43.780 --> 00:15:44.400
Yeah.

00:15:44.400 --> 00:15:47.340
So I think more territories are obsolete.

00:15:47.340 --> 00:15:51.680
I don't think there's states that are obsolete, but there's territories that are, for example, like

00:15:51.680 --> 00:15:56.760
the Philippines, I think used to be a U S territory, but it's no longer something like that.

00:15:56.820 --> 00:15:58.220
There's a few examples in the docs.

00:15:58.220 --> 00:15:59.000
Oh, okay.

00:15:59.000 --> 00:15:59.480
Cool.

00:15:59.480 --> 00:15:59.720
Yeah.

00:15:59.720 --> 00:16:06.040
And they also have a, an environment variable to indicate whether Washington DC becomes a

00:16:06.040 --> 00:16:06.300
state.

00:16:06.300 --> 00:16:09.420
You can set a flag that will like trigger that to show up.

00:16:09.660 --> 00:16:11.520
So it's like future proof a little bit.

00:16:11.520 --> 00:16:11.800
Okay.

00:16:11.800 --> 00:16:12.820
And it has a CLI.

00:16:12.820 --> 00:16:19.100
So you could type states space MD for Maryland and you'll get a big, long description of information

00:16:19.100 --> 00:16:19.540
about it.

00:16:19.540 --> 00:16:22.020
Well, with the prefix of the great state of.

00:16:22.020 --> 00:16:22.820
Yeah.

00:16:22.820 --> 00:16:23.580
That's interesting.

00:16:23.580 --> 00:16:26.800
So is this more than you expected out of it?

00:16:26.800 --> 00:16:30.300
Like when I thought, I thought it would just be like a list of states and stuff, but like

00:16:30.300 --> 00:16:32.660
all this lookup, all this information, this is pretty awesome.

00:16:32.660 --> 00:16:32.980
Actually.

00:16:32.980 --> 00:16:33.740
It's pretty in depth.

00:16:33.820 --> 00:16:34.860
Well, no, it's pretty cool.

00:16:34.860 --> 00:16:38.440
I just didn't, I don't know if I'd say it's the greatest package in the world.

00:16:38.440 --> 00:16:39.540
Oh, all right.

00:16:39.540 --> 00:16:41.060
Well, there's always a PR.

00:16:41.060 --> 00:16:46.880
You could always a pretty good package with respect to state management in the world.

00:16:46.880 --> 00:16:47.180
Yeah.

00:16:47.220 --> 00:16:47.400
Yeah.

00:16:47.400 --> 00:16:47.580
Okay.

00:16:47.580 --> 00:16:51.660
No, actually, if you work with states, this seems super useful, regardless of whether you

00:16:51.660 --> 00:16:52.300
agree with the name.

00:16:52.300 --> 00:16:54.600
Yeah.

00:16:54.600 --> 00:16:58.860
I've got kids that are at home right now.

00:16:58.860 --> 00:17:03.520
One that's a started school, but started school like online.

00:17:03.780 --> 00:17:08.160
So it's a, it's sort of an anticlimactic big beginning to school.

00:17:08.160 --> 00:17:08.860
Yeah.

00:17:08.860 --> 00:17:14.520
And we still have like some, a lot of time that they're devoting that I'm glad they're doing

00:17:14.520 --> 00:17:14.700
this.

00:17:14.700 --> 00:17:18.320
They're allowing teachers sometime during the, during the week to prepare for all of this,

00:17:18.320 --> 00:17:21.560
which means they've got kids have more free time than they had before.

00:17:21.560 --> 00:17:26.980
So one of the things I was looking for was good learning software coding related learning

00:17:26.980 --> 00:17:32.800
activities for kids that are, have some spare time, especially early on in the school year.

00:17:33.060 --> 00:17:34.900
I can't remember who suggested this.

00:17:34.900 --> 00:17:40.880
Somebody on Twitter suggested this, but there's a video series that's part of Ted Ed that's

00:17:40.880 --> 00:17:42.260
called think like a coder.

00:17:42.260 --> 00:17:47.620
The title says it's a 10 episode series that will challenge viewers with programming puzzles

00:17:47.620 --> 00:17:54.920
as the main character, a girl and her robot companion attempted to save the world that has been plunged

00:17:54.920 --> 00:17:55.620
into turmoil.

00:17:55.620 --> 00:17:59.700
So I was trying to evaluate whether or not to highlight this on the show.

00:17:59.700 --> 00:18:03.000
And I got like four episodes in just this morning.

00:18:03.000 --> 00:18:06.940
Although it says it's a 10 episode series, but I only count nine.

00:18:06.940 --> 00:18:07.460
It's zero.

00:18:07.460 --> 00:18:08.460
It's you start counting.

00:18:08.460 --> 00:18:09.500
It's a zero base.

00:18:09.500 --> 00:18:12.060
So it's off by one for programmers.

00:18:12.060 --> 00:18:13.440
I don't know.

00:18:13.440 --> 00:18:14.780
It doesn't really teach.

00:18:14.840 --> 00:18:17.240
I haven't got at least the first four episodes.

00:18:17.240 --> 00:18:21.720
It doesn't teach like actual coding, but it talks about the concepts.

00:18:21.720 --> 00:18:23.680
And that's what I really like about it.

00:18:23.680 --> 00:18:24.720
It's an interesting story.

00:18:24.720 --> 00:18:30.980
The animation is pretty good, but it'll introduce words and terms like loops for loops and tell

00:18:30.980 --> 00:18:37.640
loops, while loops, conditionals, variables, path logic, permutations, how to do searches,

00:18:37.640 --> 00:18:42.300
tables and recursion, and even some big O notation and some other things.

00:18:42.300 --> 00:18:48.200
But these are like terms that in software and in programming, we use all the time and just

00:18:48.200 --> 00:18:50.240
assume everybody knows what we're talking about.

00:18:50.640 --> 00:18:55.460
One of the things I really like about this is just defining and using those terms in an

00:18:55.460 --> 00:19:00.660
entertaining story so that when you really do start learning how to code, it's not going

00:19:00.660 --> 00:19:01.320
to be surprised.

00:19:01.320 --> 00:19:03.460
Highlight with that.

00:19:03.460 --> 00:19:09.480
I'm also reading to my daughter a book that I picked up called Girls Who Code, Learn to

00:19:09.480 --> 00:19:11.140
Code and Change the World.

00:19:11.140 --> 00:19:13.260
And it's a lot of inspiration.

00:19:13.660 --> 00:19:19.560
There's actually a Girls Who Code project that does teaching and stuff, but I don't know

00:19:19.560 --> 00:19:20.980
what they're doing right now during COVID.

00:19:20.980 --> 00:19:25.160
But the book is great and it's not any language specific stuff.

00:19:25.160 --> 00:19:29.200
I think there is some Python in there, but that's not really the focus of it.

00:19:29.200 --> 00:19:34.440
The focus really is teaching a lot of the concepts and just getting people excited about it.

00:19:34.440 --> 00:19:36.120
So I wanted to highlight these two.

00:19:36.120 --> 00:19:37.180
That's one of the biggest challenges.

00:19:37.180 --> 00:19:41.820
It's getting people feeling like this is interesting and this is for me and I should pay attention to

00:19:41.820 --> 00:19:42.120
it.

00:19:43.300 --> 00:19:43.560
Yeah.

00:19:43.560 --> 00:19:44.300
That's cool.

00:19:44.300 --> 00:19:48.420
Also, I want to throw a shout out to CodeCombat.com.

00:19:48.420 --> 00:19:53.460
That's another really nice place that sort of has some of these ideas, go through and do

00:19:53.460 --> 00:19:56.800
like a little dungeon exploration and solve problems.

00:19:56.800 --> 00:19:59.240
I think it would be a good follow on to this series.

00:19:59.240 --> 00:20:04.720
Like you've got the ideas from the series and then you can go write like super editor supported

00:20:04.720 --> 00:20:07.680
Python code to like in a little game world.

00:20:07.680 --> 00:20:08.620
So that'd be fun.

00:20:08.620 --> 00:20:08.860
Yeah.

00:20:08.860 --> 00:20:09.740
Yeah.

00:20:09.740 --> 00:20:11.620
We'll link to all that in the show notes.

00:20:11.620 --> 00:20:11.860
Absolutely.

00:20:12.300 --> 00:20:15.280
So this next one is interesting.

00:20:15.280 --> 00:20:19.080
I ran across this just a few days ago and I thought, oh, I definitely want to talk about

00:20:19.080 --> 00:20:25.020
this because how many programmers out there have this idea of I've been building this software

00:20:25.020 --> 00:20:26.560
for other people, for other companies.

00:20:26.560 --> 00:20:31.120
And I just want to, I have this idea and it doesn't exist and I want to build it and put

00:20:31.120 --> 00:20:32.080
it out there into the world.

00:20:32.080 --> 00:20:37.080
Like surely almost every programmer has had this, this idea of some in some form or other,

00:20:37.080 --> 00:20:37.360
right?

00:20:37.460 --> 00:20:37.660
Yeah.

00:20:37.660 --> 00:20:37.960
Yeah.

00:20:37.960 --> 00:20:44.600
So there's this project that is a pretty new project that goes along its path and it's

00:20:44.600 --> 00:20:45.620
called keep the score.

00:20:45.620 --> 00:20:48.800
So keep the score is like online software for scorekeeping.

00:20:48.800 --> 00:20:56.200
Basically, if you've got like a soccer tournament, rock climbing competition, whatever, like those

00:20:56.200 --> 00:20:57.440
things probably don't exist anymore.

00:20:57.440 --> 00:21:02.160
But when we could be around other humans and when we can, again, this is going to make

00:21:02.160 --> 00:21:02.700
a lot of sense.

00:21:02.700 --> 00:21:08.080
You could have like a, a little online scoreboard that the parents could pull up and keep track

00:21:08.080 --> 00:21:10.180
of or whatever, something like this.

00:21:10.180 --> 00:21:10.380
Right.

00:21:10.380 --> 00:21:12.280
That's basically what this app is.

00:21:12.280 --> 00:21:16.780
It's a Python flask app and they wrote a blog post called the cost of running a Python

00:21:16.780 --> 00:21:19.320
web app with 55,000 monthly users.

00:21:19.320 --> 00:21:19.660
Okay.

00:21:19.660 --> 00:21:23.800
So this explores like the infrastructure and how much did it cost to actually put it together?

00:21:23.800 --> 00:21:25.520
how are they doing it?

00:21:25.520 --> 00:21:26.100
And so on.

00:21:26.100 --> 00:21:29.820
So I thought it might be fun to just kind of talk through that a little bit and then do

00:21:29.820 --> 00:21:32.480
maybe a little comparison over to some of the talk Python stuff.

00:21:32.480 --> 00:21:32.980
All right.

00:21:32.980 --> 00:21:33.680
Yeah.

00:21:33.680 --> 00:21:35.280
So I'm leaking over the thing.

00:21:35.280 --> 00:21:36.080
Their site's pretty cool.

00:21:36.080 --> 00:21:40.700
It's hosted on digital ocean as is all of our stuff, Python bites, talk Python and whatnot.

00:21:40.700 --> 00:21:43.480
So that's a really fair comparison that I'll make.

00:21:43.480 --> 00:21:48.600
And they're using digital ocean and Firebase currently have around 55,000 unique visitors

00:21:48.600 --> 00:21:52.120
and they have their servers and database over on digital ocean.

00:21:52.120 --> 00:21:56.900
And I think they might be using Postgres as a service on digital ocean rather than hosting

00:21:56.900 --> 00:21:58.560
their own database server.

00:21:58.560 --> 00:22:02.200
From what I can tell, they also have Amazon web services.

00:22:02.200 --> 00:22:02.760
Yeah.

00:22:02.760 --> 00:22:06.960
So for the numbers, digital ocean has cost them about $95 a month.

00:22:06.960 --> 00:22:10.560
They have some AWS metabase stuff running over there.

00:22:10.620 --> 00:22:13.120
It's $60 a month for like reporting and whatnot.

00:22:13.120 --> 00:22:17.920
They have Google cloud for a whopping $1.32 at Firebase.

00:22:17.920 --> 00:22:20.740
DNS hosting of $5.

00:22:20.740 --> 00:22:22.880
Discuss $10.

00:22:22.880 --> 00:22:26.320
They said, of course, you can have a free one, but they put ads there and they don't like

00:22:26.320 --> 00:22:26.580
that.

00:22:26.580 --> 00:22:27.880
So $10.

00:22:27.880 --> 00:22:29.500
They're paying for that.

00:22:29.880 --> 00:22:33.800
And they said, well, okay, that's $171 a month.

00:22:33.800 --> 00:22:36.040
Is this worthwhile?

00:22:36.040 --> 00:22:42.720
Obviously, if you were Roden Schwartz or you're Talk Python training, like it would be obviously

00:22:42.720 --> 00:22:44.540
$171, like no big deal.

00:22:44.540 --> 00:22:44.940
Right.

00:22:45.620 --> 00:22:49.580
But this guy points out like, I'm an indie developer.

00:22:49.580 --> 00:22:51.500
I have no revenue yet.

00:22:51.500 --> 00:22:55.740
And I'm just trying to get this thing off the ground and I'm paying $171 a month.

00:22:55.740 --> 00:22:59.280
But that's a lot of money for just trying to do something nice for everybody.

00:22:59.460 --> 00:23:00.140
Yeah, I agree.

00:23:00.140 --> 00:23:03.040
And it's mostly free and they're trying to figure out the monetization.

00:23:03.040 --> 00:23:05.020
And I think it's a cool project.

00:23:05.020 --> 00:23:07.420
I actually hope they're successful and it's cool they're building it with Python.

00:23:07.420 --> 00:23:09.000
But I don't know.

00:23:09.000 --> 00:23:09.880
It's an interesting trade-off.

00:23:09.880 --> 00:23:13.760
I feel like so many people, I don't want this to sound at all critical of this guy.

00:23:13.760 --> 00:23:16.440
Like what he's doing, it's working for him and that's great.

00:23:16.920 --> 00:23:22.680
But I feel like a lot of people just in general, not necessarily this example, they envision

00:23:22.680 --> 00:23:27.520
a world where like things are so much bigger and more powerful and more awesome or more

00:23:27.520 --> 00:23:29.620
like there's more users and it's like more awesome.

00:23:29.620 --> 00:23:34.860
And they got to be ready for that because when they get, when they land on like Hacker News

00:23:34.860 --> 00:23:40.280
and all the people come, they've got to be ready for like a 50x traffic and stuff like

00:23:40.280 --> 00:23:40.500
that.

00:23:40.500 --> 00:23:44.800
And I don't necessarily think that that's how it goes or, you know, if you're in the cloud,

00:23:44.800 --> 00:23:46.860
something like that happens.

00:23:46.860 --> 00:23:48.420
Just push the make it bigger button.

00:23:48.420 --> 00:23:51.000
And then it goes like, you don't have to do that beforehand.

00:23:51.000 --> 00:23:56.480
And actually one of the things they said they ran into is they started out with a smaller

00:23:56.480 --> 00:24:00.740
server and they said, oh, we want to make sure we have a bigger server just in case.

00:24:00.740 --> 00:24:01.780
And they upscaled it.

00:24:01.780 --> 00:24:07.320
And part of that upscaling like changes the, I think it was probably the file system got

00:24:07.320 --> 00:24:08.740
larger, the disk got larger.

00:24:08.740 --> 00:24:11.460
And once that happens, you can't downscale it again.

00:24:11.460 --> 00:24:16.400
You're like stuck without, unless you recreate it from scratch, you can't downscale it again.

00:24:16.400 --> 00:24:18.520
And so they have two servers.

00:24:18.520 --> 00:24:20.580
They're like deploying to one.

00:24:20.580 --> 00:24:24.280
And while they're deploying to one, they take the floating, the elastic IP and they switch

00:24:24.280 --> 00:24:26.920
it over to another one that's keeps it running.

00:24:26.920 --> 00:24:31.080
And then they deploy to the other one and it switches it over to the, like, there's like

00:24:31.080 --> 00:24:33.260
this back and forth swap going on.

00:24:33.320 --> 00:24:37.400
And that's actually how I do it at Talk Python on training site and stuff like that as well.

00:24:37.400 --> 00:24:39.660
Having like two servers.

00:24:39.660 --> 00:24:44.260
That said, this feels really high to me.

00:24:44.260 --> 00:24:46.540
I'll give you some stats on Talk Python.

00:24:46.540 --> 00:24:52.240
Just talkpython.fm, the website for the podcast, not the training site, not Python Bytes.

00:24:52.500 --> 00:24:57.620
The reason I chose Talk Python is it's very similar to the numbers that this guy is using

00:24:57.620 --> 00:24:58.540
on the same infrastructure.

00:24:58.540 --> 00:25:01.380
So Talk Python gets about 40,000 monthly visitors.

00:25:01.380 --> 00:25:07.500
It's super hard to talk about unique monthly visitors because so many developers, especially

00:25:07.500 --> 00:25:11.840
in the developer space, because so many people have ad blocking turned on, which is how you,

00:25:11.840 --> 00:25:16.700
you know, like third party cookies from apps like Clicky or whatever, say you get this many

00:25:16.700 --> 00:25:19.800
visitors and like 50% of that's blocked or something.

00:25:19.880 --> 00:25:20.040
Right.

00:25:20.040 --> 00:25:23.280
So anyway, you got to kind of estimate like, well, how much is blocked?

00:25:23.280 --> 00:25:24.640
Is it 30% or who knows?

00:25:24.640 --> 00:25:30.840
So anyway, it's around similar numbers, a little bit smaller in terms of visitors, but the podcast

00:25:30.840 --> 00:25:32.760
clients, oh my goodness.

00:25:32.760 --> 00:25:35.960
The podcast clients are crazy.

00:25:35.960 --> 00:25:39.300
They're just pounding the server like all the time asking for the RSS feed.

00:25:39.300 --> 00:25:43.600
So we get about 3 million requests for the RSS feed monthly.

00:25:43.600 --> 00:25:46.320
That goes through, it goes through Python.

00:25:46.320 --> 00:25:48.120
It talks, it does some database stuff.

00:25:48.200 --> 00:25:50.060
It talks over the database and it gives back an answer.

00:25:50.060 --> 00:25:55.120
I could cache that as a file, but then there would be like latency and inconsistent.

00:25:55.120 --> 00:25:57.560
I just, there's no need to not have that happen.

00:25:57.560 --> 00:25:57.780
Right.

00:25:57.780 --> 00:25:59.180
But that, that does.

00:25:59.180 --> 00:25:59.420
Right.

00:25:59.420 --> 00:26:01.900
So that comes through and that's about 120 K requests.

00:26:01.900 --> 00:26:07.780
So that's 320 gigs of traffic and 3 million requests just to answer the question.

00:26:07.780 --> 00:26:09.400
Can I go download the file?

00:26:09.400 --> 00:26:11.680
Which is much bigger month of weekly.

00:26:11.680 --> 00:26:12.280
You know what I mean?

00:26:12.740 --> 00:26:16.660
So that's a ton of traffic and the servers back in that.

00:26:16.660 --> 00:26:19.400
I have two servers cause I do this flip as well.

00:26:19.400 --> 00:26:20.300
So there's zero downtime.

00:26:20.300 --> 00:26:21.000
Most of the time.

00:26:21.000 --> 00:26:23.060
One of them is a $5 server.

00:26:23.060 --> 00:26:29.420
And because I wanted to splurge, the main one is $10 because, Hey, this is my whole business.

00:26:29.420 --> 00:26:34.260
Like it's worth five extra dollars a month, but it could easily handle it on five, on five bucks.

00:26:34.260 --> 00:26:40.500
So for example, I have it pulled up right now and it's running at like 8% CP usage, 6%.

00:26:40.500 --> 00:26:41.440
You know, it kind of varies.

00:26:41.440 --> 00:26:41.680
Right.

00:26:41.680 --> 00:26:42.580
Right now.

00:26:42.580 --> 00:26:46.100
If it was on the $5 one, it would be like 12%.

00:26:46.100 --> 00:26:46.980
It would still be fine.

00:26:46.980 --> 00:26:51.380
And then there's also a dedicated MongoDB server that handles everything, but that's like $10.

00:26:51.380 --> 00:26:53.460
Total cost, 25 bucks.

00:26:53.460 --> 00:26:53.760
Okay.

00:26:53.760 --> 00:26:55.600
Well, 25 is, okay.

00:26:55.600 --> 00:26:56.240
Okay.

00:26:56.240 --> 00:26:57.200
Devil's advocate here.

00:26:57.200 --> 00:27:00.400
$25 is way better than 171, but even $25.

00:27:00.720 --> 00:27:00.920
Yeah.

00:27:00.920 --> 00:27:05.200
I could do it at 20 if I wanted, if I, if I just went down to the $5 server, which I could,

00:27:05.200 --> 00:27:13.320
but even at 20 a month, that's what a $240 a year for trying to do something nice and free

00:27:13.320 --> 00:27:13.940
for everybody.

00:27:13.940 --> 00:27:14.620
Yeah, I know.

00:27:14.620 --> 00:27:19.940
What's really lucky is that I don't have to pay for the bandwidth for the stuff going

00:27:19.940 --> 00:27:20.660
through digital ocean.

00:27:20.660 --> 00:27:24.860
Cause that would be like another thousand dollars a month at least, but that's included.

00:27:24.860 --> 00:27:25.440
So it's fine.

00:27:25.440 --> 00:27:28.500
I feel like you could turn stuff down a lot.

00:27:28.660 --> 00:27:33.480
Like for example, I think he's using Postgres as a service, which is probably, I don't know,

00:27:33.480 --> 00:27:34.900
I'm sure there's probably 50 bucks a month.

00:27:34.900 --> 00:27:39.380
You could probably put that on a $5 server and just manage Postgres yourself.

00:27:39.380 --> 00:27:39.720
Okay.

00:27:39.720 --> 00:27:40.520
Is that worthwhile?

00:27:40.520 --> 00:27:41.080
I don't know.

00:27:41.080 --> 00:27:46.120
Like how much of a pain is that to manage yourself versus like, how do you do backups and all that

00:27:46.120 --> 00:27:46.440
kind of stuff.

00:27:46.440 --> 00:27:51.920
But in the really early stages, I think you, if you're worried that the extra $100 a month

00:27:51.920 --> 00:27:54.780
is a big deal, you know, maybe you do it that way.

00:27:54.780 --> 00:27:58.460
Also though, by the way, my AWS bill is over a thousand dollars last month.

00:27:58.460 --> 00:28:00.340
So, but that's just video delivery.

00:28:00.340 --> 00:28:02.440
That's a different story.

00:28:02.440 --> 00:28:03.120
That's just bandwidth.

00:28:03.120 --> 00:28:05.300
That's, and that's because of the training.

00:28:05.300 --> 00:28:05.880
Yeah.

00:28:05.880 --> 00:28:06.540
Yeah.

00:28:06.540 --> 00:28:06.700
Yeah.

00:28:06.700 --> 00:28:07.060
Okay.

00:28:07.060 --> 00:28:08.440
So I could do it cheaper.

00:28:08.440 --> 00:28:10.980
I could do it a lot cheaper, but it would be less good for people.

00:28:10.980 --> 00:28:14.040
And for that, I'm trying to pick the best possible option.

00:28:14.040 --> 00:28:15.940
So that's how that goes.

00:28:16.040 --> 00:28:21.420
But anyway, I think it's interesting to sort of think about like, what does it cost?

00:28:21.420 --> 00:28:25.000
And your point about if I'm doing something nice for everyone, right?

00:28:25.000 --> 00:28:26.520
It should cost less.

00:28:26.520 --> 00:28:26.800
Yeah.

00:28:26.800 --> 00:28:33.600
Well, I mean, you know, motivation doesn't really get into it, but it's a very real thing.

00:28:33.600 --> 00:28:39.180
It's a barrier to entry for, for people that maybe that, I mean, they had to scrape together

00:28:39.180 --> 00:28:42.080
just to get the laptop in the first place to start coding.

00:28:42.080 --> 00:28:42.600
And yeah.

00:28:42.600 --> 00:28:48.280
And if you're not in like a Western democratic place where currency is pretty valuable or the

00:28:48.280 --> 00:28:54.260
pay rate is pretty high, all of a sudden $175 could be 25% of your monthly income, which

00:28:54.260 --> 00:28:55.880
that's a huge number, right?

00:28:55.880 --> 00:28:56.300
Yeah.

00:28:56.400 --> 00:28:56.560
Yeah.

00:28:56.560 --> 00:28:58.900
So it could definitely vary depending on where you're located.

00:28:58.900 --> 00:28:59.800
Yeah.

00:28:59.800 --> 00:29:01.220
Anyway, pretty, pretty cool.

00:29:01.220 --> 00:29:05.760
I think it's worth looking at and digging into, and I wish them the best of luck with this project

00:29:05.760 --> 00:29:07.520
because it seems cool and it's built Python.

00:29:07.520 --> 00:29:12.260
Finally, if you want to hear like a deep dive into all this stuff that I was talking about,

00:29:12.260 --> 00:29:16.840
Dan Bader and I had a long chat about the infrastructure behind Talk Python and some behind

00:29:16.840 --> 00:29:19.680
real Python over on Talk Python 215.

00:29:19.680 --> 00:29:21.000
I'll link to that as well.

00:29:21.000 --> 00:29:22.080
That's pretty serious, man.

00:29:22.080 --> 00:29:22.940
We should do something funny.

00:29:22.940 --> 00:29:23.320
Yes.

00:29:23.320 --> 00:29:24.500
Tell me a joke.

00:29:24.500 --> 00:29:25.320
Okay.

00:29:25.500 --> 00:29:30.620
So somebody shared this with us on Twitter and originally Netlify posted it.

00:29:30.620 --> 00:29:32.460
It's a conversation between two people.

00:29:32.460 --> 00:29:34.280
Oh no, we lost the hackers.

00:29:34.280 --> 00:29:35.400
Where did they go?

00:29:35.400 --> 00:29:36.620
I don't know.

00:29:36.620 --> 00:29:37.880
They just ran somewhere.

00:29:37.880 --> 00:29:40.080
They just ran somewhere.

00:29:40.080 --> 00:29:44.340
That's so awesome because I didn't get that joke reading it, but when you say it like,

00:29:44.340 --> 00:29:45.520
oh yeah, perfect.

00:29:45.520 --> 00:29:52.020
Well, I'm very concerned about making sure that everybody has a happy work environment and

00:29:52.020 --> 00:29:52.700
that they're safe.

00:29:53.220 --> 00:29:56.020
And I've had to fill out some contracts and stuff.

00:29:56.020 --> 00:29:57.360
It's so ridiculous, man.

00:29:57.360 --> 00:30:02.560
I've had to fill out like vendor stuff for podcast advertising and they make me go through their

00:30:02.560 --> 00:30:05.460
stupid vendor onboarding thing at some of these big companies.

00:30:05.460 --> 00:30:09.280
And I've got to answer like the general vendor information.

00:30:09.840 --> 00:30:11.220
So what is your information?

00:30:11.220 --> 00:30:12.500
Like what is your location?

00:30:12.500 --> 00:30:16.020
What is your bank account information so we can pay you?

00:30:16.020 --> 00:30:20.460
What is your OSHA health policy?

00:30:21.120 --> 00:30:25.840
Is there a chance that somebody is like, are there dangerous ladders that people could climb?

00:30:25.840 --> 00:30:27.580
Will it be forklifts?

00:30:27.580 --> 00:30:29.920
I'm like, dude, this is podcast advertising.

00:30:29.920 --> 00:30:32.800
There's no ladders and there's definitely no forklifts.

00:30:32.800 --> 00:30:35.820
Why are you sending me this huge 50 page form?

00:30:35.820 --> 00:30:38.060
I got to fill out like two pages apply to me.

00:30:38.060 --> 00:30:41.880
Anyway, let's take this and turn it into the programming joke.

00:30:42.000 --> 00:30:48.680
So, you know, you've seen those like number of days since serious injury at factory seven.

00:30:48.680 --> 00:30:49.460
We're doing great.

00:30:49.460 --> 00:30:50.500
Nobody hurt this week.

00:30:50.500 --> 00:30:53.340
So how about this for our programming sign?

00:30:53.340 --> 00:30:57.040
Number of days since I've encountered an array index error.

00:30:57.040 --> 00:30:58.540
Negative one.

00:31:00.640 --> 00:31:02.080
I love this joke.

00:31:02.080 --> 00:31:03.300
It's a good joke, right?

00:31:03.300 --> 00:31:03.660
Yeah.

00:31:03.660 --> 00:31:06.320
Negative one.

00:31:06.320 --> 00:31:10.280
So that's really big because you probably overflow.

00:31:10.280 --> 00:31:12.040
Well, you don't know how big though.

00:31:12.040 --> 00:31:13.980
Is it a short and unsigned?

00:31:13.980 --> 00:31:16.800
Is it like a, if it's a short, it's like negative 32,000.

00:31:16.800 --> 00:31:20.040
But if it's a long, that's a really huge number.

00:31:20.040 --> 00:31:24.740
It's like 4.2 billion, 9 billion, whatever the overflow wrap is there.

00:31:24.740 --> 00:31:27.640
They probably just allocated a byte for it.

00:31:27.640 --> 00:31:31.940
So it's like 255 or whatever.

00:31:31.940 --> 00:31:32.220
Yeah.

00:31:32.220 --> 00:31:32.540
Yeah.

00:31:32.540 --> 00:31:33.240
Less than a year.

00:31:33.240 --> 00:31:35.280
Awesome.

00:31:35.280 --> 00:31:36.440
All right.

00:31:36.440 --> 00:31:38.040
Well, thanks, Brian.

00:31:38.040 --> 00:31:39.560
Congratulations on 200, man.

00:31:39.560 --> 00:31:40.240
Thank you.

00:31:40.240 --> 00:31:42.060
Oh, we overflowed.

00:31:42.060 --> 00:31:44.020
We're into the 200s now.

00:31:44.020 --> 00:31:45.660
Congratulations.

00:31:45.660 --> 00:31:46.480
Oh, wait.

00:31:46.480 --> 00:31:48.580
Let's celebrate on 256.

00:31:48.580 --> 00:31:49.760
Yes, we will.

00:31:49.760 --> 00:31:51.400
That's going to be the full cycle.

00:31:51.400 --> 00:31:51.960
Yeah.

00:31:51.960 --> 00:31:52.260
Yeah.

00:31:52.260 --> 00:31:52.660
Awesome.

00:31:52.660 --> 00:31:53.180
All right.

00:31:53.180 --> 00:31:53.740
Well, thanks again.

00:31:53.740 --> 00:31:54.160
Thank you.

00:31:54.160 --> 00:31:54.560
Bye.

00:31:54.560 --> 00:31:56.320
Thank you for listening to Python Bytes.

00:31:56.600 --> 00:31:58.760
Follow the show on Twitter at Python Bytes.

00:31:58.760 --> 00:32:01.800
That's Python Bytes as in B-Y-T-E-S.

00:32:01.800 --> 00:32:04.700
And get the full show notes at Python Bytes.fm.

00:32:04.700 --> 00:32:09.760
If you have a news item you want featured, just visit Python Bytes.fm and send it our way.

00:32:09.760 --> 00:32:11.800
We're always on the lookout for sharing something cool.

00:32:11.800 --> 00:32:12.980
This is Brian Okken.

00:32:12.980 --> 00:32:17.060
And on behalf of myself and Michael Kennedy, thank you for listening and sharing this podcast

00:32:17.060 --> 00:32:18.240
with your friends and colleagues.

