 This session is Confessions of a jQuery Committer and these guys are committed or should be. These are the guys who write a lot of the code that goes into jQuery and they review a lot of the code that goes into jQuery and make sure that other people's work is done the right way. So I'm really glad to be able to introduce them. This is Adam Sontag, Chris Borchers, Corey Frank, Mike Chirav, Rick Waldron. Give him a hand. Hey everybody. So I'm going to take you back to the year 2000. Not all the way back to 1986 when I was born, but 2000. I was really into the pre-release community of a game called Black and White, which I never really played that much, but what I did do was I went to the IRC channel called Lionhead on QuickNet and I hung out there for a couple of months, made friends, met developers from the game and just kind of like learned the answers to the questions that people were asking and during a couple of months I had my ops in the channel and that was like and then I met a lot of people through that that like kind of I had learned HTML when I was a little kid, but picked up from there and got my first copy of Photoshop and like learned how to do tables and all that stuff from those people at the next couple of years went on. So fast forward all the way to 2007. I'm studying theater in college, but also still doing web. I'm struggling mightily with like to do anything with prototype UI and dojo. That's possibly the fault of the fact that I barely knew what I was doing. Not necessarily those libraries were bad per se, but you know every little bit helps. So by 2008 though I have found jQuery and I'm actually being productive. I started doing this portlets implementation using jQuery UI at the time, which I think was 1.5 and it was working really, really great. Had like all oodles of Ajax things were you know moving all over the page. It was really, really exciting. It was like I Google because people love dragging and dropping things I guess. My productivity was like through the roof until I got a burger and I couldn't stop it. What the bug was, I still remember, I was Ajaxing in a lot of pages in these little portlets and some of those pages would include jQuery again, which meant that all of a sudden plugins would disappear and plugins that were working at the beginning of the page stopped working later in the page. I was like, what's happening? My plugins are falling out of the jQuery namespace and no one really helped me. So I went to jQuery on free note. Well first I looked around who works on this jQuery thing and there was this guy, Scott Gonzalez. I'm like, wait, is this the same Scott Gonzalez who graduated high school a year before me and we played pick up ultimate frisbee? Yes, it was. So I bothered him on IM and as I've now learned no one likes when you bother them on IM with like project specific like, I don't know about Schitt's Creek, do you have a jQuery? So I got to jQuery and it was like a repeat of what had happened eight years earlier. I came to ask a question and it turned out I was able to help people a lot. So I just stuck around and have been there. It's been like four and a half years now and I've seen people come and people go and more importantly I've seen people stay, which is nice. So now I'm the developer relations lead for the jQuery project, which is cool. That's why I'm running around up here, breaking my ankles, jumping off stage. What does that mean? Essentially it means the people side of things. So my first confession is I don't really commit code. I've started committing some docs things here and there but I mostly try to just make sure that people are happy and getting along and things are rolling smoothly and there's little acrimony. So there's a lot of ways though without writing code that you can get involved in any open source project but hopefully jQuery, right? So support is instant gratification and it's instant gratification for everybody involved because it's not like working arduously in the back in like, I don't know, a forest in Europe, as you were saying Julian did, someone said yesterday. If you're on IRC especially helping someone, it's back and forth. So they get the help they need, you also get the satisfaction of helping them right in the moment and then being like, thanks, it works now. And then the other side of that is you also get this cool thing of solving bugs before you encounter them because if your application works the way you know your application works but other people are doing completely different things. But if all that stuff is filtering to you because they're like, I have a problem with this function, you're like, I've never seen that function before but I can read the documentation. And then you find out about some caveat or you find out about a technique you had no idea existed just because you're either reading someone, you're reading something that's happening and you're like, damn, I had no idea that existed. You can just, the breadth of your knowledge really expands and then when it comes time, a year and a half later to do something, you're like, oh, I know how to do that and they're like, how did you know that? Why wouldn't I know it? I memorized every function on the jQuery API, who doesn't? So you can do that on forums, you can do it on Stack Overflow, you can do it on jQuery on FreeNode, we also have jQuery mobile but we clear jQuery UI support in jQuery on FreeNode so don't go to the jQuery UI channel, it's like a ghost town, there's like literally tumbleweed. Working on docs is not quite instant gratification but it's also gratification because you're helping, you know, your work on, that's a little unclear. If it's a little unclear for you, maybe it's a little unclear for 50 other people who have encountered in the past and maybe you can help it so it's not unclear for 150 people who will probably never thank you, they might never know you edited it but like, you've made that change, you've made your mark and that's really exciting and one of the big things we've been doing with this whole site redesign is making it so that contributing to docs and also contributing to web design and development is not, has the same workflow as contributing to code. So we have now got the jQuery API and we're getting UI API and mobile API, those are all on GitHub now so it doesn't, if you wanna work on the docs, it doesn't mean that you have to like schmooze for six months and finally get an awesome credentials for the WordPress install and finally be able to type into some rich text editor that sucks. So now you can fork and edit away. And then the last thing I would advise you all to do is just get out there and meet people. We have, all the projects have weekly public IRC meetings. So if you wanna know what's going on, if you wanna be that person who's like, I think I know one, jQuery's gonna be released next. It's not that much of a secret, we like literally are like, it's noon on Monday, here's all the secrets. And there's a schedule online, we'll have these slides online, you can click this, jQuery.org slash meeting. Go to local meetups, if there isn't one, start one. It's kind of, it's hard to organize a meetup, but it's nice. And who it attracts, it really varies. Maybe people don't wanna fly halfway across the country, but they're willing to drive halfway across town for an hour and a half and a slice of pizza. But proposed talks do breakout rooms, we are all awesome, we are all awesome. If you haven't seen, we are all awesome, it's a website. But don't think that you don't have what to talk about, you probably do. Everyone is working, no two people here are working on the same app unless they are working on the exact same app. So share your knowledge, if you have something interesting, just do it. And there are people in this community who are more than happy to help you get there. Whoa, whoa, whoa, that was a little crazy. So that's all I have. And with that, I'd like to welcome Chris Borchers. So yeah, so my name is Chris. I am a senior software engineer at Red Hat, working on a new project on mobile. And I am a committer on the jQuery UI project. So just diving right in, so why did I get involved? Probably like most people, I had a bug, I needed to fix it. So started researching, jumped into the jQuery channel on free note for the first time, and was just kind of looking around and whatever. And then all of a sudden, Richard Worth decided to bribe us. So he started this reward.js. It was May 2011, for the month of May. He wanted to see how many jQuery UI bugs could get fixed that month. And what he did was, if you fix the most bugs on a day, you want a prize. And if you fix the most bugs in a week, you want a bigger prize. And if you fix the most bugs that month, you won an all-expenses paid trip to the jQuery conference last October. So I was looking at that. I was like, well, let's see if I can fix a bug. So I start playing around, looking at bugs, starts sending in some pull requests. A lot of them are ignored because they're terrible. And then all of a sudden, one got through, and it was merged. And then that day, I was actually tied with another guy. Both of us fixed one bug that day. So and then I was picked randomly, and I won an Xbox. I was like, wow. So I was like, I'm gonna fix some more bugs. So I just start finding more bugs and sending more pull requests, and a lot of them don't get through. And I think we've cleaned up most of them, but there might actually still be one or two that are sitting there, not being merged. But yeah, so once some more prizes, once some like Nintendo DSs and I don't know, all kinds of stuff. And then I ended up fixing the most bugs that month and won a trip to the conference. So that's kind of how I got started. And so why did I stay? I mean, I'm not getting prizes anymore, right? So first of all, I mean, still kind of on that selfish thing. I'm fixing code that I use. So if I go out and fix a bug, I don't have to work around it in my code anymore. So and then there's the whole fame and fortune piece. I mean, people start to know who you are because you're a committer on the jQuery project, right? And then the fortune piece comes in because Red Hat, my actual project lead contacted Richard and was like, hey, we're looking for a JavaScript developer. He's like, I know a guy. And so I started talking to them and got a job. So that was cool too. But then the other reason is sort of the more selfless, like helping others. It's just really fulfilling to see that you're fixing code that people use and they see those bug fixes and they're like, yes, I've been waiting for that for six months. And then you go in, the part that Adam was alluding to, that immediate gratification of jumping into the jQuery channel and helping someone work through a bug or in their code. And they're like, oh, thank you so much. I'm gonna buy you a beer if I ever see you, which you probably won't. So just a quick plug before I finish up, jQuery UI needs your help, right? And all the projects need you. But because I work on jQuery UI, I'm gonna ask you to help me. So we're doing API redesigns on a bunch of the widgets. So if you check out the roadmap, you can kind of see where we're going and where we need help. We need bug triage help. So check out track. There's a bunch of bugs that just need to be, see if they're even valid bugs, comment on them, whatever. And then documentation, that link isn't live yet, but it will be. And if you go to the GitHub repo, which Adam had a link to in his piece and start fixing things, it'll be live faster. So that's about all I had. So with that, I will introduce Corey. All right, I'm Corey. And jQuery has changed the way that I write JavaScript. It's not just a tagline on the website, I have to say. It actually has changed the way that I write JavaScript. When I first started writing JavaScript, it was a while ago, I'm gonna rewind quite a while. And all I had was, you know, if document, I had to test for IE, I had to do something, one path for IE, one path for Firefox, maybe some other browsers out there had something else I needed to worry about. But I was working on this application and I was just getting really tired of always doing this. And I found jQuery. And we're gonna go up to about 2010. I found the jQuery support channel on IRC. This seems to be a running theme here. So that's where we all hang out. We have a lot of fun, we joke around in there. And we also help people. And I was one of those guys that needed a lot of help. I had no idea what I was doing with most of these APIs. It's a little daunting at first, right? Like, you can get it really quickly, but then there's just something that you don't quite understand the right way to do it. And there are a lot of helpful people there that will give you the answers right away. Sometimes they're wrong, but most of the time they're right. So I'm gonna fast forward a little bit beyond there and go into, around January 2011, I ran into a bug where I couldn't submit my form. And it turns out, moral of the story, don't name your ID for your submit button. Submit, it totally breaks things. So if you want the history, you can go to bug 1414 in jQuery Core. I decided to try to take a stab at fixing this problem because I think I might be able to figure it out. And four rounds of back and forth with Rick where he gracefully allows me to repeat all of the same mistakes that he had made a month ago trying to solve the exact same bug. Although I think I tried a couple of new things. And we eventually determined that we just can't fix this in old IE. It's impossible. There's everything we've tried. IE just throws a wrench in the framework. And when IE doesn't throw the wrench, something else does. But all of that work was still useful. We did all this documentation, we did all this research. I learned a ton, especially about old IE, but I learned how to use Git. I learned about GitHub, which totally changed my life in development. And I've learned so much from this one little bug. So from there comes along Adam. I'm still hanging out in IRC. And one day he was like, hey, I saw your work on that bug. And maybe Effects has this issue. Go to this demo and atomic click on this button and you'll see the problem. Just you'll see it right away. And I look at it and I'm sitting there and I'm studying it. And I try to dig in and find the solution in the crazy mess of effects code that we had at the time. And eventually I give up on it, but Timmy will solve it about a year later. So then UI effects needed some maintenance. So I decided to go over there, start helping out that project. Reward.js decided to bribe me as well. Fix some UI bugs. I think I want a PSP and something else. I don't even remember. Oh, I got a good book and a couple of awesome shirts. So then I decided to start attacking some bugs in the jQuery core tracker. From there I moved on and jQuery color needed some love. And I mentioned it to John and he just gave me administration on the repo and was like, go fix it. And I was like, whoa, where did that come from? Like all of a sudden now I'm the guy in charge of jQuery color. I wasn't really quite ready for that. But then after color came along the time where I realized that infrastructure team, the people working on the servers really just didn't have enough bodies helping out with setting up all of our servers. Something that not a lot of people know how to do and it's actually really needed. I find something else to do. The core effects rewrite and jQuery core 1.8 and which fixed a couple of more effects bugs. But that brings us up to about right now. I can't stop myself. I just keep finding things that I want to fix and I keep fixing them. However, you can help me not go crazy by fixing everything that I see. You can find something yourself. Find something you like that we do because we do a lot of different things and help us do it. Especially if you like systems administration, please I will get down on my knees and beg. We need your help. We really need your help. So that was pretty much my quick overview of how I became involved in the project and I would like to pass it on to Mike. Hi everyone, my name is Mike. Hi, Mike. Hello, Rick. So my passion is fixing bugs and so one day I'm sitting around and I said, how many bugs does jQuery have? You know, this is a product I've been using. I'm sure it has at least one bug, right? To the bug tracker. So it's May 2011 and this thing is off the screen, but okay. I discovered that outer width is broken on window and document and by broken, I mean you shouldn't be calling it on in any way but people were. Which is a common theme among bugs. So I decided to submit a pull request. I have two comments on the track ticket, 12 comments on the pull request. This is going great. Closed without merge. Okay, great. You know, the pull request actually inspired Timmy Will, which is a common theme, to fix the bug and said, hey, you did a great job but we'll fix the bug elsewhere by doing this other thing that's better. So I learned that jQuery cared more about than just correctness and that's so should I. This is like a common theme where like, jQuery must do the right thing. I had this edge case and I was that way. You know, I must fix all the bugs, all the things, right? But I learned that there was more than just correctness and that I should care about more than just correctness. So I will work harder. Animal form reference, anyone, no? I'll do better. jQuery CSS will have zero bugs. I will be a contributor. Next floor pull requests, closed without merge. Okay, you know, I still tried, I failed, I thought. I light bulb moment. These tickets were being closed. The number of bugs were actually going down. Not because they were being fixed but because we decided that we weren't going to fix them and that I was like forcing the issue to be addressed. So I wasn't a contributor yet in the sense that I had my name in the GitHub list of contributors but I was achieving my goal, you know? So I reflected a little bit. I said, why am I not getting merged? What's wrong with me? And what's wrong with my code? Oh yeah, size, correctness, speed, style, readability, all the things that you have to think about when you contribute to an open source project, you know? And I said, what am I doing right? Persistence, taking feedback, writing unit tests and testing adequately, and learning, I learned something. And then pull requests start landing and yeah, that's the way I felt too. I'm happy about that. I learned that jQuery gets better as I get better because that's what happens. It becomes a symbiotic relationship. And then in November 2007, 2011, jQuery 1.7 is released and I get mentioned in the blog post. Awesome! Yay! As a Greenhorn contributor, for those who don't know what Greenhorn means, basically it's a plight word for noob. So, Greenhorn, great. But I persist and I continue to contribute. And jQuery, well, this is a repeat. And I said, keep going. I can do better. And jQuery changes their policy that they'll add anyone who is consistently helpful to the core team, which benefited me. And I'm on the team, win. And I remember being told to come to jQuery Dev or jQuery meeting, which is on Monday at noon, which you should go to on IRC if you want to start seeing how we do things. And John was there and I'd never spoken to John ever. And he said congrats. And I took a screenshot and I saved it. And I was like, yeah. And so if you can learn anything from me, besides typos, it's that you should be persistent and that you should make the changes that people give to you because they're not criticizing you, they're criticizing the code, which is actually helpful. And that the right outcome is what matters. As long as you're achieving the goals of the project, you are a helpful person. And that you don't need to be one of the greats to contribute. Like there's this thought that you're standing on the shoulders of giants when you're using jQuery. And it's just people like you and me. And I'm not even that good at JavaScript. So I just think that if you, really if you can learn anything from me is that everyone should be, should get involved. If you're here today, you can help out on jQuery. And I look forward to seeing everyone. So that's me. Thanks. And I'll hand it over to Rick. Is this going to safely move over here? No? Onto the table. Cause I can't stand still. Sorry, everybody. I'm paying the ass. But you're all naked right now. So who's the weird one? Is this on? My name is Rick. You can find me at these places. I'm a jQuery core contributor and committer. That's really exciting to me. My story begins in September of 2009. The now dead jQuery dev mailing list had a discussion with regard to what should happen if my Ajax call has Jason response and the content type is set to Jason except I didn't include data type as Jason. What should happen? Well, as we all know and love, jQuery just wants to work. Just going to do what you expect it to do. Everybody on the mailing list agreed. I was excited because I had a patch. I had code that did this. This is exciting to me. So I contributed it. Problem was, it was untested, unlinked. It was a bad implementation. It was awful. It was really bad. But thankfully, I had John to rewrite the whole damn thing. Always appreciate that. But then something occurred to me, right? I had contributed an opinion of what I thought should be the future of the library and it had been taken seriously. It had been considered. It had now been included in the library going forward. So everybody from now on could say, oh yeah, well, I don't even have to worry about this. It just does what I expect it to do. That's really exciting. So that got me thinking, maybe I could do more. So what I did was I started watching the repo, pull the master, run the tests, and report the fails. And I reported the fails on Twitter, on mailing lists, personally mails to John, in IRC, but never in the bug tracker. What the hell is that? Never even considered using the bug tracker. But then one day it occurred to me, maybe I can fix these fails. Maybe I can pitch in. I did it about a year ago, right? This is 2010 roughly. Getting my confidence up, I was feeling good with my Git skills. That's always exciting. You know the day when you realize that you can use Git and be productive? Yeah, everybody, right? It's coming soon. Exactly, I promise. So I'm gonna help out and I'm gonna contribute. So contribute I did to the bug tracker, as somebody mentioned earlier. I also went to the bug tracker. Straight into a concrete wall. I was really bad at it. Messy code, missing tests, this, that and the other thing, a lot of closed pull requests. But I had a group of people that they didn't realize at that time, but they were being mentors. And it was because of them that I'm here today and that I write much better code than I did back then. And that I feel as though I'm confident enough now to even pass that along. So my confession is where I give a little hats off to those folks that helped me out. First it was John, leader of the library since he authored it when he was still in college, took on prototype. John, I learned from him that you should always allow yourself to be wrong. What set him apart from the project leaders in all the other popular JavaScript libraries, at least in my opinion at the time, was that John wasn't a jerk. John was actually like willing to listen to other people talk and consider their opinions and their input. Not so much the same feeling on various other mailing lists. Not gonna throw mud. You can dig it up, it's probably in the internet archives. That proof exists. But that was an important thing because once you can allow yourself to be wrong and take input from other people, you open yourself up to just becoming better. By allowing yourself to be wrong, you allow yourself to more frequently be right. Then there was Colin Snover, who now actually works on Dojo and has nothing to do with jQuery. He was the concrete wall that I ran into in Bugs. Do you guys know what end of line white space is? I sure do. I have an on save macro now that cuts it all out for me whenever I save. I can't tell you how many times I would make a pull request and he would kick it back to me. He's like end of line white space on line 10. Like what are you talking about? I swear to God, I removed it all. He's like, no, it's there. And then I would, and he was like, do you use invisibles? And I was like, no, what's that? Turn on invisibles, you'll see. It's crazy, very likely it's very crazy. But he had some great points because what Colin did was he took these crazy ternary statements that he found in jQuery that made it nearly unreadable and unmaintainable in the core and turned them into well commented if else statements that now two years later, we can understand and read and know what the hell they're doing. This is important. This, I'm fanatic about this now. If any of you guys know, I maintain a style guide, idiomatic JS, it's actually been translated in 10 different languages. This all came from what I learned working on jQuery and everything that started with Colin. From Dave Methvin, I learned the art of the balanced approach. It's not always about size. It's not always about speed. It's not always about any one particular thing. You have to balance size, speed, maintainability and developer experience. Wouldn't it be awful if we were just changing APIs because we're like, no, no, no, it's gonna make jQuery smaller. And you guys were like, yeah, but I can't keep up with it. I don't want to use it. None of you would actually be here. I promise you that. If we said, no, we want to make it faster by taking out important code paths that allowed for the consistency and cross browser goodness that is in jQuery. None of you would be here. Dave is a genius when it comes to the balanced approach. And I learned something from him every day that we work together. And for that, I thank him. And lastly, excuse me, not lastly, because I did add an extra slide just before we got up here. Julian O'Bor, who rewrote the entire AJAX module over the course of a year, putting up with the core changing code weekly and him having to rebase, pulling the changes, figure out what we fucked up for him, fix that, get his test running again, ask one of us to review the code. No one wants to review the code because it's the entire goddamn AJAX module. Who has time to do that? He did this for a year. Why? So that we could have an AJAX system that was actually now maintainable. It's rare that it has bugs anymore. It is hardened. It is super hardened. It's also extensible. It wasn't before. Before it was a rat's nest clusterfuck. But what it was, it was not a bad thing. Nobody was responsible for that. It was just, it was like this years of trying to fix things and make things work just work, that is, so that all of you would end up being here in 2012 at a conference, caring about this library. He made it pass all of the tests, but he wrote it from the ground up. And if that's not commitment and dedication and or commitment to an asylum of dedication or something, then I don't know what is. So the actual last is two fellas, Adam Sontag and Alex Exon. I don't know if Alex is still here. He spoke. Maybe he's still here. No, okay. They taught me to be kind. Now, just a show of hands real quick. Who here has filed the bug on bugs.jakeray.com? Raise your hand. Really? All right. How many of you have had a bug closed by me? Yeah, that's it. I'm not doing a good job. How many of you thought that I was actually pretty kind about it? All right. How many of you thought that I was kind of a jerk the first time? Well, you could thank Alex and Adam because I would rather tell you to read the fucking manual than listen to bugs most of the time. But because of those guys, I've learned to totally be kind and totally thank you for your contributions because you know what? At the end of the day, if you weren't reporting bugs, jQuery couldn't be good because no one would be using it to find those bugs. So thank you. Thank you very much for filing all those bugs. I actually do appreciate it. So, one last thing. If at the end of today you go home and only one person in this entire audience does what I'm about to ask, I feel as though this talk that we've given you has been successful. I want somebody here to watch the repo, pull the master, run the tests, and report the fails on a regular basis. And that's all I got for you. Thank you.