===Profile Information
Name:Avanish Yadav
GitHub:[[ https://github.com/awanishyadav967 | Avanish ]]
Linkedin:[[ https://www.linkedin.com/in/avanish-yadav-a1a062224/ | avanish-yadav ]]
Other communication modes: Discord, Zulip, Slack.
Location (country or state) During GSOC: Varanasi/Dehradun India
Typical working hours (include your timezone) During GSOC: Between 4:00 pm to 2:00 am (IST) UTC+5:30
===Synopsis
**App**
The Commons app of Wikimedia is a mobile application designed to allow users to contribute media files to Wikimedia Commons, a media repository that is hosted by the Wikimedia Foundation and provides free media content for use on Wikipedia and other Wikimedia projects. This app allows users to upload photos and videos directly from their mobile devices, add descriptions and categories, and apply licenses to their media files. Users can also search for and view media files on Wikimedia Commons and use them in their own projects.
**Project**
The proposed project for Google Summer of Code 2023 aims to address the issues related to uploading images to the Commons app of Wikimedia. The project specifically focuses on fixing three upload-related bugs, namely #5196, #5128, and #5136, which are affecting the app's reliability and functionality .The project will focus on improving the app's upload functionality and making it more reliable by addressing these issues. The proposed solution involves optimizing the upload process, adding error handling mechanisms and improving the user interface to provide better feedback to users during the upload process.
**Possible Mentor(s)**
@Nicolas_Raoul
@Kaartic
**Have you contacted your mentors already?**
Yes
===Deliverables
**For bug #5196:**
1. Identify the root cause of the issue and implement a fix to prevent the loss of picture location despite being present in EXIF data.
2. Add automated tests to ensure that the fix works correctly.
**For bug #5128:**
1. Identify the root cause of the issue and implement a fix to ensure that uploads do not fail or get stuck, even when uploading 5 or more pictures over a slow internet connection.
2. Optimize the upload process to reduce the time it takes to upload pictures over a slow internet connection.
3. Add automated tests to ensure that the fix works correctly.
**For bug #5136:**
1. Identify the root cause of the issue and implement a fix to prevent retried uploads from getting stuck in a queued state.
2. Add automated tests to ensure that the fix works correctly.
===Possible Implementation
**Bug #5196:**
The loss of picture location despite being present in EXIF data could be caused by various reasons such as incorrect EXIF data, server configuration issues, or software bugs. To fix this, we will analyze the existing code to identify any possible errors or bugs that could be causing this issue. Once the root cause is identified, we will implement a fix that ensures that picture location is not lost despite being present in EXIF data. This may involve changes to the upload process, server configuration, or the use of third-party libraries.
One approach to fixing this issue is to check the EXIF data for each uploaded picture and compare it to the actual location of the picture. If there is a mismatch between the EXIF data and the actual location, the server could flag the picture for review and manual adjustment. Alternatively, we could use third-party libraries or APIs to automatically correct any inconsistencies in the EXIF data.
Once the fix is implemented, we will add automated tests to ensure that the fix works correctly. The tests will check that the picture location is correctly uploaded and stored, and that the location data is consistent with the actual location of the picture.
**Bug #5128:**
The upload process can fail or get stuck when uploading multiple pictures over a slow internet connection due to timeouts, connection drops, or server overload. To fix this, we will optimize the upload process to reduce the impact of slow internet connection by implementing various techniques such as resumable uploads, parallelization, and connection optimization. Additionally, we will add a feature to detect when an upload is stuck and retry the upload if necessary.
One approach is to implement resumable uploads, which allow the upload process to resume from where it left off in case of a connection drop or other interruption. We could also implement parallelization, where multiple pictures are uploaded simultaneously to reduce the time it takes to upload all pictures. Additionally, we could optimize the connection by adjusting the packet size, retry policy, and other connection parameters.
Another approach is to add a feature that detects when an upload is stuck and retries the upload if necessary. This feature could periodically check the upload status and automatically retry the upload if it is stuck. This will help ensure that all pictures are successfully uploaded, even if the internet connection is slow or unstable.
Once the optimizations are implemented, we will add automated tests to ensure that the upload process works correctly. The tests will check that all pictures are uploaded successfully, even under slow or unstable internet connections.
**Bug #5136:**
This bug occurs when a retried upload gets stuck in a queued state due to a lack of resources, server configuration issues, or software bugs.
To fix this, we will analyze the existing code and look for any possible errors or bugs that could be causing the retried uploads to get stuck in a queued state. Once we identify the root cause, we will implement a fix that ensures that retried uploads do not get stuck in a queued state.
One approach is to adjust the server configuration to ensure that there are enough resources available to handle the retried uploads. We could also optimize the upload process to reduce the number of retried uploads, for example, by implementing resumable uploads or connection optimization.
Another approach is to add a feature that detects when an upload is stuck in a queued state and retries the upload if necessary. This feature could periodically check the upload status and automatically retry the upload if it is stuck in a queued state.
Once the fix is implemented, we will add automated tests to ensure that the fix works correctly. The tests will check that retried uploads are successfully uploaded and that they do not get stuck in a queued state.
===Timeline
|
<table>
<tr>
<th>Time Frame</th>
<th>Classification</th>
<th>Task</th>
</tr>
<tr>
<th> Community Bonding Period
(May 4 - May 28, 2023):</th>
<th>Familiarize with the project codebase,
documentation, and community. </th>
<th>Comminicate and discuss project requirements
and objectives with mentors.</th>
</tr>
<tr>
<th> </th>
<td>Subtask 1</td>
<td>Setup development environment, tools, and infrastructure and
Review and improve the project proposal and timeline.
</td>
</tr>
<tr>
<td> </td>
<td>Subtask2</td>
<td>Investigate the cause of the issue and finalize the implementation</td>
</tr>
<tr>
<th> Coding Period - Week 1
(May 29 - June 4, 2023): </th>
<th>Focus on bug #5128 (Upload often fails or gets stuck).</th>
<th>Make necessary code changes to fix the bug.</th>
</tr>
<tr>
<td> </td>
<td>Subtask 1</td>
<td>Test the changes thoroughly to ensure that the upload process works
reliably and efficiently, especially when uploading several pictures.</td>
</tr>
<tr>
<th> Coding Period - Week 2
(June 5 - June 11, 2023): </th>
<th>Continue working on bug #5128</th>
<th>Write and stabilize unit tests.</th>
</tr>
<tr>
<td> </td>
<td>Subtask 1</td>
<td >Verify that the upload process works as expected in various scenarios.</td>
</tr>
<tr>
<td> </td>
<td>Subtask 2</td>
<td>Review the code changes with your mentors and seek their feedback to
ensure that the changes align with the project's goals and best practices.</td>
</tr>
<tr>
<th> Coding Period - Week 3
(June 12 - June 18, 2023) </th>
<th>Continue working on bug #5128</th>
<th> Deploy and test changes</th>
</tr>
<tr>
<td> </td>
<td>Subtask 1</td>
<td>Conduct a load test to simulate various network conditions and
ensure that the upload process can handle large volumes of pictures
without any issues.</td>
</tr>
<tr>
<td> </td>
<td>Subtask 2</td>
<td>Optimize the code to reduce the amount of data transferred during the
upload process and improve its efficiency, especially when uploading over
slow network connections.</td>
</tr>
<tr>
<td> </td>
<td>Subtask 3</td>
<td>Fix any associated bugs and suggestions.
Complete bug #5128.</td>
</tr>
<tr>
<th> Coding Period - Week 4
(June 19 - June 25, 2023)</th>
<th>Start working on bug #5196
(Picture location is sometimes lost despite being present in EXIF).</th>
<th>Reproduce the issue and investigate possible solutions.</th>
</tr>
<tr>
<th> Coding Period- Week 5&6
(June 26 - July 9, 2023):</th>
<th>Partially nonavailability</th>
<th>I have final (end semester) exam from 26 june
to 10 july</th>
</tr>
<tr>
<th> Mid-term Evaluation
(July 10 - July 14, 2023) </th>
<th>Mid-term Evaluation</th>
<th>Discuss progress with mentors and receive feedback.</th>
</tr>
<tr>
<td> </td>
<td>Subtask 1</td>
<td>Evaluate project status and adjust timeline if necessary.</td>
</tr>
<tr>
<th> Coding Period- Week 7
(July 15 - July 21, 2023) </th>
<th>Continue working on bug #5196</th>
<th>Write and stabilize unit tests.</th>
</tr>
<tr>
<th> Coding Period- Week 8
(July 22 - July 28, 2023) </th>
<th>Continue working on bug #5196</th>
<th>Deploy and test changes for bug #5196.</th>
</tr>
<tr>
<th> Coding Period- Week 9
(July 29 - Aug 4, 2023) </th>
<th>Start working on bug #5136
(Retried uploads stuck in queued state).</th>
<th>Reproduce the issue and investigate possible solutions.</th>
</tr>
<tr>
<th> Coding Period- Week 10
(Aug 5 - Aug 11, 2023) </th>
<th>Continue working on bug #5136.</th>
<th>Finalize the implementation strategy. </th>
</tr>
<tr>
<th> </th>
<td>Subtask 1</td>
<td>Make necessary code changes to fix the bug</td>
</tr>
<tr>
<th> Coding Period- Week 11
(Aug 12 - Aug 18, 2023) </th>
<th>Continue working on bug #5136.</th>
<th>Write and stabilize unit tests.</th>
</tr>
<tr>
<th> Coding Period :- Week 112
(Aug 19 - Aug 28, 2023) </th>
<th>Finalize the implementation strategy for any remaining issues or features</th>
<td></td>
</tr>
<tr>
<td> </td>
<td>Subtask 1</td>
<td>Continue coding final changes, focusing on bug fixes and feature improvements.</td>
</tr>
<tr>
<td> </td>
<td>Subtask 2</td>
<td>Focus on code cleanup and documentation improvements.</td>
</tr>
<tr>
<td> </td>
<td>Subtask 3</td>
<td>Address any remaining issues or bugs
and prepare for final mentor evaluation.</td>
</tr>
<tr>
<td> </td>
<td>Subtask 4</td>
<td>Submit final mentor evaluation and
celebrate completion of GSoC project!</td>
</tr>
</table>
===Participation
To communicate progress and ask for help throughout the project, I plan to utilize several platforms. Firstly, I will use GitHub to maintain a detailed and up-to-date project repository, which will serve as a central hub for all code changes, discussions, and issue tracking. I will commit my changes regularly and document them thoroughly, providing detailed explanations of any new features or bug fixes.
Additionally, I will communicate with my mentors and the community via Zulip, an open-source chat platform that provides threaded conversations and real-time notifications. I will regularly post updates on my progress, ask for feedback and advice, and engage in discussions with my mentors and fellow developers.
I will use email to communicate with my mentors on a more formal level, particularly when discussing sensitive or complex issues. I will provide clear and concise explanations of any problems or questions I may have.
===About Me
I am Avanish Yadav, a second year Undergraduate student in Graphic Era University ,Dehradun ,India .I'm a computer science student with a passion for Android development . I've been interested in Android development for several years and have experience working on various Android apps. I have a solid understanding of Android fundamentals, including activity lifecycle, UI components, and data storage. I'm also proficient in Java and Kotlin and have experience working with popular Android libraries such as Retrofit, Glide, and Room.
**Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?**
I may have other commitments, such as coursework but I will prioritize my GSoC work and communicate any potential conflicts with my mentor as soon as possible.
**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 am applying in GSOC only.
**What does making this project happen mean to you?**
As a passionate Android developer, I'm always looking for new challenges and opportunities to improve my skills. I believe that the Google Summer of Code program is the perfect platform to do so, as it provides me with the chance to work on real-world projects with experienced mentors and contributors.
My ultimate goal for this program is to not only learn and grow as a developer but also to contribute to the open-source community and make a positive impact on users' lives. I believe that technology has the power to transform people's lives for the better, and I'm excited to use my skills and knowledge to create innovative and meaningful solutions.
Furthermore, I'm thrilled at the prospect of working with a talented team of developers from all over the world. I believe that collaboration and communication are essential components of successful software development, and I'm eager to learn from my peers and share my own experiences with them
===Past Experience
I am pleased to share my past experiences, which have been instrumental in shaping my career as a technology enthusiast. As a passionate learner, I am always on the lookout for opportunities that help me gain knowledge and skills in diverse areas of technology.
1. One such opportunity that I was fortunate to be a part of was a **three-month internship** program on Artificial Intelligence (AI) and Internet of Things (IoT) innovation and applications, organized by Graphic Era University and IEEE. During the internship, I had the opportunity to work on various projects related to AI and IoT, such as developing a web app which can detect the speed of Cyclone . This experience helped me develop a strong foundation in AI and IoT technologies and understand their potential in solving real-world problems.
**Certificate- ** [[ https://www.linkedin.com/in/avanish-yadav-a1a062224/ | Linkedin]]
2. I also had the privilege of being a finalist in the **Hackathon** organized by the School of Computer Science, UPES, where I had the opportunity to work on video analytic tools. Collaborating with a team of talented individuals, we developed a solution that was well-received by the judges. This experience taught me the importance of teamwork, effective communication, and problem-solving skills in a fast-paced, competitive environment.
**Certificate- ** [[ https://www.linkedin.com/in/avanish-yadav-a1a062224/ | Linkedin ]]
3. I had the honor of publishing a** Research paper** on "Emerging Technologies for Sustainable Educational Tourism." This paper was the culmination of my research on the intersection of technology and education, and how emerging technologies can be leveraged to promote sustainable tourism. This experience helped me refine my research and analytical skills and also taught me the importance of presenting complex information in a concise and engaging manner.
Overall, my past experiences have equipped me with a strong foundation in emerging technologies and their applications, effective communication, teamwork, problem-solving, research, and analytical skills. I am confident that these experiences, combined with my passion for technology, make me a valuable asset to any team that is working towards creating innovative solutions to complex problems.
===Relevant Skills
- Proficient in Java and Kotlin programming languages.
- Several years of experience working on various Android applications.
- Solid understanding of Android fundamentals such as activity lifecycle, UI components, and data storage.
- Experience working with popular Android libraries such as Retrofit, Glide, and Room.
- Familiarity with Git version control system.
- Knowledge of Wikimedia API.
===Projects
1. "Music Player App"- in Java [[ https://github.com/awanishyadav967/Music-Player | Github]]
2. "Weather App which is build in Kotlin" [[ https://github.com/awanishyadav967/Weather-App-Kotlin | Github ]]
3. "Multiple Disease Prediction" -deployed on [[ https://awanishyadav967-disease-prediction-project-mdps-public-g8edal.streamlit.app/ | Streamlit Cloud ]]
4. "Cyclone Speed Prediction" -in Python [[ https://github.com/awanishyadav967/cyclonespeed-prediction | Github ]]
===Contributions to Commons
Total:1
Merged:1
<table>
<tr>
<th>PR</th>
<th>Task</th>
<th>Status</th>
</tr>
<tr>
<td> [[ https://github.com/commons-app/apps-android-commons/pull/5173 | #4797 ]] </td>
<td>Add one more choice to the list</td>
<td>Merged</td>
</tr>
</table>
**New Issue**
<table>
<tr>
<th>Issue</th>
<th>Name</th>
<th>Status</th>
</tr>
<tr>
<td>[[ https://github.com/commons-app/apps-android-commons/issues/5178 | #5178 ]]</td>
<td>Skip tutorial option not showing after signup/signin in Commons app </td>
<td>Closed</td>
</tr>
</table>
**PR Review**
<table>
<tr>
<th>PR</th>
<th>Name</th>
<th>Status</th>
</tr>
<tr>
<td>[[ https://github.com/commons-app/apps-android-commons/pull/5183 | #5183 ]]</td>
<td> Fix: user reset for Thanks after Review</td>
<td>Merged</td>
</tr>
</table>
===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