Google Summer of Code/2023

Wikimedia will be taking part as a mentoring organization for Google Summer of Code 2023.

Read information for participants  Read information for mentors

Program timeline
See full timeline



Ideas for projects
Watch this space for project ideas! We will keep adding ideas below between now and when the application period opens.

Application Period Ended! See accepted participants list above.

1. Commons Android app: Make upload more reliable
Built with Java and Kotlin, this Android app allows contributors to upload pictures they have taken with their phone/tablet to Wikimedia Commons. Unfortunately, upload often fails, gets stuck, or loses location metadata. The goal of this project is to fix these 3 bugs. Our friendly team mostly uses GitHub and chat for code collaboration.
 * Tech stack: Java, Kotlin
 * Mentor(s): Nicolas Raoul, Kaartic Sivaraam (maintainer of the app).
 * Relevant links: GitHub issue, Phabricator issue

2. Improve the functionality of VideoCutTool [Done]
VideoCutTool is a tool to edit videos in Wikimedia Commons. It's widely used by the volunteers to edit videos on the fly and re-upload back to Commons in simple few clicks instead of downloading video from Commons and using external software applications to edit and re-upload. The goal of this project is to improve the tool, fix some existing bugs, add additional functionality and write the unit tests.
 * Tech stack: React JS, Node JS
 * Mentor(s): Vasanth Gopa, Soham
 * Relevant links: Phabricator issue

3. Adding a Menu and Keyboards to Scribe-iOS
Scribe makes Wikidata powered keyboards that help language learners remember grammar points as they type :) For GSoC we'd like to work with one or more mentees to improve the base app experience and add keyboards so that more people can make use of Scribe. These tasks will add skills with Wikidata Query Service, Swift and Python.
 * Tech stack: Swift, Wikidata Query Service Scripts, Python
 * Mentor(s): Andrew McAllister
 * Relevant links: GitHub issue for a new menu, New keyboard issues on GitHub

4. End-to-end test coverage for Abstract Wikipedia's Wikifuntions
Abstract Wikipedia is an idea that people can create and maintain Wikipedia articles in a language-independent way. A particular language Wikipedia can translate this language-independent article into its language. Code does the translation. This code will be run on Wikifunctions.

Wikifunctions is a new Wikimedia project that allows anyone to create and maintain code. This is useful in many different ways. It provides a catalog of all kinds of functions that anyone can call, write, maintain, and use.

When Wikifunctions launches, the team wants the core features to be covered by end-to-end test that can be run against any patch review. We are leveraging existing selenium tools and patterns to write the tests, and a novel GitLab Kubernetes based CI pattern that integrates with Gerrit (MediaWiki's legacy git version control server).

The aim of this GSoC project will be to write e2e (end-to-end) tests using Selenium and integrate them into the Wikifunction pipeline. A stretch goal of this project working on "production-izing" pipeline itself, and documenting the pattern for other teams to evaluate and implement.


 * Tech stack: Javascript, Selenium, GitLab CI, Kubernetes, Rust
 * Mentor(s): SDunlap-WMF, Jdforrester (WMF), CMassaro (WMF), Denny
 * Relevant links: Phabricator issue

5. Improve Programs & Events Dashboard UX for Article Scoped Programs
Programs & Events Dashboard has a powerful set of features for defining the scope of articles that you want to track edits to, which are enabled by selecting the 'Article Scoped Program' event type. However, these features are not very intuitive or discoverable. The goal of this project is to improve the event creation user experience so that event organizers can more easily configure the Dashboard to track only the articles they want to track, using whichever of the available scoping methods (assignments, categories, templates, PetScan, and/or PagePile) is most appropriate for their program.

The user interface should explicitly note the methods for scoping a course at the point of choosing the program type, it should guide users who have created an ArticleScopedProgram that doesn't have any in-scope articles yet on how to set up the desired scoping, and it should make the current scoping settings more obvious (eg, as part of the Home tab) when viewing such a program.

The event creation UI is primarily done via a client-side frontend built with React.js. Advice for prospective interns working on the Dashboard.
 * Tech stack: Web design / prototyping, React.js, Familiarity with Ruby is helpful but not required, Familiarity with wikis and/or Wikidata helpful but not required, Experience with or interest in user research helpful but not required
 * Mentor(s): Sage Ross
 * Relevant links: Phabricator issue

6. Wikidocumentaries to import images from the web to Structured Data on Commons
Wikidocumentaries is a website aggregating Wikimedia content and integrating it with content from other open media repositories. It provides a language-independent way of browsing Wikimedia projects based on Wikidata items. The idea of Wikidocumentaries is to allow the users to find relevant open content and contribute it to the Wikimedia projects by using the content for their purposes. The name of the project, Wikidocumentaries, refers to media compilations that the project will eventually allow the users to create from the materials they find.

The goal of the GSoC project is to establish the entire process for retrieving media from a given media repository related to the currently viewed topic in Wikidocumentaries and uploading it to Wikimedia Commons, adding structured data statements to it.


 * Create or update the API script for the desired media repository.
 * Format the retrieved information so that it can be displayed in Wikidocumentaries.
 * Allow the user to select images they want to upload.
 * Authenticate with Wikimedia Commons.
 * Upload the chosen media files and categorize them using available information.
 * Make Structured Data statements using information from both the corresponding Wikidata item and the original source.

When this workflow has been completed, it will be possible to make available further tools to enrich the data of the uploaded content. It is possible to expand the work to some such tool, based on the interests of the intern.
 * Tech stack: The UI code is created with Vue, and the API code is JavaScript. The work focuses on Structured Data on Commons, therefore understanding of the MediaWiki API, Wikidata and Structured Data on Commons is needed.
 * Mentor(s): TuukkaH, Susannaanas
 * Relevant links: Phabricator issue, GitHub, Phabricator project, Documentation website

7. Wiki farm support for Canasta
Canasta is a Docker-based MediaWiki distribution that makes it easy to set up a full-featured MediaWiki instance on just about any server. However, one big feature it lacks is the ability to support running multiple wikis, i.e. a wiki family or wiki farm, within the same container. Such wikis would be differentiated by either a different directory (e.g. example.com/a, example.com/b), a different subdomain (e.g. a.example.com, b.example.com), or even different domains for each wiki (example1.com, example2.com). Additionally, the Canasta command-line interface (CLI) should support the wiki farm setup as well, letting administrators easily create, configure, delete, etc. the individual wikis.

If you are interested in applying to become a contributor to this project, please read the following on GitHub: The Canasta Project's GSoC 2023 application instructions


 * Tech stack: Docker, Apache, PHP, Golang
 * Mentor(s): Yaron Koren, Jeffrey Wang
 * Relevant links: Phabricator task, GitHub issue

Recommended steps for accepted candidates
See Google_Summer_of_Code/Participants

Contact

 * Reach out for general questions on the #gsoc23-outreachy26 Zulip chat.
 * Organization administrators for this round are: Gopa Vasanth, Srishti Sethi, Soham Datta, Sheila Karuku
 * Read how to communicate effectively and get help on technical questions.