Although I have always been interested in contributing to open-source projects, I was never confident enough or lacked the time to make more extensive contributions (besides a few smaller pull requests). Luckily, this summer I decided to participate in Google Summer of Code and finally get involved more in the open-source world. Google Summer of Code 2018 was an extremely valuable and exciting experience for me and I learned a lot during that time. In the following I will write about my own experiences. Perhaps, those might be interesting for future participants but are also a great way for me to preserve some of the memories and experiences I made during that fun time.
The Beginnings
Once Google Summer of Code and participating organizations were announced, I scrolled through the entire project list and looked for projects that interested me. I was planning to either work on a projects that was using either Scala or Rust since I love working with these programming languages and wanted to improve my skills in using those. It turned out that there were only a handful of projects that actually used them. One project immediately caught my eye - a text editor, called Xi Editor, built in Rust with the goal of being high performant and supporting different interfaces on various platforms.
Shortly after discovering xi editor, I started looking into the code base and tried to get the editor running. I played around a bit and found some small issues I could work on to get a slightly deeper insight into the project. This led to my first pull requests which also initiated the contact to the Xi community and my future mentors.
My Project
Before Google Summer of Code, xi editor only supported a very basic plain-text search within the currently opened document. However, having a more advanced search and replace functionality would be very beneficial for all users of xi editor. Hence I was planning to extend xi editor to allow search using regular expressions, replacements of matched strings and multiple search queries. Additionally, I intended to integrate a more advanced interface for find and replace into xi-mac, which is one of the frontends for xi editor, as well as highlighting matching text in opened documents.
I had a few unusual ideas, like providing support for multiple search queries. However, I was lucky to have had mentors that were very open for new propositions and supported me in implementing my ideas.
Working on Xi Editor
I really enjoyed working on xi editor. My mentors were really helpful in providing me some direction on how to start. Every 1-2 weeks we had a status update via Google Hangout and discussed current problems. For each pull request they provided very helpful code reviews but could I still work by myself without feeling micromanaged. We also communicated over IRC on a daily basis to discuss smaller issues or quick questions.
While working on different tasks, my workflow was usually quite similar and structured: First I created an issue for discussing a new feature. Usually implementing a new feature meant to specify new RPC commands. The discussions really helped to think about whether the proposed idea actually works but also if it could be used for other, future features. Once the feature was planned out enough, I started implementing it. This also included writing tests and documentation. After that the pull request would get reviewed and I would perform suggested changes. This might take a few iterations but eventually the pull request would get merged.
Results and Lessons Learned
At the end of the summer, I was able to implement most of my goals. A detailed list of what I implemented can be found here. I provided advanced search and replace functionality as well as implemented all of these in the xi-mac frontend. I also implemented a work-in-progress for multiple search queries. I am planning to work on this feature more in the future (if time permits), however since it is quite unusual, powerful and not really available in other editors I have to think about how to make it accessible to users. This means I have to implement a clear user interface as well as reasonable behaviour (eg. when replacing multiple matches, …). Nevertheless, I am quite excited about the outcome and hope that some time in the future multiple search queries will be part of xi editor.
Xi editor with search and replace interface
Xi editor with interface for multiple search queries
Overall, Google Summer of Code helped me to get deeper involved in open source. Although I made some small contributions to some open-source projects before, this way I could work on something bigger. It also helped me in improving my skills in using Rust and Swift but also in working on a relatively large code base. Of course, it was also a great way to improve communicating ideas and working together with other people around the world.
In the future, I am planning to continue contributing for xi editor and perhaps also other open source projects. I will also try to not only write code but also do some code reviews to provide feedback to others. I think that this might be a great way to learn even more from others. I also hope that I will continue working with Rust not only on my own hobby projects but also on bigger codebases.
All in all, I would recommend anyone who is interested to try participating in Google Summer of Code. For me it was an amazing and extremely valuable experience.