Google Summer of Code 2018 with Debian - Final Report
Posted on Mon 13 August 2018 in GSoC
Three weeks of Google Summer of Code went off to be life-changing for me. This here is the summary of my work which also serves as my Final Report of Google Summer of Code 2018.
Preperations
My project is Wizard/GUI helping students/interns apply and get started and the final application is named New Contributor Wizard. It originated as the brainchild and Project Idea of Daniel Pocock for GSoC 2018 under Debian. I prepared the application task for the same and shared my journey through Open Source till GSoC 2018 in two of my blogs, From Preparations to Debian to Proposal and The Application Task and Results.
Project Overview
New Contributor Wizard is a GUI application build to help new contributors get started with Open Source. It was an idea to bring together all the Tools and Tutorials necessary for a person to learn and start contributing to Open Source. The application contains different courseware sections like Communication
, Version Control System
etc. and within each section, there are respective Tools and Tutorials.
A Tool is an up and running service right inside the application which can perform tasks to help the user understand the concepts. For example, encrypting a message using the primary key, decrypting the encrypted message using the private key, and so on, these tools can help the user better understand the concepts of encryption.
A tutorial is comprised of lessons which contain text, images, questions and code snippets. It is a comprehensive guide for a particular concept. For example, Encryption 101, How to use git?, What is a mailing list? and so on.
In addition to providing the Tools and Tutorials, this application is build to be progressive. One can easily contribute new Tutorials by just creating a JSON file, the process of which is documented in the project repository itself. Similarly, a documentation for contributing Tools is present as well.
Project Details
-
GSoC Project Page - GSoC Projects #5056989357408256
-
Project Respository - New Contributor Wizard on Debian Salsa
-
Issue/Bug Tracker - New Contributor Wizard on Debian Redmine
-
Communication - Private thread with mentors for daily updates, Debian Outreach Mailing List for weekly updates and Jitsi Meet for conference calls.
Programming Language and Tools
For Development
For Testing
Environment
Version Control System
For pinned dependencies and sub-dependencies one can have a look at the Pipfile and Pipfile.lock
My Contributions
The project was just an idea before GSoC and I had to make all the decisions for the implementation with the help of mentors whether it was Design or Architecture of the application. Below is the list of my contributions in shape of merge requests and every merge request contains UI, application logic, tests, and documentation. My contributions can also be seen in Changelog and Contribution Graph of the application.
Sign Up
Sign Up is the first screen a user is shown and asks for all the information required to create an account. It then takes the user to the Dashboard with all the courseware sections.
Merge request - Adds SignUp feature
Redmine Issue - Create SignUp Feature
Feature In Action (updated working of the feature)
Sign In
Alternate to Sign Up, the user has option to select Sign In to use existing account in order to access the application.
Merge Request - Adds SignIn feature
Redmine Issue - Create SignIn Feature
Feature In Action (updated working of the feature)
Dashboard
The Dashboard is said to be the protagonist screen of the application. It contains all the courseware sessions and their respective Tools and Tutorials.
Merge Request - Adds Dashboard feature
Redmine Issue - Implementing Dashboard
Feature In Action (updated working of the feature)
Adding Tool Architecture
Every courseware section can have respective Tools and Tutorials. To add Tools to a section I devised an architecture and implemented on Encryption
to add 4 different Tools. They are:
- Create Key Pair
- Display and manage Key Pair
- Encrypt a message
- Decrypt a message
Merge Request - Adding encryption tools
Redmine Issue - Adding Encryption Tools
Feature In Action (updated working of the feature)
Adding Tutorial Architecture
Similar to Tools, Tutorials can be found with respect to any courseware section. I have created a Tutorial Parser, which can take a JSON file and build GUI for the Tutorial easily without any coding required. This way folks can easily contribute Tutorials to the project. I added Encryption 101
Tutorial to showcase the use of Tutorial Parser.
Merge Request - Adding encryption tutorials
Redmine Issue - Adding Encryption Tutorials
Feature In Action (updated working of the feature)
Adding 'Invite Contributor' block to Tools and Tutorials
In order to invite the contributor to New Contributor Wizard, every Tools and Tutorials menu display an additional block by linking the project repository.
Merge Request - Inviting contributors
Redmine Issue - Inviting contributors to the project
Feature In Action (updated working of the feature)
Adding How To Use
One of the courseware section How To Use
help the user understand about different sections of the application in order to get the best out of it.
Merge Request - Updating How To Use
Redmine Issue - Adding How To Use in the application
Feature In Action (updated working of the feature)
Adding description to all the modules
All the courseware sections or modules need a simple description to describe what the user will learn using it's Tutorials and Tools.
Merge Request - Description added to all the modules
Redmine Issue - Add a introduction/description to all the modules
Feature In Action (updated working of the feature)
Adding Generic Tools and Tutorials Menu
This feature allows the abstraction of Tools and Tutorials architecture I mentioned earlier so that the Menu architecture can be used by any of the courseware sections following the DRY approach.
Merge Request - Adding Generic Menu
Redmine Issue - Adding Tutorial and Tools menu to all the modules
Tutorial Contribution Doc
A tutorial in the application can be added using just a JSON file. As mentioned earlier, it is made possible using the Tutorial Parser. A comprehensive ocumentation is added to help the users understand how they can contribute Tutorials to the application for the world to take advantage of.
Merge Request - Tutorial contribution docs
Redmine Issue - Add documentation for Tutorial development
Tools Contribution Doc
A tool in the application is build using Kivy lang and Python. A comprehensive documentation is added to the project in order for folks to contribute Tools for the world to take advantage of.
Merge Request - Tools contribution docs
Redmine Issue - Add documentation for Tools development
Adding a License to project
After having discussions with the mentors and a bit of research, GNU GPLv3 was finalized as the license for the project and has been added to the repository.
Merge Request - Adds License to project
Redmine Issue - Add a license to Project Repository
Allowing different timezones during Sign Up
Sign Up feature is refactored to support different timezones from the user.
Merge Request - Allowing different timezones during signup
Redmine Issue - Allow different timezones
All other contributions
Here's a list of all the merge request I raised to develop a feature or fix an issue with the application - All merge request by Shashank Kumar
Here are all the issues/bug/features I created, resolved or was associated to on the Redmine - All the redmine issue associated to Shashank Kumar
Packaging
The application has been packaged for PyPi and can be installed using either pip
or pipenv
.
Package - new-contributor-wizard
Packaging Tool - setuptools
To Do List
- Add more tools and tutorials to the project
- GUI popup for text manipulation in input boxes throughout the application
- Packaging the application for Debian after the Kivy package for python3 is upgraded
Weekly Updates And Reports
These report were send daily to private mentors mail thread and weekly on Debian Outreach mailing list.
Talk Delivered On My GSoC Project
On 12th August 2018, I gave a talk on How my Google Summer of Code project can help bring new contributors to Open Source during a meetup in Hacker Space, Noida, India. Here are the slides I prepared for my talk and a collection of photographs of the event.
Summary
New Contributor Wizard is ready for the users who would like to get started with Open Source as well as to the folks who would like to contribute Tools and Tutorials to the application as well.
Acknowledgment
I would like to thank Google Summer of Code for giving me the opportunity of giving back to the community and Debian for selecting me for the project.
I would like to thank Daniel Pocock for his amazing blogs and ideas he comes up which end up inspiring students and result in a project like above.
I would like to thank Sanyam Khurana for constantly motivating me by reviewing every single line of code which I wrote to come up with the best solution to put in front of the community.
Thanks to all the loved ones who always believed in me and kept me motivated.