Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Report for Google Summer of Code - 2021

gsoc_x_kiwix

Work Report for Google Summer of Code 2021 📑

About me and the project ℹ️

I am Mahak Porwal and I worked on improving WP1 selection tool with Kiwix. My project was aimed at improving and extending selection base solution infrastructure of WP1 selection tools. The key goals of the project were -

  • Adding oauth using Wikimedia API for WP1 login.
  • Adding backend endpoints and methods for saving simple lists in database and S3, validation of lists, fetching projects using mediawiki API.
  • Adding frontend for creating lists and displaying lists of users.
  • Adding basic infrastructure for creation of list builder modules (WIP).

The work I did 📝

I was a newbie in open-source and in search for projects matching my tech stack I found zimfarm to be an interesting project and spent 3-4 months understanding codebase and solving issues. Gradually I got inclined towards WP1 where I spent some time on understanding its codebase and solving issues while simultaneouly preparing my GSoC proposal. After getting selected for GSoC, I started off with adding oauth using mediawiki credentials to WP1 and adding authentication to some of WP1's important backend routes like manual-updates. Here's a quick summary of the work I did in each of them.

Adding OAuth

Authentication was not present when I started working on WP1. Here's a list of the key features I added -

  • Added oauth using mediawiki API for identification of user for creation and display of particular user's list of selections.
  • Added authentication on expensive processes like manual-update of projects.
Here's the issues I've solved on oauth -
Here's the PRs I made on oauth -

Backend Routes

Added backend routes and methods(logic) required for creating and display of lists. Here are some features for which I added backend routes.

  • Validation of articles in lists which returns invalid articles along with the error to frontend.
  • Fetch wikimedia projects to allow users to select project for the list of articles.
  • Saving lists details in databse.
  • Saving article lists (selections) in S3.
Here's the issues I solved for backend routes -
Here's the PRs I made for backend routes -

Frontend

Components for creating and displaying lists.

  • Created component CreateSimpleList for creating simple lists, form for selecting mediawiki projects fetched from backend, adding list name and list of articles which undergo validation on saving.
  • Created component MyLists which displays cards including list details such as project name, list name, list url which can be copied or downloaded in various content types such as .XLS, .TSV .
Here's the issues I solved for frontend -
Here's the PRs I made for frontend -

Future Work

Talking about the future work that can be done, here's a list of things to continue the GSoC project in general (you can have a look at open issues with GSoC tag) -

My personal Experience 😃

I had a wonderful time coding with the fantastic and helpful community at Kiwix. My mentors carefully reviewed my code — they patiently explained the mistakes I had made, and helped me shape my code to hit the standard required for it to be merged in. In short, I can definitely say my coding skills have improved exponentially over the three months of GSoC.

The single biggest difference between contributing to an organization and a personal project is that the organization’s product is used by thousands of people around the world. The existing code base was created by someone else, and the code I contribute should be understandable to another person who might work on it in the future. Writing clear documentation, structuring your code to meet standards, and making sure your changes does not break anything else was a truly educational experience — for a person who was used to tearing down and hastily refactoring large chunks of code to make room for new features and write little to no documentation for my hobby projects ‘till then.

I'm super happy that I got a chance to be a part of GSoC. It has provided me the opportunity to meet and interact with awesome people on a daily basis, which wouldn't have been possible otherwise. I really liked the work that I did, the way GSoC was organized, and the overall experiences that I had. It has provided me a great opportunity to learn through awesome tasks and challenges that turned out to be great learning experiences.

Talking about Kiwix, the organization I worked for, I really love the work they're doing and how it impacts the society at large by making content more accessible. I met and interacted with awesome people, did some cool stuff, and I feel great to be a part of the community.

Special Thanks

I do not want to finish, before honouring my mentors @audiodude and @kelson; @rgaudin. They always reacted quickly when needed and they always gave me the right hints, when I had difficulties understanding the specification or the code base. Especially the work with @audiodude was very enjoyable and I look forward to a lot more interesting discussions in future pull requests and issues. @kelson has been always there for me, The timezone difference was definitely a bonus and not a malus. I also want to thank all other collaborators and friends for giving me this awesome opportunity and supporting me in this whole journey.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment