Archive:Google Summer of Code/2018

From Official Kodi Wiki
Revision as of 12:06, 14 February 2018 by Razze (talk | contribs) (→‎other ideas)
Jump to navigation Jump to search
Home icon grey.png   ▶ Google Summer of Code ▶ 2018
GSOC 2016 logo.png

Welcome to the Kodi Google Summer of Code ideas page.

We encourage interested students to review some of the ideas on this page, and then feel free to provide input on any ideas you may have in the Kodi GSoC 2018 forum and chat about any project you’d love to cover. To propose a project, see #Students project proposal ideas.

From the 12th to the 27th of March, any interested students may apply at the GSOC home page to work with Kodi. After that, Google will notify applicants whether we get to work with each other according to the GSOC schedule.

About Us

As there may be many students who have landed here as a result of GSOC, but are unfamiliar with the project, here are a few resources that may help explain what we are about.

Kodi (formerly known as XBMC) is an award-winning free and open source (GPL) software media player and entertainment hub for digital media, designed around the 10-foot interface (living room) environment. Created in 2003 by a group of like minded programmers, Kodi is a non-profit project run and developed by volunteers located around the world. More than 500 software developers have contributed to Kodi, and 100-plus translators have worked to expand its reach, making it available in more than 60 languages. For more information, see the page Kodi.


To get an idea of what Kodi is truly capable of, it really must be seen. Check out a few other user-created videos:
Kodi with the default Confluence skin
Kodi with Aeon Nox skin
Kodi on Raspberry Pi
Kodi's new PVR functionality

Kodi is written primarily in c++ and runs on a variety of platforms including Android, iOS, Linux, OS X, and Windows. It has been ported to work on several low-power platforms including the Raspberry Pi and Android.

Kodi was a mentoring organization in 2008, 2012, 2013, 2015, and 2017, and had team members involved in GSoC for other projects during 2011.

If Kodi is selected as a mentoring organization for 2018, students will need to review the Overview of a good project proposal, follow the outline for proposals when applying, and review the list of project ideas detailed below. Students are welcome to propose ideas outside the list and are encouraged to be as creative as they like.

Mentors

All mentors and backup mentors are extremely experienced in the Kodi codebase and will thus be able to assist students in getting to know the codebase and in quickly identifying projects that are both achievable for someone unfamiliar with the internal workings of Kodi and desirable to the wider Kodi community.

Prerequisites

C++ coding skills, basic familiarity with Git, solid understanding and interest in programming. Ability to quickly understand existing code is beneficial.

Project Proposals

Overview

Qualifications for a good Summer of Code proposal:

  • Discrete, well-defined, modular
  • Comprised of a series of measurable sub-goals
  • Based on open specs that are available free of charge
  • Based on complete specs

An example of a good proposal is the implementation of a new feature or function that is not yet available in Kodi.

An example of a less desirable proposal is one that's not as measurable, such as refactoring an existing API. Bad proposals tend to be ones that would require touching a lot of core code.

To re-iterate:

  • Localized/isolated code projects = good
  • Global code refactoring = bad
  • A project should have a set of subgoals, so even if the end goal turns out to be too big some of the parts will be of benefit.
  • Not too big! This is an important problem when choosing a project, while it is fun to think about solving a grand project its not always realistic. Its better to finish a smaller project than to start a grand one.

Where to submit proposals

In addition to submitting to the Google Summer of Code website, you are highly encouraged to submit your idea/proposal to the Kodi forum for discussion. Any proposal not submitted to the forum for discussion will likely not be considered.

Outline for proposals

Team-Kodi proposal ideas up for discussion

Intro/outro Detection

Description: It would be nice to detect intros and outros of a file dynamically. Then make the intros and outros skipable. One way to do this would be to create a machine learning model per show and distribute those via an api. The scope of this project would focus on some examples and making it easy to add more later. Then implement an addon or core addition that takes those models and acts on them when playing a file, ultimatly making it possible to skip forward.

Expected outcome: Being able to skip past intros or outros of shows and maybe even movies.

Skills preferred: Python, C++, something to run an api - GO or Elixir would be prefered

Possible mentors: Razze

Difficulty: Hard

Type: Risky/Exploratory

Better Profile Support

Description: Profile support inside Kodi remains extremely hacked together. Improving profile projects would likely be broken down into smaller chunks to make each chunk truly achieveable in a summer. Database handling for profiles needs to be reviewed and changed so that the user expirience is more streamlined. It should also be possible to better guard code paths that need to check for specific profile rights.

Expected outcome: Profiles should be more user frendly then before and not be an after thought. Being able to easily add more profile features is the big ultimate goal, as we want to support profiles for kids, that automatically hide media that's not for them. Just as an example.

Skills preferred: C++

Possible mentors: spiff

Difficulty: Hard

Type: Core development

Replacing depends with a CMake-based system

Description: Kodi has its own system for building the many libraries Kodi depends on that supports most platforms (Linux, Android, OS X, iOS) and cross-compiling called depends. At the moment, it is implemented with autotools and hand-crafted Makefiles. This has lead to a lot of code duplication, poor maintainability, and not being very user-friendly. Also, it does not currently work on Windows. This task would be about replacing the current system with a new implementation in CMake that has better maintainability.

Expected outcome: A CMake-based dependency build system that offers roughly the same features as depends (i.e. all required libraries covered, diverse platform support, crosscompilation). If the solution can also be applied to Windows by e.g. adding minimal CMake files to replace some UNIX-only build systems, that would be a big plus, but it is not necessary.

Skills preferred: CMake, shell scripting, general familiarity with UNIX/Linux

Possible mentors: wsnipex

Difficulty: Medium

Type: Infrastructure/Automation

Add-ons

Add code validation and do static code analysis in kodis addon checker

Description: Kodis addon checker checks each Kodi addon PR on github for certain problems, which ultimatly makes reviewing python addons easier for the team. These checks are fairly simple right now and would greatly benefit from improvements. It would be very nice to actually check the python code that is submitted for errors and also do static code analysis on each PR. The addon checker is written in python and can be fround here https://github.com/xbmc/addon-check

Expected outcome: Safer and faster acceptance and reviews for the official kodi addon repos. As most of the code will be checked by the machine. Also fewer slipups with regard to oversight.

Skills preferred: Python

Possible mentors: Razze

Difficulty: Medium

Type: Low-hanging fruit

Automatic addon checker for binary addons

Description: Kodis addon checker checks each Kodi addon PR on github for certain problems, which ultimatly makes reviewing python addons easier for the team. But the other type of addons, binary addons is not being checked so far. Which makes reviews and codeing guidlines hard to handle. Thus it would be nice to also check those addons, either via the current checker written in python or a new binary addon specific checker. Goals would include checking the addon.xml, the C++ code and a check for potentially malicious code.

Expected outcome: Being able to run the checker against all binary repo PRs on github.

Skills preferred: Python, C++

Possible mentors: Razze

Difficulty: Hard

Type: Low-hanging fruit

Addon Submissions

Description: Write a tool or an website to easily submit addons to our addon repo. The tool will need to login at github and send a PR in the name of the author to the correct repo and branch on kodis github. The user experiance needs to be very good to not keep anyone from submitting. It should also be able to offer some oppinions on the code that will be commited before it actually get's send. So it would catch the most common errors on the client side.

Expected outcome: A tool to get more submissions with better quality and lower the bar for addon authors to get started with repo submissions.

Skills preferred: Depending if this will be a standalone tool or an website the choice of technology would be quiet different. It would be a new tool, so that's fine. For an website python/djang, elixir/phoenix or something similar would be a good choice. For a stand alone tool we might do a full ui in java or electron or settle for a commandline interface via javascript.

Possible mentors: Razze

Difficulty: Easy

Type: Low-hanging fruit

Achievements in Retroplayer

Description: Retroarch has developed support for achievements in certain select libretro cores. This project would consist of porting whatever work might be portable and otherwise integrating the existing libretro achievement system into Kodi's retroplayer implemented using Kodi's UI system. Could be tackled a few different ways, including simply linking the user to the retroachievements.org or creating a full achievement database in Kodi.

Expected Outcome: Users should be able to see their achievements in Kodi. Player manager and Player profile support may be in development concurrently, so thought should be given to those systems.

Skills preferred: C++, python, possibly php

Possible mentor: garbear

Difficulty: medium

Type: Fun/Peripheral

Notes: Garbear has broken down the Retroplayer project into manageable pieces including input, core, game addons, peripheral addons, netplay, a game library implementation, and shaders to do things like emulate a CRT monitor. This is one example, but many pieces are currently being worked on or are near completion, and many more could use help from a student familiar with the area. Visit the retroplayer section of the Kodi forum to see all the major projects still to do.

Add a picture library

Description: At the moment kodi has the concept of libaries for movies, tvshows and music. Libraries are far nicer for users to handle as they keep their data and basically act upon the data that got collected without having to get it on each directory traversal. It also enables filtering, sorting and searches. The project would focus on adding a picture database and getting it filled via file scrapping. When that's done we would progress to write basic libary views for pictures.

Expected outcome: A functional picture library for kodi with the possiblity to scan file and having them added to your library. It should also be possible to look at your files via a libary frontend, just like it's possible for tvshows, movies or music.

Skills preferred: C++, SQLite, MySQL/MariaDB

Possible mentors: Razze

Difficulty: Easy

Type: Core development

Use machine learning to improve suggestions

Description: Kodi currently can't suggest simiar media to watch/listen to. It would be possible to just show media that's similar on the base of a tag, but that would be quiet rudimentary. Better would be to create something driven by the user or profile that's currently logged in. This would mean that watched/listend and collected data be added to the model and we would serve the best possible suggstion for a user. Machine learning might be the best approach as we would be able to create a model and just ship that model and act on it when kodi tries to serve suggestions.

Expected outcome: Far better suggestions then before. Some places might even just get suggestions due to this project, as it did not make much sense to do suggestions before this.

Skills preferred: Python, TensorFlow, C++, SQLite, MariaDB/MySQL

Possible mentors: Razze

Difficulty: Hard

Type: Risky/Exploratory

Using fuzz testing to fuzz test Kodi

Description: Adding fuzz testing to Kodi would be very valuable to find problems in the current code base. Especially security problems. First step would be choosing a framework either american fuzzy lop, libFuzzer or other similar projects. After we decided on that it would be time to start to fuzz different methods that are widely used in Kodi and try to expose flaws in those. If this leads to success, it should be documented and made repeatable.

Expected outcome: Being able to easily add more fuzz tests and having the process to do this documented.

Skills preferred: C++, CMake

Possible mentors: Razze

Difficulty: Medium

Type: Risky/Exploratory

other ideas

These ideas still need expanding and/or assigned a potential mentor. If one of these ideas interests you, feel free to ask for more info in the GSOC 2018 forum area. We may be able to assign a mentor if enough interest is shown

  • Using fruit or similar to use DI in Kodi and write tests
  • High quality scalers for OpenGL(GLSL). Scale Y and UV plane separately (mentor: fernet menta)
  • Support downloading of of media items (the actual file not just the metadata) from another Kodi instance (e.g. through UPnP) into the local library. This could be done in a "send to" way and in a "download" way and it could also be combined with transcoding depending on the target device. (possible mentor: montellese)
  • UPnP device profiles. there's already a PR that goes in that direction and the problem is that right now we can only really provide device specific MIME type hacks but if we have transcoding we'll definitely need this (possible mentor: montellese)
  • Implementing a performance critical element of kodi in rust

More

We feel it is important to note that, while we are interested in a focus on the listed three areas, we would like to stress passion, expertise, and creativity above all else. If you would like to do something completely different, definitely send in that proposal. The ideas listed above are, as always, merely suggestions. We will be interested in any idea, so long as you can communicate your interest, your background, and your solution the problem.

Students project proposal ideas

Submit your own proposals on the Kodi GSoC forum. They can be as big or as small as you feel you can comfortably accomplish between PROJECT START DATE and PROJECT END DATE. In the end, it's better to have a smaller, completed project, rather than a larger, incomplete project.

To submit a proposal idea:

  1. Copy the text from #Outline for proposals.
  2. Create a new forum post HERE and paste the text.
  3. Fill out everything using your specific proposal.