Python Bytes - #363 DNS Again? It's Always DNS.

Episode Date: December 5, 2023

Topics covered in this episode: Fixit 2: Meta’s next-generation auto-fixing linter FastUI Mail list / newsletter conversation CLIs from type hints Extras Joke See the full show notes for this ...episode on the website at pythonbytes.fm/363

Transcript
Discussion (0)
Starting point is 00:00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds. This is episode 363, recorded December 5th. And I'm Brian Ocken. And I'm Michael Kennedy. And this week we are sponsored by ourselves, so we will plug our own stuff a little bit later. And if you want to follow the show, follow it at PythonBytes at Fostodon.org. And also Michael and I are both on Fostodon as well, which is
Starting point is 00:00:28 Mastodon. If you're anywhere other than Fostodon also, that's fine. You can still follow us, but if you would like an invite, hit one of us up and we will send you an invite. Mastodon has made it easier to start following people from other instances, by the way. I don't know if you remember how it used to be. You'd go
Starting point is 00:00:43 and somebody would be like at mast.to and it'd be like, sign in. And you try to, you couldn't follow them. You have to sign in. You're like, but I don't have an account here. What is this weirdness? So now if you say follow, it'll pull a dropdown and say, you know, give me a few letters out of your instance. And then we'll direct you over there where you're signed in to click follow. So it's a little bit easier to follow anybody on Mastodon. It's still clunky. I don't know why it's so hard, but. So what I usually do is I, I'm not tried that. I usually like pop somebody's a whole,
Starting point is 00:01:13 like say at mkennedy at fostodon.org or something. I pop it in the search, the search bar. That's what I did previously as well. Yeah. Yeah. Usually, usually finds the person, right? So yeah. Yeah.
Starting point is 00:01:23 You can even put just the whole URL of their profile without reordering it to their username but if i'm trying to find the url that's sometimes uh yeah so indeed all right well it's mastodon's getting a little smoother and actually mastodon conversations are going to be featured at least in my my stuff here somewhat heavily so yeah let's talk about fix it so fix Fixit is this, what's the best way to put it? Probably a Flake 8-like. They compare it to Flake 8. This comes from Meta, aka Facebook, and it's a linter for their monorepo. And when you hear monorepo, that is not a monolith. Ironically, a lot of times, the more broken up your code is, the more it fits a mono repo. But anyway, it's they have literally a single repo. Is it Git? I'm not sure. But something like a single Git repo for all of Facebook, which is just insane. They want to lint that and they want to
Starting point is 00:02:16 have things like black applied to it. And black actually came from Lukasz Lenga, who was at Meta at the time. So kind of funny, But they don't use black. I don't know why they don't use black. They have some reasons. Seems like black solves some of them and could be probably adapted while Lukas was there. But anyway, they don't. So they had this thing called fixit that goes through and is more like black, even though they compare it to flake8 in that it not just finds problems, but fixes them and normalizes things like, where do your commas go in a list? You know, or you have a plus to continue a line.
Starting point is 00:02:50 Is that at the end of the one line or the beginning of the other line, right? Those kinds of things we're all familiar with. 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, right? So I'll tell you a quick few things about it and let's bump over to the mastodon not the mess an omnivore other other thing other thing because i have notes on this big long thing so it turns out that python is super popular over at meta which is really cool they have production engineers and software engineers. So production engineers
Starting point is 00:03:25 are like software devs who do production, their main role is to do production. And they also have a whole Python language foundation team, which is pretty interesting. And the job of this team is basically to build tools for the rest of the team. And that's where this fix it thing comes. So one question is like, why not just use say black or flake eight or whatever format? Well, Hey, now we're getting there. Okay. So it says, of course there's alternatives to flake eight, but for example, flake eight doesn't fix things. It just tells you that there are errors. Yeah. It has limited support. This is kind of interesting for hierarchical configurations for different projects within a monorepo. So even though it's a monorepo,
Starting point is 00:04:09 maybe like 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, right? Interesting. Yeah, that's an interesting, so this is worth bringing up, I thought,
Starting point is 00:04:24 because there are some interesting ideas and some interesting challenges slow performance on code on large code bases and then another thing that they do a lot is they plug in custom rules linting rules and correction rules her like at a hierarchical level which is which is kind of interesting right now brian i don't know everyone sees it but I have a list of these four things, these four reasons of why not just X. Three of them are green because rough absolutely hits all, rough space format hits all of those.
Starting point is 00:04:54 Rough format didn't exist. And I honestly wonder if rough format existed, you know, is this a thing that gets created? I'm not sure. I mean, it's an open question. I didn't know that rough could do hierarchical configuration. Actually, well, what rough can do is you can have a rough.toml that configures it at different levels. Right.
Starting point is 00:05:13 So 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 format dot in that working directory. Yeah. Done. You know what I mean? Right. It would, I don't think it inherently does, but in 30 minutes it does. You know what I mean? Yeah. Of one person's time. So I wouldn't suspect like as a company, like, well, we couldn't possibly have somebody write that automation. That's way too much for us. So, you know, I think that obviously I don't believe that's a, you know,
Starting point is 00:05:45 dash dash hierarchical sort of option, but I think that could easily, easily be added. So that's pretty cool. It says, even with, here's the irony is even with the one we built, the, it didn't contain the local rent linting rules or the hierarchical configuration. And those are the core requirements. So it's like,'s like okay well we redesigned it to this new one right and what's interesting is it works on the using the lib cst module okay which is a concrete syntax tree you often hear the 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
Starting point is 00:06:25 comment right it tries to like 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 right that's way more applicable for uh these kinds of tools here so anyway people can check it out it's on pipey and i think it's an it's an interesting thing to contrast with rough so So yeah. Yeah. Anyway, it's out there for people. It's obviously tested on some pretty seriously large code bases. And it could be interesting. But I'm still going to rough space format dot for my money. Yeah.
Starting point is 00:06:58 Yeah. Interesting comment from Grant in the chat. Another YAML file for each subproject as opposed to supporting PyProject tunnel. Yuck. But, you know. Totally fair. In this case, I think it might be,
Starting point is 00:07:13 like you got to remember, this isn't just Python, right? This is like every bit of code at Facebook. Oh, yeah. Right. So it's probably React, PHP, Optimize, PHP, Go. Who knows how much stuff is in there? Gobs of config files in each project.
Starting point is 00:07:28 Yes. Yeah. I mean, you wouldn't want all the configs for all the languages all mixed together, right? So anyway. Yeah. But still interesting. Interesting stuff. Anyway.
Starting point is 00:07:38 All right. How would you like to talk about user interfaces? You know, we have been known to go on a gooey kick before. It's been a while. Let's do it. I'm here for it. All right. So Samuel Colvin.
Starting point is 00:07:52 Why does he make it fast, Brian? That was funny. The person that brought us Pydantic has worked very closely with FastAPI as well. So FastAPI and Podendic work great together. Now there's FastUI. Well, FastUI is working with FastAPI, but it also works with other stuff too.
Starting point is 00:08:14 So Samuel Colvin has just recently brought us FastUI, which looks like an active development. It's been modified five hours ago, and it's already got, but I only heard about it like last week, and it's now at 1.8 thousand stars. That's pretty awesome. Anyway, so what's this?
Starting point is 00:08:37 It is supposedly a, it's 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. So there's a few points around this. There's a bunch of parts of it. It's a PyPI package, a fast UI,
Starting point is 00:08:59 so it brings in some models and some UI elements and components. It's also an NPM package, so it brings in a models and some UI elements and components. It's also an NPM package. So it brings in a little React type script stuff. So what does it really mean, though? It means that you can kind of look at, and there's a couple examples he shows, you declare it kind of like this. You're declaring sort of for a fast API endpoint,
Starting point is 00:09:26 like user table or something like that as an endpoint, 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. It's like there's a cpage object, which wraps the page. There's components inside, which is a list of things like headings and a table and it it i don't really know what this looks like but it's not bad so i'm kind of excited to play with it but in a few lines of code he shows a fairly workable clean looking user interface and then
Starting point is 00:10:01 along with it for the release he released a full demo, which you can walk through a UI demo that was really zippy and works pretty good. Like the tables one is kind of fun because it shows like a whole bunch of names and popular names of cities and populations. And you can quickly filter by country and it's like super fast. um i think you get kind of a lot for not much work if the if the workflow looks okay so you've done more uis than i have what do you think of this it's interesting okay um 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, right? That's okay for me. But I've been doing it for 15 years, at least, I would say. I probably
Starting point is 00:10:51 started doing web stuff in 2000. So that's a little bit more than that. Anyway, that's a long time. So I'm super comfortable with it. 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. I like it. A lot of the sort of low code, zero HTML styles of that I've seen like, oh, here you can do it in Python, have kind of a top to bottom linear way of creating the code. And I super dislike that, right? Like first I'm going to create a page object. Then I'm going to say page.components. right like 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 you know like wow like makes it really hard to see
Starting point is 00:11:34 the visual look so if you go check out the fast ui github readme you'll see that the structure and the indentation of the code matches the DOM. And that's quite nice. Yeah. So I really like that aspect of it. 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. 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 inherit uh nested in a very very similar way so yeah i think it's super interesting i think it will empower a lot of people i like the structure of the code matches the thing you're building that makes it way more appealing to me
Starting point is 00:12:20 because that's part of what's nice about html you go in there and you're like you're in the table and you're indented in the table visually. You know what I mean? Yeah. Yeah. There's a lot of fun stuff here too. So even like forms and stuff that you can do with even server-side validation.
Starting point is 00:12:36 So that it's not just a component library, but also some React and some other things going with it is pretty cool. Kim brings up something that I thought of directly for myself. He says, it's got a lot of appeal for enterprise-grade web apps where boring simple table layout is more than enough.
Starting point is 00:12:58 And I'm kind of thinking of it, I was thinking of it kind of like that a data set sort of thing. If basically I've got a database that I want to front end for, but if, but I, you know, it's not necessarily SQL or something or data set just freaks me out maybe.
Starting point is 00:13:13 But something like this is, I think pretty nice. And I think a lot of enterprise projects will be using this to play with. So yeah, I'm actually thinking about it for my own internal project myself. Sure, it looks quite neat and being based on FastAPI.
Starting point is 00:13:31 Boy, would it be cool if there was a run it locally as an Electron app-like thing where the Electron app shipped with Python and just ran a hidden FastAPI server so it becomes a make it a thing, an exe or a dot app I can share with my users.
Starting point is 00:13:48 Yeah. But yeah, I agree. I agree with Kim that forms over data, this nails it. Yeah. And like you said, if I mean,
Starting point is 00:13:55 a most web app, a lot of web developers, it doesn't take that much web training to write some HTML. And I mean, to do it well, it takes a little bit. But to do it good enough for a lot of projects,
Starting point is 00:14:09 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. But there's a lot of people that don't even want to get into it at all. So I think this is a good fit for that so anyway indeed and chris may ask about you know hey i wonder what the escape hatch story
Starting point is 00:14:31 is it's always a good question when you're in a framework that kind of defines so much for you like well what if i went a little bit more uh then what so yeah yeah brian is it a good time to remind people that maybe they should check out a course or two yeah sure let's I 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
Starting point is 00:14:56 is courses courses.pythontest.com and that is the complete PyTest course and it's almost done. We'll be done this month. Um, I've got 13 out of 16 chapters done so far and it will grow then, um, after, after I've gone through the entire Python testing with my test book, there's extras there. And as I've noted before, there's a lot of stuff at the end, um, that has changed a lot, like talks and CI and
Starting point is 00:15:24 things, uh, since the book came out. So it's pretty exciting. So how about you? Yeah, very awesome. I just want to like highlight maybe some of our new courses. We have an early access Visual Studio Code for Python developers course, which is partway done,
Starting point is 00:15:38 but available in early access mode. If you want to check that out, we have a data science jumpstart with 10 projects from Matt Harrison and HTMX plus Django course mode if you want to check that out we have a data science jumpstart with 10 projects from matt harrison and uh htmx plus django the horse by christopher trudeau so all of those are excellent and we've got plenty more coming as well so people should check those out sweet all right let's go to mastodon so this one's not exactly python but there are python elements to it and basically i said like we talked about this after
Starting point is 00:16:06 the show and I thought, you know, why don't I just have this conversation for people out there? I'll throw out a list. It's like, I've got a bunch of emails. I want to be able to reach out to people. I want to run a newsletter or I want to run a training company in a podcast, you know, and I want to gather those up. And for many years I've been using MailChimp and they just increasingly rubbed me the wrong way. It's just on principle, I'm not super keen about it. Like three months ago, 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. So it's another hundred dollars. Then the next month, like, oh, we're going to need to raise our prices. It's another hundred dollars on top of the previous another
Starting point is 00:16:43 hundred dollars. And I'm just like, I'm not really using a lot of this. And it's, I kind of want to look for something else. Right. So I went to Massadon and said, Hey folks, MailChimp alternatives. And boy, oh boy, did we get like a ton of conversation about this. And so I've gathered this all up and put the results of that into, um, into a list that I posted on the show notes. So I just want to run through this really quick because there's some interesting choices for people that have like small or large mailing lists, right? So they come from all these different places and interesting choices. So for example, uh, one of them is called email octopus because it can, how much it can send like eight times as much email as like a regular, maybe four, like a two-handed creature.
Starting point is 00:17:25 With all of its eight arms, it can really send email. Now, so this one is email marketing, which is kind of interesting. There's ListMonk, which is an open source, free, self-hosted newsletter and mailing list manager. Interesting, right? With 12,000 GitHub stars. There's Kalia, which is similar. There's also open source, Gemacht in Deutschland, made in Germany. Very, very similar. It's also open source. Gemacht in Deutschland, made in Germany.
Starting point is 00:17:47 Very, very cool. It looks kind of visually nice, right? There's Melee Herald, which is a Ruby on Rails one, also self-hosted, which is kind of fun. There's SendPortal. Again, 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? There's actually a bunch 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? Like there's actually a bunch of open source ones. Quite sadly, I haven't found a decent Python one. So there's that. There's Brevo, which is another
Starting point is 00:18:13 one. Button Down. This one is not open source, but it is made with Python open source. So I talked to the guy who runs Button Down and this one is written in Django. So if you want your newsletters powered by Django, I don't think it's open source, but anyway, pretty, pretty neat option there. There's Zoho, which is pretty cool. Cindy, here's another cool one. Cindy has also self-hosted, but you, it's not open source, but you buy it once for like $70 and then you run it on your system. 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.
Starting point is 00:18:51 I don't, I do, but I don't use it. I have SendGrid, which it also works with and Mailjet and Elastic email. And the thing that's cool about these is you can send like 10,000 emails for a dollar, right? And it's based on consumption, right? 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
Starting point is 00:19:09 for you. We'll sit here. But this one, it's like, you know, they say a hundred times cheaper. 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. You can pay them like another 70 bucks and they'll set up a server and a Ubuntu server or Linux server. I'll set it for you. So this is what I'm actually thinking of going with potentially. And there's ConvertKit,
Starting point is 00:19:32 Mautic, I don't know, open source marketing instead of just email, constant contact. I don't have any relations with any of these, by the way, folks, GetResponse, ConvertKit, all of those. So if you want to see the the mastodon conversation about why people suggested them some people are like oh i worked with that but it sucked don't use that uh and so
Starting point is 00:19:51 on you can check it out 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 so there it is so we don't have a solution but we you've got something well i'll well i can report back to people how things go so it's a fork in the road for me right um 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 Then we're going to send, you know, like that kind of stuff. I don't really do that. Uh, so I just basically send emails to people. And in that case, right, you should be looking at something simpler. Maybe when there's open source ones, it's pretty nice. Um, but if you want to do really interesting automations,
Starting point is 00:20:37 which maybe I should look into, I don't know. Uh, then maybe one of the real simple ones is not the right choice. 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. 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 of your Gmail. Like, no, that's awesome.
Starting point is 00:21:00 If you run like a soccer team and you want to send them a message or something like that. But if you have to be subjected to the U.S. Can't Spam Act, the GDPR, people delete my stuff, delete my info you have on me. I want to unsubscribe. I want to partially unsubscribe or I might mail bounced and I got to stop sending it. Like all of that, you can't just like automate send. Even out of send grade is not enough, right? You need to have a whole backend that like deals with all that crap.
Starting point is 00:21:29 And that's what a lot of these like open source ones bring. So anyway, pretty cool. Newsletter is, having a newsletter is more complicated than people think because it just is. It's way more complicated.
Starting point is 00: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 um yes it's it's kind of a weird work it makes sense but also it's weird but it kind of doesn't make sense it kind of doesn't make sense yeah yeah like yeah i really just have to put my house there what can i put there like but because the u.s can spam act i think is the reason that that is there and yeah you know that's the government right like maybe we should have cook up cookie banners that everyone clicks like five times an hour a day for the rest of their life that's gonna make things better well you know i i used to like um i know we've
Starting point is 00:22:20 done this enough but sorry about that um the uh i used to MailChimp, but I had a PO box set up just for that. And I was like, I don't use it for anything. 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. Oh, interesting. Which is interesting. But I'm still on the fence on ConvertKit. I'm trying it out.
Starting point is 00:22:46 So we'll see. Yeah, we can both report back to people yep and steve it it's tricky stuff so anyway hopefully it helps the folks now completely change of gears um back to command line interfaces i talked about user interfaces um on guis but let's talk clis a little bit um so back on episode, what was it? 361. We talked about appeal. And I've talked about arc person click and typer and stuff like that before appeal was another one. And, and this all came out because I did an episode on, on Python test about arc parse applications and testing. So somebody, actually, Sander76 on Fastedon contacted me and said, hey, there's a bunch of other options other than the ones you've covered so far.
Starting point is 00: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. So there's a set of command line interface tools that
Starting point is 00:23:46 instead of, um, uh, instead of arc parse style or something of telling, you know, defining flags, they define it based on an object, a configurable object. So, um, his, uh, clip stick, for instance, let's, let's start with Tyro. He is, this is one of the early ones it's kind of easy to figure out tyro is a is a command line interface tool that you can use data classes or pydantic or adders to define the the all the options so for instance uh here's an example it was showing the video um you can take a you importro, and then you define a data class with types on on a bunch of args, you just it doesn't matter what it is, what's called, but you have a class with a bunch of elements in it. And those are the things that you can pass to your application now. And then you just you, you implement a Tyro CLI application, that's. That's the arguments. And it's kind of cool on parsing args that way.
Starting point is 00:24:48 So that's Tyro. And then there's Clipstick, which is kind of cute, like C-L-I. Yeah, anyway, that defines all of your types within a base model, like from Pydantic, Pydantic base model. And then you can define a whole bunch of types in there. And then you can, and it has help and all that stuff. So basing it on a Pydantic object. And then also there's a nicely designed website called with Pydantic argpars.
Starting point is 00:25:21 So argpars with Pydantic. So there's another one that's defining arguments based on a base model. And I just, I haven't played with these yet. 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
Starting point is 00:25:44 as an object and then and then you have instead of you get like this arg object instead of having a whole bunch of different elements you have like this object with all of your arguments that you can pass around and since it's things like pydantic you can do things i'm i haven't played with it but i'm guessing that you can do things like limit the scope so it's not just an integer but it's an integer between one and five or something like that um right yeah that's cool yeah so these are fun those are super fun yeah pydantic is great typing for this kind of stuff is great because it it's usually not open-ended right that should be a number and if it's not it's going to be a problem or that should be a string for the host name that's required. All these things like really map over to that validation side of pedantic.
Starting point is 00:26:27 But I do want to, so from Sandra 76's question, how do you test these or is testing easier? It is a good question. And I put it on my to-do list for January or sometime in 2024 to take a look at. So I'll have to report back about that also. Yeah, very nice. Very nice. So it's the Samuel Colvin and team day for you with fast UI and the Pydantic Bay stuff. Yeah, indeed.
Starting point is 00:26:54 Good stuff. So. All right. Extras. You want me to do mine first? Yeah, let's hit yours first. All right. Well, I have one and it's super quick. So I just, you know, 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. And the main rule here is that they're limiting how many
Starting point is 00:27:27 domains and rules you can apply to block, basically to limit network traffic. So you can say, well, there's 500 ads you can block, but those are the only 500, right? Which really limits it. So people are whining. I'm like, you know, why don't I just write an article? Because like, I could turn all that stuff off and I don't care at my house. And you could too, just instead of worrying about what these browsers are doing, just go and turn on a network level ad blocker. 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 do this pie hole. 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. But anyway, I talked a lot
Starting point is 00:28:10 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. And also, this is all great. 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, you're like, you know what, I hate you. But a place that says, hey, you have to disable your ad blocker or you can't watch this movie, read this article. You're like, you know what? I hate you, but just for a minute, I have to do this because I really, really need to get here. It talks about how you can set up a second browser.
Starting point is 00:28:32 Like for me, it's Firefox, not Vivaldi. Like Vivaldi is 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. 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 got to turn it off.
Starting point is 00:28:53 So there's a quick article, I say what you want to call it for people to check out. Yeah. Things like that still bug me though. Like the turn off ad blockers, it can't be that high of a percentage of the population that's turning them off. So yeah, I know. Weird. Yeah. There was one show.
Starting point is 00:29:11 It was like Peacock or Paramount. One of those streaming platforms would not let my wife watch some show because it says she had her ad blocker on. Of course she didn't. She had, she was on the wifi, which was blocking everything. And also the side, the extra benefit here is this means your mobile apps have ad blocker on. Of course she didn't. She had, she was on the wifi, which was blocking everything. And also the side, the extra benefit here is this means your mobile apps have ad blockers built in. This means your TV has an ad blocker built in. This means like everything has an ad blocker built in, not just your browser. Right. So all this whinging over, like whether
Starting point is 00:29:38 or not you're, you can do blocking in a browser, like, you know, you could just do better and it's not even your problem anymore. Right. So, yeah, it 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 want to turn it off for the whole everything right like i just want to let you watch your movies how do you do that so that's in there as well yeah okay cool nice okay i've got a few extras uh won't take long though uh django 5 released yesterday um we've already talked about all the cool features of Django 5, didn't we? I think you covered it a couple weeks ago. But I just noticed that it's not a beta or anything anymore.
Starting point is 00:30:15 It's released as of December 4th. It's all grown up. Yeah. That's awesome. I'm excited to play with that. So that's fun. And then something submitted by Paul Berry. So thank you.
Starting point is 00:30:27 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. And it is a GitHub repo with a whole bunch of awesome things like debuggers and like vim PDB. I didn't know you could do that.
Starting point is 00:30:48 That'll be fun. IPython, you can turn VI key bindings on with IPython. Anyway, quite a few fun settings and telling you how to do it for different things. Even email clients. Look at that. Yeah, none of them I use, but I used to use Mutt a long time ago. and telling you how to do it for different things. So even email clients, we got that. Yeah. None of them I use,
Starting point is 00:31:07 but I used to use Mutt a long time ago. Yeah. I don't see mine either, but that's Thunderbird. I should try that. Yeah. So, okay.
Starting point is 00:31:16 So, and then I've got for my last extra, I have a little drama. So I talked about last week that i think that python or we have before the test and code is now python test my other podcast but i left it on the domain test and code for a while but uh recently i tried switching it to to podcast so we're looking at now is podcast.pythontest.com so the the new URL is that. But if you just go to if you just go to
Starting point is 00:31:46 pythontest.com, there's a there's a link to the podcast so you can find it that way. Just podcast.pythontest.com. Anyway, what do I do with the old domain? I redirected it,
Starting point is 00:31:55 but it didn't work. I don't know what I did wrong. I contacted Namecheap and they said, let's find us. So not sure what went wrong. So I changed it, changed the DNS settings last night to, to just point to like a small site. So a small site that
Starting point is 00:32:13 looks like this, this morning, it just says, Hey, I'm here testing code, the podcast moved, it's over there. And so just so that it won't 404 on people. And I also have some redirects. So if you say like testing code.com slash 23, it'll redirect to the 23rd episode over on the other one. Awesome. Except it didn't work last night. I was pulling my hair out and then, uh, I woke up this morning and it worked on my phone, but not here yet. So, um, I know that there's this thing of saying, if you ever muck with DNS, it can take up to 72
Starting point is 00:32:46 hours to like ripple through the internet. I haven't ever had to deal with that before. It's always been pretty quick whenever I muck with DNS settings. Apparently I'm hitting that. So hopefully in a few days, it'll be all resolved. And so now I have to reset my days since it last DNS problem to zero. So days is less. Oh my God. That is so amazing. I love it. So I'm showing an Etsy.
Starting point is 00:33:11 I think you can find them lots of places, but there's an Etsy state sticker that says zero days since it was DNS. And in parentheses, it's always DNS. It is anyway. Oh my gosh, Brian, are you,
Starting point is 00:33:26 are you foreshadowing here? Maybe. Do you know what I did this whole weekend? I have two things to cover from my extras. Okay. Well, I covered the one. And I also just realized I wanted to give a quick mention just in case. I spent my, I don't have anything to show.
Starting point is 00:33:40 So let's just leave this up because it's perfect. Okay. I spent all of the weekend and a good chunk of Monday migrating domains from different places. I have a bunch of old ones at GoDaddy because 15 years ago that seemed all right. And they're super hard to get out of there. So I've got a bunch at Google Domains because I thought Google Domains is beautiful until Google decided to shut that down because apparently it's too much work to store like a DNS file that's 500 characters. I don't know. Because it's a commodity now and they can't make money off of it.
Starting point is 00:34:12 I know, I know. Anyway, I can understand it. But anyway, so I had, well, I don't want to stuff on that thing that's like shutting down. I got to move that off and I got some others in other places. So moving that all together,
Starting point is 00:34:23 holy moly, does that take some time? And sometimes they move quickly. Sometimes they don't. 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. But if you transfer it to,
Starting point is 00:34:37 you reset it too quickly, it'll like just permanently stop working. Some of them have to have SSL as part of the DNS definition, like.dev requires only SSL. But if want to use let's encrypt well it's got to resolve to some place but it can't resolve to some place you don't have SSL you're like okay who decided to invent a catch-22 for domain names like oh ah so the last one of the last ones switching is pythonbytes.fm, which I requested after a 45-minute phone call to figure out why GoDaddy couldn't give me the access code to do the switch.
Starting point is 00:35:10 I finally did this morning, and I got it. But I hope everyone gets to hear from us after it switches. The whole reason I'm telling this story is that for some reason it stops working. It will be back. I apologize. I'll get it there. I think it's going to go seamlessly. Sometimes I do.
Starting point is 00:35:27 Sometimes I don't. Fingers crossed for this one. So we need to buy these stickers in bulk then. Zero days since it was DNS. It's always DNS. So we need to get those ordered now. Mojo is asking where I ended up. I ended up.
Starting point is 00:35:43 Let me do it like this so I don't give away the joke. I ended up, let me do it like this. So I don't give away the joke. Um, I ended up at a hover.com. Okay. It's the one thing that they do. They don't do other stuff. They don't kill white rhinos for sport, nor do they not care about their DNS. It's like their job. So it seemed like a good place so far. Fingers crossed. Thank you, Robert. All right. So you already had probably the best joke for the show, but I've got a joke as well. You ready for it? Okay. Yeah. Okay. Oh, I love this. Yeah. So Chris, no, Josh Collinsworth, sorry, came up with this thing and it looks like some kind of code he's written. It's over on codepen.io that generates these. So it's an honest LinkedIn
Starting point is 00:36:23 notification generator. So, you know, you go to like your activity or your notifications and it tells you stuff. Well, this one tells you stuff that is, you know, more in line with the reality of LinkedIn rather than what LinkedIn wants to tell you. So here's a picture of this woman. It says, congratulate a near stranger for tears at a job you didn't know they had. And then there's like a, yeah, it's so good. There's like a blurred picture of somebody. So someone looked at your profile who were holding that information for ransom. It says is the smiling guys as follow the worst coworker you've ever had for their sudden unsolicited insights.
Starting point is 00:37:01 And it just goes on and on. I think it even has infinite scroll. Somebody connected with your first manager from, uh, from your job in 2014 reacted to a former classmates post. Thought you should know. Wannabe influencer shared an incredibly crappy opinion just for the engagement. Click to engage. Never hire anyone who writes CSF ever. No CSS. So on and so on. It's so good. Wish that guy who made you cry in the bathroom a happy birthday. That's great. Oh, that was, that was, uh, did you already get the one where it was like free work, the free labor one? Oh yeah. No, right there. You're, you're one of the few experts invited. Oh yeah. Yeah. You're one of the few experts invited to slash do free
Starting point is 00:37:44 unpaid labor. Rather, add to this collaborative article. How do you exploit users without them noticing? Well, I've been getting those like a whole bunch lately. And I actually clicked on it when I'm like, what are they talking about? Oh, they want me to write articles for free. No, I'm not doing that. I got one this morning even. So I got not one of these, but I got a congratulate
Starting point is 00:38:06 John Gould on his new or gold on his new promotion. And I'm like, he owns the company. I don't understand. Good little pat on the old back there, John. Good job giving yourself a promotion there. Exactly. Chris Taylor and 36 others at soul sucking corporation shared this post from the CEO in hopes of avoiding the next round of layoffs. These are good. Get a lot of those. Yeah. All right. Well, I don't know if it's too dark, but that's what I brought for the joke. I think it's great. I kind of like LinkedIn to like keep in touch with people and keep up your resume and stuff like that. But I don't actually ever use it as a finding new articles through service. But anyway,
Starting point is 00:38:50 there's a whole group of people who do. I don't think I'm part of it either, but yeah, I'm not the target audience. So it's all right. Yeah. All right. Well,
Starting point is 00:38:56 thanks again for a lovely Python bites. Absolutely. Bye. See you later.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.