= Profile =
**Name:** Ritika Pahwa
**Email:** ritikapahwa4444@gmail.com
**Location:** Delhi, India
**Education:** Indira Gandhi Delhi Technical University for Women, India (Expected Graduation Year: 2024)
**LinkedIn:** [[ https://www.linkedin.com/in/ritikapahwa4444/ | ritikapahwa4444 ]]
**GitHub:** [[ https://github.com/RitikaPahwa4444 | RitikaPahwa4444]]
**Other Communication modes: **Discord, Slack, Zulip
**Typical Working hours during GSoC: ** 9 am to 9 pm (IST) GMT +5:30
= Synopsis =
Wikimedia Commons is an Android app that enables users to upload and view pictures from their Android phone/tablet on the Commons server.
**Commons App Repo:** [[ https://github.com/commons-app/apps-android-commons | GitHub ]]
== Project ==
This project aims to fix uploads related issues and deal with metadata loss.
**GitHub issue:** [[ https://github.com/commons-app/apps-android-commons/issues/5129 | Make upload more reliable ]]
= Mentors =
@Nicolas_Raoul
@Kaartic
= About me =
I am Ritika Pahwa, a third-year student at Indira Gandhi Delhi Technical University for Women, currently pursuing my B. Tech in Computer Science and Engineering. I love developing Android apps and have been exploring Android development since my first year at college. My experience in developing and integrating AR features into Android applications has given me a unique perspective on creating user-friendly and engaging experiences.
== Past Experience ==
I have worked as a research intern (2 months) wherein I worked in a team of 4 members to develop an efficient algorithm for the NP-complete problem Battleship Solitaire.
Apart from this, my personal projects include:
[[ https://github.com/RitikaPahwa4444/Fit_Friends.git | Fit Friends ]]: Formulated an Android application with an associate which motivates kids to perform some basic exercises; added text-to-speech functionality and introduced catchy and engaging sounds for kids. Tracked exercise activity using a database entity. Currently in the process of incorporating YouTube API to fetch video tutorials for the exercises.
Tech Stack Implemented: Kotlin, XML and Room Database
[[ https://github.com/RitikaPahwa4444/Onepad.git | Onepad ]]: Prepared a modern note-taking app by designing the splash screen, onboarding screen and launcher icon and implemented the system default theme, tested and debugged the application
Tech Stack Used: Flutter and Dart
My other projects can be found [[ https://github.com/RitikaPahwa4444 | here ]].
== Achievements ==
- Winner, App Development Track, Innerve Summer of Code 2021 for [[ https://github.com/RitikaPahwa4444/AppDev2021.git | Find Your Nanny app ]]
- Selected as one of the 67 Gold Microsoft Learn Student Ambassadors out of 500+ nominations for conducting events on open-source contributions and other community involvement
- Awarded with Special Mention for being among the top 11 teams out of 400+ registrations in Ideate ‘N’ Solve, an ideathon organised by Google Developer Student Club, IGDTUW
- Secured a rank in the top 60 students in the Python Coding Competitive exam conducted by Centre of Excellence-AI, IGDTUW
- Ranked 140 among 1000+ participants on Codeforces in Kotlin Heroes: Practice 9
== Volunteer Experience ==
- Gold Microsoft Learn Student Ambassador: Delivered a speaker session that witnessed over 80 attendees; conducted a 1.5-hour event on open-source contributions with 25+ attendees
- Mentor, DESH KE MENTOR (A Delhi Government Initiative): Supervised 13 mentors who mentored over 50 girls; guided, mentored and motivated four girls at Delhi government schools
= Motivation for the proposal =
Being an admirer of great photographers and an open-source enthusiast, I always wanted to contribute to Commons. The fact that the uploaded pictures are used across Wikipedia inspires me even more since I am a regular user who loves authentic content on Wikipedia :) I have often experienced upload-related issues myself and would like to fix them so that all the Commons lovers get a seamless experience with the app.
= Relevant Skills =
- Experience in Android development with Kotlin, XML, Java
- Proficiency in using SQL and Room Database
- Git and GitHub
- Testing in Android: Instrumented as well as local tests
- Understanding of Retrofit, RxJava, Jetpack Compose
- Knowledge about Wikimedia APIs
= Previous Contributions to Commons =
I have been contributing to the Commons Android app since February 2023. You can find all my pull requests [[ https://github.com/commons-app/apps-android-commons/pulls?q=is%3Apr+is%3Aclosed+author%3ARitikaPahwa4444 | here]].
**Total: 4
Merged: 4**
**Pull Requests on Existing Issues**
| **S. No.** | **Issue No.** | **Issue Description** | **PR No.** | **Tasks Performed** | **Status **|
|------|--------|-------|-------|-------|-------|
| 1. | [[ https://github.com/commons-app/apps-android-commons/issues/5161 | #5161 ]] | Peer review: Always getting the same dozen pictures, no variety | [[ https://github.com/commons-app/apps-android-commons/pull/5170 | #5170 ]] | - Analysed and experimented with various API call parameters and URLs - Incorporated an entity to prevent older images from showing up again | Merged
| 2. | [[https://github.com/commons-app/apps-android-commons/issues/5074 | #5074 ]] | Numbers cropped in Leaderboard | [[ https://github.com/commons-app/apps-android-commons/pull/5143 | #5143 ]] | Enabled auto-scaling of text | Merged
| 3. | [[ https://github.com/commons-app/apps-android-commons/issues/4671 | #5671 ]] | Robolectric 'application: Application!' is deprecated. Deprecated in Java | [[ https://github.com/commons-app/apps-android-commons/pull/5140 | #5140 ]] | Changed the deprecated RuntimeEnvironment.application to ApplicationProvider.getApplicationContext() in all the robolectric unit tests and optimised the imports accordingly | Merged
**New Issue Raised**
| **S. No.** | **Issue No.** | **Issue Description** | **PR No.** | **Tasks Performed** | **Status **|
|------|--------|-------|-------|-------|-------|
| 1. | [[ https://github.com/commons-app/apps-android-commons/issues/5157 | #5157 ]] | Longer questions not appearing completely in Peer Review | [[ https://github.com/commons-app/apps-android-commons/pull/5162 | #5162 ]] | Changed the layout height to `wrap_content` as longer questions were not visible completely even on scrolling | Merged
**Pull Request review **
| **S. No.** | **Issue No.** | **Issue Description** | **PR No.** | **Tasks Performed**
|------|--------|-------|-------|-------
| 1. | [[ https://github.com/commons-app/apps-android-commons/issues/5174 | #5174 ]] | Wrong uploader in "X will be encouraged by your appreciation" label | [[ https://github.com/commons-app/apps-android-commons/pull/5183 | #5183 ]] | Reviewed the pull request and suggested improvements
= Implementation=
{F36924008}
1. [[ https://github.com/commons-app/apps-android-commons/issues/5015 | #5015 ]]: Picture location is lost on recent versions of Android
**Possible Implementation Strategy:** Since the app can detect the location in the regular selector, the same strategy can be applied to the custom selector too.
2. [[ https://github.com/commons-app/apps-android-commons/issues/5128 | #5128 ]]: Upload often fails, especially when uploading 5 or more pictures over a slow Internet connection.
**Possible Implementation Strategy:** As described in the [[ https://github.com/commons-app/apps-android-commons/issues/5128 | issue ]], the network parameters need to be experimented upon, and a retry loop may be incorporated.
3. [[ https://github.com/commons-app/apps-android-commons/issues/5136 | #5136 ]](if time allows) Retried uploads stuck in queued state
**Possible Implementation Strategy:** As observed [[ https://github.com/commons-app/apps-android-commons/issues/5136#issuecomment-1386304752 | here ]], the uploading process gets resumed when a new upload is performed. This means that the `STATE_QUEUED` needs to be updated appropriately to the same state as that of a new upload once the internet connectivity resumes/the paused uploads are started again.
While these are the possible implementation strategies I could think of as of now, I am constantly researching and looking for alternate approaches too, in order to find the best implementation.
= Timeline=
| **Timeframe** | **Classification** | **Task** |
|-------|-------|-----------|
| **4 May - 28 May** | **Community Bonding Period** | **Connect with the mentors and learn more about the community, familiarise with the app structure, understand more about the upload process**
| | |
|**TASK 1: Issue [[ https://github.com/commons-app/apps-android-commons/issues/5015 | #5015 ]]** | |
| | |
| **29 May - 4 June** | **Deliverable** | **Report key findings **
| | Subtask 1 | Debug the application to find how the paths differ for regular and custom selector
| | Subtask 2 | Analyse various possibilities and prepare a report on the observations
| | Subtask 3 | Finalise the implementation strategy
| **5 June - 11 June** | **Deliverable** | **Fix location-loss in custom selector**
| | Subtask 1 | Replicate the regular selector behaviour on custom selector
| | Subtask 2 | Intensively test the application for any new bugs
| **12 June - 18 June** | **Deliverable **| **Unit tests **
| | Subtask 1 | Write/Modify unit tests for the custom selector
| **19 June - 22 June** | **Deliverable** | **Finalise the changes for the first task**
| | Subtask 1 | Complete any pending task(s)
| | Subtask 2 | Incorporate any changes suggested by the mentors
| | Subtask 3 | Report/Blog
| | |
| **TASK 2: Issue [[ https://github.com/commons-app/apps-android-commons/issues/5128 | #5128 ]]** | |
| | |
| **23 June - 29 June** | **Deliverable** | **Report key findings**
| | Subtask 1 | Debug intensively for any error messages
| | Subtask 2 | Experiment with the network parameters by varying timeout or buffer sizes and prepare a report
| | Subtask 3 | Finalise the implementation strategy
| **30 June - 9 July** | **Deliverable **| **Fix for failing uploads**
| | Subtask 1 | Modify network parameters
| | Subtask 2 | Implement a retry loop if the uploads are still unreliable
| | Subtask 3 | Intensively test the application for any new bugs
| **10 July - 14 July** | **Evaluation** | **Mid-term evaluation**
| | Subtask 1 | Finalise the changes
| | Subtask 2 | Report/Blog about key findings and accomplishments
| **15 July - 28 July** | **Deliverable** | **Unit tests**
| | Subtask 1 | Write/Modify unit tests for the custom selector
| **29 July - 1 Aug** | Deliverable | **Finalise the changes for the second task**
| | Subtask 1 | Complete any pending task(s)
| | Subtask 2 | Incorporate any changes suggested by the mentors
| | Subtask 3 | Report/Blog
| | |
| **TASK 3: Issue [[ https://github.com/commons-app/apps-android-commons/issues/5136#issuecomment-1381681733 | #5136 ]]** | |
| | |
| **2 Aug - 8 Aug** | **Deliverable** | **Report key findings**
| | Subtask 1 | Figure out the point of failure
| | Subtask 2 | Analyse and prepare report on key findings
| | Subtask 3 | Finalise the implementation strategy
| **9 Aug - 15 Aug** | **Deliverable** | **Fix stuck uploads issue**
| | Subtask 1 | Modify the state of the uploads appropriately
| | Subtask 2 | Intensively test the application for any new bugs
| **16 Aug - 22 Aug** | **Deliverable** | **Unit tests**
| | Subtask 1 | Write/Modify unit tests for the custom selector
| **23 Aug - 28 Aug** | **Deliverable** | **Finalise the changes**
| | Subtask 1 | Finalise the changes for the third task
| | Subtask 2 | Code cleanup and documentation
| | Subtask 3 | Incorporate any changes suggested by the mentors
| | Subtask 4 | Final Report/Blog about key findings and accomplishments
= Availability =
> **Are you eligible for Google Summer of Code? **
Yes.
> **Do you plan to submit any other proposal apart from this one? **
No, I plan to submit only one proposal.
> **Do you have any other plans during the period of GSoC? **
No, I do not have any other plans during the contribution period.
> **How many hours per week can you dedicate to this?**
Since a major portion of the contribution period would be covered under my summer break (upto July 31), I can dedicate approx 30-35 hours per week. I have planned a few days for incomplete tasks. This would also include any new findings that may be relevant for the last issue to accommodate any academic classwork starting Aug 1.
> **Have you been accepted to GSoC before?**
No. I am applying in GSoC for the first time.