GSoC has three sets of projects, lasting ~90, ~175 and ~350 hours approximately so that people who can not work full-time (because of exams or whatnot) can still participate.
Automated Download Speed Testing for download.kiwix.org
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.
Objective: create a solution that automatically tests the download speed of download.kiwix.org from various locations on Earth.
Technologies: Python, VPN, datacenters
- 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 (optional).
- Documentation for how to set up and use the solution.
- 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, at least 175 hours but probably a longer (350h) project if you aim for the web interface.
Interested? Check out the main ticket
Kolibri UI revamp
Some of the content we offer is actually harvested via folks at Learning Equality. Kolibri2zim is the tool that allows us to package it to the ZIM format. The UI rendition isn’t great and we’d like to fix that.
Objective: Redo the menu UIs based on a new design. Foundations have already been laid in a Git branch, but some features have not yet been implemented or are missing.
Technologies: Vue.js + a bit of Python
- Finalised code changes for creating beautiful Vue.js UIs inside Kolibri ZIMs
- Familiarity with at least one modern JS Framework (React, Vue.JS, Angular, …)
- Knowledge of web development and user interface design.
Difficulty: Medium, but short (90 hours) project
Interested? Check out the repo!
I18n of Zimit frontend
Zimit is our off-the-shelf solution to turn any website into a working zim file that people can browse offline. That’s nice, but with users all around the world and mostly in the Global South, we want to make sure that as many people as possible can use it quickly, without having to go through a translation dictionary first.
Objective: we want to automate the translation process of our zimit fronted, possibly via translatewiki.net.
- Identify changes to text strings and prepare them for translation
- Integration with Translatewiki for translation.
- Release to our youzim.it production website of at least two languages.
- Good understanding of Python;
- Be somewhat familiar with Translatewiki is a plus
Difficulty: Easy-medium (or medium-easy?), about 175 hours of work.
Interested? Check out the repo.
Youtube UI revamp
Kiwix can render pretty much any website into a zim file, and that include behemoths like Youtube: we can scrape a channel or a playlist (or a single video, though that does not make much sense in our case), and there are tons of educational videos that would benefit from being made available. The UI rendition, however, isn’t very sexy and we’d like this to change.
Deliverable: a new UI for Youtube-based zim files. We’ll take anything that does not look like what we have at the moment.
Skills required: python, vue.js, good taste.
Difficulty: Medium, but long project (350h).
Interested? Here is a ticket to get you started.
Move Kiwix-desktop to Qt6
Kiwix-desktop for Windows and Linux is the leading platforms for schools. We use Qt for its UI, and need/want to update to Qt6.
Objective and deliverable: Kiwix-desktop runs the Qt6 framework.
Skills required: Qt, meaning C++
Difficulty: Hard and long, unless you enjoy C++ and then it’s just long (350h).
The Kiwix-desktop repo is here.
The Kiwix-hotspot is a neat adaption of the Raspberry pi microserver into a local hotspot that entire classrooms can connect to without having to download anything onto their devices. The hotpost owner downloads content from our library onto a microSD card running the Raspbian OS, and off they go, the hotspot is fully autonomous with Kiwix-server working as a regular http daemon. The problem arises when users want to update the available content, or download usage metrics collected by the hotspot.
Objective and deliverable: Develop a mobile application prototype serving as a bridge between internet connectivity and the offline mode of a Raspberry Pi-based hotspot. The primary goal is to facilitate efficient data synchronization, allowing users to leverage internet benefits when available while ensuring a seamless offline experience. The application will have a very simple interface enabling users to manage the transfer of data between the remote server and the Raspberry Pi.
Difficulty: Hard (it touches on many different techs but the good news is we don’t expect more than a working prototype), 350 hours.
Skills required: mobile, flutter
Look around the Offspot repository and meta issue here.
Want to join?
Think hard about what you want to do, and go to the Google Summer of Code website between March 18 to April 2, 2024, to register and submit your project idea(s).
After reviewing all proposals, students projects will be announced on May 1, 2024. (full timeline)
Help & Tips
We want to be clear upfront that we will not select candidates who have never made at least one PR to our codebase: we make our choice based on how candidates handle themselves (is the code clear, are there comments, how do they explain their choices when asked, etc.). PRs do not need to be related to the project submitted – we just need to know that you can work in a team. If we don’t know you, we can’t choose you! And if your project has “UI” in it, then it probably is a good idea to submit a mockup of what you plan to implement.
(We also wrote a helpgul guide to Writing your Google Summer of Code application)
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!
Do you have questions?
Then come and join us on our Slack channel!