mirror of https://github.com/kivy/kivy.git
362 lines
16 KiB
ReStructuredText
362 lines
16 KiB
ReStructuredText
Google Summer of Code - 2015
|
|
============================
|
|
|
|
Introduction
|
|
------------
|
|
Kivy is a cross-platform, business friendly, GPU Accelerated open source
|
|
Python library for rapid development of applications that make use of
|
|
innovative user interfaces, such as multi-touch apps.
|
|
|
|
The Kivy Organization oversees several major projects:
|
|
|
|
* The `Kivy <https://github.com/kivy/kivy>`_ GUI Library
|
|
* The `Python-For-Android <https://github.com/kivy/python-for-android>`_
|
|
compilation tool.
|
|
* The `Kivy-iOS <https://github.com/kivy/kivy-ios>`_ compilation tool.
|
|
* The `PyJNIus <https://github.com/kivy/pyjnius>`_ library for interfacing with
|
|
Java from Python.
|
|
* The `PyOBJus <https://github.com/kivy/pyobjus>`_ library for interfacing with
|
|
Objective-C from Python.
|
|
* The `Plyer <https://github.com/kivy/plyer>`_ platform-independent Python
|
|
wrapper for platform dependent APIs.
|
|
* `Buildozer <https://github.com/kivy/buildozer>`_ - A generic Python packager
|
|
for Android, iOS, and desktop.
|
|
|
|
Altogether, these projects allow the user to create applications for every
|
|
major operating system that make use of any native APIs present. Our goal is to
|
|
enable development of Python applications that run everywhere off the same
|
|
codebase and make use of platform dependent APIs and features that users of
|
|
specific operating systems have come to expect.
|
|
|
|
Depending on which project you choose you may need to know Cython, OpenGL ES2,
|
|
Java, Objective-C, or C in addition to python. We make heavy use of Cython and
|
|
OpenGL for computational and graphics performance where it matters, and the
|
|
other languages are typically involved in accesses OS or provider level APIs.
|
|
|
|
We are hoping to participate in Google Summer of Code 2015. This page showcases
|
|
some ideas for GSoC projects and corresponding guidelines for students
|
|
contributing to the Kivy Framework.
|
|
|
|
Requirements
|
|
------------
|
|
|
|
It is assumed that the incoming student meets some basic requirements as
|
|
highlighted here:
|
|
|
|
* Intermediate level familiarity with Python.
|
|
* Comfortable with git and github (Kivy and its sister projects are all managed
|
|
on github) If you have never used github before you may be interested in this
|
|
`tutorial <https://guides.github.com/activities/hello-world/>`_.
|
|
* Comfortable with event driven programming.
|
|
* Has suitable tools/environment for kivy or the sister project you are going
|
|
to work on. For example to be able to work on PyOBJus you would need access
|
|
to an iOS device, mac with xcode and a developer license, to work on PyJNIus
|
|
you would need an Android device, and to work on plyer you would need access
|
|
to hardware for both platforms.
|
|
|
|
|
|
Additional desired skills may be listed with specific projects.
|
|
|
|
Familiarize yourself with the
|
|
`contributing guide <http://kivy.org/docs/contribute.html>`_
|
|
We can help you get up to speed, however students demonstrating ability in
|
|
advance will be given preference.
|
|
|
|
How to get setup
|
|
----------------
|
|
|
|
For Kivy, the easiest way is to follow the installation instructions for the
|
|
development version for your specific platform:
|
|
|
|
http://kivy.org/docs/installation/installation.html#development-version
|
|
|
|
For the rest it's usually sufficient to install the relevant project from git
|
|
and add it to your PYTHONPATH.
|
|
|
|
eg.. for PyJNIus::
|
|
|
|
git clone http://github.com/kivy/pyjnius
|
|
export PYTHONPATH=/path/to/pyjnius:$PYTHONPATH
|
|
|
|
|
|
Project Ideas
|
|
--------------
|
|
Here are some prospective ideas sourced from the Kivy development team, if
|
|
none of these projects interest you come talk to us in #kivy-dev about a
|
|
project idea of your own.
|
|
|
|
Beginner Projects
|
|
~~~~~~~~~~~~~~~~~
|
|
These projects should be suitable for anyone with a college level familiarity
|
|
with Python and require little knowledge of platform specifics.
|
|
|
|
**Kivy Designer**
|
|
|
|
Description:
|
|
Kivy Designer is a GUI tool for creating Kivy GUI layouts written in Kivy.
|
|
You can compose, customize, and test widgets using the tool. This project
|
|
has been the subject of 2 previous GSoC and is experimental, alpha level
|
|
software at the moment. However, it is a very popular request for more
|
|
updates among our users; if you are interested in GUI tool development
|
|
this could be a great fit for you!
|
|
|
|
The Student will:
|
|
|
|
- Integrate Buildozer, which is our build tool for deploying to different
|
|
target OS, within the kivy-designer.
|
|
- Interface for using hanga.io (Remote Buildozer server) as a deployment
|
|
target.
|
|
- Better File management for project files. Browser Pane.
|
|
- Interface to test using different screen modules, for emulating interface
|
|
on different screen sizes.
|
|
- Interface to Select different targets, simulator or actual device if
|
|
connected to deploy to.
|
|
- Add mobile specific UI fixes(mostly making sure UI looks and feels the
|
|
same on tablets as on desktops)
|
|
- Work on stability fixes.
|
|
|
|
References:
|
|
- https://github.com/kivy/kivy-designer
|
|
- http://github.com/kivy/buildozer
|
|
- http://hanga.io
|
|
|
|
Expected outcome:
|
|
It is expected that the student completes all the features mentioned above,
|
|
except stability fixes which is dependent on however much time is left
|
|
after completing the rest of the features.
|
|
|
|
- **Mentors**: Akshay Arora, Ryan Pessa
|
|
- **Requirements:** Access to Linux, Windows, or OS X
|
|
- **Task level**: Easy
|
|
- **Desired Skills**: Experience with other GUI creation tools. Familiar
|
|
with Kivy approach to EventLoop and UIX Widgets.
|
|
|
|
**Matplotlib Integration**
|
|
|
|
Description:
|
|
More advanced graphing and plotting tools are a frequently requested
|
|
addition to Kivy, and it would be ideal to provide them via integration
|
|
with matplotlib's extensive feature set. The primary goal of the project
|
|
would be to write a Kivy backend to matplotlib that displays plots using
|
|
Kivy's own graphics API, but it would also potentially involve ensuring
|
|
that matplotlib is deployable on every platform Kivy supports.
|
|
|
|
References:
|
|
- http://matplotlib.org/
|
|
- https://github.com/kivy/kivy
|
|
|
|
Expected outcome:
|
|
The matplotlib widgets will be included in the Kivy garden and ready to
|
|
use on all of Kivy's supported OS.
|
|
|
|
- **Mentors**: Alexander Taylor, Matthew Einhorn, Jacob Kovac
|
|
- **Requirements:** Access to Desktop OS and ideally at least one mobile
|
|
platform
|
|
- **Task level**: Easy
|
|
- **Desired Skills**: Familiarity with Kivy widget construction and
|
|
matplotlib.
|
|
|
|
Intermediate Projects
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
These projects will involve more than just pure Python coding. You may find
|
|
yourself either dealing with the details of cross platform compilation or
|
|
working with communicating between Python and an API in a different language.
|
|
|
|
**Plyer:**
|
|
|
|
Description:
|
|
Plyer is a platform-independent Python API to use features
|
|
commonly found on the desktop and mobile platforms supported by
|
|
Kivy. The idea is to provide a stable API to the user for
|
|
accessing features of their desktop or mobile device.
|
|
|
|
The student would replace some `.java` code currently in the Kivy
|
|
project to a more appropriate place in Plyer. In addition, the
|
|
student would work on improving access to platform specific
|
|
features through Plyer, including accessibility, Bluetooth,
|
|
Bluetooth Low Energy, recording and previewing the video camera,
|
|
accessing contacts, recording audio, and utilizing speech
|
|
recognition.
|
|
|
|
Under the hood you'll use PyJNIus on Android, PyOBJus on OS X and
|
|
iOS, ctypes on Windows, and native APIs on Linux. This probably
|
|
would also include improving PyObjus and PyJNIus to handle
|
|
interfaces that they can't right now.
|
|
|
|
References:
|
|
- https://github.com/kivy/plyer
|
|
- https://github.com/kivy/pyjnius
|
|
- https://github.com/kivy/pyobjus
|
|
- https://github.com/kivy/python-for-android
|
|
- https://github.com/kivy/kivy-ios
|
|
Expected outcome:
|
|
A successful outcome would include moving the Kivy Java code to
|
|
plyer and implementation of some or all of the new facades to be
|
|
decided with the student.
|
|
|
|
- **Mentors**: Gabriel Pettier, Sebastian Popute
|
|
- **Requirements**: Access to Linux, Windows, OS X, iOS device,
|
|
Android device.
|
|
- **Task level**: Intermediate
|
|
- **Desired Skills**: Familiarity with Pyjnius, PyOBJus.
|
|
|
|
**Font Reshaping and Font Fallback Support**
|
|
|
|
Description:
|
|
Currently Kivy does not support reshaping for alphabets such as Arabic,
|
|
Persian, Thai, or Devanagari. The solution is to integrate a text shaping
|
|
engine- Harfbuzz. You would need to ensure that we can compile Harfbuzz
|
|
on every platform and properly integrate it as a core text provider.
|
|
|
|
The second part of the same project would involve font fallback support.
|
|
If a particular character/glyph is missing; currently we show a [] box.
|
|
The solution for this would involve either using an OS API if available
|
|
or maintaining a hashtable for the default fonts on each OS which can be
|
|
used for glyph fallback.
|
|
|
|
References:
|
|
- http://www.freedesktop.org/wiki/Software/HarfBuzz/
|
|
- https://github.com/kivy/kivy/tree/master/kivy/core/text
|
|
|
|
Expected outcome:
|
|
Font fallback and text reshaping support Kivy and correct compilation
|
|
recipes for the libs used (harfbuzz) for platforms that need it,
|
|
such as Python-For-Android.
|
|
|
|
- **Mentors**: Akshay Arora, Jacob Kovac
|
|
- **Requirements:** Access to Desktop OS and ideally at least one mobile
|
|
platform
|
|
- **Task level**: Intermediate
|
|
- **Desired Skills**: Familiarity with text rendering, HarfBuzz, and Kivy's
|
|
provider abstraction.
|
|
|
|
|
|
Hard Projects
|
|
~~~~~~~~~~~~~
|
|
These projects may involve very in-depth knowledge of Kivy's existing
|
|
internals, the hairy details of cross-platform compilation, or other fairly
|
|
advanced topics. If you are comfortable with the internals of Python, working
|
|
with C code, and using Cython to build your own C extensions these projects
|
|
may appeal to you.
|
|
|
|
**Python-For-Android Revamp:**
|
|
|
|
Description:
|
|
Currently Python-For-Android is not very flexible and have a very specific
|
|
bootstrap crafted for use with Kivy's old SDL1.2/1.3 backend used through
|
|
Pygame and functions only with Python2. Your job would be to make the
|
|
necessary changes to expose swappable bootstraps, python interpreters,
|
|
and the appropriate compilation options for ARM and x86 Android. This
|
|
project will involve a significant amount of refactoring the current tool,
|
|
as much hardcoded functionality needs to be made optional. A student
|
|
looking to take on this task should be familiar with compiling Python,
|
|
the compilation process for Cython modules, and the Android SDK and NDK.
|
|
|
|
The Student will:
|
|
|
|
- Introduce bootstrap argument for the distribute script
|
|
- Introduce a new SDL2 bootstrap
|
|
- Refactor old bootstrap to use new approach
|
|
- Refactor pyjnius to find the appropriate Activity from the provided
|
|
bootstrap
|
|
- Introduce option for compilation with Python3 instead of Python2, this will
|
|
involve properly configuring the blacklist of ommitted modules, the
|
|
collection of libs into one large one to avoid shared library limit on
|
|
older devices, and performing any Python3 code conversions necessary.
|
|
- Ensure all recipes work with Python3 version of their modules
|
|
- Introduce option for compiling for different architectures (ARM and x86)
|
|
|
|
References:
|
|
- https://github.com/kivy/python-for-android
|
|
|
|
Expected outcome:
|
|
Python-for-Android with more options for compilation including Python2
|
|
and Python3, legacy Pygame bootstrap, SDL2 bootstrap, and ARM and x86
|
|
compilation options.
|
|
|
|
- **Mentors**: Mathieu Virbel, Jacob Kovac
|
|
- **Requirements:** Access to Linux, Android.
|
|
- **Task level**: Hard
|
|
- **Desired Skills**: Understanding of cross-compilation for Android,
|
|
familiarity with PyJNIus
|
|
|
|
|
|
How to Contact devs
|
|
-------------------
|
|
Ask your questions on the Kivy users forums http://kivy.org/#forum
|
|
|
|
Or send a mail at kivy-users@googlegroups.com
|
|
|
|
Make sure to Join kivy-dev user group too @
|
|
https://groups.google.com/forum/#!forum/kivy-dev
|
|
|
|
You can also try to contact us on IRC (online chat), to get the irc handles of
|
|
the devs mentioned above visit http://kivy.org/#aboutus
|
|
|
|
Make sure to read the `IRC rules <http://kivy.org/docs/contact.html>`_ before
|
|
connecting. `Connect to webchat <http://webchat.freenode.net/?nick=kvuser_GSOC_.&channels=kivy&uio=d4>`_
|
|
|
|
|
|
Most of our developers are located in Europe, India, and North America so keep
|
|
in mind typical waking hours for these areas.
|
|
|
|
|
|
How to be a good student
|
|
------------------------
|
|
|
|
If you want to participate as a student and want to maximize your chances of
|
|
being accepted, start talking to us today and try fixing some smaller problems
|
|
to get used to our workflow. If we know you can work well with us, you will
|
|
have much better chances of being selected.
|
|
|
|
Here's a checklist:
|
|
|
|
* Make sure to read through the website and at least skim the documentation.
|
|
* Look at the source code.
|
|
* Read our contribution guidelines.
|
|
* Make a contribution! Kivy would like to see how you engage with the
|
|
development process. Take a look at the issue tracker for a Kivy project
|
|
that interest you and submit a Pull Request. It can be a simple bug or a
|
|
documentation change. We are looking to get a feel for how you work, not
|
|
evaluating your capabilities. Don't worry about trying to pick something
|
|
to impress us.
|
|
* Pick an idea that you think is interesting from the ideas list or come up
|
|
with your own idea.
|
|
* Do some research **yourself**. GSoC is about give and take, not just one
|
|
sided interaction. It is about you trying to achieve agreed upon goals with
|
|
our support. The main driving force in this should be, obviously, yourself.
|
|
Many students pop up and ask what they should do. You should base that
|
|
decision on your interests and your skills. Show us you're serious about it
|
|
and take the initiative.
|
|
* Write a draft
|
|
`proposal <https://wiki.python.org/moin/SummerOfCode/ApplicationTemplate2014>`_
|
|
about what you want to do. Include what you understand the current state of
|
|
the project to be, what you would like to improve, how, etc.
|
|
* Discuss that proposal with us in a timely manner. Get feedback.
|
|
* Be patient! Especially on IRC. We will try to get to you if we're available.
|
|
If not, send an email and just wait. Most questions are already answered in
|
|
the docs or somewhere else and can be found with some research. Your
|
|
questions should reflect that you've actually thought through what you're
|
|
asking and done some rudimentary research.
|
|
* Most of all don't forget to have fun and interact with the community. The
|
|
community is as big a part of Open Source as the code itself.
|
|
|
|
What to expect if you are chosen
|
|
--------------------------------
|
|
|
|
* All students should join the #kivy and the #kivy-dev irc channels daily,
|
|
this is how the development team communicates both internally and with the
|
|
users.
|
|
* You and your mentors will agree on two week milestones for the duration of
|
|
the summer.
|
|
* Development will occur in your fork of the master branch of Kivy, we expect
|
|
you to submit at least one PR a week from your branch into a branch reserved
|
|
for you in the primary repo. This will be your forum for reporting progress
|
|
as well as documenting any struggles you may have encountered.
|
|
* Missing 2 weekly PR or 2 milestones will result in your failure unless there
|
|
have been extenuating circumstances. If something comes up, please inform
|
|
your mentors as soon as possible. If a milestone seems out of reach we will
|
|
work with you to reevaluate the goals.
|
|
* Your changes will be merged into master once the project has been completed
|
|
and we have thoroughly tested on every platform that is relevant!
|