{"id":63,"date":"2010-03-02T06:09:10","date_gmt":"2010-03-02T10:09:10","guid":{"rendered":"http:\/\/www.joshmatthews.net\/blog\/?p=63"},"modified":"2010-03-02T17:10:52","modified_gmt":"2010-03-02T21:10:52","slug":"getting-involve-with-mozilla","status":"publish","type":"post","link":"https:\/\/www.joshmatthews.net\/blog\/2010\/03\/getting-involve-with-mozilla\/","title":{"rendered":"Getting involved with Mozilla"},"content":{"rendered":"<p>I realize that while I&#8217;ve been contributing to Mozilla since last July, I&#8217;m still quite new to a lot of the process and knowledge that more experienced developers take for granted.  Therefore, I&#8217;m going to document the steps I&#8217;ve taken to increase my understanding and involvement in hopes that it generates some discussion on the best way to help new people get their bearings.<\/p>\n<p>One of the most inviting aspects of the project right off the bat was that I had a point of contact. Benjamin Smedberg announced in a blog post that the Electrolysis project could always use more help, inviting interested people to get in touch with him.  This was an immense help, as he pointed me towards a really good introductory bug that forced me to explore and learn about IPDL, IDL, XPCOM, Javascript, the build system, and more.  This was perfect for me; I&#8217;m always looking to expand the horizons of what I know, and my work hooking up e10s with the typeaheadfind component allowed me to do just that.<\/p>\n<p>I find that one of the largest hurdles for getting involved in any project for me is lack of knowledge.  You&#8217;ve got a source checkout, and you&#8217;ve got a problem to solve, but no idea where to start.  If you&#8217;re courageous, you can start dipping into random files and window shopping until you find something that looks promising.  However, this approach is inefficient.  As I said, I really like to expand the breadth of my understanding as quickly as possible, so here are my patented steps to getting a better handle on the source tree:<\/p>\n<ol>\n<li>Subscribe to an RSS feed of commits<\/li>\n<li>Hang out in IRC channels<\/li>\n<li>Watch interesting Bugzilla users<\/li>\n<\/ol>\n<p>The trick here is to have lots of information available for consumption, and to sample a wide variety of it.  I read commit logs every morning, pick out entries that catch my attention and skim the commit.  If I&#8217;m still interested, I&#8217;ll visit the original bug and read through its history.  Through these actions, I am now in possession of:<\/p>\n<ul>\n<li>names of people involved in something I&#8217;m intrigued by<\/li>\n<li>locations in the tree of code that I&#8217;m interested in<\/li>\n<li>other information from the bug &#8211; components worth paying attention to, dependencies, blockers, etc<\/li>\n<\/ul>\n<p>IRC channels are a great way to act sponge-like.  Many diverse conversations on all sorts of interesting code-related topics occur in #developers, while more focused channels like #content and #static allow me to pick up new concepts and insights into the work that I&#8217;m currently doing.  Furthermore, they&#8217;re points of contact for people who are usually happy to help out when I&#8217;ve got a question.<\/p>\n<p>Finally, Bugzilla is a goldmine of fascinating activity and information.  When I started working on electrolysis, I realized that all of work I was interested in was clusted in the Core:IPC, so I set up an email watch on the QA contact for that component.  Eventually, however, I wanted to diversify, so I began to follow specific users.  Watching the activity of the polyglots of the project, those who dip in and out of every component is a great way to quickly become exposed to the wealth of work being done.  There&#8217;s a downside to this: the more users you watch, the more intimidating your bugmail becomes.  Today, I ended up receiving 270 emails over the course of one hour because roc decided to unassign himself from a crapload of bugs at the same time as a bunch of dependencies were added to some Jaegermonkey tracking bugs.  However, I&#8217;ve become adept at quickly deciding whether a conversation thread is interesting to me or not, and these deluges are infrequent.<\/p>\n<p>When it comes to learning about specific pieces of code that confuse me, I have another system.  If it&#8217;s some fundamental concept that I need to grok (nsCOMPtr, ns*String, etc.), I turn to the faithful Google search: &#8220;mozilla X&#8221;, X being the unknown item, and 99% of the time the first result will be the relevant MDC page.  If I&#8217;m more interested in quickly locating pieces of code, I pull out <a href=\"http:\/\/dxr.proximity.on.ca\/dxr\/\">DXR<\/a> and make use of its wonderful search limiters such as member: or derived:.  If what I&#8217;m looking for is a piece of C or JS code, or simply isn&#8217;t indexed in DXR (m-c only), I haul out mxr and search there.  If I do a few searches and can&#8217;t find what I&#8217;m looking for, it&#8217;s usually off to the friendly folk in #developers.<\/p>\n<p>There&#8217;s one specific moment I remember from when I was starting out &#8211; my very first review.  I&#8217;d submitted my first attempt at the typeaheadfind work, and to my horror, and email arrived with the subject &#8220;<b>review denied<\/b>.&#8221;  I felt crushed.  Reading through the review, I saw that many good points were made, but it was hard at first to shake the feeling that my code was simply not good enough.  I&#8217;ve gotten better at accepting review- since then, but I feel that a simple change to the email subject (&#8220;<b>review complete<\/b>&#8220;) would go a long way to improving that user experience.<\/p>\n<p>So that&#8217;s it, really.  Through the application of these methods, I&#8217;ve gained enough knowledge to submit a bunch of patches, log some bugs, and start answering other people&#8217;s questions.  It&#8217;s really just been a process of perseverance, asking the right questions, and making use of the correct tools.<\/p>\n<p>Got a story?  Please share!  I&#8217;d love to hear how other people&#8217;s experiences differ.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I realize that while I&#8217;ve been contributing to Mozilla since last July, I&#8217;m still quite new to a lot of the process and knowledge that more experienced developers take for granted. Therefore, I&#8217;m going to document the steps I&#8217;ve taken &hellip; <a href=\"https:\/\/www.joshmatthews.net\/blog\/2010\/03\/getting-involve-with-mozilla\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"class_list":["post-63","post","type-post","status-publish","format-standard","hentry","category-mozilla"],"_links":{"self":[{"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/posts\/63","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/comments?post=63"}],"version-history":[{"count":2,"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/posts\/63\/revisions"}],"predecessor-version":[{"id":67,"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/posts\/63\/revisions\/67"}],"wp:attachment":[{"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/media?parent=63"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/categories?post=63"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joshmatthews.net\/blog\/wp-json\/wp\/v2\/tags?post=63"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}