« Return to show page
Transcript for Episode #161:
0:00 Michael Kennedy: Django has reached a major milestone with its 2.0 release. This puts Legacy Python, that is Python 2, fully in the rear-view mirror, and brings some nice, new features to the framework. Join me, along with Daniel Roy Greenfeld to discuss what best practices we should adopt and which ones are still entirely relevant. This is Talk Python To Me, Episode 161, recorded April 23rd, 2018. Welcome to Talk Python to Me, a weekly podcast on Python, The Language, The Libraries, The Ecosystem and the Personalities. This is your host, Michael Kennedy. Follow me on Twitter where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm and follow the show on Twitter via @TalkPython. This episode is brought to you by MongoDB and ActiveState. Please check out what they're offering during their segments. It really helps support the show. Danny, welcome to TalkPython.
1:06 Daniel Roy Greenfeld: Oh, thanks for having me, Mike.
1:07 Michael Kennedy: It's great to have you here. I've been looking forward to having you on the show for quite some time. So we were finally able to put it together, weren't we?
1:13 Daniel Roy Greenfeld: Yeah, it's been a few years since we first started talking.
1:18 Michael Kennedy: Yes, it's one of the more drawn-out guest appearances, but, you're finally here. I think the timing is really good because we now have a super, major change in the Django world in that we have Django 2. Maybe not major in terms of features, but that's a pretty big step to have, go from a 1.x to 2.0.
1:38 Daniel Roy Greenfeld: It absolutely, especially considering that the big change is really under the hood. It's basically, the move from Django 1.11 to 2.0 was dropping support for Python 2.7. So, from going forward, Django is 3 and higher. There's no other way to do it.
1:58 Michael Kennedy: Should they've just made it super explicit and called it Django 3?
2:01 Daniel Roy Greenfeld: I actually have some minor issues with the Django naming structure, and I actually think that maybe you're right. Going to Django 3 might have been better. But, the beauty of it, though, is that now the source code is going to be simpler, which mean it'll be more stable, it'll be easier for them to implement more features, or, for the community to implement more features.
2:23 Michael Kennedy: Yeah, anything that attracts more contributors and doesn't chase them away with complexity is good stuff.
2:28 Daniel Roy Greenfeld: Yeah, absolutely.
2:28 Michael Kennedy: Awesome. I definitely want to focus some more on this Django 2 only being Python 3 only. But, before we do, let's make sure we get to hear your story. How did you get into programming in Python?
2:39 Daniel Roy Greenfeld: Originally, I got into programming because it was fun as a student, and as an adult, it was a much better way of making a living than working in restaurants or doing manual labor. Since I started coding, I explored a lot of different languages before settling on Python. I've done FoxPro, Perl, ColdFusion, Java, the list goes on and on. But, with Python, I was lucky enough to get employed at NASA and there, a co-worker named Chris Shenton, introduced me to it in the summer of 2005. At that point, I was so tired of Django's, not Django's, Java's static typing and rigidity that I had delved into ColdFusion of all things, and because I liked the less-static typing. I know static typing is very popular in certain circles, but it's just not what I enjoy. When I discovered Python and its expressive syntax, combined with its dynamic typing system of where you can, it's strong typing but not, and I've really enjoyed that and so I've been hooked ever since. Hence the name pydanny.
3:58 Michael Kennedy: Of course, that's awesome. First of all, what were you doing at NASA? What projects were you working on? That sounds really interesting.
4:05 Daniel Roy Greenfeld: When I originally got hired there, it was for infrastructure support at NASA headquarters.
4:10 Michael Kennedy: Is that Cape Canaveral?
4:11 Daniel Roy Greenfeld: No, that's actually in Washington, D.C. And there's satellite offices, depending on the contract, usually in northern Virginia, but it can change to Maryland I guess. I'm not sure what the contract state is right now.
4:25 Michael Kennedy: Those companies can just kind of like spread in a ring around D.C. and like cross borders. It's kind of crazy around there.
4:32 Daniel Roy Greenfeld: Yeah, and so what I was doing was a lot of infrastructure support and one of those things was tying a number of in-house projects to a X.500 Directory System that's like LDAP. What happened was is that, at some point, someone at NASA decided that they were going to switch to an active directory server, which is fine, but they implemented a self-signed security certificate and the Java version that we were allowed to use in the day, which I think was 1.6, its implementation of jINDI couldn't interact with that. So, Chris Shenton got it to work with TCL, and then we figured out, him and I figured out how to do it with Python and so that gave us the business reason to bring Python into more of NASA headquarters.
5:26 Michael Kennedy: That's nice. I'm sure it's playing a pretty important role there now.
5:29 Daniel Roy Greenfeld: I believe so. In fact, Chris Shenton has done a number of talks on using Python with AWS Lambda at NASA headquarters. It's really fascinating stuff and, I guess I can probably link to some of his talks at the end of this.
5:45 Michael Kennedy: Yeah, yeah, throw them in the show notes. That'd be great. That'd be really cool. What was the coolest thing that happened while you were at NASA?
5:51 Daniel Roy Greenfeld: I got to start with Python.
5:53 Michael Kennedy: Yeah, that is really cool, right? Very, very cool.
5:55 Daniel Roy Greenfeld: Shaking hands with astronauts is a close second to that. So, yeah, pretty awesome.
6:00 Michael Kennedy: It's definitely one of those places that, it, at least, has this really big, noble goal, like you could go write amazing technology at a hedge fund, but it's not the same as like, yeah, we're helping launch satellites or do whatever.
6:11 Daniel Roy Greenfeld: Absolutely. If you ever get the chance to do something like that, by all means, do it.
6:16 Michael Kennedy: Yeah, cool. And then how'd you get into open source?
6:19 Daniel Roy Greenfeld: Well, I got into open source because Python is all about open source and, well Java, technically, is open source, when I was still doing Java, it wasn't. It was a Sun project, and then, I guess, an Oracle project, or, it's an Oracle project now. But, it didn't have the same ethos in environment and community.
6:40 Michael Kennedy: Yeah, Oracle doesn't scream open source to me in terms of just the company culture. I feel it's more likely somebody will show up in like a full-on suit than like talk about an open source project coming from there, but I guess there is definitely some stuff happening at Oracle. They just released some pretty interesting new runtime. I can't remember exactly what it's called. Have you heard of this? It's something with a G, it's--
7:05 Daniel Roy Greenfeld: I don't pay attention to Java news.
7:26 Daniel Roy Greenfeld: Yes, absolutely. So, I got into open source because it was fun and it was exciting. It was great to see people give me a pat on the back as a beginner in a new language and a new tool set, who I respected. Those pats on the back were actually a form of credibility. So I've been, after a few years of doing that I guess I released my first open source package in 2009--
7:56 Michael Kennedy: Do you remember what it was?
7:58 Daniel Roy Greenfeld: Yes. There's several that I released at that time. The most notable one, or the one with the most GitHub stars and downloads is a package called django-crispy-forms, and it's one of the predominant form libraries for Django, but, and at that time, I called it Django-Uni-Form. But, I'd also done some Plone packages and I think there, I attempted to write a new logging library 'cause I didn't like Python's logging system. I think everybody goes through that stage as a Python developer like, oh, I'm going to write my own logging note...
8:33 Michael Kennedy: The five stages of logging.
8:35 Daniel Roy Greenfeld: Yes. So, yeah, I've been doing that since 2009 and since 2013 I've been helping other people build their packages, which has been pretty awesome. It's kind of like paying it forward.
8:48 Michael Kennedy: That's really cool. How'd you get involved with Django?
8:50 Daniel Roy Greenfeld: At NASA headquarters we were doing a lot of Plone work. Actually, originally, we weren't doing any web work. For my first few years of doing Python, there was essentially no web. Then we got a project where we could use Plone so we used Plone, and then, nothing against Plone, but it's a big, complex animal and so, when we had a new project, which was to build a Facebook clone for internal use at NASA we decided to use Django. That was at the end of 2008. So that's when I started with Django, was really the end of 2008, the start of 2009. It was a bit woolier back then, and it's really come a long way since.
9:38 Michael Kennedy: Of course, it's definitely come a long, long way. That's awesome. So, that's about 10 years ago. What are you up to now?
10:28 Michael Kennedy: I'm a big fan of Vue.js as well, over things like Angular and whatnot. What drew you to it? Maybe tell people real quickly, just like, kind of generally what Vue.js is and then answer my question.
11:39 Michael Kennedy: Yeah, for sure.
11:40 Daniel Roy Greenfeld: And, yeah, so, I think with these frameworks it's really a matter of taste. But the one thing I do have to say that I like about Vue.js is it's not dependent on Facebook or Google. Vue.js is an independently funded project so, if Google or Facebook decides to drop their projects, there's nothing like that will happen with Vue.js. So there's nothing like the Angular 1, 2, more modern versions of the Angular transition that you'll have to deal with.
12:30 Daniel Roy Greenfeld: What happened was, is we were invited to PyCon Columbia, my wife and I, Audrey Roy Greenfeld, we were invited to PyCon Columbia to give the closing key note and we gave a talk on packaging. People seemed to like it and they said, wow, it would be great if we could actually learn this in more detail. So, we ran a test workshop in Medellin, Columbia where we gave out the course material free for a few days. We also allowed people to join from around the world and the response was really stunning. So we decided, hey, let's make this an ongoing thing. We decided to charge for it so that way, that means that we can really work on, open source is great but, without funding, you just, everything else is the priority when you're doing volunteer open source work. So, that's why we're charging for it. And it's entirely Python neutral. I know we're talking a lot about Django, but this is pure Python and it is built on proven and awesome tools like Cookiecutter, Pytest and tox. It also uses proven software solutions like readthedocs, pyup.io which is the security back end for Pippin as well as Travis and, you know, it's kind of, with cookiecutter, it's kind of our mission to make packaging easier and better for everyone.
14:02 Michael Kennedy: Yeah, it sounds like a really cool project and I love a lot of the tools you mentioned. Cookiecutter's great. You and Audrey are behind that. That was more Audrey's thing she was leading, but, it's still, that's going strong. We could spend a lot of time on that but, maybe save that for another episode. I think things like pyup, I use pyup for all of my web apps to, basically, tell me if there's any dependency updates and especially the security updates. I think that's great stuff. So, yeah, that's really cool. I do wish packaging in Python was a little simpler, especially for, like, distribution to other people, not to servers. But, yeah. I think...
14:39 Daniel Roy Greenfeld: Absolutely.
14:40 Michael Kennedy: I think the next major thing, well, a thing that could be the next major thing that really ramps up the popularity usage of Python would be making it simpler to hand out running Python applications.
14:51 Daniel Roy Greenfeld: That would be wonderful if it happens, especially 'cause packaging is so important for, not just open source work or running on servers, but any kind of architecture, be it monoliths or microservices, you always have repeated patterns that can be captured by installabble packages. The problem though, is we have this, I guess, break between the pip world and the Conda world. Bridging that is pretty challenging and I know the Conda team is trying to figure out a way to bridge that. I'm not an expert on it by any stretch of the imagination, but, I know, when you're trying to build out projects that'll work in every environment on all the supported Python versions, I know from a lot of personal experience, that's hard to do. And then to get it to work with pip and Conda, that's even harder. And even though there's solutions to do it, implementing them, getting them to work, is not trivial.
15:50 Michael Kennedy: Yeah, and we have packaging stuff like cx_freeze, py2app, py2xe, all these things. But, it seems to me, they all, 95% work, until they don't. And so, I dream of a day where I can just type python -m build or something like that, and just have it like, some sort of thing that is part of Python itself that truly, perfectly can like replicate itself in a reproducible way.
16:17 Daniel Roy Greenfeld: I don't know if that's going to happen in our lifetime.
16:20 Michael Kennedy: I'll tell you, I told you it was a dream. It was a dream. But stuff that will happen in our lifetime, I'm sure is, Django is going to continue to be going on strong. So let's talk about Django which is what we're actually here for even though you got to package those things up and put them on servers as well. So, maybe, I know many people know about Django, but there's a lot of listeners, scientists, data scientists, students and so on, who maybe are not super familiar, they probably heard the word, but give us just a quick overview of what's the elevator pitch for Django?
16:48 Daniel Roy Greenfeld: Okay. Django is a high-level Python web framework designed to work with relational databases. If you really want to, you can staple in MongoDB or another nonrelational data store, but then you'd lose a lot of the virtues of Django. And those virtues, specifically are, or, the primary virtues, Django makes a lot of the decisions as to which software components you use, and the architecture you follow. So that way, you can focus on business logic instead of all the other pieces because the truth of it is, is that your business logic is never simple. It always gets complex, even for what seems like a simple project. So why not let Django handle that kind of stuff.
17:37 Michael Kennedy: Right, you know, every single app that I've had that ever has interacted with customers, that it maybe have some kind of thing they own or interact with or a history or anything, has accounts. And as soon as you have user accounts, then you have to have the ability to register, the ability to log in, and, as soon as that happens, like the very first day, someone's going to say, I forgot my password, so you got to have email so that they can reset their password. All of a sudden you're like, I just wanted to have accounts, and now this is like a week-long project.
18:08 Daniel Roy Greenfeld: This is a significant challenge. There are companies Okta and others that make a lot of money solving this problem for you and Django combined with one or two other packages just does this for you free. Or, I guess it's open source so it's not free, but you get the point. It does it for you, so that's the power of Django is that it gives that to you. So you can customize it. If you want to use SQLAlchemy with Django, you can. All you have to do is import SQLAlchemy. It's not hard. So you can make changes to it.
18:44 Michael Kennedy: Sorry, I forget the name of the guest, but like a year and a half ago, you probably know better than I do, I had the folks that wrote the book Lightweight Django, which is an interesting, do you remember who that is?
18:55 Daniel Roy Greenfeld: Yes, I can't remember the names, I'm so embarrassed. But I know the book. I know the authors.
19:01 Michael Kennedy: Yes, I'm sorry. I'll try to link to it. Yeah, it was a great book and they're both really smart and so, that was an interesting look, I thought, inside Django where it was like, yes, you can have these big projects, but, actually, that's just how the sort of create app stuff works. It doesn't have to work that way. We can break it down into these smaller pieces if you want. Yeah, and it's kind of touched on with your SQLAlchemy thing there. Hey everyone, Michael here. Did you know I'll be doing a three-part webcast series about MongoDB and Python from May to June? We'll see why MongoDB is a great choice for Python web apps. In this series, we'll go through the entire process of building a clone of PyPI, Python's packaging website, over at pypi.org. Everything from building the front end to deploying the web app and MongoDB to the cloud. You'll learn everything from document modeling basics to special considerations for running MongoDB in production. The webinar is free, so, just click on the link in the show notes, or go to mongodb.com/webinar/python and sign up. See you in May. So, some of those ideas or concepts you just talked about are definitely part of what makes Django popular, but, it came on the scene, roughly around the same time because there was like kind of a flourishing of web frameworks 10 years ago or something it seems like, looking back. Why is it so popular amongst those?
20:22 Daniel Roy Greenfeld: Of the other Python frameworks of the time, most of them have, actually, I think, all of them have kind of faded away into very much a tertiary position. But when it came on, there was a Python framework called Zope with a CMS that it powered called Plone that wasn't very popular at the time, and that framework grew out of the Java 2 Enterprise Edition version of building stuff, which is very enterprisey, and, the more components you had, the better, to the point that, to implement anything trivial, like a form, just took a lot of work. Django made that, compared to projects of the time, very trivial to do. Since then, it's maintained its popularity, even against libraries like Flask, which, like I said before, I use, and its many clones, some of them who are asynchronous, it does this because one, it has market presence, and it makes a lot of these decisions for you. Instead of, as I mentioned before, instead of figuring out which package or component to use, out of the box Django does that for you, so, that way, you can implement your project and then, not have to, if you want to replace it later as business needs dictate, you can, but, out-of-the-box it just gives you a ton of stuff. It has the same batteries-included approach that Python does.
21:48 Michael Kennedy: Yeah, that's cool. I feel like it's easy to get kind of a hindsight bias or acursive knowledge or whatever you want to call it where you, as an experienced developer that's been working in Python for a long time, you're like, oh yeah, I'm going to use this package for this and that package for login and that package for mail and that package for data access, and, it's easy to think, whoa, I just want to grab my little favorite pieces and put them together and create like this little super web project that I'm working on, which is actually how I work a lot of the time myself. But it's, when you're new, those are not, necessarily, joyful things. It's like super overwhelming. There's all these different databases. Each of them have many ways to talk to them, either directly or through a variety of ORMs or ODMs and it's just, it's a lot. And so, I feel like Django does bring quite a bit for a significant number of people to say, here's what we prescribe, put in the pieces that you want of logic.
22:47 Daniel Roy Greenfeld: Absolutely, and because it's Python, the other thing that's nice and this is just Django or any Python web framework in general, is, because it's Python, it plugs in with the whole data science world, trivially, and you know, I'm always kicking myself thinking, gosh, I want to be doing more data science, but, fortunately, when I do get the chance to play around with pandas, and I need to display the result of data, making work with Django is easy. I know people in the Node and Rails world who, when they work with tools like pandas, they've got to jump through, there's extra hoops to make it happen and, thankfully, the Django and Flask and Pyramid world, we don't have to worry about it.
23:32 Michael Kennedy: Yeah, that is pretty interesting that so much of the machine learning stuff and the data science stuff is in Python and that just means, you can, we think about full stack programming already, right? This is another level, another aspect of you can just plug machine learning straight in and you don't have to, basically, do anything, right? Just call it.
23:51 Daniel Roy Greenfeld: Yeah, it's an exciting time to live. Let's just put it that way.
23:55 Michael Kennedy: Yeah, I kind of feel the same way every day I wake up. I'm like, it's so amazing to be alive. What else are we going to do?
24:00 Daniel Roy Greenfeld: Oh, another thing I want to bring up about Django, and this is one of my favorite selling points, is its security. If you follow Django's best practices, odds are, you're going to be in a good place. So, if you don't have debug=True in production, odds are you're going to be not having to worry about people penetrating your system. There's also a pretty large and dedicated security team, the core Django team has a security group that's large and dedicated. In fact, every version of Two Scoops of Django that we've released, the security sections have been vetted extensively by the security group. We spend more time on that, the chapters and appendices in the book, for security than any other place, just because they go over it with such a fine-tooth comb.
24:56 Michael Kennedy: That's really great to hear. That's one of the things that definitely can keep you up at night. Or, if you're doing this for your company, it can be traumatic when they kind of stuff slips, so, they do have such a great attention to detail on the security space. That debug=True problem in production. That is not good. There was some security researcher that had gone through and realized that they could actually pull the AWS secret keys out of a bunch of, Stripe keys, key, you name it, the API keys that are stored, basically, in memory, were things that you could just go scan and pull out of these things 'cause they're running the debug tools.
25:40 Daniel Roy Greenfeld: Absolutely, so, it was, so, a little bit of background. Someone went to, I think they went through various Heroku apps or powered apps. Nothing in Heroku, but Heroku is a common target for people first learning how to play with Django because, at the basic level, it's great.
25:58 Michael Kennedy: And it's simple, right? There's like, You don't have to configure Nginx and uWSGI or Gunicorn, you just like push, app.
26:04 Daniel Roy Greenfeld: Right, and I think Python anywhere as well, and, they found 28,000 instances of people's Django projects and most of them were probably just simple tutorial applications where they set debug=True. And it doesn't matter how secure your framework is, if you have it in debug mode in production, its game over. There's nothing that can be done. That's your fault. That's not the framework's fault.
26:30 Michael Kennedy: It's somewhat of an education thing. But, I don't know, maybe you could do it, maybe you could somehow deal with this, but nothing really comes to mind, unless there's just like a huge scary box that absolutely appears on every page. Then, probably it would help but, it's a tradeoff, right?
26:49 Daniel Roy Greenfeld: Yeah.
26:50 Michael Kennedy: Well, definitely be sure to follow the security best practices, but once you do, then it's all good. One of the things I said when we got started was, the Django 2 announcement is a really big deal. I want to kind of set the stage for that before I ask you more about it. A while ago, two years maybe, there was more of a debate about Python 2 versus Python 3 and are we going to cross that chasm. I feel like we're kind of on the downward, like we're coasting downhill to like wrap that up even though it's going to become really bumpy around 2020. It's going to be real interesting.
27:23 Daniel Roy Greenfeld: Yeah, very bumpy.
27:23 Michael Kennedy: Very bumpy, but it's going to be the bottom of the hill and the bumps are going to be there. Anyway, I think we're kind of over the debate, but one of the things that was really interesting around Python 3 a little while ago, Django was, they switched the default recommendation and just the tutorial steps of using Python 2 to using Python 3. That made a really noticeable difference in the PyPI download statistics for Python 3 usage.
27:49 Daniel Roy Greenfeld: Oh, I didn't know that.
27:51 Michael Kennedy: Yeah, basically, the tutorial switched to say, here's how you get started. You type Python 3 this, da, da, da, and that made like a 5% difference in the usage. The reason I bring this up is that is such a dramatic difference that even a small change has, and now being Python 3 only, it's just going to take it to another level. So, I think Django's one of these things that stands out in the community as really having power to move that needle on the Python 2 versus Python 3 debate. You mentioned Pandas before. They're also going Python 3 only. We're seeing this in more than just Django, but, it's a big deal, right?
28:30 Daniel Roy Greenfeld: Okay, so let me give you some background, so I can give you my example. I maintain, or I help maintain, or co-maintain a number of packages. And some of them, for example, Cookiecutter, which I'm one of the maintainers on, we maintain every supported version of Python and some unsupported ones across every major operating system. Doing that is challenging. It's possible and I'm not going to say it's easy, because sometimes things just suddenly break, and you have unicode issues and stuff like that, and when you get to move a package to just one version, major version of Python, like from 2 to 3, it's wonderful, it's bliss. You get to remove tons of special code. And I know there's libraries like Six and Futures that makes it easier, but, trust me, you get to get rid of tons of code. You have logic trees that you hope are being tested properly until someone reports an edge case, all that goes away. So it really lowers the amount of effort you have to put in to maintain a project. What this means is, it's not an immediate effect for Django to move to Python 3, besides that increased downloads on PyPI.
29:50 Michael Kennedy: Right, 'cause it ran on Python 3 already. It's not like, oh now it supports Python 3. It just dropped support for the old one.
29:56 Daniel Roy Greenfeld: Yeah, and the thing is, is it's not that you'll necessarily see more features, but what you may see, because maybe something's already feature-complete. But what you may see is, maintainers having more bandwidth to answer questions, to make sure that tests are actually testing what they're supposed to be testing. The end result is, even if you don't see more features in a project that's Python 3 only, it will be more polished. It will run better. The maintainers will be able to be more responsive simply because they have less work to do in maintaining compatibility over multiple versions. As one of the maintainers of Cookiecutter, I can tell you, we cannot wait until we only have to maintain one version of, one major version of Python.
30:46 Michael Kennedy: Do you have plans for that?
30:47 Daniel Roy Greenfeld: In 2020, when that happens, eat a lot of cookies. We're going to celebrate with cookies. I guess that's the most formal plans that we have right now 'cause that's still two years away.
30:59 Michael Kennedy: I'm really glad to hear Guido come out and say, January 1st and put a actual date on it. 'cause it was within a year range, there was a lot of speculation.
31:06 Daniel Roy Greenfeld: Oh, so it is January 1st, okay. I heard that but I wasn't able to confirm that.
31:10 Michael Kennedy: Yup, and that's, there was some very strong statement that Guido came out, he said like, let's not mince words or be ambiguous here. It's going to be end of life, no more support, period, January 1st, 2020.
31:24 Daniel Roy Greenfeld: Oh, wow.
31:25 Michael Kennedy: Do not expect the core developers to help you even with security, that's it. Something to that effect. That's paraphrasing, but that's more or less what he said.
31:30 Daniel Roy Greenfeld: Well, who knows? We might release, say, a cookiecutter enterprise support edition for 2.7. 'cause we know that there's a lot of big companies using cookiecutter, and, who knows? We know that there's a legacy Django group that has a business plan like that. So, who knows?
31:48 Michael Kennedy: As a way to kind of lead into the next question, I feel like we've been around long enough to know the whole change into the Y2K era. I remember when it was like--
32:02 Daniel Roy Greenfeld: I remember that.
32:02 Michael Kennedy: Do you have a flight on January 2st? You might not be able to go. Like, the computers may be, People were like legitimately like, we don't know what's going to happen. I think January 1st, 2020 is a little bit like that. It's not going to be like the code is going to stop running. But, people who, as soon as there's like some sort of major security issue and the CEO says I heard that there's this big problem and we kind of using the same software stack, but we're fine, like, no, we're actally not fine 'cause you didn't fund us upgrading to Python 3. Consultants will be hired at whatever rate they want right then. So there's going to be a definite,
32:39 Daniel Roy Greenfeld: Oh, yeay, that's true, yeah.
32:41 Michael Kennedy: It's not going to be quite on the single day, but there's going to be some serious consulting for people that know how to upgrade Django apps, upgrade Python in general.
32:50 Daniel Roy Greenfeld: So what Mike is talking about here is, after 2000, you had some of it leading up to it, but after the year 2000, COBOL developers, you know, the old programming language COBOL, which still drives a significant part of our banking system suddenly became the hot thing and they were pulled out of retirement and they were making salaries, crazy, crazy salaries, and I remember thinking, gosh, maybe I should have learned how to program in COBOL at the time. What he's insinuating is some of this will happen and I know that there are some industries where the software, for example, like the visual effects industry, last I heard, they were still very much stuck on like Python 2.5 or 2.6, that runs inside their commercial software that they use. So, we'll see what happens with them in the year 2020. Will they upgrade or we'll see.
33:47 Michael Kennedy: Yeah, we'll see, but it's going to be an interesting time. The next question I wanted to ask you is, who should be upgrading to Django 2? First of all, there's just a couple of new really nice features. You want to touch on those first?
33:59 Daniel Roy Greenfeld: Sure, actually, what's interesting, the change from Django 1.11 to 2.0 was minor. It was less than the change from 1.10 to 1.11, which is kind of interesting, especially for someone who published a book called Two Scoops of Django 1.11 because we have people coming to us and saying, "Oh, will it still work with 2.0?" It's like, yeah, 98% of the book still works. But there are two little things that are kind of nice. One is, the routing system for URLs is very Flask-like now, the default one. That's easier for beginners or for people who just don't like to play around with regular expressions like I do.
34:39 Michael Kennedy: It always struck me as a little bit contrarian to the zen of Django to have regular expressions in there because Django all about like helping you make things easy, to make these choices, and, oh, by the way, here's this crazy, super hard syntax if you're not a programmer, you put that here and like, you know, whoa! Like, why is this not just like the name, like Flask or Pyramid or whatever.
35:03 Daniel Roy Greenfeld: So, the contrarian in me says, what's wrong with regular expressions? But, the realist in me agrees with you.
35:10 Michael Kennedy: Yeah, yeah. Think of the marketing person who decided they're going to learn a little programming so they can get some interactive site. That person is going to have a hard time with regular expressions.
35:18 Daniel Roy Greenfeld: Yeah, I can't disagree with you there. The other thing is the admin interface that comes with Django, that's now mobile-friendly by default. So you don't need to install another package to make that work. So that's really nice, especially since often, when you're accessing the admin, you're doing it from your phone, trying to fix something in the middle of the night from bed.
35:41 Michael Kennedy: You get woken up by some secure, by like a pager that you're like, okay, we'll fix this. Or on vacation.
35:48 Daniel Roy Greenfeld: Or on vacation, when you have a slow connection. So those are the two significant changes, or what I consider the two significant changes and, as you can see, they're pretty small. Again, the big switch with 2.0 is going to Python 3 only. And then, you know, that leads into the question of why shouldn't you move to Django 2.0. There actually are a few reasons. Django 2.0 is a standard release for Django. And that means it is supported by the core team for less than a year. Whereas Django 1.11 is a long term support release, which means it's going to be supported until at least April 2020. Although we'll see what that means with Guido dropping support for Python 2 on January 1.
36:36 Michael Kennedy: Maybe truncated a little bit, who knows.
36:38 Daniel Roy Greenfeld: So, in fact, what that means is Django 1.11 is going to be supported longer than 2.0 and 2.1. So if you have an organization that moves slowly.
36:51 Michael Kennedy: Right, so you'll be forced to upgrade on 2...
36:54 Daniel Roy Greenfeld: Yeah if you have an organization that moves slowly, sticking with the longterm support version, it can be a really good thing. And at NASA, we are always longterm supports. So, that why I...
37:06 Michael Kennedy: Are there companies that have LTS only sort of guidelines, like do not use a version of Linux that's not LTS, do not use these packages that are shorter term? Like, always just stay on the LTS version or is it just a culture thing?
37:19 Daniel Roy Greenfeld: I don't know if they have formal policies or not. I know at NASA, we didn't have a formal one, or at our center, it might have changed there because with the advance and DevOps and deploying stuff to the cloud, things are easier at least at NASA, but I know that there are certainly organizations that we've dealt with where, because they know, you know the engineers and developers know that upgrades just take a long time to implement, like a major upgrade, they'd rather stay on an LTS and then get the minor patch updates. That's why Red Hat and other organizations do longterm support releases. It's just because the larger a group gets, or the less funding it has for a project, the more likely it is to stay on a particular version of a project.
38:10 Michael Kennedy: Yeah that makes a lot of sense. So would you recommend that people maybe start on Django 1.11 or is it, if you're starting a new project, it's 2.0 for sure?
38:19 Daniel Roy Greenfeld: I say that 95% of people should be starting on the most recent version of Django, for which our books still certainly, absolutely applies. And then, you know, upgrade as soon as, maybe not as soon as the next version of Django comes out, but like the first patch release, because that's when all the secondary packages and projects update. It's just like that with Python. As much as I can't wait 'til 3.7 comes out, for Python, I'm going to probably wait a little bit before start coding in it, because I know that there are packages that I use that won't be supported yet. As much as I like to be on the leading edge of things, I don't have that luxury.
39:03 Michael Kennedy: You also don't want to wake up in the middle of the night, 'cause it's leaking memory or some weird thing like that. Yeah so if you look at the dates, like Django 1.11 is predicted, or scheduled to be, supported to April 2020, Django 2.1 is still December 2019, so that's right on the cusp of the Python 2 cutoff anyway, so there's not a huge difference currently. Four months, right, so that's not, I don't know if I was starting on new, I would definitely go for the 2.01, but that's just me I guess.
39:35 Daniel Roy Greenfeld: I always try to do the latest and greatest.
39:36 Michael Kennedy: So another recommendation you have is like, you probably shouldn't move to 2 if you can't run on Python 3, which is obviously like, it's not, you cannot move to 2 if you cannot run on Python 3, right.
39:50 Daniel Roy Greenfeld: In fact, I really try not to make fun of, you know, other software developers, we have a challenging job. But sometimes on some of my projects, open source projects like Cookiecutter Django, someone else said, "Hey, it's not working." and then they show the stack trace and it's clear they're running 2.7. It's like, well you're running Django 2.0 with Python 2.7, it's just going to break.
40:14 Michael Kennedy: Not intended to work that way.
40:17 Daniel Roy Greenfeld: But we all make mistakes like that. So it's, like I said, I shouldn't make fun of people.
40:20 Michael Kennedy: I think part of it is we need a little bit more help from the operating system folks to make this a little bit smoother. Right, like on my Mac, if I'm just a person I know I want Django and I know Django uses Python, I type Python and that comes up with a program that does a thing, I might try to type pip install django and just run it. There's nothing along that path that's like a big warning sign. You're set up for failure, but if you don't know, oh there's this thing where there's a Python 2 and a 3, they're incompatible, you don't have 3 by default. I mean, Linux is starting to fix the problem because they're starting to default to Python 3. Windows, ironically fixed it by not supporting it at all, so you have to go to seek it out, and why would you seek out the old one?
41:11 Daniel Roy Greenfeld: I actually think that's kind of a good thing.
41:12 Michael Kennedy: Yeah and then Mac comes with just the old one. What do you think about all that?
41:16 Daniel Roy Greenfeld: Like I said, I kind of, I mean I know with a POSIX operating system, there is no choice. I think they do need system Python just to run. Operating system experts can correct me there. So I don't think taking Python out of OS X or Linux is the solution, but in some ways I am envious of the Linux world, or not the Linux, the Windows world, where to run Python, you have to install fresh installation. You know maybe the answer is with some of these projects of complexity, such as Pandas or Django or whatever, is, maybe we could put in something saying oh you're running the system Python, we're not going to let you do that. You have to go and install a new version of Python. And I don't know how realistic that is. I'm just not, I just don't know enough on the subject, but having seen beginners stumble through that again and again in the Python world, I definitely hear that. That would be kind of ideal if we forced people to install an external version of the language.
42:21 Michael Kennedy: Right, or, I understand the system needs it, but does it have to default to python? Could it be python2, if the thing that is Python 2 and python is Python 3, right? I feel like they could, somehow, patch that up and kind of make things more or less hang together. Probably would take some work. My reason it's probably just not a priority, at least in the Mac OS world.
42:45 Daniel Roy Greenfeld: In the operating system world, I just don't see them making it a priority, they've got other things on their plate, either for financial reasons, or bandwidth reasons, but I wonder, you know, is it possible when you run a library, like Pandas, for example, can we detect whether or not you're running the system Python and if so, throwing that flag down, saying hey you need to go to python.org or install Conda, than forcing people to learn the hard way that screwing their system Python is going to be really painful.
43:18 Michael Kennedy: Yeah, I mean probably the error you get the vast majority of the time, is like this particular method, or this attribute error something to that effect. Or an import error, that means nothing to people, it's just like, oh it's broken. But if you got a wrong version of Python error, that actually would go a long ways towards, oh I have the wrong version of Python, not like, oh it's broken it just doesn't work.
43:40 Daniel Roy Greenfeld: Well that's a really awesome idea, Mike. I wonder what we can do with it going forward.
43:47 Michael Kennedy: It's not hard, right? Just check system version, right? But it seems like just a little bit of communication, but I hear the problem. I would prefer that the operating systems come with modern Python if it can have it, but who knows what can we do? This portion of Talk Python To Me is brought to you by ActiveState. ActiveState gives you a faster way to build and secure open source runtimes, from your first line of code through to production. Every second you spend building your Python distro, or trying to secure your Python programs, is less time spent doing the work you love. You've got better things to do than trying to resolve dependencies or making sure you ticked off all security boxes when you ship to production. Standardize on your Python builds so you can have less friction in the development cycle, and you can deliver apps faster. You can also get a unique service to verify your Python applications at runtime. Bake security right into your code without impacting performance. Go faster, spend more time doing the work you love and comply with your enterprise security needs. Try ActiveState and see why it was chosen by IBM, Microsoft, NSA, Siemens, PepsiCo, and more. Join millions of developers who trust ActiveState to build their open source language distros. Visit talkpython.fm/activestate for a special offer. That's talkpython.fm/activestate. Greetings from the expo booth here at PyCon. I just want to add one quick thing to that spot you just heard, the ActiveState folks just had a really cool announcement. So if you're here at PyCon, drop by their booth, and ask them about it, they'd love to tell you about it. All right, hope you enjoy this episode. And if you didn't make it to PyCon this year, you owe it to yourself to do it next time. All right, so generally you're thinking the advice is unless you have some kind of major blocker, one of these we talked about, it's all about Django 2?
45:36 Daniel Roy Greenfeld: It's all about Django 2. 'Cause always go forward.
45:39 Michael Kennedy: Is there more to it than pip installed -U Django to upgrading or do I need to change configuration files, or anything like that?
45:47 Daniel Roy Greenfeld: In a perfect world, it's really easy. You just do pip install -U Django then run your tasks and deploy. But the Django world has a large and comprehensive ecosystem of packages and products. You know Audrey and I had a part in building and maintaining it for a long time. We've stepped away in the past, I guess two years. Sometimes your auxiliary packages don't work and this is why it's so critical to have tests, because you know the drill. You update a package and then you run your test and if something breaks, then you see if it's something in your code that's breaking or if it's something in the third party package. And then, which case, maybe you need to update that. And tools like pyup.io, which is created and maintained by my good friend, Ian Escobaer, that certainly makes it easier but you still have to run those tests. And this is, you know, my favorite reason to include tests, it's less to find bugs and more to make upgrades for versions of Python and Django and other tools easier.
46:52 Michael Kennedy: It's more the smoke test rather than the nuanced unit tests, right? Like does it generally hang together?
46:57 Daniel Roy Greenfeld: Exactly, so fortunately what I've found is upgrading from 1.11 to 2.0 is pretty easy. There's none of the, from 1.10 to 1.11, I think it was, the way that Django handled cross site request forgeries, was changed and if you had a busy, you know very, very busy project, with millions of users, if you deployed it and all of a sudden, for a few minutes everybody's forms stopped validating, that made upgrades, upgrading from 1.10 to 1.11 challenging. But fortunately, with going to 1.11 to 2.0, for us it's been really trivial. It's been really sweet and easy. So I think that was kind of intentional when they went from 1.11 to 2.0 and the big change being the version of Python, or that it doesn't support 2.7. It's just to keep that advance easier.
47:54 Michael Kennedy: Yeah it's clever to make that there so that sort of decision to say the way people perceive that the change is going to be actually really small, so encouraging people to get on that new track that's Python 3 only is not scary. It's not like oh we've changed some settings, config format or something and you got to make sure you change that too.
48:13 Daniel Roy Greenfeld: For us, at least it's been very easy. And this doesn't just apply with Django, with Pandas or other tools, this is one that like I said is a great justification for having tests, it makes these upgrades easier, especially as we move to the Python 3 only world of the future.
48:29 Michael Kennedy: Yeah, just create a new virtual environment, check it out again somewhere else, do the upgrade, you know, run the requirements, do the upgrade, run your tests, and if that works, you're probably good. You don't have to break what you have sitting on your main desk, right?
48:44 Daniel Roy Greenfeld: Absolutely.
48:45 Michael Kennedy: Nice, so what's the future of Django?
48:47 Daniel Roy Greenfeld: I'm not a core developer, so people often think that I am. I don't really know too much about what's coming. When I have looked at the roadmap, there hasn't been anything super concrete that's changing, but again, I'm not really in the loop and I don't go to that many Django-specific conferences, so I just don't know. There are some things that I would love to see though. Deployment is still kind of a pain. I know there's services PythonAnywhere and Heroku and now Zappa that make it easier, but I've always wondered if there's a way to make those hooks a little bit better and easier. And also we're in a world of data science, and for better or for worse, and having Django integrate better with those tools, I think is something we're going to see more of in the future. There aren't that many huge and easy to, not huge, I guess that's the wrong term, but comprehensive libraries with good documentation on how to integrate pulling data out of a server, running it through Pandas or PyTorch or whatever and then displaying that with Django. There's you know the odd blog post or Stack Overflow answer, but I'm guessing in this year we're going to see that start to change. Because part of data science is displaying your data, displaying the results. And you can crunch numbers all you want and you can data wrangle, you can do all that stuff, but if you don't display your data, especially with the large tool that, or large project that needs to be able to do this for certain users, who's your customer? Sales team? That may not be enough for you.
50:32 Michael Kennedy: For sure and you know we've got things like Jupyter and JupyterLab, there's a whole explosion of notebook solutions, but in the end, maybe you want to show it like you said, not publish a paper of data to your sales team, but give them dashboards within the app, and things like that.
50:47 Daniel Roy Greenfeld: Yeah, and you know not to bring up politics, but with, I haven't looked at, or I don't know too much about the whole thing with Cambridge Analytica, but what I'm gathering, part of what they were giving were reports to end users. You know while that might have been done for the wrong cause and the wrong purpose, there's a sales opportunity for you, which is if for consultants or companies around the world, which is if you have this framework, Django, you have all these machine learning and data science tools that are accessible via Python, providing a means for publishing that data is part and parcel what we do as engineers.
51:26 Michael Kennedy: Yeah for sure and making that easier and beautiful, that'd be awesome. All right, let's go and, actually I have one more question before we drop of Django. I wanted, I threw here a thing I wanted to ask you. So one of the really powerful things that we have in Python 3 these days, and it started 3.4, 3.5 that really came into its own in 3.5 with async and await, the whole async programming model and those are, that's like largely missing from the main web frameworks. You can't throw an async Django view up there or an async Flask view or an async Pyramid view, or whatever, right and await on various things. Do you see stuff like that coming? Do you think it's important?
52:38 Michael Kennedy: They're all based on WSGI.
52:38 Daniel Roy Greenfeld: They're all based on WSGI. And WSGI follows a very precise request and response cycle. While Andrew Godwin has been working on channels for Django, which provides an asyncronous system, and it's powered by asnyc.io under the hood.
52:57 Michael Kennedy: But they're all these like, we have Quart for Flask, which is really nice. But they're all like, we're going to take this and make a copy of it and it'll be really, really close to the thing that you want to have, Django, Flask, whatever, right but it's just they have not made their way into these major, the actual official major frameworks.
53:14 Daniel Roy Greenfeld: I think that Django is too resistant to breaking backwards compatibility that I don't see it happening in the next couple years, which I think is kind of a shame. You know I think Andrew Godwin should just be committing right to core, right to the master branch.
53:30 Michael Kennedy: Yeah the stuff he's doing is awesome. I had him on the show quite awhile ago and people can go back and listen to the whole episode on that.
53:37 Daniel Roy Greenfeld: Yeah I think Flask's API is pretty stable. But there are async clones for Flask I think there's Sanic, there's API Star, there's a bunch of these things. But even though these things exist, deployment isn't really that straightforward. I know that you can deploy a channel's application on Heroku and I'm pretty sure you can probably do it on PythonAnywhere, but it's not the default operation, it's not for people who are just new to the system. It's an advanced topic and I think that's a shame because the way the world is asynced, right that's the trend. And it's not a trend, it's the way things are going. Now Andrew Godwin has his own specification that he wrote, or actually he created, it's not his specification called ASGI, which is asyncronous service gateway interface. But until I think we have a long way. I think WSGI is so entrenched in our Python world, that it's really hard to break out. I think it's a shame and I think if someone came up with a business model to get around that, they would make a lot of money. I know I would use that system in a heartbeat. As much as I like using EC2 and playing around with Zappa on Lambda to be able to do asynchronous easily, with easy deployments without having to stand up my own server or use a platform as a service system, that's you know super integrated in itself, you know for me that would be awesome. I'd love to see something like that, but I think that's not going to happen for several years.
55:14 Michael Kennedy: Yeah it's kind of a bit of a chicken and egg kind of blockade thing. But it'll break free, it'll come out, it's just sooner would be better. Every time I hear somebody say oh we're switching to Go for because the performance is better, async and whatever, it's like part of the problem is somewhat self inflicted and it could easily be fixed with just a slight, like basically a one function called deep deep down from process requests or whatever it's called to process async requests. And it kind of cracks loose, you know. But okay, someday. We can look forward to the future with async methods in all the major frameworks.
55:49 Daniel Roy Greenfeld: Yeah I can't wait.
55:51 Michael Kennedy: Yeah knockoffs, but let's bring those back in. All right well let's touch really, we're getting low on time, but maybe just tell us a little bit about your Django book, it's been one of the more popular ones. So you have Two Scoops of Django, right?
56:05 Daniel Roy Greenfeld: Yeah, Two Scoops of Django and it's been out since 2013, we're on the fourth edition, which is kind of awesome. If we do another version, we won't release it until next year, which is when the next time a longterm support version of Django was released. And if we do it we'll make...
56:24 Michael Kennedy: You going to call it Two Scoops to Django 2?
56:26 Daniel Roy Greenfeld: 2.2, it'll be Two Scoops of Django 2.2, if we do it. 'Cause it's so much work to do. If you want to inflict pain on an enemy, get them to write a book. If we do it, we're planning some substantial changes, like we'd probably have much more, touch a lot more on asyncronous stuff, especially with Python 3. And we'll get to get rid of all of the Python 2 stuff, which will be awesome.
56:53 Michael Kennedy: Yeah, yeah that's really cool. So what are some of the core principles from your book?
56:55 Daniel Roy Greenfeld: With Two Scoops of Django, it's a big book, it's 550 pages. But you can boil it down to, you want to embrace best practices. Good import policies, having tests, be aware of security, understand your tools, and try to keep your imitation of everything as simple as possible. Because your business logic, no matter what your project, is never going to be as simple as you think it's going to be. The other thing that we did that really helped with it was have a lot of fun examples. I mean that's the theme, ice cream, right? Audrey insisted on that and she did the illustrations and while she's also doing the illustrations, I need to point out she wrote more of the book than I did. I'm the loud one on social media, but she's the more productive one. You don't go to MIT and not know how to write about Python and Django. And of course there's the ice cream theme. And that ties into the fun examples. A lot of programming books, we've seen a lot of changes since the release of our book and other books, like Land of Lisp, they've got more colorful, but when we first came out, we were, we were like a fresh rock being dropped in the pond. It was kind of awesome at the time. And now we're not so significant, which is kind of sad.
58:14 Michael Kennedy: A fresh replacement for food and bar.
58:16 Daniel Roy Greenfeld: We're spam, I love spam, but yeah, that had gotten very old.
58:20 Michael Kennedy: That's for sure. All right, cool so, I definitely recommend your book. It's a good one. I guess one final thing I want to ask you about, 'cause we were talking before we hit record, you have some good advice for folks is, PyCon is coming up. This episode, I don't remember how the timing's going to line up, this is going to be right around PyCon, it may be the week of PyCon that this comes out, so what's your advice for people about getting the most out of that conference?
58:43 Daniel Roy Greenfeld: My advice to PyCon is, first of all you should go if you can. And if you can't go to the one in the US, or in North America, you should go to your local, regional one. And then if you go, don't hang out with your friends. Make new friends. You are there to broaden your horizons and hanging out with your friends, I know it's easy and I know you're nervous, and I know you're scared, but by making new friends, you're going to broaden your horizons. You're going to learn new ideas, you're going to make new connections. And that is why you are there. And while you're doing that, don't show off how much you know. Instead, ask questions. And yeah if someone starts to explain something that's super trivial and obvious to you, maybe you've got a PhD in a particular field and it's on your label and someone starts to explain it to you, then yeah you can start showing off how much you know, but really try to focus on asking questions, because you're there to learn, not to show off what you know. And I know as someone who has gone to conferences and hired people, I'd rather hire someone who is eager to learn and find out new things than a know it all.
59:57 Michael Kennedy: I definitely second that, for sure.
1:00:00 Daniel Roy Greenfeld: And then if you have been to a conference before, or if it's your first one, volunteer to help in a session. If there's a volunteer process, get involved. Again, the reason is is you're there to make connections. You never know who is going to be there helping out with you. I've certainly made some life changing differences in my career by volunteering and just happening to meet that right person. So that's really important. But, overall, just try to break free of the patterns that you have and if you're worried about looking like an idiot, don't, because people will forget you. If you do something that's embarrassing, and you think it's embarrassing, but most people won't really care, they'll be like, oh whatever, it's just another over-eager conference-goer. I know I've done some things that are really embarrassing, and no one remembers but me. I can assure you that. And I'm not talking about offensive things. Like don't be offensive. But if you happen to start explaining to this middle aged guy that Python 3 is going to be taking over in January 1 and someone points out to you that's Guido van Rossum, he's not going to remember that.
1:01:16 Michael Kennedy: In fact, he would probably appreciate someone coming up and saying that to him.
1:01:20 Daniel Roy Greenfeld: Yeah, you're not, it's going to be okay. Just break free of your normal habits and broaden your horizons.
1:01:27 Michael Kennedy: Good advice, one thing about PyCon, at least PyCon US, because it's so large, that there's an opportunity to tie all three of those suggestions into one quick and easy thing. A lot of conferences have people on the stage, there's one track or something, there they have the open sessions and so you can volunteer by proposing and kicking off an open session. Your friends may not come and you have to ask questions, 'cause there's no presenter, so it's all about sitting there and having a conversation. So I definitely recommend people embrace the open session side of things, open space, whatever they call it officially. Because that's something that's not recorded, it's only a live experience and it gets you involved.
1:02:08 Daniel Roy Greenfeld: Absolutely.
1:02:09 Michael Kennedy: All right, well we're just about out of time, but before we call it a show, let's ask you the two questions. So if you're going to write some Python codes, some Django code, what editor do you use?
1:02:19 Daniel Roy Greenfeld: So I run, and I have a 2011 MacBook Air, so an IDE like PyCharm is just going to break it. It worked several years ago, but it's not going to work now. So I just use Atom because it runs and it runs fast these days. And also if I need to install on a new machine, as much as I like Sublime, what I like about Atom is I can just install it and go, because we have a couple test machines for Windows and other operating systems that I don't use that often and I can just get Atom going in about 20 minutes.
1:02:56 Michael Kennedy: It's something that's always there and you don't have to change depending on where you are. That's pretty nice.
1:03:02 Daniel Roy Greenfeld: And I don't need to learn Arcane commands like with Vim or something else.
1:03:05 Michael Kennedy: Exactly, exactly, I'm with you on that. So notable PyPI package?
1:03:09 Daniel Roy Greenfeld: So I'm going to list two. I know we're short on time. The first one is Black, which is the uncompromising code formatter. It's awesome. I'm replacing PyFlakes and all these other tools on my project with it. And the reason why is because I cannot keep, this is my dark secret, I cannot keep single quotes and double quotes from getting into my code and Black just fixes all of that and no one complains or yells at me.
1:03:33 Michael Kennedy: Oh it fixes that, that's pretty interesting.
1:03:36 Daniel Roy Greenfeld: Yeah, so... We're trying to figure out on our projects how to get it to run and clean stuff up the way we want, but yeah Black is awesome.
1:03:46 Michael Kennedy: Comes in any color you want, as long as it's black.
1:03:48 Daniel Roy Greenfeld: Exactly. And the guy who founded it, Lukasz Langa, he's a friend of mine, that's not why he's, well maybe a little bit, that's why I noticed it, but it's, Black is awesome.
1:03:58 Michael Kennedy: Okay, cool. And another one is close to home for you guys, right?
1:04:01 Daniel Roy Greenfeld: Yeah, that's Cookiecutter, because well, packaging, and it's our most popular project. It's got over 7,000 GitHub stars. There's a lot of Fortune 500 companies who use it, which is kind of flattering, and government organizations. Whenever I want an ego trip, I just go on the GitHub and search for Cookiecutter packages.
1:04:22 Michael Kennedy: Yeah there's a bunch now, it's really cool. Nice to see that doing well. Awesome I definitely recommend Cookiecutter as well, a lot of the web frameworks are starting to adopt it as the way to scaffold up the apps as well. Like Pyramid went all in on that. I don't know about Django. They're not using it are they?
1:04:38 Daniel Roy Greenfeld: No, but there's a lot of templates for building Django projects that use Cookiecutter.
1:04:43 Michael Kennedy: Right, there's independent templates that you can just Cookiecutter, whatever the link is and create your Django project, right?
1:04:49 Daniel Roy Greenfeld: Exactly.
1:04:50 Michael Kennedy: Yeah, nice. All right, final call to action. People are excited about Django 2 dropping that Python 2 aspect, what do you recommend for them, final call to action.
1:04:58 Daniel Roy Greenfeld: Use Django 2.0, the most recent version of Django, if you can, and buy our book, 'cause even though it says 1.11 on the label, it still applies.
1:05:09 Michael Kennedy: That's awesome. And of course your packaging course as well, right?
1:05:10 Daniel Roy Greenfeld: Yes, it's available both English and Spanish, although we talked a lot about Django, the course itself doesn't have anything to do with Django, it's Python specific. Or it's Django-free, however you want to call it.
1:05:26 Michael Kennedy: Perfect, so I'll put links to all that stuff in the show notes.
1:05:31 Daniel Roy Greenfeld: Okay.
1:05:32 Michael Kennedy: All right Danny, thank you so much for being on the show, it was great to chat with you and talk about the web.
1:05:36 Daniel Roy Greenfeld: Thank you for having me.
1:05:37 Michael Kennedy: Yeah, past, present, and future. It's going to be a good ride, right?
1:05:40 Daniel Roy Greenfeld: Absolutely.
1:05:41 Michael Kennedy: Yep, talk to you later, bye. This has been another episode of Talk Python To Me. Today's guest has been Daniel Roy Greenfeld and this episode has been brought to you by MongoDB and ActiveState. Interested in seeing how webapps are built with Python and MongoDB? Register for my webinar I'm doing with MongoDB over at mongodb.com/webinar/python. See you there. ActiveState gives you a faster way to build and secure open source runtimes. From your first line of code through to production, check it out at talkpython.fm/activestate. Want to level up your Python? If you're just getting started, try my Python Jumpstart by Building 10 Apps or our brand new 100 Days of Code in Python. And if you're interested in more than one course, be sure to check out the everything bundle, it's like a subscription that never expires. Be sure to subscribe to the show, open your favorite pod catcher and search for Python. We should be right at the top. You can also find iTunes feed at /itunes, Google Play feed at /play and Direct RSS feed at /rss on talkpython.fm. This is your host, Michael Kennedy. Thanks so much for listening, I really appreciate it. Now get out there and write some Python code.