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


Transcript #200: No dog-piling please (it's episode 200!)

Return to episode page view on github
Recorded on Wednesday, Sep 16, 2020.

00:00 Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds.

00:05 This is episode 200, I can't believe it.

00:07 Recorded September 16th, 2020.

00:10 I'm Brian Okken.

00:11 And I'm Michael Kennedy.

00:12 200, can you believe it?

00:13 I actually cannot believe it.

00:15 That is a ton of podcasting and everyone's been super supportive and it's been great to do 200 episodes with you.

00:23 I don't think we've actually done 200 episodes because there's a few times you couldn't make it or I couldn't make it or we did some live thing.

00:29 So probably like 195 together but still a ton of podcasting together.

00:32 Yeah, yeah, it is.

00:33 And it's pretty exciting.

00:35 I've had a blast.

00:36 Absolutely.

00:36 I hope people are finding this helpful.

00:38 Oh, I think they will find it helpful.

00:42 We're really good at transitions.

00:45 Because we've been doing it so long.

00:46 Yeah.

00:46 To transition into the next topic.

00:49 Actually, the first batch elder wrote a cool article.

00:53 This is great on how to be helpful online.

00:56 And this is the advice that he's giving is targeted towards people that are trying to help other people online. So if you're answering a question on Stack Overflow or just even an email question somebody sends you on Twitter or whatever, these are good advice. Actually, it's a pretty long article. There's a lot of advice there. So I want to highlight a handful of them.

01:19 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.

01:31 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.

01:40 Where that term came from i don't that doesn't make any sense to me but going off the rails i've heard of that he gives an example of.

01:48 It should be ok for someone to ask for help with a program using sockets.

01:53 For example and not have to defend their use of sockets especially if the specific question has nothing to do with sockets and he says things like it's not sockets might be pickle or threads or globals or singleton or something.

02:07 You might have really strong opinions about some design.

02:10 pattern or some code that they're using or different libraries.

02:15 That's not really what they're asking about, you know, don't attack them for their design choices. Just maybe answer the question instead. No dog piling. I think that self explanatory.

02:26 When somebody's already answered a question, you don't have to answer it slightly different. If you're very different and you think you're adding to the conversation, of course, speak up.

02:35 Meet their level. This is a difficult one.

02:39 Try to determine what they know and give them a reasonable next step not the ultimate solution a suboptimal solution they understand is better than a gold standard they can't make use of that makes a lot of sense because you know i feel so at least one of the.

02:53 Other ones is your gold standard is.

02:58 Encased in your contacts and your use case and so on it's like that.

03:03 You're not facebook you're not google you're not linkedin probably you might not need their gold plated solution that's perfect for that situation and also odds are if you're answering questions you're more advanced developer than the person asking, at least in that field so be gentle the last one i wanna highlight is use more words.

03:25 I see and twitter and other online mediums encourage short responses but short responses are exactly.

03:33 The kind of thing that can be easily to easily misinterpreted so use more words especially encouraging optimistic words.

03:41 I think this is an you know also just there's a lot of stuff people leave out but they would say in person they would say oh it's cool that you're trying this problem let's look at it this other way And let me know if you have any other questions but they don't put that stuff in text and so i think it is important to use more words and more encouraging online.

04:03 There's a whole bunch of other stuff like humility and understanding your motivations and their motivations and trying to.

04:09 Build a community so great advice from that i encourage the next time that you read a question and your mouth drops open in your eyes there in shock.

04:19 Maybe read this article before entering.

04:21 Yeah it's a nice article and good advice.

04:24 Thanks dad.

04:25 I don't know how to transition to magic man.

04:28 Magic is awesome.

04:29 You know what else is awesome?

04:30 Black is pretty awesome.

04:31 Right?

04:31 Yeah definitely.

04:32 You know what is not awesome?

04:34 Crappy code written in a Jupyter notebook that has no like proper editor support.

04:41 Like I don't need black that much because I use PyCharm and I can hit command alt L and it formats it basically like black would.

04:48 Or in VS Code I hit command shift P and type format document and it formats it basically like Blackwood.

04:55 But in notebooks, it's just stuck there and it's like permanent icky form.

05:00 And it's like, well, how I want to make this nicer, but I don't want to take the effort of like, developing it nicely. I want the tool to just fix it for me.

05:09 Right? And black is really great for that black super popular.

05:12 But Jupyter doesn't have black.

05:16 But magic can add black to your Jupyter notebook.

05:19 So there's a cool package called black cell magic.

05:22 And so with black cell magic, you can load this, it's an extension for Jupyter notebooks.

05:28 You just say percent load extension black cell magic once.

05:31 And then on any cell that you want to reformat, you just say percent percent black and rerun the cell.

05:38 And then it formats it.

05:39 - Nice. - Nice, yeah.

05:41 And so actually, you type that command at the top of the cell, You rerun it and then it takes that away.

05:47 So it doesn't stay there basically.

05:49 Yeah.

05:50 So anyway, you run it once and you can even give like little command line arguments to the formatter.

05:55 When you put that special magic command, the percent percent, I think those are called magic commands in Jupiter.

06:01 So percent, percent black dash L 79 for like changing the line with the 79 characters instead of 80 by default, or there's, you can pass stuff off to black.

06:11 That way.

06:12 This is cool.

06:12 Okay.

06:13 Yeah.

06:13 Yeah.

06:14 And if you want to know if you like it and it's for you, you go to the website, go to the link I provided, and it has a cool animated GIF, and you can see right away.

06:21 Oh, that's cool, I want that.

06:22 Or no, that looks weird, I don't want that.

06:25 - Yeah, I was watching that while you were talking.

06:27 - Yeah, it's cool, right?

06:28 So it just, it's always a problem.

06:31 Like I need to format my Jupyter Notebook.

06:33 Why, oh why is this not built in?

06:36 Well, now it's kind of sort of plug-in-able.

06:39 - Not part of the story, but can we go back to the whole command alt L thing?

06:42 - Yeah.

06:43 - By charm, it reformats your code or something?

06:45 - It does, yeah.

06:46 - Okay, I'll just check that out.

06:48 - It's pretty sweet.

06:49 That only works on Mac and it depends on which bindings.

06:51 You know, there's like multiple keyboard bindings.

06:53 So maybe in the Vim one, there's like a different one.

06:55 But if you go and you go find the menu command for like reformat document, it'll show you what the hotkey is.

07:01 And you could do better than that.

07:02 You can actually right click on the project and say reformat the project and it'll like traverse down into all the files and it'll reformat like everything.

07:13 So that's it.

07:14 But I don't know of a hotkey for that, but you can like right click and say, reformat this tree of stuff.

07:19 - Yeah, but if I'm doing a tree of stuff, I'll probably use black.

07:21 - Yeah, exactly.

07:22 Yeah, I never used that, but generally command alt L or control alt L, probably on Windows or Linux will do it.

07:30 But black cell magic will add it to Jupyter.

07:35 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.

07:42 So if you got 100 cells, you got a lot of percent percent black you're typing.

07:47 There is a guy named Tobin Jones who wrote an npm package that will use this over top of it and reformat all of them.

07:58 And I linked to the repo, but then when I go to it, it looks like it's archived.

08:01 So I have no idea whether it even works still or anything.

08:03 I haven't tried that one.

08:05 So people can check that out.

08:07 But it would be nice if this was like leveled up to apply at least to a notebook, even if if you run it on demand.

08:14 - Yeah, definitely it would be cool to be able to blackify a notebook.

08:17 - Yeah, but nonetheless, this is better than what it was before, so it's pretty good.

08:22 - Do you know what else is really good?

08:23 - What's that?

08:24 - Learning awesome Python from Talk Python Training.

08:27 - That is pretty awesome.

08:28 Yeah, so this episode is brought to you by us again.

08:32 And if you're in the market to learn Python, we've got a ton of courses.

08:37 We're coming up on 200 hours of highly edited courses, So that's a ton of content.

08:42 And we have a special enterprise plan.

08:44 So if you're looking for team training and team events that are online, digital, you know, just shoot me a message and I'll get you info about that.

08:52 And pytest?

08:53 - Yeah, definitely.

08:54 If you are considering pytest or considering testing your code, please do test that.

09:01 And I would like to actually highlight, I brought up, somebody made a nice comment today and I wanted to bring it up.

09:08 Ken Uwens Clark, this came out a couple days ago, says he picked up my book, Python Testing with pytest, and started reading it, he was excited.

09:16 And just one hour later, he posted another comment and said, "I've just finished the first chapter "and I can see I've barely scratched the surface." So, already learning something new in one chapter.

09:28 So that's cool. - Yeah, that's really cool.

09:30 Maybe help people test smarter, not harder.

09:33 (laughing)

09:34 - Yeah, well actually, that is the goal of the book.

09:37 But I also wanted to highlight an article by Luke Plant called "Test Smarter, Not Harder." And this is not like a huge article.

09:46 It's some nice opinionated, I like opinionated testing articles, good opinions there.

09:52 There's a lot of great advice, but I wanted to pull out a couple of his suggestions because I don't think that they're talked about much.

10:00 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, not the ones you've been given.

10:12 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.

10:18 So this is actually huge advice, I think, 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, and then make it if it isn't there.

10:31 But forget to do it while testing, and while testing is even more beneficial, I think, because you've got to be able to read your test code really fast and understand it quickly.

10:41 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, then pay attention to those tendencies to say, I really wish I had an easier API because that might tell you that maybe that new API should exist and maybe you should add it to your interface.

11:00 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 and look at the API or the classes or library whatever you're building look at that from the outside and go does that make sense is that the best way i wanna use it, is your first chance to put it in a practice as a consumer rather than a creator of it so if you don't if you're not the person in control of the api and you're just using a different api you can write a wrapper around that to make it make, You know just highlight the thing that's important for the test and not have to pass in a bunch of stuff that doesn't matter to the test but you have to pass it anyway.

11:39 Those are great suggestions the next suggestion is only right necessary tests specifically test test whose estimated value is greater than their estimated cost this is a judgment call of course but it does mean that at least some of the time you should be saying.

11:56 This test isn't worth it.

11:58 I know this is a controversial sort of opinion, but I go by this.

12:02 And if you have trouble convincing the people that you have to convince to skip a test, you can just say, "I'm prioritizing my tests, and that one's lower on the priority.

12:13 Maybe we can get to it later." The flip side of this, this is good advice.

12:16 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.

12:24 I mean, if you've got a static API and it's just fixed, and it's on PyPI, it's fine.

12:29 But if this is an application you're building, you might dramatically change the way things work.

12:34 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.

12:42 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.

12:50 And so it's not just, is it worth the value of creating the test, it's worth the value of creating and living with that test.

12:58 Yeah, test code has the same maintenance cost or more maintenance cost than production code.

13:03 Also, different parts of your workflow. So early on in a project, you're really learning how to do the problem and you're learning about the code.

13:12 So write tests that help you with that learning.

13:15 Don't write tests that solidify the API so it's hard to change.

13:19 Write the ones that help you learn about your code while you're putting it together.

13:24 Very nice.

13:25 So this podcast is pretty awesome.

13:28 And for episode 200, I wanted to get something good, a package that's good to talk about.

13:33 It might be the greatest package of all time.

13:35 Really?

13:36 Well, it's self-proclaimed, so a bit of a grain of salt.

13:39 It sounds really simple.

13:41 It has a crazy name.

13:43 And it actually is really quite useful.

13:44 So this next one is called US, as in the United States.

13:48 the greatest package in the world.

13:50 That's literally the name of it.

13:51 (laughing)

13:54 So this goes to, yeah, so Jerry Carbaugh reached out to us and said, "Hey, I created this package.

13:58 "I don't know, you think it's useful or not?" I'm like, "Oh, okay, it's kind of interesting." It's Python package on PyPI for working with states.

14:07 States, zip codes, those types of things in the United States, right?

14:13 And it seems like this could be motivation for things like the EU or some other place where you wanna understand the geography of it.

14:22 But this is really quite involved.

14:25 So I envision like, okay, well, maybe it's got like a list of the states and it's got the abbreviation or something.

14:30 It's got that, it's got all the territories.

14:32 It has the postal abbreviations.

14:35 It has associated press style abbreviations, which I don't really know.

14:39 It has FIPS codes.

14:40 I have no idea what FIPS codes are, but they're like lookup codes, different kinds of lookups you can do.

14:44 The capitals, the year of statehood, the time zones.

14:48 You can even do phonetic name lookup.

14:50 So like if you can't spell Mississippi, but you can make Mississippi sounds with letters, you can put that in there and it'll go and find it.

14:57 So like it basically do like lookups on misspellings, but if you get it like sounding right, it can still find it.

15:03 So maybe you accept typed input or some text field that says the state, but then you can do a lookup on that to get a more canonical representation.

15:11 Whether the state is contiguous, like Oregon, all one thing stuck together, or a very nice place like Hawaii that's broken into a bunch of islands, whether it's continental or not, similar difference there.

15:25 That's pretty cool.

15:27 If you want the geographic boundaries of them for like geospatial work, it comes with URLs to shape files that come out of the US Census.

15:35 At least they're accurate up to 2010.

15:37 - Okay.

15:37 Well, also one of the flags is obsolete.

15:40 I was wondering if there's obsolete states.

15:42 - There are obsolete states, yeah.

15:44 So I think more territories are obsolete.

15:47 I don't think there's states that are obsolete, but there's territories that are, for example, like the Philippines, I think used to be a US territory, but it's no longer, something like that.

15:56 There's a few examples in the docs.

15:58 - Oh, okay, cool.

15:59 - Yeah, and they also have an environment variable to indicate whether Washington DC becomes a state.

16:06 You can set a flag that will trigger that to show up.

16:09 So it's future-proof a little bit.

16:11 - And it has a CLI, so you can type states space MD for Maryland, and you'll get a big long description of information about it.

16:19 - Well, with the prefix of the great state of.

16:22 - Yeah, it's interesting.

16:23 So is this more than you expected out of it?

16:27 Like when I thought, I thought it would just be like a list of states and stuff, but like all this lookup, all this information, this is pretty awesome, actually.

16:33 It's pretty in-depth.

16:34 - Well, no, it's pretty cool.

16:35 I just didn't, I don't know if I'd say it's the greatest package in the world.

16:38 - Oh, all right, well, there's always a PR.

16:41 You could always a pretty good package with respect to state management in the world.

16:46 Yeah.

16:47 Okay.

16:47 Now, actually, if you work with states, this seems super useful, regardless of whether you agree with the name.

16:52 Yeah.

16:54 I've got kids that are at home right now.

16:58 One that's started school, but started school like online.

17:03 So it's sort of an anticlimactic beginning to school.

17:08 And we still have like some a lot of time that.

17:12 They're devoting that i'm glad they're doing this to allowing teachers sometime during the during the week to prepare for all of this which means they've got kids have more free time than they had before.

17:21 So one of the things i was looking for was good learning software coding related learning activities for.

17:28 Kids that are have some spare time especially early on in the school year.

17:33 I can't remember who suggested this somebody on twitter suggested this but there's a video series that's part of ted ed that's called think like a coder.

17:42 The title says it's a ten episode series that will challenge viewers with programming puzzles.

17:47 As the main character a girl and her robot companion attempted to save the world that has been plunged into turmoil.

17:55 So i was trying to evaluate whether or not to highlight this on the show and i got like four episodes in just this morning.

18:03 Although it says it's a ten episodes series but i only count nine it's your it's your start counting it's zero base so it's off by one programmers.

18:12 I don't know. It doesn't really teach like I haven't got at least the first four episodes. It doesn't teach them like actual coding, but it talks about the concepts.

18:22 And that's what I really like about it. It's an interesting story. The animation is pretty good, but it'll introduce words in terms like loops for loops and tell loops while loops conditionals variables.

18:33 Logic permutations.

18:36 how to do searches tables and recursion and even some big notation and some other things but these are like terms that in.

18:44 Software and programming we use all the time and just assume everybody knows what we're talking about.

18:50 What are the things i really like about this is just defining and using those terms in a in a entertaining story so that when you really do start learning how to code it's not gonna be surprised.

19:02 Highlight with that i'm also reading to my daughter a book that i picked up called girls who code learn to code and change the world and it's a lot of inspiration there's actually a girls who code a project.

19:17 That does teaching and stuff but i don't know what they're doing right now during covid but the book is great and it's not it's not any language specific stuff.

19:25 I think there is some python in there, but that's not really the focus of it. The focus really is You know teaching a lot of the concepts and just getting people excited about it. So I wanted to highlight these two That's one of the biggest challenges. It's getting people feeling like this is interesting and this is for me and I should pay attention to it So yeah, that's cool I also want to throw a shout out to code combat.com. That's another really nice place that sort of has some of these ideas, go through and do like a little dungeon exploration and solve problems.

19:57 I think it would be a good follow on to the series. Like you've got the ideas from the series and then you can go write like super editor supported Python code to like in a little game world. So that'd be fun. Yeah. Yeah. We'll link to all that in the show notes. Absolutely.

20:11 So this next one is interesting. I ran across this just a few days ago and I definitely want I really want to talk about this because how many programmers out there have this idea of, "I've been building this software for other people, for other companies, and I just want to, I have this idea and it doesn't exist and I want to build it and put it out there into the world." Like surely almost every programmer has had this idea in some form or other, right?

20:38 Yeah.

20:39 So there's this project that is a pretty new project that goes along this path and it's called Keep the Score.

20:46 Keep the Score is like online software for scorekeeping.

20:49 Basically, if you've got like a soccer tournament, rock climbing competition, whatever, like those things probably don't exist anymore, but when we could be around other humans, and when we can again, this is gonna make a lot of sense.

21:02 You could have like a little online scoreboard that the parents could pull up and keep track of, or whatever, something like this, right?

21:10 That's basically what this app is.

21:12 It's a Python Flask app, and they wrote a blog post called the cost of running a Python web app with 55,000 monthly users.

21:19 So this explores like the infrastructure and how much did it cost to actually put it together, how are they doing it and so on.

21:26 So I thought it might be fun to just kind of talk through that a little bit and then do maybe a little comparison over to some of the Talk Python stuff.

21:32 - All right.

21:33 - Yeah, so I'm looking over the thing.

21:35 Their site's pretty cool.

21:36 It's hosted on DigitalOcean, as is all of our stuff, Python Bytes, Talk Python, whatnot.

21:40 So that's a really fair comparison that I'll make.

21:43 And they're using DigitalOcean and Firebase.

21:46 Currently have around 55,000 unique visitors and they have their servers and database over on DigitalOcean.

21:52 And I think they might be using Postgres as a service on DigitalOcean rather than hosting their own database server from what I can tell.

21:59 They also have Amazon Web Services.

22:02 Yeah, so for the numbers, DigitalOcean has cost them about $95 a month.

22:07 They have some AWS MetaBase stuff running over there at $60 a month for like reporting and whatnot.

22:13 They have a Google Cloud for a whopping $1.32 at Firebase.

22:18 DNS hosting at $5.

22:21 Discuss $10.

22:23 They said, of course, you can have a free one, but they put ads there and they don't like that.

22:26 So $10, they're paying for that.

22:29 And they said, well, okay, that's $171 a month.

22:34 Is this worthwhile?

22:36 Obviously, if you were Roden Schwartz, or you were Talk Python Training, like it would be obviously $171, like no big deal, right?

22:45 But this guy points out like, there this, I'm an indie developer, I have no revenue yet.

22:52 And I'm just trying to get this thing off the ground and I'm paying $171 a month.

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

22:59 - Yeah, I agree.

23:00 And it's mostly free and they're trying to figure out the monetization and you know, I think it's a cool project.

23:05 I actually hope they're successful and it's cool they're building it with Python.

23:07 But I don't know, it's an interesting trade-off.

23:09 I feel like so many people, I don't want this to sound at all critical of this guy, like what he's doing, it's working for him and that's great.

23:16 But I feel like a lot of people just in general, not necessarily this example, they envision a world where things are so much bigger and more powerful and more awesome.

23:26 Or more, like there's more users and it's more awesome.

23:29 And they got to be ready for that because when they get, when they land on like hacker news and all the people come, they've got to be ready for like a 50x traffic and stuff like that.

23:40 And I don't necessarily think that that's how it goes. Or, you know, if you're in the cloud, something like that happens, push the make it bigger button. And then it goes like, you don't have to do that beforehand. And actually one of the things they said, they, they ran into is they started out with a smaller server and they said, Oh, we want to make sure we have a bigger server just in case.

24:00 and they upscaled it and part of that upscaling like changes the I think it was probably the file system got larger, the disk got larger and once that happens you can't downscale it again you're like stuck without, unless you recreate it from scratch you can't downscale it again and so they have two servers they're like deploying to one and while they're deploying to one they take the floating, the Elastic IP and they switch it over to another one that keeps it running and then they deploy to the other one and it switches it over to the Like there's like this back and forth swap going on.

24:33 And that's actually how I do it at Talk Python on training site and stuff like that as well.

24:37 Having like two servers.

24:39 That said, this feels really high to me.

24:44 I'll give you some stats on Talk Python.

24:46 Just talkpython.fm, the website for the podcast, not the training site, not Python Bytes.

24:52 The reason I chose Talk Python is it's very similar to the numbers that this guy is using on the same infrastructure.

24:58 So talk, Python gets about 40,000 monthly visitors.

25:01 It's super hard to talk about unique monthly visitors.

25:04 Cause so many developer, especially in the developer space, because so many people have ad blocking turned on, which is how you, you know, like the third party cookies from apps like clicky or whatever, say you get this many.

25:16 Visitors and like 50% of that's blocked or something.

25:19 Right.

25:20 So anyway, you got to kind of estimate like, well, how much is blocked?

25:23 Is it 30% or who knows?

25:24 So anyway, it's around similar numbers, a little bit smaller.

25:28 in terms of visitors, but the podcast clients, oh my goodness, the podcast clients are crazy.

25:36 They're just pounding the server like all the time asking for the RSS feed.

25:39 So we get about 3 million requests for the RSS feed monthly.

25:44 That goes through, it goes through Python, it does some database stuff, it talks over the database and it gives back an answer.

25:50 I could cache that as a file, but then there would be like latency and inconsistent.

25:55 There's no need to not have that happen, right?

25:58 But that does, right?

25:59 So that comes through and that's about 120K requests.

26:02 So that's 320 gigs of traffic and 3 million requests just to answer the question, can I go download the file, which is much bigger, a weekly, you know what I mean?

26:12 So that's a ton of traffic.

26:14 And the server's back in that.

26:17 I have two servers 'cause I do this flip as well.

26:19 So there's zero downtime most of the time.

26:21 One of them is a $5 server.

26:23 And because I wanted to splurge, the main one is $10.

26:27 Because, hey, this is my whole business.

26:29 Like, it's worth five extra dollars a month, but it could easily handle it on five bucks.

26:34 So for example, I have it pulled up right now, and it's running at like 8% CPU usage, 6%, you know, it kind of varies, right, right now.

26:43 If it was on the $5 one, it would be like 12%.

26:46 It would still be fine.

26:47 And then there's also a dedicated MongoDB server that handles everything, but that's like $10.

26:52 Total cost, 25 bucks.

26:53 - Okay, well 25 is, okay, devil's advocate here.

26:57 $25 is way better than 171, but even $25--

27:00 - Yeah, I could do it at 20 if I wanted, if I just went down to the $5 server, which I could, but I don't really need to.

27:05 - But even at 20 a month, that's what, $240 a year?

27:10 - Yeah.

27:12 - For trying to do something nice and free for everybody?

27:14 - Yeah, I know.

27:15 What's really lucky is that I don't have to pay for the bandwidth for the stuff going through DigitalOcean, 'cause that would be like another $1,000 a month, at least, but that's included, so it's fine.

27:26 I feel like you could turn stuff down a lot.

27:28 Like for example, I think he's using Postgres as a service, which is probably, I don't know, I'm sure there's probably 50 bucks a month.

27:35 You could probably put that on a $5 server and just manage Postgres yourself.

27:39 Is that worthwhile?

27:40 I don't know, like how much of a pain is that to manage yourself versus like how do you do backups and all that kind of stuff?

27:46 But in the really early stages, I think you, if you're worried that an extra $100 a month a big deal, maybe you do it that way.

27:54 Also, by the way, my AWS bill is over $1,000 last month.

27:58 But that's just video delivery.

28:01 That's a different story.

28:02 That's just bandwidth.

28:03 And that's because of the training?

28:05 Yeah.

28:06 Yeah, yeah.

28:07 Okay.

28:08 So I could do it cheaper.

28:09 I could do it a lot cheaper, but it would be less good for people.

28:11 And for that, I'm trying to pick the best possible option.

28:14 So that's how that goes.

28:16 But anyway, I think it's interesting to sort of think about what does it cost?

28:21 And your point about if I'm doing something nice for everyone, it should cost less.

28:26 Yeah.

28:27 Well, I mean, motivation doesn't really get into it, but it's a very real thing.

28:33 It's a barrier to entry for people that maybe they had to scrape together just to get the laptop in the first place to start coding.

28:42 Yeah.

28:43 And if you're not in a Western democratic place where currency is pretty valuable or or the pay rate is pretty high, all of a sudden $175 could be 25% of your monthly income, which that's a huge number, right?

28:56 - Yeah.

28:57 - Yeah, so it could definitely vary depending on where you're located.

28:59 Yeah, anyway, pretty cool.

29:01 I think it's worth looking at and digging into, and I wish them the best of luck with this project 'cause it seems cool and it's built with Python.

29:08 Finally, if you wanna hear a deep dive into all this stuff that I was talking about, Dan Bader and I had a long chat about the infrastructure behind Talk Python and some behind real Python over on Talk Python 215.

29:20 I'll link to that as well.

29:21 - That's pretty serious, man.

29:22 We should do something funny.

29:23 - Yes, tell me a joke.

29:25 - Okay, so somebody shared this with us on Twitter.

29:28 And it originally Netlify posted it.

29:31 It's a conversation between two people.

29:33 Oh no, we lost the hackers.

29:34 Where did they go?

29:36 I don't know, they just ran somewhere.

29:38 - Ha ha, they just ran somewhere.

29:40 That's so awesome because I didn't get that joke reading it.

29:43 But when you say it, like, oh yeah, perfect.

29:45 (laughing)

29:47 - Well, I'm very concerned about making sure that everybody has a happy work environment and that they're safe.

29:53 And I've had to fill out some contracts and stuff.

29:56 It's so ridiculous, man.

29:57 I've had to fill out like vendor stuff for podcast advertising.

30:01 And they make me go through their stupid vendor onboarding thing at some of these big companies.

30:05 And I've got to answer like the general vendor information.

30:10 So what is your information?

30:11 Like, what is your location?

30:13 What is your bank account information so we can pay you.

30:16 What is your OSHA health policy?

30:21 Is there a chance that somebody is, like, are there dangerous ladders that people could climb?

30:26 Will it be forklifts?

30:28 I'm like, dude, this is podcast advertising.

30:30 There's no ladders, and there's definitely no forklifts.

30:33 Why are you sending me this huge 50-page form I gotta fill out?

30:36 Like, two pages apply to me.

30:38 Anyway, let's take this and turn it into the programming joke.

30:42 So, you know, you've seen those like number of days since serious injury at factory seven.

30:48 We're doing great.

30:49 Nobody hurt this week.

30:50 So how about this for a programming sign number of days since I've encountered an array index error negative one.

30:58 I love this.

31:01 It's a good joke, right?

31:03 Yeah, negative one.

31:06 So that's really big because you probably have her foot.

31:10 Well, you don't know how big though.

31:12 Is it a short and unsigned?

31:14 Is it like a, if it's a short, it's like negative 32,000.

31:16 But if it's a long, that's a really huge number.

31:20 It's like 4.2 billion, nine billion, whatever the overflow wrap is there.

31:25 - They probably just allocated a byte for it.

31:28 - Oh yeah, so it's, yeah, it's like 255 or whatever.

31:32 Yeah, less than a year.

31:33 Awesome.

31:36 All right, well, thanks, Brian.

31:38 Congratulations on 200, man.

31:39 - Thank you.

31:40 - Yeah, we overflowed into, we're into the 200s now.

31:44 - Congratulations.

31:46 - Oh, wait.

31:47 Let's just celebrate on 256.

31:49 - Yes, we will.

31:50 That's gonna be the full cycle.

31:51 - Yeah. - Yeah, awesome.

31:53 All right, well, thanks again.

31:53 - Thank you, bye.

31:54 - Thank you for listening to Python Bytes.

31:56 Follow the show on Twitter @pythonbytes.

31:58 That's Python Bytes as in B-Y-T-E-S.

32:02 And get the full show notes at pythonbytes.fm.

32:04 If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

32:09 where I was on the lookout for sharing something cool.

32:12 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.

Back to show page