Google Summer of Code

For the full list of issues you can work on, see our GitHub repositories /openZIM and /Kiwix

GSoC has two sets of projects, lasting ~175 and ~350 hours approximately so that people who can not work full-time (because of exams or whatnot) can still participate.

We want to be clear upfront that we will not chose candidates just because they came up with a long/complicated project over a short one:  we make our choice based on how good previous PRs have been and because we need project to be completed. Some short projects can be really impactful whereas longer ones may be just nice-to-have.

Last but not least: over the years about half the students who did GSoC with Kiwix came up with their own project rather than one from our list – be bold.

Automated Download Speed Testing for download.kiwix.org

Objective: create a solution that automatically tests the download speed of download.kiwix.org from various locations on Earth. This will help Kiwix to ensure fast and reliable downloads for all users and improve the overall user experience, as 80% of our users are located in the Global South. By automating the testing process, Kiwix can save time and resources (we’re a non-profit, after all).

Technologies: Python, VPN, datacenters

Description:

Kiwix provides offline access to Wikipedia and other educational content to millions of users worldwide. Ensuring fast and reliable downloads from download.kiwix.org is critical to delivering a good user experience. However, it is challenging to accurately test download speeds from different locations on earth due to network latency and other factors.

The objective of this project is to create an automated solution to test the download speed of download.kiwix.org from various locations on earth using VPN or datacenters. The solution will use python to run the tests and record the results. The tests will be run at regular intervals and the results will be stored in a database. This will allow Kiwix to monitor download speeds over time and identify any issues that may be affecting performance.

Key Deliverables:

  • A python script that tests download speed from various locations on earth.
  • A database to store the test results.
  • A web-based interface to view the results.
  • Documentation for how to set up and use the solution.

Skills required:

  • Strong knowledge of python programming language
  • Familiarity with network testing and performance analysis.
  • Experience with VPNs and datacenters.
  • Knowledge of databases and web development is a plus.

Difficulty: Easy, but probably a longer (350 hours) project

Interested? Check out the main ticket

Nautilus Web UI

Objective: build a web-based interface for what is currently a command-line tool. 

Technologies: Python, JavaScript, HTML, CSS

Description:

Kiwix is useful because it can provide a lot of content to people without internet access. Therefore, the easiest it is to generate content that is available offline, the more users can be reached.

Nautilus is a powerful tool for creating ZIM files from collections of documents (PDF files, videos, etc.), but it currently requires the user to run commands from the command line. This makes it challenging for users (usually schools) who are not familiar with the command line or who prefer a graphical user interface.

The goal of this project is to build a web-based user interface for Nautilus, making it easier for users to convert their collections of documents into browsable ZIM files. The web UI will be built using Python, JavaScript, HTML, and CSS and will provide an intuitive and user-friendly interface for Nautilus.

Key Deliverables:

  • A web-based user interface for Nautilus.
  • Documentation for how to install and use the web UI.
  • Test cases to verify the correct functioning of the web UI.

Skills required:

  • Strong knowledge of Python programming language
  • Familiarity with JavaScript, HTML, and CSS.
  • Knowledge of web development and user interface design.

Difficulty: Medium, but probably a 350hrs project

Interested? Check out the main ticket.

ZIM Filesystem Fuse Module

Objective: we need to create a filesystem fuse module that enables access to the content of a ZIM file, allowing users to view entries as files without using zimdump.

Technologies: C++, Linux internals, FUSE

Description:

Kiwix provides offline access to Wikipedia and other educational content through its ZIM file format. Inspecting ZIM files is very useful for developers and ZIM creators. While the zimdump tool exists, it is not as convenient and easy to use as a filesystem. Therefore, we want to make it easier for users to access the contents of a ZIM file by creating a (read-only) filesystem fuse module.

The ZIM filesystem fuse module will be written in C++ and will use the libzim and FUSE library to enable access to the contents of a ZIM file as if it were a regular (yet read-only)  filesystem. The module will allow users to view the ZIM entries as a  tree or folders and files, the latter being readable as regular ones. This will make it easier for users to access the content of a ZIM file and will provide a more user-friendly interface for exploring its contents.

Key Deliverables:

  1. A C++ implementation of the ZIM filesystem fuse module.
  2. Documentation for how to install and use the module.
  3. Test cases to verify the correct functioning of the module.

Skills required:

  • Strong knowledge of C++
  • Familiarity with Linux internals, specifically the FUSE library
  • Knowledge of filesystems and file access methods.

Difficulty: Hard. Expect 350 hours of work.

Interested? Check out the main ticket.

Automating Google Play Store Translation via Translatewiki

Objective: we want to automate the translation process of our Google Play store entries via Translatewiki. This will help in making the apps available in multiple languages, making it accessible to a larger audience.

Approach: we suggest using Kotlin and Gradle to develop a tool that can handle the translations. Your tool will extract the app’s text content and send it to Translatewiki for translation. After the translation is completed, the tool will automatically update the Google Play store entry with the translated text.

Deliverables:

  • A Kotlin-based tool that can extract text content from Google Play store entries.
  • Integration with Translatewiki for translation.
  • Automated updating of Google Play store entries with translated text.
  • A comprehensive guide for app developers to use the tool for their Google Play store entries.

Skills required:

  • Good understanding of Kotlin and Gradle;
  • be somewhat familiar with the Google Play store and Translatewiki.

Difficulty: Hard, but once you’ve figured it out it should go quickly and 175 hours or so should suffice.

Interested? Check out the main ticket.

 

Want to join?

Then think hard about what you want to do, and go to the Google Summer of Code website between March 20 to April 4, 2023, to submit your projects!

After reviewing all proposal, students projects will be announced on May 4, 2023. (full timeline)

Help & Tips

Please read our guide to Writing your Google Summer of Code application

Do you have questions?

Then come and join us on our Slack channel!

Mentors are assigned based on which projects are selected and who’s available at the moment, so don’t even try to ask for names.