#471: The ORM pattern of 2026?
About the show
Sponsored by us! Support our work through:
- Our courses at Talk Python Training
- The Complete pytest Course
- Patreon Supporters Connect with the hosts
- Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)
- Brian: @brianokken@fosstodon.org / @brianokken.bsky.social
- Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 11am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.
Michael #1: Raw+DC: The ORM pattern of 2026?
- ORMs/ODMs provide great support and abstractions for developers
- They are not the native language of agentic AI
- Raw queries are trained 100x+ more than standard ORMs
- Using raw queries at the data access optimizes for AI coding
- Returning some sort of object mapped to the data optimizes for type safety and devs
Brian #2: pytest-check releases
- 3 merged pull requests
- 8 closed issues
- at one point got to 0 PR’s and 1 enhancement request
- Now back to 2 issues and 1 PR, but activity means it’s still alive and being used. so cool
- Check out changelog for all mods
- A lot of changes around supporting mypy
- I’ve decided to NOT have the examples be fully
--strictas I find it reduces readability- See
tox.inifor explanation
- See
- But src is
--strictclean now, so user tests can be--strictclean.
- I’ve decided to NOT have the examples be fully
Michael #3: Dataclass Wizard
- Simple, elegant wizarding tools for Python’s
dataclasses. - Features
- 🚀 Fast — code-generated loaders and dumpers
- 🪶 Lightweight — pure Python, minimal dependencies
- 🧠 Typed — powered by Python type hints
- 🧙 Flexible — JSON, YAML, TOML, and environment variables
- 🧪 Reliable — battle-tested with extensive test coverage
- No Inheritance Needed
Brian #4: SQLiteo - “native macOS SQLite browser built for normal people”
- Adam Hill
- This is a fun tool, built by someone I trust.
- That trust part is something I’m thinking about a lot in these days of dev+agent built tools
- Some notes on my thoughts when evaluating
- I know mac rules around installing .dmg files not from the apple store are picky.
- And I like that
- But I’m ok with the override when something comes from a dev I trust
- The contributors are all Adam
- I’m still not sure how I feel about letting agents do commits in repos
- There’s “AGENTS” folder and markdown files in the project for agents, so Ad
- I know mac rules around installing .dmg files not from the apple store are picky.
Extras
Michael:
- PyTV Python Unplugged This Week
- IBM Crashes 11% in 4 Hours - $24 Billion Wiped Out After Anthropic's Claude Code Threatens the Entire COBOL Consulting Industry
- Loving my 40” ultrawide monitor more every day
- Updatest for updating all the mac things
- Ice has Thawed out (mac menubar app)
Joke: House is read-only!
Episode Transcript
Collapse transcript
00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:05 This is episode 471, recorded March 2nd, 2026.
00:11 It just still sounds weird.
00:12 And I am Brian Okken.
00:14 I am Michael Kennedy.
00:15 And this episode is sponsored by all of you guys and us.
00:21 So everybody that helps send some money our way through taking a course at Talk Python Training or a pytest course at pythontest.com or reads one of our books.
00:32 We're also Patreon supporters.
00:34 Thank you, Patreon supporters.
00:35 If you would like to send out, we get a lot of, we do a lot of research ourselves, but we also get a lot of tips from other people.
00:42 So if you'd like to have feedback, if you disagree with something or want to add to the conversation, go ahead and connect with us on BlueSky, Mastodon.
00:52 I think that's it.
00:54 Or just at pythonbytes.fm.
00:56 There's a contact form there.
00:58 You can also subscribe to the, actually one of the best ways is you can go over to pythonbytes.fm and subscribe to the email list.
01:06 And when you get an email, then you'll know our email address and then you can just send us stuff through there.
01:12 That gets to us.
01:14 Also, if you'd like to join the show live, that's fun.
01:17 Go ahead over to pythonbytes.fm/live and you can find out how to get, watch the show live.
01:25 With that, let's kick it off with the first topic, Michael.
01:28 Let's do it.
01:29 So this first topic is an article that I wrote, more of a design pattern that I would like to advocate for.
01:36 Okay.
01:37 Now, you see, Brian, I have this friend.
01:40 His name is Claude.
01:41 He's really good at writing code, but he gets super distracted.
01:44 Claude code.
01:45 So I've been thinking a lot about what does agentic programming and people leveraging these tools mean for like design patterns and architecture.
01:55 I'm a big fan of thinking about architecture and so on.
01:57 So I wrote this up.
01:59 It got super popular on Reddit and I thought I would share it here as well.
02:04 You know, popular in the sense that like lots of comments, lots of upvotes, but also a lot of like mean comments because it's Reddit.
02:11 So that's how it goes.
02:12 But good comments too.
02:14 First of all, I want to put this out as a disclaimer.
02:17 As you think about this, don't try to adjudicate whether or not people should be using AI for coding.
02:23 Don't try to adjudicate whether AI coding should exist, whether it is bad or good.
02:29 It exists.
02:29 People are using it.
02:30 If that's true, what should we do as an industry?
02:34 How should we consider, how should we move forward?
02:36 How should we think about this, right?
02:37 Are there things that would make that better or worse, right?
02:40 You yourself can decide you're not using it.
02:41 But as an industry, I think it's pretty clear that it's being highly adopted.
02:44 So that's kind of the goal that I had when I wrote this article.
02:48 Yeah.
02:49 And so the title is Raw Plus DC.
02:52 So as in Raw Database Queries and DC is in Data Classes.
02:57 And the subtitle is The ORM Pattern of 2026?
03:02 And I'm putting that out there because I think this is a pattern that is much,
03:06 much more aligned to the way AI coding works.
03:09 Why do people like ORMs?
03:10 And technically for this, I use what's called an ODM, an Object Document Mapper,
03:14 because I was using the example I extracted it from was written against MongoDB.
03:18 But whatever, like it's immaterial, whether it's Mongo or Postgres, okay?
03:23 Or SQLite.
03:24 People, developers love ORMs and ODMs because they provide type safety, especially with like document databases.
03:33 They constrain what can and cannot go into the database, right?
03:37 You got to match the class and then the class goes in the database.
03:40 You don't just stick dictionaries in there, which is otherwise the case.
03:43 They prevent SQL injection or Mongo query injection because they always,
03:49 by the way they work, use parameterized queries.
03:51 They're a nice abstraction.
03:52 Also for developers, they provide really good IDE auto-completion.
03:57 So I have a function.
03:58 I give it a type or even the type is just discovered through type inference that it returns this class.
04:03 When I get one back and I say thing from the database dot, it gives me a list of all the stuff I can do in the database.
04:08 All these things are awesome, right?
04:10 Yeah.
04:10 But here's the thing.
04:12 I ran to this literally this morning working on this project that I've not yet released,
04:17 but we'll talk about pretty soon.
04:18 These AI tools are trained so much more on raw queries than they are on any particular ORM.
04:27 So for example, I was using Beanie on this project.
04:30 Beanie is downloaded 1.4 million times a month, which actually is really impressive.
04:34 So Beanie is the ODM for talking to MongoDB.
04:37 The underlying library that lets you talk in the native query syntax is downloaded 74 million times per month.
04:44 That's 53 times more.
04:45 And there's other libraries for talking directly to Mongo as well, right?
04:49 So there's like 50, 75 times more bits of code out there that are actually just talking directly to the database than using this particular ORM.
05:00 Okay.
05:00 And that's true for SQL as well.
05:02 Like for just sticking with Mongo, right?
05:04 PyMongo is the Python version of this, but there's also people doing the native query syntax in Node, Deno, Bun, PHP, .NET, whatever, right?
05:13 Like all these other languages.
05:15 So if you actually do that sort of cross product, it's probably a thousand times more that AIs see raw database queries than they see any particular ORM, even if that ORM is popular, right?
05:27 Because it's for a technology and then it's sliced down into who uses that ORM rather than across all programming.
05:33 The other thing is, so these ORMs go unmaintained, right?
05:40 I mean, Django ORM probably won't go unmaintained, but they come and they go in sort of their popularity.
05:46 So for example, Beanie, it had only like three releases in the entire year of 2025.
05:51 Its last release was four months ago to close some minor issue.
05:54 And it's got a bunch, like almost a hundred open issues, even though it's downloaded over a million times a month, it's kind of gone unmaintained.
06:01 And before that I was using Mongo engine, which is way more unmaintained than Beanie.
06:05 Like Beanie was the exciting new one, right?
06:07 And so what do I have to do if this changes?
06:09 If I decide that it's too unmaintained, I have to completely rewrite it in a different ORM.
06:13 But if it was written in a regular, just straight query syntax, that doesn't change, right?
06:18 That's been identical for SQL since the databases came out, identical for Mongo since Mongo came out.
06:24 I mean, they add to it a little bit, right?
06:25 Like if they add a feature or something.
06:26 But generally, it's going to be the same.
06:29 So I don't have to worry about it.
06:30 These things are going on the same.
06:31 Go ahead.
06:32 I want to interject a little bit.
06:33 You threw out Django.
06:34 I was going to comment that Django might be an outlier there in that a lot of, I know there are people that use other ORMs or raw SQL with Django.
06:46 But I think it's probably a lion's share of the Django users that use the Django ORM.
06:51 And I don't think that's going away anytime soon.
06:55 I totally 100% agree with you.
06:57 But what if you decide you want to change your project to a different web framework?
07:01 Well, I would probably say the same argument is that you could probably switch to this raw SQL plus data classes from Django, the Django ORM, because there's a ton of Django stuff out there.
07:17 I'm pretty sure that the models are trained on lots of Django.
07:20 Yeah, they were pretty well trained.
07:22 So this maintained argument is not go for everything.
07:24 But it's definitely another angle, right?
07:27 Yeah, and also, I think that you probably touched on this already, but just one less dependency is one less thing you have to keep up on.
07:38 Yes, absolutely.
07:39 And it's not usually just one dependency, right?
07:42 It's like this thing depends on four others, which depend on three.
07:45 And now there's a CVE in one of them.
07:46 You're like, ah, man.
07:47 Okay, so let's – but there's reasons people like these ORMs.
07:52 I am a huge fan of ORMs because they give you back classes that are great.
07:56 So my proposed way of working is create a nice data access layer, put functions in there that are very clear, like create user, update password, whatever.
08:06 And then inside, let it be raw queries.
08:10 Let Claude write however Claude wants.
08:12 But when stuff comes out of there, it has to return some kind of class.
08:15 So I propose data classes, okay?
08:18 And I think data classes are pretty interesting here for a couple reasons.
08:22 One, they're typed, right?
08:23 They look like – you can tell them use slots.
08:26 That's just good for memory and performance.
08:28 They're typed just like if you use Pydantic or if you use any ORM generally.
08:33 So that's really good.
08:34 They're also built in, so no dependencies, as you pointed out.
08:37 And they're very, very lightweight, which is great.
08:39 Now, they have type safety in the terms of like type checking type safety.
08:44 But they don't have runtime type safety like, say, Pydantic, right?
08:47 Yeah.
08:48 So if you want – another very reasonable option would be to do a Pydantic plus raw queries.
08:53 I didn't use Pydantic because this means every query that comes back from the database gets validated.
08:59 And there's a whole bunch of machinery that runs when you're reading from the database.
09:04 But if the data in the database is wrong, it's already too late.
09:07 It doesn't matter if your class says it's too bad.
09:09 It's like, no, it's saved.
09:10 It's too bad.
09:10 It's too late.
09:11 And so maybe on the outside layer, you could use Pydantic, but in the data access layer, you could use something lighter.
09:16 That was my – that's my take.
09:18 When I posted this on Reddit, people probably like 50 times like, well, why aren't you just using Pydantic?
09:22 It's like, well, Pydantic is great.
09:24 It doesn't have to be used for everything.
09:25 So anyway, I'm going to follow up with one more thing that's pretty cool around that.
09:29 But yeah, so if you look at the performance really quick here as well, I did a nice graph of a bunch of different things.
09:37 What's like 1,000 reads look like?
09:38 What does 1,000 writes and so on?
09:40 And this graph is based on doing just raw queries without any class component because that's really the foundational – like they all have to do that, right?
09:50 So how much overhead does each style add?
09:52 And it's not exactly perfect because this raw data class style can't be faster than writing itself.
10:00 In a lot of places, it's literally the same code.
10:02 So it's just like fluctuations in the machine.
10:04 But if you look at, say, Beanie, which is based on Pydantic, so this is more or less just Pydantic.
10:10 What would Pydantic look like in this model?
10:13 It's a lot of times pretty close, but sometimes it's like five times slower.
10:16 If you look at Mongo Engine, which is another one, 15 times slower, 10 times slower, it's a big difference.
10:23 It's quite a big difference.
10:24 So this style is actually almost native speed.
10:28 There's just a few times where the serialization maybe doubles the time to read, say, 1,000 or 100 orders or something like that, but barely.
10:36 Anyway, I think it's pretty interesting.
10:37 What do you think?
10:37 Yeah, I think that one of the reasons to go with an ORM was speed of development because a lot of people don't know SQL queries that well.
10:49 But a good SQL query is not that hard to read.
10:53 Well, it can be.
10:54 But generally, they can be decent to read.
10:59 Trying to figure out how to write it might be tricky.
11:02 So that's where I think your argument of around using agents and stuff to help with this, they're going to know how to write a decent one.
11:11 And you can probably, even if it's ugly, you might be able to say, can you clean that up so it's easier to read?
11:16 Yeah, or explain it to me.
11:18 Yeah.
11:20 But anyway, I think it's valid.
11:23 It's definitely valid.
11:24 I think it's more valid now than it has been in the last couple decades.
11:28 So, yeah.
11:28 Yeah, just this morning, I asked Claude to do this thing with Beanie.
11:32 I said, oh, it would be way better if I just used a projection.
11:35 And for projections in Beanie, you have to create a subclass or a different class and then use that.
11:41 And it's like, oh, I could just use dictionaries.
11:42 Then it crashed.
11:43 Oh, I don't think I can do that.
11:44 Let me try the aggregation pipeline through Beanie.
11:46 And that didn't work.
11:47 I'm just like, could you just do it directly?
11:49 And it's like, oh, yeah, that works.
11:50 It's just, you know, it's kind of a little bit clunky.
11:53 One other thing that was really popular in the conversation about this article was what Kiva Birb is asking is, what about migrations?
12:01 Not relevant to ODMs, but certainly relevant to ORMs.
12:03 You do what everyone else does if you write straight SQL.
12:06 You write your migrations yourself.
12:08 But the thing is, like, my assumption is this pattern is most adapted to agentic coding.
12:13 If you're just doing raw straight coding yourself, stick with ORMs.
12:17 That'll handle it.
12:17 But if you're doing agentic, like, Claude Code can write a heck of a migration.
12:22 It doesn't care.
12:22 It's going to be great at that.
12:24 Yeah.
12:24 I guess I've just sort of leaned on migrations a lot.
12:29 And I actually don't really know what they do under the hood.
12:32 Yeah, I mean, what are migrations?
12:33 They are basically, they are a statically generated, like, pre-generated SQL script that says, add this field, change this field, change this type, copy these things.
12:42 It's a set of SQL steps for transforming the schema of the database.
12:48 And typically the way migrations work is it looks at the old version of the class and the new version of the class and goes, what do I got to do to write the SQL to make one go from one to the other?
12:57 You can just ask Cloud to do that.
12:59 I also really like the comment about have a data access layer, because I think that that's a good idea, even if you are using an ORM.
13:08 Yeah, thanks.
13:09 All right.
13:10 Well, that is plenty on that.
13:11 I mean, you should definitely test your code if you're going to take on this way of programming.
13:15 Yeah.
13:16 Nice transition.
13:17 I've been spending some time in the last week cleaning up, giving some love to pytestCheck.
13:24 So pytestCheck is a little plugin I wrote a really long time ago, many, many years ago.
13:31 But the last release before recently was in November, I think.
13:38 So yeah, October, November, something like that.
13:41 So I've decided to spend some time getting it back up to date.
13:45 And I did, I like all the stuff on GitHub, the activity, pulse activities thing.
13:53 So there's been three merged pull requests.
13:56 Sorry to everybody for taking so long, but it was only, I guess I only annoyed three people.
14:00 And there is, yeah, I closed a bunch of issues, eight closed issues.
14:05 Now, I did get to the point where I had only one enhancement request and no actual issues and no pull requests.
14:13 That, you know, that doesn't last very long for projects that are being used.
14:18 And I hadn't checked the little stats thing recently.
14:23 And it's used by almost 1.3-ish thousand projects.
14:29 That's fun.
14:30 Anyway, I just wanted to bring it up that that's still in the live project.
14:38 And I'm going to keep it up.
14:40 I'm still having fun with it.
14:41 I still use it every day.
14:42 So that's one of the reasons.
14:44 The changes, there's not a lot of extra features.
14:48 There was a support for raises parameter when you're doing xfail.
14:55 That works now, which that's really kind of a bug fix, but it was extra feature.
15:01 So that was a pull request.
15:02 So thank you.
15:03 But some documentation things that I've been noticing this at work, too.
15:08 If you have a new feature and you don't document it, it's like invisible work.
15:12 Why did you do that work?
15:13 So I added some documentation things.
15:17 But a lot of it was around my Pi because a lot of people are using my type checkers and
15:22 using Pi test check.
15:24 So I updated a lot of stuff.
15:27 But I guess I have got a question or kind of an open thing.
15:33 I was going to try to make it like strict compatible, but I don't think I like it.
15:38 So with strict compatible, you have to do things like return none and have a lot of extra decorations.
15:46 It's a test.
15:47 We know that Pi test tests return none.
15:50 They have to.
15:51 I think this is overkill most of the time.
15:53 So for most of I think it's cleaner just to not show that.
15:58 These are supposed to be examples of how to use it, how to use a tool.
16:02 I think it's fine to not have a lot of that stuff.
16:05 So I still do type checking on the examples, but I'm not doing strict.
16:10 So anyway, that was my two cents on that, I guess.
16:14 I think it's fine to not have type safe or type clean types, clean strict type checking results on example code.
16:24 I think it can be too much.
16:25 I think it has certainly a value, but there's plenty of times where it's just too much.
16:29 And these type checkers can definitely get out of control.
16:32 Like I had something similar with Flask where I had a Flask view method and I had a custom decorator.
16:38 And the custom decorator didn't declare its types in a way that it was identical to this really complicated, you know, app at app dot get sort of signature.
16:48 And I got these huge crazy warnings saying this function has a mismatch on the signature.
16:52 I'm like, it's called by Flask.
16:54 No one calls this function.
16:55 I don't care about expressing what its signature.
16:58 It works fine.
16:59 Just leave it alone.
17:00 You know what I mean?
17:01 Yeah.
17:01 It can go way too far.
17:03 There's some things that I need to also things I need to look at.
17:07 Because like for an example, for a test, doing something like assert one equals two makes sense.
17:13 You know that's going to fail.
17:14 That's a great example, I think.
17:16 But like the mypyth says that that's an error.
17:19 And because what, int constants aren't comparable?
17:24 I can't remember the error, but it's weird.
17:28 Interesting.
17:29 Yeah.
17:29 It can be over that last one or two percent is just, it's folly.
17:33 That's what I say.
17:35 So anyway, thanks to everybody.
17:37 And yeah, if you don't, this isn't a dead project.
17:41 Yay.
17:41 Cool.
17:42 Yeah.
17:42 Yeah.
17:42 It looks awesome.
17:43 And over a thousand projects using it.
17:45 That's pretty good.
17:46 Yeah.
17:46 And some of those have lots of stars.
17:49 So.
17:49 Nice.
17:50 Transitive stars are piling up.
17:51 Feel it.
17:52 Anyway.
17:54 Okay.
17:55 What you got next?
17:55 What I got next is I want to talk about what, something I learned through that whole discussion
18:02 around that raw plus DC design pattern that I talked about.
18:06 Somebody, somebody said, look, you are so close, but where's your validation?
18:10 I'm like, you know what?
18:11 I'm not really sure I need runtime validation when I'm reading from the database.
18:14 Maybe writing to it.
18:16 Maybe.
18:16 But anyway, I learned about a couple of really cool tools that you can use.
18:20 So for data classes, there's this thing called the data class wizard.
18:24 Ooh, a wizard has a cool wizard hat.
18:26 It's simple, elegant wizarding tools for Python's data classes.
18:30 So this is actually a super neat project here.
18:32 So, and fun docs, behold the power of data class wizard.
18:36 So what you can do, there's different ways you can use it.
18:38 You can use it through what are called mixins, which are like, they add some functionality,
18:43 you know, through inheritance.
18:45 Okay.
18:46 You know, maybe like a from JSON function, something like that.
18:49 But also lets you specify other interesting things.
18:54 Like, I didn't even know you could do this in the class definition, but basically pass
18:59 configuration values to a class, the class constructor for the type, I guess.
19:04 Anyway, you can say, hey, I have a regular data class.
19:07 But in fact, I would like it to be unconcerned with the case of the inbound data.
19:14 So somebody doesn't say C# and they write Pascal case things, right?
19:18 Like lowercase and then uppercase second bit or, you know, camel case type of things like
19:24 we do for classes for their fields.
19:26 But I want to express them as, you know, snake case is active Tupa with underscores and not
19:31 capital A, capital T sort of thing.
19:33 You can just say, oh, that doesn't matter.
19:35 And if I ever dump it out, put it back out in camel case, because that's what the people
19:38 who are working with this API want.
19:41 So this data class wizard is like a, it's like data classes, but it adds that type of functionality
19:46 to it.
19:46 Right?
19:47 Cool.
19:47 Which is super cool because my example, I said, oh, well, you just got to write a from
19:50 JSON function that like turns it into, they're like, why would you write that?
19:53 You could use the wizard.
19:55 Like, cause I didn't know about the wizard.
19:56 Tell me about this thing.
19:58 But there's other ways to use it as well.
20:00 You can have just a regular data class and mix in the JSON wizard mix in.
20:05 So then you get to and from JSON, kind of like I just described.
20:08 This is super cool.
20:09 You can have a, an env wizard.
20:11 So I can then have a data class that derives from env wizard.
20:14 And then it reads as you just instantiate it.
20:17 It reads from the environment variables.
20:20 That's neat, right?
20:21 Yeah.
20:21 So you just have a config file and has all these variables and you just say, guess what?
20:25 Those come out of my environment or doctor variables or whatever.
20:29 And yeah, pretty neat.
20:31 They've got the JSON wizard, the list wizard.
20:34 Cause sometimes you get a set of JSON and it starts as a list instead of curly braces.
20:40 And then it's hard to parse.
20:41 So, files, Toml, Toml and YAML.
20:45 You can also get ones that'll read and write Toml and YAML data classes that basically naturally
20:49 know that type.
20:50 And if you just keep going, it says you don't have to use inheritance either.
20:54 You can just create standard data classes, even hierarchical data classes.
20:58 Like here has an A class, which has a list of B types.
21:02 And those are also data classes.
21:03 And then you can just use the from dict from data class wizard.
21:08 Say it's this type and here's the dictionary.
21:11 And then boom, it's like a little factory method sort of thing.
21:14 Oh, that's especially great if the classes come from somebody else.
21:17 Exactly.
21:17 And it also does really interesting parsing.
21:21 I can't remember where it is in their documentation, but it does, coercion or of types.
21:27 I don't know exactly how they refer to it there.
21:29 But if I've got, say I have a list of integers like Pydantic, it does, or at least used to
21:34 do like one.
21:35 And then the quote two is the second entry it'll, and it knows it's supposed to be an
21:39 end.
21:39 It'll turn that into an end and stuff.
21:40 So it kind of brings a lot of what Pydantic offers to data classes, but only when you want
21:44 them.
21:45 Cool.
21:45 You're like in this place, I want to parse it and validate it, but not other times,
21:49 you know what I mean?
21:50 Stuff like that.
21:51 So anyway, I present to you the data class wizard.
21:54 It's pretty cool.
21:55 Yeah.
21:55 And hopefully it stays maintained.
21:58 Okay.
21:58 That's a good question.
21:59 Let's go.
21:59 Let's, let's go to the GitHub.
22:01 It says 3.14, I think tested at least.
22:05 Yeah.
22:05 Okay.
22:05 Two months ago it had an update.
22:07 It only has two open pull requests.
22:09 So that's pretty good.
22:10 It doesn't have 200.
22:12 Yeah.
22:13 Anyway.
22:13 Yeah.
22:14 Pretty neat.
22:14 I'm liking it.
22:15 I haven't really had a chance to use it because I just learned about it, but I like the idea
22:18 of it a lot.
22:19 Yeah.
22:20 That looks fun.
22:21 I have got a, another project that is in a similar boat that I haven't, I haven't really
22:27 tried it that much.
22:28 I downloaded it and installed it.
22:30 and what it is, is SQL light.
22:34 Oh, SQL, IDO, SQL.
22:36 SQL IDO.
22:37 I think it's gotta be SQL IDO.
22:39 That's the fun.
22:39 That's the fun.
22:39 SQL IDO.
22:41 So this is, this is a new little toy from, Adam Hill.
22:46 And, I noticed, I can't remember what, I think I saw a social media post on it or
22:52 something.
22:52 Anyway, it's a macOS SQL light browser built for normal people, apparently.
22:58 so, but it looks good.
23:01 It looks in with the little, all the emojis.
23:04 I'm thinking, wow, I think he used, maybe some agents to help build it.
23:08 And that's kind of what I want to talk about.
23:10 But, but I do like, it, it does look good.
23:13 the, the, oops, error loading page.
23:16 I don't know.
23:16 Can't, I can't look at the over the overview pictures that much more, but, it looks
23:21 like a very nice, interface to, you know, look at your SQL light databases on Mac.
23:28 So that's cool.
23:29 so why am I bringing this up?
23:30 I'm bringing it up kind of because, there was a caveat with installing it and it said,
23:37 it's a, it's a, it's, you could download the DMG and then you drag that to your app
23:43 folder or just double click it and then you start querying, but there is, it's not verified.
23:49 So it's not through the app store.
23:51 it's, it doesn't have a developer certificate yet.
23:55 so why, why am I okay with like trying this out?
23:59 Well, I think it trust is a big thing.
24:01 I trust Adam Hill.
24:02 I've seen a lot of his work.
24:04 I've seen him comment on stuff.
24:05 He works on open source projects.
24:07 and so there's some inherent trust there.
24:10 If you don't know who Adam Hill is, you don't have that of course.
24:13 but there's, there's other things I was looking at.
24:16 So I was looking at the source code a little bit and he's openly saying there's agents there.
24:22 there's an eight.
24:24 Well, cause there's an agent's file or something talking about.
24:27 Yeah.
24:27 Interesting.
24:28 It looks like it was built with Gemini.
24:30 Okay.
24:30 There's not a Claude.md, but there's a Gemini.md.
24:33 Yeah.
24:33 And that's just pointing to the agent, his agent at MD file.
24:36 and then there's, there's like some other stuff on, like there's a directory with
24:42 some to-do list ideas and stuff.
24:44 And I think, I think just being like not hiding it, I think is good.
24:48 And also another thing I checked out is the contributor because there's, I don't, so all
24:54 the contributors are him.
24:56 So I, I, I'm thinking that even if like there's a bunch of code written by agents, he's
25:03 at least looking at it enough.
25:04 And I don't know.
25:06 I'm still on the fence.
25:07 I don't know how I feel about people giving agents control of, commits, on a project
25:13 or not.
25:13 I think I'm not here for it.
25:16 You're not.
25:16 No.
25:17 So, but like what I would, if I would was, what, what would I be okay with?
25:23 having somebody, do this stuff and then commit themselves because you would
25:29 assume that they're looking at it.
25:30 But what if you just do that on a branch?
25:32 If you had, if you had the agent working on a branch committing stuff, you could always
25:35 just throw it away.
25:36 And if you're happy with it, you can merge it.
25:38 I don't know how it's different.
25:40 so.
25:41 I hear you.
25:42 I hear you.
25:42 I certainly think your branch makes it better.
25:44 A feature branch, some exploration branch.
25:46 But it would still show up as a contributor in the history.
25:48 so that's, I guess that's where I'm going with that.
25:51 Yeah.
25:51 By default, if you ask Claude to create a GitHub, a Git message, it'll put, or PR,
25:58 it'll put co-contributor at Claude.
26:00 Yeah.
26:01 So I still, I'm not, I'm still not sure how I feel about all that, but, but I do,
26:06 there's, there's just, there's other things.
26:08 So I'm thinking, I trust the developer.
26:10 I trust that I look, I look at the contributor list and I look at some of the commits.
26:15 what else am I looking at?
26:16 I'm looking to make sure that there's tests, even though, I can't read a Swift test very
26:21 well.
26:21 I don't know.
26:22 I mean, there's at least some testing going on.
26:24 so, so that, that, I guess that's, that's where I'm, I'm at with, some of
26:30 these things.
26:30 I, and I bring this up partly because I review a lot of projects, you know, for this, for
26:36 this, podcast looking at projects.
26:38 And if it looks like there are signs like a bunch of emojis, that's not necessarily bad,
26:43 but it's a sign that somebody had agents help them with it.
26:46 And actually a lot of people are really bad at writing read me.
26:49 So I'm okay with people having help writing read me.
26:52 but I'm looking for tests.
26:53 I'm looking for what the contributor things I'm looking for a lot of stuff, and trusting
27:00 the developers a big thing still, I think.
27:02 So yeah, a hundred percent with a command book, my app for managing like long running
27:08 terminal like commands.
27:09 Yeah.
27:10 I had to go through the same thing, had to get it digitally signed.
27:13 Both the app bundle itself is digitally signed.
27:16 And then you have to go through a separate process to sign digitally sign the DMG as well,
27:21 which is an utter pain for sure.
27:23 So it is a hassle, but if you have an Apple developer account, it's not too bad.
27:28 It's way less bad than iOS and app store review and those kinds of things.
27:32 It's just running it through like a series of tools.
27:34 So if Adam Hill, if you're out there listening and you want, a quick bit of help, happy
27:38 to help you get over that last hump there.
27:40 Okay, cool.
27:42 it doesn't say yet.
27:43 So I think he's planning on it.
27:44 So I know it's just, it's brutal, but like, here's another thing.
27:47 I like, I ask, I ask Claude, I'm like, all right, Claude, you got to help me.
27:50 I I'm lost here.
27:51 I do not know how to notarize this thing.
27:54 It's which is what it's called.
27:54 And then like, do I have to notarize the DMG as well?
27:57 And how do I pack it?
27:58 And I'm like, okay, here's a big long list of steps I got to set up.
28:02 And I got like, it was pretty helpful actually.
28:04 And that another thing, I guess a little bit of a tangent, right away from the trust thing.
28:09 I think this seems like a tool that Adam wanted.
28:12 And because of agents, he found time in his schedule to build it.
28:17 and we wouldn't, without it, we probably wouldn't have this tool as something we can
28:22 look at.
28:23 now trying to get people to stay maintaining projects that they can open source in a few
28:28 hours, over the time is a different story.
28:31 But anyway, I guess enough on that.
28:34 I guess I do think we're entering an entirely different era of highly personalized software.
28:40 I made this for me because I could do it in an hour and exactly it solves my problem.
28:44 maybe it's interested in you, but it's not built to be general.
28:47 It's built for me.
28:48 Yeah.
28:48 Yeah.
28:49 There's going to be some of that, but why open source it at that point?
28:51 yeah, fair.
28:53 Anyway.
28:54 Well, that would be extra work, wouldn't it?
28:56 Yeah.
28:56 Do we have any extras?
28:58 I do.
28:58 Do you got any while your screen's up?
29:00 Yeah, sure.
29:00 I'll do.
29:01 and it's all on the same sort of topic.
29:03 So, an article on, htmx.org blog, called yes.
29:09 And from Carson gross, this says, I teach computer science at Montana university,
29:15 Montana state university, and father of three sons.
29:18 And he gets the question given AI, should I still consider being a computer programmer?
29:23 Or I would translate that is into is a CS degree still worth it?
29:27 and his response is yes.
29:30 And, and I do, I, it's a great article.
29:34 enjoy reading it.
29:35 the top level thing is, programming is fundamentally problem solving using computers
29:41 and learning to control complexity while solving this problems.
29:45 I would say that that's, that's computer science.
29:48 but that's, and then a bunch of other stuff.
29:51 I think it's experience helps even, and, and background knowledge helps even if you're
29:57 using AI to help, then that's the same kind of a similar sentiment over on, Simon
30:03 Willison's blog, hoard the things, you know, how to do.
30:06 one of his recommendations here is, a big part of a big part of the skill building
30:12 softwares understanding what is possible and what isn't, and having at least a rough idea
30:16 of how those things can be accomplished.
30:19 And this helps with directing agents.
30:21 You wouldn't ask it to do things that, you know, is going to be a completely ridiculous,
30:25 I mean, an agent might go off and do something dumb, but if you ask it to, you just,
30:32 you do have to have experience to know what dumb is and what it possible is, I guess.
30:37 So, yeah, I agree with Carson that yes.
30:40 And I think I basically the short version is I believe Jevon's paradox is real and that
30:45 we're going to have more software rather than no software developers.
30:49 And we need people to oversee and guide and make decisions and trade-offs about that.
30:54 Right.
30:55 It's very hard for AI to make proper trade-offs.
30:57 Like, yes, I know I could, yes, I know I could make this an app, but my company doesn't have
31:02 a culture of putting apps out.
31:04 And we actually have this other backend system we want to, you know what I mean?
31:08 There's just like all this information that it doesn't know, or like in our industry,
31:12 here's how we do this.
31:14 And there's just a bunch of stuff that humans can bring plus the ability to break it down
31:18 into smaller problems and then give that to an AI.
31:21 You're way more likely to be successful than just like, Hey, guess what?
31:24 I need a CRM build that.
31:25 I'll be back by lunch.
31:26 Like you're going to get some form of something, but it's again, it's not highly personalized.
31:31 It's just super generic.
31:32 And if that's all you want, just go get a CMS from like some SAS and you're done.
31:36 I think one of the really interesting things is like, why do we build software at all?
31:39 You know, there's this term software engineer, right?
31:42 How well it applies.
31:43 I don't know, but a lot of times, especially in the early days of like talking about architecture
31:46 and engineering, it was all tied back to like, well, how do civil engineers do it?
31:50 And they have all these, these formalities of how they work.
31:53 And maybe that should be brought into computer engineering and programming and software engineering
31:58 and so on.
31:59 There's a really big difference.
32:01 Civil engineers built a bridge 50 times because there are 50 places the bridge need to be built.
32:06 If you build a piece of software that solves the same problem once, like you just run it again,
32:11 you copy it and run it, you build new software because you're solving a problem that in some
32:15 way has never been solved before.
32:17 So there's a difference.
32:19 There's like this, this, the part where it's never been solved before.
32:22 That's where the human brings in the stuff to the AI and the AI goes, well, there's all
32:25 these Lego blocks that we already know.
32:27 Like, all right, put those together.
32:28 But for this, I think that's what software engineering is going to become.
32:31 Yeah.
32:31 I mean, I think it has become that already.
32:33 And electrical engineering has been that way for a long time.
32:38 So, yeah.
32:38 I mean, already with like packages on PyPI and things like that, it's kind of like that.
32:42 But like with AI, it's instead of, I need an auth library so I can build a login page.
32:46 It's like, I make a login page.
32:48 Now click that together with it.
32:50 You know, it's just like another level up.
32:51 But that doesn't mean that people necessarily go away.
32:54 I hope not.
32:55 At least for another 20 years.
32:56 Yeah.
32:56 Give it, give it till, till Brian and I retire then.
32:59 All right, I got some fun extras as well.
33:02 Okay.
33:02 So, first of all, how would you like to unplug your Python and get a bit of an MTV vibe?
33:09 But it's PyTV.
33:10 Yeah, it's so fun.
33:11 So, our friends at JetBrains and a bunch of our friends who are speaking at this conference,
33:16 but are not necessarily at JetBrains, are putting on a free online Python conference,
33:20 the best Python, straight into your living room.
33:23 I feel like Max Headroom should kick off the keynote, honestly, don't you?
33:26 I love Max Headroom, yeah.
33:28 I know I did too.
33:29 But there's a bunch of great people speaking here.
33:31 Carol Willing, Sarah Boyce, Marlene, Gina, Carlton, a lot of folks we know.
33:38 And so, yeah, check this out.
33:39 It's a free online conference.
33:41 And is it this week?
33:43 When is it?
33:44 Let me look.
33:44 It must have a date, surely.
33:46 I know.
33:46 I think it is this week.
33:47 Yeah, March 4th.
33:48 So, we're recording on March 2nd.
33:49 That would be Wednesday.
33:50 So, everybody be on top of your listening to the show or miss out.
33:54 Okay.
33:54 So, that's one.
33:55 Quick shout out to that.
33:56 Next is, is AI a fad and a bubble?
34:00 Or is it an actual thing with real value that's going to change the world?
34:04 Yes.
34:04 So, remember we talked about the Sasspocalypse where like some of the legal companies and
34:11 other stuff where like their stock went way down because Anthropic published 13 markdown
34:15 files.
34:16 Well, IBM, IBM, big blue stock crashes 11% because Anthropic released some kind of markdown file
34:24 that helps convert Cobalt.
34:25 Because Anthropic threatens the Cobalt empire.
34:28 I think there's a lot of interesting stuff here.
34:30 I think Cobalt is a very interesting analogy for like pre and post agentic written code.
34:36 I can see in 20 years are like, that's some pre AI code.
34:39 We need some humans that know how to type still to come in here and look at this.
34:42 Right.
34:42 I think there's going to be that kind of like difference as we go on.
34:45 And so, I don't know.
34:46 I just wanted to throw that out there.
34:47 It's an interesting read for folks.
34:49 Yeah.
34:49 The language stuff is an interesting thing.
34:52 With things like Anthropic around, I am less scared of looking at code bases like Swift
35:00 or Cobalt.
35:01 I haven't looked at Cobalt, but I wouldn't be afraid now.
35:04 I might be able to just.
35:04 A hundred percent.
35:05 Yeah.
35:06 You need like 20% the capability you used to need to get something done or to get like,
35:12 I don't understand this.
35:13 Explain it to me.
35:14 Like, okay, now it makes sense.
35:15 Whereas before, I was just like, I don't understand it.
35:17 Well, especially if you write a test for it.
35:18 So, you write it like maybe there's a bug in some Cobalt code and you say, and you write
35:23 a test for it.
35:23 And now the agent, you can kind of trust the agent to fix it.
35:27 It'll do good review, of course.
35:29 But yeah.
35:29 Yeah.
35:30 Okay.
35:31 Quick update.
35:32 I'm absolutely in love with my 40 inch curved monitor that I told people about for.
35:37 When I first got it, I was a little wigged out by how big and rappy around it is.
35:41 It took some getting used to, but this like 5k monitor that is so giant is absolutely perfect
35:46 for all the type of work we do these days.
35:49 Next up, update est, update est, not ist.
35:53 I tried to search for it.
35:54 Update ist, I-S-T.
35:56 No, it's E-S-T.
35:57 So here's a really cool macOS bit of software.
36:00 And what you do is you just install it and it looks for all different kinds of apps that
36:05 are out of date on your system.
36:08 It looks for auto updating apps.
36:10 It looks for stuff from the app store.
36:11 It looks at homebrew.
36:13 It looks at CLI tools and it manages all of them.
36:16 So you go, oh, look, this thing's actually, that was been depending on.
36:18 It's actually out of date.
36:19 Let me push the button.
36:20 And super cool.
36:21 It's got a really nice UI.
36:22 It costs, it has money, but very little.
36:25 It costs $13 once for your entire life.
36:28 So anyway, it's pretty, seems pretty fair to me.
36:30 So very cool app.
36:31 Also Swift UI app, I believe.
36:33 I like Adam Hills.
36:34 Wait, how do you update it though?
36:36 Oh my God.
36:37 I believe it does auto update.
36:38 Okay.
36:38 If it doesn't, that would be deeply bad.
36:41 I think it uses the same thing that Command Book uses, which is called Sparkle, which is one of the most common ways to do it.
36:47 And actually it looks at all the Sparkle update feeds of all the apps installed on your system too, which is cool.
36:51 Okay.
36:52 People may have heard of Bartender, which is another Mac app.
36:55 That's cool.
36:55 Like compresses all the little widget thingies you got at the top on the right by the clock.
36:59 I love all those things.
37:00 So I go way overboard and I needed something to manage it, especially on small like recording screens.
37:05 So I had Bartender, they got bought in like a sort of underhanded way.
37:09 Like they got sold, but then nobody said they were sold for like months.
37:14 It was like, they wouldn't announce.
37:15 Anyway, it was weird.
37:16 So a lot of people moved to open source stuff.
37:18 So there's a one called Ice for the Mac menu bar, but it had its last updates like six months ago and it's clearly abandoned.
37:25 So you got ice.
37:27 Well, what if it gets stuck and frozen?
37:29 You got to thaw it out.
37:30 So now there's a popular one called Thaw, a fork of ice, the menu bar manager.
37:34 So anyway, here's a free open source menu bar manager for Mac.
37:38 That's pretty cool.
37:39 Following that weird chain of events over the last couple of years.
37:42 I don't even remember what I have.
37:45 On this computer, I still have ice running because I haven't had a chance to update it.
37:49 I just learned about this week, but it's getting thaw.
37:51 It's getting thawed out when I get done with this recording.
37:53 Getting thawed.
37:54 Yeah.
37:55 I have something that minimizes it, but I can't remember what it is.
38:00 I don't know.
38:01 Yeah.
38:01 Okay.
38:03 Well, shall we make a joke?
38:04 Yeah.
38:05 Something funny.
38:06 I know you got kids.
38:07 I have kids.
38:08 Anyone out there who has kids, well, maybe roommates as well, but especially kids.
38:13 Like they're so messy.
38:14 This joke will appreciate.
38:15 This is like a programmer take on that situation.
38:19 And the title of the joke is The House is Read Only.
38:23 Okay.
38:23 The House is Read Only.
38:25 So here's a woman named Kelly on X that posted.
38:29 It says, I have cleaned the house.
38:31 The house is now read only.
38:32 Please do not edit the house.
38:36 Yes.
38:37 Yes.
38:37 Kids.
38:38 I just put the dishes in the dishwasher.
38:41 Why is the sink full of dishes again?
38:43 I just went up to the back to clean up the other stuff.
38:46 I came back in and now it's messy again.
38:47 I can't take it anymore.
38:48 The house is read only.
38:49 It's so good.
38:50 I need this for my mother-in-law.
38:51 Yeah.
38:52 If you don't pay the mortgage, you don't get to put holes in the walls.
38:56 Just saying.
38:57 Houses read only.
38:58 Please do not edit the house.
39:02 Nice.
39:03 That's funny.
39:04 Yeah.
39:06 It's been a crazy week outside of programming.
39:09 So I'm trying to concentrate on programming.
39:12 Escape to the well-known world of structured text.
39:16 Let's go.
39:17 Anyway.
39:17 It was a fun episode.
39:19 Thanks everybody for showing up and we'll see you all next week.
39:21 Yeah.
39:22 Thank you.
39:22 Bye.



