=Profile Information
---
IRC nickname on Freenode: megha213
Github Profile: [https://github.com/MeghaSharma21](https://github.com/MeghaSharma21)
LinkedIn Profile:[ https://www.linkedin.com/in/megha-sharma-81834012a/](https://www.linkedin.com/in/megha-sharma-81834012a/)
Location (country or state): Chandigarh (UT), India
Typical working hours (include your timezone): 12:00 - 02:00 (UTC+5:30)
=Synopsis
---
> Short summary describing your project and how it will benefit Wikimedia projects
As we all know, Wikipedia is a community-powered project whose quality and quantity is largely dependent on the contributors. But sometimes people aren’t able to find the correct set of articles which need work and are of their interest. Also, since Wikipedia is so big and vast, newcomers usually get lost into it.
Hence, I’ve taken up this project of ‘**Building a worklist tool for campaigns and in-person editing events**’.
With the help of this tool, we’d be able to create, share and modify worklists which’ll facilitate collaboration on articles which need work. Also, this tool will enable people to work on articles which fall in their areas of interest. All in all, we’ll be able to encourage more contributions by providing an intermediate platform.
Wikipedia community will be benefited because of this project in the following ways:
* By using this tool, people will be able to collaboratively work on articles that need contributions.
* The worklists present on the tool can be used for campaigns, in person editing events or other similar activities.
* Through this tool, people can look for articles that fall in their area of interest and contribute to them.
* Also, this tool can provide a good starting point to the newcomers.
> Possible Mentor(s)
[@Surlycyborg](https://phabricator.wikimedia.org/p/Surlycyborg/),[ @Harej](https://phabricator.wikimedia.org/p/Harej/)
> Have you contacted your mentors already?
Yes
==Deliverables
---
> Describe the timeline of your work with deadlines and milestones, broken down week by week. Make sure to include time you are planning to allocate for investigation, coding, deploying, testing and documentation
During the internship, I’ll be following the Agile Model of SDLC. The whole tenure of internship will be broken down into sprints of 2 weeks each. Each sprint will consist of one full SDLC until and unless it’s an epic. Hence, continuous testing and documentation will be done.
For every task, there will be an **Acceptance Criteria (AC)**. Only after it is satisfied, task will be considered complete.
** For coding tasks AC will be : Proper UTs should be in place. Code review and beta testing should be done.
** For design tasks AC will be : Design document should adhere to the requirements and should be approved by the mentors.
** Usability Testing will be performed with representative users. After that only, the milestone will considered as complete.
===Detailed Solution
The solution that I’ve designed has been explained in detail below:
Database schema for the tool has been framed as a microtask. Link for the same is : https://github.com/MeghaSharma21/WorklistTool-GSoC-2018/pull/1
I’ll be using Django for the backend and React.js for the front end.
The tool will have 5 web pages -
* ** Main page **: On this page, user will be provided with these options - 1. Create Worklist, 2. Open My Worklists and 3. Search Worklists. (1 and 3 will only be for logged-in users.)
* ** Create Worklist page **: This page will contain a form where the user needs to provide the following details for creating a worklist - 1. Name, 2. Theme, 3. Description and 4. Option to add articles to the list.
I’ve thought of having some pre-populated themes under which different lists can be categorized. This will make searching of lists easier. This themes can be decided in the requirements phase with the help of users.
* ** Open my lists & Search lists page: These will be similar pages except in the first one only user’s lists will be retrieved from the DB.
In this, the lists will be populated in a tabular format where each row will contain the list’s name, no. of articles under it and no. of editors working on it.
On this page, functionality to sort by name, date_created, date_updated, no. of articles and no. of editors will be provided.
Also, user will be able to filter the lists by name and theme.
* ** Lists page **: On this page list of articles within a worklist will be listed in a tabular format. Each row will contain name of article, average page views, status and effort estimated to complete the task.
Status can be of 3 forms - Open (need to be worked upon), Claimed (is being worked upon) and Closed (has been worked upon).
Effort can be - Low, Medium and High. So that people can judge how much effort do they need to put in to complete the task.
On this page, functionality to sort by page views and date_updated will be provided.
Also, user will be able to filter the lists by name, status and effort.
* ** Articles page **: On this page, details of selected article will be shown which will include description of article (which will be editable), size of article, projects of which it is a part of, grade (like FA, A, GA etc) and average page views per day.
Also, if the article is a claimed one, we can show the progress bar indicating how much work has been done. The progress will be marked by the user who has claimed to work on the article.
** Note **: To change the status of the article or change it’s progress, user needs to be logged in.
===Timeline:
---
`Apr 24 - May 14`
- Community Bonding Period
- Setting up environment on toolforge
- Setting up *CI on Travis* for Git repository
- Understanding Wikimedia’s current tools that are of similar type. It’ll help me in identifying the areas of improvement
- Studying similar existing tools that don’t belong to Wikimedia.
- Defining the scope of the project after extensive discussions with the mentors
- Identifying and framing initial set of requirements
**Note**: As I’m already familiar with MediaWiki API, toolforge, git and Wikimedia’s database structure, I’d get a headstart and would be easier for me to get started.
`May 14 - May 28 (Week 1,2)`
> Task 1 of this Sprint
- Identifying and contacting users who would be typically interested in this type of tool
- Getting feedback on the initial requirements draft from the users and iterate over it
- Finalizing the exact requirements and breaking them into phases/module
(Acceptance Criteria: Users should be satisfied with the final requirements.)
> Task 2 of this Sprint
- Preparing design mockups for the UI
**Note**: This task will help us to gain clarity about the functionality that we need to implement.
(Acceptance Criteria: Design document should adhere to the requirements and should be approved by the mentors.)
`May 28 - June 10 (Week 3, 4)`
- The major focus during this sprint will be to implement the backend functionality with minimal UI.
- Decide upon the database to be used and then finalize the database schema.
- Write the DB calls
- Write module for creating worklists
- Write module for importing Petscan queries.
`June 10 - June 24 (Week 5,6)`
- Write module for describing worklists created and being worked upon by the user
- Write module for finding worklists.
- Implement filtering and sorting mechanism for lists and articles page
`June 24 - July 8 (Week 7,8)`
- In this sprint I’ll be working upon the stretch goals
- Write module to draw lists of articles from other sources like CSV and .txt files
- Write module for exporting information about the list for use in other tools
`July 8 - July 22 (Week 9,10)`
- Implementation of complete UI part
- In this sprint, optimizations like lazy load will also be included
`July 22 - Aug 12 (Week 11,12)`
- Implement auto-refresh functionality which will make real-time updation of data possible.
- Integrate OAuth with the tool. (It wasn’t included before so that the testing can be carried out for other users. OAuth would have restricted us to check the results only for ourselves only.)
- Finish up pending reviews, UTs and documentation, if any.
`After Internship`
Even after internship, I plan to lookout for new and challenging opportunities being offered by Wikimedia community. I will continue to maintain and contribute to the development of this tool.
===Milestones:
---
* April:
* Gained familiarity with existing tools and formats
* Defined scope and requirements of the project
* May:
* Validated requirements from users
* Prepared design mockups
* Finalized database schema
* June:
* Finished back-end implementation of modules for creating worklists, importing petscan queries, searching worklists and finding user’s lists
* Added functionality for filtering and searching worklists
* Written code for 2 stretch goals
* July - August:
* Finished UI for the tool
* Integrated OAuth with the tool
* Added auto-refresh functionality
* Done with final release of the product
=Participation
---
> Describe how you plan to communicate progress and ask for help, where you plan to publish your source code, etc
* I’ll be maintaining the code base using Git. Hence, PRs will be used to gather feedback from the mentors on the same.
* For sharing status and discussing issues, I’ll be using Phabricator. Other than this, IRC and Gmail will act as other communication mediums. I’ll be active on IRC during my working hours.
* Also, I’ll be participating in scrum meetings and sprint planning. These meetings will help me in knowing the community better. And to discuss tasks and issues, I’ll be having one-on-one once in every two weeks with my mentors.
* I’ve planned to use meta wiki user page to keep a record of my progress in a shareable format. I’ll be updating it every week.
* I’ve also thought to write a blog about my experiences and challenging work that I’ll be doing as a part of this project. I plan to write it once in every 2 weeks.
=About Me
---
===Tell us about a few:
> Your education (completed or in progress)
I am a final year computer science undergraduate student at PEC University of Technology, Chandigarh, India. I am a Computer Science enthusiast, because it gives me the power to reach billions and transform their lives. I fell in love with mathematics and problem-solving in primary school and that love drives my programming. I enjoy Coding and Building new things.
For reference to my skill set and past projects,[ this](https://www.dropbox.com/s/d64b7e95sz3eiu0/MeghaResume2018.pdf?dl=0) is my resume. (Majorly, these include expertise in languages like Python, HTML/CSS, Javascript, Java; frameworks like Django, Spring and cloud computing platforms like AWS, Google Cloud.
> How did you hear about this program?
I got to know about this from my college technical society.
> Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?
Till August 1 I will be having holidays, so I will be completely free. After that I will be joining my job in Amazon after graduation.
> We advise all candidates eligible for Google Summer of Code and Outreachy to apply for both programs. Are you planning to apply to both programs and, if so, with what organization(s)?
No
> What does making this project happen mean to you?
Wikipedia has always been an ultimate destination when it comes to making college assignments or reading about a topic or finding answers to some questions.
What google is to searching, Wikipedia is to knowledge. And Wikipedia is nothing without its community. If I’ll get an opportunity to make a difference to the community through my tool, the happiness that I’ll get out of it will be immeasurable.
Whatever I've done so far in my computer science career has only reached a maximum of 500 people. I want to build something which will impact millions, including my friend sitting next to me. And this project gives me that opportunity, and at the same time, challenges me to learn and grow. Hence, I would love to solve this hard and complex problem.
=Past Experience
---
> Describe any relevant projects that you've worked on previously and what knowledge you gained from working on them. Describe any open source projects you have contributed to as a user and contributor (include links). If you have already written a feature or bugfix for a Wikimedia technology such as MediaWiki, link to it here; we will give strong preference to candidates who have done so
===Industry Experience:
---
**Software Engineering Intern , Amazon, Bengaluru : Jan 2017 - July 2017**
* I worked with the tech team that supported the retail business of Amazon.
* I built a visualization platform that quantified a team’s performance with the help of metrics. The visualizations provided an insight into the data which eventually helped in increasing a team’s productivity.
* I used plethora of AWS technologies like QuickSight, Redshift, DynamoDB, Lambda etc for making this tool. Open source tools like Kibana were used to create visualizations.
* I made webapp for the visualization platform using JSP, HTML/CSS, Javascript and Integrated it with my team's website.
* Multiple reviews were held with senior leaders and clients and the platform improved with multiple iterations, which in turn improved my coding, testing and leadership skills.
* I got pre-placement offer from Amazon for my exemplary work during the internship.
**Researchshala - www.researchshala.com **
* Researchshala is an online platform to connect professors to research-interns, helping them with their research projects
* I built this website in Django, hosting on AWS for the budding startup of my college
**Research-Intern at IIT Delhi**
* I was among the top 0.33% students all over India who got selected for Student Research Fellowship Program, IIT-Delhi.
* At IITD, I was a Research Fellow under Asst. Prof. Maya Ramanath.
* I built a technical knowledge base to establish relationships between technical concepts by using Wikipedia as the input corpus and then organised relations into a hierarchical structure.
* For this, I'd set up Hadoop for using PATTY, a MPI resource and maintained database using PostgreSQL and MongoDB.
===Self-Projects:
---
**Health Monitoring Application using Brain Computer Interface**
* I built an android app to analyse and improve user’s concentration and meditation levels.
* The state of the user’s brain was monitored using Muse, an EEG device.
* Binaural beats were used to improve the current levels of concentration and meditation.
**Accessing and Extracting Information from the Hidden-Web**
* Objective was to build a database of publications and research papers of foreign academicians of Indian origin.
* For this, I built a crawler that explored the Deep Web in a targeted manner after receiving a list of names of academicians as input.
* Libraries like BeautifulSoup, Requests and JSoup were used for fetching and structuring the results.
* This Project was funded by NSTMIS, a division of Department of Science and Technology, India.
Link: https://github.com/MeghaSharma21/AccessingDeepWeb
**Intelligent Subtraction Tutor**
* I built a chatbot that is capable of teaching subtraction to a child by first judging its current knowledge level and then teaching it accordingly.
* Facebook Messenger API was used to host the bot on Modulus, having Facebook messenger as the interface.
* ai.wit was used to train the bot.
Link: https://github.com/MeghaSharma21/intelligent-subtraction-tutor
**Password Based Door Lock**
* I built a password-based door-lock system, integrated with IR based motion sensor using 8051 microcontroller
* The microcontroller was microprogrammed in C language.
Link: https://github.com/MeghaSharma21/Password-Based-Door-Lock
==Open Source contributions:
---
1. Developed a user contribution summary tool named **WikiCV** for Wikipedia under **Outreachy Round 15**. This tool summarizes the user contributions in an automated manner and present them in a CV-like manner. It was developed with the intent of creating a powerful force through the tool - 1. to draw new editors to the project; 2. allow existing editors to spend more time on it and 3. get a professional edge by showing off their contributions.
Link for the tool: https://tools.wmflabs.org/outreachy-wikicv/wiki-cv/Tgr/
Link for the repository: https://github.com/MeghaSharma21/WikiCV
Link for sprint board: https://phabricator.wikimedia.org/tag/wikicv/
2. Developed a **Sublime Package** for C++ code snippets, which contained templates for algorithms commonly used in competitive programming. This was developed with the intent to help programmers solve questions with greater speed and accuracy. Link: [https://github.com/MeghaSharma21/CPP_Competitive_Programming_Sublime_Snippets](https://github.com/MeghaSharma21/CPP_Competitive_Programming_Sublime_Snippets)
3. Developed an **Atom Package**, which has been developed for competitive programmers on similar lines like the aforementioned sublime package. Link: https://github.com/MeghaSharma21/CPP_Competitive_Programming_Atom_Snippets
Both the packages are available with their respective package managers, having **500+ installations. **
4. Created a tool on toolforge which takes in the Wikipedia username and shows recent edits by the user. The results have been presented in an eye-catchy way, showing the timestamp, comment, title, article-size and diff-link of the edit. For this, I made an ajax call to the mediawiki database to fetch recent edits of a user and used Javascript and CSS to present the results.
Link to Code: https://github.com/MeghaSharma21/outreachy-wikimedia-recent-user-edits-tool/tree/review
Link to Tool: https://tools.wmflabs.org/outreachy-recent-edits-tool/
5. Created a tool on toolforge to show the rank of a user based on no. of edits in Hindi Wikipedia.
The rank and percentile of the user is presented along with the graph showing distribution of all the users according to number of edits which adds more clarity as to where the user stands. For this, I developed a Django app and the User table was taken as a data source.
Link to Code: https://github.com/MeghaSharma21/outreachy-wikimedia-user-rank-tool/pull/1
Link to Tool: https://tools.wmflabs.org/outreachy-user-ranking-tool
6. Created a tool on Toolforge that shows the contributions of a user in terms of no. of pages edited and created in the present year.
The contributions have been shown in the form of a timeline similar to the Github’s contribution timeline.
Link to tool: https://tools.wmflabs.org/outreachy-user-contribution-tool/
Link to code: https://github.com/MeghaSharma21/outreachy-wikimedia-user-contribution-tool/pull/1
==Micro-tasks Completed:
---
Microtask 1: Designed the database schema for the tool. It has been shown in the form of a class diagram as in Django every table is a class. Link: https://github.com/MeghaSharma21/WorklistTool-GSoC-2018/pull/1
=Any Other Info
---
=====Add any other relevant information such as UI mockups, references to related projects, a link to your proof of concept code, etc
Through my Outreachy Internship with Wikimedia, I've got pretty familiar with the Wikimedia community and tools. Also, the technology stack used in WikiCV is pretty much same as we would want to use for this tool. All this will give me a head start.