Transcript: Coding with LLMs - Frank Wiles
This episode is sponsored by HackSoft, your Django development partner beyond code.
More on their services later in the show.
Hi, welcome to Django Chat, a podcast on the Django web framework. I'm Will Vincent,
joined as ever by Carlton Gibson. Hello, Carlton.
Hello, Will.
And we're very pleased to welcome back Frank Wiles, who should need no introduction. He is
a partner at RevSys. He was the boss of the Django Creators. You're former president of
the Django Software Foundation. We could spend half the show talking about what you've done,
but we're pleased that you're with us, Frank. Thank you for being here.
Hey, thanks for having me, guys. One correction there, I was not their boss.
Oh, what?
I was their co-worker. Yeah, I was their co-worker. I actually worked in a different
department.
Oh, right, because you weren't working on Python, but I thought you were doing Lisp, right?
No, it was Perl.
Well.
One or the other, one or the other.
You take a shot.
Oh, okay. So not the direct man, but you were there, but you're older than they are.
I'm older than them, and I had more ops experience, and so they would rely on me to help with
like performance things and database backup things and stuff like that.
Okay. And Jacob is still a partner. Jacob Kaplan-Moss is still a partner in RevSys.
Yeah.
Okay. Well, a lot to talk about, but maybe just, we were just, before we started filming,
admiring your setup, and you were mentioning, giving us a little bit of the history of the
designers on Django, because, you know, there's sort of three people who get credit, but there
were a lot of people involved, yourself included. What about on the design angle, right? Is this
more focused on the admin, or could you, you mentioned a couple of names that may be worth
a shout out in terms of.
Yeah. And I talked about like a lot of this history in my last DjangoCon talk.
Yes, we will link to that. Yep.
Yeah, that's a good one to link to, because it goes into much deeper detail. But yeah,
so when Django was getting started,
there was, you know, as most web shops had, somebody who was kind of focused on the design,
and that was Wilson Minor. And he was pretty much responsible for designing the Django template
system, like from the user API side of it. And then, you know, the initial website and the Django
admin, all of that original design. And, you know, it's held up for 20 years. I mean, we've,
you know, touched it up a bit here and there, and, you know, modernize some things. But for the most part, it's still the way it was 20 years ago. You know, and then after that, Brian Veloso, and then Adan Gazit, both had roles in kind of pushing design elements through Django in the early days.
Yeah.
When we were talking before, you used the phrase design BDFL, right? So the benevolent,
yeah, so there was, there was a brief time, there was a brief time where there was like,
you know, Jacob and Adrian were BDFLs of Django. And they sort of had kind of, I think it was
somewhat unofficial. But like, we sort of like, you're the design BDFL, we're gonna, we're gonna
defer to you on all design things. So the thing I wanted to pick up on that is, do you think we need
that again, or something similar? Because I saw, when I was fellowing, we'd get these design issues
come in. And we, and that was both on the website and on the admin, we'd be like, some of a bit
paralyzed, because we, you know, we're back endies, we've got this design neurosis, right? And no one
could kind of make a decision. But do you feel that if we had, if we could put one or two people
or three people in that, that kind of role, it would help us drive forward a bit?
I think it wouldn't be a horrible idea. But I don't know that we have that many design issues
that come up, you know, month to month. I think that if we had a group of designers who were
involved in Django in any capacity, and that we could kind of point to and say, hey, would you give
us a couple of ideas? And maybe the steering council could just pick up, here's two ideas
that, you know, steering council picks, right? I don't know if we really need a design committee
or anything. But it's not, it's not the worst idea for any, you know, by any means.
Well, I would say we could use a design slash marketing BDFL, you know, because
djangoproject.com, we don't need to go into all that. But there have been multiple attempts with
lots of time spent by very talented volunteers to update that. And yeah, I mean, what, you know,
because what is Django? It's the admin, it's the little rocket, and really, it's djangoproject.com.
And I think that's, that's what's kind of holding us back in terms of, you know, it looks like it
hasn't been updated in a while, because it hasn't. Well, it just got a bit of a refresh.
Okay, I'm sorry. Yeah, I don't, you know, yeah, people are working on it. But I hear you.
2025, or 2024, or 2023, you would, you know, change it.
Yeah, I don't know. I mean, on one hand, that probably means that we're more focused on
code and releases and features than, than, you know, Flash. But, and we're obviously succeeding
despite it. But, you know, that would definitely not hurt.
Well, it's like that uncallied Kenny Valley, right? It's not like as ugly as Simon Willison's
website where you go, oh, this is either a noob or like a pro, right? It's like somewhere in between.
That's, that's the problem. Don't be in between.
Yeah. No, I, I, I've often thought that I'm kind of surprised that, like, an up and coming designer
has not approached Simon about Dataset and saying, hey, like, I will, I will do this for you.
But like, I just want some credit, right? Like, I've always kind of wondered, because I mean,
Dataset works great. Like, it's fine. Like, but it's very, you know, designed by programmers.
Right. And, and, you know, I don't think I'd do much better. Right. But,
you know, but it's, it's one of those things where, like, I'm kind of surprised somebody
hasn't reached out. Maybe they have. And maybe it's like, you know, like, it's the features,
not the look. Right. But, but yeah. No, I mean, designs are obviously, obviously important. One
of the things, you know, that we've, as a community have gotten right is docs and, you know, that
they're readable at least. Right. Like, you know, that they, they don't, you know, they look good.
They're not just tech, you know, black text on white background that are organized well and searchable and all
those kinds of things. And that's, that's huge for Django's ability to get picked up by people.
And then, you know, we, we beat this dead horse, but, you know, the community is, I say, ultimately
what we got, right. I don't, I'm not going to put myself in the we there, but that others have
gotten right. You know, even looking around as much as it's nice to think, I wish we had a benevolent
dictator kind of thing, you know, look at, look at WordPress, look at material, right. Where you
have, you know, one person
can have whatever sort of mental health crisis they're having and just blow up an entire thing.
And absolutely. Yeah. So that's a root. And I think that, yeah, that's the danger, right. Like,
or even not even blow it up, but just lose interest or lose focus. Yeah. Lose interest or,
I mean, or alienate. Yeah. Right. There's, you don't have to fully, I mean, the material thing
is wild. I don't know if you followed that at all, where the, just like suddenly I followed the word
press one with, yeah. And, uh, uh, just like, you know, it's just like everything you could do to,
to shoot your community in the foot, right. Like as, like as a master class, um, and someone who
up until that point had about as good a reputation as you can have too. Right. Which is why partly
why it's so strange, but yeah, I mean, I've never been a WordPress user really. And you know,
because early days they had lots of security and update early days and quotes there.
Well, yeah. Uh, and I have to use it for some stuff now.
Yeah. And I, I don't, you know, and I it's gotten way, way, way better. Like don't, don't get me
wrong. Um, but you know, I just never got into that world and all of my CMS needs, even with
clients have been, I've been able to do with Django and it was obviously home. And so like I, I wouldn't
look elsewhere. Uh, but, but yeah, I, I don't, I don't understand how, you know, well really anybody
powerful tech position that is making really good money for some definition of really good money.
I don't understand when they go for the money grab, right. If you know, just any pick large
tech CEO. I don't understand when it's like, oh, okay, this means I'm going to make 1% less money.
So I'm going to make this horrible decision. I just don't understand it. I, I don't understand
why they don't just retire and have boat drinks. You know, is, is that not because
there's the sort of, when you're so dissenters desensitized to the world that all that's left
is the graph or you can see as the graph going up or down and down is not acceptable.
I, I, I guess I get that on some level, you know, like I always wondered about like Bill Gates,
right? Like when he was at the height of, of things, I was like, why, why are you still
doing this? Why aren't you, you know, playing golf or whatever it is you enjoy. Right. Um,
and, and it turns out like, you know, I watched a documentary and read a little
more about him kind of personally. And what he enjoys is that thinking through
the problems. And I, and he basically structured his job and his role at Microsoft for years to,
he wasn't, he wasn't in HR meetings about 401k bullshit. Right. He was, he was just there talking
about like, what is the next, you know, what is the next focus and what is the cool tech that
we're doing in R and D and, and helping steer that. And I could see that still being fun. Right. Uh,
but yeah, I don't, I don't get when, when somebody's like, oh, well I could make 1% more
money and I'm already loaded. I just. Yeah.
I think you just go insane at a certain point with too much power and surrounded by yes,
men and women. I mean, I think we've seen, yeah, this is the history of the world, right? I mean,
so Carlton, you're the philosopher. What do you.
Well, no, well, okay. Well, I, I'm not gonna answer that. That's just, that's just crazy. I
wanna bring you back. But Frank, so you've got as long, as long of you of, of Django as you have.
And we were talking there about, um, you know, B BDF sales and the BDFL model,
perhaps going wrong at times. And Django's community model is
very strong, but sometimes we have not sometimes quite often we feel that we go too slowly because
of it. And it feels like there's a trade-off that like, you've got these two obvious models and one
of them, they've each Google got their downsides. Do you, are there obvious things that you think,
or not obviously are there things with your sort of long view of Django that you'd think,
do you know, we can speed up there. We can change that. We should, we can perhaps do this.
Yeah. I mean, there's definitely been points over time where it's like, oh man,
like, like, you know, like we've been discussing in the, on the steering council about elevating,
elevating the, the visibility of third-party packages. Anybody in the community knows that
half of Django strength is the ability to grab third-party packages to solve the problem that
you're facing or the, the, you know, something like Django storages to store files in S3,
for example, like, you know, that's one of those things that, you know, a lot of people are like,
why isn't this in core? And it, you know, it's so that it doesn't have to move slow,
right? Like just the, you know, the same kind of course where
things go to die, like from the, from the Python world, it's not quite true,
but there's no good reason that it has to come in. Right. Um, and so it's better to be out and,
you know, fellows can only do so much and maintain so much, but there's so many times
that I've run into people that they're like, they're unaware of that. Like they're doing
their own S3 file handling from hand by hand with Bodo because they don't just, they just don't know
Django storages existed. And, and, and they, they've never heard of Django packages or awesome
Django or jazz band.
Or any of the things that like everybody who's really plugged into the community knows and not
even really plugged into the community. I just mean like, you know, barely plugged into the
community. It's in the, you know, it's in the official tutorial now, like there's a link to
finally, finally, but yeah, I agree. I mean, it's yeah. Right. And so, so yeah. So like one of the
things the steering council is doing that Carlton and I are on is, is trying to help elevate that a
little bit, um, and making it a little more acceptable. There was always this feeling like,
well, we Django shouldn't pick winners.
Winners here. And I still think that to a certain extent, right. I mean, like we've got three or
four CMS solutions. I don't want to say that CMS solution. I want to tell you about my favorite. I
have the one I steer clients towards the others are fine. They're just, they're just not for me.
Right. Like I, I like certain features of this versus that I like, you know,
the amount of work I have to do to achieve what it is I want to achieve with different libraries.
You know, there's certain ones like Carlton, you maintain some that are great,
but I don't use because you're not allowed to not use them,
but, but there's, but there's a lot that, you know, I do use. Right. And so like,
it just depends on like what, you know, what kind of thing I'm doing. I don't do a lot of
form stuff because most of our projects of late have been API stuff. So I don't have a
lot of need for libraries related to forms. Um, you know, right. And, and, and so like,
that's, you know, that doesn't mean that they're bad. Like, and, and I, that doesn't mean that
everybody should
you react front ends, you know, by any means, but, but yeah, like just the fact that like we,
we all know that there's this handful of libraries that are the top for this category and this
handful for the top for this category. And if anybody asked us, we would list them off,
off the top of our head. The fact that they're not that visible to the wider community is I
think holding Django back a little bit. Um, because you know, like we were talking about
with WordPress, everybody's the thing about WordPress is you can get a plugin to do anything.
Nobody necessarily knows that about Django, right. As when they walk in the door.
Well, I've long thought since I need to do videos of like a third party Thursdays, because I, I mean,
part of it is, you know, those of us, it's like, we're like, it's out there, like we're doing stuff,
you know, like they're like the awesome Django repo that I'm, you know, manage with Jeff triplet,
um, your partner, we just hit 10,000 stars, you know, Django packages Jeff now runs with help,
um, gets a lot of traffic.
But yes, still a lot of traffic. Yeah. So people don't know about these things or even if they do,
they want some degree of curation, which makes sense. Right. You can't just go, you can't just
go by recency and stars. Um, and if you don't have, you know, a podcast where you can lob these
questions to a guess, how do you, well, like you just, you just mentioned like having a, you know,
a third party Thursdays, like when I first. You know, got involved in using Django as a developer
and not just friends of the founders. Um,
one of the things that I found really valuable was, uh, Python module of the week. Yes. Um, the,
and, and it, it exposed me very, you know, slowly, but over time to standard library modules that I
didn't know that existed. And that's partly because I came from a Pearl world where there
wasn't that much of a standard library compared to Python, Python standard libraries, probably
four or five X, the size of pearls where at the time, see,
was way larger than the cheese shop way back then, right?
Right. And so you knew, you know, you always had a handful of third party packages in a Perl project where that just wasn't as common with Django or with Python, which is why like early Django had no dependencies.
Right. And still only has what just 304 ITZ basically.
Yeah. It just it's just a handful.
Yeah. Well, yeah, you just I mean, you need that kind of you need the interest.
OK, you can't give someone the interest, but you need that drip function.
Right. Like I've maybe I should maybe I should do a newsletter newsletter.
There's a year's worth of videos.
Django. Yeah. Yeah. Django app of the week or whatever.
Right. I thought about doing that a couple of times that I just sadly haven't had.
Yeah. Well, because I think and we could link to it, you know, on the forum.
I put a post. I've done some posts and Jeff has actually helped, you know, try to do some API statistics, which we can debate how accurate those are.
But, you know, some version of like top tens, I feel like that's a perennial thing.
Like I'd love.
I'd love to get, you know, just the top tens that people are using because I invariably find stuff that way.
Well, I'm like Carlton. I ended up talking about this a couple of weeks ago.
I've always had this idea of basically creating a FICO like score for software packages and libraries where.
Go ahead. Yeah.
Somebody, you know, somebody me in a small group come up with here are the factors that matter.
But the factors are kept close hold so that you can't.
Proprietary, baby.
Right. Yeah.
And not like in a way to make money off of it, but just in a here's the, you know, I don't know, the Frank score for, you know.
It's got to be called the Frank score.
It's got to be called the Frank score.
And that if you over time learn to trust the Frank score, then you can trust future Frank scores on other on other things.
Right. And I think that could be a way.
You know, like I haven't had time to do it, obviously, but I have some ideas of things like, you know, around velocity of of of, you know, issues versus pull requests versus releases, like things that are a little deeper, you know, downloads, obviously factor in there, not just stars, but like things that would be not impossible, but more difficult to gain.
You have like a six, eight factor model.
We could probably probably probably end up at this relatively the same place on that.
But that would be what you what one would do.
Right. And maybe expand it to other systems, too, right?
Like it doesn't not just Python or not just Django, but, you know, JavaScript and Debian packages and, you know, like Rust crates or whatever.
But, you know, JavaScript packages is a nice one because as a Django developer, what you want is the sort of the recommendation for JavaScript packages, which are kind of Django adjacent rather than dropping you right into the, you know, the pickle bat.
Yeah.
Well, and then like the other thing I think that happens, too, is often.
Often there's a new, you know, kid on the block that is dramatically better than the, you know, the status quo.
And many of us find it and use it and know and talk amongst ourselves.
This is so much, you know, this is and it's ready.
It's ready for primetime.
It's, you know, and but people are slow to adjust to it.
And I think one of the things that we wanted to talk about, like one of one good example of this is UV.
Yeah, let's do it.
You know.
Like, you know, tried out UV, like, you know, first couple of weeks, a little rocky, a couple of features I needed, couldn't use it for all projects.
But like very quickly, within a couple of months, we were switching most of our projects to it.
And now I don't even know if we have a project where I fully get to decide what's used that isn't UV.
And that's been in like less than a year.
Right.
Can you mention that?
Yeah.
Well, just a year.
It was February, February when it came out.
I've been doing my research, Carlton, because PyCharm has UV support.
And so at PyCon US, I spent the morning.
We're doing some stuff around that.
Now, of course, you know, support, we can make it better, but we have built in tools and I suspect other IDs will as well.
But I want to ask you, Frank.
So for a Greenfield project, sure.
One of the things is how do you decide, you know, switching over to it from a more legacy?
Project.
You must have some battle stories on that.
That's the thing is it really, it takes, you know, 15 minutes and we're switched over to UV and CI and everything.
Wow.
Hmm.
Right.
Like we had one project where there was like a weird wig.
We were accidentally and didn't even know it relying on kind of an old dependency resolution to get the packages we needed.
And that might have taken me half an hour, an hour to sort out that I need to pin this one, you know, like to figure out which is the best way to do it.
Is it the one that I, you know, the dependency of the dependency of the dependency that I needed to pin to not cause the test failure?
Like that took me a little bit, but like most projects, it's been put UV in front of your PIP commands in local stuff and in your Docker file and in your CI and you're done.
Well, and that's the thing is it's, you know, Charlie Marsh, the creator was making the point that it's, it's not just fast.
It's so fast that changes how you do things.
Like for example, things that were written, the CI, you can put into precast.
You can put into pre commit as like, as one example, I'm curious, are there any other ones like that, that you've found since you've, you know, been using it a bunch?
No, I mean, like we, we are using that one, for example, are you, um, I'm not using that all over the place.
Jeff just kind of tuned me into that, uh, a couple of months ago.
And so I haven't gone back and done that to some, some projects.
Uh, but yeah, it's so incredibly fast that like, you know, like I think it was, uh, Sebastian from fast API.
I said, he was like, I had to double check that it actually ran right.
Like, and, and that's, you know, that's, and that might've been for rough.
I might be getting that quote wrong.
That might've been for rough, but, but like, you know, that's, it is, it changes your workflow, right?
Like I, I went from, you know, like rough on save, right.
I, I run rough every time I, I save and I save habitually.
Yeah.
I, I use rough, rough to commit and just, yeah, I don't even think about it.
Yeah.
Yeah.
It's yeah.
I, I save.
Every time I stopped to think right in my editor five times a day and yeah, we're like five times a minute, but, uh, but yeah, no, I, I, yeah, I, I, I over save for sure.
But, um, uh, but I, I lost, I lost two weeks of work once and, uh, and I've never forgotten it 20, 20 years ago.
Oh man.
I, I still have my editor configured to create a timestamp backup of every save.
And so there'll be like four.
A minute, five, a minute of them.
But the number of times over the years that I've gone in, found the, found the version that had the exact thing that I deleted and saved me.
It's worth, it's worth having it.
Well, it's sort of like, like, you know, get branches being cheap changed how we all worked.
Like subversion creating a branch might be go get a sandwich on a, you know, large legacy project.
Right.
And, you know, and get makes it instant.
And so you create lots of small branches, um, and UV changes.
Yeah.
Like I'll just install stuff, you know, to play with it and then get rid of it.
And I'm not even concerned with how much time that's going to take.
Well, in some ID, I'm sorry, Carlton.
I'll one, one last point.
I'll just say some, you do yours.
Thank you.
Uh, some IDs as well, you know, pie charm is an example.
Uh, VS code has this, I'm sure others do have, you know, a local history kind of thing, which is basically like, you don't have to configure it yourself, but it will save a lot of things for you.
So that hopefully broadly speaking, losing, just losing stuff is a lot harder now than it was, you know, 20 years ago.
Yeah, absolutely.
Uh, the, the other, um, uh, aspect of that, I think is that like cycle time is super important to flow.
Right.
Um, I talk about this a lot, especially with clients that, you know, if you, you know, if your CI is two minutes, that's amazing.
That's great.
One minute, 30 seconds is even better.
And, and, and, and focusing in on that, right.
How long your tests run, right.
That ability to just iterate and try.
Let me try that.
Nope.
Let me try that.
Let me try that.
If trying something means 30 minutes, you just, you, you start to debate your choices.
You maybe pick the wrong one, right.
Instead of try all three, right.
Um, you, you, you, you lose flow.
You lose your place.
You, you know, naturally our brains.
Our brains are, you know, you're on Reddit all of a sudden, and you're like, how the hell did I get here?
Right.
You know, you're texting your wife, you're, you know, you're checking your total waste of time, whatever.
Yeah, no, no, not waste of time, but like you just get distracted because you know, it's like the, oh, we're compiling.
And so like, let's go get coffee, right?
Like that, that, that slows everything down.
And so if I can, you know, construct the scenario and iterate on it in, you know, increments of, you know, single digit minutes, I can just plow
through stuff, but if it's double digit minutes, I'm, I'm walking through stuff, right?
Yeah.
And getting in, like, you know, when you're working on something and you've got exactly the test that you need and you can just run it, run it, run it, change, run it.
Yeah.
Okay.
Problem solved in 15 minutes instead of all day.
Yeah.
Right.
Yeah.
No, absolutely.
Hacksoft is your development partner beyond code from custom software development to consulting team augmentation or opening an office in Bulgaria.
You're ready to take your project to the next level.
Well, and that was the, in the UI, okay.
I'm sorry, Carlton.
I'll just, this promise last one.
I was just going to make the point that in UI UX stuff, there was, this is back a number of years.
They did the research on, I forget how many, like hundreds of a second it was, but if the page took a little bit more on amazon.com, the percentage of people just like leaving when, you know, so just a clear speed, you know, and it just, yeah, just.
If it pauses you at all, you know, and I think it's even worse, worse as a programmer, because you're trying to be in a flow state.
You're trying to like have the tools take care of themselves, not get in the way.
Absolutely.
And, and yeah, I mean, I, I spent, you know, a large part of yesterday shaving a hundred milliseconds off an e-commerce site, right?
Like, and you know, and it's one of those things that, you know, people are like, oh, it's fast enough.
And it's like, eh, it can be a little faster.
Like, let me spend a couple hours here and shave that off because yeah, the research has shown you can feel a hundred.
Yeah.
Milliseconds.
Okay.
I'm done, Carlton.
Go.
Okay.
No, I was just going to swing back to the, so the example you hit was one of these cases where UV doesn't handle the sort of legacy resolving algorithm.
And what's interesting, you said you've only hit that once.
I mean, I wonder if like PIP itself could sort of use the much faster algorithm.
Yes, UV is written in Rust, but a lot of it is to do with the caching and the different algorithm that's used, not necessarily just the fact that it's in Rust.
And I wonder if PIP could sort of implement the more optimistic algorithm and only fall back to the legacy slow one if that failed.
Because I think there's performance being left on the table.
They did make a change.
Yeah.
Cool.
Yeah.
But I do, I do think that, like, I think they did make a change because there was a PIP change where you could say, like, use the legacy resolver in PIP a while back.
And I think I may have basically leapfrogged that problem with UV before.
You know, before, like, I would have run into it with PIP.
But, but you're right.
They may be able to do that.
And I would imagine, you know, they're going to strive for a little more performance parity with UV, but I don't think they're ever going to really get there because of Rust.
Right.
And, and I don't know, you know, sure.
I think we should always have some competition in tools.
Right.
Because it makes everything better.
But I think that, you know, for the foreseeable future, UV is going to win.
Um, you know, and, but the minute somebody comes up with something that's twice as fast and dart or whatever, like I'm going to, I'm going to use that, you know, uh, but I don't quite understand people's concern about the switching cost on this because I've yet to have the switch take more than an hour for large projects and microservice projects.
And like, I mean, like it does not take very long.
And then the other argument I've heard people make is that like, because it has some VC.
Backing like what happens when they pull the rug.
And, uh, I, I, I, I jokingly said on, on social media, I was like, well, then we'll fork it and call it the U and, and, you know, like, and run with it for a year before we really have issues.
And somebody will come along and maintain that or, or, or they'll come up with a new one and we'll switch to it.
And it'll take me another 15 minutes in years down the road.
Like, I mean, I don't, I don't expect Charlie and, and, and the astral team to do that.
Uh, you know, I think that they've got other ways to make money, but even if they were like the switching cost is so small, you know, it's not like switching from Python to rust or something.
Right.
Like this is a pretty small piece of the puzzle, um, to, to, of your stack.
Like it's a, it's a very important part, but it's a pretty small one to switch really.
Right.
Switching testing libraries would be weeks of work.
Right.
Uh, or switching from Django to something else would be weeks and months of work for most projects.
But like switching how you install your PIP packages, like just like moving to Docker, right.
Like might take you a whole day if you don't know anything about Docker, right.
It might take you two or three days if you know nothing about Docker, but like now I can move a project from not Docker to Docker in an hour.
Most of that's finding your template Docker file to copy across.
Exactly.
And knowing kind of, you know, like I already understand how layers work and what I need to do.
And that, that one time I ran into the lib G DAO problem.
Like that, that, you know, that kind of stuff that like that, that is, you know, that is because I, I do this a lot.
Right.
And I do this a lot for lots of projects where most people have a project or two that they change once or twice a year.
So it probably feels harder.
Uh, but honestly, like it's really not, it's really not that big a deal.
Most of these, these sorts of changes.
Right.
So God, I, so, so you, um, said you were still mainly doing Russ, uh, rest APIs and, you know, um.
React front end in front of that.
Is that, that's still the case.
You haven't swung into the HTMX world.
And not as much, um, the, the rest of my team, um, uh, does that more, uh, mostly because most of my team doesn't, doesn't know JavaScript very well.
Um, and so it's, it's much easier and, and it depends on the project, obviously, like, you know, uh, we've talked about this, like we have some projects where, you know, there's, you know, it's a large site, a hundred thousand lines of code.
There's seven elements that kind of need that.
that reactive slickness to it that HTMX can provide.
htmix perfect for that sort of thing or even just a little bit of vanilla javascript right like
that's perfectly acceptable for those kinds of projects and it's the sort of projects that
members of my team that don't know javascript can do or i can jump in and do those little bits right
um but then we have other ones where it's like i've got you know it's a it's a full flow full
fledge desktop app but in a browser and those you know and so far in my experience are easier for me
to do in react at this point and you know i'm sad to say that i'm almost faster with jsx these days
than i am django templates which really surprises me but i still occasionally get tripped up on
something in a django template that years like i remember from years ago oh yeah i remember you
gotta do that and then like but it'll trip me up for it'll trip me up for five minutes right and
uh where like i just i'm in flow with jsx these days so like i've moved my personal blog
to astro
yeah simply because it's a it supports mdx which is marked down with jsx components in it and that
seems to be the sweet spot for me and and like simple blog like website okay so from that
perspective what's because um you know one thing that always comes up as well is uh django's front
end story or lack of front end story and you know if you're just using it it's all the old-fashioned
django way static files does everything you maybe got django compressor to you know compile combine
um from a react as from a react kind of point of view what what integrations or what things would
you like to see that you know help django integrate with the more you know next js astro react worlds
i i think we've already got it really um you know django webpack loader django v basically take care
of it um you know if you're starting a new project definitely use vt uh vjs um it's a bundler and
transpiler and does all the all those pieces for you that's much much simpler and it's a lot more
than webpack um but just as powerful and quite a bit faster honestly um most of our projects have
moved from webpack to vt um as the next time we need to touch them um and it's install a django
app toss it in installed apps load a django template tag in your base template and that
you're integrated like that's it like there's no there's other more to do so i don't know that we
need any tighter integration than that except maybe you know if
five years down the line vt is the de facto only way to do that in the javascript world which i
would find hard to believe any one thing to be the de facto way maybe that gets pulled into core just
because it you know it's a small project right it's not it's not going to be a large lift to
maintain uh but i think that we really dodged a bullet as a framework not picking one because
the javascript ecosystem has moved so fast right like if if we had to pick a framework that was
going to be fixed um um what was before uh react that um oh no no that's css um no that's css um
oh it's driving me nuts i keep wanting to say no no i keep going to say bootstrap it's not bootstrap
it's um yeah but i just had to move somebody off of it a couple years ago but um we'll find it
backbone thank you
backbone was was the hotness around the time this kind of started talk you know in a jquery
and like let's bundle these let's make a better front end story and we'd still be having to
support backbone um which basically no one uses um and then moving off of it would be oh well
now i've broken you know like i can't upgrade to django you know 2.2 because it doesn't support
backbone anymore you know and and we'd be playing that game
every couple of lts releases as as javascript changes right and even as much as i think you
know there's merit to bringing htmx in i think that we might look in 10 years assuming django
still around you know knock on wood but that we'd be we'd regret that decision right and and like i
said the integration is is small it's it's like i don't know it's sort of like should we bring uv
into django like it you know we're only going to work with this
like i don't think we need that i think that you know a couple of good blog posts a couple of good
doc posts you know pages in the documentation of how to do this and show that it's 15 minutes and
you're running i don't know that we need again it's that lack of messaging more than the actual
what's actually there yeah all right i'm gonna give you some messaging tell me about cube anypod
because you just released this let's go yes so
it's my it's my second real kubernetes related cli tool written in rust the other one is called
kube secrets um it's a little tool that removes an annoyance i have with working with kubernetes
all day um and that is you know one of the benefits of kubernetes is that your your pods
which are one or more containers that run together um have very randomized ish names
and so but you often want to just pop into one of them and check is the django setting set to what i
think it is right like i've set the environment variable i'm pretty sure that you know but i want
to pop in and double check you just hit a url that doesn't exist right well yeah that's one way but
um yeah yeah but like you know that's the sort of thing i'm talking about like i just need to pop in
i need to run this this
i need to do a management command that you know resets some some situation or or does some batch
processing or something that i need to do and so the first thing i have to do is say tell me the
list of the current pods and then i have to cut and paste one of those to pop into it um we also
have a pattern we use with uh just the command runner to exec into a pod take a snapshot of the
database copy it local and restore it into our local compose environment because often
it's very convenient to grab a copy of production bring it local to debug a certain situation
instead of trying to you know scaffold that situation's data correctly to debug it and that
also i need to know a pod name to exec into it to take the back up and bring it down um and so that
finally annoyed me enough that i built a little tool that just you give it a string prefix of the
deployment or staple set that you've got there and it comes back with any one of like the first
pod name it finds and or execs you into the first pod that it finds and so it's a little bitty tool
uh but it's one of those that i probably do that 10 times a day and so it's you know now that it's
one easy command and not two or three commands is is very nice um you know there's other tools that
make some of that a little easier sometimes like k9s if you're doing kubernetes and you don't know
k9s uh definitely look that up it's it's like top for kubernetes um gives you a super easy
access to getting a shell in a container or getting the logs or seeing the definition of
the pods yaml um seeing memory and cpu statistics and things it's a great little window into your
kube cluster um but yeah that's one of those uh it's also a clod uh success story um i know enough
rust uh but it would have been a lot easier if i had a little bit more experience with that but
it would have been a lot easier if i had a little bit more experience with that but it would have
been a lot easier if i had a little bit more experience with that but it would have been a lot easier
it would have been a lot easier if i had a little bit more experience with that but it would have been
it would have been a lot easier if i had a little bit more experience with that but it would have been
taken me all afternoon if not all day to get it right um and then i thought you know i'm gonna do
this in python but like let me just try clod with rust and about 30 minutes later it was working
and about 30 more minutes i had it polished and then i spent about an hour on you know the read
me and the docs and and uh and then clod helped me set up the github actions to do the the multi
architecture build for linux intel and arm
and windows and just automate that as part of the release process so if i push a tag it builds and
releases binaries for everybody um which was great and so yeah at two hours i had my tool and that's
just amazing because ask you then about llm jobs enjoying using clod and you know they make a big
difference right yeah they do um in in you know used smartly they're they're not perfect right
you gotta you know you need to be able to do it right you gotta you know you need to be able to
have tests you need to you need to kind of understand what it is you're trying to accomplish
um they do hallucinate things uh but often it's very apparent you know they're you know they're
trying to pip install a library that doesn't exist something like that you know like and and
you can quickly say oh no no use this library and then it's no longer confused right um i find them
super useful 90 of the time about 10 of the time i'm just like i get frustrated i know what
i need to do and i've tried to prompt twice and it's you know what it's going to take me 15 minutes
but i'm just going to i'm just going to code this part because i know what needs to happen right but
where i found it'd be super useful like quad desktop um for i am confused about this situation
like i i i see this i'm getting this error message i think that's this but blah blah blah
and it comes back with an answer usually in an area that i'm not super familiar with like i had
an fm mpeg issue converting some video for a client that i was getting this weird header error
out of fm mpeg and uh and then i had no idea what was going wrong and what it ended up being was
the file name suffix was telling me it was one codec but the file was actually a different codec
so somewhere in my code or my stack it was appending a suffix that didn't match and so
i was telling it to convert from a to b
and it really wasn't a and that and you know and it just didn't give me a good error message saying
hey you you said this was webm but it's actually mp4 right instead it just said you know header
error at byte zero you know something something and i'm like what and and it worked for 300
of the 306 users that had done it that day but those six had a problem and i
just was sure it was something deeper than that right and so i overlooked it
but it quickly said like double check the file type and i'm like yeah let me do that i pulled
it down it's like oh this is an mp4 you know probably saved me two hours of debugging by
just like a perfect example because the the the api on that or the user interface on that is so
big that no human could ever master it was you know an lm could be like no you need these options
well i find it i find it really great for like these tools like any pod that thing i've always
wanted but i haven't found a saturday afternoon free enough you know that i felt like spending
building it i can often build it in 30 minutes a really rough version not one i would release
to others but something that does what i need real quick in a in a virtual environment on my laptop
maybe that maybe never even makes it to github right like just a throwaway tool
and you know i i get a lot of situations with clients where they're like they'll give me an email
that says hey we we noticed there's this problem with these 93 records
here are the uuid primary keys of them and i have to like cut and paste them into something
turn them into a python list to go fix them right and i can take the whole email
select all paste it into claude say hey see those uuids turn them into a python list for
me and two seconds later i've got a python list and then i can cut and paste that into my shell or
or whatever you know into my code and and take care of it from there and if nothing else it's
saving me some carp right like you know like i just just put in quotes you know i can do it with
my editor i can do the regex that'll put quotes on the front and quotes in the commas on the end
and like i can do it pretty quick i've done it for years but i can't do it as quick as an llm yeah
good uh in mythical man month there's this um graph where it's like works on my machine and
then to get it into a product it's like times three and to get it into something you can actually sell
times three again whereas if you just want that down the bottom you can get it done you know
you you don't need all those refinements oh yeah well even just thinking about thinking about like
i know what options i want i know what defaults i want i don't have to think through or provide
a way for you to do your defaults carlton like i can just do what i want the way i need it
only taking into consideration my scenario you know like i can hard code things to a
kubernetes cluster name that you could never do in a tool you know in a real tool in the real world
right it's in a real tool yeah yeah i find it cool i was just going to say i find them fantastically
useful for those you know finding a missed comma or dumping in a whole bunch of stuff and i guess
yeah i was trying to think about it it's sort of error checking that for whatever reason other
error tools that we have don't pick up you know the framework doesn't pick up or python doesn't
pick up and so hopefully that's something where i remember back when i was way back getting started
you know if i missed a comma or something that could be days of my life and now you know even
for a beginner i think that's a very appropriate use case to just dump it in and see what it spits
out because it's they're they are so good at spotting those things well and as a rubber ducking
debugger right like we've all had that experience where like we're just not sure what's going wrong
and we end up talking to a colleague about the problem and maybe even they don't even
say anything about halfway through our conversation we come up with what the possible answer is
but this is somebody i can talk to about it at two o'clock in the morning
if i'm up with some insomnia right and you know yeah hey claude you know what are you doing you
know but select chatty mode
yeah yeah exactly but you know and and you know and then tools like aider i'm a big fan of aider
at this point um because i can talk to a lot of people on the internet and i can talk to a lot of
people on the internet and i can talk to a lot of people on the internet and i can talk to a lot of people
on the internet and i can talk to a lot of people on the internet and i can talk to a lot of people on the internet
and i can talk to a lot of people on the internet and i can talk to a lot of people on the internet
because i can really control what context
because i can really control what context
because i can really control what context goes to quad
goes to quad
goes to quad that helps focus the answer i get back
that helps focus the answer i get back
that helps focus the answer i get back right like here's the model you need
right like here's the model you need
right like here's the model you need here's the view you need here's the test
here's the view you need here's the test
here's the view you need here's the test you need like
you need like
you need like write me another test but that checks
write me another test but that checks
write me another test but that checks these two scenarios
these two scenarios
these two scenarios do it in the style of the existing tests
do it in the style of the existing tests
do it in the style of the existing tests that are there and it basically spits
that are there and it basically spits
that are there and it basically spits out a test like i would write it using
out a test like i would write it using
out a test like i would write it using the fixtures that i've provided and
the fixtures that i've provided and
the fixtures that i've provided and everything and i don't have to do much
everything and i don't have to do much
everything and i don't have to do much to it
to it
to it um and it's great and it costs you one
um and it's great and it costs you one
um and it's great and it costs you one cent sometimes yeah jeff jeff is going
cent sometimes yeah jeff jeff is going
cent sometimes yeah jeff jeff is going on and on about this to me and
on the socials. I just sorry, Carlton, one last one. I just so what how exactly do you have it
set up? Because right, like you, people can use these within IDEs, you can use the desktop app,
you can use the web app, you can
CLI it up, you know, assignments, tools, like what's your particular poison?
So a little bit of all of it. So if it's the random question, like that FFmpeg thing,
I'm called desktop. I just paste the error in and say, this is what I'm trying to do.
This is, this is the error I'm getting. Can you give me some hints as to what maybe the problem
might be? And, you know, it spits back some stuff and maybe there's a follow-up question or two,
right? And I just kind of have a thread about that. Sometimes it's just, I forget the, the,
the best way to iterate through a list of lists. Can you show me an example? And it will spit out
a little example that I can basically cut and paste into my code. If it's, I'm writing a test
or I'm wanting you to add a feature to, you know, some code, I'm probably using Ader to do that.
And then a little bit of like Pydantic AI.
Or something like, like Simon's LLM tool. If I'm building something that's a little more
reusable, right? Like one of the things that I often, when I write a blog post for whatever
reason, it'll take me an hour to write the blog post. And then I'll spend an hour agonizing about
how to summarize it for the tweet and for the, for the meta description tag. Like what's the,
you know, like it'll take me almost as much time to, to do that.
As to write the post. And so now I ask Claude or Chad GPT, here's the post, give me 10 headlines,
10 tweets, 10 summaries of this. And I kind of pick and choose from there. Oh, I like that wording,
but maybe not that whole sentence. Like, let me put those two. And then I'm done in five minutes
or 10 minutes instead of an hour. And, and so I have that. And it's worth it to avoid the agony,
right? Right.
It is interesting, like the, the cutoff for when, you know, so we have, you have a monthly
subscription and then when are you willing to pay, you know, pennies, dollars? Yeah.
I, I, I think, I think people would be very surprised how little it costs. So when I first
started using Ader, you know, and Claude, they gave me $5 of free credit or whatever. And I
thought, okay, well, I'm probably going to burn through that really quickly. So I threw 20 bucks
in and then I was using Ader and it even shows you like, how much was this last prompt? How much
have you spent this session? So you can kind of keep track of, of what's happening. And then I
ran into an API limit and I saw something Simon had said that basically people who spend more,
get a little bit higher API limits. So I threw another a hundred bucks in
that was in December and Mike, so 125 total from December. And I think I'm down to like
118.
$15 of credit, right? Like now I'm not using it eight hours a day or anything,
but I'm probably using it at least 30 minutes a day, if not an hour on the Ader API side where
you're paying. Right. Um, and like, I'll have, you know, any pod cost, it was worth it. Right.
Right. It was a dollar. I got the tool I wanted in an hour for a dollar. Right. Um, now is it
the best rust?
In the world? Absolutely not. Right. Could I dry it up a little bit? Absolutely. I even had it go
through and cause it was really not dry, uh, the first version. And so I had to dry itself up a
little bit. And, uh, but still I see some stuff in there that I'm like, oh, okay. Like this should
really be a function that just takes a workload and like, you know, but like, I'm just going to
leave it. Like it's, it's like 600 lines of rust. Like I don't really care. Right. Uh, it does the
job. Um, and also I had to get home to dinner. Right. And so.
You know, maybe, maybe someday I'll, I'll, I'll pick that back up, but, but yeah, like some of
the things, you know, like we're, we're really approaching a time where you can build real
software in a day for 10 bucks. Right. If you're an experienced programmer, I'm not trying to say
that in a way that like, right. That's, that's me prompting along, right. Knowing exactly what I
want, how I want it architected. It's just, it's saving me from the, oh, I missed a comment.
Uh, the agonizing of what am I going to name this function? You know, like it just puts it there.
And then I look and I'm like, you know, that's a perfectly appropriate name, right. Or it's not.
And I change it. Right. Um, that variable message, you know, that, that comment is confusing. Let me
change it or it's wrong. You know, um, I, I can focus on the parts that the higher value stuff,
right. Just like we don't, I don't write code and assembly. Right. Um, I could like, you know,
I learned it at one point.
Enough to build a little dumb calculator. Right. But like, I wouldn't want to work in that all day.
I'd be doing something else. I'd be a lawyer or something. I don't know. But, uh,
that, you know, that's the low level and, and, and, but the higher, the higher level of stuff
still takes thought and effort and experience and everything. And, and, you know, my, I don't
care if quad gets three times as good as it is right now. My wife is not going to build great
software with it. Right. Perfectly capable of building those throwaway tools that work for me.
Right. Um, but, but for, uh, you know, you, you know, the, the idea that anytime in the next 10
years, Amazon is going to have, you know, 10 high school kids and they're going to maintain
Amazon software is just insane. We have it in the U S government at the moment.
It's working really well so far, as we can see.
Just jokingly here. It seems like there's a good empirical experiment going on for years. They've
said less government. Well,
they're testing that and everyone else is just going to sit back and see, you know, it's the
name of science. Yeah. I mean, it is, it is an experiment. Um, this may be one that we look back
on as, and, uh, and, and things should have been an illegal experiment, but, uh, like, you know,
you know, like we've, we've experimented on people, uh, you know, in ways that weren't ethical in the
past and, uh, have learned from it. And I think this is going to be one of those case studies in
the future of how not to do things. Well, likely the thing that I'm hopeful for with these LLMs,
is to, is that, you know, they open up, um, kind of, let's call it automate the boring stuff with
Python or build a job blog with Django level skills to almost everyone is, you know, and they're not
quite there yet. And, uh, you know, the, the blog won't quite work or the script won't quite work
first out of the thing, but there'll be an awful lot of people that have access to basic software
skills, which currently don't, that's going to be a major change. I mean, you know, I've been around
for a while. I'm kind of old. I've been around for a while. I've been around for a while. I've been
old for, for a techie, uh, at this point. And, uh, you know, when I was in middle school,
I was the computer nerd because I knew how to use a word processor. And in high school,
I was the Uber nerd because I knew about the internet and I had an email, right?
And those things are my, my kids have that stuff now. Right. And it like, you know,
they're doing it on an iPad and it's second nature. Like those are just day-to-day tools.
For 98% of the Western, you know, they're downloading VPNs and they can, you know,
they're doing all this stuff. Well, maybe, you know, but that, I mean, that's a, that's a little
more advanced, but like, you know, you know, word processing, email, searching Google, using,
using basic internet things is, is just table stakes for most jobs at this point. Right. And
I do, I think you're right. I think in five or 10 years, you know, or maybe even faster than that,
a little bit, things like I'm going to build a little bit of software to generate that report.
Because I want to show my boss this report in this fashion, much like people have gotten really
good at Excel. They're going to be able to do that, but against, you know, the data warehouse
without necessarily having to have somebody like us give them the data or massage it in some way.
There's just going to be, they have a read-only connection to the data warehouse and they're
going to play with Claude until they get the answers they want. And I think that's going to
become day-to-day business. Which unlocks, you know, who knows what, but yeah, good stuff.
Yeah. Well, and also it frees us up to do higher value stuff, right? Like, I mean,
there's a lot of times where I'm spending 30 minutes to just get somebody data in a CSV
and the way they need to consume it. That's a one-off that that's not a, this is now a feature
in the product and I never have to do it again, but it's this one weird scenario where they need,
you know, this certain data for this certain time range because of this certain bug or situation or
whatever happened. And, you know,
I'm the one with the quick, easy access and I can do it.
It's an awful expensive way to generate a bit of CSV, right? If you look at it objective.
Exactly. Yeah. Yeah.
Well, Frank, we're close to that time in the show where I have to hand you the magic wand
and tell you, change something in Django. What would it be?
Ooh, I probably should have thought about this.
Anything, anything goes. This, this is something. And I mean, we'll just put aside your
steering wheel.
You're wearing council hat. You're all of the hats that you've worn. It could be something
trivial, but, um, I, this is an idea I've had for a long time. And I, and I think that we may
want to spend a bit of time focused on a couple of very specific performance use case things,
and specifically caching the user model, um, as part of the sessions,
and auth system, not just caching the session, but caching the whole user model, because in a,
in most businessy apps, you're always logged in and you are doing that database query on every
single page, every single API view and removing that sometimes removes a third of the database
queries on that page. Right. And it's, it's fast and it's fine. But like, I think if we
had a backend that was the auth backend, that was more like cache DB for sessions, I think we would
gain, you know, 10% closer parody to faster web frameworks with that one little bit.
It'd be nice if Django could brag about a performance win for a change too. Right. As
everyone else does with synthetic benchmarks and all the rest, I'm sorry, Carlton, but it's true.
It would be nice.
You're going to fire me up now. You're going to fire me up now. Like, okay,
so.
So let's, let's compare the bed, the bed Django example where you haven't optimized at all,
and you've not brought in caching and you're pulling the user model every query and let's
strip it out. So it's equivalent to the others. And then let's see how fast base handler is
compared to your whatever handler you've got. Oh, they're more or less the same. Why? Cause
they're doing the same thing. Oh, sorry. Okay. So gross.
Yeah. I mean, yeah. Plus or minus a couple of function calls. Like they're very, very similar
in the core. Yeah, no, absolutely. And, and, but I'm also obviously, you know,
often surprised at like the performance differences between things. Um, it's really hard. Like
I, I would like to think I have a really great kind of sense for such things, but I would
not have guessed the, the level of impact that Pydantic for serialization would have
had to your average Django rest.
Yeah. No, I mean, yeah. Right. I mean, that's, that's the, that's Ninja's secret sauce there
for me. Um, is nested serializers in Ninja are damn near free.
Right. Where they're terribly expensive in DRF. Um, and so we avoid them in most of our projects
because they're fairly expensive. And you know, it's like your API goes from a hundred milliseconds
to 600 milliseconds and just doing something nested. And that's with select related prefetch
related, all taken care of, like just as best as I can optimize it, it's still slower. And you just
switch over to use Pydantic for your serializer and it, you, you gain hundreds of milliseconds.
And that,
you know, users feel that and it scales better and you save on cloud costs and there's knock on
effects of all that.
I mean, it's the, the, the modern serialization. It's, so it's Pydantic gatters and caters message
spec, like these options, they're just a world apart from, you know, the field space approach
that we had a decade ago.
I'm just shutting a quiet tier because I just finished finally the five X update to
my Django's for APIs book, which is focused on Django rest framework. And I'm well aware that
the next update.
Yeah.
I mean, I, I don't think anybody really goes wrong using DRF, right? Like, but I don't think that like
for me often, and it's, it's my situation, it's not everybody's situation, but for me, performance
often matters, right? Like a lot of this stuff that we do is at pretty, pretty high scale. And so, and,
I have not started an API project with not Ninja after I started one with Ninja, right? And so I
don't think I'll be starting a new DRF project. Um, but there are situations where I would, right?
If we're working with a team that has long and deep DRF experience, and they don't have a huge
performance concern, it's internal tooling or something like they have modest performance needs,
and they're very comfortable with DRF.
I'm not going to
make that whole team learn a new thing unless they want to, right? Like, I'm not going to be like,
no, no, you must like, there's, you know, this is the only acceptable answer. It's, it's, it's, it's
more nuanced than that. And that's, I think, true of everything, right? Like if I, if I consult with
a company and they have deep, deep JavaScript expertise and everything's built in express and
everything's pretty much working, I don't try to switch them over to Django. I help them with their
performance issue and we move on. And, you know, um, we might, you know, rib each other a little
bit about our choices of frameworks and, you know, and, and all good and all good fun.
But like, you know, the, the right tool for me, uh, is, is not always the right tool for you,
uh, especially when it's a large company.
Yeah. I can't think of wiser words to finish on than that.
Absolutely. So Frank, thank you again for coming on. Thank you. We've had a, a run here of steering
council people. We've had, uh, Emma, Lily, Frank, the only one, the only one we're missing is Tim
recently that we've had.
Yeah. We had Tim just before Christmas. So, so, you know, that's true. I mean,
Frank hasn't been on for five years, so.
We've been doing this for six. We've been doing this for six years. So yeah.
Wow.
Well, thank you for, thank you for taking the time, Frank, we will have links to all those
things. People should try out your projects.
Absolutely. Thanks for having me guys. And, uh, I'll see you again in five years.
You'll see me in five years to see Carlton in a month for his, uh, or a week for the steering
council. Yeah. But, uh, Django chat.com and, uh, see you over next time. Bye-bye.
Bye-bye.
This episode was sponsored by Hacksoft, your Django development partner beyond code.
Learn more about their services in the link in the description.