\documentclass[10pt]{beamer}
\include{macros}

\mode<presentation>
{
  \usetheme{Warsaw}
\usecolortheme{rose}
%\usecolortheme{seahorse}
  \setbeamercovered{transparent}
  % or whatever (possibly just delete it)
}


\usepackage[english]{babel}
% or whatever

\usepackage[latin1]{inputenc}
% or whatever

\usepackage{times}
\usepackage[T1]{fontenc}
% Or whatever. Note that the encoding and the font should match. If T1
% does not look nice, try deleting the line with the fontenc.


\title{SAGE: Python Software for Algebra and 
Geometry Experimentation}

\author{William Stein}\vspace{-2ex}

% - Use the \inst command only if there are several affiliations.
% - Keep it simple, no one is interested in your street address.

\date[August 17] % (optional)
{August 17, 2006\\
SCIPY 2006\\
\includegraphics[width=8em]{icon-4.jpg}}

\subject{Talks}

% Delete this, if you do not want the table of contents to pop up at
% the beginning of each subsection:
\AtBeginSubsection[]
{
  \begin{frame}<beamer>
    \frametitle{Outline}
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}
}

% If you wish to uncover everything in a step-wise fashion, uncomment
% the following command: 

%\beamerdefaultoverlayspecification{<+->}

\begin{document}

\begin{frame}
  \titlepage
\end{frame}

\begin{frame}
  \frametitle{Outline}
  \tableofcontents
  % You might wish to add the option [pausesections]
\end{frame}


\section{What is SAGE?}
\begin{frame}
\frametitle{The GOAL}

{\bf \large {\dblue GOAL:} Create the {\dred best available free software}
  for algebra, number theory, and geometry.  Very Quickly.}\vspace{-1.5ex}

\begin{center}
  \includegraphics[width=0.9\textwidth]{sage-car.jpg}
\end{center}
 
\end{frame}

\begin{frame}[fragile]
\small
From the Axiom mailing list (yesterday):
\begin{verbatim}
From: "Page, Bill" <Bill.Page@drdc-rddc.gc.ca>
Subject: Sage on MathAction
Date: Wed, 16 Aug 2006 07:48:48 -0400

Axiom Developers and computer algebra enthusiasts!
 
I have a very preliminary demonstration of the integration
of Sage with the MathAxiom wiki here:
 
http://wiki.axiom-developer.org/SandBoxSageTest
 
I would like to encourage you to test this further. You will
find that Sage is quite different than any other computer
algebra system with which you might be familiar - truly a
"new generation".

[...]
 
Enjoy!
 
Regards,
Bill Page.
\end{verbatim}
\end{frame}

\begin{frame}[fragile]
\begin{verbatim}
[...]
I think the Sage developers were very bold - maybe 
even audacious - to actually attempt this. And they 
are doing it in a largely pragmatic way without 
attempting to incorporate the more formal and 
theoretical ideas developed by the OpenMath 
community. 

One might have been tempted to predict 
an early failure to this effort but on the contrary 
Sage seems to be growing more rapidly than any 
other computer algebra research and development 
effort. I guess this just provides one more 
demonstration that software development - 
particularly open source software development - 
is not a linear process.
\end{verbatim}
\end{frame}

\begin{frame}[fragile]
\begin{verbatim}
From: "Hoon Hong" <hong@math.ncsu.edu>
To: <wstein@gmail.com>
Subject: SAGE project
Date: Wed, 16 Aug 2006 20:26:12 -0400

Dear William (call me Hoon),

  I am writing in the capacity as the editor-in-chief 
  of Journal of Symbolic Computation (JSC).

  I believe that the SAGE project is a very important 
  effort for symbolic computation, and that it should 
  be widely recoqnized and supported.

  Therefore, I would like to invite you 
  to submit a paper on SAGE project to JSC
  (say about up to 30 pages).

[...]
\end{verbatim}
\end{frame}  

\begin{frame}
\frametitle{What is SAGE?}
{\Large
\begin{enumerate}
\item A {\dred distribution} of free open source math software: 52MB source
tarball that builds self-contained (``no'' dependencies).
\item A {\dred new Python library:} algebraic analogue of SCIPY?
{\small (Though SCIPY is very important to SAGE)}
\item A {\dred new way to use} your favorite mathematics software: Mathematica,
Maple, etc. 
\end{enumerate}
} 

SAGE supports {\dred Linux, OS X, and Windows}.  
Some people use SAGE on Solaris.
\end{frame}

\begin{frame}
\frametitle{Who is Writing SAGE?}

I am a number theorist in a ``pure mathematics'' department. 

\begin{center}
\large
  Professors, Postdocs, Graduate students, Undergraduates,
  High school teachers, Professionals, Retired tech workers, {\dred YOU!}
\end{center}

\vfill

{\dblue Contributors Include:}
{\em Tom Boothby},
Robert Bradshaw,
David Harvey,
Craig Citro,
Bobby Moretti,
Emily Kirkman,
Yi Qiang,
Josh Kantor,
{\em David Kohel},
{\em David Joyner},
Iftikhar Burhanuddin,
John Cremona,
{\em Martin Albrecht},
Wilson Cheung,
{\em Alex Clemesha},
Didier Deshommes,
Naqi Jaffery,
Kiran Kedlaya,
David Roe,
David Kirkby,
Jon Hanke,
Gregg Musiker,
Fernando Perez, 
Nathan Ryan, 
Kyle Schalm,
Steven Sivek,
Jaap Spies,
{\em Gonzalo Tornaria},
Justin Walker,
Mark Watkins,
Joe Weening,
Joe Wetherell

\vfill 

{\dred We use DARCS for revision control and code sharing.  It
works {\em shockingly well}.}

\end{frame}

\begin{frame}[fragile]
\frametitle{Where are they writing SAGE?}
{\tt http://sage.math.washington.edu}\\
\vfill
\includegraphics[width=0.9\textwidth]{sageserver.jpg}
\vfill
The SAGE ``sandbox'': {\dred 64GB RAM}, {\dblue 16 processor} Opteron
server.  You can browse the developer working directories
over the web here!
\end{frame}

\section{Technology Overview}
\begin{frame}
\Huge
\vfill
\begin{center}
Technology Overview
\end{center}
\vfill
\end{frame}


\begin{frame}
\frametitle{The SAGE Notebook}

{\dred Surprising FACT}: Most people I've polled {\dred vastly
  prefer} using a good GUI for interacting with math software, if
 available.
\vfill
{\dblue So now SAGE has one.}  Creating this was {\dred not easy} (for me).
\vfill

\begin{enumerate}
\item The SAGE Notebook -- An {\dred ``AJAX application''} like Google maps or
  Gmail.  I don't want to reinvent the GUI.
\item {\dred Written from scratch} recently by me, Alex C. and Tom B.\vfill
\item Uses Python's built-in {\dred BaseHTTPServer} web server (we may
soon switch to Twisted for a more robust security model).
\vfill
\item Works well with Firefox, Safari, and Opera.\vfill
\item Client/server model which works {\dred over network} or locally.  \vfill
\item A very usable and (mostly) robust version {\dred is done and
  fully usable}.  There is a big idea list that will influence the next
  version.
\item Try it now at {\tt http://sage.math.washington.edu:8100}
\end{enumerate}
\end{frame}


\begin{frame}
\frametitle{Interfaces (mostly use pexpect)}
{\dblue Continue to use} your favorite programs and code 
from within SAGE (but with a {\dblue Pythonic} interface!):
\vfill\large
\begin{itemize}
\item SAGE includes (mostly pseudo-tty) interfaces to
\begin{center}
{\em\dred GAP}, {\em\dred GP/PARI}, Kash, Macaulay2,
Magma, Maple, Mathematica,
{\em\dred Maxima}, Octave, {\em\dred Singular}, etc.
\end{center}
\item Red systems are included standard with SAGE.
\item Get access to all of the functionality of the other
systems via interfaces.  (But there is some overhead.)
\item Get tab completion and online help even for interfaces (demo this).
\end{itemize}

\end{frame}

\begin{frame}[fragile]
\frametitle{Pyrex: Fast compiled code}
\begin{itemize}
\item Is SAGE {\dred ``impossible''}???:
{\small \begin{verbatim}
Date: Mon, 14 Aug 2006 15:26:36 +0100 (BST)
From: Kevin Buzzard <k.buzzard@imperial.ac.uk>
I've never understood how you can think something that 
sits on top of python can beat some custom code like 
magma. How does SAGE multiply two numbers? Does it use 
python to do it? I was trying to explain SAGE to Jon 
Dee and failed miserably.
Kevin 
\end{verbatim}}

\item SAGE can be very fast, since it is partly written in {\dred
    Pyrex}, which is a Python-like language that is converted to C and
  compiled: {\tt\small
    http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/} My plan
  is that all of SAGE's basic arithmetic types will be
  (re-)written this way in the next few months.

\item Martin Albrecht and I have had to {\dred modify Pyrex}. 

\end{itemize}

\end{frame}

\begin{frame}
\frametitle{Distribution Model}
Platforms: Linux, OSX, Windows, Solaris
\begin{itemize}
\item {\dblue Linux} -- Easy build from source; .dep and .rpm's will
be forthcoming.
\item {\dblue OS X} -- Easy build from source; precompiled binaries (tarballs) just
work. 
\item {\dblue Windows} -- {\em impossible} to do a native build without cygwin,
which sucks.   We tried {\em everything} in practical environments. 
{\dred Colinux is bar far the best solution for SAGE}.
\item {\dblue Solaris} -- very difficult; can be built mostly... 
\end{itemize}
\end{frame}


\section{History and Status Report} 
\begin{frame}
\Huge
\vfill
\begin{center}
History and Status Report
\end{center}
\vfill
\end{frame}

\begin{frame}
\frametitle{History: SAGE 0.1 to SAGE 1.3.6.3}
\large
\begin{itemize}
\item {\dblue Feb 2005:} I got job offers with {\dred tenure} -- {\em SAGE 0.1}
\item {\dblue April 2005:} Created {\dred interfaces} to Mathematica, Magma, etc.
\item {\dblue Feb 2006:} SAGE Days 1 workshop -- {\dred SAGE 1.0}
\item {\dblue June 2006:} High school workshop -- {\dred SAGE Notebook }
\item {\dblue August 2006:} MSRI Workshop -- two week super-intense {\em graduate
student} coding sprint.
\item {\dblue Today:} SAGE now has a {\dred huge range of
    functionality}.  It was the only system to do all the
  math-polyglot problems.  But for much of importance to me currently
  {\dred SAGE is not fast enough.  This is {\em unacceptable}.}
\end{itemize}

\end{frame}

\begin{frame}[fragile]
\frametitle{The SAGE Library}
\small
\begin{verbatim}
algebras    edu         lfunctions  monoids          sets
categories  ext         libs        plot             structure
coding      functions   matrix      quadratic_forms  tests
combinat    geometry    misc        rings
crypto      groups      modular     schemes
databases   interfaces  modules     server

UNIQUE Source Code Lines (including docstrings):
$ cat */*.py */*/*.py */*/*/*.py */*.pyx \
                        */*/*.pyx */*/*.pyx |sort |uniq | wc -l
81128

UNIQUE Input Docstrings:
$ cat */*.py */*/*.py */*/*/*.py */*.pyx \
          */*/*.pyx */*/*.pyx |sort|uniq|grep "sage:" | wc -l
8867
\end{verbatim}
%Over 250 (of the about 1100) patches were not written by me. 
\end{frame}

\begin{frame}
\begin{tabular}{|l|l|}\hline
Group theory and combinatorics  &	GAP \\\hline
Symbolic computation and Calculus  &	Maxima  \\\hline
Commutative algebra &	Singular  \\\hline
Number theory &	PARI, MWRANK, NTL  \\\hline
Graphics &	Matplotlib   \\\hline
Numerical linear algebra & 	Numeric  \\\hline
Mainstream programming language & 	Python  \\\hline
Interactive Shell &	IPython   \\\hline
Graphical Interface & Notebook (Javascript) \\\hline
\end{tabular}
And much more!!
\end{frame}

%\begin{frame}
%\frametitle{What is included in SAGE?}
%\begin{enumerate}
%\item {\dblue Standard packages:}\\
%cddlib, {\dred clisp}, conway\_polynomials, cremona\_mini,
%doc, ecm, freetype, gap,
%genus2reduction, gfan, givaro, {\dred gmp}, {\dred gnuplotpy},
%{\dred ipython}, lcalc, libpng, {\dred matplotlib}, {\dred maxima},
%{\dred mpfr}, mwrank, ntl, {\dred numeric}, pari, {\dred pexpect},
%{\dred pyrex}, {\dred pyrexembed}, {\dred python}, readline, 
%singular, sympow, tachyon, termcap, zlib, {\dred zodb3}
%\item {\dblue Optional Packages: {\tt sage -i package\_name}}\\
%darcs, database\_cremona\_ellcurve,
%database\_gap, database\_jones\_numfield,
%database\_kohel, database\_odlyzko\_zeta, database\_sloane\_oeis,
%database\_stein\_watkins\_mini, {\dred dvipng}, extra\_docs, gap\_packages,
%gd, {\dred gnuplot}, hermes, kash3\_linux, kash3\_osx, lie, linbox,
%macaulay2, {\dred mayavi}, {\dred moin (wiki)}, {\dred numarray}, 
%{\dred numpy}, nzmath, polymake, 
%pygtk, RealLib3, {\dred scipy}, {\dred soya}
%\end{enumerate}
%\end{frame}

\begin{frame}
\frametitle{SAGE is not Just a Python Package?}
\large
SAGE is {\dred self-contained} and builds into its own copy of Python.
\begin{enumerate}
\item In some ways this is {\dred very good}.
\item In some ways this is {\dred very bad}.  
\item You can use system-wide Python modules in SAGE:\\
  {\tt\small import sys
sys.path.append('/usr/lib/python2.4/site-packages')}
The opposite direction unfortunately doesn't work yet.
\item {\dblue Surprising FACT:} That SAGE is self-contained greatly
  {\dred encourages ordinary users to be developers}.

\end{enumerate}

\end{frame}

\begin{frame}
\frametitle{Goals for SAGE 2.0}
{\Large Goals for SAGE 2.0 -- December 2006}
\large
\begin{enumerate}
\item {\dblue Very fast} basic arithmetic, e.g., finite fields, polynomials, etc.
\item Very fast {\dred everyday {\em exact} linear algebra} (much work
  done by D. Harvey and R. Bradshaw last week).
\item Much better source code {\dred introspection} (e.g., Pyrex code,
  hyperlinks to files, etc.).
\item {\dblue Stable release} -- feature freeze, bug fixing, etc. 

\item Create {\dred SAGE Foundation} -- doing SAGE right
costs about \$100K/year, and it is very difficult to cover that
with grants: (4 undergrad employees, 2 workshops, 
grad student support, hardware, visitors, teaching reduction).

\end{enumerate}


\end{frame}

\begin{frame}
\frametitle{The Future (2007) -- SAGE 3.0: Very easy to use parallelism}
\large
\begin{enumerate}
\item Good support for {\dblue coarse grain parallelism} and use of
it for {\dred our algorithms}.  
\item Systematically add {\dblue fine-grained parallelism} for very specific
  operations, e.g., multimodular matrix multiplication over $\Q$.
\item Hopefully a {\dred workshop in January} at MSRI on this.
\item Hopefully followed by a series of {\dred intense 2-week coding
sprints}.
\item Fernando Perez et al., Yi Qiang, Jason Martin, etc. 
\end{enumerate}

\vfill
\LARGE
\dblue Any Questions?

\end{frame}


\end{document}


