The past few weeks have been some of the most fun I’ve ever had. I’ve had the opportunity to participate in Google Code-in, a competitive event that Google sponsors to incentivise high school students to become involved in open source software development efforts. For me it has come as a long-awaited opportunity. I’ve been doing tasks with KDE, one the longest-standing organizations in the contest. To summarize a long story of how I became interested in OSS, and KDE in particular, I’ll just say that I discovered KDE shortly after I discovered Open Source, and I’ve admired it ever since. A couple years ago I started learning C++ as part of my eventual desire to contribute to some of the KDE projects. I didn’t then realize that chance would come even sooner than I had hoped.
Its been a little over a year since I started with C++. I had some previous programming experience with Java and C, so I like to think I caught on fairly quickly. Sometime in that interval I started experimenting with small Qt projects of my own, and finally submitted a patch to one of KDE’s smaller applications, KJots. Because of its size, I was able to begin to understand it after some time reading through its codebase (and a lot of looking thought the Qt and KF5 docs). I was pretty excited, because I finally felt I was making some progress in my ambitions to become an active member of the community.
I found out about GCI a few months ago, not long after submitting the KJots patch. I happened to see some of the community members blogging and tweeting about Google Summer of Code, and that led me to the opensource page of the google dev website. I realized that this might be what I was looking for, a chance to get some experience and some guidance into what to do next to continue to get more involved.
Now I’ve actually started the contest, and it has been even better than I would have thought. I’ve gotten to experience both general software development as well as open development work. As for my desires of really being a part of the community that KDE has, they’ve only grown: Before really jumping in and experiencing everything KDE has to offer, I already admired what KDE stood for, what it dreamed of doing, and what it had already accomplished. Now, after actually working with and getting to know the people involved I love it even more. I’ve talked to some of my fellow gci students, who live everywhere from the U.S. to all parts of Europe and Russia. I’ve gotten to learn from so many of the devs, who have shared from their years of experience with both software and the community and helped me navigate the large software codebases that used to be so intimidating. Each task seems easier and easier, as I’m getting increasingly better and reading and writing software.
My favorite project to be work by far has been Trojita. I did several tasks with it, and while it first seemed extremely complicated, I slowly started to see how everything fit together, due in no small part to Jan Kundrat’s help, and soon I could understand it as well as if I had written it. I’ve also done several task with Marble, which was the project I was most excited about prior to the start of the GCI.
My first task with Trojita was to change the text of a certain UI element in the email composer widget when the user had unsaved changes. I opened the project (I use KDevelop for most stuff) and tried to convince myself that the number of files didn’t necessarily equate to the amount of code, since the codebase looked a good deal larger than what I was used to. After a while looking around and building a mental image of the projects structure, I realized how it was all supposed to be laid out, and I was find where I should start working. After making the button change when the editor’s state was unsaved (which was stored in a couple bools), I pushed my changes. Jan commented that my changes had made apparent that the way the composer kept track of its state was somewhat confusing, and could be more cleanly implemented. He asked if I would refractor the changing of the text into its own method which checked the bool’s values. I began to do so when Thomas Lubking, another of the trojita devs, recommended that I move the bools and all functionality of checking and updating them and the UI text into a separate class. When doing this, Jan also helped me learn a couple of C++ features that were new to me, but greatly reduced the amount of changes I had to make.
I did several more tasks for trojita, the most memorable being where I disabled dragging and dropping between different IMAP accounts. For this I had to read all of Qt’s documentation on how dragging and dropping worked, and ended up also reading some of the source code for QDropEvent and QDrag to more fully get an understanding of the data was stored and transferred. Then I looked into the various types Trojita uses for storing the IMAP data structures. I overrode the drag/drop methods for the widgets that dealt with IMAP data, and checked if the any dropped IMAP stuff was dragged from another application (since Trojita currently supports IMAP accounts on an application instance-basis).
I’ve already said that Marble was the only project I knew beforehand was going to be involved in GCI, and that I was excited to work on it. My tasks with it mostly involved adding placemarks for various shops from the Open Street Map project, and setting up their specialized tags. Here I have to give some credit to Rakete, as I looked at a previous commit of a similar nature he had made, and realized I had missed one part of the placemarks functionality. After this I succesfully pushed my patch. (After some time learning Phabricator’s interface 🙂
After GCI ends, I am absolutely going to keep contributing to KDE. I’d like to stick with Trojita, because it just scratches an itch for me, even though I don’t really know how to describe why. For all the projects I’ve worked on, something about the feeling of excitement and pride after having sucessfully pushed a patch is almost addicting. I feel like I’m helping create something important, and I couldn’t be enjoying it more.