- GSoC 2018: A new performance-focused urlparse library for Scrapy
- GSoC 2018: Developing a replacement library for urllib
- GSoC 2018: Testing Rust-url, Chromium-gurl, uriparser
- GSoC 2018: Replacing urlparse progress (Python libraries)
- GSoC 2018: How to profile a piece of code
- GSoC 2018: Building a benchmarker for components that use urllib.parse
- GSoC 2018: First week of Community Bonding period
- GSoC 2018: The first blog post for Google Summer of Code
- GSoC 2018: My proposal for Google Summer of Code
- GSoC 2018: Application
- Setting up Wordpress on your local machine
GSoC 2018: Application
How I applied to Google Summer of Code 2018
2 years ago, as every freshman would do, I searched for a summer internships on Google and the first thing that popped up was the Google Summer of Code program. I was really confused and I did not know what GSoC was. In addition, the time I found out about GSoC was 2 weeks before the proposal submission is closed. Therefore, I did not have time to apply for any organization, but I knew about the program so I can apply for it in the future.
Basically, Google Summer of Code is a program hosted by Google in which students spend 3 months of summer writing code for open source communities. There are a lot of organizations participate in the program so that you can easily choose the project that fits your skill set. Personally, I love programming in Python and I have been practicing for technical interviews with Python so I chose Python Software Foundation to apply this year.
In 2017, I had a decent amount of experience in web development. Therefore, I planned on applying to an organization called Plone, which is a community that develop a web framework. The starting date for submitting the proposal was in March, and I also started my application at that time. However, developing using a web framework and developing a web framework itself are two different things. I felt really overwhelmed by the amount of code in the organization and I also only had about 3 weeks until the application deadline. Thus, I did not have enough time to even understand how to contribute to the project as well as understand the code of the project itself. All I tried to work on was writing a blog post about how to set up a Plone website (I did not even know how to set up the development environment on my machine!). My proposal was 4 pages long, containing mainly the expected timeline for the project. Of course, it did not get accepted haha.
In 2018, I learned my lesson last year. I started preparing for my GSoC application 2 months prior to the application date started. Since I was confident in Python, I decided to aim for Python Software Foundation. Web scraping sounded good to me, so I chose Scrapy as my goal for GSoC 2018. This time I also got confused since I had never contributed to an open source project before (my 2017 application was a disaster and I did not contribute anything). I tried contacting a lot of people to get more information about this, and I did contact a former GSoC student at Scrapy. He did the benchmarker for the Scrapy project on GSoC 2017. He gave me a lot of advice including reading more about the Python development environment and Scrapy Spider code. The Python development environment advice was huge since it is essential to any Python package project. I learned how to create a fresh Python virtual environment so I can test the code of the package that I modified. I found this article really useful because it helped me a lot in understanding how a Python package works and why I need to create a virtual environment for developing a package.
After understanding the basic concept of developing a Python package, I dived into the Scrapy code. It was huge at the beginning, but it got a lot easier in time since everything is connected and I just needed to spend more time reading it. When I felt like I was ready, I looked for the easy issue labeled** bug in Scrapy repository and I started diving into the code. First, I created a virtual environment, cloned the Scrapy repo and installed it by python setup.py develop**. I just needed to run this command every time I want to test the change I made to the project. The lesson here is you always want to create a pull request as soon as you think you can handle the bug, and that was what I did! I created a pull request right after my first commit so that people in the community can comment on my work and give me feedback on it. I did get some feedback from the project managers and learned a lot more about how open source community works. The first pull request lead to the second pull request, so on and so forth. I ended up having a decent amount of PR in different repositories within the organization.
During that learning process, I also contacted the mentors of the project that I was aiming for. One of the mentors was Konstantin and he was very helpful in discussing about the GSoC project. I understood more about the project that I was applying for. From understanding the goals of the project, I started writing code for the project right away (since you will need to elaborate on what you are going to do with the project in your proposal, might as well start it early so you know what you are doing, right?). That helped me a lot in writing my proposal since I already knew what I am supposed to do in the summer through the amount of code that I wrote. Last but not least, I sent my proposal draft to the mentors so they could take a look at it. I thought it was perfect at the beginning, but there were a lot of mistakes that I did not know of after Konstantin showed me :) So the sooner you have feedback on your proposal, the better it is.
The hardest part of the application was waiting. I had to wait 1 month before I could know whether my proposal was accepted or not. But the waiting time was worth it when I reloaded the Google Summer of Code dashboard at 12:00pm on April 23rd. Don’t be worried if your proposal is not accepted, everything has its first time. But I hope that your application will take less time than mine to get accepted (mine was basically 2 years haha).