\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}\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 14] % (optional)
{August 14, 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 software} for algebraic
  and geometric computation.\vspace{1ex}\\
  And give it away to everybody for {\dgreen free}.}\vspace{-1ex}

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

\begin{frame}
\frametitle{Open Source}
\large
\begin{enumerate}
\item With SAGE {\dblue everything is open source} and the system is
  setup to strongly encourage looking at code.
\item {\dblue Most} serious users of SAGE are {\dred programmers}, so
  they understand and benefit from having access to complete source
  code.
\item Anecdotes...
\end{enumerate}
\end{frame}

\begin{frame}[fragile]
\frametitle{Linus Quote}
\large
\begin{verbatim}
''I think, fundamentally, open source does tend 
to be more stable software. It's the right way 
to do things.  I compare it to science vs. 
witchcraft. In science, the whole system 
builds on people looking at other people's 
results and building on top of them. In 
witchcraft, somebody had a small secret and 
guarded it -- but never allowed others to 
really understand it and build on it.

Traditional software is like witchcraft. In 
history, witchcraft just died out. The same 
will happen in software.''  -- Linus Torvalds
\end{verbatim}
\end{frame}

\begin{frame}
\frametitle{Who is Writing SAGE?}
\begin{center}
  Professors, Postdocs, Graduate students, Undergraduates,\\
  High school teachers, Retired tech workers, and {\dred YOU}.
\end{center}

\vfill

{\bf 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},
Doug Cutrell,
Didier Deshommes,
Naqi Jaffery,
Kiran Kedlaya,
David Roe,
David Kirkby,
Jon Hanke,
Gregg Musiker,
Kyle Schalm,
Steven Sivek,
Jaap Spies,
{\em Gonzalo Tornaria},
Justin Walker,
Mark Watkins,
Joe Weening,
Joe Wetherell
\end{frame}

\begin{frame}[fragile]
\frametitle{Big Iron: http://sage.math.washington.edu}
\includegraphics[width=0.9\textwidth]{sageserver.jpg}

The SAGE ``sandbox'': {\dred 64GB RAM}, 8-way dual core 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{Python: the glue that holds SAGE together}
\large
\begin{itemize}
\item Python is a free open language that is on the rise.
\item From {\dblue www.python.org}: 
\begin{itemize}
\item Python is a {\dred dynamic object-oriented}
  programming language that can be used for many kinds of software
  development. 
\item It offers strong support for {\dred integration with other
  languages} and tools, comes with extensive standard libraries, and
  can be {\dblue learned in a few days}. 
\item Many Python programmers report
  {\dred substantial productivity gains} and feel the language encourages the
  development of higher quality, {\dred more maintainable code}.
\end{itemize}
\item You interact with SAGE (essentially) via Python.
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{IPython: The SAGE Command Line}
\begin{verbatim}
was@sha:~$ sage
--------------------------------------------------------
| SAGE Version 1.3.6.3, Build Date: 2006-08-13-1150    |
| Distributed under the GNU General Public License V2. |
--------------------------------------------------------
sage: 2^3
8
\end{verbatim}

\begin{enumerate}
\item IPython: an amazing shell (history, completions, etc.)
\item There is also an emacs command-line interface. 
\item Ipython provides a very nice debugger (interface to pdb).
\end{enumerate}

\end{frame}

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

{\dred Very Surprising (to me) 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: lots of CSS, Javascript, and XMLHTTPRequest.\vfill
\item {\dred Written from scratch} recently by me, Alex C. and Tom B.\vfill
\item Uses Python's built-in {\dred BaseHTTPServer} web server.\vfill
\item Uses {\dred your web browser} (e.g., Firefox, Safari, Opera) to provide a GUI.\vfill
\item Client/server model which works {\dred over network} or locally.  \vfill
\item A very usable and (mostly) robust version {\dred is done}.  There
is a big idea list that will influence the next version.
\item {\tt http://sage.math.washington.edu:8100}
\end{enumerate}
\end{frame}


\begin{frame}
\frametitle{Interfaces: You can use anything from SAGE}
{\dblue Continue to use} your favorite programs and code 
from within SAGE:
\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 {\dblue 100\%} of the functionality of the other
systems via interfaces.  (But there is some overhead.)
\item Get tab completion and online help.
\item People have written fairly nontrivial SAGE programs that combine
  MAGMA and PARI, e.g., Dimitar Jetchev at Microsoft Research this
  summer (for Heegner points).
\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)
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 and 
failed miserably.
\end{verbatim}}

\item If SAGE were written in pure Python it would be
slow (try {\dred NZMATH} to see what I mean).
 
\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/} 
  Much more of SAGE's basic arithmetic types will be (re-)written this 
  way in the next few months.
\end{itemize}

\end{frame}

\begin{frame}[fragile]
\small
\frametitle{SAGE multiplies two integers}
SAGE creates and multiplies two integers as follows:
\begin{enumerate}
 \item Create two integers via a direct C-level 
     wrapping of the GMP C library, i.e., using 
     the functions {\tt mpz\_init} and {\tt mpz\_set}...
 \item Multiply them using the GMP function {\tt mpz\_mul}.
 \end{enumerate}
 The C code gets compiled and becomes an "extension" 
to the Python language.  These "extensions" are 
potentially just as powerful as anything written in 
the core of Python.
\begin{verbatim}
    def __mul_(Integer self, Integer other):
        cdef Integer x
        x = Integer()
        _sig_on   # so ctrl-c always works perfectly.
        mpz_mul(x.value, self.value, other.value)
        _sig_off
        return x

\end{verbatim}
\end{frame}

\begin{frame}
\frametitle{Revision Control: DARCS}
\large
After SAGE Days 1 {\dred Gonzalo Tornario} convinced me to use 
DARCS for SAGE development.  Doing so was an excellent
decision.
\begin{itemize}
\item {\dblue \tt http://abridgegame.org/darcs/}

\item Darcs is a {\dred distributed revision control system} written by
  physicist David Roundy. Darcs is simple to learn and use, with a
  powerful new approach to meet the needs of today's distributed
  software projects. Darcs is decentralized, based on a "theory of
  patches" with roots in {\dblue quantum mechanics}.

\item {\dred Symmetric:} Anybody's repository is just as much the
  ``master repository'' as anybody else's.

\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.1}
\large
\begin{itemize}
\item Feb 2005: I got job offers with {\dred tenure} -- {\em SAGE 0.1}
\item April 2005: Created {\dred interfaces} to Mathematica, Magma, etc.
\item Feb 2006: SAGE Days 1 workshop -- {\dred SAGE 1.0}
\item June 2006: High school workshop -- {\dred SAGE Notebook }
\item August 2006: MSRI Workshop -- two week super-intense {\em graduate
student} coding sprint.
\item 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 {\dblue to me} it is not as fast
as MAGMA. This is unacceptable.
\end{itemize}

\end{frame}

\begin{frame}[fragile]
\frametitle{The SAGE Library (new code)}
\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

was@sha:~/d/sage$ cat */*.py */*/*.py */*/*/*.py */*.pyx \
                        */*/*.pyx */*/*.pyx |wc -l
182192

was@sha:~/d/sage$ cat */*.py */*/*.py */*/*/*.py */*.pyx \
               */*/*.pyx */*/*.pyx |grep "sage:" | wc -l
14221
\end{verbatim}
Over 250 (of the about 1100) patches were not written by me. 
\end{frame}

\begin{frame}
\frametitle{What is included in SAGE}
\small
\begin{enumerate}
\item {\dred Standard (GPL compatible; easy build on Linux and OS X; 52MB):}\\
cddlib, clisp, conway\_polynomials, cremona\_mini,
doc, ecm, examples, extcode, freetype, gap,
genus2reduction, gfan, givaro, gmp, gnuplotpy,
ipython, lcalc, libpng, matplotlib, maxima,
mpfr, mwrank, ntl, numeric, pari, pexpect,
pyrex, pyrexembed, python, readline, sage,
singular, sympow, tachyon, termcap, zlib, zodb3

\item {\dred 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, dvipng, extra\_docs, gap\_packages,
gd, gnuplot, hermes, kash3\_linux, kash3\_osx, lie, linbox,
macaulay2, mayavi, moin, numarray, numpy, nzmath, polymake
pygtk, RealLib3, scipy, soya

\item {\dred Other:}\\
\begin{itemize}
\item Install almost {\dblue\em any Python package}:
{\tt sage -python setup.py}.
\item Ubuntu: Use any standard system-wide Python code in SAGE:\\
{\tt import sys; sys.path.append('/usr/lib/python2.4/site-packages')}
\end{itemize}

\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 \underline{everyday} {\dred linear algebra} (much work done
by David Harvey and Robert Bradshaw last week).
\item {\dblue Stable release} -- feature freeze, bug fixing, etc. 
\item Goal: Release SAGE 2.0 in {\dred December 2006}.  {\dblue Send
    me a patch!!}

\item Also -- create a {\dred SAGE Foundation}, since doing SAGE right
will cost about \$100K/year, and it is very difficult to cover that
all 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 I get regular email from {\dred people very enthusiastic}
about making SAGE take extensive advantage of parallel
computers. 
\item Hopefully a {\dred workshop in January} at MSRI on this.
\item Hopefully followed by a series of {\dred intense 2-week coding
sprints}, probably in San Diego.
\item Fernando Perez et al., Yi Qiang, Jason Martin, etc. 
\end{enumerate}

\vfill
\LARGE
\dblue Any Questions?

\end{frame}


\end{document}


