Google Summer of Code 2010

This is the main organization page for the Google Summer of Code efforts of the Sage project.

If you're a student interested in working on any of the projects described below, or if you want to suggest any other projects, please write a short message to [email protected] introducing yourself (background, skills) and your interests.

If you're a Sage developer, please take some time to organize the list below and add more ideas. The notes section contains some guidelines from the GSOC FAQ.

Important Dates

Here is the original timeline. Some highlights:

GSoC Sage Projects

All #numbers below refer to trac tickets.

Notebook

The Sage notebook is an AJAX application similar to Google Documents that provides functionality for all mathematical software somewhat like Mathematica notebooks. It was written from scratch (in Javascript and Python) by the Sage development team, and has been used daily by thousands of people over the last year. It's one of the main killer features of Sage. This project is about improving the notebook. No special mathematical knowledge is required. Knowledge of Javascript, jQuery, Python, and general AJAX techniques is needed.

Internationalization of the notebook

This project would involve changing the Sage notebook so that the user interface language can be translated and changed on the fly. This project will require knowledge of Python, Mercurial, and basic web coding; knowing the GNU gettext utilities, Javascript, and the Jinja web templating system will be helpful. No knowledge of (human!) languages other than English is necessary.

Currently, the user interface for the Sage notebook is all in English. Several one-off translations have been done (Korean; Russian) involved going through source code and translating each string individually. The goal of the Sage project is to produce a viable alternative to Maple, Mathematica, Magma, and Matlab; having the user interface available in non-English languages would have a tremendous impact on that goal and vastly increase the number of people who can benefit from Sage.

Proper internationalization (i18n) involves wrapping each string in a function that looks up the correct translation, depending on the current language selected.

Deliverables for this project would include:

It would also be nice to work on support for more significant localization, perhaps using the Python Babel tools; this would include more thorough localization abilities, such as proper pluralization, thousands/decimal separators, ordinals, date and time display, and so on.

This project will not involve any actual translation, just making it possible for the Sage notebook UI to be localized. This is probably a medium-difficulty project, and will not require any specialized knowledge of mathematics or mathematical programming.

Community Tools

Interfaces to Sage

Portable C99 libm

Sage relies on a fairly complete C99 libm. In particular, it expects the "long double" and "complex" variants of most functions to be present. Not all these functions are present on Cygwin, FreeBSD or older Solaris, causing porting problems on those platforms. The objective of this task would be to either locate and port or write a libm that is sufficient to meet Sage's requirements.

One possible option would be to use glibc and only compile the libm bits. (Thought glibc is a bit dodgy on the precision side in some areas).

pynac (optimizing data structures)

As the symbolics backend, Pynac is a fundamental component of Sage. With some work and optimization, it could also be used for arithmetic with other mathematical structures like generic polynomial rings. It's based on a solid library GiNaC, which has great documentation and very readable code.

Skills: C++, (the necessary Cython and Python can be picked up easily)

This project would have two steps, the first would be a major optimization for Pynac also a good introduction to the library, coding conventions, type hierarchy, etc. The second would involve replacing the basic datatypes (vectors with heaps), lot's of timings and experiments to improve performance.

Development Process

Porting

Others

Here are some other task lists:

Potential Mentors

Notes:

We should take care to define deliverables for the items below. These should be doable with less than 3 months of work.

Here is what the FAQ says for "Ideas" lists:

And this is from the notes on organization selection criteria: