Django Chat

Being a Productive Developer - Nick Janetakis

Episode Summary

We welcome back Nick and discuss upgrading to Django 4.2, developer tooling, balancing multiple projects, and how to be productive as a modern web developer.

Episode Notes

Support the Show

This podcast does not have any ads or sponsors. To support the show, please consider purchasing a book, signing up for Button, or reading the Django News newsletter.

Episode Transcription

Will Vincent 0:01
Hi, welcome to another episode of Django Chat podcast on the Django web framework. I'm Will Vincent joined by Carlton Gibson. Hello, Carlton.

Carlton Gibson 0:08
Hello, Will.

Will Vincent 0:09
And we're very pleased to have Nick Janetakis. Join us again, to speak about web development, Django and other things. Welcome, Nick.

Nick Janetakis 0:16
Hey, thanks a lot for having me here. Thanks for coming. Glad to be back after what was it? About two years or so?

Will Vincent 0:20
Yeah, two years. So let's see what's what last time we talked a bit about Docker and flask and and you're really interesting guests because you know, Django, but you also work day to day now with PHP, you have a lot of experience with Flask. And so I think maybe we'll talk about more generally web deployment, and not just narrowly Django, as we usually do on the show. But maybe what's what's changed for you in the last two years since we last spoke? I believe you have a full time job now.

Nick Janetakis 0:47
Yeah, so it's been Let's see now, in September 2021, is when I started a full time position. But yeah, I still do the courses and YouTube videos and blog post stuff on the side.

Carlton Gibson 0:57
So how'd you guys my humans media question how do you have time to do a full time job? And YouTube?

Nick Janetakis 1:03
That is a very good question. And there is a reason why new courses haven't been posted in a while. Because yeah, I mean, when you're working a full time job, it's like 40 hours, give or take a week, like, Yeah, and you gotta be protective of yourself, just your own time, right? You don't want to want to be grinding, full time job. And then it's like, 10 minutes to eat dinner. And then it's like four hours of doing courses after like, you're gonna get burned out during that whole time, ya know, until that for me, I've optimized things to the point now where, you know, make a new YouTube video, usually on the weekend, like every Saturday or Sunday, and honestly, like, it depends on how long the video is, but it's not too bad of a time investment. Let's see maybe two hours all in to make, like, I don't know, 15 or 20 minute video.

Carlton Gibson 1:40
Okay, that's fantastic. And you. We may have discussed this before, but what do you use for that? Because I, you know, I got ScreenFlow going and I think yeah, okay, that's about right. But there's lots of depth in it. And I'm always scared to commit to the technology. What would you recommend?

Nick Janetakis 1:56
Yep. Right now, because I am using Windows, I do use a tool called Camtasia. Okay, I think there is a port for that to work on Mac OS as well. Yeah, it's pretty. Nana when I say bare bones, like has good features, but yeah, I don't know. It's, it's whatever you get used to, like, I've made like, 600 videos now. So it's like, I'm familiar with all the widgets,

Will Vincent 2:15
your madman with your productivity. I remember when you were still doing the podcast, I was like, you know, slow down a little there. You're making me feel bad, because you were just, you know, week after week, for how many was that that you did? Was it? It wasn't quite 100? I don't think right? It was like 60 or 70. I had like, quite,

Nick Janetakis 2:31
I had to hit 200. Mark. It's like I did 102 or something? It's definitely 100.

Will Vincent 2:36
Yes, because we had switched to every other week. And then we take breaks and you were just relentless with it, maybe just to go back. Like, what was? So this is the running and production podcast, which is fantastic. Lots of things on Django, but other areas? What was you know, with some time away, how do you look back on, you know, what the good, the bad? Like, how do you feel about it? Now? I mean, you're still doing YouTube videos. So you're not completely burned out from teaching. But, you know, how do you have? Yeah, how do you view the podcast experience? In hindsight?

Nick Janetakis 3:07
I would say if there were infinite time, I would still be doing it for sure. So I don't regret any of it. I know, it was awesome. Because it kind of kind of got a chance to speak to like 100 different people from all different walks of life, right? Someone who just graduated high school, like the first app ever to like, you know, billion dollar company type of thing. So it was cool. Yeah, just to talk to different people. So I don't like regret the time spent. But yeah, there were certain areas that were just like major burnout inducing things, as you may know, from doing your own podcast.

Will Vincent 3:37
Wow. Well, I think I told you, I mean, having a co host. keeps it going, right. I mean, just to have someone else to the upside down someone to say, hey, let's, you know, let's do more. Let's do less. I think it's anything solo is really hard, especially a podcast given it's so much kind of hidden work, right? I mean, for an hour long conversation. I think you even said at one point, you estimated like six or seven hours total? Or what was your calculus for how many, you know, for a given episode, how much actual time did it take to put it out? Yeah, about

Nick Janetakis 4:06
six, seven hours is a reasonable estimate. And that's everything from like finding the guest and you know, coordinating some schedule and then recording the show for an hour, hour and a half, and then doing the editing part, the show notes, putting it all together and then shipping it out. Yeah, so

Will Vincent 4:18
I think that's the thing is that it's it's just all the rest of it, right? It's like the conversation is the fun part. But it is it is a quite, it's probably a little less for me just because I've Carlton's that helps, you know, with chatting and stuff, but it's still, it's still probably a good five hours per episode total. And like, you know, out of 40 hours in a week, you know, ostensibly that's a chunk. I mean, it's basically a day, like basically, you know, we're recording on a Tuesday. I basically take today to just do all this stuff and try to set up guests and so you know, it's 20% of my time when we do it, but we don't do it all the time. Yeah, well, either. Carlton, you have you have questions. I mean, what were what were some of the I don't know, highlights that from the guests because I agree. Like, it's, for us having the podcast is it's amazing. We get like, we're speaking to amazing guests in all realms, you know, walks through the tech world, and it kind of keeps my excitement up. Instead of just, you know, the computer and reading blog posts. It's like, oh, there's people and like, they have passions and interests and introduce me to things. That kind of keeps it fresh. For me at least. Did you find that to be the case for you, Nick?

Nick Janetakis 5:25
Yeah, for sure. Yeah, I learned.

Will Vincent 5:29
What about you? What are you causing? You're tired of talking? No, I

Carlton Gibson 5:34
guess like, you know, the bit you said, Nick, about getting to reach people from the different different walks of life, you know, to different people in the different areas of the Django community. You know, people are using it in their work, people are working on the framework themselves. You know, everybody in between, I think that keeps it fresh and worth doing for us. But yeah, I couldn't. It's the summer holiday. For us. It's the beat the break at Christmas. It's the only doing it once every fortnight that makes it sustainable, I think.

Nick Janetakis 6:03
Yeah, I think that's a really good point. That's something I didn't do. But I've noticed other podcasts, not companies, but like your guy, like you do have like, quote unquote, seasons, right? There's no, there's like a period where you take x amount off? Yeah, no,

Will Vincent 6:16
I think it's helpful that I mean, maybe if we had advertisers, we feel different, cuz it'd be more of a monetary pressure, you know, where, you know, if you have do it once a week, then you're like, Oh, I could go twice a week and make twice the money and, and then there's the algorithms. But for us, it's just for fun. I mean, I think it's a little bit of marketing. But that's not the primary goal. So I think if anything we've learned leaned into that the last couple years, Carlton, right. I mean, we want to take time off or take time off, I think it just helps the burden, right? Because there is this burden when you're putting out content regularly, and you feel like you need to and I think that's sort of like the burnout cycle. Same thing with work, right? Like just relentless inbound. And you never get to a moment to feel like you're in control, even if the inbound doesn't stop.

Carlton Gibson 6:58
And I guess, just follow up with that. One is that you've got a schedule, you've got a month, you plan your week, and you've got all these things on your job list. And when there's something which like takes up, oh, that's 10 20% of the time gone. Ah, and then, you know, this is other two or three things on the list, all of a sudden, it's like, oh, I'm actually under pressure. Because if you can just sort of ports one of those things. All of a sudden, there's so much more space in your life, and it's out, I can breathe, I can do I can, you know, I've got time to being able to drop the podcast for the summer. That's like, okay, yeah. And we'll, we'll join you again in the autumn.

Will Vincent 7:32
And maybe Nick, maybe you can give Carlton tips because it's only been four or five days since he he stepped down as a Django fellow, which he'd been doing for five years. So I guess you went and got a job. So there wasn't really like a lot of downtime. But I don't know there's there's probably some, there's some settling when you take something you've been doing all the time, at least, like for me it just on the Django board, which is a smaller time commitment. I think it took a good two, three months to wrap things up that I needed to do, but also just to be like, I don't have to check that email every day. Like, like the brain kind of settles into. Oh, it's not there. It's not just an immediate thing, like a vacation or something. That was not the case for you at all, Nick.

Nick Janetakis 8:12
Yeah. And it's also funny enough, like, it's somehow almost works like the opposite to where it's like, wait, I have all all this free time now. And like, suddenly, the more free time I have the more unproductive. I am like, I wonder if you guys noticed that as well. Because

Will Vincent 8:28
yeah, yeah, yeah. But it's this. This is my take, I want to hear Carlton's. But like I like. So what is productivity, right, I feel like there's a built up kind of stress pressure. And most we feel like productive is when we're like grinding through podcasts or doing things we know how to do that take time and energy. But really, it's when you have a moment to be bored, or a moment to reflect or a moment to sit around that you kind of actually are creative and actually are truly productive. And there's these blips, but it feels at least for me, it feels uncomfortable to find the space because it's so hard to block off the space. But it's like, it's only when I'm like, you know, like, like yesterday i i was i sent Carlton a picture like I got the Harry Potter video game and like, I have no time to play video games. I've got kids and stuff. But still if I find half an hour an hour, like I'm convinced that's when I'm gonna have like an insight because it's like, my brain is focused somewhere else. Anyway, so I'm, I'm very kind with the idea that like, I don't need to be constantly like, going to be productive. It feels productive. But I feel like it's actually probably not productive. In my line of in what I do anyways. Sorry, that's a long tangent. I want to hear what your thoughts are on it.

Nick Janetakis 9:33
Yeah, Carlton, you want to chime in? Okay.

Carlton Gibson 9:36
So I'm still

Will Vincent 9:38
in Carleton influenced me on this right. He's the one who's like kids, kids are good because you're playing with the kids. You're thinking about something else. Like it's all it all, you

Carlton Gibson 9:44
know, like, you've got distract the left brain right so the right brain can get on and do its thing. Otherwise the left brain is just like yeah, we're gonna focus on words and things and logic and space and the right brain is like no, I want more freedom to do so put on some music play with the kids do something Different, that's important. That's where the insight comes from. So it's in the shower, your reference, I mean, I'm busy washing the right way. It's like, Haha, here's your genius idea for the day. Like that. For me, personally, I'm still going through this kind of process of clearing the COVID backlog, the, you know, we had that year of lockdown, and then we had illnesses and then a massive stress. And I got to the point last year where I literally had to put a pause on almost everything and just take on one thing at a time, get the next Django release out, okay, that was out, get the channels update out, okay, do the compensated, you know, just get through to the end of the year, I managed to do all of that. And then, just as I was sort of reaching an even keel, my daughter had an accident she was ill, that was pretty serious. And then my son's now ill, and it's like, okay, right, just take it one step at a time. And so to me, it's like, okay, finishing the fellow roll, got to the end of March got, you know, said I was going to stop New Year, three months to wind up and you know, give time for finding a new fellow and all those sorts of things. Okay, fine. Now breathe. What's next on the list? Well, for me, it's button, which is my simple deployment story for dag Django that been on the back burner for two years, and I just really haven't had any chance to work on it well, okay. That's what I'm going to work on now. And for me, it's like productivity one on one. If you've got too much on your plate, too many balls in the air, put them down, get one ball, get rid of that, then that's one ball less, get the next ball process that get rid of that one ball less than all of a sudden, it's odd. You know what, actually, I've got an empty job list. And I know that's really basic. But when you're, when you're stressed, when you're when it gets too much, you've got to take those kind of emergency steps is to just focus on what's important as my tech. That's, that's how I've got through the last two years. And that's how I plan to continue.

Nick Janetakis 11:47
Yeah, that's very insightful. And was there a special like moment in your brain when you knew like, I had to make the change to reduce the list?

Carlton Gibson 11:54
Yeah. When like, yeah, I was, it was the start of. So what is it now it's 2023. Now, so started 2022. I was just going for a walk, and we had a phone call from the neighbors of my, my parents and my mother had been taken care of and was in hospital. And it was like, ah, and it was like, just one too many things. And I had to at that point, I was like, I have to, I just gotta take remedial measures. Now. It's, it's that my life is on fire. So okay, how do we stop this? Well, okay, we pause, we focus, put that to the side. You know, just and it really is productivity 101 you read any productivity books, project, project management for Dummies, it's like, well take if you've got too many projects, pick the one that's most valuable. Do that first and Okay, fine. So at that point, I had to deal with family. And then you know, that had to check the big Django release hubs release manager for and then, you know, so on. And there was just a list that got that went on. And around October time around Django con us last year, I thought, yeah, I've cleared the COVID back, which is great. And you know, on the head, and then my daughter had arcs and life said, No, you haven't. Oh, yeah. So it carries on, and now it's like, okay, I finished following button. And then the summer and then, you know, we'll see what comes next.

Nick Janetakis 13:14
Yeah. Yeah, the idea of just like, identifying, maybe not so much burnout. But just knowing when you have too much on your plate. Yeah, I think that's a really important skill that I need. You need the time to just introspect on yourself.

Carlton Gibson 13:26
Yeah. And it's like, yeah, it wasn't necessarily burnout. But it was like, if this isn't, this isn't now sustainable. It's burning the fuel too quickly. And you've got to, if you can identify that and take measures before burnout, then that's, that's helpful, I think.

Nick Janetakis 13:41
Yeah. And also, like what Wilson said before, just around like, you need that time just to let your mind wander. Like, for me, I still do, like, walking or jogging time for me is not an optional, like, at least an hour and a half a day, and two times a day. Maybe not like three hours total, but you know, like 45 minutes per time. Super important. Like, I don't know, like the shower thought thing is like the most realest thing ever. Like almost every programming problem I ever have. It's like, either in the shower on a walk, or like eight seconds before I fall asleep. That's when it gets fixed, ya know,

Carlton Gibson 14:09
entirely. There's nothing that I'm banging away at the debugger. And then I can't I'm not making progress. I'm gonna go and cook dinner, and then halfway through cooking dinner? Oh, yes, of course. colong.

Will Vincent 14:20
It's also challenging when I think for all of us we've have done and do consulting to so they're easy to think when you feeling not bored, but you're like, oh, not quite sure. It's like, a GI could be doing something that makes money like that sounds good. That feels good to be productive. So it's, it's even harder. When it's like, oh, like, instead of going for a walk for you know, it's like that could be you know, X amount of dollars and that would feel nice. I don't know why but like that, you know, it's also takes a while to kind of get over that to be like, Yes, I do want to do consulting and it's valuable, but also, you know, not just fill the void with paid things, which you know, sometimes obviously you have to, but it sort of gets This feeling of I think, enough, you know enough in terms of work in terms of money and valuing, valuing that time of like not doing all these other things.

Nick Janetakis 15:09
There's always some, like mental visualization that I have in my mind, like, have you ever been in a plane problem, I'm assuming you guys have been. And the flight attendant is always like, you know, if something goes crazy, you have to put your mask on before you can put the mask on of your children or family members or whoever might need it. Because without you being okay, like they can't be okay. So like that analogy. In my mind, I always think about that in terms of myself, like, you know, like trading time for money as doing consulting work, or whatever. It's like, wait, you gotta step back and like, make sure you're okay. Before you can do that with other stuff.

Carlton Gibson 15:40
Yeah, no, entirely. Absolutely. 100%. And that applies to everything in life, like parenting, like, you know, if you if you're not emotionally willing yourself, you can't help your children to be emotionally balanced. It's

Will Vincent 15:52
well, you can you can justify it, you can say, now they're seeing that even parents get stressed. But yes, that's, that's the exercise I go, I go through while you're seeing that he's not perfect.

Carlton Gibson 16:03
It's how you handle being

Will Vincent 16:04
welcome. Not that there's any worry about that. But you know, it's it can lead a conversation of like, you know, you know, I'm sorry, I raise my voice at that time. But like, you know, parents have feelings, too. And we get frustrated, and you get frustrated, and you know, that you're just off to Florida. Oh, well, I

Carlton Gibson 16:28
was gonna say we should cut back to Nick, Nick here, because So Nick, you're saying you're saying you're doing lots of work? The podcast, you dropped the podcast then? So how is it you came to seek full time employment or secret gig or super a job to instead of that?

Nick Janetakis 16:44
Yep. So that one was kind of interesting. So prior to the full time gig, like even when I was doing the choruses, podcasts, etc. No, I was still spending a majority of my time doing contract work. And there was a company where I don't know the last like, since the end of 2018, I was doing contract work for them. Like I started off helping them get their apps running in Docker on AWS. And like, you know, I had consistent work with them, maybe sometimes five to 20 hours a week. And I just continuously did that with them. And eventually, you know, they were asking if I can join full time. And I said, No, thank you. And then they asked again, and I said, No, thank you. And then he asked again, and then like, you know, nine months later, I decided to join them full time.

Carlton Gibson 17:23
Okay. So tell us about your role. What

Will Vincent 17:26
are your what are they when you're still there? You're still you're still there. You're doing I think you said before, like focusing on deployments stuff, right?

Nick Janetakis 17:34
Yeah. So I've been there now for about 18 months, year and a half. And my role is kind of interesting. It's sort of kind of all over the place ish, but it is focused on Yeah, just I guess deployments is the core critical component of it. So I'm dealing with Docker and Kubernetes, and just AWS and TerraForm, Ansible, a lot of shell scripting, basically developer, developer tooling. So like trying to help build tools to to make the developers more productive. Just going over like CI CD processes are generally like dealing with releases, like how can we make that more efficient? Even if that spans beyond just like writing code? You know, it's just like, how do we take an idea from like, concept to rolling it out to production? Yeah, it's kind of all over the place. But it's nice, because I feel like I have basically almost full autonomy. So you know, I still report to somebody, the person that I report to is the person I worked with directly when I was doing contract work. So it was a really nice fit there. But yeah, we just like bounce ideas off each other every week, and just, you know, work on doing things that take priority. And I guess priority is an interesting word. Because, yeah, it's like a kid. There's so many good things to do. Like, how do you pick one?

Carlton Gibson 18:37
Yeah, okay. So you the list of tools you ran through there was basically like everything in the sort of DevOps candy store, like, you know, Ansible, TerraForm, AWS, Docker Kubernetes? Like, what's your favorite, your favorite bits of the stack? And, you know, what's your, what lights you up about? All of that?

Nick Janetakis 18:54
Man? That's, that's a fun question. So for the longest time, I avoided Kubernetes. For for years, and, and I kind of hopped on board with the meme wagon, where it's Oh, it's so complex, like, no one's ever, like, why would you ever use that thing. And the more that I use it now, the more that I actually like it. And just for context, like the place that I'm working at, we're not at like crazy, mega like insane scale, where we're spinning up 1000s of containers with like, hundreds of developers now like the dev team, there's 11 developers, we've got eight services. And it got to the point where Kubernetes started to make sense for us because we were spinning up individual AC two instances or servers for each service. And there was a lot of duplication there. So we converged on one cluster, and now I don't know I'm liking Kubernetes actually a lot, especially with another tool called Argo CD. I don't know if you've heard about this one. But yeah, it follows this philosophy of like Git ops where right now, like instead of pushing code to the cluster with maybe doing an awesome well, first of all, before we get into great details, have you ever worked with Kubernetes or better now?

Carlton Gibson 19:59
worked locally by I haven't used it as like a tool in production because I haven't been in the position of deploying the multiple services where you need all those. And that's the bit for me where I'm like, I don't want to deploy it for me, I don't want to use the extra complicated tooling for one service or one service in a worker, you know, that doesn't make any sense,

Nick Janetakis 20:20
right. So like the 32nd 32nd, elevator pitch, and Argo CD is like, you know, you can kind of have your Kubernetes config files in a Git repo somewhere. And like, it will just check your Git repo and a specific branch every three minutes. And it will just converge the state of what's in that Git repo to the actual cluster. So like, I don't need to like push deployments, it's more like pull based. So we just modify the config files to be like, Hey, here's the new Docker, you know, tag version for the image, it picks it up, it rolls it out, you know, it handles basically the, you know, CD part, like continuous deployment.

Carlton Gibson 20:51
Yeah, it's kind of like, declarative, rather than imperative.

Nick Janetakis 20:55
Yeah, exactly.

Will Vincent 20:56
I feel like I'll just sit back for the next 40 minutes. Because I mean, Carlton has been doing with button, you know, DevOps stuff, and I'm, it's not really my wheelhouse, but

Carlton Gibson 21:05
I mean, okay, so the, you, you just use the magic word there. Well, you said DevOps, so I mean, DevOps, DevOps, a thing or a practice, or what, what's your view on? I mean, would you describe yourself as doing DevOps, Nick?

Nick Janetakis 21:20
I don't know. Like, I don't even know what my official title is. But it doesn't have DevOps in it. Like, I feel like to me, like, just informally to me DevOps is it's more of a mindset. It's like an orchestration of things. It's not necessarily like what you do, you know, it's not like, it's not comparable to Kubernetes or something. It's more just like a workflow of things that you do to make everything better. And not necessarily just like, the tech part, right? Like, it's not a CI CD system. It's like, well, how do we have this idea, right, that can go from development to production, and in the most efficient way possible, balancing with developers and like product teams and everything. And when

Carlton Gibson 21:57
I started there was like this uncrossable divide between the developers and then the SIS admins, and you'd kind of sort of as a developer, you get your, your app ready to go. And then you sort of have to throw it across the divide to the SIS admins on the other side, they weren't really that interested in catching it. And if it fell into the chasm, well, I Well, not a problem or if they dropped it, and it smashed Oh, well, no.

Will Vincent 22:22
They just stressed stroking their neck beers. And it's Guilfoyle and in it was

Carlton Gibson 22:26
kind of like that. And the thing I sort of like about the DevOps approach, or the philosophy or whatever it is, I think, is that it's supposed to bring the developers closer to, to actually being able to get their code across that divide if if that divide still exists, would

Nick Janetakis 22:44
does? Yeah, fully agreed. So like, specific is about our dev team set up, you know, we've got 10 or so devs, couple different teams, like let's say, three Devs on each team. And they can take their whole idea from concept to production on their own. Now, I helped set up like a CI CD pipeline for them. So they can deploy things. But from their perspective, all they need to do is, you know, make the pull requests like they normally do, it gets peer reviewed by someone on their team. And then the quote, unquote, release manager is really just, you know, the engineering manager has to say, okay to have the release, but him is just like, literally merging that pull request is the release. And that's it. Like, as soon as that happens, things get kicked off and good audit deployed. So they don't need to worry about like, what is Kubernetes, Argo, CD or other tools, but and then it's on them to Yeah, just make sure it's running well. So like, I've set up data, dog stuff like logging and metrics, and they can see the insights on their app, like I help them, you know, debug, and profile things. But, you know, they've got all the tools they need, without necessarily needing to be, you know, crazy deep in the woods with the gory details.

Carlton Gibson 23:44
Okay, that's good. So, can I ask if so that's quite a big team. And I think that's, you know, as you describe, it's a lovely setup, you've got something where the developers are freed to just sort of push to their code, and it's all ready to go, almost like a platform as a service. But for a smaller team, like, at what point excited very much for like a small, you know, one to five, where you haven't really got the specialist ops operation, keep it simple, you know, spin up the single easy to run it on there, scale that up for a bit, I kind of think that that that's that small scale works much better. But what what point, can you what point do you think you grow, you grow out of that, or that it makes more sense to move to something like this, the setup you've described?

Nick Janetakis 24:30
I think it really depends. There's like, multiple different components that you can scale off of when you when you do that, like for example, number of developers on your team. Versus also like number of services you might have, there's still technically I guess, value in Kubernetes. A little bit like even if you had one big monolith or something just because, you know, it abstracts away some of the details that are hard to do yourself, like just doing rolling updates like a zero downtime deploy, like keep this one version running, put up the new one and then get rid of the old one in the load balancer, that type of stuff. I'm curious Carlton, did you end up We'll in some of that stuff, you're basically on your own yet, we'll

Carlton Gibson 25:03
just using System D is the bottom line with a socket agent, and then you just a socket unit. And just so the daemon runs the socket unit, which loads the service, and then you just get the next that's the socket unit plate pointing to a different service file, and then reload the demon and it will refresh the port to point to the new service without, without loss of connection, because it keeps the socket open, it works very well, for, you know, again, a small deploy. How big do you want to push that? You know, you're running multiple services on a single instance? No, because they get in the way of each other. And you just don't want to do that. And it's what's interesting, for me is the point of which you grow out of that, you know, that's the bit where I'm, you know, that's not really where I'm targeting with button on targeting very much the simple setup, you know, you've got an app, you want to get it online, what's the what's the story that saves me having to take a week of learning, you know, tools, which are perhaps too powerful, but I also want to have a story for Okay, at this point, you need to start considering, you know, Eks, or whatever the the other options are, that are a bit more powerful.

Nick Janetakis 26:19
Yeah, no, I really liked that approach. And honestly, for my own stuff, too, like if I were to, you know, put together my own software as a service, you know, like some, like real thing that customer has been paying for, I'm going to be playing that to one server, probably using Docker Compose, maybe using Carlton service, depending on if you know, when it's available.

Carlton Gibson 26:35
Yeah, no, I mean, going, Kara?

Nick Janetakis 26:40
No, but that was basically, I'm a big fan of using what works right now, reacting to that later if I need to, and then like transitioning to that when I have to, because there's a very good chance, maybe you don't have to, because I'm sure, as you discovered, right, like, you can really put together a serious app, you know, hundreds of 1000s of monthly visitors on a $40 a month DigitalOcean. Server. And guess what? You're good to go? Yeah,

Carlton Gibson 27:01
yeah, no, I mean, that was that was exactly what. So you know, I've been putting stuff on servers for 20 years since I was a university. And I've worked on some quite big things. And never have I worked on a thing, which actually couldn't just scale, you know, one or two boxes, a little load balancer in front of you to handle the handling the traffic isn't the question. Like, what's the question, I think, is handling the dependencies between the various bitch you're deploying? Or if you know, if you've got an add on, which suddenly needs some old version of Python or some, you know, then that's low use a container, then because what you don't want to do is try and manage these multiple versions of Python on the same box. And this one needs that version of this. And this one is that dependency, hell and all those things?

Nick Janetakis 27:46
Yeah. And if you do need some, like special use case, where you know, everything works fine on one server, but maybe you have some really heavy like, celery background workers running, there's no harm in just putting that celery process on its own server. Like it's gonna pull things off a Redis. Cube. And that's it. Yeah,

Carlton Gibson 28:02
exactly. Exactly. And, you know, and the motive, what got me started and all this. And what I'm bringing to completion now, was the frustration of seeing beginners, you know, they've had to use wheels book, you know, got their first app online, and then getting sucked into the kind of pro level ops game, which was totally inappropriate for them. And that's what I'm trying to avoid. But what are you building what you're deploying? So you're deploying these eight services? Are you building with Django and Python or a different stack?

Nick Janetakis 28:37
So there are two Python services that are using flask, sorry, and advanced, by the way, because

Will Vincent 28:44
we know it's compatriots not competent competitors.

Nick Janetakis 28:49
There we go. Yes. We're all like on the same team. But yeah, the other ones are more just a really large PHP applications that I am not so much involved with in the day to day, but they are being deployed.

Carlton Gibson 28:59
Are they using Laravel? Or symphony? Or

Nick Janetakis 29:03
they are using codeigniter? Okay, so because it's been around for a long time, you know, we're talking like 12 years of development on the apps.

Carlton Gibson 29:13
Okay, fantastic. Not fantastic.

Nick Janetakis 29:15
No.

Carlton Gibson 29:18
Well, there's my view, see, people apologize for code, I've got this old this view that any running software is just amazing. It's like a miracle of the miracle of life. And that's something that's been in production for 12 views. That's, you know, that's, that's a massive achievement. And it's never going to be the case that it's going to be using all the latest this or the latest that it's never going to be perfectly clear, clean code. It's never going to be it's going to be horrible, but it's about it. But you get to go in for 12 years and you built you know, Cobra, that that's an achievement, I think, you know, not you but the team and the company. I think that's a I think, you know, I just don't think we should apologize for our code.

Nick Janetakis 29:59
Yeah, I think that's And that's an awesome takeaway too, right? Because it's like your customers don't necessarily care that much about your tech stack, as long as you provide a valuable service to them that they like using and it runs reasonably fast and like user experience is good, et cetera, et cetera. Yeah, it all works in the end. Okay.

Will Vincent 30:15
So Nick, I have a question for you. So you're, you're a teacher? How do you explain this, I'm thinking of this because I have the forebrain to update to my books about to come out. Hopefully, by the time this podcast comes out. And I've been adding a lot more of the the, the how, not just the why that was one of the early criticisms, my books, but I sort of showed how to do things by didn't dive into the weeds because I didn't want to overwhelm people. And I've added a lot more in subsequent editions and visualizations. But there's this big jump from local to production. Right? And how do you like, it's hard to explain to someone who's learning code? Like, yeah, all three of us could build Twitter in a weekend. But we couldn't build it at scale, like, so like, why is it so hard? Like? So how do you explain to people like the difference between like, 1000 users and like a million, right? Because that's where you get into load balancers and servers and DevOps. But it's hard for people to feel that and because they can't just, you know, like, we can just build a clone of something and feel it. But you can't mimic the scale and size even if you could, it's expensive. So you wouldn't you kind of have to be thrown into the fire. I'm curious how you approach that question, because I constantly think of how to explain it, in real terms, not just abstractly, being like, yeah, like, there's two real engineers, and there's like 10, DevOps for anything at scale, and they do a lot of stuff that's complicated. And you don't want to deal with that use a platform as a service. Like, that's kind of my like, my glib answer to beginners. Anyways, so what do you what do you say when someone asks you that as an expert teacher?

Nick Janetakis 31:45
Yeah, that's a good question. For sure. And, you know, I think Heroku kind of did an okay job. But this one, how long ago? Like, do you remember this 12 factor application? Like, it's a methodology they put together? And what I found at least like even doing some contract work and everything, is that oftentimes, the scaling part, it's not so much the details of the scaling. I mean, that that is a hard thing to cover for sure. But it says, Yeah, this is getting your application ready to scale is a whole completely separate topic. And it's like a precursor to being able to scale like, for example, you know, let's say that you have some user authentication and your session back end is just running in memory, right? Not using Redis, or anything like that. And now it's like, well, now you have to go to two servers. But now you've got two copies of your application running user hits server a, they're logged in user hit server B, they're not logged in, because it's an in process memory. That's a problem. Other problems are like file uploads, right, you upload your avatar, but it only goes to one server, not the other, suddenly, someone gets on server B, and Avatar is not there anymore. So it's like, you've got all these dependencies that you need to like, handle are precursors to scaling out. Yeah, I think it starts there. In my opinion,

Carlton Gibson 32:50
I'd agree with that. One of the first gigs I ever had that was, you know, Sly was from somebody there was like, the hardest thing you do is move to two servers, like from one to two servers. That's the hardest jump. And then you know, three, well, you've already done everything you need to do to get to two. So three is not too bad.

Nick Janetakis 33:08
Yeah, so the takeaway there is like, figure out we can do to stay with one so you never have to do the hard stuff. But

Will Vincent 33:15
right, yeah, I mean, I think it's so yeah, I think many of the stack for me to actually work with is PHP. I don't know if you use it Lera forge or whatever the hosting thing is there. But that's a multimillion dollar business. And he's written publicly, I think it's on two three, like servers the entire thing for like hosting 1000s However, many PHP apps, you know, he just, like, it's a good example of like, you don't need to, if you don't need to do all this stuff. Don't do it and try really hard not to do it. Like seems to be maybe the takeaway for listeners. Yeah. And, I mean, it accepts Yeah. It's a bit like third party, you know, I know on a local level for someone who's newer, I think it's a little bit like third party packages in that when you're starting out it's like oh, great. It's like super power just toss them all in and they all do stuff and I don't know why but boom, there's my authentication there's this and that, but then it's the update hell and you don't really understand it and it does come back to bite you to the point where like, now I don't use third party packages unless I really really really need to and I kind of know they're really really good because I'm just like it's like a parachute every additional thing right because the updates is always it's always the packages but actually that leads into a thing you mentioned before he came on air you just updated to Django for two even though came out yesterday, right? Yeah, yesterday Carlton. Yeah, can you how was that how was that update process and in Carlton can tell us about all the blood sweat and tears to get that release out. I know Maurice was the release manager but

Carlton Gibson 34:46
Nick answers about updating his package. There was no blood sweat and tears at all.

Will Vincent 34:55
For for when you're when you're walking on bodies

Carlton Gibson 34:59
Marish was doing it all by himself and poor fellow. You managed to get it out the door or totally smoothly. So well done if you've gotten a telephone, if you start a project,

Nick Janetakis 35:12
right, so I do have a Django starter project that is using Docker, Docker compose like it is optimized for that one server deployment type of thing, but also good for dev. And yeah, so I updated to Django for that to like, I don't know, an hour before this podcast call now. And that was a very, very, very painless update. So one thing that I do is when I jump between Django versions, like for that one to Florida to like minor versions, or a major one, what I like to do since I'm, you know, I have a starter project, I like to generate a new project using for that one, generate a new project using for that too. And then I'll do a directory diff on that to see what changed, like the project generators for creating a new project or apps or whatever. And in that case, there was like, basically, no changes at all. I mean, a lot of it was just updating the for that one link to for that to like, you know, jangling the settings. Finally, they give you good links to like, here's how to, you know, do database configuration. So it was that there was like one string and one doc string that changed, but it was super painless. I also updated psycho PG two to using what is it now psycho PG. There's not like a three, you know, but it does install version three, it

Carlton Gibson 36:14
is version three, it's the new two. That's yeah, we can talk about that if you like this. So it's the new back end, it's a new version of psycho, PG, and it's got an asynchronous drivers, and it's quite exciting. So it's going to be the future. And there are a few little niggles like if you you know, things tuples and whatnot, that you need to watch out for a couple of gotchas on whether it's strictly backward, incompatible, but it's, you know, if you just install the new package, Django will just use it. And for most use cases, it you know, it's totally transparent. But what I think it for me, the exciting thing, at least, is that it gives us the opportunity to have the asynchronous crud client. So open to we've introduced support for streaming async streaming responses. So you can feed you can return a streaming response with an async generator. And if you're running under ASCII, it will stream it out a synchronously without blocking your worker without blocking a thread like it would under whiskey. And you can generate, you know, use good for Server Sent Events, or long polling, or the these kinds of Long live request examples. And so with an asynchronous, Postgres connection, or Postgres client, we can in principle, use listen notify to, you know, do an update, have something triggered in the database, which then notifies the client, you know, some kind of real time, goodness. And it's, you know, over the next year, two years or so, those patterns will become codified and blogged about and, you know, maybe there'll be third party packages, wrapping up exactly the best patterns for doing that. That's an exciting and fertile terrain that we're in now that it's like, okay, these are new, new usage patterns for Jango that hadn't been available before. And you know, there's, you could have done similar and channels all over, but to have the asynchronous database driver there as well. It's like the full stack, it's like, okay, there's, there's some opportunities here for things which weren't previously possible. So that's what I'm excited about.

Nick Janetakis 38:17
Yeah, I like to use the term like the full stack there. Because I guess to get the full advantage of async, you do need your database layer to have it and your view layer to have it. And these things need to work together if you want the full experience. And I think there is also there is like, an async test client as well, right? Yeah, Django.

Carlton Gibson 38:32
Yeah, yeah. So you can I mean, the test. So there's two bits do like this. The sync client will do will test async view. So you can have an async def view. And you can make an HTTP request with to it with the sync client. And it will test it or run your async code and return it. And so you don't need to necessarily write a sync test case. But say, for instance, you writing a middleware and async middleware and you want to test its async behavior, sort of outside the full Django stack, the full request response cycle, well, then you would use the async client, because you could write an async def test. And you can get the you know, you can do all these kind of things. You don't necessarily need to use the async test client. For your kind of standard view test, you know, did this view return this response? It can be an async def view, but you can still use the sync client for perhaps simpler testing. So

Nick Janetakis 39:26
okay, so just to rewind back to what it was like to update to Florida to super easy on my end, like the starter project. It's not like building out a lot of business logic so that I didn't have to go back and modify a whole bunch of different queries, just because it's all set up and ready to go like your, you know, as an application developer would be using this starter project to build your own app. But Carl Turner will I'm curious, like what was Have either of you updated, like an actual application to for that too, yet? And like what was that experience? Like?

Carlton Gibson 39:52
I have to admit I haven't it's only been out since yesterday, but I'm on 4.1 point whatever the latest is and it will be totally seen No, I think the biggest thing is the storages change storages have become a dictionary now, for you, so you can define multiple storages. And the old settings have been deprecated. And for the new one, but Adam Johnson has his Django upgrade project, which has got an updater for that which you can use. So that's two or three small settings updates like that, which I'll be running Django update to use, I'm quite excited about Django update, I think it'd be really nice if, if every single release, we can ship the set of you need to run this run this updater and it will automatically go through your code and make the necessary changes so that you don't have to worry

Nick Janetakis 40:45
about those notes does that I haven't used that updater yet, or a creator yet. It does that run something like like black where it will like go through everything and kind of look at things in either morning, or you know, morning we're doing Yeah, it's

Carlton Gibson 40:57
based on like, the same idea as pie upgrade. So pi upgrade, you run it say pi upgrade to three point 10 syntax, and it will go through and look for all the cases where you know, the new syntax is this and you should be using that or you know, this import moved, and they is done with the ASD module. So like, you know how Black takes construct your ASD and then rewrites it rewrites the code exactly how it's meant to be. Well, Django upgrade does the same thing. But looking for, you know, have you defined this setting, okay, though, this setting should be rewritten like this. In this case, it's a great, it's a really interesting project, because one thing we want to do for Django 5.0 is modernize the request object, we want to add a JSON request or data property, which would handle for instance, JSON content, you know, how you get formed data passed in request or post? Well, you know, if you've got JSON, instead of having to manually pass the body, you could just, you could get that passed automatically, and then give that pluggable passes maybe, but while we're at it, there's a proposal to modernize the request. So instead of request dot get have moved capital letters screaming from you know, and it's basically copied from PHP back in the old days, to have request dot query params, which is a more Pythonic style, lowercase state case, you know, a bit more more modern. And the worry we're doing that has always been that we've got so many deployments that people are like, Please don't break our code, please don't break your code. But if we can have a project like Django update, that will automatically it's a scriptable to automatically rewrite your code. It makes that transition less jarring for people, and then it makes it more realistic that we can do big upgrades in a bit big changes that have previously perhaps been a bit like, we can't do that. Because it will upset too many people. You know, it's not worth it.

Nick Janetakis 42:48
Yeah. Yeah. I love that idea. Well,

Will Vincent 42:51
can I can I ask Did you run deprecation warnings when you're on the new version? Like add the flags on run server? Do you know about do you know about these?

Nick Janetakis 43:05
So these starter project that I have at least it doesn't use the run server, it uses G unicorn, both in development and production. And I guess just a segue back to what Carlton was saying around like, you know, what are some things you can do to prepare your app to scale or whatever, I guess this is not necessarily really scaling. But I do like to keep my development setup as close as possible to production within reason. Like I would always use Postgres, if I'm using Postgres, in prod, I'd use it in dev, etc. But likewise, with G unicorn, I do the same. And oh, man, I remember it was a Django for that one. I think it was, there is some change to how it deals with the template loaders. So when I was using G unicorn in development, like the default loader, no longer does, like I know enables caching by default. So like, I was updating my HTML templates, and it didn't reload my templates in development. And I was like, What the heck is going on? And then someone replied to a Twitter question I had within honestly, like, 15 minutes of me asking the question, and they're like, Yeah, you need to explicitly you know, not use the cache, looter in development. But that was super easy to fix. Like, yeah, another like, random question thing, like, just knowing the problem sometimes is super helpful.

Carlton Gibson 44:11
Okay, so there's a good question, Nick. So you'd like the talk, you've mentioned the 12, factor. 12 factor idea where you move methodology methodology. Thank you. Well, you move configuration values into the environment variables is basically one of the key approaches, but something like a template config, which is quite an elaborate dictionary. How would you handle that? How would you handle that? Because I'd handle that with separate setting files. You know, I'm happy to move things like secret keys out of setting files, so I don't commit them to get, but I still have, you know, here's my dev settings. Here's my production settings. Here's my thing, because, for instance, if I got a different templates config, that's a whole dictionary, or databases config, that's a whole dictionary. I don't want to be mapping those environment variables. First, I find that quite tricky. I'm wondering how you how you handled that exact case of needing to change the caching behavior for the templates config in development versus

Nick Janetakis 45:12
doing this from memory because it was like months ago. So in this settings file for jungle, there is a templates dictionary, or maybe it's an array of dictionaries. And it's got things like where you configure the back end, the record directories, options, things like that. And what I ended up doing where there was a defined a new variable called default loaders, and this included would include the filesystem loader, app directories loader, and then I made another variable called cache loaders. And that one would take the default loaders and also append to that list the cache loader. And then inside the dictionary, the templates dictionary, you've got this loaders property. And there I just dropped in a one line if condition that said if debug, use the default loaders else use the cache loaders. So there was no new environment variables that had to even be created. But if debug is enabled, then you get the good experience in dev. And if not, then you get the cached one in prod, or any non development environment,

Carlton Gibson 46:10
right. So you have the same, you still keep a single settings file, but you've got this kind of multiple, you've got the various options defined in the one file and you branch,

Nick Janetakis 46:18
right, which was just to separate like local variables, default loaders and cache loaders. And that was it. And then it was like a one liner if condition in the actual templates dictionary. We're good. That's good. That's certainly mics. So that's a lot of details to like narrate over audio. But like, if you drop it into the show notes, I have a link to the commit that did that.

Carlton Gibson 46:37
Oh, good. Yeah, we'll do that.

Will Vincent 46:40
On your starter project. Yeah, yeah. Okay. All right. I'll put that in there. I'll find it Yeah. Well label, there's not gonna be like update update update. Now everyone's gonna be looking at your commits. Oops. So I find that if you're just, I guess using run server, the flags, I feel like most people have no idea that the deprecation flags are there. And there's all this work that people put in. So for example, like with forms, there's changes and in five, oh, they're going to be made permanent. And you would see that if you ran, you ran with the flags, but you otherwise wouldn't. And you know, it's a bit of like, okay, it's in the release notes. People talk about it. But, you know, in the real world, people like don't know, right, like until someone tells you. So I guess, did you see anything on forums? Are you aware? I mean, you don't need to be because isn't it's not a it's a five oh, thing, but like, there's some changes to how forms are processed in Django coming? I'm trying to put you on the spot. But I just, I just wondering if so doing the upgrade process, you probably wouldn't see it unless you, like deeply read the release notes and decide to act on it and had run it with flags. But as someone who uses Django, but like is a jobbing developer, lots of other things like it probably didn't come up for you, right? Because it's not, it's not going to break things yet.

Nick Janetakis 47:56
Right? Yeah, I'll be completely honest, I didn't even know Django five has been started to be created about like, generally speaking, yeah, that type of thing. I don't think I would have caught them when I mean, I go through the changelog, specifically, like the release notes and look at everything. And I know that you guys do a great job updating those things. But I wonder a lot, let me ask this. Has there ever been a case where you release a new version of Django, like a big minor or major update, and something didn't make its way into the release notes? And like, someone found that out after the fact and had to open up like a PR? Yeah, yeah, though. I

Carlton Gibson 48:27
mean, that happens quite regularly. Is that not major things? But like, you know, there'll be like, a consequence of a change, which is kind of backwardly incompatible in a weird way. And it's like, okay, actually, we're not going to revert the change. I mean, occasionally, it's been like, no, actually, this is this is, this is something that we actually have to revert. And that's more happens in the pre release phase way. And this is why we have the long pre release phases for people to test the pre release versions. I can't remember the particular example off top my head, but I remember one a few releases ago, which was quite moderate change. And it went through and it was like, no, actually, the release candidate phase, we have to revert this because it's too disruptive to the ecosystem. And, you know, so we roll that back. But quite often there'll be like that, let's add a release note. Clarifying exactly, you know, if you're in this circumstance, what the change of behavior is, or, you know, that that happens quite a lot. Fortunately, we have a, you know, an active community to help during the privilege space. And in those three months, I think in order to catch bugs, catch regressions, you know, catch visual, the things in the admin, whenever we make a change in the admin, there's always visual regressions because, you know, CSS being what it is, and we're not, you know, not front end developers, by sort of calling. But you know, what, they'll get spotted, they'll get fixed and there are, you know, normally we'll be able to do something. I mean, there's a good example came up this release cycle of module loading. So the the man at the cached manifest storage which case your, your your JS files and your CSS files, and it creates a manifest off them and gives you a, like a long hash your file name so that you can put far, far future expires headers. And when you update them, the hash changes, and you don't have to clear your caches, and people get the latest JavaScript or latest CSS, but they get it from their browser cache where possible. Turns out this doesn't there was a fix to make this work with Module imports, you know, latest JavaScript syntax, but it only captured some cases and have some weird regressions. And we spent quite a lot of time during the pre release phase, trying to get that as good as we can. And in the end, there's a warning in the notes saying, Look, this may not work for all cases, and you may have to manually get rid of input statements in comments like that. They're in there commented they're not real. But they they've got the same syntax as input statements. And these come up in source maps and things like that. But to work through all of that and get that working properly was, you know, and what's the best option? Are we going to have to revert this? Well, this is not a good feature. We want it Ah, there's quite a lot of work that goes into getting it just so

Nick Janetakis 51:19
yeah, I think there's a cool takeaway from that, too, is just that. What does that one quote from a famous like computer science book or something like with enough eyes, or with enough eyeballs, all bugs are shallow? So it's like, yeah, no matter how much like predetermining you think you can do to prepare something? As soon as it goes out there in the wild? Someone's gonna find something?

Carlton Gibson 51:39
Oh, yeah, absolutely. And so like, quite often, we'll be there where we were looking at a pie, it's, you know, we think it's okay, we just sort of have to merge it because we either have to merge it or not, the idea is, okay, let's merge it. And we know that we've got the testing coming up, and people, people will find the problems.

Nick Janetakis 51:57
The will, you know, earlier, you mentioned about those deprecation warnings with the run server. I feel like I'm missing out a lot like if I'm using G unicorn in development, is there any way that I can get like a unicorn hard to get that?

Carlton Gibson 52:06
No, it's not a unicorn, it's Python. So you run Python with the duck with the W flight, the capital W flag, which is for warnings, and then you run it with, with all warnings, and then you get deprecation warnings, which are noisy by default, both depending deprecation warnings are the ones that will be removed to out you'll get a you get oh, show up in your console or in your logs. And then you can you can fix Okay.

Will Vincent 52:33
Well, yeah, I should do a blog post on this because I've, I knit like, I was using Django for years before I even knew about these. And I feel like nobody knows about them. But there's all this work that's being done to say, you know, we don't, we're going to remove something, it's two versions out. And you know, in some ways, it's like the first place you should look if you're updating and just, okay, everything works. I'm gonna move on with my life. I should yeah, that'd be good. I'll do that. Do a little post because, you know, Adams tool Django upgrade, like, there's a couple things that people should know about if they don't just went when you update your code? I think how to do it as well for like, yeah, yeah, sorry, thank you for saying,

Carlton Gibson 53:10
if you're looking for ways to contribute, I think it's a great way. So when the new version of Django comes out, run your your package with Python, warnings all and see what errors you get from your third party package. So there'll be one from your Django compressor, or JSON from all or one from Django filter, or one from, you know, whatever package you're using, and you'd be like, oh, there's that with Django 4.1, this use this raises that and that's an opportunity to contribute to those packages, because the maintainer will be grateful to take the PR fixing that warning, because they know they're gonna have to do it before the final release. And, you know, it's a good way of getting in and finding something that's concrete and probably quite small to work on.

Nick Janetakis 53:50
That's great advice. And also, it's just one of those cases to where like, if you have really good test coverage in your app, like, as soon as you run your test suite, with these warnings enabled, you should see them right then and there. Right? Yeah,

Carlton Gibson 53:59
yeah. And, you know, you can set them to error, you can have warnings as error, and then the test will fail. But, you know, even if you just have them output it to standard out, as long as you're not outputting, lots and lots of text so that they get lost, you see them very quickly. Yeah, it's

Nick Janetakis 54:17
a great like dry run of just what you need to do before you actually do the update. And funny enough, like, you know, if DevOps stuff is on topic, maybe for this call, like, you know, this happens a lot. Like if you're adding a firewall in front of your service, you know, example.com, or something, you may want to enable your custom rules in count mode, instead of actually blocking. So you can see in the logs like, Hey, did this rule work the way I wanted it to, and then you can like change it to block later, you know, so you kind of get the insight of what's going to happen before making a dangerous change. You

Carlton Gibson 54:43
put your ACL rule to block this IP, and it turns out, you get no more traffic over.

Will Vincent 54:49
While it's out, put a link but it turns out, you know, the Django upgrade version, which is buried in the docs does have boom resolving deprecation warnings, but again, it's the priorities right? This is a now that Carlton and I are on the sidelines with Django, we can both make some of these things happen that we talked about, like, let's, let's make the docs, you know, let's have someone come up with a clean slate and organize things because they are a bit of a mess. Because nobody's really done that over the years.

Carlton Gibson 55:16
I mean, every literally everything you need to know is in there. I mean, it has got how to upgrade and how to run with warnings. And but it takes a while to find all of that, right.

Will Vincent 55:26
I did want to since we're talking about deployment to give a shout out to this project, Django simple deploy, which you may have have seen Nick. But Eric Mathis has been working on this, he gave a talk at Django con on this. This is a really exciting one, like in terms of I think of like, what is Django need, like big picture. I mean, it needs some async, which is happening, probably needs a way to bring serialization, instead of using Django rest framework, at some point, some version of that needs to come into Django itself, and then a better upgrade story. To me, those are kind of the big three. And so Eric's been working a lot on this. He's he's the author of Python Crash Course. And it currently works with Roku, platformer and fly. But it's exciting. I hope it gets legs in terms of being an option. That's a platform agnostic, that kind of tees up a standard vanilla application and makes it deployment worthy. So that's just something to mention regularly to people, that it's kind of a cool project. I hope he I hope he continues with it and gets get some help. But it's kind of exciting.

Carlton Gibson 56:25
There's two things about simple deploy that I think I think one is it should be used for the Django Girls tutorial, I think because it gives like been using the Python anywhere. Setup, which is great. But it's it's kind of very Python anywhere specific. Whereas if they had simple deploy, then it would be you know, actually, we're going to use fly today. Or we're going to use platform dot shell today, or we're going to use, you know, a another back end for it. But it does this thing that Nick talks about ways you can you've got your project, then you can run simple deploy, and then you've got a diff to your to your project that you can look at and see all these are the changes it had to make, to deploy for fly or deploy to platform docshell Whatever. So I think that's, I think, super, I'm really excited by that project.

Will Vincent 57:12
Yeah. Were you gonna say something, Nick? No, it's

Nick Janetakis 57:15
okay. I was gonna say, I have not heard about that project yet. But I am going to check it out after this after this chat.

Will Vincent 57:20
Yeah, and he, his talk did a good job. From the most recent, most recent Django con us, it's sort of strange times with platforms of service. And again, I've the reason why my books have been delayed and being updated is moving off of Heroku, because they've had various problems, but it kind of makes me really appreciate what Heroku has done. And it still does they still there, you know, it's paid. But Heroku was pretty stable, if you know, maybe neglected in a couple areas, but like, it's kind of amazing all the stuff they've done and still do. And then you see, there's real growing pains with all these next generation platforms of service. So you know, specifically fly like I wrote the Django docs for them, I'm using them in my book, they're updating twice a week, their command line tool, and there's all these little subtle things that keep changing, they're having, you know, all these play, these platforms are having growing pains. So they're not, they're not quite Heroku. I mean, they haven't been like killing your database and like being completely off. But I kind of wish I could fast forward to two years from now, where, you know, one or two of one out and they've figured out a lot of these, you know, Django specific issues that they're all kind of having, because there's all these cobwebs and stuff under the covers, you know, as they're finding, so it's a little, you know, as a book writer, it's a little frustrating. So I have to update things all the time. But I think it's overall good, but it's like, man, Heroku like, why couldn't you just why couldn't you just stay Heroku? I don't want to write about deployment. I want to write about Django. Like now I have to. Yeah, right. Why change? Okay, but I think I even said something to Carleton about this. And he was like you're turning into a conservative. I was like, there you go. There you go.

Carlton Gibson 59:02
Why don't you simple deploy in the book will and then punt the question to that.

Will Vincent 59:06
I might well for future updates. Yeah. I just have been focused on doing it raw, per se. But I'd love to off to put it to something else. I mean, the thing with the book is I've constantly removed third party packages over the years, like I've had stuff on stripe, and I had a bunch of third party packages. And now I'm really really really reticent to add any because I've just been caught by changes with them. And then people saying, Oh, this thing is broken. And you know, it's like hard enough to make Django work but it's all the other stuff. It's always the deployment and third party package things that you know, make the book not work. So, like to the point where in the book, what am I using now, for the beginners book, I'm only using Django all off crispy forms. I have like one or two other ones, but I'm, like really pulled back on what I use just because I don't it's yeah, the dependencies dependencies are it Gotcha. Um,

Nick Janetakis 1:00:00
so what do you what do you do on the front end stuff like Bootstrap or tailwind? Or do you use ESBL to Webpack? Or nothing?

Will Vincent 1:00:07
Yeah, so I'm still on Bootstrap just because I would use it. I would use tailwind. I will use tailwind. That's all. But it looks fine. You know, I mean, I do I have to go through bootstrap every time because every year or so there's a new thing and something breaks, but I'm still using Bootstrap. I mean, ultimately, it's not a book on layout. But yeah, I would I would use tailwind and, and the professionals book too. That's the one that sort of tricky for me, because that's when I feel like it would optimize it and do kind of all these things. But I have to kind of take it to a point where it's maintainable and kind of universal rather than getting into the specifics of fully, you know, I have stuff on caching, I don't think I cover template caching, just because it'd be 1000 page book, and I already can barely update them. But I maybe maybe I can have specific courses on these things. Because I do think there's a need for it, it's just very hard to stay up to date on all of it. I mean, even for me just

Carlton Gibson 1:01:04
updating my The question was people do you think it would make sense to make the professionals book say, five, four, point x five point x, because I understand for the beginners, but you want it to be, you know, the version because it matters, what's in the shell, and that things have changed slightly, but the professional stuff is at a slightly higher level, and Django doesn't change very quickly. What do you think, yeah, I'm

Will Vincent 1:01:26
gonna have to so I don't go nuts. The problem. And Nick, you can really do this, the problem is that I pin all the versions, everything works. Like it works, it works, I tested, I tested, but then people just, you know, install the latest version of Django, and say, Hey, all these things are broken. Like, I don't, you know, they're just gonna do what they're gonna do, even though I have a whole thing on how you do it. And I don't blame them for it, you know, like, fine. So I'm going to need to try to do something like that with the other two books, because they're, they're a lot harder to maintain. And, yeah, I've still resisted doing the dot x thing on it, even though in practice, like I missed the four, one update. So yeah, there's I mean, there's a maintenance thing, I think probably the biggest thing is, you know, shake my head, I think the biggest thing is maybe not making the both those books, not making the professionals book one big project. Because I've used this analogy, it's just like a Jenga puzzle puzzle. And just one thing breaks and have to redo everything. And it's, it's hard to maintain, I would rather have it be concise areas, a little bit more like two scoops of Django. Except that's very abstract. They don't actually show you how to code things. So but like, you know, kind of like, here's caching, and let me go into all the things like that would make it a little more maintainable for me. I don't know, Nick, you've had this problem, too, right? Because you have you a video to you have full courses and video, like the maintenance thing is, is tricky to figure out. Yeah,

Nick Janetakis 1:02:48
I like I use the word head as if I don't still have this problem. Like, I still have this problem. How do you Yeah, like you, I pin. I do pin everything to their exact like patch release. And then yeah, at the end of the course, I have incremental updates to be like, Oh, we're gonna update from this to that, here's how you would do it. But then it gets to the point where like, we have so many updates at the end, where it's like, you just got to re record everything from scratch, because so much has changed over the last like two years or three years, or whatever happens to be. But I do like what Carlton mentioned to like, you know, just having like the X variant, like, instead of maybe doing those incremental updates live in the book, like literally a chapter for each individual one, maybe you can, like bring it up to more of a higher level to be like, you know, here's what I would do when it comes to updating to a new version of Django. Like, here's a checklist of stuff that I would tackle where you're not going into every specific step, but like you might generalize it,

Will Vincent 1:03:35
that would probably be a pretty good conclusion. It before the conclusion chapter on updating. Yeah, I'm gonna I mean, I'm a broken record on what I thought for four Oh ones, I would have this and maybe for five oh, I'll have this but yeah, I don't Django. Django isn't the problem. Django is not what changes its deployment or third party things. But

Nick Janetakis 1:03:57
oh, yeah, for sure. Especially like, when was it like two years ago, whenever it like the M one, Max started to come out. There were a lot of packages that just didn't support that. And then it's like, I tried to do the thing. It doesn't work, like what's wrong, and it's broken. You know, like, these are the types of bug reports that you get when people take your courses or go through books.

Will Vincent 1:04:12
Yeah, I mean, I need to check if it's still there. I have a couple places where I'm like, if you're on an Apple thing with the M, one that you need to do this, and if you're not going to use that. And again, it's just like everything. Again Carlton's been a fellow for five years. So this is all just like ripples on the oceans of stuff he deals with but it's just like these little things. It's like ah, dealt, so I focused on the big

Well, yeah, well, so Nick, we're we're kind of at time i always we recently we've been ending with what would you like to see if you could wave a wand changed in Django and I kind of gave you my top three so I hope that doesn't prejudice you but you know as someone who uses Django but it's not your, your main thing and has experience with other web frameworks. Is there some gaping holes that, you know other frameworks and languages do? Well, that Jango could improve?

Nick Janetakis 1:05:06
Yeah, that's a really good question. And like, I do like your idea of just generally, I mean, this wasn't like your takeaway thing. But like, just the idea of minimizing dependencies is kind of nice. But I guess like, what that really means is like more batteries included, potentially with Jango. And I know it's already batteries included, but like, there are at least like, I have worked with Rails before, too. And, you know, I don't know a lot about Laravel. But like, I sort of just briefly glimpsed what's going on in all these communities just for the sake of curiosity. And like, know, they've got this like, built in functionality to deal with like notifications, you know, like, do I want to send an email or an SMS message or maybe over a WebSocket connection, so the user can get a little, you know, a red dot next to their bell or something like that. I feel like other opinionated frameworks have solutions for that one. I may be speaking dumbly here. Because maybe Django does have a solution for that. I just don't know. But is it more like third party or kind of just like not quite,

Carlton Gibson 1:05:57
I mean, mail doing like call dot mail this? Could we just remove that? And then there must I'm sure there's a package out there that handles I know, there's,

Will Vincent 1:06:07
I think any mail, any mail out in Kajang. Any mail? Is there a third party

Carlton Gibson 1:06:11
packages, which just do it much better, and they plug into you know, SendGrid and simple email service and all these ones that you really want to be using? Because oh

Will Vincent 1:06:21
my god SendGrid This is another because I haven't been able to remove it from the from the books, even though I'd want to like they're constantly changing everything. And then Twilio bought them and they're changing. They're off, you know, so I have a whole chapter on email in like three quarters of it is like navigating SendGrid. Yeah.

Carlton Gibson 1:06:40
I like your answer, then it because I did a missive recently about why I have like more more batteries in Python. And the answer from the sort of the positive results about maintenance. And as someone on the Jango team, when we say more badges, I'm like, oh, it's about maintenance. So it's like, it's kind of like, too shy to say I totally feel where we coming from. But also it's like, well, what, what is maintainable? I think there are so many good packages out there. And what I think we're missing from the ecosystem still even we'd like Django packages. And the great work that will injected with the Django news letter is some kind of map of the Django ecosystem, it's still not easy to find the solution for what you want, but it's already out there and actually well maintained. And it's, it's easy to use, isn't there's no, you know, I don't know what the solution is here. It's just, well,

Will Vincent 1:07:28
I'm, I'm like raising my hand, you know, metaphorically. So there is the awesome Django repo Jeff. And I have Jeff, and I maintain. That's, that's trying to do this. So it's ostensibly a curated list. So if you look for email, it'll show you. We don't say, you know, it's not chat, GBT. We don't say this is the one to use. That'd be nice. But there is, you know, somewhere between Django packages, where it's which Jeff maintains now, which is all the packages, the awesome Django repo is designed to be like, you know, we're very strict on what's in there. But of course, people don't want to have like, Oh, here's the top three and like, choose your own adventure. They want someone who's an expert to just say, use this one right now. I mean, I do have, yeah, I mean, it's, it's just, it's hard to be subject. It's hard to be curated and subjective. I mean, it's like, cuz you kind of put yourself up for Flack, you know, instead of saying it depends. It would be nice, but I agree. Like maybe like the common question, though. I mean, I have a top 10 Django packages list that's just by downloads, which is imperfect from pi pi, which kind of gives you a sense. So it's like Django rest framework. Django course. It would be. Yeah, maybe it's worth sticking your neck out a little bit on on that. I mean, we had a guest, Carlton, I forget who it was, who made the point that who also has experience in other frameworks, who made the point that Django has a lot of batteries, but less magic than rails? Because I think I was saying something like, it'd be nice if we just had a solution for all these things with these other ones. You say? No, no, no, hold on. Like Django has a lot built in under the covers. It just is explicit. And it's not as magical. Because of course, you know, oh, the email works until it doesn't work. You know, Django is down the slope a little bit where it's a little more challenging as a beginner, but then, when you want to customize it, which you will, it's easier to do, then I'll pick on rails, you know, when it's a little more magical, but you know, like the auth system and stuff has so much built into it in Django II perhaps even more than other frameworks. But yeah, yeah,

Nick Janetakis 1:09:31
there's only three points. Okay. Well,

Will Vincent 1:09:33
we're great. We're over time. But when we have a great guest, that happens, are there any. So you have your courses? Do you want to give a plug to your courses or anything? Before we depart, Nick?

Nick Janetakis 1:09:44
Sure. Well, I'll do one quick hot pick just on the topic of email with everything. Have either of you quickly heard about a service or tool called the mail catcher? It's something you run locally on your dev box and it sets up a local SMTP server, and you can configure your Django settings or whatever to Just send mail to it. And you don't need to contact the third party service. It's not meant for production. But it's great for just local testing. So if you wanted a quick thing to do, it's got a Docker image that you can run. Yeah, I've been using it now for a couple of months. I like it. Okay, super cool. I'm gonna show simplifies sending email in development and test.

Will Vincent 1:10:17
Yeah, it looks like it's been out for quite a while too. So.

Nick Janetakis 1:10:21
Yeah. Yeah, it's one of the Yeah, it was funny things, right. It's like, it's been around since like, 1837. But like, I just learned.

Will Vincent 1:10:30
That's where that's what you know how the awesome Jenga repo started, like, in the newsletter, we're, I'm always like, we're never going to fill it with projects. And invariably, we find at least two or three valid interesting projects to add every time. But it sort of leads to like the cruft of we sort of managed to put a forum question be like, what are the common questions you have about what third party package does what and make like a top 1015 list? And just say, Here you go, like, check these out? Because I think there are, there are some answers, right, like with authentication, it's all off. You know, there are some answers and where it's not. There's like maybe two competing ones. Like there's not that many out there. I would say, I think it's, I think the list is doable. Yeah. And then, of course, it'd be out of date in a year or two. And people be like, Why is it at a date? And you'd be like, No, but it wouldn't be You're welcome. Back, it

Carlton Gibson 1:11:21
doesn't change that. You know, the ones that have Django is so mature now that those packages, there are new, new, new packages that come out all the time, but the sort of core ones that have been around for a decade, though, they're not going anywhere, they'll still be here in another deck.

Will Vincent 1:11:36
Why? And I should, I should plug I have a Django forum post on asking people, What are your top 510 packages that you install? Which I think was fantastic, there's a lot of responses. So maybe it's worthy of just, you know, linking, you know, just this is the problem, Nick, right. Like you have the content, it's more or less up to date, but like, you're still doing stuff and people's questions are the same, but your mental space has moved on. And you're like, do I just repeat myself all the time? Like on the video and then on the podcast and then the book and then in person? And yes, right? Because it's new to them? Just because it's just because it's a little wrote wrote to you. You just gotta like it's like a wind me up doll. Right. It's like, it's like academics Carlton, right, you and another life, like stand up before class and be like, I'm gonna tell you how to tell you. I'm gonna tell you it. And I'll tell you what I told you. Yeah. Or you can read my book. Well, I don't care.

Carlton Gibson 1:12:20
Oh, like, Rolling Stone. So go to a gig. They play the same tracks? Yeah. 50 years running.

Will Vincent 1:12:27
They make a little more quid than we do.

Carlton Gibson 1:12:29
Yeah, well, sure. But they're the Rolling Stones. So fair play.

Will Vincent 1:12:34
Did you so you courses, Nick, do you want to just quickly highlight the courses that you have that you still maintain? As you said,

Nick Janetakis 1:12:40
Sure, yep. There's a dive into Docker, which is dive into docker.com. That's more like a ground zero. Getting started with Docker. I have another like build a SaaS app with flask.com. That's using flask just to build all sorts of different you know, SASS apps that you may want to build it uses stripe, etc, etc. But yeah, all the details about everything could be on my main site, which is Nick Gen. attackers.com. Ni ck, Janet. AK is.com. Perfect. Not an easy

Will Vincent 1:13:06
one. Seems like you've had to spell it spell it before in your life. Yeah, a few times. So great. Well, Nick, thank you for coming on again. It's always great to catch up. I really enjoyed it. Thank

Nick Janetakis 1:13:16
you. Yeah, thanks a lot. Guys. This was really fun. Hopefully, in two years or less now. Maybe I'll come on again.

Will Vincent 1:13:24
You're always welcome. Sounds good. Well, we are at Django chat.com. And we'll see everyone next time. Bye. Bye.

Carlton Gibson 1:13:30
Bye bye.