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

Transcript #363: DNS Again? It's Always DNS.

Return to episode page view on github
Recorded on Tuesday, Dec 5, 2023.

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

00:04 This is Episode 363, recorded December 5th. I'm Brian Okken.

00:10 >> I'm Michael Kennedy.

00:11 >> This week, we are sponsored by ourselves.

00:13 We will plug our own stuff a little bit later.

00:17 If you want to follow the show, follow it at

00:23 Also, Michael and I are both on Fastadon as well, which is Mastodon.

00:28 If you're anywhere other than Fastadon also, that's fine.

00:32 You can still follow us.

00:33 But if you would like an invite, hit one of us up and we will send you an invite.

00:37 >> Mastodon has made it easier to start following people from other instances, by the way.

00:42 I don't know if you remember how it used to be.

00:43 You'd go and somebody would be like at, and it'd be like, "Sign in." You couldn't follow them, you have to sign in.

00:51 You're like, "But I have an account here.

00:52 What is this weirdness?" Now, if you say, "Follow," it'll pull a dropdown and say, "Give me a few letters out of your instance." Then we'll direct you over there where you're signed in to click "Follow." So it's a little bit easier to follow.

01:03 Anybody on Mastodon, it's still clunky.

01:05 I don't know why it's so hard.

01:07 >> What I usually do is, I've not tried that.

01:10 I usually pop somebody's whole, say, or something.

01:16 I pop it in the search bar.

01:19 >> That's what I did previously as well.

01:20 >> Yeah.

01:20 >> Yeah. It usually finds the person.

01:23 >> Yeah. You can even put just the whole URL of their profile without reordering it to their username.

01:28 >> But if I'm trying to find the URL, that's sometimes, yeah.

01:31 >> Indeed. Well, Mastodon is getting a little smoother.

01:35 Actually, Mastodon conversations are going to be featured at least in my stuff here somewhat heavily.

01:41 So yeah, let's talk about Fixit.

01:43 So Fixit is this, what's the best way to put it? It's probably a Flake 8-like.

01:48 They compare it to Flake 8.

01:50 This comes from Meta, aka Facebook, and it's a linter for their monorepo.

01:56 When you hear monorepo, that is not a monolith.

02:00 Ironically, a lot of times, the more broken up your code is, the more it fits a monorepo.

02:04 But anyway, they have literally a single repo.

02:08 Is it Git? I'm not sure, but something like a single Git repo for all of Facebook, which is just insane.

02:14 They want to lint that, and they want to have things like Black applied to it.

02:19 Black actually came from Lukas Lange, who was at Meta at the time, so funny.

02:23 But they don't use Black.

02:25 I don't know why they don't use Black.

02:26 They have some reasons.

02:28 Seems like Black saw some of them and could be probably adapted while Lukas was there.

02:32 But anyway, they don't.

02:33 So they had this thing called Fixit that goes through, and is more like Black even though they compare it to Flake 8, and that it not just finds problems, but fixes them and normalizes things like, where do your commas go in a list?

02:48 Or you have a plus to continue a line.

02:50 Is that at the end of the one line or the beginning of the other line?

02:53 Those kinds of things we're all familiar with.

02:55 So they built one called Fixit, and now they released another one called Fixit 2, that's supposed to be better, and they open-sourced it so people can check this out if they're interested.

03:05 So I'll tell you a quick few things about it.

03:08 Let's bump over to the Mastodon, not the Mastodon, Omnivore, other thing.

03:13 Because I have notes on this big long thing.

03:15 So it turns out that Python is super popular over at Meta, which is really cool.

03:21 They have production engineers and software engineers.

03:24 So production engineers are like software devs who do production, their main role is to do production.

03:29 They also have a whole Python language foundation team, which is pretty interesting.

03:34 The job of this team is basically to build tools for the rest of the team, and that's where this Fixit thing comes.

03:40 So one question is, why not just use, say, Black or Flake 8 or whatever?

03:46 >> Or a format.

03:47 >> Well, now we're getting there.

03:49 So it says, of course, there's alternatives to Flake 8, but for example, Flake 8 doesn't fix things.

03:56 It just tells you that there are errors.

03:58 It has limited support.

04:02 This is interesting for hierarchical configurations for different projects within a monorepo.

04:07 So even though it's a monorepo, maybe the API gets formatted this way, but the, I don't know, the DevOps code gets a different set of configurations because it's a different team, but you still want to just hit the repo with it.

04:20 >> Interesting.

04:21 >> Yeah. That's an interesting.

04:22 This is worth bringing up, I thought, because there are some interesting ideas and some interesting challenges.

04:27 Slow performance on large code bases.

04:31 Then another thing that they do a lot is they plug in custom rules, blending rules and correction rules at a hierarchical level, which is interesting.

04:41 Now, Brian, I don't know if everyone sees it, but I have a list of these four things, these four reasons of why not just X.

04:48 Three of them are green because rough absolutely hits all, rough space format hits all of those.

04:54 Rough format didn't exist, and I honestly wonder if rough format existed.

04:58 Is this a thing that gets created?

05:01 I'm not sure. I mean, it's an open question.

05:03 >> I didn't know that rough could do hierarchical configuration.

05:06 >> Actually, well, what rough can do is you can have a rough.toml that configures it at different levels.

05:13 Given the number of engineers and the fact there's a single repo, how hard would it be to automate, search this repo for all the rough.tomls, run rough that working directory?

05:26 >> Yeah.

05:26 >> Done. I don't think it inherently does, but in 30 minutes it does.

05:32 >> Yeah.

05:33 >> One person's time.

05:35 I wouldn't suspect as a company, we couldn't possibly have somebody write that automation.

05:39 That's way too much for us.

05:41 I think that obviously, I don't believe that's a dash-dash hierarchical option, but I think that could easily be added.

05:50 That's pretty cool. Here's the irony, is even with the one we built, it didn't contain the local linting rules or the hierarchical configuration.

06:01 Those are the core requirements.

06:03 It's like, okay, well, we redesigned it to this new one.

06:06 What's interesting is it works using the libcst module, which is a concrete syntax tree.

06:14 You often hear of AST or abstract syntax tree, which is like the intent of the code is to loop over this iterable, but it is not. The variable is named this, and there's two spaces here, and there's a comma.

06:26 It tries to throw away, just get to the essence, but the CST is the code just in hierarchy form, and which means if you want to fix it, that's way more applicable for these kinds of tools here.

06:37 Anyway, people can check it out.

06:38 It's on PyPI, and I think it's an interesting thing to contrast with Ruff.

06:44 Anyway, it's out there for people.

06:46 It's obviously tested on some pretty seriously large code bases, and it could be interesting, but I'm still going to Ruff space format dot for my money.

06:57 >> Yeah. Interesting comment from Grant in the chat.

07:03 Another YAML file for each sub-project as opposed to supporting PyProject.YAML.

07:09 >> Totally fair. In this case, I think it might be, you got to remember, this isn't just Python.

07:15 This is like every bit of code at Facebook.

07:18 >> Oh, yeah.

07:19 >> Right. It's probably React, PHP, optimized PHP, who knows how much stuff is in there.

07:26 >> Gobs of config files in each project.

07:28 >> Yes. You wouldn't want all the configs for all the languages all mixed together.

07:33 Anyway, but still interesting stuff.

07:37 >> Anyway. How would you like to talk about user interfaces?

07:42 >> We have been known to go on a gooey kick before.

07:46 It's been a while. Let's do it. I'm here for it.

07:49 >> All right. Samuel Colvin.

07:52 >> As long as you make it fast, Brian.

07:54 >> That was funny. The person that brought us PyDantic has worked very closely with FastAPI as well.

08:05 FastAPI and PyDantic work great together.

08:07 Now there's FastUI.

08:09 Well, FastUI is working with FastAPI, but it also works with other stuff too.

08:15 Samuel Colvin has just recently brought us FastUI, which looks like an active development.

08:22 It's been modified five hours ago.

08:27 I only heard about it last week and it's now at 1.8 thousand stars.

08:34 >> That's pretty awesome.

08:35 >> Anyway. What's this?

08:37 It is supposedly still a work in progress, so not production ready, but it's a way to build web applications and web UIs defined by declarative Python code.

08:51 There's a few points around this.

08:54 There's a bunch of parts of it.

08:56 It's a PyPI package, FastUI.

09:00 It brings in some models and some UI elements and components.

09:03 It's also an npm package, so it brings in a little React TypeScript stuff.

09:10 What does it really mean though?

09:12 It means that you can look at, there's a couple of examples he shows.

09:17 You declare it like this.

09:20 You're declaring a FastAPI endpoint like user table or something like that, let's say endpoint.

09:28 It's going to return this thing that doesn't look like HTML, and it doesn't quite look like Python either, but it is.

09:37 There's a CPage object which wraps the page.

09:41 There's components inside, which is a list of things like headings and a table.

09:46 I don't really know what this looks like, but it's not bad.

09:51 I'm excited to play with it.

09:54 But in a few lines of code, he shows a fairly workable, clean-looking user interface.

10:00 Then along with it, for the release, he released a full demo which you can walk through a UI demo that is really zippy and works pretty good.

10:11 The tables one is fun because it shows a whole bunch of names of cities and populations, and you can quickly filter by country and it's super fast.

10:23 I think you get a lot for not much work if the workflow looks okay.

10:30 So you've done more UIs than I have. What do you think of this?

10:33 >> It's interesting.

10:34 >> Okay.

10:35 >> So when I think of building web apps for myself, I don't shy away from saying, "Oh, I have to write HTML or there has to be a template model," or something like that. That's okay for me.

10:47 >> Yeah.

10:47 >> But I've been doing it for 15 years at least, I would say.

10:51 I probably started doing web stuff in 2000, so that's a little bit more than that.

10:55 Anyway, that's a long time, so I'm super comfortable with it.

10:58 But I know there's a lot of use cases where I just want something quick and easy, I want a simple deployment, or I'm not a web developer and I just want to get this up and going.

11:07 I like it. A lot of the low-code, zero HTML styles that I've seen like, "Oh, here you can do it in Python," have a top-to-bottom linear way of creating the code, and I super dislike that.

11:23 First, I'm going to create a page object, then I'm going to say page.components.add, then I'm going to go page.components.add, and then I'll get a table and I'll say table.rows.add.

11:33 It makes it really hard to see the visual look.

11:36 So if you go check out the fast UI at GitHub ReadMe, you'll see that the structure and the indentation of the code matches the DOM, and that's quite nice.

11:46 >> Yeah.

11:47 >> So I really like that aspect of it.

11:49 It reminds me a lot of Flutter, where you write code in the exact same way you've got, I don't know if you call it a DOM, but whatever the widget graph is called in Flutter, you do the same type of thing.

12:01 Like you'd have a body, and then the body has a child, and then the child can be some complex thing, and it's all nested in a very similar way.

12:10 So I think it's super interesting.

12:12 I think it will empower a lot of people.

12:14 >> I like the structure of the code matches the thing you're building.

12:18 That makes it way more appealing to me because that's part of what's nice about HTML.

12:21 You go in there and you're in the table and you're indented in the table visually.

12:25 You know what I mean?

12:26 >> Yeah. There's a lot of fun stuff here too.

12:30 So even like forms and stuff that you can do with even server-side validation.

12:35 So that it's not just a component library, but also some React and some other things going with it is pretty cool.

12:46 Kim brings up something that I thought of directly for myself.

12:51 He says, "It's got a lot of appeal for enterprise-grade web apps where boring simple table layout is more than enough." I was thinking of it like that data set thing.

13:04 Basically, I've got a database that I want to front end for, but it's not necessarily SQL or something, or data set just freaks me out maybe.

13:13 But something like this is I think pretty nice.

13:17 I think a lot of enterprise projects will be using this to play with.

13:22 So I'm actually thinking about it for my own internal project myself.

13:27 >> Sure. It looks quite neat and being based on FastAPI.

13:31 Boy, would it be cool if there was a run it locally as an electron app like thing.

13:37 >> Yeah.

13:37 >> Where the electron app shipped with Python and just ran a hidden.

13:41 >> Build a user interface.

13:43 >> So it becomes a make it a thing, an exe or I can share with my users.

13:48 >> Yeah.

13:49 >> But yeah, I agree with Kim that forms over data, this nails it.

13:53 >> Like you said, a lot of web developers, it doesn't take that much web training to write some HTML.

14:02 To do it well, it takes a little bit but to do it good enough for a lot of projects, it's not bad and a normal HTML, CSS and the normal tool chain is still pretty good or build a Django app or something.

14:18 But there's a lot of people that don't even want to get into it at all.

14:23 So I think this is a good fit for that.

14:26 >> Indeed. Chris may ask about, hey, I wonder what the escape hatch story is.

14:31 It's always a good question when you're in a framework that defines so much for you.

14:35 Like, well, what if I went a little bit more?

14:37 Then what? So yeah.

14:39 >> Yeah.

14:40 >> Brian, is it a good time to remind people that maybe they should check out a course or two?

14:45 >> Yeah, sure.

14:47 So I'll remind people that this episode is brought to you by both of us, Michael and Brian, and the thing that I've been working on a lot lately is courses.

14:58 and that is the complete pytest course.

15:05 It's almost done, will be done this month.

15:07 I've got 13 out of 16 chapters done so far and it will grow then.

15:12 After I've gone through the entire Python testing with pytest book, there's extras there.

15:17 As I've noted before, there's a lot of stuff at the end that has changed a lot like talks and CI and things, since the book came out.

15:25 So I'm pretty excited. So how about you?

15:28 >> Yeah, very awesome. I just want to highlight maybe some of our new courses.

15:33 We have an early access Visual Studio Code for Python Developers course, which is partway done but available in early access mode.

15:40 If you want to check that out. We have a Data Science Jumpstart with 10 projects from Matt Harrison and HTML plus Django course by Christopher Trudeau.

15:50 So all of those are excellent and we've got plenty more coming as well.

15:55 So people just check those out.

15:56 >> Sweet.

15:56 >> All right, let's go to Mastodon.

15:58 So this one's not exactly Python, but there are Python elements to it.

16:03 Basically, I said, we talked about this after the show and I thought, why don't I just have this conversation for people out there, I'll throw out a list.

16:11 It's like, I've got a bunch of e-mails, want to be able to reach out to people.

16:15 I want to run a newsletter or I want to run a training company in a podcast, and I want to gather those up.

16:21 For many years, I've been using MailChimp and they just increasingly rub me the wrong way, just on principle.

16:27 I'm not super keen about it.

16:29 Three months ago, they're like, "Oh, we got to raise our prices because the database storage for your 20K or whatever it turns out to be is really rough.

16:37 So it's another $100." Then the next month, like, "Oh, we're going to need to raise our prices.

16:41 It's another $100 on top of the previous another $100." I'm just like, "I'm not really using a lot of this." I want to look for something else.

16:48 So I went to Mastodon, I said, "Hey folks, MailChimp alternatives," and boy, oh boy, we get a ton of conversation about this.

16:56 So I've gathered this all up and put the results of that into a list that I posted on the show notes.

17:05 So I just want to run through this really quick because there's some interesting choices for people that have small or large mailing lists.

17:11 They come from all these different places and interesting choices.

17:15 So for example, one of them is called Email Octopus, because it can send like eight times as much emails like a regular, maybe four, like a two-handed creature.

17:25 With all of its eight arms, it can really send email.

17:27 Now, so this one is email marketing, which is interesting.

17:31 There's ListMonk, which is an open-source, free, self-hosted newsletter and mailing list manager.

17:37 Interesting, right? With 12,000 GitHub stars.

17:40 There's Kilia, which is similar, is also open-source, gemmocked in Deutschland, made in Germany.

17:47 Very, very cool and looks kind of visually nice, right?

17:50 There's Mailie Herald, which is a Ruby on Rails one, also self-hosted, which is kind of fun.

17:57 There's SendPortal again.

17:59 So I didn't know about so many of these open-source ones, and that's kind of why I thought it might be interesting to point this out to people on the show, right?

18:06 Like there's actually a bunch of open-source ones.

18:08 Quite sadly, I haven't found a decent Python one.

18:10 So there's that.

18:12 There's Brevo, which is another one.

18:14 ButtonDown, this one is not open-source, but it is made with Python open-source.

18:19 So I talked to the guy who runs ButtonDown, and this one is written in Django.

18:23 So if you want your newsletters powered by Django, I don't think it's open-source, but anyway, pretty neat option there.

18:31 There's Zoho, which is pretty cool.

18:33 Sendy, here's another cool one.

18:35 Sendy is also self-hosted, but it's not open-source, but you buy it once for like $70, and then you run it on your system.

18:44 And what's cool is it hooks into AWS SES, which is our simple email service, which if you send a bunch of emails, you probably have.

18:51 I don't. I do, but I don't use it.

18:52 I have SendGrid, which it also works with, and Mailjet and Elastic Email.

18:56 And the thing that's cool about these is you can send like 10,000 emails for a dollar, right?

19:01 And it's based on consumption, right?

19:02 Like even if I don't send a mail in MailChimp, it's many hundreds of dollars to just say, "Well, we're going to keep your database records fresh for you.

19:10 We'll sit here." But this one, it's like, you know, they say a hundred times cheaper.

19:15 I mean, obviously it matters how you use it, but you plug it into one of these super, super simple things, and they'll even set it up for you.

19:21 You can pay them like another 70 bucks and they'll set up a server, an Ubuntu server or Linux server, I'll set up for you.

19:26 So this is what I'm actually thinking of going with potentially.

19:28 And there's ConvertKit, Mautic, I don't know, open-source marketing instead of just email, Constant Contact.

19:37 I don't have any relations with any of these, by the way, folks, GetResponse.

19:40 ConvertKit, all of those.

19:42 So if you want to see the Mastodon conversation about why people suggested them, some people are like, "Oh, I worked with that, but it sucked, don't use that," and so on, you can check it out.

19:52 So I thought there's probably enough people out there who are going like, "I have this problem, and I just see so many choices, and what are they?" Maybe there's open-source, maybe there's some Python thing.

20:01 So there it is.

20:02 - So we don't have a solution, but you've got something.

20:05 Well, I'll-

20:06 - I can report back to people how things go.

20:09 So it's a fork in the road for me, right?

20:12 On one hand, I don't really do, I don't do any tracking of people, and so I don't know, like, retargeting and all these kind of like campaigns where like, if you come and visit this page, but then two days you visit that page, then we're gonna send, you know, like that kind of stuff.

20:25 I don't really do that.

20:26 So I just basically send emails to people.

20:29 In that case, right, you should be looking at something simpler.

20:32 Maybe one of those open-source ones is pretty nice.

20:35 But if you want to do really interesting automations, which maybe I should look into, I don't know, then maybe one of the real simple ones is not the right choice.

20:43 So I should either go way more simpler or more advanced, but I'm in this like middle ground paying tons of money for something that I don't really appreciate.

20:51 And I've also, finally wrapping this, put a bow on this, people have said, "Well, you know, "you can just use mail merge with Google Sheets "and like send it out to your Gmail." Like, no, that's awesome if you run like a soccer team and you want to send them a message or something like that.

21:06 But if you have to be subjected to the US Can Spam Act, the GDPR, people delete my stuff, delete my info you have on me, I want to unsubscribe or want to partially unsubscribe or I might mail bounced and they're gonna stop sending, like all of that, you can't just like automate send.

21:25 Even out of send grade is not enough, right?

21:26 You need to have a whole backend that like deals with all that crap.

21:30 And that's what a lot of these like open-source ones bring.

21:32 So anyway, pretty cool.

21:34 - Newsletter is, having a newsletter is more complicated than people think because it just is.

21:40 - It's way more complicated.

21:43 - And the weird thing that like the first time I tried to set one up was that you have to put your address down and so it's kind of a weird work.

21:52 It makes sense, but also it's weird.

21:55 - But it kind of doesn't make sense.

21:57 - It kind of doesn't make sense.

21:58 - Yeah, yeah, yeah.

21:59 Like, do I really just have to put my house there?

22:01 What can I put there?

22:02 But because the US Can Spam Act, I think is the reason that that is there.

22:06 And that's the government, right?

22:09 Like maybe we should have cookie banners that everyone clicks like five times an hour a day for the rest of their life.

22:16 That's gonna make things better.

22:17 - Well, I used to like, I know we've done this enough, but sorry about that.

22:22 I used to do MailChimp, but I had a PO box set up just for that.

22:28 And I was like, I don't use it for anything.

22:30 So instead of paying the post office, I switched to paying ConvertKit because one of the things ConvertKit does is you can use their address, which is interesting.

22:41 But I'm still on the fence on ConvertKit.

22:44 I'm trying it out.

22:45 So we'll see.

22:46 - Yeah, we can both report back to people and see, but it's tricky stuff.

22:50 So anyway, hopefully that helps the folks.

22:52 - Now, completely change of gears, back to command line interfaces.

22:56 I talked about user interfaces on GUIs, but let's talk CLIs a little bit.

23:01 So back on episode, what was it?

23:04 361, we talked about appeal, and I've talked about arc parse and click and typer and stuff like that before.

23:12 Appeal was another one.

23:14 And this all came out because I did an episode on Python test about arc parse applications and testing.

23:22 So somebody, actually, Sander76 on Fostadon, contacted me and said, "Hey, there's a bunch of other options "other than the ones you've covered so far.

23:34 "Have you looked at these and how do you test them?" I don't have an answer about how to test them, but I was interested in this whole kind of line of things.

23:41 So there's a set of command line interface tools that instead of arc parse style or something of telling, defining flags, they define it based on a configurable object.

23:56 So his clipstick, for instance, let's start with Tyro, 'cause this is one of the early ones that's kind of easy to figure out.

24:05 Tyro is a command line interface tool that you can use data classes or Pydantic or adders to define all the options.

24:16 So for instance, here's an example showing the video.

24:21 You can take a, you import Tyro, and then you define a data class with types on a bunch of arcs.

24:29 It doesn't matter what it is, what's called, but you have a class with a bunch of elements in it.

24:34 And those are the things that you can pass to your application now.

24:37 And then you just, you implement a Tyro CLI application.

24:41 That's the arguments.

24:44 And that's, it's kind of cool on parsing arcs that way.

24:48 So that's Tyro.

24:50 And then there's clipstick, which is kind of cute.

24:53 Like CLI, like clipstick.

24:55 Yeah, anyway, that defines all of your types within a base model, like from Pydantic, a Pydantic base model.

25:05 And then you can define a whole bunch of types in there.

25:08 And then you can, and it has help and all that stuff.

25:11 So basing it on a Pydantic object.

25:14 And then also there's a nicely designed website called the, with Pydantic ArgParse.

25:21 So ArgParse with Pydantic.

25:24 So there's another one that's defining arguments based on a base model.

25:30 And I just, I haven't played with these yet.

25:33 I just wanted to report back that these are some different ways to set up user interfaces using like Pydantic or data classes or adders or something like that as an object.

25:45 And then you have, instead of, you get like this args object.

25:49 Instead of having a whole bunch of different elements, you have like this object with all of your arguments that you can pass around.

25:56 And since it's things like Pydantic, you can do things.

25:59 I haven't played with it, but I'm guessing that you can do things like limit the scope.

26:03 So it's not just an integer, but it's an integer between one and five or something like that.

26:08 - Right, yeah, that's cool.

26:10 - Yeah, so these are fun.

26:11 - Those are super fun.

26:12 Yeah, Pydantic is great.

26:14 Typing for this kind of stuff is great because it's usually not open-ended, right?

26:18 - That should be a number.

26:20 And if it's not, it's gonna be a problem or that should be a string for the host name that's required.

26:24 All these things like really map over to that validation side of Pydantic.

26:27 - But I do want to, so from Sandra 76's question, how do you test these or is testing easier?

26:35 It is a good question.

26:36 And I've put it on my to-do list for January or sometime in 2024 to take a look at.

26:43 So I'll have to report back about that also.

26:46 - Yeah, very nice, very nice.

26:47 So it's the Samuel Colvin and team day for you with fast UI and the Pydantic-based stuff.

26:54 Yeah, indeed, good stuff.

26:55 All right, extras, you want me to do mine first?

26:58 - Yeah, let's hit yours first.

26:59 - All right, well, I have one and it's super quick.

27:02 So I just, there was this announcement here that Google is, Google Chrome in particular is looking to limit ad blockers and start limiting how much control people have over their privacy and data and stuff with what's called the Manifest V3 API for basically for using extensions.

27:24 And the main rule here is that they're limiting how many domains and rules you can apply to block, basically to limit network traffic.

27:32 So you can say, well, there's 500 ads you can block, but those are the only 500, right?

27:38 Which really limits it.

27:39 So people were whining, I'm like, you know what?

27:41 Why don't I just write an article?

27:42 Because like I could turn all that stuff off and I don't care at my house.

27:46 And you could too, just instead of worrying about what these browsers are doing, just go and turn on a network level ad blocker.

27:52 Like you can use Next DNS, which I've talked about before, or you can, if you want to run your own server and only have it when you're home, you can use PyHole, which I know that's super awesome, but Next DNS is a service, which so when you're at the coffee shop or traveling or on your phone, you can also have the benefit of PyHole.

28:09 But anyway, I talked a lot about how that works and how you set it up with some cool graphs, like 10,000 block queries on my network for just two people for a little bit.

28:17 And also this is all great.

28:19 Once you set this up though, when you get to a place that says, hey, you have to disable your ad blocker or you can't watch this movie, read this article.

28:25 You're like, you know what?

28:26 I hate you, but just for a minute, I have to do this 'cause I really, really need to get here.

28:30 It talks about how you can set up a second browser.

28:32 Like for me, it's Firefox, not Vivaldi, like Vivaldi's my main one, but Firefox, I set it up to use a DNS over HTTPS, but one that doesn't block like Cloudflare or something that doesn't filter anything.

28:43 So if I have to escape my blocking network for whatever reason, I can just run Firefox and it tunnels out of all this restrictions, which is usually nice, but when you need to turn it off, you gotta turn it off.

28:54 So there's quick article, essay, whatever you wanna call it for people to check out.

28:58 - Yeah, things like that still bug me though.

29:00 Like the turn off ad blockers, it can't be that high of a percentage of the population that's turning them off.

29:07 So it's weird. - Yeah, I know.

29:09 Yeah, there was one show, it was like Peacock or Paramount.

29:14 One of those streaming platforms would not let my wife watch some show because it says she had her ad blocker on.

29:21 Of course she didn't, she was on the wifi, which was blocking everything.

29:25 And also the side, the extra benefit here is this means your mobile apps have ad blockers built in.

29:30 This means your TV has an ad blocker built in.

29:32 This means like everything has an ad blocker built in, not just your browser, right?

29:35 So all this whinging over like whether or not you can do blocking in a browser, like you could just do better and it's not even your problem anymore, right?

29:44 - Yeah, we'll have to check this out.

29:45 - So yeah, it was super, she's like, "Well, Michael, how do I watch this?" I'm like, "I don't know actually, I'm sorry, "but I don't wanna turn it off for the whole everything.

29:53 "Like I just wanna let you watch your movies.

29:54 "How do you do that?" So that's in there as well.

29:56 - Okay, cool, nice.

29:58 Okay, I've got a few extras, won't take long though.

30:01 Django 5 released yesterday.

30:04 We've already talked about all the cool features of Django 5, didn't we?

30:07 I think you covered it a couple of weeks ago.

30:10 But I just noticed that it's not a beta or anything anymore.

30:15 It's released, so as of December 4th.

30:18 - It's all grown up.

30:19 - Yeah, so. - That's awesome.

30:20 - I'm excited to play with that, so that's fun.

30:24 And then something submitted by Paul Barry, so thank you, he says, "Brian seems to like Vim "and you can use Vim key bindings in a lot of places." And so he sent over the Vim key bindings everywhere, the ultimate list.

30:38 And it is a GitHub repo with a whole bunch of awesome things like debuggers and like Vim PDB.

30:47 I didn't know you could do that.

30:48 That'll be fun.

30:50 IPython, you can turn the Vim key bindings on with IPython.

30:55 Anyway, quite a few fun settings and telling you how to do it for different things.

31:02 - Even email clients, look at that.

31:06 - Yeah, none of them I use, but I used to use Mutt a long time ago.

31:09 - Yeah, I don't see mine either, but that's--

31:13 - Thunderbird, I should try that.

31:15 - Yeah. - So, okay.

31:17 So, and then I've got, for my last extra, I have a little drama.

31:21 So I talked about last week that I think that Python, or we have before, that Test Encode is now Python Test, my other podcast, but I left it on the domain Test Encode for a while.

31:33 But recently I tried switching it to podcast.

31:38 So what we're looking at now is

31:42 So the new URL is that.

31:44 But if you just go to, there's a link to the podcast.

31:48 So you can find it that way.

31:50 There's

31:52 Anyway, what do I do with the old domain?

31:54 I redirected it, but it didn't work.

31:56 I don't know what I did wrong.

31:58 I contacted Namecheap and they said, "Looks fine to us." So not sure what went wrong.

32:04 So I changed it, changed the DNS settings last night to just point to like a small site.

32:11 So a small site that looks like this, this morning, it just says, "Hey, I'm here at Test Encode.

32:17 The podcast moved, it's over there." And so just so that it won't 404 on people.

32:23 And I also have some redirects.

32:24 So if you say like, it'll redirect to the 23rd episode over on the other one.

32:31 Awesome, except it didn't work last night.

32:34 I was pulling my hair out.

32:35 And then I woke up this morning and it worked on my phone, but not here yet.

32:40 So I know that there's this thing of saying, if you ever muck with DNS, it can take up to 72 hours to like ripple through the internet.

32:48 I haven't ever had to deal with that before.

32:50 It's always been pretty quick whenever I muck with DNS settings.

32:54 Apparently I'm hitting that.

32:55 So hopefully in a few days, it'll be all resolved.

32:58 And so now I have to reset my days since it last DNS problem to zero.

33:03 - Days since last, oh my God, that is so amazing.

33:08 I love it.

33:09 - So I'm showing an Etsy.

33:11 I think you can find them lots of places, but there's an Etsy sticker that says zero days since it was DNS.

33:17 And in parentheses, it's always DNS.

33:20 - It is. - Anyway.

33:22 - Oh my gosh, Brian, are you foreshadowing here?

33:27 - Maybe.

33:28 You know what I did this whole weekend?

33:28 I have two things to cover from my extras.

33:30 - Okay.

33:31 - Well, I covered the one and I also just realized I wanted to give a quick mention just in case.

33:36 I spent my, I don't have a thing to show, so just leave this up 'cause it's perfect.

33:40 I spent all of the weekend and a good chunk of Monday migrating domains from different places.

33:47 Have a bunch of old ones at GoDaddy because 15 years ago, that seemed all right.

33:53 - Yeah.

33:54 - And they're super hard to get out of there.

33:56 So I've got a bunch at Google Domains 'cause I thought Google Domains is beautiful until Google decided to shut that down because apparently it's too much work to store a DNS file that's 500 characters.

34:08 I don't know.

34:09 - 'Cause it's a commodity now and they can't make money off of it.

34:12 - I know, I know.

34:13 Anyway, I can understand it, but anyway.

34:15 So I had, well, I don't want to step on that thing that's shutting down.

34:18 I got to move that off and I got some others in other places.

34:21 So moving that all together, holy moly, does that take some time.

34:25 And sometimes they move quickly.

34:26 Sometimes they don't.

34:28 Some of the domains have security turned on that if they transfer, it takes three days for it to disable but the domain will transfer right away.

34:35 But if you transfer it to, you reset it too quickly, it'll like just permanently stop working.

34:40 Some of them have to have SSL as part of the DNS definition.

34:44 Like .dev requires only SSL.

34:48 But if you want to use Let's Encrypt, well, it's got to resolve to someplace but it can't resolve to someplace.

34:52 It still has SSL.

34:53 You're like, okay, who decided to invent a catch-22 for domain names?

34:57 Like, oh, ah.

34:58 So the last, one of the last ones switching is, which I requested after a 45 minute phone call, figured out why GoDaddy couldn't give me the access code to do the switch.

35:10 I finally did this morning and I got it.

35:13 But I hope everyone gets to hear from us after it switches.

35:17 The reason, the whole reason to tell this story is that for some reason it stops working.

35:22 It will be back.

35:23 I apologize.

35:24 I'll get it.

35:25 I think it's going to go seamlessly.

35:26 Sometimes I do, sometimes I don't.

35:28 Fingers crossed for this one.

35:29 - So we need to buy these stickers in bulk then.

35:32 - We're going to zero days since it was DNS.

35:35 It's always DNS.

35:37 Yeah, so we need to get those ordered now.

35:39 Mojo is asking where I ended up.

35:42 I ended up, let me do it like this so I don't give away the joke.

35:46 I ended up at

35:49 - Okay.

35:50 - It's the one thing that they do.

35:51 They don't do other stuff.

35:53 They don't kill white rhinos for sport, nor do they not care about their DNS.

35:58 It's like their job.

35:59 So it seemed like a good place so far.

36:01 Fingers crossed.

36:02 Thank you, Robert.

36:03 All right.

36:04 So you already had probably the best joke for the show, but I've got a joke as well.

36:07 You ready for it?

36:08 - Okay, yeah.

36:09 - Okay.

36:10 - Oh, I love this.

36:10 - So yeah, so Chris, no, Josh Collinsworth, sorry, came up with this thing and it looks like some kind of code he's written.

36:17 It's over on code that generates these.

36:20 So it's an honest LinkedIn notification generator.

36:25 So you go to like your activity or your notifications and it tells you stuff.

36:30 Well, this one tells you stuff that is more in line with the reality of LinkedIn rather than what LinkedIn wants to tell you.

36:38 So here's a picture of this woman.

36:39 It says, "Congratulate a near stranger for tears at a job you didn't know they had." - That's awesome.

36:45 - Yeah, it's so good.

36:46 There's like a blurred picture of somebody.

36:49 It says, "Someone looked at your profile." Who?

36:51 We're holding that information for ransom.

36:52 It says, this smiling guy says, "Follow the worst coworker you've ever had for their sudden unsolicited insights." And it just goes on and on.

37:02 I think it even has infinite scroll.

37:04 "Somebody connected with your first manager from your job in 2014 reacted to a former classmates post.

37:10 Thought you should know.

37:12 Wannabe influencers shared an incredibly crappy opinion.

37:16 Just for the engagement, click to engage." Never hire anyone who writes CSF, ever.

37:20 No CSS.

37:22 So on and so on.

37:23 It's just, it's so good.

37:25 "Wish that guy who made you cry in the bathroom a happy birthday." - That's great.

37:30 Oh, good.

37:31 There was a, did you already get the one where it was like free work, the free labor one?

37:35 Oh yeah.

37:36 - No, where is it?

37:37 - No, right there.

37:37 You're one of the few experts invited.

37:40 - Oh yeah, yeah.

37:41 You're one of the few experts invited to slash, do free unpaid labor.

37:45 Rather, "Add to this collaborative article.

37:48 How do you exploit users without them noticing?" - Well, I've been getting those like a whole bunch lately.

37:53 And I actually clicked on it when I'm like, what are they talking about?

37:56 Oh, they want me to write articles for free?

37:59 No, I'm not doing that.

38:00 I got one this morning even.

38:04 So I got not one of these, but I got a congratulate John Gould on his new, or Gould on his new promotion.

38:11 And I'm like, he owns the company.

38:12 I don't understand.

38:13 (laughing)

38:15 - I don't understand.

38:17 - Good little pat on the old back there, John.

38:19 - Good job giving yourself a promotion there.

38:22 - Exactly.

38:23 Chris Taylor and 36 others at Soul Sucking Corporation shared this post from the CEO in hopes of avoiding the next round of layoffs.

38:29 These are good.

38:30 - Get a lot of those, yeah.

38:32 - All right, well, I don't know if it's too dark, but that's what I brought for the joke.

38:36 - I think it's great.

38:36 - I think I do too.

38:38 - I kind of like LinkedIn to like keep in touch with people and keep up your resume and stuff like that.

38:43 But I don't actually ever use it as a finding new articles through that service.

38:49 But anyway.

38:50 - There's a whole group of people who do.

38:51 I don't think I'm part of it either.

38:52 - Yeah, I'm not the target audience.

38:54 So it's all right.

38:55 - Yeah.

38:56 - All right, well, thanks again for a lovely Python Bytes.

39:00 - Absolutely, bye.

Back to show page