===Profile Information
Name: Anmol Gupta
Email: anmolgupta1311@gmail.com
Github Handle: 6point022
Location: New Delhi, India
University: Indraprastha Institute of Information Technology, Delhi
Blog: medium.com/@anmolgupta1311
Typical Working Hours: Between 12 PM to 8 PM (UTC +5:30)
===Synopsis
**About the App**
The Wikimedia Commons Android app allows users to upload pictures from their Android phone/tablet to Wikimedia Commons. Commons is not only the image repository for Wikipedia, but an independent project that seeks to document the world with photos, videos and recordings.
**About the project**
The project is about adding a leaderboard in the app based on the user’s edits through the Commons app. This is a step towards gamification of the app. This will motivate users to make even more contributions by adding an element of competition.
**Mentors**
Vivek Maskara. (@maskaravivek) and Nicolas Raoul (@Nicolas_Raoul)
===Deliverables
**Community Bonding Period**
Tasks
- Bond with mentors and other contributors.
- Get more familiar with the app architecture.
- In the above process, open new issues on GitHub.
- Familiarise myself with Wikimedia APIs and note any APIs that could be used for the project.
Deliverables
- A blog post about my experience so far.
**Week 1**
Tasks
- Change activity to have two tabs. Users should be able to either tap to check the other tab or swipe the screen.
- The first tab will have a fragment to display the level, which is the current Achievements activity.
- The second tab will have a fragment to show the leaderboard that we will be implementing.
- Start understanding the implementation of APIs in the commons-misc repo to prepare for next week.
Deliverables
- Leaderboard screen in the Achievements activity.
**Week 2**
Tasks
- Designing and implementing the Python APIs for calculating and displaying ranks of the User (all time, monthly, weekly). We can use the existing API in commons-misc repo to count user edits.
Deliverables
- API for calculating and displaying ranks of the user.
**Week 3**
Tasks
- Discuss and decide what we want to show for the user’s avatar--one of their top photos or a photo they choose etc. In a later week, we will add the option to let users change their avatar.
- Display the user's name, avatar and rank on the Leaderboard screen using the new API that we created.
Deliverables
- Leaderboard screen that displays the user’s name, avatar and rank.
**Week 4**
Tasks
- Designing and implementing the APIs for displaying leaderboard (user list) based on 2 parameters - duration (all time, monthly, weekly), type (uploads, nearby, images used).
- Design and implement the schema for the new database that will be hosted on Toolforge. We don’t want to calculate the statistics every time, so we can use the API to fetch data from here.
Deliverables
- Python API that can fetch the leaderboard with all the parameters.
- Database on Toolforge to store leaderboard information.
**Week 5**
Tasks
- Prepare for first evaluation
- Use the APIs to fetch leaderboard (user list) based on uploads via mobile app (all time) and display it on the Leaderboard screen.
- Since we will be presenting a lot of data, I will discuss and finalize the best UI to present this.
- I will also discuss and finalize things like how much data we want to show at a time, how the user's own rank will be shown and how the user can see top ranks.
Deliverables
- First evaluation
- Leaderboard screen that will present the leaderboard data fetched by the API.
**Week 6**
Task
- Add unit tests for the two APIs that we created.
Deliverables
- Unit tests for the APIs.
**Week 7**
Tasks
- Use RecyclerView to add pagination in the leaderboard screen to load more users on scrolling down.
Deliverables
- The leaderboard screen that now shows more users on scrolling.
**Week 8**
Tasks
- Add duration filters in the leaderboard screen and show results based on the selected filter (weekly, monthly, yearly, all time). Change the UI to show and select filters.
- Discuss and finalize how we want to present the duration filter. We can have a spinner that is often used by other apps for duration filters or just stick with three buttons at the top.
Deliverables
- Leaderboard screen that will now have the option to select a duration filter and display the results accordingly.
**Week 9**
Tasks
- Change the UI to show 3 different results (based on uploads, nearby, used)--add 2 more tabs.
Deliverables
- Leaderboard screen with three tabs to see results of different types (uploads, nearby, used).
**Week 10**
Tasks
- Prepare for second evaluation
- Tapping the name of a user in the leaderboard should open the gallery of that user's pictures as a browser URL. If anyone can open a user’s profile from there, this will remove the sense of anonymity and prevent cheating.
- Write unit tests for this functionality.
Deliverables
- Second evaluation
- The leaderboard screen that opens a user’s profile on tapping their name.
- Unit tests for this functionality.
**Week 11**
Tasks
- Add an option for users to change their avatar to one of their uploaded photos, and store the user's avatar in cache for a month. This option should be open to users above a certain level since we want to discourage selfies.
Deliverables
- An option in the leaderboard screen for users above a certain level to change their avatars.
**Week 12**
Tasks
- Write unit tests for any remaining activities, add documentation and fix any bugs.
- Manual testing on different devices.
Deliverables
- Completed remaining tasks.
- A report of the manual tests.
**Week 13 (Final Week)**
Tasks
- Prepare a presentation for the final evaluation.
- Fix any remaining bugs or changes based on the community feedback.
Deliverables
- Final evaluation
- Final blog post
===Participation
- I will remain active on IRC and Hangouts during my working hours.
- I will remain active on the Google group.
- I will write weekly blogs on Medium.
- I will use Github to manage bugs and tasks
===About Me
**Personal Background**
I am a second year student pursuing B.Tech. in Computer Science and Social Sciences at Indraprastha Institute of Information Technology (IIIT), Delhi.
**How did you hear about this program?**
Through the events organized by the software development club (Byld) of our college to introduce students to open-source and programmes like GSoC.
**Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?**
I will have interviews for internships in July and my college will open in the first week of August. None of these will affect my schedule. However, due to the COVID-19 lockdown, there may be some changes in the schedule of the current and the following semester, the students are not aware of it as of now. If I am unable to work during a weekday, I will make up for that on the weekend and make sure I am able to devote at least 40 hours a week. If I am unable to devote sufficient hours in a week, I will definitely make up for those in the following weeks.
**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, I am only applying for this project in GSoC.
**What does making this project happen mean to you?**
My first contribution to open-source was in Digital Ocean’s Hacktoberfest 2019. I quickly realized that I will have to pick up a technology and stick to it to make more impactful contributions. I decided to learn Android development because I was amazed by the never ending possibilities of things that can be created for a small device in someone’s pocket.
With the few PRs and issues I have created, I have learnt a lot. I believe the exposure and experience I will get by working on this project will be invaluable. I get absolutely thrilled every time my PR is merged because the sense that “my opinion mattered, someone reviewed my code, accepted it and now everyone would use it,” is something that really excites me. The community is very active and everyone is very friendly and helpful. I would love to connect with the Wikimedia Foundation through this app, and hopefully more projects in future. I also plan to keep contributing to the app even beyond GSoC.
===Past Experience
I have been contributing to the Commons app since January 2020.
I have opened 9+ issues and 6+ PRs.
Link to issues: https://github.com/commons-app/apps-android-commons/issues/created_by/6point022
Link to PRs: https://github.com/commons-app/apps-android-commons/pulls/6point022
Apart from this, I have made many Android apps in the process of learning.
I won first prize for an SMS filtering app, [[ https://github.com/6point022/SMSieve | SMSieve ]], that I created with a team in an intra-college Hackathon.
I made a WhatsApp-like chatting app and a Weather App.
I have contributed to two other open-source Android projects, [[ https://github.com/Swati4star/Images-to-PDF | Images to PDF ]] and [[ https://github.com/josharsh/Finance-Manager | Finance Manager ]].
I am also very comfortable with Java and object-oriented programming, I created a [[ https://github.com/6point022/plants-vs-zombies/settings | clone of the game Plants vs. Zombies ]] using JavaFX for the Advanced Programming course in my college.