 Hello everyone, good morning and welcome to my talk. So I'm going to present on getting started contributing. So hopefully you guys have some interest in learning how to contribute to this open source project. If not, you might want to check out the other room. OK, let me. Oh no. OK, a little bit about me. So as introduced, I started a college hackathon and I've been contributing to WordPress early this year. So I was part of a class at Cornell University where we did open source software engineering. So I had a physical team of six people, six students, and I had a WordPress mentor who lived not far away. And by not far away, I mean a four-hour drive away. So it's because I had this guidance and this first-hand experience, I thought it would be nice to share with you guys, if any of you are interested in learning how to contribute to WordPress. So as a team, we look into multiple components. So I'll introduce components later, but you can think of it as a subdivision of the core code. We look into Gutenberg, which is a new editor. And we look into privacy. So privacy is something that's very close to my heart and something that I'm going to share with you guys in this presentation. So at the end of this presentation, I really want to give you guys four key takeaways that you guys can remember for contributing. So the first is to understand structure. To me, understanding structure is very important because it gives you a mental model and a framework to understand how coding works for WordPress and how you can investigate the bugs, how you can gain insights from the code, and how you can use it to solve your problems in coding. The second one, start by copying. It sounds like plagiarism. I swear it's not. But when I mean start by copying, it's because no bugs out there or no tickets out there are created equal. They're easy ones and they're harder ones. So as a first timer, you will want to approach the easy ones. You'll want to start by crawling before starting to run a marathon. The third one, be bold in finding a community. I think we can all agree that it takes a village to raise a child. No one works in silos. So if you want to start this open source contributing journey and you were to attack it alone, it's very daunting. But if you are not afraid in finding a community, if you want to link up with like-minded peers attending WordCamp for one, it's going to sustain you and motivate you to do a good job. And the last one is to take it slow. Take it slow. When you contribute, especially if you do it on a voluntary basis, it takes time to get things done. But you can take into comfort that your progress is tracked and your progress is all online in their chat logs. So it takes a slow process, but it gets done. So what was my journey like? I'll take you through my journey. And I had to split into three phases. First is recon, where you start to understand what it's like to contribute to WordPress. Next is you set up. It's a first-time thing to get your environment up and running for developing. And the last one is patching. This is a crux of this experience is where you find a bug that you're passionate in. You write some code to fix it, and then you push it out, and you fix it. So let's start with number one, recon. So if you were to visit WordPress.org on your web browser, you get this beautiful website. You want to register an account in the top right-hand corner in the red circle. So once you register an account, you are a contributor well done. You also get a Slack account, where if you guys are not aware of Slack, Slack is a channel, a messaging platform where a lot of developers like to get on and discuss ideas. And when you have created an account, you want to hit call below. You can see there's many different ways to contribute, not just coding. I think further down, there's also stuff on community building and volunteering at WordCamp itself. It's contributing. But in my talk, I focus on contributing to call. And reading call, as I mentioned earlier, there's many components. So one component is a privacy component. So a component, it's a subdivision of the call code. And this is an example, which I want to bring into two key information. The first one is getting involved with the community. So you can see there's a shot right up there. I'm not sure if those at the back can see. It's a weekly meetings and bug scrubs done over Slack. So at a great time, people just come online and start chatting to say, hey, I'm having problems with this bug. Can you help me fix it? And it brings them together. It's because WordCamp's WordPress philosophy is to work decentralized. You can work from your office. You can work from any country. And you can see whole meetings like that. I think that's amazing. The second one is at the bottom half. So this gives you a very big overview of the privacy component. So at this time, when I took the screenshot, there's like 99 tickets open. Vertically, it's explained to the different types of tickets available, explain what tickets are. You can see some defects, some enhancements, and some feature requests. And then horizontally, it refers to the milestone. So if you guys use WordPress, which I believe you guys do, different releases are staged. And they are released in discrete releases. So 1.0, 1.1 all the way. And I believe the latest one is 5.3. So you can see there are some tickets packed to 5.3. Some is a rating review. So they're not sure how to prioritize it. And the last one is future release, which is de-prioritized in respect to 5.3. So what is a ticket? A ticket is a unit of problem that needs to be fixed. And it's tracked by this software, Track. It's a WordPress ticket tracker. So if you go to the website, WordPress.org, and you go to Get Involved, there's a link that brings you to Track. And you get this screen. So it's usually a huge list of tickets, thousands, tens of thousands. But in this case, there are some things you can add, which are filters over here. So I'll share with you some of the filters available. So one is the component, which I filtered to privacy. Now one's keywords. So you can think of keywords as a tag to the ticket. It's like sometimes when you have an Instagram post, you can hashtag stuff so that you can easily categorize into buckets. So this keyword, for example, has a patch and needs unit testing. I limited the milestone to future releases. And I also filtered it to different statuses. So I want to share with you guys on what kind of status there are over here. Because it's something that really helped me back in contributing when I didn't understand what the different statuses are. So a status is like the life cycle of the ticket. So someone found a problem that exists in Track. So what happens to the problem? So one thing is that someone gets assigned to it. So you can think of someone being assigned as the one fixing the problem. So if you're interested in fixing the problem, you can assign yourself to it. Sometimes when there's someone assigned to it, you do not want to touch the ticket because you do not want to do double work. You do not want to work on something someone else is working. But sometimes, although it's assigned, it gets stale. So the last comment is three to four months ago. There's no development in it. And you can always feel free to pick up a stale ticket because sometimes the person assigned to it can no longer work on it because they're not exactly 100% full-time contributors. Another one is owner. So the owner can think of it as like the project manager, the one who makes sure the ticket gets done, the one that oversees the ticket's journey. And then there's closed as well. So I filter out closed because we don't want to look at closed tickets. We want to look at tickets we want to work on. So now that you've never get a true Track and you've found an interesting ticket, what do you do? This brings us to the second phase where you set up the environment. So this is one, two, VVV, which I use. It's very helpful. And it allows you to create a virtual environment in WordPress. So I've added a link where you can install it. And I think, I believe, Chapter 2 gets you installed. And Chapter 6 gives you some default credentials for you to log into the database and the WordPress admin console. Once you get this virtual environment started and you go to vvv.test on the website, you get this screen. I want to bring your attention to two parts. So one is WordPress trunk. This is the repository or the installation that you're going to work on and the code you're going to modify. There's a URL and a folder on your desktop that tells you what to touch. And on the right side, it's because in my journey of this ticket, it requires me to interact with the database server and the email client. So over there, there's PHP, MyAdmin, and MailHawk. So at this point in time, everything might seem very fuzzy in your head. It sure was when I first started it. So this is where I wanted to emphasize that you need to understand the structure of WordPress code. So I tried to organize it in my head simply. And this is the architecture as I see it. So there's this giant box. This is your computer, all your code and all your software lists inside it. You install this folder, Vagrant local, www, slash www. And then WordPress trunk refers to the installation that you had. And within this folder, there's a source folder and a build folder. So if you guys are familiar with building code, the source folder is where you have your code that wants to be modified or the code that runs the project. And then you build it and then you get this build folder and that's what gets run when you spin up your WordPress. So this build folder powers the different virtual environments. So I pointed you guys out to trunk and there's also one and two. So there's been three different installations for you, but we'll just focus on trunk. And within trunk, there's this cloud of WordPress core code that's very confusing out there. So we put a cloud. And then there's the PHP server and the mail server, which I will help you guys understand throughout this presentation. So the PHP server is the database. And I stumbled across a talk at my first WordCam in Lancaster, Pennsylvania. And it's by myself, Ferrello. Yes, hope I pronounced it right. And this is a link to his presentation. So it's something that I discovered because I attended WordCam. So this brings me to my key takeaway on number three, where it's important to find a community. Because if I didn't put myself out there to learn more about WordPress and to learn more about how it works by attending the WordCam, I would have stumbled across this amazing talk. And I also found out at WordCam Singapore that Mike is going to present on Images. And I have this ticket, which I was working on, Images, which I got stuck and I haven't touched it for a few months. So maybe Mike can help me in getting some insights. So yes, be bold in finding a community. So now that we have self-environment, we have recon, we start to do the fun stuff, patching. So this is a ticket. I'm going to break it down with you guys. So there's a ticket ID 45889. It says to include session tokens as personal information in data, exports, and erasure. And then in the description it says, a previous ticket raised some concerns about whether we missed any personal data. And then this suggests to me, oh, you missed something. So if I were to modify the code, I just need to add something, right? That sounds easy. I missed something where the personal information exports was released. Oh, what's personal information exports? Let's keep the question in mind. Upon further investigation, the core privacy team found multiple places in the user meta table. Oh, the user meta table in databases? OK, let's investigate. The SKU contains information that we should include in exports. The county known ones are session tokens and community events. OK, we have two to work on. Oh, community events will be handled by another ticket. OK, just one. That's simple. The scope of the ticket isn't about removing or anonymizing this information, instead just including it with the current user exports and erasure tools. OK, so we need to include something. To me, this sounds like a low hanging fruit, a bank that's not too hard, right? I just need to add something. So this investigation process is what I mean by key takeaway number two, start by copying, right? You want to find tickets that's easy to handle, right? As a first-timer, you do not want to start by something too hard. So on the first question over here, on the right side, what is personal information exports? I investigated and I played around the WordPress admin site. And then this is an example of the exports where you can get out details about your users. So as a user of your website, I can find out what this website has about me and I can explore the data. So you can see there's many interesting data points here. And one unique one I found was user registration date, OK, user registration date. So let's keep that in mind. The other question from before was user meta table in databases. OK, now that I've attended the database talk, I know how database works, I know what to click. So I went to this screen. Cool, on the left side, there's a wp underscore user meta. OK, so this must be the table it's referring to. And there's a bunch of different data points over here. And then when I zoom in, uh-huh, session tokens. Exactly the data point I'm looking for that the ticket's looking for. So now, all I need to do is take that information and to add it to the personal information exports. So how do I do it? Remember user registration date from before? All I had to do was to search for that phrase in the entire core code. And on the green arrow, you see there's a hit. It says user registration date. So I just bring up the screen and I see the code. I'm like, OK, I just need to include something. So on the red arrow, I just copy and paste it. I modify the name to session tokens. And on the right side, it's a switch case statement where for different keys, I print different information to my exports. So I just create a new case for session tokens. And if you understand PHP, this code here just passes a PHP object to make sure you get your relevant data points. So with that, I built the code using Grunt. So this is explained in the Contributor's Handbook. And then you can see on the right side, after I built my code and I regenerated this report, there's a user session token at the bottom. So yeah, ticket is fixed. So now that you've fixed the ticket, you need to put your work out there. So there's two ways you can do it. So on the left side, if you upload a ticket, and the right side, if you want to download a patch. So you might want to download a patch because someone's working on a patch. And you want to apply their patch on your system. If you want to write unit tests or you want to verify that their patch works. So in this case, we have fixed with a patch. So you can either use Grunt to upload the patch with the ticket ID, or you can just do it manually where we do an SVN diff and we save it to a .dev file and we manually upload it on the website. Yep. So this is a screenshot of me engaging on Slack. You can see I'm in the call privacy channel. I'm asking simple questions. And everyone on the chat was very friendly. Everyone didn't call my questions stupid or asked me to stop asking stupid questions. So yeah, to me, it felt very comforting. And then on the left side, some of them reached out to me and had a one-to-one chat with me and said, hey, as a new contributor, you can consider looking at these areas. So shout out to Garrett. His Canada flag there, which is kind of cool. He guided me the process. He was like a mentor to me as well, and he really helped me. So you see, people are very friendly on the WordPress community. This is another screenshot of my team at school. If any of you recognize George, he's a WordPress contributor who lives not far away. And the six of us were those involved in the team. So as a team, we did some Gutenberg serve as well. But I will not share in this talk because it's too short. And yeah, I just want to emphasize that it's very important to have a community. Because if not for these guys, I felt like I would have just given up at contributing. It's too hard. And it's not something that I'm getting paid for. So why do it? Yeah. So what's the status now? Because contributing is really not a sprint. It's not something that you want to solve it. And then you get a lot of stuff out of it. It's more like I really believe in this project. I really believe in WordPress as an open source project. And I just want to do my part in contributing. The thing is that the situation is not all that rosy. I've got a lot of tickets hanging. I've got some tickets stuck and in progress, for example, like my images one. I just have no idea how to fix it. And I've been plugging in the last few months because I graduated in May, and I've been traveling. And I relocated back to Singapore. And I just haven't found time to sit down and code. On the plus side, in my journey, I found smaller tickets outside of WordPress. So some common tickets are like documentation areas. You see typos in the documentation. Or you feel like you misunderstand something and you want to clarify it. So because of that, I got several tickets raised. I found issues. I got several tickets merged. And I think it's really a fun process. So if you do not get too bent up about fixing one ticket and let it burn you out, then you will really enjoy this process. And this is what I mean by taking it slow because contributing is like that. You just need to not harp up on one ticket and just let it sit. These are some good documentation that really helped me throughout my journey. And it will help you if you want to get contributing. So the first one is really just a contributor handbook telling you how to get started. If you enjoy reading stuff, it's great. But if you don't really enjoy reading stuff, you can just talk to people who have contributed. The bottom two is the code reference and the codex. And it's like the holy grail of contributing. If you want to Google Functions, you can go to the website. And to find out how functions work or where your parameters are being passed, these two links will help you. With that, I want to reiterate the four key takeaways. First is to understand structure. If you can have a good mental model of how things work, you can gain very valuable insights about how WordPress works. It's a very complicated code base, but it's a very beautiful code base because so many people work on it, so many people edit on it, and so many people do it because they love it, not because they need to earn money. Number two, start by copying. If you want to fix bugs or you want to create a new feature, find the easy ones first. There are some keywords like first time, I'm sorry, good first bugs that you can use, and you really want to start small so you can build the confidence to tackle something bigger. Number three, be bold in finding a community. I think WordPress does a good job in creating communities with WordCams all around the world, with WordPress meetups, with a decentralized chatting platform where you can easily get in touch. And I think it's very important to get, to be bold in finding a community because a community will sustain you and keep you going. And the last one is to take it slow. It's to adjust your commitments and not to get too jaded when one ticket doesn't get fixed. So with this four key takeaways, I hope you enjoyed my talk. And thank you. You can find me at Nikki Lim on Slack. We're waiting for some questions now. What are the alternatives for varying vibrance? There's a few on the core contributor handbook, but I can't remember it at the top of my mind. Yeah, but I believe there's two or three alternatives. Yeah. As a non-developer, I've never considered contributing because I've assumed it was all about working on core. Have you had any interactions we've been able to design group at all? Does it sort of, do they work together again? Yeah. Maybe share a little bit on Gutenberg. So on Gutenberg, it's managed quite differently. They do not use strength, they use GitHub. And Gutenberg is organized in a way where there's many people on the team because it's such a big project. And I remember one team that did accessibility. So accessibility is making WordPress accessible to those with disabilities or difficulties and stuff like that. So just interacting with the chat logs on GitHub conversations, I noticed some individuals just help give comments and help design to say, you know, WordPress shouldn't use these default colors because these default colors are hard to see on screen readers. And they don't come from a perspective of code, they come from a perspective of using. So I think if you are comfortable getting plugged into the conversations in GitHub and how to navigate a website and how to type a comment, I think there's a lot of value for you to contribute, even as a non-coder. Yeah. Yeah, one question in the back. Do we need to learn how to use SVN or can we just use Git? If you want to contribute the most of core is SVN for legacy reasons. If you want to use Git, you can contribute to Gutenberg because Gutenberg uses Git. Thanks. Yeah, welcome. One question in the middle. Okay. Simple question. Is any qualification or verification to be a contributor or is this open to all? All right, it's open to all. No one checked your credentials. Yeah. And after we fix the bug or we make a page, where it's going? I mean, if we're going to next WordPress update or just... It depends on how they pack the ticket. So from before I shared the idea of milestones, there's like 5.3, awaiting review and future release. So if you want to work on something that's coming soon, you can work on a ticket that's packed for 5.3. If you don't really mind, you can just do the rest. I've got some friends who work actively on the latest release of Gutenberg. So I think the latest one was released a few months ago and then their names got like props on the release update and they were like celebrating. Like, oh, my name's mentioned, yay. Yeah. Thank you. Okay, I have one more plug. It's that tomorrow there's Contributor's Day. I know Mike is doing a workshop on contributing. So if you want to get your hands dirty, you should go for that. Yeah, that's all I have.