Page MenuHomePhabricator

Improve feedback on how pictures uploaded to Commons are used
Closed, DeclinedPublic


Profile Information

Name: Meghna Gupta
University: Indraprastha Institute of Information Technology, Delhi
Branch: B.Tech, 2nd Year, Computer Science and Engineering
Location: New Delhi, India
IRC Handle: gupta-meghna64
Github: gupta-meghna64
Web profile:
Blog Link:
Hangouts Id: meghnagupta64
Typical working hours: I’m comfortable with anytime in the evening or late night (preferably after 11:30 a.m UTC/ 5:00 p.m IST)


About the app:

The Wikimedia Commons app is an open-source app created and maintained by grantees and volunteers of the Wikimedia community to allow the Wikimedia community to contribute content to Wikimedia Commons. Users can upload photographs taken directly from the app or from their device’s gallery which then goes directly to the organization’s database. Wikimedia commons accept only free content i.e images and media files that are not subject to any copyright. Users can upload multiple images at once and those can then be given various tags specific to them such as category, title, and description.

About the project

This project is aimed at:

  1. Giving the users an incentive to upload better quality pictures which will be done by providing users a feedback as to how their uploaded pictures are getting used.
  2. Detailed tutorial and quiz for users who did not understand the rules to upload media files properly.

These new features will be implemented in two phases:

Phase 1 (Feedback on how my pictures get used)
Why this?

  • Gives the user an incentive to use this app.
  • Users will be given statistics which will reflect upon the quality of pictures uploaded by them, for example:
    • Negative statistics indicate that the user needs to work to improve the quality of uploads.
  • Good positive statistics can be a push factor for users to upload more images on a regular basis.
  • Users will receive appreciation for good quality uploads in the form of various titles and awards.

What all can be done?

  • Have a profile page for the user which displays the basic details about the user including username followed by the below statistics.
  • List of statistics:
    • The number of featured images, i.e the images which received awards categorically.
    • The number of images edited by someone.
    • The number of images used on Wikipedia.
    • The number of times a particular image has been used.
    • The number of thanks received.
    • Number of received barnstars
  • Award the user titles on the basis of statistics and associate every title with a pictorial emoticon.

Formulated plan to go about this:

  1. Find if there are other better APIs to return the statistics than since this API does not return the number of barnstars received.
  2. Find a way to fetch barnstars received by the users if not received by the chosen API. If possible then display the images of those barnstars using MediaWiki API
  3. Designing the UI of the profile page and finding/designing good pictorial representations (awards/emoticons) to depict the user statistics.
  4. Implement async calls to the selected API to receive the user’s statistics.
  5. Populate the above-mentioned design with the obtained statistics.
  6. Debugging and testing on various real and virtual devices to test screen compatibility of the UI followed by code documentation.

Phase 2 (Tutorials and Quiz again for people who did not understand)
Why this?

  • Gives the user a chance to familiarize himself with the rules properly to prevent the banning of the account.
  • A quiz can be an interactive way to test if a user has gained the bare minimum knowledge to use the app.

What all can be done?

  • On the basis of the number of revert uploads by a user, if the number exceeds a defined threshold, force the user to watch the tutorial and then attempt an interactive quiz that tests whether the user has understood the correct rules or not.
  • The same can also be checked on the basis of the number of delete requests in user notifications.

Formulated plan to go about this

  1. Explore for APIs that can fetch the number of revert uploads of a user.
  2. If no relevant API is found, use MediaWiki API to calculate the number of deletion requests in the notifications of a user.
  3. Design wireframes for the quiz with pre-determined questions along with explanations to their answers. Keep it in a binary answer format, i.e answers to be yes/no in order to eliminate ambiguous responses. A few sample questions may include:
    1. Selfie: Yes or No
    2. A dark blurred Image: Yes or No
    3. Some Tourist place: Yes or No
    4. Screenshots: Yes or No
    5. Image downloaded from the internet: Yes or No
  4. Keep a count of revert uploads/deletion requests in the database of a user and check it each time on the launching of Contributions activity. If it exceeds a predefined threshold, pop up the tutorial screen and then link it to the quiz layouts.
  5. For every correct answer, display “Good work :-)”, and for every incorrect response, display an explanation of the correct answer.
  6. At the end of the quiz, reset the count and congratulate the user.
Have you contacted your mentors already?

Yes! I have contacted my mentors while working on various issues, communication via hangouts group and over a couple of emails.


Community Bonding and Pre-Outreachy Period
I’ve been contributing to Commons app for almost 1 and half months now. Hence, I am familiar and comfortable with various components of its codebase. However, the community bonding period would be vital for me as, during this time, I will-

  • Try to dig in deeper into MediaWiki APIs since I’ve worked on only 1 issue which had to be fixed using the relevant APIs. I’ll communicate with the mentors and also try to understand the differences in the APIs for the published app on play store and the beta version.
  • Get myself familiar with JavaRX. Although I am familiar with threading and making calls to Asynchronous tasks but since as an Android developer and an intern to this project, I’ll make sure that I know how to make full use of this impressive library.


  • Community bonding Report
  • Blog about experience

Week 1

  • General discussion with my mentor
  • Explore APIs that return the statistics of the images uploaded through Commons
  • Getting familiar with the API
  • Find if the number of barnstars received can be fetched via some API


  • Link to the API and a short blog about it
  • List of statistics that will be fetched
  • Weekly report and blog

Week 2

  • Design a profile page wireframe
  • Come up with a final list of titles given to a user
  • Design/Explore images corresponding to the titles and awards to users
  • Read about ApacheHttpClient(if time permits)


  • Profile page wireframe
  • Set of images corresponding to awards and titles
  • Weekly report and blog

Week 3

  • Add profile section to the navigation drawer
  • Design the XML Layout of the profile page corresponding to approved wireframe
  • Start with implementing async calls to fetch details in the mwApi class(Part 1)
    • Number of featured images
    • Number of thanks received
    • Number of images edited by someone


  • Profile section
  • Results of fetched data from API
  • Weekly report and blog

Week 4

  • Implementing async calls to fetch details (Part 2)
    • Number of images used on Wikipedia
    • Number of times a particular image has been used
    • Barnstars received- uncertain
  • Displaying the statistics on the user profile
  • Implement check conditions for the titles to be awarded on the basis of statistics obtained. For example: If the number of uploads done by a user > Threshold number of uploads (say 25), give the user a title - “Lightning Uploader”


  • Complete profile section
  • Weekly report and blog

Week 5

  • Integrating various designs of awards and titles on the profile screen as per the statistics
  • Buffer period - If everything works well till here, I’ll proceed on to testing otherwise will spend on covering up over the previous lags over this period. This might get extended to initial Week 6 as well.
  • Testing for screen compatibility and code documentation


  • Phase 1 completed
  • Detailed report on this phase and blog

Week 6

  • Buffer period (contd) - If phase 1 isn’t complete by now, I’ll spend some time from this week as well, to complete it. Otherwise with the consent of the mentor would proceed to phase 2.
  • Start with exploring APIs that can fetch the number of reverted uploads


  • Phase 1 commits
  • Weekly report and blog

Mid -Evaluation

Week 7

  • If no API is found that returns the number of reverted uploads, then extract the number of deletion request from the list of notifications using MediaWiki API by looking for the keyword "deletion" and then setting the notification type to "Deletion Request"
  • Design quiz wireframes and finalize the content of the quiz on a detailed discussion with mentor
  • Talk to mentor about finer details of deliverables


  • Quiz wireframes
  • The content of the quiz
  • The result of reverted uploads/deletion requests
  • Weekly report and blog

Week 8

  • Do the suggested changes to the wireframes and finalize them
  • Design the XML layouts of the quiz and incorporate corresponding functionalities
  • Modify the existing tutorial layouts with detailed information


  • Completed quiz and detailed tutorial layouts
  • Weekly report and blog

Week 9

  • Link the detailed tutorial to the quiz
  • On the launch of ContributionsActivity, check for the count of reverted uploads/deletion request, if it exceeds the decided threshold, pop up the tutorial and then start the quiz.
  • If the user passes the quiz, reset the counter, and launch ContributionsActivity, otherwise re-launch the tutorial again


  • Tutorial linked to the quiz
  • Final tutorial and quiz linked to the user’s statistics
  • Weekly report and blog

Week 10

  • Buffer Period - If everything doesn’t go as planned, I’ll be covering the lags in this period
  • Otherwise, I’ll work on error handling, refactoring, bug removal and code documentation
  • Work on reviews from other community members


  • Working phase 2
  • Weekly report and blog

Week 11 and Week 12

  • Buffer Week
  • Testing screen compatibility and other tests
  • Fixing bugs
  • Final code documentation
  • Final review


  • Phase 2 commits
  • Weekly report and blog
  • Final experience blog

If time permits

  • I'll like to add a points system to the commons app which is calculated on the basis of the number of uploads, the number of thanks received and other statistics. This can then be used to create a ranking among the users of the application.
  • Since, commons android application deals with uploading images to the database. It would be great if the image quality could be enhanced using image processing tools and we could recognize the image sentiments using image recognition libraries. In continuation of the discussion in #75, this can lead to image categorization directly from the image recognition results. This can be also be then used to detect images that contain any kind of nudity/abusive content which can then directly be put in for deletion request.


Source code publish

The project has its repository on GitHub, therefore I’ll be pushing all my commits to my forked repository weekly.
I’ve been using GitHub for more than a year for collaborating to open source projects as well as personal work/projects, thus I’m pretty much familiar with it.

Communication with Mentor

I plan to communicate with the mentor as well as other community members via Hangouts, IRC as well as email. I will keep updating my mentors via detailed weekly reports shared over email. We can discuss the progress of the project over Skype/Hangouts as well if the mentor is available. I also plan to start a new blog about my experience contributing to Wikimedia Foundation, which will be updated weekly describing my milestones, target achieved and difficulties faced.

About Me

Your education (completed or in progress)

I am a 19-year-old sophomore majoring in computer science at Indraprastha Institute of Information Technology, Delhi. I have been programming in Java and building Android apps for almost 2 years now and am quite home to it because I love to develop applications that can be of use to people around me.

How did you hear about this program?

I heard about the program last year through a senior who had tweeted about her internship experience in the past round. I was very much interested in applying to the round 15 and had even started to involve with the community, but later found out that I wasn’t eligible.

Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?

I have no other prior time commitments during the internship dates as specified on the website, so I’ll be working full time on the project. However, during the last 2 weeks, my college will begin. Since it would be the start of the session, the workload would be relatively light so I would be able to give my full-time commitment to the project after my classes end i.e. after 4 pm IST. Also, I’ll try my best to complete the majority of the work by week 10 and will keep the last 2 weeks lighter just for bug fixes, testing, and documentation.

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)?

I’m applying to both Outreachy and Google Summer of Code with Wikimedia under the same project i.e. Feedback on how my pictures get used and tutorial/quiz for people who did not understand topics/copyright. I’m not applying to any other project!

What does making this project happen to mean to you?

Last summer, I was thinking to dive into the open source world and didn’t know where to start. That’s when I came across commons app on As this was an android application, I was immediately inclined towards contributing to it. So, I claimed an issue and started to work on it, but back then, I was really a noob at it so couldn’t complete the task. Fast forward 7 months while browsing Outreachy round 16 website, I saw this project there and my happiness knew no bounds. This is all I needed to start contributing to the project. Thus there began my second journey of contributing to commons app but the only difference was that this time there was no looking back.
I’ve been doing Android Development since my freshman year and only recently I was awarded with the Google India Challenge Scholarship in the Android Developer track offered by Udacity in association with Google, which goes to show that android development is something that I love doing and have a lot of passion about. It gives an immense feeling of satisfaction when you develop something that can actually influence the lives of people around you and make things much simpler for them.
Last year, I was given a great opportunity by Women Techmakers and Firebase to attend the Firebase Dev Summit 2017, where, in the keynote Sam Ramji quoted that “We cannot build anything without a community and a technology without community has no value”. I can never get these words off my mind, and this is what inspires and motivates me to be part of a community and contribute to it no matter how big or small the contribution is. This project makes me live up to the aim of being involved in a community thus I’d really want to make this project as the motive is to connect the community to the organization in an easy manner, let users know where and how they can improve their quality of uploads and also to educate users who did not understand the copyright immediately in an interactive manner

Relevant Projects

Note: Heading of all the projects are linked to the Github source code/ working demo of the project.
I have successfully completed various projects and internships which cover various domains in android development and those which have mixed android development with other domains like Internet of Things. Some of these include-
EASY-WATER: Along with my teammates, I worked on an android based IoT project that allowed the user to water plants connected to a plant watering system. On a button click from the user’s app, the system would get a signal no matter where the user or the system is, the signal would then check various conditions such as current water levels, temperature and humidity and then would automatically water the plant with the exact amount of water required avoiding over or even under supply of water to the plants. The system was connected to an Arduino Mega along with the ESP32 wifi module and user data storage and authentication was done via Firebase.

SAATHI: For a devpost hackathon, my friend and I built an android application “Saathi” which was specifically developed for college students to make their daily lives easier. Students could register their courses and then receive notifications about the classes stating the venue. It also included functionalities such as To-Do list and My Profile. We also aim to connect all the registered students via an inbuilt chat in the application itself.

During the period of my summer internship under Ministry of Drinking Water and Sanitation, our team built a mobile application that was first used to collect data from rural areas regarding the Swachh Bharat Movement(initiated by Prime Minister Narendra Modi) and its effectiveness and then checked its validity using the existing big data in MIS.

ESYA: As a part of development team of Esya - technical fest of IIIT Delhi, I developed an android application for the same which acted as an all stop destination for any information regarding the fest. Students had various options that included detailed description of events, event registration and purchase tickets for star night. While developing this application, I learned the standard User Interface guidelines for Android, experimented with a lot of libraries related to it and focused mainly on how to improve the User Interface and User Experience.
Behance Link:

MOODIFY : For a college hackathon, my team built an android app called “Moodify” which enables a user to play youtube videos as per their current mood. The development made extensive use of API services provided by youtube and Firebase for authentication and storage services. Our team won the first prize in the senior category for this. We also look forward to implementing Naive Bayes Classification for video suggestions as per the past record of the user.

CAREER-PORTAL : In collaboration with a professor and a NGO called Udayan Care, my friend and I built a Career Portal App which would allow the fellow girls of the NGO to make their CV according to a pre-defined format in the easiest manner i.e just by filling out a few details and can then generate PDF of it which can be shared to the placement coordinator via email/other mediums. The CVs generated are also being uploaded to the placement server of the organization, through which companies can shortlist candidates easily. This application is soon going to be live on Play Store.

Other Projects

CLASSROOM-ALLOCATION-SYSTEM: This is a JavaFX based application which can be used by student, faculty, and admins in IIIT Delhi. It has different functionalities for different types of users and some common functionalities for all. Some of these include-

  • Room booking system: Faculty and admin can directly book the room and based on the availability the room is either booked or the user is informed that booking can't be made.
  • Time Table: Students can make personalized timetables wherein they can search for courses based on postconditions and then add the course as a credit or audit course.
  • Request System: Students can not directly book rooms, however, they can request for booking of a room, which can then be accepted or rejected by the admin. Requests automatically get removed after 5 days if they're still pending.
  • Notification System: Each user gets personalized notifications based on their bookings, classes and request status among many others.

YOUTUBE MP3 DOWNLOADER: This is a terminal based application which lets the user download the mp3 type audio file of any video on youtube. It also gives the user an option to download the lyrics in a text file if the video is a song. It makes it very easy for the user to download a video/song of his choice as it just asks the user to enter the name of the video. The results get better and more precise if the user specifies the name of the artist as well. The project made extensive use of web-scraping python library beautiful soup.

C-SHELL: This is an implementation of the Linux/Unix Shell in C Language. Similiar to the Linux shell, it allows the users to enter various commands, and then it works accordingly. It supports a list of internal and external commands which are described briefly in the README file. The implementation doesn't use the inbuilt external command implementations, instead, it uses exec and fork to call the programs written for the external commands.

With each project I’ve worked on till now, I’ve got to learn something new which serves as a catalyst for me to develop more such interesting projects, contribute to the developer community and widen my knowledge bounds.

Experience with this community

Although I’ve always used git for peer to peer code collaboration, when I started contributing to commons app I wasn’t very familiar with creating pull requests, issues, working in branches, rebasing your fork, stashing commits and Travis CI. So, while facing any kind of troubles, the community members were always there to help on the hangouts chat and encouraged to not hesitate and ask more questions. For people like me, there were a lot of up for grab beginner friendly issues to solve and the community member especially the collaborators of the repository and mentors were always there to help wherever I got stuck.
One thing that I learned the most was to be able to read and understand such large codebases and write your version of code according to the previous mannerism adopted while writing the code. The peers were always there to review your commits and suggest changes if required.
For me, it was a journey of trying new things about GitHub, fixing bugs, witnessing different styles of writing code, introducing tiny new features that might be very helpful on the long run and interacting with people who love open source and I’m really looking forward to continuing this.

Experience with other communities

I contributed to a hacktoberfest based algorithms community last year while participating in hacktoberfest and added basic algorithms written in bash script. That was the first time I learned how to make a pull request. I’ve also fixed a typo in react repository of facebook. Apart from these, I haven’t really contributed to any other open source community before except Wikimedia commons android app. This was majorly because I could never find an open source project that matched my areas of interest.

Git Log

I’ve been contributing to commons app since February 2018. My contributions towards the project are:

Merged PRs

Hide Keypad when EditText out of focus #1168
Fixes #1109
To enhance the User Experience, whenever the EditText loses focus, the soft keyboard was hidden. For this, I read about InputMethodManager class, and also about onFocusable and onTouch property of the layouts. I also learned that the project strictly uses Timber for logging statements

Formatted Text in Tutorial PageViews #1210
Fixes #1196
The text in tutorial pages wasn’t properly formatted and indented for both landscape and portrait view XML. So for this, I made separate layouts for bullets and text so as to enhance the UI of the application and text readability. Through the medium of this fix, I learned about how layouts are designed for varied screen sizes and how applications support Screen Rotation.

Removes extra padding in Media Details Fragment #1223
Fixes #1222
This fix removed the extra padding present in the Image Details Fragment in the categories layout. Although this was a minor fix, through this, I understood how and where the Layout Inflators have been used in the project which required relatively more efforts.

Replacement of tutorial icon in navigation drawer #1227
Fixes #1226
To enhance the UI of the commons app, this fix replaced the tutorial icon from info to help icon. For this fix, I went through standard guidelines for Android.

Removes extra clients in Share Log Intent #1315
Fixes #1282
This fix removed the extra invalid clients in the intent that opened on clicking Share Log in the Settings page. For this, I played around Share Intents and how to restrict the clients to only mailing clients.

Unmerged PRs

Donate to Wikimedia foundation feature added #1234
To introduce this feature, I added a text view, which got redirected to a web intent on onclick. However, as per the discussion by the community members, the feature was asked to not be added.

Image Downloading Fixed #1249 (under review)
Fixes #1216
The fix for this is still in progress. For this, I’ve fetched the downloadURL of the image from the beta API using the okHttp library for get request. Through this, I understood the MediaWiki API in much more detail.


Introducing a brief explanation of image license #1316 (open)

Privacy policy in login page missing #1255 (open)

Image downloading fails #1216 (open)

Share log intent shows extra clients in Settings page #1282 (closed)

Replacement of tutorial icon in navigation drawer #1226 (closed)

Extra padding in uploaded media categories section #1222 (closed)

Text isn't formatted properly in tutorial pages #1196 (closed)


Event Timeline

Hi @Gupta-meghna64 ,

Very thorough and well thought-out proposal, nice. :) I am very happy to see time allocated for testing and fixing bugs, and that the task details reflect the discussion we had in the relevant GitHub issues. A few suggestions:

  • I suggest linking the relevant GitHub issues in each phase
  • It would also be good to have links of the apps that you mentioned developing (at least some of them) so that we can take a look at them
  • Would recommend adding [Wikimedia Commons app] or similar to your proposal title

I will take the liberty of answering your email questions here, so that it can be discussed further with others if needed:

  • If the dates for GSoC and Outreachy are different, it sounds fine to me to use whichever you prefer, they can always be changed if you are accepted for the other program instead
  • I don't think we have any community-specific questions that need to be answered :)

Thanks @josephine_l :)
I'll work on the changes that you've suggested. Since, none of my previous applications are live on play store, can I put a link to the working youtube video demo of the app/github project link/apk link?

GitHub project link would be great!

The proposal is quite comprehensive and answers almost all questions one would have while evaluating a proposal for the internship program. :)

I like the way you have included buffer period in your plans. While implementing a big feature, a few hurdles would surely come along and its good to account for it beforehand.

I hope you can incorporate the changes suggested by @josephine_l soon. :)

I have one comment on using notifications for finding out the number of reverts/deletion requests. The MediaWiki Notifications API might not give a clear indication if a particular notification is related to deletion request. I would suggest you have a fallback for this, factoring this concern.

@josephine_l @maskaravivek I have updated the proposal according to the changes requested :)

@Gupta-meghna64 thanks for the update! The previous apps that you have worked on look amazing. Well done. :)