Transcript: From Django 0.9 to Present - Russell Keith-Magee
Hello and welcome to another episode of Django Chat. I'm Will Vincent, joined as always by
Carlton Gibson. Hello, Carlton.
Hello, Will.
And today we are joined by Russell Keith-McGee, who has a huge imprint in the Django community,
and we're thrilled to have him on. Hello, Russell.
Hi, nice to have you. Thanks for having me.
So there's a lot of things we want to talk about today, but if you can give the 30-second
version of how did you get involved with Django and put the exclamation points on all the
ways you've been involved because you've been involved what 12 13 years i mean you're one of
the very very the elders of the community yeah yeah yes yes let me straighten my beard was i
positive sense in a positive sense um so yeah i joined the project i wasn't involved at the
journal world uh i was one of the first or one of the one of the early contributors who joined
the project i downloaded it for the first time around november of 2005 where it was about the
0.9, 0, 0.91 timeframe. At that point in time, it was a period where there was a lot of low
hanging fruit. It was there and it was being used, but there was a lot of stuff that could be
improved. And because it was Python, I could jump in and I could read the code and was able to work
out what was going on. One of the first big contributions I made was around many-to-many
fields. So if you've got your models, you've got a many-to-many field where A is related to B,
Django, as of that time, you could query from A onto Model B, but you couldn't query from B
back onto Model A. And so that was kind of useful. And so I thought maybe I want to be able to do
that. I jumped into the code. It was basically take all the code that was there for one,
copy it, reverse the direction of all of the variable joining order that was happening,
and submitted that as a pull request. And after that and a couple of other smaller pull requests
that I had that I put together because I was just kind of tinkering
and this looked interesting and I had some grand plans
of things I was going to do, Adrian mailed me early January 2006
and said, hey, do you want to join the project?
Now, at that time, what we were doing was a thing called magic removal,
which is this very large-scale rewrite which was only going
to take six months and 1.0 was like weeks away as soon
as we could finish magic removal.
Magic Removal was finished in about six months, and 1.0 took about another two and a half years.
But I was there through that process and was involved in the introduction of the user-facing
testing tools for Django. I mentored a couple of students doing Summer of Code projects,
most notably Alex Gaynor and the introduction of multiple database support,
and a number of other little projects along the way over the course of a couple of years.
And you were in Australia this whole time, right, just because we like to talk upon the global nature.
Were you doing your PhD or did you come out of your PhD program?
No, no, I was well out of PhD at that point.
I finished my PhD in 2001 and was working for a defense consulting company.
Western Australia, in Perth in particular, has a very large naval base and there's a big sort of U.S. naval presence and defense consulting is a thing.
And so I was working for them
and we just happened to have a project
at about the same time that I discovered Django.
Like I was looking at Django
for my own background tinkering side project stuff.
And we happened to have a project
where the project plan,
we'd been funded to build this thing.
We were going to build this giant Java client server application
with databases and user interfaces
and all sorts of things.
And I sort of had this sudden realization
in about February of 2006
that we're proposing to build a website except it's going
to be a lot more complicated and a lot harder to build.
So why don't we just build it as a website?
Like it was a data-gathering site for the idea was that you're going
to have assessors, like teachers, trainers in a military simulation context
looking over students who were operating radars or flying flight simulators
and assessing that they were identifying targets
as they were approaching or whatever they had to do.
They met their criteria for training.
And they were just going to be like checkboxing,
yes, they met this criteria, comment,
they could have done it a little bit better or whatever.
And it is literally just filling in forms,
which is exactly what the web is good for.
So why don't we just build the form in Django and say it's done?
And I pitched this to my immediate supervisor.
I've been fiddling with this thing called Django.
I've got a feeling we could knock this project out
in like about two weeks if we just did it as a website
rather than build this whole client server thing.
And he went off and spent a couple of days
and came back and said, yeah, we can do this.
And we had like first prototypes up in a couple of weeks
and we polished it extensively beyond that.
And it became a major line of revenue
for the company beyond that.
But because I was discovering an open source project
at its early phases,
I had got myself embedded as a member of the core team
And then I managed to work out that I could use Django for my day job.
It sort of became a self-fulfilling prophecy that I then had a reason to work on Django
and was getting not paid to work on Django, but at least paid to address some of the bugs.
And they didn't mind if I answered questions on the mailing list during work hours.
So it kind of meant that there was a reason to stay involved as well.
Right.
And that third piece is not always common.
I mean, some of our guests who are very involved, you know, have to code and not Django during
the day.
Yeah.
And I was very, very lucky in that regard that I did have – I was working for a relatively small company that had certain liberties in the way they're implementing things.
They didn't have to adhere to this huge spec that had been laid down by some huge contractor years before and an engineering manager who was open to the idea of trying something new in the name of getting something done well, so done quickly.
It does also work the other way. If I think of some of the major contributors currently who are there all the time, it's because they're working with Django in day job and have that time. People wonder how is it possible to contribute because it looks like these people are giving out a lot of time and they are, but they have that opportunity.
Yeah, and that I suppose ultimately is the thing, is that money ultimately is what decides what people's attention gets spent on.
Now, there is an extent to which the work that I do in open source, like outside of Django, in Django, everything else that I've done, is the way that I entertain myself of a Saturday morning.
Some people do Sudoku puzzles, I fix bugs in Django, or I fix bugs in an open source project.
And it is a fun intellectual exercise from that perspective.
Particularly when you start getting to the really gnarly problems or the really hairy bugs or the rewriting the website, which everyone really wants to do, having someone paid to do it makes a huge difference.
And having someone whose day job it is means that there is a reason to have this work be done, which is a big – the incentive matters there.
Yeah, I think particularly the ORM, like there's a couple of major contributors there who ongoing basis, if they weren't there, I think it would be really difficult for Django to continue. And we're just very fortunate that they're there and that they, because their work relies on it, they are able to give us that time.
Do you want to call them out by name, Carlton?
Well, Simon Chaletes in particular, Nick Pope, you know, Tom Forbes.
I don't know what his work is, but he gives a lot.
You know, there's a group of half a dozen people who work around the ORM
that without them we'd really struggle to move forward.
But with them we are able to do that, and it's fantastic.
And that is true historically as well.
If you cast back a few years, it was Ansi Karinen, a Finnish guy
who was working through his, I think, PhD, who did a huge amount of work
in sort of the 1.1 to 1.4-ish kind of time frame,
if I remember rightly.
And then even back before that, the reason we have the ORM we have
is almost entirely because Malcolm Trudinick,
who sadly isn't with us and died a few years ago,
spent six months almost on his own time.
He spent a lot of time working for banks,
being paid very well to work for banks,
and then salvaged what was left of his sense of contributing
to the community by contributing to open source projects
like Gnome and Django.
And the ORM we have is almost entirely his original design.
Like, yes, it has been massively improved since,
but the frameworks, the bones of what is there is all Malcolm's work
and was done in, like, a period of about six months
after about three or four rewrites.
And I think at one point I have a recollection of a conversation
with him where, like, he had a big contract with someone,
didn't pay him, and, like, because he wasn't getting paid,
all of a sudden, oh, crap, I have no savings left
because I've spent a lot of money contributing my own savings
to Django instead of getting the next contract
and padding my wallet.
Yeah, difficult, hey?
Perhaps that's a segue.
You've spoken on a number of topics, but one of them is talking about, I mean, PyCon Australia 2015, money, money, money was the title of talking about how to make open source sustainable.
I don't want you to repeat yourself, but where are you at with your thinking on that in 2019?
I don't know that I have any more answers, which is the unfortunate part of it.
Like there are a lot of little things that can work.
I think there are still some – I think the problem we've got is that there are lots of ways that we can make a little bit of money.
And also to be clear, when I'm talking about a little bit of money, I'm talking about money that is sort of less than one full-time employee.
I am able to make a little bit of money through things like GitHub contributors and other forms of small-scale fundraising.
It is very welcome.
I'm very glad, very, very grateful to the people who do sponsor me.
But I'm not quitting my day job anytime soon on the basis of the fundraising that I've
currently been able to do available.
And I have a very high profile, a very large microphone and frequent opportunities to use
it.
And I still can't crack getting people to donate to make things happen.
So we have lots of mechanisms of making a little bit of money.
But the large amounts of money you need to be able to hire multiple people, to be able
hire three or four engineers is remarkably difficult to shake out. And the problem that
I'm seeing is that we haven't worked out how to operationalize the fundraising process.
The altruism is clearly not enough to make it happen. The fact that Django is valuable
is, I don't think anybody who uses it or anyone who's in even the broader Python community who
doesn't necessarily use Django, very few people would say it isn't a good thing that it exists.
It isn't a good thing that Python exists. There is a huge amount of good that is being done with it.
And it is good that you can get at it and it's free to get available. It doesn't cost you anything
to download it. Django girls can use it without having to pay a tithe to some large corporation
to be able to get access to the software. But that doesn't translate into large corporations
that are making huge amounts of money through using Python, giving back into a format that
can then be operationalized and used by the groups that are maintaining the software that
is being used.
And to my mind, the key piece here is you need to find a way to express the ask in a
way that businesses can put on their expense claims i've had many conversations with people
that have said you know i've got a corporate credit card i can spend a thousand dollars a
month without even raising a question on anyone's anyone's eyebrows but i have to be able to say
this was necessary for my work and i couldn't have gotten it cheaper elsewhere and the core
thing is they couldn't get it couldn't get it cheaper elsewhere when the price is zero that's
a problem. So finding out what we can operationalize to get those funds out, I think, is the piece that
we haven't worked out yet. And I'm still searching for what that answer is. Yeah, because there's
things like the Tidelift subscription. Is that what it's called? Tidelift is one of them, yeah.
There's a couple of those around. Tidelift is one that's getting the most press at the moment.
It is definitely interesting. And effectively, what they're selling there is the support model
of, you know, we will guarantee there is someone there to support your software.
Because I think it prioritizes the tickets, right?
That's the idea.
If you contribute, then of the thousand open tickets on Django, you could say, I really
want this one done, Carlton.
Yeah, it's not quite that.
That's my sense.
Because they're saying that they will provide the resources to make sure that the issues
that their subscribers have get resolved.
And effectively, they'll pay the open source.
Yeah.
they will pay the contributor to do that um the the there are two like the one of the problems
that exist with that is that it does work for a maintenance capacity it works reasonably well for
fix the bug that's there it doesn't work well for funding work that need large-scale work that needs
to be done so i have actually spoken with the guys from tide left and they're effectively not
interested in doing anything to do with bware because bware doesn't have a user base yet
And so-
Can you just mention-
Oh, sorry.
Can you just mention what Beware is?
So Beware is a sort of project that I've taken on having,
I now have, I do less work in the Django community
on a code basis.
I'm still around, but I don't do as much in the code base.
Beware is my attempt to get Python running
on all the new devices that people have,
on iPhones, on Android tablets, on Android phones,
in the web browser as a client language
and things like that,
and provide the tools and resources
to get Python into those spaces.
It is still very much early days of that project.
Like most of the tools are version 0.3
and even that is optimistic in some cases.
But, and as a result,
Beware doesn't have users.
It doesn't have people
who are using Beware to make money.
They're not the cornerstone of the company,
the .com, the startup that they're running.
I'd like that to be where it ends up,
but this is Django a year before
it was publicly open-sourced kind of space.
There's still work to be done.
There's a lot of work.
there's resources that need to be spent. Tidelift isn't good for that model. It's only good for
fixing bugs in things that people are actually using. And ironically, it almost works. The same
problem almost hits when it gets to things like Django. Django is stable. Django is out there and
is working. Yes, there are bugs, but they're not that common. They still occur and there are still
things being fixed and whatnot. But compared to the rate of change of bugs that were there
five, 10 years ago, it's a lot lower. Yeah, it's very stable now.
It is very stable. I suppose the theory is that you're going to pay Tidelift for this guarantee
that bugs are going to get fixed, but which bugs and why? Why am I going to buy this support
contract? Yes, there is absolutely the covering of butt, making sure that it will be updated
aspect that possibly will actually drive that. It'll be interesting to see if Tidelift does
managed to sell that broader narrative of, you know, insurance against the thing that should we
hope never happens. So yeah, Tidelift is definitely an interesting development. I have some reservations
about the fact that it's a VC funded company, which does sort of affect the economics of what
they're doing. Like they need to make a large amount of money out of this in order for it to
be viable, not just for open source projects to be viable. However, I will take them on faith that
they are doing what they are doing for good reasons. And we just have to shake out to see
where that goes so another i mean because i think a lot about this how to the craziness since i'm
newer to it than you are the craziness of how used and how much work people are putting into
django and then you have these large companies that we can't align their self-interest with
the projects and again i'm always curious about how decisions are made you know because it is
sort of a consortium i mean for example django rest framework if you sponsor it you can you
a prominent place on the documentation that seems to me like an obvious way to get you know probably
a developer's worth of salary on the django site to do something similar because i mean i donate a
lot of people donate if a company said oh for a thousand dollars you rotate through a place because
recruiting is a big issue for folks right like i wonder if has that i'm sure that discussion has
come up where is the to the extent you two know the consensus on something like that that seems
like a very easy win to me from the outside so i can't speak to where the conversation is uh right
now i can i can speak to where it was a couple of years ago um because i went through a period
being the dsf president so yeah i'm sure you i'm sure you did um the there's sort of there's two
pieces to it one is the the reason it's problematic is that if you're dealing with that budget you're
essentially like the money that is spent on putting your logo on the website is either a
marketing or recruiting budget, which is good money if you can get it, but very fickle and
very prone to changing. We see that in conference sponsorships. Some years it is trivial to get
conference sponsorships. You throw it out there, say there's a conference and money just falls out
of the sky. The next year, half the sponsors don't want to show up because priorities have
changed in the way they want to spend their money or revenues are tight this year because of global
financial crisis or whatever and all of a sudden marketing budgets are lower so right the money is
highly flexible and is not tied to how much the software is being used it's how much tied to how
much benefit they think they can get through being prominently placed on this on this website how
much easier it can make their recruiting task right well they don't really have analytics on
it per se yeah um and the other side of it is literally it's that it's the the community pushback
or at least historically has been a community pushback
to even putting analytics on the web page
because of, in particular, the European focus,
like the GDPR, data privacy type thing,
there is concern about how much data we are gathering
about our users and whether that information
is going to be exploited, whether people have the right
to use the software without being tracked, and so on.
I can't speak to whether that is still currently a problem.
I just know that there was a lot of pushback.
It was one of the very early depths that Jacob Kaplan-Moss put together
was around tracking, just putting into Django Start Project,
tracking who, like putting in as an opt-out,
we want to be able to log that you're using this
just so we know how many people are using this
and we can use this for recruiting purposes or fundraising purposes.
And there was a huge pushback against that as a concept.
Yeah, right.
And the same with Homebrew, the Homebrew package manager for macOS.
That had the same problem.
They've got, I don't know if they put it in in the end
or if they didn't put it in,
but I remember there being a really big hoo-ha
when there was a discussion about putting it in.
And it's difficult because it's this trade-off
between needing to justify your existence
and needing to say to companies,
hey, we're worth your money.
And then this whole open source free software thing
where it's like, no, no, we don't want to attract users.
And for, you know, those are all good reasons too.
Like, but that's not attracting users, right?
I mean, Carlton, you must,
maybe we can ask Tom when he comes on.
I mean, I imagine it's a sizable amount of funding for DRF.
Yeah, I will say that DRF is probably the one success story
that it has gone extraordinarily well for them.
And, you know, mad props to Tom for everything
that he's been able to do around that space.
That, you know, he took a project that was...
But he's still on an ongoing basis needing to re-find sponsors
and redo it and, you know, like if you read the monthly reports
that he puts out, he's very open on the funding situation
for Encode and it's not a done deal.
It's not like he's got sustainable forever.
It's like sustainable right now, but need to draw in more.
But he's doing amazing work.
Yeah.
Well, maybe it's a conversation at DjangoCon.
I'm happy to be a bull in a china shop on this because I have no past scars.
But it seems I would like Django.
I would like Carlton and Marius and others to get paid Andrew for the async work.
And it's such a hassle for these talented people at free or a discount to do it.
And I don't think the community realizes the problem, right?
because it's not their problem, and if there are these solutions out there.
Yeah, and part of the dilemma here is that if open source is working well,
magic software falls from the sky that everyone can use,
and you never have to think about how that sausage gets made.
And yet it gets built because Andrew Godwin is effectively taking a huge pay cut
to contribute some of his own time to work on this stuff.
Now, I don't think necessarily that open source contributors should be making millions of
dollars a year, but they certainly shouldn't have to be making a serious life decision
about, should I be in a position where I give up having a comfortable lifestyle so that
large corporation with billions of dollars in the bank can make a little bit more money
off of my efforts?
And that's the part that really greats my gears.
Yeah.
Well, this will come out probably a couple of weeks from now, but we just released last
week the interview with andrew which um a lot of people listened to and we had hoped to have
be able to put a link into the funding around that um and just the machinations of that it's not
available so yeah i think and it's i think it's important for people to highlight to the community
because these are real issues and and some other you know i'm always interested in how other
frameworks do these things i mean for example um laravel php is a one-man shop and he's very open
about uh he sells a there's a i think it's an e-commerce option for like 99 so consultants
can use it and you just download that and you have boom a sas product you can sell he also has
hosting so there's a lot of i try to find inspiration in other areas for how they do
things you know view links to uh it's view mastery educational content where they give
five ten percent or something of the sales of the educational product to back to view so yeah i try
to put my thinking cap on i know other django content creators i've had this discussion with
them i mean i would love django to have a page of current educational resources and to get an
affiliate fee but i know that has been discussed to death and the community doesn't want to pick
favorites is the django view on that yeah that and that has been historically a push the one the
laravel and the the php wordpress is another example it does it as well so there's two
levels at which these things operate. Like we were talking before about the fundraising coming
from marketing and hiring, recruiting budgets. The real goal is to get into someone's operational
budget. Now, AWS is never going to not get paid because if you don't pay them, they turn off your
website. Their bill gets paid every month on time. That is the budget you want to be in on.
Now, in the case of Laravel, they've got, here is a product we can sell that you can use. It is
cheap enough that anyone can get access to it, but it's enough to make sure we can fund the rest of
the development that's there. WordPress then takes it sort of a step further in generating the
marketplace of saying, this is where you can get your plugins. This is the place where you get all
your stuff. And as a result of that, there is now, just as much as there are, this is how to build
your WordPress website, there are training courses about this is how to build your company building
wordpress plugins because there is there is an expectation in the community that money will be
part of the process and there is a mechanism by which that money can change hands uh and that
and it can be expense to the client too and it can be a huge one i think yeah yeah because maybe
why i mean we had uh tom dyson on with wagtail that would be a context where it would be easier
to yeah because my friends they're just like yeah nine nine dollars whatever expense it to the
client and it saves them a thousand dollars of time but django is a little more custom and advanced
typically and how it's used yeah well or at least the the core of django is and they're like the
there are two places where i can see this potentially you could potentially
get into the into the chain here one is not saying put a paywall in front of pi pi but at
least put the ability so that you can charge instead in front of pi pi so if i do want to
released by package on pi pi still be open source but if you want to pip install it you have to you
know swipe the credit card and money goes through the till that radically changes the dynamics of
pi pi and i'll completely grant that but yeah you know pi pi pro is a mechanism that is that is the
operational point at which you get into someone's budget the second one is one that i i would love
to be able to get in front of someone to propose this uh and i'm hoping to be able to have some
conversations at PyCon this coming weekend for me and hopefully you know others or other conferences
around the place is to actually get to the AWS and the Google's and Google Clouds and the Azure
people and say okay you know all this software that you're you know you're putting up the platform
you are in some cases actually operationalizing open source software in the case of stuff like AWS
can you like put a check like if if you are selling microsoft um if you sell a microsoft
license for ec2 you buy a microsoft license that are you know at your prorated rate of a
microsoft license can can you put a checkbox in there that says that i'm using the open source
license charge an extra half a percent of the of the money that's going through there and then
funnel that into open source foundations because that is a trivial box for any engineer to check
it is a bill that you can guarantee will get paid every month and that money can then funnel into
the community actually convincing the microsoft's and the amazons and the googles of the world to
do that i is a much harder sell but i would love to see that kind of program in place
because that is the operational that is where the money is that is where the money is changing hands
at volume and if we can if we can funnel even the smallest portion of of that that would pay for all
of the django development we ever needed it would pay for all the maintenance of the open source
tooling that we ever needed and it's not just jang i mean with this podcast is about django but
it's not just django it's every little project out there you know it's all the third-party apps
in the django ecosystem it's all the packages on pi pi in the python ecosystem and then the same
for the javascript world and absolutely absolutely none of it's fun well and i love that the
engineering mindset is to appeal to people's better nature because perhaps because i have an
mba you know fear works better unfortunately right like fear being like hey maybe django won't be
around, and finding a way to do it in not a blackmail kind of way. But that is the reality,
right? If Andrew Godwin isn't able to be paid, even at this massive discount, async's not going
to happen in 3.0, probably. These are these stark terms. But anyway, so I love that we're all
thinking positive, but there are real costs, right? I mean, before, that's why... I mean,
Actually, maybe you could talk about, I know you were actively involved, we had Tim Graham on, the Django Fellows, kind of why that came about and then how, right?
Because it was, what, two plus years between releases?
And then part of Tim's work was to standardize that to the schedule we have now, right?
I believe you played a big role in that.
I played a big role in getting the fellowship program going.
That was like one of my last hurrahs as I walked out the door of being DSF president.
I think we did have a fairly regular release cadence.
It was a much slower release cadence and often slipped by months at a time.
Yeah, we did go like 18 months or two years at one point, yeah.
But it was kind of more of a realizing that we were having this slow increase in the number of tickets that were being opened and they're not even really looked at.
And there were patches that were being contributed and not reviewed.
So the DSF itself is an interesting legal structure.
It's a 501c3, which is a US not-for-profit foundation.
The US tax office doesn't consider software development
to be a charitable activity, which is a problem
when you're a software-based foundation.
So the DSF, there's a number of things the DSF can't do,
and one of them is we can't hire someone to write software.
so I shouldn't say we. The DSF can't hire someone to write software. If you look at the terms of
which Carlton and Tim and Marius are employed, they are there as community managers. The community
management process inevitably involves some writing of software, but they are there managing
the ticket process, making sure the wheels agrees that everybody's contributions are actually
happening. The DSF actively paying for Andrew to work on something gets into very, very weird
territory. And I won't profess to speak to where that discussion currently is or anything like
that in terms of the DSF, but I am aware that those issues exist. Even to the tune of, there's
been some recent discussions about paying members of the DSF board for the roles they're doing.
Like, you know, the person doing the accounting, which absolutely has to be done right and has to be done on time, but also gets very weird if you pay them because of the way the 501c3 operates.
So, yeah, anyway, that's getting deep into the weeds.
No, that's interesting context because I didn't know that.
I just asked Andrew and he vaguely referred to issues.
Well, so perhaps to transition.
So you're wearing a Django con sweatshirt that people can't see but Django cons. I've heard stories of pink
So pink it comes over the audio maybe when did you?
You were at the first DjangoCon, right?
Because I've heard stories of you giving multiple talks in the early days when you couldn't get enough speakers.
And I guess how have you seen DjangoCon's advance over time to where the San Diego one's coming up in the U.S. this fall?
Yeah.
Well, there's another one before then.
There is DjangoCon Australia happening in just two days.
That's right.
So I have been to every single DjangoCon except two.
So I missed the very, very first DjangoCon Europe in Prague,
and I missed 2013 in Zurich.
But I've been to every DjangoCon US.
I've been to every DjangoCon Australia, most of them because I was organizing them,
and I've been to all but two of the DjangoCon Europes.
That's quite a commitment.
Yeah, and actually I tied that record with Andrew.
Andrew has been to all the U.S. and all the Europe,
but has missed two pipe on Australia.
So we're down to monkey knife fight for last man standing
on who's going to take it.
Well, I saw he was tweeting about just landing in Sydney,
so you guys will tie this coming one.
Yep, we're staying tied.
Whoever drops out first.
So, yeah, it's been all right.
They have changed a lot over time.
Like the very, very first DjangoCon U.S., 2008,
was essentially Django 1.0 was about to happen.
Someone went to Jacob and Adrian and said,
hey, how about we have a conference?
And they said, well, yeah, sure, as long as you organise it.
They managed to arrange with Google,
for Google at the Mountain View campus,
to provide a space for two days.
And they did all the AV recording and whatnot.
And we called in a bunch of favours with friends and whatnot.
We got Cal Henderson, who was the, well,
was one of the founders of Flickr, is now one of the founders of Slack,
who did one of the opening keynotes, which is still to this day
one of my favorite keynotes of all time, well worth going back and watching.
And it also set an interesting theme that ran for a couple of years.
The talk is called Why I Hate Django.
And it was basically Cal Henderson as a person who builds a website
or was responsible for a website that was several hundreds of orders
of magnitude larger scale than anything Django was operating with,
talking about why Django wouldn't scale to that level.
And it was this combination of he's a very engaging speaker
who had the entire Flickr as his slide deck image catalogue
and amusing reasons.
We couldn't possibly use Django because it doesn't have a mascot,
preferably a mascot with magical powers,
which is where the Django pony is.
Hence the Django pony, right.
After that comment.
And then one of the problems is that it doesn't do multiple database support.
Multiple database read-write support is absolutely essential if you've got large traffic because you have to be able to charge your reads across multiple sources.
At the time, it didn't.
One by one, we've actually been hitting off most of his criticisms.
I think I went back and ordered them at one point.
We'd only missed two or three of them, and they were fairly edge case things that only Flickr needed or were of marginal utility.
So, yeah, that was also set the tone because for many PyCons
after that, or sorry, many PyCons, many DjangoCons after that,
we had a habit of inviting someone to speak at DjangoCon
as a keynote from a different language community
to tell us what we were doing wrong.
So you have someone from, you know, the small talk community
come and talk about why small talk is better.
Have someone come and talk from the Zope community.
Come and talk about why Zope is better than Django.
Or Ruby.
Interestingly, we never managed to get David Halmy Hansen
or anyone from the Ruby community that I can remember.
Right.
Well, I just emailed him actually, blind emailed him yesterday to say,
hey, you should come on our podcast since he's on every other podcast.
Yeah.
And also David Lord about Flask.
So I'm glad.
I didn't know this was a thing, but I'm glad it is.
Because I think ultimately, you know, 95, it's like, you know,
our DNA with chimpanzees,
like 98% is the same.
And then the differences
are actually really helpful
for both communities to discuss.
Like Flask, Andrew was talking about,
in Flask, they're tied to WSGI.
So they're going to have a,
it's interesting to see
how they'll adapt to an async world,
for example.
Yeah, and that shared DNA thing
is absolutely a thing.
Like Rails implementation
of cross-site scripting,
CSRF handling,
is almost, you know,
mod the language changes and squinting,
is essentially the same approach the same implementation when we have had security
reports against django's csrf handling you send an email to the rails guy to say hey by the way
you might want to just check to see if you're affected by this as well because chances are you
are and we've had a couple of those go back and forth of they find a bug and tell us we find a
bug and tell them and yeah it turns out we're both affected by the same bug and we do almost
parallel security releases around the same problem right well i think that's because beginners see it
as a competition and then people working on it see them as complementary tools so i think that's
an important distinction to make for people because i mean i'm asked all that as an educator
of beginners all the time rails flask this and that and you know i i want to say it doesn't
matter but i want to give advice to people which is usually just pick one jango's a great choice
but just pick one and get into it and once you've learned one you'll see the similarities between
all the others you'll be able to bounce around as needed yeah i think it is simultaneously the
most important thing and the least important thing. It is the most important thing because it will
literally be the thing you work on every day. So make sure you pick a community you like and
there's documentation that's good and it seems to be healthy and progressing because you don't have
to replace your code in two years' time. But once you've met that basic requirement, it honestly
doesn't matter which one you pick as long as you are comfortable with your choice because
Ruby and Python, yeah, okay, there are significant differences, but there are more things that are
similar than things that are different absolutely uh what else there's a lot of things we want to
cover so i'll i'll jump to so actually one thing that i wanted to talk to you about i think this
is the first time i emailed you out of the blue and you responded about your talk on authentication
red blue user because this is back when i was wrapping my head two years ago around uh the
multiple user models in django and um i remembered yeah i was like why would you need a custom user
model and this is a great talk we'll link to it but you were giving the example of not everyone's
name fits a first and last name paradigm especially yours and i know you and andrew pinkham have
worked on django improved user project right which i've talked with him about yeah so maybe to tee
that up perhaps you could talk about so why do this django improved user project what's how do
you handle i think the interesting question is how do you deal with a legacy thing like the user
model that's built into django yet there are these limitations that we want to make it forward facing
to match modern patterns.
Yeah, sure.
So the work I did with Django Improved User is effectively
the public-facing contribution of something that's very difficult
to add into Django's core itself.
Django 1.0 did what every website does.
It sets up an internal user model that is first name, last name,
and a password.
And it turns out that is a serious anti-pattern.
And it is one that it normally ended up hitting people not because of that anti-pattern, but because people wanted to log in with an email address.
And if you've got a username, first name, last name, and username is capped at 16 characters or something like that, you can't put an email address in it.
And so people say, oh, but can't you just increase the length of that to 40 characters?
No, it can't be 40 characters.
How many characters do we have to make it to be able to allow it to accept an email address?
And so on and so on.
But even once you get past that problem, you then end up with, okay, well, but then you've got first name and last name.
And not everybody has what you could reasonably call a first name and last name.
You go to things like a lot of Chinese names, for example.
Which name is the first name and which one is the last name when you say Mao Zedong?
His given name is Dong, which is the name at the end of the list.
But if he puts Mao, like he put it in the order in which it's written, you're going to get it in the opposite order to which it is useful if you're thinking the last name is the one that's the family name.
If you go to the third Secretary General of the United Nations, his name was Tut.
That was his entire name.
He only has one name.
There is no first name, last name.
His name is Tut.
So what does he put in last name?
If you've got a lot of Islamic people will have a sort of a pre-given name of Muhammad
as an indication of piety.
That is their first name, but it's not the name you'd ever call them.
So there are a bunch of these problems that exist when you say first name and last name
that aren't immediately obvious.
And so I wanted to get in there and say, okay, yeah, we are baked in that we have an existing
user model.
We need to move off of that user.
Django having a history of essentially not breaking anyone's code unless we absolutely have to means we need to find a way of migrating out of that.
So that means we need to find a way to allow users to opt into a new user model such that they can then say, OK, now on this website I'm building, this new website I'm building, I'm going to use a better pattern for that.
One of the better patterns that exists is sort of short name.
What name do you want me to use to a casual name?
And what do you want to use me to refer to you as?
If I write a letter to you, do I say, dear Will, what's the Will bit?
That's that name.
And then full name, how do you want me to address you when I send you the legal filings?
I want William H. Vincent or whatever, the full name that's there.
you're then capturing the role that you want the name to fill
rather than some preconceived notion
of there's always a first name and a last name.
The problem is that my original goal
was to see if we could actually get that
as a contrib module in Django itself
because there are like that short name, full name
is a common enough pattern
that at least people shouldn't have to reinvent the wheel
over and over again.
But it turns out there are some problems
with that around testing.
And the biggest problem around the swappable model thing
that Django user models do or does is around migrations
because if you change the user model,
like Django's migrations don't trace the state of the settings file
and you can change your user model by changing a setting.
So you need to then have an audit trail for some of the settings
in your configuration file and hilarity ensues from there.
That is ultimately the technical reason why it wasn't done.
So the easiest way to manage that from a practicality perspective
is let's have a completely standalone project
that does it the right way and is tested
and does all the things it needs to do
and has all the integrations with all the things
it needs to be integrated with and is being tested
against recent versions of Django and so on and so on.
But let's keep it external and deal with it that way.
Well, I remember tweeting with Tom Christie about this very issue when I was first wrapping my head around it.
And I was saying, well, why can't we just default to a custom user model because that solves a lot of problems for people.
And he suggested potentially you could do it with the start project command.
Now, this has complexity, but saying there's like advanced version where from the beginning you maybe and then you could sort of stuff in all these other things that are legacy issues without breaking.
But I know it's a tricky thing.
And I love the beauty of just not having these issues on Django.
But there are, yeah, these general legacy questions.
There's a number of things that would be nice to be addressed in a non-breaking way.
Yeah, no, I agree.
I think this issue that the start project template doesn't give you a custom user.
And yet the docs say you should have one.
It's like, but I've started project.
I've started code.
I've created some models.
And then I've come to read the docs in more depth.
And oh, no, I've done the wrong thing.
and by then it's too late and yeah but it's one of these it's a complexity it's a complexity you
only know it exists when it's too late to know it exists um and so then you've got to start your
project again which is kind of a bad user experience but yeah it's it's awkward and one
of these things that you know because it is just awkward enough and there is just enough of an easy
enough way to work around it that the no one sat down and spent the you know the original uh
ContribOrth, getting that landed was like a three, four months worth of all of my open source
contribution time just to get that landed, let alone all of the other problems that come with
making sure there's an onboarding path that makes it easy to adopt what should be the right thing
when you come on board and things like that. Speaking of onboarding, I'd love to have you
talk about your PyCon speech from this year that I was able to sit in the audience for,
where you spoke about the challenges around Python itself, around installing if you deal
any beginners and then packaging i wonder if you could give how would you sum up that talk because
we're going to link to it it's an amazing talk but it talks on some of these existential crises of
our potential issues around how does python die and this might be one of the ways yeah so i mean
it's it was a weird one and that there's what was sort of standing up and being cassandra talking
about how how the world was all like the python world is going to die um which actually ultimately
wasn't really the point of the talk. The point is that it can die if we don't pay attention to what
is going on. I heard a really interesting comment today. Someone pointed out that, I think it was
a talk from Lucas Lange from his keynote at Pylandinium, which was an awesome talk as well,
mentioning that the rise of the AI and data science community coincided with a switch from
Python 2 to Python 3. And that may have been what saved Python from the Python 2 to Python 3
transition. Because we had a sudden influx of new users just as we were adopting a new code base.
And so they weren't coming with the hangover legacy of the old Python 2 code base.
And it's interesting to note that a lot of the uses where Python has historically
had a lot of use in the web space, in system administration and whatnot,
those groups are less common than they once were.
Now that doesn't mean it's the doom and gloom
and the web's been ceded JavaScript and systems language,
everyone's using go for systems.
But it is an interesting observation,
if only because it means you have to look for
where your next user is coming from.
And there are a number of things that exist
in the Python ecosystem at the moment that are not good for
our next users. Our next users, the example I gave in my keynote is my son. My son started high
school last year. He doesn't have a laptop. A lot of schools will have, everyone's going to have a
computing device and they do all their high school work on computers. My son has an iPad.
All of his educational experience is delivered through an iPad. Why is he going to learn Python?
Yeah. Why is he going to learn Python? You can run Python in a simulated shell or something
on a website but you can't build an ipad app in python so why is he going to learn python
now that doesn't mean it is python is still a good language to teach people to program in
but if you if you're faced with a teacher who's looking to optimize their education outcomes the
way they're going to do that is by exciting the kids to be able to do something practical with
their device the actual device they've got in their hand if python can't do that we have a problem
similarly the how do you even outside of actually on a desktop machine i write a you know we're
going to get a kid invited interested in in writing writing code uh we want to uh they want
to write a game they want to give their game to their friend point me at the page of instructions
where i can teach a 15 year old who has just written their first game how to package their
game to give it to their friend where which doesn't involve their friend also reading the
same page of instructions about how to set up their python environment install these dependencies and
everything else they're going to go through. That's a problem. That user experience, one of
the big areas where Django and Python have advantages is in this space of people who are
not computer science geeks. They are people who are using computers as tools to get stuff done.
And our tool chains don't well support that use case. You need to have a very deep understanding
of environments before sandboxing and virtual environments makes any sense whatsoever.
Once you understand it, it makes a reasonable degree of sense. But getting to that point is
huge. And packaging that code to give it to someone else is a non-trivial activity that
there are no standardized answers for that, or not particularly good standardized answers for
that at the moment. Even just the perpetual bane of Django Girls workshops. You get a bunch of
people into a room. You teach them how to use Django. You teach them how to build a website,
which works fine on their local machine. And then you tell them we want to deploy it
on any environment, be it Heroku, be it Python Anywhere, whatever. Python Anywhere is a lot
better than what it used to be when it was Heroku instructions. But deploying a Django website is
not a one-button-click thing. You've got to get multiple configuration files and paths set up in
the right place and configurations going in the right direction. And that is a lot more than most
people are willing to put up with to just get a website up and running well yeah you don't have to
but you should i mean i say that so my jenga for beginners book we handful of steps but i mean we
don't we don't do all those things so you get it up it's not particularly secure and um but then
yeah jenga for professionals my new book i have multiple chapters on just like the bare you know
80 20 minimum and it's yeah it's a lot of steps um and i i think the challenge too for teaching
is that you can, people can use something like Django cookie cutter, which is fantastic and does
a lot of these things, but you're not going to understand it. If you just drop that into your
tool chain, you kind of have to learn how to build it up yourself, which is, um, at least in that
book, I spent a lot of time building up how to do that. But yeah, your point is directly accurate.
I mean, you know, like rails, Heroku was built for rails. They did have one click deploy. Uh,
and that was sort of the rails. Was it rails tutorial? I think, um, I modeled a lot of things
on the Django for Beginners book saying we can get pretty close to that, actually. So like the
first chapter, we deploy Hello World. But there are a couple extra steps. I mean, I'm personally
excited with containers. The deployments can be a lot easier. I mean, it is sort of like trusting
that the image and everything works. But for Django girls, I mean, I think about this with my
Django X starter project. There is a degree of, should I add a Docker part where it's like,
just trust that this works and, you know, fixing it will be a lot more work, but you can get pretty
close to a one-click deploy and then at least give people the confidence that it's, you know,
I find the moment that someone can not just deploy it themselves, but I say, show it to someone else.
That's when it really clicks. And, oh, now we can add Google Analytics and you can prove and you can
see that they actually did it for beginners. You know, that's sort of like the face in the
New York Times website. You know, it's like these like booms in people's head around what you can do.
And I agree.
If you compare it to the deployment experience of PHP is copy a file with FTP to a website, and your website is up.
So that's what we're competing against in terms of degrees of simplicity.
I agree.
The Docker experience, other than the fact you have to sort of download the universe before it works for the first time, the containerized model is definitely very interesting.
and seeing that sort of evolve into more tutorials
is definitely something that's interesting.
But then you're also right in that having a cookie cutter
that spools out thousands of lines of code,
which is all boilerplate,
and you're trying to work out what that boilerplate does.
Actually, for work purposes,
I had to play around with Falcon,
which is a web framework that's asynchronous by default.
That was delightfully refreshing getting going.
It is literally three lines of code and you have a web server type territory.
There's a lot of stuff like this is the classic Flask versus Django thing.
There is a lot of stuff you don't get, but the simple stuff works so quickly that it's
compelling.
And that zero to kick ass time, that time it takes you to go from, I know nothing about
this to doing something useful that I can see is applicable to my personal situation.
And I understand what it was that I did.
It wasn't just me copying and pasting this hundred lines of code and hoping I understood that it did what I meant it to do.
That's a powerful thing and often overlooked.
Yeah, well, I think you, I mean, that, and that's possible with Django.
I mean, if you Google like Django Hello World, I believe I have the top hit for that because you can really do it in just a couple lines of code, which I think if you're an expert, you sort of, you know, go, oh, that's not correct.
It's like, well, it's enough.
At the same time, I think, you know, cookie cutter, like I've learned so much studying that project, but certainly when I was starting out, I was just, what is going on here? And so a long term goal for me is I kind of laid it out in the book. And once I've my Django X project, I'm going to basically say, here's this project. And if you want to know how I built it step by step, the book will show you just because there are so many steps.
And again, you have to make some opinions as an educator or as a designer, but opinions are better than sort of going, well, it depends, which Carlton and I joke is the tagline of this show.
Well, yeah, it depends.
That's every episode.
But I think it's like you mentioned with Docker, it can be easy one-step deploys.
Well, yeah, I've got a one-step deploy, but I've got years of putting together playbooks to make that deploy happen.
But can you share it, Carlton?
Can you share it, though?
Yeah, it's, well, more or less templatable and shareable.
And yeah, and you give it to clients and you, you know,
but that knowledge isn't something you can expect a kid
picking up a Chromebook to have.
They've got to have a much smoother story than that.
Otherwise, but you know, I look at Mac apps or Windows apps.
It's not a trivial process to package one of those.
If you build a, you know, a Mac OS app with Xcode and,
okay, once you've got the final executable,
but to get that executable is really quite difficult.
think the answer which i find exciting is these on these web-based containerized uh programming
platforms like replit like yeah like glitter what is it glitch yeah they're all doing the same thing
i mean if you're a teacher a lot of times yeah you need a way you can automate testing and
students don't have to have their own laptops they can have any computer uh you know in some
ways i i wonder if that will solve some of these issues because it's all just in the cloud the
problem there is the business model which is it's hard to get money from students and at some point
You want to eject and go to the real thing, sort of the challenge, I think, Python Anywhere and Heroku and others have is people eject at a certain point.
Anyways, well, we're coming up on time.
We've thrown a lot of questions at you.
Are there any projects or things you want to highlight, Russell, before we head out?
Oh, throw me on the spot there.
Like, I am very excited to see what Andrew has to say this Friday he's talking about async and sort of where that's going.
That is, for me, one of the big unanswered questions
of how Django moves to the next level.
Django is what it is, and it is great at what it is,
and it does more than enough for plenty of people.
But async is a thing.
It exists, and there are things you can do or do more of,
increasing the lifespan of Django if that's better supported.
The other end is like, and this plays a little bit into Beware,
it plays a little bit into things like Wagtail,
is the front-end story.
Like I very badly would like to see a much less JavaScript,
much more Python front-end story.
And I don't know that I have any good answers.
Like I can't point at anything there.
What Beware is doing is kind of part of that big picture,
Seeing that Wagtail is there and you are able to build rich widgets
and rich containers and rich experiences through things like Wagtail
is certainly interesting.
But I don't think either of those projects are by themselves
the end of the story.
I think there is an opportunity here to reclaim some of the ground
that Python has ceded in the web space to JavaScript as a client
at the front end through things like better use of technologies
like Wasm, WebAssembly, but that is a much longer project
and one that is going to take eyeballs and attention
and who's going to spend the time to build the thing
and then open source it so that we can all use it.
Can I ask about WebAssembly?
Do we have currently the ability to, for instance, script the DOM there?
Oh, yes, absolutely.
So if you go to Pyodide, well, Zilla has been playing with this
with Pydide, if you go to the Pydide sort of the demonstration page,
that is effectively a Jupyter notebook running entirely in your browser.
So it's, you know, full CPython, full NumPy, full SciPy,
full Matplotlib all compiled to run in your browser.
So there's not like Jupyter kernel running that your web browser
is talking to like the normal sort of Jupyter model.
It is all running in the browser as WASM, as WebAssembly.
And it is literally just the CPython sources and the SciPy sources and the NumPy sources compiled into WebAssembly.
The downside is that it's a little bit big.
Like it's about 12 megabyte, I think, for the full payload download, which is not…
Which is quite a lot on a page load.
It's fine if you're downloading a Jupyter notebook that you're going to use once, like load once and then use persistently.
It's not if you want your homepage of your website to be that.
Yeah, I was thinking like a sort of jQuery, but using Python, you know, so you're actually scripting the DOM and doing so you instead of having an HTML file, a CSS file and a JavaScript file, you'd have a HTML file, a CSS file and a Python file.
Yeah, it is entirely in the realms of the possible.
And that is kind of what I have been playing around with Batavia.
Batavia is not doing it with WebAssembly,
although I have some thoughts about how that might progress.
It is entirely possible.
You can, from within Wasm, access the DOM,
and there are multiple channels by which you can get to that.
There are some garbage collection issues you kind of need
to dance around a little bit, but you can certainly do it.
And I have had at one point in the not too distant past
a demonstrator of, like one of the talks that I gave at PyCon Australia two years ago, I think,
was a demo where in the space of 17 minutes, I took one Python file, one Python application,
deployed it as a native Mac app, a native Windows app, a native Linux app, a native iOS app,
native Android app, and as a single page web app. And it was only a Fahrenheit to Celsius converter.
But in every one of those steps, there was nothing other than the 40 lines of Python
just deployed in different ways and it would work natively on all those platforms so it can be done
yeah and that would be awesome because that's kind of the missing thing i can do i can use python for
analyzing data frames i can use it for scripting system administration tasks i can use it for
building a website but if i could somehow build a gui on front of that for a native app that would
be ah brilliant and some of it is actually it's part of the reason why like what are these to my
mind part of the reason why node has become such a big thing is that javascript is the language
it's in the client, there are occasions where you have logic that needs to exist in the client and
needs to exist in the server. If you've got a credit card validation algorithm or something,
it needs to run client-side and server-side. If I have to write it in JavaScript in the client-side,
then why shouldn't I write it? Why should I just use the same implementation? Why should I have to
re-implement it on the backend? But if we can push it the other way, that's incredibly powerful.
Right. Especially as JavaScript is becoming more Pythonic over time anyways,
even if it's syntactical again coming yeah again coming back to the fact that you know all the
ideas there's only only a half a dozen ideas and we all just keep stealing off each other
as time goes by um yeah well good artists borrow great artists steal right exactly exactly right
thank you so much for coming on and uh sharing your story with the community and we'll have
links to everything so people can check out your work uh if people want to get in touch
what's the best way i mean obviously i'd give you a fun beware we'll get your attention but
how else can people get in touch uh so yeah i am i'm freakboy3742 on almost every platform so on
on twitter on github all those uh you can get me through the beware project there at beware.org
uh is sort of the hub of all the work that i'm doing in open source at the moment
around getting python running on all these platforms um you can and in terms of funding
that work you know i am i am always on the lookout for people who can either help me
pay for that development work contribute to that development work any ideas about how to
commercialize that development work i am i still haven't completely given up hope of finding some
way of making beware a commercially viable project i just need to kind of find the person to be the
the business end of that and because i can i can talk business but i'm not good at it um so yeah
uh but yeah either way so you can if in the meantime you can sponsor me through the beware
project or the bigway.org or you can sponsor me through github sponsors i was uh i'm on that on
that program as well um or uh yeah super great well thank you so much for coming on
my absolute pleasure thanks for having me all right take care bye