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


Transcript #394: Python is easy now?

Return to episode page view on github
Recorded on Tuesday, Jul 30, 2024.

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

00:04 This is 394 recorded July 30th, 2024.

00:10 I am Michael Kennedy.

00:11 And I'm Brian Okken.

00:12 And this episode is brought to you by Scout APM.

00:16 Thank you, Scout APM for sponsoring the show.

00:18 We will tell you more about them later.

00:20 If you want to connect with us on the socials, the best, but not the only place is over on Mastodon where all the links, me, Brian, and the show all

00:29 have our account lists at the top of the page of the show notes you'll see in your podcast player or the website.

00:35 Also, if you're not joining us live and you would like to, we record Tuesdays at 10 AM Pacific time.

00:41 Check that out Python by South FM slash live.

00:44 You'll see all the older versions under the live section on our YouTube channel there.

00:48 And finally, you probably do want to also get this summary of this episode in your email.

00:54 I'm sure you do.

00:55 A handcrafted artisanal Brian Okken special email.

00:59 So just visit Python by South FM, click on newsletter, enter your information.

01:03 We won't give it away, share it with other people, resell it, retarget you, do evil things.

01:08 We just will communicate with you about stuff we're up to mostly the show.

01:12 Brian, I learned Python.

01:13 It was a good weekend.

01:14 Is that the same?

01:15 Is that what you're telling me for your first item here?

01:18 But where are you going with this?

01:20 Michael, I think you've done it for a while.

01:22 No, I'm bungling.

01:24 Bundled the joke a little bit, but yes, that's all right.

01:27 I thought Python is easy.

01:28 I hear.

01:29 Yeah.

01:29 Python is easy now.

01:31 apparently no, I, it's, I love Python.

01:34 Anyway, what I wanted to talk about was, beyond hyper modern or postmodern.

01:39 I'm not sure what the tagline is really.

01:41 So this is an article by Chris, our dear art, Chris, sorry about, I've probably mangled your last name, but, I really liked the article, Chris.

01:50 So what is this?

01:51 so it's the, the title is beyond hyper hyper modern Python is easy now.

01:57 And this is a reference to hyper modern Python.

02:01 That was, he says it came out like, as a series that came out four years ago or something.

02:07 interesting.

02:08 but it's, what was hype?

02:11 Who is the hyper modern person again?

02:13 Can't remember.

02:14 Oh, oh, I should have looked this up anyway.

02:17 Claude, Claudia, Claudio, Claudio, Joe, I'm not going to try Claudia's book, hyper modern Python tooling is now as a book, which is cool.

02:27 good job, but that's not what we're talking about.

02:29 We're talking about, beyond hyper modern or, from the URL postmodern.

02:34 So what is this?

02:35 Basically it's talking about all the tooling and it's all in Rye now.

02:40 So this is what Chris's idea is, is you could do so much in Rye.

02:44 And actually I knew Rye did a lot.

02:46 and, but, but Rye is, is, is actually does more than I thought you could.

02:52 So, Rye is a tool that's like, kind of does a lot of stuff around Python.

02:57 So there's set up, it goes through set up, linting, typing, testing, documentation, CI CD, and then there's about a section on mono repo.

03:06 But I really liked just walking through, like if you wanted to try out Rye,

03:11 all of the different, like the workflow going through the entire workflow of,

03:14 building a Python project.

03:16 like the setup part is, setting up an initial directory, including setting up your pyproject.toml and setting up some, some, some different

03:26 directories, which is, which is a great, just, sets up the structure for you.

03:31 There's a lot of files here that like, I don't off to tell you the truth.

03:35 I don't use lock files a lot.

03:37 partly because I'm using, I'm often developing Python modules, or packages, which, I don't really lock stuff.

03:44 Locking is, is more regularly around applications.

03:48 so do you have lock files for some of your application stuff?

03:52 All of them.

03:53 All of them.

03:53 I use, I use the pip compile workflow.

03:56 Okay.

03:56 So I've got like one thing that specifies the top level requirements.

04:00 And then another one that is the lock file using a UV pip compile.

04:04 Okay.

04:05 one of the things that I didn't think about was like, requirements for the requirements dash dev lock.

04:12 So instead of requirements on text, these are the, the, the dependencies

04:17 are in your pyproject.toml, but there are a lot requirements lock files, but a dev

04:21 lock file that I might actually have even for a package, like, to keep, make sure all the developers are using the same thing.

04:28 So that's kind of interesting.

04:30 It makes a lot of sense.

04:31 I was just had, when I publish it, this set this week's episode, I can't remember very, very, very recently, David Lord from Flask on

04:40 talk Python and one of the things they're working on is creating a more repeatable

04:46 environment for contributors and developers to Flask.

04:49 So like you Flask, you don't want to just pin the versions of everything.

04:51 Cause that wrecks everybody else's options to work with different versions.

04:55 But you do want to make sure that people do PRs have the same setup as people who are reviewing the PRs.

05:01 Right.

05:01 So they talked, he talked a lot about having a hidden requirements of, for

05:06 development for developers of the project, but not the project itself.

05:09 Yeah, that's a cool idea.

05:10 so, so let's set up there's, you can do linting with it.

05:15 the testing section talks about pytest.

05:17 Yay.

05:18 but the, one of the things that I thought was kind of neat was this, and I think I knew this, but anyway, this idea of scripts.

05:25 So within your pyproject.toml, you can set up Rai scripts.

05:29 So they're basically extra commands that do things like, so you can say like,

05:34 Rai run test in, and so the run command runs your scripts.

05:39 So you can say run in a test is a thing that you've said that just like defaults

05:45 to Rai test, but things like Rai, Rai run check might be running PyRite or for, for

05:51 linting or for type checking or linting is a Rai lint with a fix or something.

05:58 so all these different, if you, if you've, especially if you're, you've got

06:02 other people on the team, having some way to do all of this is good.

06:06 And then a kind of a neat thing that I, that's probably as nice as being able to

06:10 chain, scripts.

06:12 So if you've got like, running your form, auto formatting and linting and,

06:17 the type checking and also running your tests, but then if you want to do all of

06:21 them, there's a way to just chain them up within the pyproject.toml, which is

06:26 kind of cool.

06:26 So yeah, that's very cool.

06:27 It's kind of takes the place of where I would use either where I used to use make

06:31 files.

06:32 Now I use, talks, commands for, but, so a lot of this around, if you don't need it, I'm guessing this doesn't create a new virtual environment,

06:42 but I haven't played with it yet.

06:43 but that's where talks would, do that.

06:46 so there, there's a discussion around documentation.

06:50 It isn't really a Rai thing, but just talking about documenting things well, but

06:54 I, I really kind of like this article about like, if you want to try out mostly

06:58 because I do want to try out Rai and this kind of walks through all the different

07:02 things it does within your workflow and where you might want to pull it in.

07:05 And I do, I do appreciate that Rai has some configuration.

07:09 So apparently the default, packaging tool is hatch, but, the, but this person, Chris wanted to use PDMs.

07:19 You can set that, but I'd probably leave it as hatch cause I like catch, but,

07:22 but might do something different.

07:24 But you can even, set a dependency operator.

07:28 So whether you want it to be like approximately equal to or greater than equal or whatever, kind of neat.

07:34 The, the bonus is really kind of fun.

07:37 I don't, I actually just ran into a project where I have to, to help support,

07:43 which is a, is a, a large repository with multiple Python projects in it.

07:48 And so I'm looking forward to reading through, how, how possibly this, this documentation around dealing with monorepos in Python, this is

07:58 on my to do route to read next, list.

08:01 So that's cool.

08:02 That's next level stuff right there.

08:03 Yeah.

08:05 Well, very, very cool.

08:06 I Brian am happy to report.

08:09 I think that the GIL has been vanquished, but we are now in the epoch of free-threaded Python.

08:17 So how might you, might you test this out and see if it's actually worth it and so on.

08:22 Okay.

08:22 So Simon Wilson, one of his today I learned is trying out free threaded Python on macOS.

08:28 Could be others as well, but you can just go to, this is interesting.

08:32 I didn't realize that you would be able to get free threaded Python this way from the pep.

08:36 It's like, you've got to get a special build of it.

08:38 And it's just like its own thing.

08:40 Right.

08:41 Yeah.

08:41 But if you get the macOS installer, I, I don't know about the others, but

08:44 presumably the windows one has something similar or will, I don't know.

08:48 Go to install this and you can set up the options, custom install, and you can just

08:53 check off a checkbox to install a separate binary for three free threaded

08:57 Python 313 instead of gilled Python.

09:01 Wow.

09:01 That's just from the python.org download.

09:04 Yeah, exactly.

09:05 Wow.

09:05 Exactly.

09:06 Yeah.

09:06 Just to get that downloads beta three of it.

09:08 And there it is.

09:09 So you just hit a customize your install and boom.

09:12 So that alone is kind of interesting.

09:14 Yeah.

09:14 And then once you do that, you get not just a Python three dot 13, but a Python

09:20 313 T it's interesting, but not FT.

09:26 I mean, the other one should have a T on it.

09:28 Come on.

09:28 If it's going to be threaded, I don't know.

09:29 Anyway, T whatever you get one that is like, that's the one you can run in the

09:34 command line for free threaded Python.

09:35 And Simon points out, like, didn't really put this in the path because it's beta.

09:39 I don't want to mess stuff up, but nonetheless, there it is.

09:42 So let's test it out.

09:44 It comes up with a simple little program that just does some CPU bound thing.

09:48 This is the important thing.

09:49 We've for a long time since Python three, four had really good options to

09:54 parallelize IO bound or waiting types of things.

09:58 I'm talking to a network.

09:59 I'm talking to a database.

10:00 I'm talking to whatever with asyncio, right?

10:03 Yeah.

10:03 The CPU bound stuff that Gil would stop and go, yeah, no, I don't care how many

10:08 cores you got, you got one, right?

10:09 Yeah.

10:10 And so this is just summing up a bunch of numbers, the squares of the numbers,

10:13 just like doing some computational busy work.

10:16 Right.

10:16 So it says, okay, well, let's set up a little app that'll take some parameters

10:20 so we can feed it different information and see what we'll get and then run it

10:23 on a thread pool executor with as many threads that is are specified.

10:28 So start out just to skip ahead.

10:31 So look, I ran it once I get one course as 99% CPU usage on MacOS that it reports

10:38 this as a hundred percent basis as being one core fully busy.

10:42 So you've got eight cores.

10:43 This could go up to 800%.

10:44 It's kind of weird.

10:45 Anyway, 99% CPU.

10:47 If you run the regular one, but if you run the free threaded one, he was getting

10:51 some number that was a little low.

10:52 There's a bug.

10:53 It's not super relevant about him fixing the bug or not.

10:56 I don't really think that matters, but what the takeaway is, if you run it with

11:02 four threads, that whole workload ran in 1.3 seconds, you're at with 12 threads.

11:08 It went down to one second.

11:10 I don't know how many cores he has.

11:11 I don't believe it said, but with the GIL that's four seconds versus one

11:15 second or 1.3 seconds for the basically four times as fast, presumably this is

11:20 a four core system, I'm not sure.

11:22 Anyway, pretty cool.

11:23 Right?

11:23 That is pretty, pretty cool.

11:25 So yes, that's faster.

11:27 Four times faster is, you know, 400%.

11:29 That's no joke.

11:30 That'll make a difference for some people, but I think more relevant.

11:33 It's just like, Hey, look, apparently the installers have it.

11:35 Right.

11:36 That's kind of cool.

11:37 Yeah.

11:37 Okay.

11:38 I was chuckling because, so testing it out.

11:41 It says, I asked Claude three and a half sonnet to write me a quick test

11:44 script, but the script had come up with is something I know that he can write on his

11:49 own.

11:49 Yeah, exactly.

11:52 Exactly.

11:53 That's fine.

11:55 Yeah.

11:55 The, the, it didn't come up with something all that interesting and it introduced a

11:58 bug.

11:58 He should have just written it himself.

12:00 Oh, well, but this is neat.

12:03 I actually, I saw the announcement that there were some builds of, of the free

12:08 thread or one, but I didn't know you could just do it, like click it from the

12:11 installer.

12:11 That's cool.

12:12 Yeah.

12:12 That's, that's the big news I took away as well.

12:15 Very cool.

12:15 Neat.

12:16 Very neat.

12:17 And you know what?

12:17 You don't have to build yourself is an APM platform, right?

12:21 We could let Scout do that for you.

12:23 Let me tell you real quick about Scout APM.

12:27 They're big supporters of Python bites.

12:29 So we appreciate that very much.

12:31 So if you are tired of spending hours trying to find the root cause of issues

12:36 impacting your performance, then you owe it to yourself to check out Scout APM.

12:40 They're a leading Python application performance monitoring tool, APM, that

12:45 helps you identify and solve performance abnormalities faster and easier.

12:49 Scout APM ties bottlenecks such as memory leaks, slow database queries, background

12:54 jobs, and the dreaded N plus one queries that you can end up if you do lazy

12:58 loading in your ORM, then you say, Oh no, why is it so slow?

13:02 Why are you doing 200 database queries for what should be one?

13:05 So you can find out things like that.

13:06 And it links it back directly to the source code.

13:08 So you can spend less time in the debugger and healing logs and just finding the problems and moving on.

13:13 And you'll love it because it's built for developers by developers.

13:17 It makes it easy to get set up.

13:18 Seriously.

13:19 You can do it in less than four minutes.

13:21 So that's awesome.

13:21 And the best part is the pricing is straightforward.

13:25 You only pay for the data that you use with no hidden overage fees or per seat

13:29 pricing, and I just learned this, Brian.

13:32 They also have, they provide the pro version for free to all open source projects.

13:38 So if you're an open source maintainer and you want to have Scout APM for that

13:42 project, just shoot them a message or something on their pricing page about that.

13:45 So you can start your free trial and get instant insights today.

13:49 Visit pythonbytes.fm/scout.

13:52 The link is in your podcast player show notes as well.

13:54 And please use that link.

13:55 Don't just search for them because otherwise they don't think you came from us.

13:59 And then they'd stop supporting the show.

14:01 So please use our link pythonbytes.fm/scout.

14:03 Check them out.

14:04 It really supports the show.

14:06 What's next, Brian?

14:07 I want to iterate into our, to the next topic.

14:10 I want to talk about it or tools.

14:12 So I really, this is, this comes from Rodrigo, Rodrigo from math, maths, pp.com.

14:20 And he writes a lot of great articles, but, and I know we've covered it or tools

14:26 before, and people have heard of it or tools and it's built into Python, but

14:30 there's so many goodies in there that I like to have people tell me what

14:34 their favorites are and reshaping.

14:35 So this is there's this is an article that groups all of the it's they, I don't

14:43 think, I think there's more than 20 in there, but anyway, 20 tools that every

14:47 Python developer should be aware of from inner tools and it's broken into five

14:51 categories, there's reshaping iterators, filtering, filtering, iterators,

14:56 combinatorial, infinite, and iterators that compliment other tools.

15:01 And there's, I just did a quick list of this and I, I really think there's a few,

15:07 few of these in here that I need to use more.

15:10 So I'm glad, glad I ran across this article.

15:12 One of them.

15:13 So right off the bat, this is the three most useful iterators or product.

15:18 And what product does is it simplifies, like, let's say you've got a nested loop

15:22 of like a width and height, for instance, for X in range of width and for Y in

15:28 range of height, you do something with X and Y.

15:30 Well, you can use inner tools product and, and have it just be one does a product of

15:36 two ranges or product of two iterators.

15:38 And it gives you the two like the, all the, all of the combinations in order.

15:44 So that's a really cool thing that I always forget about that.

15:48 I probably should write that more, especially if you've got more than two,

15:52 when you get like three, it gets ridiculous.

15:54 And so using it or tools to simplify that, it's a really great idea.

15:58 And because, you know, with Python, every time you, you, indeed into a four loop,

16:03 you're going to indent your code.

16:05 It helps you keep the, the, the horizontal width of your code a little bit more

16:10 reasonable.

16:11 Okay.

16:11 >> Flats that are nested, all that kind of stuff.

16:13 >> Yeah.

16:13 Chain, I always remember about.

16:15 So chain is a, is a, is a way to combine two lists and iterate through all of them

16:20 instead of adding the lists, adding is kind of, it creates a new one.

16:24 You might not need that.

16:25 Whereas chain, we'll iterate through both of them.

16:28 And I, after remind people, if you're not aware, all these really cool things within

16:33 the inner tools, there are a way to manipulate iterators such that you're not

16:37 copying things.

16:38 You're not making a new list of something.

16:40 You're just iterating through existing iterators without doing the copy.

16:43 I think that I'm pretty sure that's true.

16:45 Yeah.

16:46 The, the one that I, the, the third one on is you, everybody should know about that.

16:51 I thought was great was pairwise.

16:53 And I actually apparently never knew about this.

16:56 And this is a way to like, let's say you've got a, the example is a bunch of names and

17:02 you want to be able to make sure that everybody says hi to the person on their

17:06 right.

17:06 You can go through and it, well, this may be a silly example, but if you want to go

17:10 through an entire sequence and make sure each pair in a, like you're just walking it

17:17 down, like the first, like number one and number two, and then two and three, and

17:20 then three and four, this is an easy way to do that.

17:22 And actually there's an old way of using zip with the, you can, you can combine two

17:30 lists and do slices, but that's a little confusing.

17:33 Whereas pairwise just gives it to you right away.

17:36 It returns to two pointers to objects.

17:39 So that's really cool.

17:40 A couple more things I wanted to bring up that, that were great in here was zip

17:45 longest, which I do remember because I use it frequently, but if you're zipping two

17:51 things together, which means you're going to go through and go through to two

17:55 sequences using zip by default, zip picks the shortest and whereas, and it just chops

18:02 it off.

18:02 I think, actually, I don't remember what it does at the end, but zip longest will

18:07 have a fill value.

18:08 So you give it a fill value and it goes through everything and you'll have

18:12 something empty.

18:13 So you make sure you go through everything.

18:14 And then the last thing is T, which is, which is kind of neat.

18:19 It allows you to do, normally iterators are exhausted once you go through it.

18:24 So you have to like regenerate an iterator, but T allows you to do, to iterate

18:29 through something a couple of times.

18:30 It allows you to, to iterate without exhausting the iterator, which interesting.

18:36 So, so nice.

18:38 And then at the end, a discussion of, which is, which I think is cool that he did

18:43 this.

18:43 So a discussion that there is a, is he wrote a book on iter tools.

18:49 So there's a little book of iter tools.

18:51 He's not paying for this ad.

18:52 I just think it's neat that somebody wrote a book about iter tools.

18:55 That's nice.

18:55 Neat.

18:56 Yeah.

18:57 Yeah.

18:57 That's pretty neat.

18:58 So.

18:59 There's a lot of, a lot of powerful stuff there.

19:01 Yeah.

19:02 It's all a lot of simple, hard problems in simple ways.

19:05 I like, I really appreciate that he picked out those first three though, of like, even

19:10 if you're not really wanting to go through all of this, take a look at these three, you

19:14 might, you probably need them and you just don't realize it.

19:17 So, yeah.

19:18 So what do you, what do you got for us next, Michael?

19:22 You would love to know if your website was down and not up or your Docker container or

19:27 your other service, and you would like to be notified in interesting ways.

19:31 And there are services you can pay for this or free services that have weird

19:36 limitations or I don't know, just funky stuff.

19:38 Right.

19:38 Some of those, in order to answer really good questions, you'd have to give them

19:42 pretty serious internal access to your code or to your infrastructure potentially.

19:47 So I present to you the Uptime Kuma, which just trying hard to resist uptime karma, but

19:53 no, Uptime Kuma, a fancy self-hosted monitoring tool.

19:57 Okay.

19:57 So this thing is pretty cool.

19:59 It comes with a Docker variant, so you can just Docker compose it into life.

20:05 And I'm thinking about setting this up for Python bytes and talk Python and other

20:09 things, because I've already got that Docker cluster and all the infrastructure to run

20:13 it.

20:13 So adopting it should be really easy.

20:14 It just takes one container to run.

20:17 And I believe it stores its data into a SQLite database in there.

20:22 So file copies, kind of a backup.

20:24 It's kind of the backup option, right?

20:25 So anyway, check this out.

20:27 Doesn't this look neat, Brian?

20:28 You tell it different things you want to do.

20:30 Like I want to check that the port is open.

20:32 I want to check that this example is, you know, some example.com website is up.

20:37 You can see that MySQL is running.

20:38 You can ping the server to see that the server is up.

20:41 All sorts of things you can put as tests in here, and you can even have an anti-test.

20:45 Like for example, if you're ever able to directly connect to the database, that

20:50 should be flagged as an error, like a down moment, not an up moment, because

20:55 something's gone wrong with the infrastructure and you need to go fix it.

20:58 But in a reverse sort of way.

20:59 So what does it say?

21:00 First of all, 54,000, 53,000 GitHub stars.

21:04 So really, really quite popular.

21:07 It has a little test, a little test server you can set up, point at your

21:11 website for 10 minutes and play with it.

21:13 That's a really nice feature.

21:14 What it says, uptime monitoring for HTTPS, TCP, HTTP keywords, JSON query, ping, a DNS record.

21:22 You can make sure your DNS records don't go insane and like your MX, DKIM or I don't know, whatever, game servers, and even check that your

21:30 certain Docker containers are still running.

21:32 So it's got a nice UI and has notifications for Telegram, Discord, Slack, pushover, email, and 90 other notifications.

21:40 Can have as fine grained as every 20 seconds checking.

21:43 It comes with status pages.

21:45 So if we had a Python bytes monitor set up with this, I could set up status.pythonbytes.fm

21:54 that people could go and see if the RSS feed is live.

21:57 Is the Docker container running?

21:58 Is X, Y, and Z, right?

22:00 So it has that for you.

22:01 And it'll also, one thing I really like, cause I use let's encrypt, but the auto

22:06 renewal is a little bit janky, long story.

22:08 I don't want to go into it, but it's a little bit janky.

22:10 And, so it works, but it requires a little fiddling.

22:14 So having it, it'll actually check SSL certificates to see if it'll expire.

22:18 So it'll say like your certificate is good for 29 more days.

22:21 Oh, maybe you want to get on that before it goes like, you know, something terrible.

22:25 So all of that, isn't that sweet?

22:28 It is cool.

22:29 Yeah.

22:29 There's a bunch of sponsors and it's got this nice UI.

22:32 You can bump over to the status page.

22:35 It'll prepare you a little demo app and it runs for a certain amount of time.

22:40 So how, how long are certificates good for?

22:42 if you do a let's encrypt, it's a year, I believe.

22:46 Okay.

22:46 So anyway, you can go over here and create this and actually go and add a little

22:50 monitor and pick all the different kinds and look at all these things.

22:54 You can monitor MongoDB, SQL server, Postgres directly.

22:59 Yeah.

22:59 It's really neat.

23:00 So I'm thinking of setting this up and if you want to play with it, just

23:03 click on that little thing you can see here, Brian, I clicked on it now.

23:06 It says I have nine minutes to 21 seconds before my app gets blown away, but I can

23:10 test it out, which is pretty cool.

23:11 Anyway, it, will give us, Potentially a really nice way to sort of monitor and get notifications about it.

23:20 So I have that for other services, but don't like it.

23:23 I could set it up once a day on the free one and make sure that my website at

23:27 least is live for 10 minutes a day.

23:29 Yeah.

23:29 Yeah.

23:32 If you don't mind reconfiguring it every time.

23:35 Yeah.

23:35 Okay.

23:36 Yeah, sure.

23:36 All right.

23:37 Pretty cool.

23:37 How about some extras?

23:38 the only extra I got was last week I talked about, making a new pytest course, I've been working on that and I'm on version three because I'm, a

23:51 perfectionist and want to make sure that it's smooth and quick.

23:54 So, I do hope to get that out sometime soon.

23:58 I was going to say maybe next week, but you know, I don't want to put too much pressure on myself.

24:02 Yeah.

24:02 When I get, that's, that's very exciting.

24:05 I know people are looking forward to it.

24:06 I also had to basically put DaVinci resolve down to come record the podcast.

24:11 So I was in the middle of editing some videos I got coming on for a new course

24:14 as well, so very exciting stuff.

24:16 All right.

24:17 There's, there's a never ending stream of things to talk about, right?

24:20 Yeah.

24:21 All right.

24:21 I've got a couple.

24:22 Kenneth writes, talks, pointed out that, you know, requests and more fame talks about this, move that Switzerland pulled Switzerland,

24:33 Switzerland now requires all government software to be open source.

24:37 That's cool.

24:37 Cool.

24:38 Yeah.

24:38 So what does that mean?

24:40 They, you gotta read it carefully.

24:41 It doesn't mean the government has to only use open source as in Linux and

24:46 Firefox, but the thing, the software that the government makes has to be open source of what this is.

24:51 So we bump over to Omnivore.

24:53 You can see my notes.

24:54 So Switzerland has taken a major step forward with its federal law on the

24:58 use of electronic means for the fulfillment of government tasks.

25:01 MBAG is the acronym.

25:04 It's groundbreaking legislation mandates releasing open source software of the federal government.

25:09 The law requires all public bodies to disclose the source code of software

25:13 developed by or for them, unless 30 part third-party rights or security concerns.

25:19 So that's pretty neat.

25:20 There's actually, there was some pushback.

25:22 For example, one of the main areas this was around is the justice system.

25:26 This, was trying to get all the software that runs basically runs the justice system, the court system for Switzerland open source, but guess what?

25:38 The proprietary legal software company, Weblaw wasn't happy.

25:42 Right?

25:43 Yeah.

25:43 No, they weren't.

25:44 But, after a decade of fighting, it came out and there's one other point to

25:48 make in addition to mandating open source software, it also requires the release

25:53 of non-personal non-security sensitive data as open data.

25:58 So it's like open software and open, open data as well.

26:03 So pretty cool.

26:04 Interesting.

26:04 We have stuff.

26:05 Yeah, it is.

26:06 We do have some stuff like that, like over at Talk Python.

26:08 What was it?

26:10 elections.

26:11 I think if I look for that, yeah.

26:12 Python at the U S federal elections, commission and talk to Laura, Beaufort, and I believe they are open sourcing their stuff as well.

26:21 A lot of things going on there.

26:22 Like, yeah.

26:23 Open source at the FEC, for example.

26:25 So we have some stuff in like spotty examples of that, but not as a overall

26:30 statement, so it's pretty interesting.

26:31 Right?

26:31 Yeah.

26:32 I'm curious to look at some of this stuff.

26:33 Like, yeah.

26:35 How clean's your code?

26:36 Like, yeah.

26:37 How many, AWS keys will be in there?

26:41 We'll find out.

26:42 Thanks indirectly, Kenneth, for that.

26:45 one more.

26:46 Remember last week I talked about the PySimple GUI and it's switching to a

26:51 commercial license, which again, I'm not super against, but it's sort of the,

26:55 the rug pull aspect of it, like, Hey, it's open source for a long time.

26:58 And I'm going to take everybody's contributions and then, you know, change

27:01 the license, that, that sort of thing.

27:03 got some people's nerves up.

27:05 Well, F Falcon 31415 on Mastodon pointed out, Hey, check out free simple

27:12 GUI, which I linked to in the show notes, which is an actively maintained fork of

27:16 the last release of PySimple GUI with an open source license.

27:20 So if you were like, Oh, I was going to use that.

27:23 And you still can.

27:24 Yeah, actually it's got a really good, the read me on that has some really good to like, has some good tutorial examples of, of how to write it.

27:33 Simple GUI on it.

27:33 So, not only is it the open source free version, but it's, it's also some pretty good documentation on there.

27:40 Cool.

27:41 All right.

27:42 How about some jokes?

27:43 Yeah.

27:44 Joke, joke, singular joke, a singular joke.

27:46 So this one is kind of a meme with Will Smith and it doesn't really have that much to do with Will Smith.

27:52 I think it's just the attitude.

27:53 I like Will Smith anyway, says just because I know Java doesn't mean I know JavaScript.

27:58 I mean, I do, but not because I know Java.

28:02 That's good.

28:03 Right?

28:03 Yeah.

28:04 Yeah.

28:04 I was just talking, talking to, whenever you talk to kids trying to learn

28:09 like software, it is, it's still confusing to people.

28:12 I mean, like it's not confusing to us cause we've been in around it.

28:15 We knew that the history, but it seems weird now to tell people, yeah, the

28:19 JavaScript that everybody uses, it was named that because Java was popular at the time.

28:25 So anyway, are you muted?

28:29 I was sorry.

28:30 fun episode as always, Brian.

28:32 Yeah.

28:33 Fun.

28:33 And yeah.

28:34 Thanks man.

28:34 Nice to be in here.

Back to show page