OSD700 - A Retrospect

As this semester comes to a close, I'd like to take some time to look back on my experiences in open source development. To begin, I'd like to go back to OSD600, the the prerequisite to taking this OSD700 course.

When I first started in OSD600, I knew next to nothing about the open source community, but I was eager to learn more about it ( because I dislike paying for software :P ). In the span of a few weeks I had to get familiar with the tools of the trade ( IRC, Git and GitHub, Version tracking, etc ). I created a now obsolete tool called VideoSequencer, using JavaScript. It was designed to take any number of HTML5 videos, and string them together one after the other, as if they were one video. While the tool never saw the light of day, I thoroughly enjoyed the time I spent working on it, and the freedom that having the source open to all gave me when asking for advice on how to solve a problem. I finished OSD600 with a new respect for the open source philosophy and a solid knowledge of the tools.

After OSD600 ended, I began a a series of three consecutive co-op work terms, two of them placing me at CDOT, where I was able to apply the skill I developed in OSD600 to a new level. I became part of a community of highly skilled developers working on Popcorn.js, Butter.js and Popcorn Maker. The experience I gained from this had me more than ready to take it up a notch when I signed up for OSD700 late last year. Because I was already familiar with the Popcorn.js community, I chose to get myself involved in Firefox development.

When the semester began, I did initially feel a little nervous. I had been told time and time again that the Firefox source code was large and complex, and I knew I'd face plenty of challenges. Humph pointed me towards a bug that looked like a good starter challenge. The bug was for a problem with setting the mozFrameBufferLength attribute on media elements. I spent dozens upon dozens of hours tracing through code, debugging, tinkering and waiting for builds to finish all trying to fix this bug. I probably learned the most important lesson on this bug: Ask for help! I finally solved the bug by blogging about it and by seeking help on IRC.

Another important lesson was taught to me while working on this bug. Although I'd put so much time into it, the fix was incredibly simple. I added a single missing keyword to a function. Even the most simple of solutions can evade someone who's not familiar with a piece of code.

Following that experience I found myself working on a bug related to scaling poster frames. This was also an area I had no experience in. I did some initial investigation into the code, looking for places where the current poster frame drawing was handled. My familiarity with the code was growing, especially after the time I spent on my first bug, looking through the media code. I did my best to build on what I'd learned on my first bug. I blogged about my issues and asked questions on IRC. I was eventually able to make a work in progress patch and throw it up for some feedback.

It was around this point where I learned another thing about programming on a project of Firefox's size. When working on a piece of code and testing specific features, 9 times out of 10 you'll end up filing a new bug. I filed a bug based on my poster frame scaling bug, when I discovered that Firefox wasn't behaving according to spec when sizing a video element as a page loads.

I've since iterated many times on that bug, going though over 10 versions of the patch. I've yet to complete it though. The reason for this is simple: ref tests. Ref tests compare a page to a reference image, ensuring output stays consistent. My problem lies in the fact that I'm changing the natural behaviour of the video element, which had ref tests that enforced the incorrect behaviour. I've been trying my best to get them to pass, but between the poster frame scaling and the video resizing bug, I've been foiled at every turn.

My experience developing forĀ  Firefox has been a wonderful one. I've been able to contribute to and land code in a widely used application. I've been able to resolve several issues holding the browser back, making it better than ever, and that gives me a real sense of accomplishment. I've learned a lot about collaborating on a project the size of Firefox, and the importance of communication when you're lost in a bug.

I really enjoy spending time hacking on this code. I'm going to finish the bugs I've been working on even if they don't land before the semester ends. But with some luck and hard work I might be able to get them working in time. A lot of the courses I've taken at Seneca have taught me the things I need to know. Things like object oriented design, algorithms, Database analysis and design, etc. But only OSD700 gave me a real world experience. I've been able to communicate and collaborate with real developers working on a real product. I don't think I could have found this at any other educational institution in the province. When I look back on the time I spent as a Seneca student, I know that I will think of the amazing opportunities that were given to me, especially while in OSD700.