Sage Development: Part 1
Fact: Now you know something about Sage, and you would like to contribute back.
How do you know that your contributions will stay free?
- Sage is free, and it will always remain free, no matter what, forever, irregardless of what I or anybody else wants.
- This is because of (1) the GPL license (say some things about the GPL), and (2) the copyright being spread amongst hundreds of people.
- [[Mention my dinner conversation with one of the founders of Maple...]]
Some recent examples of how a typical UW undergraduate students have recently contributed to Sage:
- David Ackerman: Almost every imaginable unit conversion. In the latest version of Sage, type units.<tab key>
- Andrew Hou: Type stats.<tab key> -- Andrew wrote all the basic descriptive stats functions
- Bill Cauchois: implicit 3d plotting; 3d plots using viewer="canvas3d"
- Stephanie Dietzel: Many really tricky subtle bugfixes to numerical linear algebra in Sage.
- (and there are literally dozens of other contributions)
{{{id=6|
///
}}}
{{{id=4|
///
}}}
Why are your contributions essential?
- The goal of the Sage project is to create a free open source viable alternative to Magma, Maple, Mathematica, and Matlab. Each of Maple, Mathematica, and Matlab have between 600 and 1500 employees, hence must have an annual revenue of at least 100 hundred million dollars to support their operations.
- Thus with Sage we have to directly compete with what about 2500 people are doing, supported by a quarter of a billion dollars in revenue.
- The Sage project currently receives around a hundred thousand dollars a year (if that): everything else is volunteer effort by people that are not getting paid anything to work on Sage.
{{{id=1|
import pylab as p
# make a square figure and axes
p.clf()
p.figure(1, figsize=(6,6))
ax = p.axes([0.1, 0.1, 0.8, 0.8])
labels = 'Maple', 'Mathematica', 'Matlab', 'Sage'
fte = [400, 600, 1600, 1]
p.pie(fte, labels=labels, autopct='%1.1f%%', shadow=True)
p.title('Very Rough Revenue Estimates', bbox={'facecolor':'0.8', 'pad':5})
p.savefig('sage.png')
///
}}}
{{{id=13|
///
}}}
What Can I Work do to Help?
- Fix: fix a bug. There are nearly 1000 reported bugs: http://trac.sagemath.org/sage_trac/report/17 Just start browsing!
- Write: Sage has thousands of pages of documentation, and it needs way more. Write something, e.g., a small addition to the tutorial, a new tutorial, a webpage about how to use Sage in a first Calculus course, etc. Mathematics people tend to love to write about math.
- Advertise: Tell your friends about Sage. Post on social networks and blog sites. Create a cool looking icon, poster, or logo or other pretty graphic art that can be used by the project.
- Implement: Write something entirely new, which will get used by (hopefully) thousands of people. There are still a huge number of algorithms that need to be implemented for Sage. Often when one of the Ma's is faster than Sage, this is because they have some algorithm implemented that nobody has every implemented in the free world. Be the first. Sometimes this results in publications.
- Report: If you find a bug, report it!
{{{id=12|
///
}}}
How to Actually Work on Something (Social)
- Trac: http://trac.sagemath.org is Sage development central
- EMail: the sage-devel mailing list is good for feedback on Sage development ideas. Over 1000 subscribers.
- Meet with me. If you have a good idea for a project, I can even pay you a little bit.
{{{id=11|
///
}}}
How to Actually Work on Something (Technical)
- Read the fine Sage Developers Guide.
- The rest of this lecture and the next is mainly about the technical steps explained there (and then some).
{{{id=10|
///
}}}
A Step-by-step Demonstration
In this step-by-step demonstration, I will modify a function in Sage, then create a patch. Ask lots of questions!
- Decide on a function to change.
- Find the source code.
- Edit the source code.
- Start using the modified code.
- Create a patch.
{{{id=9|
///
}}}
Python versus Cython Code
{{{id=8|
///
}}}
Add a new module or directory of code
{{{id=7|
///
}}}
The Referee Process (and Life cycle)
- Create a trac ticket
- Post code to trac
- Get it refereed (bug people if nothing happens -- there is no magic editor at present)
- Fix code based on referee feedback
- Get that refereed
- Watch your code get included into the next version of Sage
{{{id=22|
///
}}}
Working on the Sage Notebook
{{{id=25|
///
}}}
{{{id=21|
///
}}}
{{{id=20|
///
}}}
{{{id=3|
///
}}}