Django Chat

Contributing to Django

Episode Summary

How to get started contributing to Django and why it's so helpful to the community and your own career.

Episode Notes

SHAMELESS PLUGS

Episode Transcription

Will Vincent  0:06  

Hello, welcome to another episode of Django chat. This week, we're gonna be talking about how to contribute to Django. I'm Will Vincent and I'm joined as always by Carlton Gibson. Hey, Carlton, hello. So let's let's talk about this because this is something near and dear to your heart since you review all the commits to Django and for me when I'm out and about, I've actually get this gotten this question a lot of experienced developers who have made changes in their own projects, and they say, How do I contribute to Django? It seems like this black box, so let's unmask it for people. So what's the first what's the first step? Let's say? I've been using Django at work. I've done some gnarly, small, specific bug fix. And I'd like to share it with other people. What do I do?

 

Carlton Gibson  0:41  

Let me talk about my first patch to Django because that's the best right? So Django one point A and the template engines all got totally refactored and Django crispy forms stop working, because it would instantiate a template object without specifying the engine, the backend engine. And this has been cold. It's been working forever, since I've been point four or something like that. And what Jana wants you to do more than eight was to specify what your your back end. And it's like, well, but there is only one, it was the default Django template back end. And Can't we just use that? And well, yes, we could, but it needed somebody to come along and fix it. So I submitted a patch got a couple of reviews, it was easier to make a fix in Django than it was to make a fix in Django, Django crispy forms at this point. So anyway, then that got that got merged in and that was released in you know, that one of the subsequent patch releases. So what do you do? That was my first contribute to Django core itself? I've been, yeah mean, contributing the rest framework to crispy forms and filter and compressor all over the place, but hadn't actually contributed to Django curious isn't. Anyway, what do you do? You The first thing you got to do is find is well depend in this case, I found a ticket. Okay, I had a bug. I went onto it. for Google, and up came on the Django issue tracker, the track code dot Django project.com. He came up with somebody reported this issue and I'm like, oh, I've got this issue. I need to fix this. So okay, what do I do? Well, then you go and read the very fine manual. And it's there's a how to contribute to Django. So type contributing to Django in the top hit will be from the docs how to contribute, and have a read through that. And it says, You've got to do various bits and bobs

 

Will Vincent  2:26  

the key bit, it seems it seems intimidating. The first couple times you read it, I speak from experience where I, I couple years ago, was going to try to do something and you know, I had trouble getting installed. I just like I guess isn't for me, right? Yeah. And which is why we're doing this episode, because we want to talk through and have people not have that experience. But

 

Carlton Gibson  2:44  

what we want. And this is something that as a community we've got to work on harder is to lower the entry map. Yeah, so people want to contribute. And there's a lot of millions of genuine users, we want to make it smoother for them because there's obviously a barrier to entry because we're not getting as many contributors. We will.

 

Will Vincent  3:01  

And maybe I wonder if I wonder if having, because I think that you know, so if you go onto GitHub, you can see the source code for Django. And then within that is where you can go find the what's the technical term, the version that you would delete the latest version of Django or if you want to go in and make a contribution, right? That there's the separate

 

Carlton Gibson  3:16  

clone the repo, so you always

 

Will Vincent  3:18  

you always write a clone the repo and the master replays, make

 

Carlton Gibson  3:22  

a pull request a change request against Master, the latest master. And then if it needs to be back ported to a supported version, then we will do that when we merge it. So

 

Will Vincent  3:32  

we're being the UUA Django I mean,

 

Carlton Gibson  3:36  

in principle, there are other people that can merge pull requests, but the reality is that the fellows do all that

 

Will Vincent  3:41  

so don't let that be a barrier just you just use master.

 

Carlton Gibson  3:44  

So to the first thing is clone the repo, the repo This is in the contributing code, right. So but clone clone the repository, so click get clone, GitHub, Django, Django, and it will give you a version of Django created version environment. Change into the test directory and pip install the rest requirements for Python three, and then run tests, there's a file in the test folder called run tests. So

 

Will Vincent  4:09  

current rip run test.py. And it should run the test suite. And I say should you need to have the right libraries installed on your computer and all these things. So there may be there may be glitches, but this is also good educational thing, because this works for the Django core team, and you're not using it your Django project, you should at least be aware of these tools.

 

Carlton Gibson  4:27  

Yeah, I mean, so like, for instance, you might not have the right development headers for the database installed, so it can't compile the dependency, you know, they're very simple if you if you have troubles getting Django up and running, you might have problem problems with your Python development, right? Anyway, so he's probably these are things that you need to install.

 

Will Vincent  4:46  

And I wonder, it would I almost wonder if it would be worth having a Docker version to see someone

 

Carlton Gibson  4:52  

there is a Docker Is it okay,

 

Will Vincent  4:54  

yeah, you're not afraid to be ignorant on the podcast, right? So

 

Carlton Gibson  4:57  

if this if it doesn't work for you, Well, there's there's a Docker box virtual machine, which you couldn't load. And there's also a Docker object. So it is a Django box, which is a virtual machine. And there's a Django Docker box, which is a Docker dollarized instance. Okay, got

 

Will Vincent  5:17  

great. Yeah, cuz I'm all hopped up on Docker, because I'm using it in my new book, in part to solve these local development challenges. And, you know, I would say the darker it is a million lines of code. So it can, it can get hairy, but it also often can just work for you and be amazing. And you don't have to worry about this stuff as much. And I think in this case, it's probably that situation where you just, you download Docker, you pull in the Docker Django version and you can just get going because it will just have everything self encapsulated for you.

 

Carlton Gibson  5:48  

Yes, and it's very good as well because it handles so we support this if you liked my SQL, Postgres in Oracle, well, who's who's got set up with Oracle known but the Dr. Box

 

Will Vincent  6:02  

Are you broke? I'm glad you broke the ice. I'm saying something mean about Oracle. Oh, yeah. Okay, so yeah, so you easily get you get into disk.

 

Carlton Gibson  6:12  

To get the test, the first thing to do is get it installed and get the test suite, right? Whether you do that locally by creating a virtual environment, installing the dependencies or whether use Docker or the virtual machine, doesn't really matter. But can you run the tests? Yes. Okay, I can run the test. If you can't, then Django users or Django developers, or there's another maintenance called Django core mentorship, which you could go on and say, be specific, say, I'm trying to get set up to run the test suite. The problem I've had is exactly this. Can anybody advise and there are lots of people who if you give a nice specific question like that, we'll be able to say, Oh, you know, you need to apt get install, build essential, you know, whatever the

 

Will Vincent  6:50  

the missing piece, always be specific with your questions. It really helps everyone.

 

Carlton Gibson  6:54  

Yeah, if you don't give a like an actual error message or something. You've got no chance of getting serious. Help. So can you run the test? Okay, fine, you've got you found a tick. Now that could be hard as well, because there are, like 1300 accepted open tickets on Django. It's a mature project, it's got a lot of pride. It's got a lot of open tickets. So if you're just like, all like, I'm looking for a project and you start browsing, you could be there a long time before you find something that you think is suitable. So two things I'd say there. One is, have you got an actual issue that you want to solve? If you have that would be the first place to

 

Will Vincent  7:28  

now that that'll be easier way to get into,

 

Carlton Gibson  7:31  

yeah, focus on the problem that you've got to solve. And that's the best way. The second is will filter it by component because if you, you know, there might be 1300 tickets, but there's only a couple along the syndication framework, or there's only 10 on the map, or there's only 100 on the admin or, you know, if you break it down by component, it's much more approachable than

 

Will Vincent  7:51  

now. What would you say in terms of, you know, what about you know, looking at the most recent ones or looking at the oldest ones does the time that have tickets been open matter? How should someone evaluate?

 

Carlton Gibson  8:02  

Okay. Okay, so there's a ticket to being open for 30 years, and it's

 

Will Vincent  8:05  

still open, it's probably gotten still probably got some comments on it. It's probably harder. So it's an ad. So it's an admin thing.

 

Carlton Gibson  8:15  

Yeah. Well, it's like, you know, it's probably not trivial because it would have been fixed, right? It's been looked at before, right?

 

Will Vincent  8:23  

Yeah. So if you're looking for low hanging fruit look for more recent ones.

 

Carlton Gibson  8:27  

More is what there is an easy pickings flag, which doesn't have a lot of tickets on it. And they usually assigned if there's a an easy pickings ticket that's been assigned in it, but it's been assigned six months ago, a year ago. Just call it say, I used to working on this, can I take it? Can I take it over? Because sometimes people assign themselves a ticket and end up working

 

Will Vincent  8:47  

and that's a great one to look at, to learn to because a common issue is someone will solve a problem but not have complete tests to back it up, which is probably like the number one feedback someone like you, as a jingle fellow will say which is you need to have tests. Comprehensive Test to back this up.

 

Carlton Gibson  9:02  

Okay, so here's a good one to look on tickets which have got patched needs improvement, or needs documentation

 

Will Vincent  9:11  

document. Actually documentation is probably the number one way to start.

 

Carlton Gibson  9:14  

Right? Well, if you've got if you've, you know, if you if you've got strong written English, then there were a lot of documentation tickets, which is the difficulty is they take time, and a lot of contributors that English isn't their first language. And so it's difficult to them to take on documentation tickets. But if you've got strong written English, whether it's your first language or not, if you can write clearly, it's a really good way to get to understand more about the framework, because you have to get into the issue. You have to understand the issue. And then you have to write about it clearly.

 

Will Vincent  9:45  

Yeah, no, I agree. And I was as a native English speaker, I would say something sometimes people whose first language is not English, are far better writers because they have to be thoughtful about Yeah, it is a little bit unfair. Like he's

 

Carlton Gibson  9:58  

not that you're not the English is your first language of the United Way. But you do need to have quite strong English and you need to go to

 

Will Vincent  10:03  

the doctor. Well, the existing Doc's are very well written. So

 

Carlton Gibson  10:08  

there is a massive opportunity for people with strong written English to contribute to Django and make a big difference to close a lot of issues. If there are issues that there are pull requests, which are open that need documentation to come in and help on those, you know, or need improvement come in and help on those take those issues over. You know, most of the work might have been done maybe just needs to text.

 

Will Vincent  10:29  

Yeah. Because Yeah, because it's, you know, it's a lot to do a change, you have to do the code, you have to write the test, and you have to document it documented. And sometimes people get tired.

 

Carlton Gibson  10:39  

Yeah, and as well as, like the, there will be feedback. So here's the thing. So let's say you've you've installed Django, you've got the virtual environment set up, you run the test suites, you found a ticket, you've made a patch, you've you've you've opened a pull request, right at that point, you're going to get reviews, and there's a patch review checklist and there's coding styles, but that review will be quite precise. It'll be very, it'll be like, please make this small change, please like that small change. And then you'll make the changes, and then there'll be more review. And it's not. It's not like a criticism of you personally, it doesn't matter who you are, you get exactly the same review. And the same comment to me, it's that the quality of Django is very high. And the way we keep it high is by making sure that the changes that go in are just right.

 

Will Vincent  11:23  

And it's it's a gift to have precise feedback from a knowledgeable person too. I think, you know, if you're not used to, a lot of people maybe aren't used to feedback like that. And if you aren't used to it, it can feel a little jarring. But it is truly a gift for someone to be that precise. with you. You know, you're dealing with the the top Django people here too, who are generally reviewing this. So I mean, you're just the educational component is massive. It's not Joe Schmo Joe Schmo who's

 

Carlton Gibson  11:51  

trying to teach you to try and treat it as a learning opportunity and that no one's trying to criticize anybody. Right. I guess what they're trying to do is make sure that the patch is right.

 

Will Vincent  11:58  

I guess that's my point. If someone did care, they wouldn't engage with you the fact that someone engages with you, especially when we're all working towards the same goal. is it's a gift. Yeah.

 

Carlton Gibson  12:10  

What am I think? So there's two bits that I think that we struggle with contributors. What is the roadmap that we briefly mentioned is that people start and it's very hard to get going. The other is I think people do get disheartened by the review process and how it can feel slow and patches can get stopped. And what

 

Will Vincent  12:28  

Yeah, how do you break? How do you break through that? Right? Because there, that is a common thing, are you basically we're all volunteers and yeah, there. Sometimes there needs to be new blood or there needs to be something to push an issue forward. And maybe you know, it also can be as simple as if you're the one who's done the initial code. And then you just get swamped and can't do the documentation. If someone else comes into does it documentation to the extent that there's just more people involved, it makes it better for everyone because you, you know, it's a lot of work to do this. It feels great to have someone new or someone from outside. Come in and focus on what you're focusing on and help out. Do all these last little things? You know, I haven't pushed a core Django I can imagine it's gonna feel great to have your work in actual Django.

 

Carlton Gibson  13:08  

It's super cute. I mean, you own it, it's yours. It's if you're

 

Will Vincent  13:13  

creative, and you can, you know, if you want to be selfish about it, that's a pretty nice thing to talk about in interviews, if you're going to interview for a Django job, and you say, I've contributed to core Django. And I've learned all these things by doing core Django quality work. I mean, even if it's just a single request, you know, if I'm a hiring manager, and someone tells me that, dang, that puts you top 1% for

 

Carlton Gibson  13:35  

sure, because not most people haven't achieved it. So one of the big things I talked about it briefly, I've you know, I've done a lot of open source over the years, and starting with rest framework and growing into other packages in the Django ecosystem and then ended up you know, the Django fellow now it's amazing, but for the second I started contributing to open source, all of a sudden record hiring requests or feedback code samples and things like this. They just disappeared. Because I helped maintain Jagger's favorite Oh, yeah, we use okay. Yeah, he totally changed the dynamic for me,

 

Will Vincent  14:09  

as it should. But yeah, well, we were just we were just discussing, you know, right before recording, you know, in my case, I'm an educator, I don't get quite that benefit of the doubt, even though I've done all these books, which, fair enough. But if you have actually contributed and gone through the steps to go through core Django or Django rest framework, there's no higher bar than that in terms of do you actually know what you're doing? And can you write quality code? Yeah,

 

Carlton Gibson  14:31  

I mean, although, you know, it's still in an interview, you might mess up. Somebody asked me, you know, custom user model and I'm totally like, what I should have done was just cracked open the docs and gone and looked it up, because that's what I do in real life. But it was like in a pressure situation, and totally said the wrong things didn't get the gig and it doesn't matter.

 

Will Vincent  14:52  

Now. It happens to everyone. Well, yeah, I got I got rejected for a job writing code for Django rest framework. At the same time, I was finishing my book on it best selling author. Yeah, best selling author because the only author at the time. But yeah, so this is a great way to say great, great way to maybe speed up those interviews a little bit.

 

Carlton Gibson  15:11  

So the take the take home here was slightly digressing and hiring disasters for the take home is that if you contribute to open source, it does actually help your job. It's a massive learning opportunity because you get to see good code. And it's not tied into something you're trying to create. You get feedback from other people, you get to learn to understand the code base which is foreign to you dangerous that you get sucked in and spend too much time a bit. And you've got to be careful, you've got to limit the time that you give to open source

 

Will Vincent  15:40  

is that the meat grinder you've referred to?

 

Carlton Gibson  15:43  

Well, it's not I hadn't heard this phrase actually. But like the the the old school contributors to Django, they used to describe it as the meat grinder because it eats contributors. Right? And so we need some fresh meat for the ground because you triage in tickets is hard and this is this was the why the fellowship program exists. Is because ultimately, a project of Django site, you can't expect it to be right on volunteer effort. It's just too much. So the triage thing is hard. It's really hard you spent, you know, you get a ticket, and you look into it, and you try and write a nice comment. And people are like, cross with you, because you You didn't agree with their analysis. It's like, No, I'm just trying to do the right thing. I'm just trying to understand it. And then there's another ticket, and there's another ticket, and it's endless. It's truly endless. And, you know, you take the weekend off, and you come back Monday in the roof, you know, it's 15 utl. It's like the hard work. And you can't do that on a volunteer basis. So the the fellowship program is we handle the triage, we handle the code reviews, we handle the releases, and then hopefully volunteers as you people, you couldn't come and do the fun stuff, like write some code to fix jank.

 

Will Vincent  16:47  

Yeah. And I was gonna mention for teams and companies. It's also if you can say and, you know, people on company time where the company is a contributor to core Django that is also a massive help. Free reputation for hiring people. You know, you know, they're the selfish reasons, reasons for contributing to Django in addition to it helps improve the thing that you are using to run your business day to day.

 

Carlton Gibson  17:13  

Yeah, it helps you get like, it makes your employees better code. Yeah. Right. And they will experiment. They will do learning, they will do all these things. And it's either going to be on your code base, yes. Or on an open source source code base, where you get free code review from community experts. Yes. Like it's just a map to eradicate, you know, the Google 20% time you don't have to allocate 20%, but something like approaching that to work on the dependencies of your own project. That's a time well spent.

 

Will Vincent  17:44  

Yeah. And I think I'm glad we're gonna list the resources here where if you do get stuck trying to contribute, and you have a specific question, you can go and ask for help and be helped because, again, there's those two stages of just just getting everything up and running, which sometimes puts people off and then there's once you've contributed or worked on a ticket, just the process? Again, think of it as relearning if you can.

 

Carlton Gibson  18:07  

No, it kind of

 

Will Vincent  18:08  

is I mean, you know, and it is. And it is I mean, I look at you know that I think this is the progression to when you're learning Django. I mean, at least for me, I would say I'm a bit behind you Carlson on the Django expert level, but these days, I just go look at the source code on stuff. Yeah, you know, I used to be, I would go online and look at tutorials. And look at the docs, you know, at this point, I basically quickly look at the docs, and then I usually jump into the source code on most things. But it's taken a long time for me to get there and working on core Django. Tickets is just going to ramp that up. And once you It just is things opening left and right. Once you sort of see how things fit together, it becomes a beautiful thing. You're like, oh, man, I really start to finally like seeing the matrix like oh, this is how this ties in with this, you know, because you just accept everything when you're starting out and you know, we just sort of muddle through but there's a real beauty and seeing how how web framework works. Then you can see these are the choices. made and, you know, have these, you know, philosophical conversations about? Well, if we were going to start from scratch, how would we change things? Like those are amazing conversations to have, we'll probably have these in the podcast. But you, you get that by doing the work and digging in and yeah, understanding the source code, because it's also it's all in Python. It's it's very readable. It's not, you know, mysterious if you take the time to look at

 

Carlton Gibson  19:19  

it. Yeah. I mean, like, you know, you get right into the ORM. There's a lot to take in and, but Okay, well, slowly, but surely, okay. Just dig into a single lookup. Okay. I always see how this lookup works. Okay, I see how this expression works. Okay. The bits of the orenda slowly start to come together. Yeah, it's

 

Will Vincent  19:38  

Yeah, I mean, views views are a great one, right? Like, if you're curious, how does a generic class based view work like ListView. So you can read the documentation, you can look at classy class based views. And if you look at the source, it will reference you know, it'll show you where to get into what to

 

Carlton Gibson  19:55  

say Django core handlers, which is the base whiskey handlers that handle the request. And to look at how the get response function works, or you takes in a request, and this is the this is the core of it, and it builds the middleware, and it passes it through the middleware on the on into the view, and then back out. It's like, Oh, that's how it works. And then all of a sudden middleware artists mysterious is perhaps you thought,

 

Will Vincent  20:20  

yeah, or even just the idea of, you know, the context object that's passed into templates. That's something that when you're learning, it's like, up, there's something called objects up, I can rename it, but like, what is it? You know, you don't, you don't necessarily get it? Because you're just so overwhelmed with everything else. But yeah, I guess we're saying there is a real beauty and seeing how the pieces fit together.

 

Carlton Gibson  20:41  

It gives you the opportunity then to when you're writing down when you're writing your application. Once you sort of know how the form layer really works, you're like, oh, and this is why we create the form this way. And this is why we update the fields in it and not, you know, and this is why we set the query set here and this is why you know,

 

Will Vincent  20:59  

those kind of things does lead to an appreciation? I think, in general, the choices that are made? And do you understand the choices to you if you don't fully agree with them again, when you get to this level?

 

Carlton Gibson  21:08  

Yeah, there's never going to be the perfect website. Right? Yeah, you can, you can be like our Django has done it all wrong, I'm going to rewrite the red framework from scratch. But in the end, you're going to end up making compromises, which will mean,

 

Will Vincent  21:20  

right? And that's and that is the thing is that it is all trade offs. And if but I think you have to have a certain level to discuss the trade offs in an interesting way versus you know, I, I see engineers often talk like that to beginners. When beginners say I just want to build a site. And I, you know, don't don't do that to them to help them build something. And then you can talk about it. Because, again, this is this is a big point of this podcast is that there's a lot of things in Django that are maybe maybe this maybe that and we want to talk about it as professional developers would give that context because there aren't that many things that There's one right answer, though there can be good answers and bad answers. So that's what we try to talk about.

 

Carlton Gibson  22:04  

Yeah. Yeah. So but what would we say you say digging into the source gives you that insight

 

Will Vincent  22:11  

digging, the source is worth it contributing to Django is absolutely worth it. And there are resources to help you get started. And what else your during your talk at Django con Europe, which probably won't be up for a little bit is on this topic. Yeah,

 

Carlton Gibson  22:24  

exactly on how to contribute and how to automate that work for you. So this,

 

this is contributing to Django, but then

 

there's making sure that you don't get burnt out by contributing too much. And there's, you know, how do you how even if you've only got a limited amount of time, how do you make sure that you can still put to present your effort in a way that makes it that transparent to prospective employers the value of what you've done, because you think, oh, I've only can, you know, I've only spent half an hour a week for six weeks, and that's actually quite a lot. And if you just keep all of that in If you just present it in the right way, that shows a lot to an employer, that gives you an advantage because one of the, one of the big issues that we have is that not just that we don't have enough contributors, but the contributors are all from that same stereotypical demographic of white male, you know, it's not entirely white. It's not entirely male, but it's largely white and largely male. And the debt the Django community as a whole is much more diverse than that. And the danger with open source is that it just reinforces the the same privileges. It's only the people who can afford to give the time for it, the do give the time to it. Well, yes, if you're going to give hours and hours and hours to check to open source, you need to be quite privileged to be able to do that. But you can give a small amount of time and if you track that, that can help you build a career around it or can can help push forward your career which gives you more time. So when I started when I started contributing to open source, I'm a father of four young kids as consulting you know, doing freelance an agency work bit With Django and you know, I wish that I was contributing in my spare time, but I didn't have lots and lots and lots of spare time. I still don't have lots and lots of spare time, you know, I maintain, on my own time Django, filter channels, crispy forms, I give these what I can, but it's not a lot. But it adds up over time, you know, do it month in, month out, and all of a sudden, it's like, oh, wow, actually, you've done a lot. And the kid the key, the key for me is not to not to think you have to somehow find 10 hours a week, you don't have to find 10 hours a week. You know, if you can find some time on a regular basis, however smaller is that adds up to something really substantial.

 

Will Vincent  24:41  

I agree. And it's all it's all out there. You can point to it. The work is visible in the community. Yeah. So there's no questions of ownership. You know, sometimes if you're at a company, you can't show the work that you've done, but you can show work you've done in core Django.

 

Carlton Gibson  24:53  

So I found myself writing applications for you know, big companies, big brands, but it was all under NDA again. And so when Go for other work, it was really hard to

 

Will Vincent  25:02  

present, you know, I could okay to get a reference, but Well, it's it's a nonspecific reference when it's not like, Hey, I did this. Right? Well, you're making me rethink, you know, I think we'll we'll do an episode on hiring in Django and what, what can you do? I've always told people, you know, build, build a bunch of projects and open source your work. But, you know, that's a lot of work. And maybe that's more than you're able to do. You know that if you can just go in and do documentation on core Django in some ways, that's probably better, actually, than just building a blog or whatever project. Hard to say it, definitely. It definitely. It definitely helps. And I think it's an avenue that Yeah, we want to highlight

 

Carlton Gibson  25:40  

what a hiring manager is looking for. They're looking for good teamwork, good communication skills, you know, all these things, which if you can work on an open source project with other people, it demonstrates all of those, whereas if you can sit at home and build some demo app, okay, that's, that's impressive, too. But it doesn't show team working skills. It doesn't show it to people. Communication skills. He doesn't show all these other things which care managers coming to realize are just as important, if not more,

 

Will Vincent  26:06  

right. And often, the open source code is almost always going to be better than non open source code. Yeah, it's this cathedral versus the bizarre thing. Yeah. So great. All right. I think we've covered the main points. And hopefully we've, again, look in the show notes. We've eliminated a little bit of the process of contributing to Django demystified a little bit and tried to make points for why it's well worth your time. It's not just a yeoman's work.

 

Carlton Gibson  26:31  

Yeah, it's a really good thing to get into and you'll learn All

 

Will Vincent  26:35  

right. All right. Well, I will see you next week. As always, you can view this episode and others on Django chat Comm. Chat Django on Twitter, and see you next time, Carlton.

 

Carlton Gibson  26:47  

Bye bye. Okay.