\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: Software for Algebra
and Geometry Experimentation}

\author{William Stein}

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

\date[Jan 5] % (optional)
{\vspace{-6ex}

January 15, 2007,
UW CSE Colloquium\\

\includegraphics[width=22em]{sage-car.png}}

\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{The Genesis of SAGE}
\large
\begin{itemize}
\item {\dblue 1997--1999:} (Berkeley grad student) HECKE -- my free C++ program for my thesis research.
\item {\dblue 2000--2005:} (Harvard) I wrote $>25,000$ lines of Magma code. I had really wanted a sufficiently powerful open source math software system
with a modern language... but none existed. 
  \item {\dblue Feb 2005:} Started SAGE (job offers with {\dgreen tenure}).
\item {\dblue Feb 2006:} {\dred UCSD SAGE Days 1} -- SAGE 1.0.
\item {\dblue June 2006:} {\dred UW High school} workshop -- Notebook.
\item {\dblue August 2006:} {\dred MSRI Grad student} workshop.
\item {\dblue October 2006:} {\dred UW SAGE Days 2} workshop.
\item {\dblue Now:} {\dred SAGE-1.7}; and {\dred SAGE 2.0} by end of month!
\end{itemize}

\end{frame}

\begin{frame}[fragile]
\frametitle{Welcome to SAGE!}
{\small
\begin{verbatim}
rank4:~/talks/2007-01-15-sage-cse was$ sage
--------------------------------------------------------------
| SAGE Version 1.7, Release Date: 2007-01-16                 |
| Type notebook() for the GUI, and license() for information.|
--------------------------------------------------------------

sage: 2 + 2
4
sage: notebook()
**************************************************
* Open your web browser to http://localhost:8000 *
**************************************************

....
\end{verbatim}}

\end{frame}

\begin{frame}[fragile]
\frametitle{Is Open Source Math Software Important for Mathematical Research?}

``You can read Sylow's Theorem and its proof in Huppert's book in the
library [...]  then you can use Sylow's Theorem for the rest of your
life free of charge, but for many computer algebra systems license
fees have to be paid regularly [...].  You press buttons and you get
answers in the same way as you get the bright pictures from your
television set but you cannot control how they were made in either
case.
\vspace{1ex}

With this situation {\dred two of the most basic rules of conduct in
  mathematics are violated}: In mathematics {\dblue information is passed on
free of charge} and {\dblue everything is laid open for checking}. Not applying
these rules to computer algebra systems that are made for mathematical
research [...]  means {\dred moving in a most undesirable direction}.
Most important: Can we expect somebody to believe a result of a
program that he is not allowed to see? Moreover: Do we really want to
charge colleagues in Moldava several years of their salary for a
computer algebra system?''

\vspace{1ex}

-- J. Neub\"user (1993) (he started GAP in 1986).
\vspace{-.5ex}

\end{frame}

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


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

\begin{itemize}
\item {\dred Undergraduates}:
have many {\dblue interesting} ideas;
superb at researching available free software;
amazing programmers.

\item {\dred Graduate students}:
 excellent at implementing optimized code and finding
fast algorithms.

\item {\dred Faculty and computer professionals}: 
general direction, great writing, and quality control.


\end{itemize}

{\dgreen Funding:}  Miniscule compared to that of Magma, Maple, etc.
UW Math department startup money, NSF VIGRE 
money, my NSF grant, the MSRI (workshops), IPAM (workshop)
 

\end{frame}


\begin{frame}
\frametitle{Active UW Student SAGE Developers}
\begin{enumerate}
\item {\dblue Tom Boothby} (undergrad) -- The SAGE Notebook, powering algorithms, elliptic curves 
\vfill
\item {\dblue Robert Bradshaw} (grad) -- Linear algebra, number theory
\vfill
\item {\dblue Josh Kantor} (grad) -- Numerical computation; 3d graphics
\vfill
\item   {\dblue Emily Kirkman} (undergrad) -- some linear algebra; lots of work
on the SAGE graph theory package.
\vfill
\item {\dblue Robert Miller} (grad) -- Graph theory
\vfill
\item   {\dblue Bobby Moretti} (undergrad) -- Symbolic calculus, some group theory, packaging,
chroot jails.
\vfill
\item {\dblue Andrey Novoseltsev} (grad) -- combinatorial geometry, polytopes
\vfill
\item   {\dblue Yi Qiang} (undergrad) -- Distributed SAGE
\vfill

\end{enumerate}

\end{frame}


\begin{frame}\frametitle{SAGE Days 2 at UW: Coding Sprints...}
\includegraphics[width=\textwidth]{sagedays2moment.png}
\vfill
{\small Bobby Moretti (UW undergrad), Robert Miller (UW grad),
David Harvey (Harvard grad), Joel Mohler (grad),
David Joyner (USNA), Bill page (Axiom).}
\end{frame}

\begin{frame}
\frametitle{Upcoming SAGE-related Workshops I'm Organizing}
\begin{itemize}

\item {\dred Parallel Computation Workshop} at MSRI, Jan 29--Feb 2, 2007.  I'm the  organizing committee chair.

\item {\dred SAGE Days 3} at IPAM (in LA) Feb 17--21, 2007.


\begin{center}
\includegraphics[width=0.4\textwidth]{sd3-motivator-mozaic.jpg}
\end{center}

\item {\dred AIM} workshop, databases
in SAGE, July 30-Aug 3, 2007.
\end{itemize}

\end{frame}

\begin{frame}
\frametitle{The SAGE Website}
\begin{center}
{\dblue\LARGE The SAGE Website}
\end{center}
\begin{enumerate}
\item {\dred Website:} \url{http://modular.math.washington.edu/sage}
\item {\dred Free online SAGE notebook:} 
  \url{http://sage.math.washington.edu:8100}
\item {\dred Documentation:} Tutorial, Install Guide, Programming
Guide, Reference Manual, Constructions.
\item {\dred Targeted Platforms:} OS X, Linux, and
MS Windows (Cygwin).
\item {\dred Mailing Lists:} {\dblue sage-devel},  
sage-announce, sage-forum, sage-support, and
sage-uw. 
\item {\dred Wiki:} \url{http://sage.math.washington.edu:9001/}
\item {\dred Bug Tracker:} \url{http://sage.math.washington.edu:9002/sage_trac}
\item {\dred IRC Chatroom:} {\tt \#sage-dev} on irc.freenode.net
\end{enumerate}
\end{frame}


\section{What is SAGE?}

\begin{frame}
\frametitle{What is SAGE?}
{\Large SAGE has {\dred three} complementary aspects:}
\vfill
{\Large
\begin{enumerate}
\item {\dred A Free Distribution} of open source math software. 
80MB source tarball that builds {\dblue easily} on 
OS X, Linux, and MS Windows.
\item {\dred New Functionality} that fill in gaps in what is available elsewhere.
\item {\dred A Unified Interface} to
most math software: to Magma, Macaulay2, 
Singular, Maple, MATLAB, Mathematica, Axiom, etc.
\end{enumerate}
} 
\end{frame}



\begin{frame}
\vspace{-1ex}
\frametitle{What is SAGE?}
\begin{center}
{\dblue\LARGE 1. A Free Distribution}
\vspace{-2ex}
\end{center}

\begin{center}
\begin{tabular}{|l|l|}\hline
Arithmetic &	{\dred GMP, MPFR}  \\\hline
Commutative algebra &	{\dred Singular}  (libcf, libfactory) \\\hline
Cryptography & {\dred OpenSSL, PyOpenSSL, PyCrypto}\\\hline
Group theory and combinatorics  &	{\dred GAP} \\\hline
Graph theory &	{\dred NetworkX} \\\hline
Number Theory & {\dred PARI, NTL}\\\hline
Numerical computation & {\dred GSL, Numpy} \\\hline
Calculus, Symbolic comp &	{\dred Maxima}  \\\hline
Specialized math & many C/C++ programs...\\\hline
Command Line &	{\dred IPython}   \\\hline
Graphical Interface & {\dblue Notebook}, {\dred jsmath, Moin wiki} \\\hline
Plotting &	{\dred Matplotlib, Tachyon, libgd}   \\\hline
Networking & 	{\dred Twisted}  \\\hline
Database & {\dred ZODB}, Python Pickles \\\hline
Programming language & {\dred	Python}, {\dblue SageX} (compiled python) \\\hline
\end{tabular}
\end{center}
\vfill
The components of SAGE are all active open source projects.
\end{frame}

\begin{frame}[fragile]
\frametitle{What is SAGE?}
\begin{center}
{\dblue\LARGE 2. New Functionality}
\end{center}

Python and SageX code --- {\dred readable}:
\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

Over 100,000 new lines (including docstrings):
$ cat */*.py */*/*.py */*/*/*.py */*.pyx \
                */*/*.pyx */*/*.pyx |sort |uniq | wc -l
102932
May Documentation Examples:
$ cat */*.py */*/*.py */*/*/*.py */*.pyx \
          */*/*.pyx */*/*.pyx |sort|uniq|grep "sage:" | wc -l
11899
\end{verbatim}
\end{frame}

\begin{frame}
\begin{definition}[Bernoulli Numbers]
The
\defn{Bernoulli numbers} $B_n$ for $n\geq 0$ 
are {\em defined} by:
\begin{equation}\label{eqn:def_bernoulli}
  \frac{x}{e^x - 1} = \sum_{n=0}^{\infty} B_n \frac{x^n}{n!}.
\end{equation}
\end{definition}

Expanding the series further, we obtain the following table:
\vspace{0.5ex}

\noindent{}$\ds B_{0}=1,\quad B_{1}=-\frac{1}{2},\quad B_{2}=\frac{1}{6},\quad
B_{4}=-\frac{1}{30},\quad B_{6}=\frac{1}{42},
\quad$\vspace{1.5ex}

\noindent{}$\ds
B_{8}=-\frac{1}{30},\quad 
B_{10}=\frac{5}{66},\quad
B_{12}=-\frac{691}{2730},\quad
B_{14}=\frac{7}{6},\quad
$\vspace{1.5ex}

\noindent{}
$\ds{}\!\!B_{16}=-\frac{3617}{510},\quad
B_{18}=\frac{43867}{798},\quad
B_{20}=-\frac{174611}{330},\quad
$

\noindent{}
$
B_{22}=\frac{854513}{138},\quad
B_{24}=-\frac{236364091}{2730},\quad
B_{26}=\frac{8553103}{6}.
$\vspace{1ex}\label{tbl:bern}

Relevant to computing integrals, infinite sums, and very
important in number theory.

\end{frame}


\begin{frame}[fragile]\frametitle{SAGE Demo: New Code (interactive help)}
{\small
\begin{verbatim}
sage: bernoulli?   # one ? for help
    Return the n-th Bernoulli number, as a rational number.
    INPUT:
        n -- an integer
        algorithm:
            'pari'  -- (default) use the PARI C library;
                       by *far* the fastest.
            'gap'   -- use GAP
            'gp'    -- use PARI/GP interpreter
            'magma' -- use MAGMA
            'python'-- use pure Python implementation
    
    EXAMPLES:
        sage: bernoulli(12)
        -691/2730
        sage: bernoulli(50)
        495057205241079648212477525/66
    ...
    AUTHORS: David Joyner and William Stein
\end{verbatim}
}
\vfill
\end{frame}

\begin{frame}[fragile]\frametitle{SAGE Demo: New Code (interactive help)}
{\small
\begin{verbatim}
sage: bernoulli??        # two question marks for source code
File: ... python2.5/site-packages/sage/rings/arith.py
...
    if algorithm == 'pari':
        x = pari(n).bernfrac()    # Use the PARI C library
        return Rational(x)
    elif algorithm == 'gap':
        x = sage.interfaces.gap.gap('Bernoulli(%s)'%n)
        return Rational(x)
    elif algorithm == 'magma':
        x = sage.interfaces.magma.magma('Bernoulli(%s)'%n)
        return Rational(x)
    elif algorithm == 'gp':        
        x = sage.interfaces.gp.gp('bernfrac(%s)'%n)
        return Rational(x)
    elif algorithm == 'python':
        return sage.rings.bernoulli.bernoulli_python(n)
    else:
        raise ValueError, "invalid choice of algorithm"
\end{verbatim}
}
\vfill
\end{frame}

\begin{frame}[fragile]\frametitle{SAGE Demo: Unique New Code}
\begin{verbatim}
sage: bernoulli_mod_p?
    Computes bernoulli numbers B_0, B_2, ... B_{p-3}
    modulo p.
    PERFORMANCE: Should be complexity O(p log p).
    INPUT: p -- integer, a prime
    OUTPUT: list -- the bernoulli numbers modulo p.
    EXAMPLES:
        sage: bernoulli_mod_p(37)
         [1, 31, 16, 15, 16, 4, 17, 32, 22, 31, 15, 
          15, 17, 12, 29, 2, 0, 2]
    AUTHOR: David Harvey (2006-08-06)
\end{verbatim}
This implements a famous algorithm of Buhler et al.
\vfill
And there is much much more that is unique in SAGE.
\end{frame}


\begin{frame}
\frametitle{What is SAGE?}
\begin{center}
{\dblue\LARGE 3. Unified Interfaces}
\end{center}
\vfill\large
\begin{itemize}
\item SAGE {\dred interfaces to}:
Axiom, GAP, GP/PARI, Kash, Macaulay2,
Magma, Maple, Mathematica, MATLAB, Maxima, Octave, Singular, etc.

\vfill
\item  This gives SAGE a wide range of {\dred functionality}.
\vfill
\item Unified {\dred command completion and help}.
\vfill
\end{itemize}

\end{frame}



\begin{frame}[fragile]
\frametitle{SAGE Demo:  Interfaces}
{\dred HOW THEY WORK:} Use buffered psuedo-tty, files,
and Python objects that wrap native objects.  This makes
it possible to wrap {\dred all} math software
that has a command line interface using 
similar code.  

\vfill
{\blue
\begin{verbatim}
sage: x = gp('9+6')    # the GP/PARI math software
\end{verbatim}}
This fires up one copy of GP/PARI (if it wasn't already started)
and sends the line {\tt 'sage[1] = 9+6'} to it. 
It also creates a Python class x with a field set to {\tt "sage[1]"}. 
{\small\blue \begin{verbatim}
sage: !ps ax |grep gp
16389  p5  Ss+    0:00.02 /Users/was/s/local/bin/gp --fast ...
sage: type(x)
<class 'sage.interfaces.gp.GpElement'>
sage: x
15
sage: x.name()
'sage[1]'
sage: x.factor()
[3, 1; 5, 1]
\end{verbatim}
}
\end{frame}



\begin{frame}
\frametitle{Overall Structure of SAGE}
{\dblue\Large The Overall Structure of SAGE}
\vfill
\begin{itemize}
\item {\dred Custom package management system } -- 53 standard
packages and 24 optional ones.  Automated upgrades.  
\vfill
\item {\dred Interactive command-line} interface -- IPython.
\vfill
\item {\dred Graphical user interface} -- via your web browser (AJAX app).
\vfill
\item {\dred Fast underlying arithmetic} -- built on 
mature C/C++ libraries (GMP, NTL, PARI, GSL).  
New code in C, SageX and Python.

\vfill
\item {\dred Interfaces with other software} use buffered
{\dred psuedo-tty}'s.
\vfill
\item {\dred Special purpose components} -- 
{\dred Lcalc}, {\dred GMP-ECM} and {\dred FlintQS} (integer factorization),
{\dred PALP} (integer polytopes), and many more.
\vfill
\item {\dred Mercurial revision control system} -- included
standard; encourages users to be developers. 
\end{itemize}

\end{frame}


\begin{frame}
\frametitle{The SAGE Notebook: GUI For Mathematics Software}

\begin{enumerate}
\item The SAGE Notebook -- an {\dred ``AJAX application''} like Google maps or
  Gmail.\vfill
\item {\dred Written from scratch} by me, Alex C. and Tom B.\vfill
\item Uses Python's built-in {\dred BaseHTTPServer} web server (we
will switch to Twisted for robustness and security).
\vfill
\item Works well with Firefox and Safari.\vfill
\item Client/server model which works {\dred over network} or locally.  \vfill
\item Current version is {\dred stable and in use by many people}.  \vfill
\item Try it: {\tt http://sage.math.washington.edu:8101}\vfill
\end{enumerate}
\end{frame}


\begin{frame}
\frametitle{What Next? Goals for SAGE-3.0}
{\Large\dred SAGE in 2007: ``Speed and Polish''}
\vfill
SAGE has a huge range of features, but is overall {\dred not fast 
enough} to solidly compete with Magma and {\dred not polished
enough} to compete with Maple/Mathematica/MATLAB.
\vfill
\large
\begin{enumerate}
\item {\dblue Optimize everything} in SAGE. 
(Example: SAGE devs Hart and Harvey have nearly finished
the first version of a new C library 
for vastly faster arithmetic in $\Z[x]$ than in any other math
software in the world.)

\vfill

\item {\dblue Design and implement
parallel algorithms} at many different
levels to take advantage of multicore and SMP computers. 
\end{enumerate}
\end{frame}


\begin{frame}
\frametitle{Summary}

\begin{enumerate}

\item SAGE is {\dblue free software} for
research in {\dred algebra}, {\dred  geometry}, {\dred  number theory},
{\dred  cryptography}, and {\dred  numerics}.
\vfill
\item SAGE is an {\dred   environment for
rigorous mathematical computation}
built using Python, GAP, Maxima, Singular, 
PARI, etc., 
and provides a {\dred  unified interface} to
Mathematica, Maple, Magma, MATLAB, etc.
\vfill
\item There have been {\dred  several successful SAGE workshops}, and
there are many active SAGE developers.
\vfill
\item The {\dred primary goal} of SAGE is to make
powerful mathematical algorithms
available in an integrated package with
a modern interpreted language and graphical interface.  

%\item {\dred SAGE is growing}.  The sage-devel mailing
%list has {\dblue 85 members} and about {\dblue 500 posts} 
%per month.
\end{enumerate}


\end{frame}


\end{document}


