Alright so for this project I found out that I needed to submit a public patch along with my GSoC application. Needless to say, I freaked out and went digging through the Bugs page of the Mailman page on Launchpad trying to find something that I could do without having to figure out the intricacies of the software. Yep, it didn't work. Thankfully Barry had mercy on me and gave me a project that involved adding support for deleting domains to the REST API.
Of course this discovery came in the middle of the last few weeks of my freshman year at College of Charleston, so I was busy beyond belief and was desperately looking for random time slots in which I could work on this project. I've never worked on open source software before, so the size of the source code was daunting and I began to struggle as I worked through several files line by line trying to figure out how everything works. After looking at lists.py for comparison, I was unsure as to whether I should be writing an entire module to support deleting of domains or writing a method in IDomainManager to perform the action. Barry came to the rescue again and led me to realize that the method I had (correctly!) intended to implement was already implemented by a model class...and that I had been looking at the interface definition for a DomainManager without realizing. Go figure.
Finally I got my hands on the relevant files to the project and after about an hour and a half, I had written the extension to the REST API that allowed for deleting domains through HTTP DELETE connections. After pestering Barry again, I found out that Mailman is developed using Test Driven Development philosophy; something I only knew about in theory. Now I knew that as soon as I figured it out I'd take it and run with it, so I jumped right into writing tests and, you guessed it, failed horribly. I really, really don't like it when I don't understand CS concepts, so over a span of about three days (random intervals due to school work) I worked to figure out how to build and run tests. I was confident that my delete method in domains.py would work, so I began to get incredibly frustrated that I couldn't get the tests to pass.
This morning (April 25th), I gave in and ping'd Barry again on IRC and with his patient guidance and my brute determination, I managed to push what I hope is a correct solution to the problem via Launchpad.
This whole process was a fantastic way for me to get to work with the software and become familiar with at least part of the functionality. It also gave me a chance to work with test driven development and Bazaar for version control (again, something I only knew about in theory) using tutorial I found to push my branch to Launchpad.
I'm pumped to get started on Mailman for the summer, it's going to be cool to dig into the documentation and figure out how everything works so that I can carry out my proposal as planned. In the meantime, I'm finishing up a little bit of development on my iPhone application before the artwork gets finished so I can push it to the App Store. It's going to be busy summer!
No comments:
Post a Comment