<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-6365588202025292315</id><updated>2010-01-06T01:05:33.996-08:00</updated><title type='text'>Sage: Open Source Mathematics Software</title><subtitle type='html'>This is my blog about things related to Sage.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default?start-index=26&amp;max-results=25'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-7784288988683923550</id><published>2009-12-07T11:32:00.000-08:00</published><updated>2009-12-07T11:55:52.941-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage &quot;math software&quot; autobiographical magma maple matlab mathematica pari'/><title type='text'>Mathematical Software and Me: A Very Personal Recollection</title><content type='html'>[You can also read a &lt;a href="http://wstein.org/mathsoftbio/history.pdf"&gt;pdf version of this blog post.&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;I find it difficult for me to write a history of Sage without writing&lt;br /&gt;a history of my personal involvement with mathematical software.  I&lt;br /&gt;loved using calculators since my earliest memories.  My father somehow&lt;br /&gt;got a mechanical electric adding machine for me when I was quite&lt;br /&gt;young, back in the 1970s, and I spent a great deal of time filling&lt;br /&gt;ribbons of paper with it.  Then he got me an old TI scientific&lt;br /&gt;calculator from a yard sale, with a LED readout.  At age 11, when I&lt;br /&gt;moved from Oregon to Texas, I bought a sliderule, which was pretty&lt;br /&gt;exciting for a while.  Then in junior high I finally got a real&lt;br /&gt;scientific calculator, a little Casio, whose instruction manual I&lt;br /&gt;devoured.  This was my first inroduction to trigonometry, statistics,&lt;br /&gt;and many other bits of computational mathematics.  I was prepared&lt;br /&gt;though, since I had done elementary school on an unusual&lt;br /&gt;work-at-your-pace alternative curriculum, and had already worked&lt;br /&gt;through 10th grade level mathematics.&lt;br /&gt; &lt;br /&gt;The first mathematical computer software I ever used was Mathematica,&lt;br /&gt;back in 1992 on a Windows 3.1 PC, when I was a 17-year old&lt;br /&gt;undergraduate at Northern Arizona University in Flagstaff, Arizona.&lt;br /&gt;&lt;br /&gt;Naturally, my copy of Mathematica was pirated, since like many&lt;br /&gt;students I was extremely poor at the time.  The only thing I found it&lt;br /&gt;useful for at the time was drawing 3d plots (just for fun), and even&lt;br /&gt;then it was frustrating, since there was no way to interactively&lt;br /&gt;change the viewpoint.  I also obtained a copy of MATHCAD somehow,&lt;br /&gt;which I found much more useful than Mathematica.  This is perhaps not&lt;br /&gt;surprising, because at the time I was a computer engineering&lt;br /&gt;undergraduate, so taking courses in Physics, Electrical Engineering,&lt;br /&gt;Programming, etc..  I was definitely not a mathematics major: I&lt;br /&gt;remember once finishing a multivariable calculus class and thinking&lt;br /&gt;``this is the last mathematics class I'll ever take"!  I also used&lt;br /&gt;Maple for about an hour or two in a computer lab for a mathematics&lt;br /&gt;course I took, but found it very cumbersome; this was a token 1-hour&lt;br /&gt;introduction to math software that professors gave their students,&lt;br /&gt;perhaps to justify the grant that paid for the computer lab.  At the&lt;br /&gt;time, I viewed Maple, Mathematica, and MATHCAD as software that didn't&lt;br /&gt;really go beyond scientific calculators in any exciting way.&lt;br /&gt;&lt;br /&gt;My next encounter with mathematics software was in early 1994 when I&lt;br /&gt;became a mathematics major, after accidentally encountering an&lt;br /&gt;abstract algebra book misfiled under computer science in a used&lt;br /&gt;bookstore, and being instantly mesmerized by ideas such as groups,&lt;br /&gt;rings, and fields.  I was in another small computer lab and stumbled&lt;br /&gt;on printouts of the documentation (Northern Arizona University&lt;br /&gt;professor) Mike Falk had for Cayley, which was the predecessor to&lt;br /&gt;Magma.  I was amazed and excited, since the capabilities and ideas in&lt;br /&gt;Cayley went so far beyond anything I had thought was even possible in&lt;br /&gt;mathematical software before.  I'm pretty sure I never got to actually&lt;br /&gt;use Cayley though, since like now, the software was very expensive&lt;br /&gt;and hard to get.  Instead, I just spent a lot of time reading the&lt;br /&gt;reference manual full of its beautiful examples of computing with&lt;br /&gt;groups, rings, and fields, which were the very objects that had&lt;br /&gt;enticed me into mathematics in the first place.  &lt;br /&gt;&lt;br /&gt;In fact, after that brief encounter with Cayley, I didn't touch&lt;br /&gt;mathematics software again, or even do any nontrivial computer&lt;br /&gt;programming for 3 years.  This was because in 1994 I became intensely&lt;br /&gt;interested in theoretical mathematics, and spent most of my time&lt;br /&gt;during the next 3 years systematically doing exercises in mathematics&lt;br /&gt;books, ranging from basic books on linear algebra and combinatorics&lt;br /&gt;(which was big in Arizona) to Hartshorne's Algebraic Geometry.&lt;br /&gt;&lt;br /&gt;In 1997, I was a graduate student at Berkeley, and didn't want to&lt;br /&gt;teach so much, so I landed a job (funded by the NSF VIGRE program) in&lt;br /&gt;the department for one year doing programming of curriculum materials&lt;br /&gt;for an undergraduate linear algebra course, along with fellow graduate&lt;br /&gt;student Tom Insel.  Though I had been using Linux for years, I had&lt;br /&gt;never thought about free software, or that actual people could&lt;br /&gt;contribute to it.  I thought of Linux as ``Unix that I can install on&lt;br /&gt;my own computer", and back then one still paid for Linux by buying a&lt;br /&gt;CD, since downloading over a modem was way too slow.  Tom and I spent&lt;br /&gt;a lot of time working on our project together, and he told me how he&lt;br /&gt;had written some software included in Slackware (a Linux&lt;br /&gt;distribution), so got free copies of the CD when new versions came&lt;br /&gt;out.  Hey, anybody can contribute to Linux!  &lt;br /&gt;&lt;br /&gt;I also remember Tom complaining frequently about how we were forced to&lt;br /&gt;program in MATLAB for our project, and he mentioned many other&lt;br /&gt;alternatives that would have been better for what we were doing,&lt;br /&gt;including Java.  We were doing GUI programming, with a tiny, tiny bit&lt;br /&gt;of actual mathematics thrown in, and MATLAB's handle-based system for&lt;br /&gt;writing graphical users interfaces was really painful.  I had a lot of&lt;br /&gt;experience with C/C++/Windows 3.1 GUI programming from my computer&lt;br /&gt;science undergraduate days, and agreed that MATLAB was pretty awkward&lt;br /&gt;for what we were doing at the time.  In retrospect, what we did was&lt;br /&gt;probably pointless, and perhaps never got used.  However, the&lt;br /&gt;experience was extremely valuable for both of us, and I'm glad NSF&lt;br /&gt;funded it.&lt;br /&gt;&lt;br /&gt;In the meantime, my Ph.D. thesis was going nowhere, despite nearly 3&lt;br /&gt;years of graduate school.  One day, I heard about a problem Ken Ribet&lt;br /&gt;was asking all the graduate students: ``Is there a prime number p such&lt;br /&gt;that the Hecke algebra at level p is ramified at p?"  It's the first&lt;br /&gt;research problem I can ever remember hearing that was almost certainly&lt;br /&gt;impossible to solve without using a computer.  Fellow grad students&lt;br /&gt;Janos Csirik (now at D.E. Shaw), Matt Baker (now at Georgia Tech), and&lt;br /&gt;I searched and found one paper by Hijikata (?), I think from the mid&lt;br /&gt;1970s, which gave an algorithm that might allow one to answer the&lt;br /&gt;above question for specific p's.  But to implement the algorithm, it&lt;br /&gt;was necessary to compute class numbers of a huge number of quadratic&lt;br /&gt;fields, and none of the mathematics software I had ever heard of until&lt;br /&gt;then could do this.  Janos and Matt mentioned PARI, and I installed it&lt;br /&gt;on my computer.  And indeed, it could quickly and easily compute class&lt;br /&gt;groups!  PARI was also the first free mathematical software I&lt;br /&gt;encountered.&lt;br /&gt;&lt;br /&gt;So I started coding up the algorithm (the Eichler-Selberg trace&lt;br /&gt;formula) in PARI.  I had a lot of experience with C++, which is a real&lt;br /&gt;programming language with user defined data types, exception handling,&lt;br /&gt;templates, etc.  I rememember in 1992 carefully reading several C++&lt;br /&gt;book cover-to-cover, and I wrote a large amount of code (video games!)&lt;br /&gt;in C++ long, long ago.  In contrast, PARI was an immediate shock.&lt;br /&gt;This was a language with no local variables, no real scoping, only a&lt;br /&gt;couple of builtin types, and for a while I thought (incorrectly) that&lt;br /&gt;entire function definitions always had to be on one line, since that&lt;br /&gt;was the case in example code I found.  But the algebraic&lt;br /&gt;number theory algorithms implemented in the internal library were&lt;br /&gt;amazing, deep, and very fast.  So I implemented the trace formula, and&lt;br /&gt;ran it to try to answer Ribet's question.  The program did not&lt;br /&gt;work---basic consistency checks failed.  It turned out that there was&lt;br /&gt;a major bug in the algorithm for computing class groups.  In&lt;br /&gt;particular, the function qfbclassno, silently returned wrong&lt;br /&gt;answers.&lt;br /&gt;&lt;br /&gt;You would think that qfbclassno would be fixed by now.  But no.  It's&lt;br /&gt;only frickin' 12 years later!!  I just checked right now, and the&lt;br /&gt;documentation for PARI still says ``Important warning. For $D &lt; 0$,&lt;br /&gt;this function may give incorrect results when the class group has a&lt;br /&gt;low exponent (has many cyclic factors), because implementing Shanks's&lt;br /&gt;method in full generality slows it down immensely.''  This is buried&lt;br /&gt;in the documentation.  The only change is that I think in 1997 the&lt;br /&gt;documentation said that the authors were ``too lazy'' to implement the&lt;br /&gt;full algorithm.  Note: In the 1990s the function was classno instead at that&lt;br /&gt;  time.  I found in tutorial.tex from&lt;br /&gt;  &lt;a href="http://pari.math.u-bordeaux.fr/pub/pari/unix/OLD/pari-1.39a.tar.gz"&gt;pari-1.39a.tar.gz&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    Type {\tt classno($-$10007)}. GP tells us that the result is&lt;br /&gt;    77. However, you may have noticed in the explanation above that&lt;br /&gt;    the result is only usually correct.  This is because the&lt;br /&gt;    implementers of the algorithm have been lazy and have not put the&lt;br /&gt;    complete Shanks algorithm in PARI, causing it to fail in certain&lt;br /&gt;    very rare cases. In practice, it is almost always correct, and the&lt;br /&gt;    much more powerful {\tt buchimag} program, which {\it is}&lt;br /&gt;    complete, can give confirmation.  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So I worked around that problem, and was able to run the algorithm for&lt;br /&gt;all primes up to about 300, but didn't find any primes as in Ribet's&lt;br /&gt;question.  A few weeks later, at the Arizona Winter School in March&lt;br /&gt;1998 in Tucson, Arizona&lt;br /&gt;(&lt;a href="http://math.arizona.edu/~swc/aws/98/98GenlInfo.html"&gt;AWS&lt;/a&gt;), I mentioned&lt;br /&gt;this to Joe Wetherell (who was another Berkeley grad student), while&lt;br /&gt;we were walking to lunch, and he told me he had written a program---also&lt;br /&gt;in PARI---for computing with modular symbols (following John Cremona's&lt;br /&gt;book), with which I might be able to push the computation a little&lt;br /&gt;further.  He gave me a copy later, and I started playing around with&lt;br /&gt;it, and computed the discriminants of all of the Hecke algebras of&lt;br /&gt;prime level up to about 500. NOTE: That program lives on here, in case&lt;br /&gt;you're interested: &lt;a href="http://wstein.org/Tables/heckegp.html"&gt;tables&lt;/a&gt;. &lt;br /&gt;And it still works (here with GP 2.4.3)!!!&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;? M37 = modsym(37,+1);\\&lt;br /&gt;1. Generating M-symbols                 (0 ms)\\&lt;br /&gt;2. Hashing M-symbols                    (2 ms)\\&lt;br /&gt;3. Quotienting out by relations         (3 ms)\\&lt;br /&gt;4. Computing the kernel of delta        (0 ms)\\&lt;br /&gt;Total time.......................       (5 ms)\\&lt;br /&gt;? factor(charpoly(T(2,M37)))\\&lt;br /&gt;\%27 =\\&lt;br /&gt;%[x 1]\\&lt;br /&gt;%[x + 2 1]\\&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Again, I didn't find any examples, and I wrote to Ken Ribet to tell&lt;br /&gt;him.  Then I hopped on a plane and flew to Cambridge, England, to&lt;br /&gt;visit Kevin Buzzard.&lt;br /&gt;&lt;br /&gt;Once I got settled in Cambridge, I rechecked my calculations for some&lt;br /&gt;reason... and found an example for the prime $p=389$!  Somehow, I had&lt;br /&gt;just missed the example in my previous check.  I was extremely excited&lt;br /&gt;as I wrote to Ken Ribet, with my first ever genuine contribution to research&lt;br /&gt;mathematics, which appears in a big paper Ken published on the&lt;br /&gt;Manin-Mumford conjecture---I had shown that his new theorem definitely&lt;br /&gt;did not prove that conjecture for all modular curves.  I was also hooked&lt;br /&gt;on computing modular forms, and started making tables.  It was also&lt;br /&gt;the height of the mad cow disease scare in England, so I became a&lt;br /&gt;vegetarian.&lt;br /&gt;&lt;br /&gt;I tried to push the PARI program that Joe Wetherell had given me to&lt;br /&gt;make bigger tables, but it very quickly ran out of steam.  The main&lt;br /&gt;algorithms that the modular symbols algorithm relies on are all manner&lt;br /&gt;of linear algebra over the rational numbers, including computation of&lt;br /&gt;characteristic polynomials, and kernels of sparse and dense matrices,&lt;br /&gt;and also factorization of polynomials over the integers.  Despite its&lt;br /&gt;first rate algebraic number theory capabilities, PARI was (and still&lt;br /&gt;is) terrible at linear algebra with really big matrices over the rational&lt;br /&gt;numbers.  Also, I found the PARI programming language unbearably&lt;br /&gt;naive.&lt;br /&gt;&lt;br /&gt;So I spent the summer of 1998 writing a much more general C++ program&lt;br /&gt;for computing with modular forms called HECKE.  Here it is:&lt;br /&gt;&lt;a href="http://wstein.org/Tables/hecke-cpp.html"&gt;hecke&lt;/a&gt;. If you grab the file&lt;br /&gt;&lt;tt&gt;hecke-july99.gz&lt;/tt&gt; from that web page, and drop it on just about any Linux&lt;br /&gt;box, it should just work: NOTE&lt;br /&gt;Here is Hecke which I just tried on a Core 2:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% ./hecke-july99&lt;br /&gt;HECKE Version 0.4, Copyright (C) 1999 William A. Stein&lt;br /&gt;HECKE comes with ABSOLUTELY NO WARRANTY.&lt;br /&gt;This is free software, and you are welcome to redistribute it&lt;br /&gt;under certain conditions; read the included COPYING file for details.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;         HECKE:  Modular Forms Calculator   Version 0.4 (July 9, 1999)&lt;br /&gt;&lt;br /&gt;                       William Stein&lt;br /&gt;Send bug reports and suggestions to was@math.berkeley.edu.&lt;br /&gt;Type ? for help.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Anyway, I spent all my time for many months&lt;br /&gt;writing HECKE.  This program built on several other C++ math&lt;br /&gt;libraries, including LiDIA and NTL.  It doesn't use PARI, because&lt;br /&gt;using PARI from C is...  really weird, and LiDIA/NTL had equivalent&lt;br /&gt;functionality at the time.  Much of the time I spent on HECKE involved&lt;br /&gt;(1) designing algorithms, generalizing work in Cremona's book, etc.,&lt;br /&gt;and (2) implementing and optimizing algorithms for linear algebra over&lt;br /&gt;the rational numbers.  For (2), Kevin Buzzard hooked me up with the&lt;br /&gt;same code Cremona used, which Cremona had got from some South American&lt;br /&gt;student at Cambridge named Luis (?).  I then spent a large amount of&lt;br /&gt;time optimizing that code for my computations.  The actual linear&lt;br /&gt;algebra algorithms in that code were very naive compared to the&lt;br /&gt;algorithms in Sage now, but they were better than anything available&lt;br /&gt;in any other software I was aware of, or in research papers at the&lt;br /&gt;time.  &lt;br /&gt;&lt;br /&gt;I was able to compute many fairly sophisticated tables using HECKE,&lt;br /&gt;and it soon became the canonical software for computing with modular&lt;br /&gt;forms, since it was the only software generally available for such&lt;br /&gt;computations.  This is perhaps similar to how NAUTY was for a very&lt;br /&gt;long time the canonical software for computing graph automorphism&lt;br /&gt;groups.  Naturally, I made HECKE freely available on my webpage.  I&lt;br /&gt;remember once getting an email from Ken Ono, who has probably written&lt;br /&gt;over 100 papers on modular forms, many inspired by concrete examples.&lt;br /&gt;He had run across HECKE on my web page, installed it, and was totally&lt;br /&gt;blown away by the capabilities of HECKE, and how useful it would be&lt;br /&gt;for his research.  A whole new world had opened up to him, and he told&lt;br /&gt;me he was promptly ordering a new fast computer specifically to run&lt;br /&gt;HECKE on.  I was happy to help.  Also, my thesis work was starting to&lt;br /&gt;go well, because the computations I was doing was suggesting&lt;br /&gt;interesting new (and do-able) mathematics, left and right.&lt;br /&gt;&lt;br /&gt;Then, in 1999, David Kohel---who had been a Berkeley grad student with&lt;br /&gt;me until December 1996---was visiting Berkeley from Sydney, Australia,&lt;br /&gt;and told me about implementing algorithms related to his thesis in&lt;br /&gt;Magma.  I think this was the first I had ever heard of Magma, despite&lt;br /&gt;Magma having been around for several years.  Magma was expensive and&lt;br /&gt;nearly impossible to get unless you knew the right person, since it&lt;br /&gt;was sold via informal channels.  I think there was an install on the&lt;br /&gt;computers in Berkeley, but those computers were ancient vintage&lt;br /&gt;1990-ish Sun workstations, so nobody would seriously try to use them.&lt;br /&gt;Anyway, David had implemented code for computing with rational&lt;br /&gt;quaternion algebras, and this was the only implementation of that&lt;br /&gt;algorithm in the world.  Coincidentally, I had extended an old idea of&lt;br /&gt;Ribet to come up with a new algorithm for computing Tamagawa numbers&lt;br /&gt;of modular abelian varieties (see &lt;a href="http://wstein.org/papers/ants/"&gt;ants&lt;/a&gt; and&lt;br /&gt; &lt;a href="http://wstein.org/papers/compgrp/"&gt;compgrp&lt;/a&gt;).  I really, really wanted to&lt;br /&gt;implement my algorithm, because it would allow me to compute all of&lt;br /&gt;the invariants in the Birch and Swinnerton-Dyer conjecture (except&lt;br /&gt;Sha) for most rank 0 modular abelian varieties, which would be a huge&lt;br /&gt;step forward.  But my algorithm fundamentally relied on exactly the&lt;br /&gt;computations in rational quaternion algebras that David Kohel had&lt;br /&gt;implemented in Magma.  And that was no small undertaking---it's a&lt;br /&gt;complicated algorithm, it takes somebody familiar with the relevant&lt;br /&gt;theory months to implement and optimize, and it builds on many other&lt;br /&gt;basic capabilities.  I had a thesis to finish.  David---who was then&lt;br /&gt;officially a Magma developer, was able to give me a copy of Magma for&lt;br /&gt;my own computer, which had his code in it.  Combining all this with&lt;br /&gt;HECKE, and copying and pasting, I was the first person ever to systematically&lt;br /&gt;compute Tamagawa numbers of general modular abelian varieties (at primes&lt;br /&gt;of multiplicative reduction).&lt;br /&gt;&lt;br /&gt;So in 1999 David Kohel put me in a situation where I was fundamentally&lt;br /&gt;dependent on a closed source non-free program in order to continue my&lt;br /&gt;own research.  Ironically, during the same afternoon in my apartment&lt;br /&gt;in Berkeley, he mentioned the GNU Public License (GPL), and suggested&lt;br /&gt;I released HECKE under the GPL.  Before that moment, I had never even&lt;br /&gt;heard of the GPL.  I did as he suggested, but had no idea what it&lt;br /&gt;meant really.  That was perhaps fortunate, since the dependencies of&lt;br /&gt;HECKE are NTL and LIDIA, and the NTL license is GPL, but the LIDIA&lt;br /&gt;license is GPL incompatible, so technically I guess HECKE can't be&lt;br /&gt;distributed.  Incidentally, LIDIA is still licensed under a&lt;br /&gt;GPL-incompatible license, despite many emails I've received suggesting&lt;br /&gt;the license would change to GPL---licenses don't change easily, due&lt;br /&gt;to having to get agreement from all copyright owners. &lt;br /&gt;&lt;br /&gt;I obviously had to actually use Magma at some level in order to do&lt;br /&gt;these computations.  Despite having a lot of experience with&lt;br /&gt;programming, I initially found the Magma language and system extremely&lt;br /&gt;hard to learn or do anything with.  It was certainly much harder to&lt;br /&gt;use initially than PARI.  On the one hand, Magma is a massive system, with&lt;br /&gt;thousands of commands and thousands of pages of reference manual documenation, but&lt;br /&gt;on the other hand there is very little in the way of ``introspection",&lt;br /&gt;i.e., given an object A, it is hard to get context sensitive help&lt;br /&gt;about A.  However, one thing was clear: Magma was dramatically better&lt;br /&gt;at dense linear algebra over the rational numbers than HECKE. It was&lt;br /&gt;a whole different world.  We're talking jaw dropping speed.  In fact,&lt;br /&gt;Magma in the late 1990s on an old computer, was far faster at large&lt;br /&gt;linear algebra over the rationals than Maple or Mathematica is today&lt;br /&gt;on the latest hardware.  I would soon find out the reason.    &lt;br /&gt;&lt;br /&gt;Allan Steel is an enthusiastic Australian, who was an undergraduate at&lt;br /&gt;University of Sydney in the early 1990s and fell in love with the&lt;br /&gt;Magma project.  I guess David Kohel told John Cannon about me in 1999,&lt;br /&gt;and Allan happen to be visiting Berkeley for a conference, so Allan&lt;br /&gt;and I met.  We ended up talking a huge amount over 3 days.  Allan&lt;br /&gt;answered my every question about the language and the system---usually&lt;br /&gt;with an answer about how he had implemented it that way for a&lt;br /&gt;certain reason.  So within a few days I knew Magma well enough to be&lt;br /&gt;quite productive in it.  Also, Allan gave me some hints about why&lt;br /&gt;linear algebra was so fast: together with polynomial and integer&lt;br /&gt;arithmetic, asymptotically fast linear algebra was one of his main&lt;br /&gt;interests.  He explained an exciting array of algorithms, many of&lt;br /&gt;which he had developed or---more importantly---made practical.&lt;br /&gt;There were dozens of tricks that I had never heard of, such as&lt;br /&gt;rational reconstruction, multimodular algorithms, p-adic algorithms,&lt;br /&gt;etc., which were far beyond what I had done with HECKE, or seen in any&lt;br /&gt;other software.  And they meant that it would be possible to push my&lt;br /&gt;modular forms computations much farther.  All I had to do was rewrite&lt;br /&gt;HECKE in Magma.&lt;br /&gt;&lt;br /&gt;It was my last year of graduate school at Berkeley, and I probably&lt;br /&gt;should have been writing my thesis, but instead John Cannon flew me&lt;br /&gt;down to Sydney, Australia, to work with the Magma group for a month&lt;br /&gt;and do a complete new implementation of all the algorithms in HECKE on&lt;br /&gt;top of Magma.  I shared an office with Claus Fieker, a German who has&lt;br /&gt;implemented a large amount of the algebraic number theory in Magma,&lt;br /&gt;among other things.  As I started doing this, I had some serious&lt;br /&gt;concerns, including: Magma did not allow users to define their own&lt;br /&gt;types (or classes), there is no exception handling, there is no ``eval&lt;br /&gt;statement", no way for users to write compiled code, Magma is closed&lt;br /&gt;source, and Magma is not free.  I raised all of these concerns with&lt;br /&gt;Cannon and others, and was assured at the time that they would all be&lt;br /&gt;addressed really soon, except the free part.  Regarding free, they&lt;br /&gt;said that I could give copies of Magma to whoever I wanted, so long as&lt;br /&gt;I checked with John Cannon first.&lt;br /&gt;&lt;br /&gt;I don't remember why exactly, but I remember once during that month in&lt;br /&gt;1999 going on a walk through the park near the U Sydney campus near a&lt;br /&gt;pond of ducks, sitting on a bench, and realizing that I was making a&lt;br /&gt;huge sacrifice of my freedom as a researcher by going down this path.&lt;br /&gt;Magma was not open source---John Cannon had absolute control over the&lt;br /&gt;system.  Magma was not free.  And as a language, Magma was&lt;br /&gt;significantly behind C++.  It didn't even have a sensible notion of&lt;br /&gt;scope, and one added new data types by entering entries in big tables,&lt;br /&gt;then recompiling the kernel.  I asked Cannon why it was so far behind,&lt;br /&gt;and he explained that the grants he was able to secure simply wouldn't&lt;br /&gt;pay for language design.  The people who supported Magma with funding&lt;br /&gt;(mainly granting agencies) would only support implementing and&lt;br /&gt;optimizing mathematical algorithms, and the license fees only paid&lt;br /&gt;enough to support ``maintenance", which mainly meant the person who&lt;br /&gt;collected the license fees and distributed Magma via ftp.  Ten years&lt;br /&gt;later the Magma language has hardly improved at all.  They finally&lt;br /&gt;have exception handling, but still no user defined types, etc., etc.&lt;br /&gt;The library of functionality implemented in Magma is huge though; the&lt;br /&gt;issues with the language didn't stop people from implementing many&lt;br /&gt;exciting algorithms, which have supported huge amounts of research in&lt;br /&gt;number theory and other areas.&lt;br /&gt;&lt;br /&gt;I sat down on that park bench, and realized what a dangerous path I&lt;br /&gt;was taking in giving up so much freedom so early in my career.  I&lt;br /&gt;resolved at that moment not to do it.  At that moment I started&lt;br /&gt;designing what would eventually become Sage.  I started thinking about&lt;br /&gt;the language I would implement (I had taken a course in writing&lt;br /&gt;interpreters when I was a student), about implementing all the linear&lt;br /&gt;algebra algorithms Allan had hinted at (but given no details), etc.&lt;br /&gt;I then realized that if I did this, I would have to do it by myself,&lt;br /&gt;since almost everybody I knew used Magma, and would consider my plan&lt;br /&gt;too difficult and pointless.  I wouldn't get to do number theory for&lt;br /&gt;years.  My spirit broke.  And Cannon told me that many of my issues&lt;br /&gt;with Magma would be addressed within a year.&lt;br /&gt;&lt;br /&gt;I spent the next 5 years writing and using Magma.  I gave dozens and&lt;br /&gt;dozens of talks all over, and convinced anybody who wanted to do&lt;br /&gt;computations with modular forms that Magma was the way to go.  I gave&lt;br /&gt;away free copies of Magma (with John Cannon's official blessing),&lt;br /&gt;taught undergraduate courses using Magma, and was generally very&lt;br /&gt;productive.  Also in 2003, I had a real job and money, so I started&lt;br /&gt;forming this philosophy of software, where I would judge what software&lt;br /&gt;I used purely based on capability and functionality, and not on price&lt;br /&gt;or openness.  I started using Microsoft Windows fulltime, since it&lt;br /&gt;best supported my PDA and had the widest range of software.  I bought&lt;br /&gt;some $500 (with educational discount) suite of Adobe software for&lt;br /&gt;video editing, photos, vector graphics, etc.  And of course I used&lt;br /&gt;Magma.  I was a well paid academic at a well-endowed university&lt;br /&gt;(Harvard), and wanted the best that money could buy.&lt;br /&gt;&lt;br /&gt;In 2002, William Randolph Hearst III also donated money to Harvard to&lt;br /&gt;buy me a cluster computers, and by 2003, I wanted to easily script&lt;br /&gt;running lots of computations in parallel.  Since Magma didn't have any&lt;br /&gt;parallel capabilities, I stumbled on some language called ``Python"&lt;br /&gt;(Version 2.3), which looked a lot like Magma, but was designed for&lt;br /&gt;general purpose scripting.  I started using it to run many&lt;br /&gt;computations in parallel on that cluster.  It was the best tool I&lt;br /&gt;could find for the job.&lt;br /&gt;&lt;br /&gt;I also started working much harder on making the number theory data I&lt;br /&gt;was computing with Magma available online, and naturally I turned to&lt;br /&gt;Python.  Dimitar Jetchev (a Harvard undergrad) and I wrote Python code&lt;br /&gt;to make the data easily queryable via a web interface, and also wrote&lt;br /&gt;code that made it so one could do computations in Magma (and PARI in&lt;br /&gt;some cases) over the web.  One incarnation of this is hosted on the&lt;br /&gt;Magma website: &lt;a href="http://magma.maths.usyd.edu.au/calc/"&gt;calc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As I learned about Python, a funny thing happened.  I had by this&lt;br /&gt;point developed a large list of issues with Magma.  For example, the&lt;br /&gt;documentation and examples in the Magma reference manual aren't&lt;br /&gt;automatically tested to ensure they give the claimed output, and they&lt;br /&gt;often get out of sync with the actual code.  Python is in many ways&lt;br /&gt;similar to Magma -- the language itself feels somewhat similar, and it&lt;br /&gt;has the same ``batteries included" philosophy.  The surprising thing&lt;br /&gt;was that Python had solved the dozens of major problems I had with&lt;br /&gt;Magma!  I was excited about this in 2003, and so during my next (and&lt;br /&gt;last) trip to work with the Magma group in Sydney, and started trying&lt;br /&gt;to incorporate these solutions into my new Magma code, and to explain&lt;br /&gt;what I had learned to John and others.  Right after I returned from&lt;br /&gt;Sydney, I recall excitedly explaining all of this to David Goldschmidt&lt;br /&gt;at a reception at an AMS meeting.    &lt;br /&gt;&lt;br /&gt;I was quite surprised when a month or two later, in early 2004, John&lt;br /&gt;Cannon really soundly rejected my ideas and even had one of his&lt;br /&gt;employees rewrite my new modular abelian varieties code to get rid of&lt;br /&gt;them.  In retrospect, now that I run a large software development&lt;br /&gt;project, I can understand why he didn't get what I was doing.  But I&lt;br /&gt;was really suprised then.  Second, I went to a big Magma conference at&lt;br /&gt;IHP in Paris, where Manjul Bharghava (a young professor at Princeton),&lt;br /&gt;me, and many other people gave some series of talks.  I recall&lt;br /&gt;listening to Manjul's talk as he described a research problem he was&lt;br /&gt;working on, and during his talk he explained that the whole thrust of&lt;br /&gt;his research was seriously stymmied because Magma is closed source.&lt;br /&gt;He needed to adapt some relatively minor part of the some algorithm in&lt;br /&gt;Magma related to quadratic forms, and simply couldn't due to it not&lt;br /&gt;being in the interpreter level of Magma.  This just didn't seem right.&lt;br /&gt;&lt;br /&gt;I also had lunch with John Cannon during that workshop, where he&lt;br /&gt;explained some big plans he had to edit a huge sequence of volumes&lt;br /&gt;about the mathematics behind algorithms implemented in Magma.  I&lt;br /&gt;suggested that it would be nice if these were freely available, and he&lt;br /&gt;did not think that would be possible.  He made good on his idea, and I&lt;br /&gt;actually published a paper in the first such volume:&lt;br /&gt;&lt;a href="http://wstein.org/papers/bsdmagma/"&gt;bsdmagma&lt;/a&gt;.  I wrote that paper in Windows&lt;br /&gt;using Microsoft Word (and converted to LaTeX using WinEdt, a non-free&lt;br /&gt;LaTeX frontend, only at the very end)!&lt;br /&gt;&lt;br /&gt;Finally, at that IHP workshop I learned two other things.  First, I&lt;br /&gt;learned that a workshop is an incredibly efficient way to develop&lt;br /&gt;mathematical software, far more efficient than the Magma model of&lt;br /&gt;hiring people for months at a time and flying them to Sydney, and&lt;br /&gt;certainly vastly more efficient than what Maple, Mathematica, and&lt;br /&gt;Matlab do, which costs literally costs hundreds of millions of dollars&lt;br /&gt;per year.  Second, I recall overhearing conversations about the Magma&lt;br /&gt;language during tea breaks by some locals who were interested in the&lt;br /&gt;workshop, but had not drank the Magma koolaid, and in these&lt;br /&gt;conversations it became clear that I wasn't the only person that found&lt;br /&gt;the Magma language to be deficient.&lt;br /&gt;&lt;br /&gt;I started reading slashdot in early 2004, mainly for the interesting&lt;br /&gt;tech news, and the comments kept mentioning ``open source", which was&lt;br /&gt;honestly something I had paid almost no attention to until then.&lt;br /&gt;Intrigued I decided to look around and see how open source mathematics&lt;br /&gt;software had done since I had abandoned it in 1999.  NTL was no longer&lt;br /&gt;being actively developed, the LiDIA project was nearly dead, PARI&lt;br /&gt;hadn't changed much (except to break all my old code), but with some&lt;br /&gt;more algorithms for relative number fields.  So in five years, the&lt;br /&gt;situation with the open source number theory software environment had&lt;br /&gt;got worse.  I realized that I was probably partly to blame, having&lt;br /&gt;tried to convince every number theorist I knew to use Magma, and often&lt;br /&gt;given them free access to ensure they could.  I had helped hook a&lt;br /&gt;generation. &lt;br /&gt;&lt;br /&gt;About this time I was also writing an elementary number theory book&lt;br /&gt;(which eventually became this book: &lt;a href="http://wstein.org/ent/"&gt;ent&lt;/a&gt;).  I had&lt;br /&gt;planned to have a chapter about number theory using each of&lt;br /&gt;Mathematica, PARI, Magma, and Maple.  I had the first three programs,&lt;br /&gt;but didn't have access to Maple.  Somebody suggested that being a&lt;br /&gt;faculty member and writing a book should be a good argument for Maple&lt;br /&gt;to send me a free copy, so I contacted them.  A person from Maplesoft&lt;br /&gt;called me back, and explained that though I was writing a book with a&lt;br /&gt;chapter on Maple, they could not give me a free copy.  However, they&lt;br /&gt;could give me the special academic discount of 500 dollars.  I asked&lt;br /&gt;if he could do better, and he called me back the next day and said:&lt;br /&gt;``If you can get 4 of your colleagues to also buy Maple at 250&lt;br /&gt;dollars/each then I can sell you Maple for 250 dollars."  I was&lt;br /&gt;offended, so I ``obtained'' a ``trial'' copy, and started writing my&lt;br /&gt;chapter anyways.  I started trying all the same things as I had easily&lt;br /&gt;done in PARI and Magma, e.g., checking primality of numbers, etc.  I&lt;br /&gt;was totally surprised to find that Maple was terrible, being massively&lt;br /&gt;slower than Pari, Magma or Mathematica for most elementary number&lt;br /&gt;theory computations relevant to my book.  (Maplesoft was bought by&lt;br /&gt;some Japanese company a few months ago, by the way.)&lt;br /&gt;&lt;br /&gt;I also installed Linux in a virtual machine (under Windows), to see&lt;br /&gt;what all the fuss was about, and found I started using Linux all the&lt;br /&gt;time instead of Windows, because the software was better (even Magma&lt;br /&gt;runs much better under Linux than Windows).  I deleted Windows and&lt;br /&gt;installed Linux.  I was also starting to definitively realize that my&lt;br /&gt;huge list of problems with Magma would never, ever get resolved, and&lt;br /&gt;was getting increasingly frustrated by these problems because Python&lt;br /&gt;didn't have them.  &lt;br /&gt;&lt;br /&gt;I started talking a lot with Thomas Barnet-Lamb about a crazy idea to&lt;br /&gt;create a new open source math software system with readable&lt;br /&gt;implementations of algorithms, and nothing hidden in some stupid&lt;br /&gt;proprietary layer.  Thomas was then a first year Harvard grad student&lt;br /&gt;who had won some international computer programming competition, so&lt;br /&gt;I figured he would enjoy talking about software.  I also talked a lot&lt;br /&gt;with Dylan Thurston about this crazy idea; Dylan had started grad&lt;br /&gt;school at the same time as me at Berkeley, graduated the same time,&lt;br /&gt;and had the same first two jobs as me, was also an Assistant&lt;br /&gt;Professor.  Both Thomas and Dylan gave me many ideas for programming&lt;br /&gt;languages to consider, including OCaml (which Thomas liked), Haskell&lt;br /&gt;(which Dylan was a huge fan of), etc.  After having used Magma for&lt;br /&gt;years, with its highly optimized algorithms, I desperately needed a&lt;br /&gt;fast language.  But I also wanted a language that was easy to read,&lt;br /&gt;and that mathematicians could pick up without too much trouble, since&lt;br /&gt;I wanted people like Manjul to someday use this system and not have&lt;br /&gt;their research cut off.  And I knew from experience that unreadable&lt;br /&gt;source code is no better than closed source.  &lt;br /&gt;&lt;br /&gt;I'm not going to go into negatives of any languages.  Though I used&lt;br /&gt;Python a lot, for a long time I didn't consider it seriously at all&lt;br /&gt;for this crazy project, since I tried implementing some basic&lt;br /&gt;arithmetic algorithms in Python and found that they were vastly too&lt;br /&gt;slow to compete with Magma (or C).  I had also tried quite hard to use&lt;br /&gt;SWIG to make C++ available in Python, but SWIG is extremely frustring,&lt;br /&gt;and has horrible performance (due to multiple layers of wrapping), at&lt;br /&gt;least compared to what Magma could do.  &lt;br /&gt;&lt;br /&gt;In October 2004, I was flying back from Europe (the Paris Magma&lt;br /&gt;conference) and started reading the Python/C API reference manual&lt;br /&gt;straight through.  I realized that Python is far, far more than just&lt;br /&gt;an interpreter.  It is a C library that implements everything you&lt;br /&gt;need, and has a well defined and well documented API.  I did some&lt;br /&gt;sample benchmarks on the plane, and found not surprisingly that I&lt;br /&gt;could write code as extensions to Python that was just as fast as&lt;br /&gt;anything one could write for Magma by modifying the Magma kernel,&lt;br /&gt;since under the hood, both were written in C.  Also, on the flight, I&lt;br /&gt;realized that because the Python/C interface uses reference counting,&lt;br /&gt;it would be vastly easier to write the C extensions I would need using&lt;br /&gt;some sort of language I would design.  I got home and somehow stumbled&lt;br /&gt;onto Pyrex, which was exactly what I was planning to write.  I tried&lt;br /&gt;it out, did benchmarks, and realized that I had a winner.&lt;br /&gt;&lt;br /&gt;With Pyrex and Python, I could implement algorithms and make them as&lt;br /&gt;fast as anything in Magma, assuming I could figure out the right&lt;br /&gt;algorithm.  Moreover, the dozens of issues I had with Magma, many of&lt;br /&gt;which were simply a function of them not having the resources to do&lt;br /&gt;language development, were already solved in Python.  And Python would&lt;br /&gt;continue to move forward with no work from me.  It was mid-2004 and&lt;br /&gt;because of Python, the overall software ecosystem was much better than&lt;br /&gt;in 1999, despite open source number theory software having not moved&lt;br /&gt;forward much.  &lt;br /&gt;&lt;br /&gt;I started going to (and sometimes hosting) the Boston Python user&lt;br /&gt;group meetings, which was quite large, and gave me much useful&lt;br /&gt;feedback.  And I decided it was time to move past my test and&lt;br /&gt;prototype stage and get to work.  My plan, as I had explained it to&lt;br /&gt;Thomas, was to create a complete new system from the ground up using&lt;br /&gt;Python + Pyrex.  All the code would have an easy to read Python&lt;br /&gt;implementation that was well documented, in some cases there would be&lt;br /&gt;a much faster Pyrex implementation of the same code, etc.  With my&lt;br /&gt;naive plan in hand, I sat down with the main elliptic curves file of&lt;br /&gt;the PARI source code, and started to translate.   &lt;br /&gt;&lt;br /&gt;I think I made it through one function.  Where some might have&lt;br /&gt;doggedly persisted for years with such an approach, I quickly ran out&lt;br /&gt;of patience.  In fact, when it comes to software and programming I can&lt;br /&gt;be extremely impatient.  I realized that my entire plan was insane,&lt;br /&gt;and would take too long.  I had discussions with Thomas, Dylan, and&lt;br /&gt;others, and everybody I knew who was seriously into number theory&lt;br /&gt;computation was using Magma, so I realized that I was going to have to&lt;br /&gt;do this entire project myself.  So I realized translating was doomed.&lt;br /&gt;Somehow, even with all my experience, I had massively underestimated&lt;br /&gt;the complexity of the algorithmic edifice that is any serious&lt;br /&gt;mathematical software system.&lt;br /&gt;&lt;br /&gt;I read the PARI C API reference, and used Pyrex to write a wrapper so&lt;br /&gt;that I could call some basic PARI functions from Python. I implemented&lt;br /&gt;basic rational and integer types using Pyrex and GMP, and the&lt;br /&gt;performance was reasonable.  One day, I was using Matplotlib (a Python&lt;br /&gt;library) to draw some plots for Barry Mazur that involved explicit&lt;br /&gt;computation with the incomplete Gamma function, and was frustrated&lt;br /&gt;because neither PARI nor Magma had an implementation of this special&lt;br /&gt;function at the time.  Harvard had a Mathematica site license, so I&lt;br /&gt;had a copy of Mathematica, and I wrote code using the pexpect Python&lt;br /&gt;library to hold open a single Mathematica session and use it to&lt;br /&gt;compute the incomplete Gamma function.  Problem solved.  This was when&lt;br /&gt;the interfaces between Sage and other mathematics software systems was&lt;br /&gt;born.&lt;br /&gt;&lt;br /&gt;In January 2005, I was at the AMS meeting in Atlanta, Georgia, hacking&lt;br /&gt;on my code, and David Joyner walked up to me and asked what I was&lt;br /&gt;doing.  Until then, I had not shown my Python/Pyrex math software&lt;br /&gt;project to people.  There were a few reasons, including feeling sure&lt;br /&gt;that it was massively too difficult to pull off, that working on&lt;br /&gt;something like this would seriously piss off John Cannon, etc.  But&lt;br /&gt;feeling brave, I showed David what I was doing and I was surprised&lt;br /&gt;that he found it interesting.  I promised to post a copy online, which&lt;br /&gt;he could download.    &lt;br /&gt;&lt;br /&gt;David Joyner is the first to admit that it's a good idea to make&lt;br /&gt;software easy for him!  So I had to make it easy for him to download&lt;br /&gt;and install my program, which I called Manin at the time (after one of&lt;br /&gt;my favorite mathematicians).  My target audience wasn't ``Debian"; it&lt;br /&gt;wasn't ``Python programmers"; it wasn't elite hackers---it was David&lt;br /&gt;Joyner.  I had to make this program trivial for him to install, work&lt;br /&gt;with, develop, etc.  I thought about how it had literally taken me&lt;br /&gt;huge amounts of time just to build Python, GMP, PARI, etc. all from&lt;br /&gt;source in a directory for development, and realized that there was no&lt;br /&gt;way in hell David would get anywhere on Manin if I told him that his&lt;br /&gt;first step was to figure out how to build all those programs, then get&lt;br /&gt;back to me.  So I setup something that would do it all automatically&lt;br /&gt;in a self contained way.  He tried it, it ``just worked", and he got&lt;br /&gt;really excited and started writing code for Manin.  David is a coding&lt;br /&gt;theorist, and wanted group theory and coding theory functionality in&lt;br /&gt;Manin, but didn't want to write it all himself from scratch, so he&lt;br /&gt;asked in email about making Manin and GAP talk to each other somehow.&lt;br /&gt;I showed him my pexpect code for controlling Mathematica, and he&lt;br /&gt;adapted it to create a GAP interface.   &lt;br /&gt;&lt;br /&gt;David also works at the US Naval Academy where he evidently teaches a&lt;br /&gt;lot of Calculus and Differential Equations courses.  He was having so&lt;br /&gt;much fun with Manin, he asked about adding something to do symbolic&lt;br /&gt;calculus to Manin.  This was 2005, and I personally had never used any&lt;br /&gt;symbolic calculus software aside from Mathematica and Maple 12 years&lt;br /&gt;earlier, since I viewed computational symbolic calculus as pretty much&lt;br /&gt;irrelevant for most computational number theory, and the Calculus I&lt;br /&gt;had taught never required a computer since computers weren't allowed&lt;br /&gt;on exams.  (I now think no computational technique should be a priori&lt;br /&gt;viewed as irrelevant to research in number theory!)  So I asked David&lt;br /&gt;about the available open source options, and he said they were Axiom&lt;br /&gt;and Maxima, neither of which I had ever heard of.  I can't remember&lt;br /&gt;how we chose Maxima instead of Axiom, but it was some combination of&lt;br /&gt;Maxima being easier to build, easier to understand, and having about&lt;br /&gt;1000 times as many users.  In any case, like with PARI, GMP, and&lt;br /&gt;Python, I added Maxima and GAP to the Manin distribution.  I also&lt;br /&gt;changed the name from Manin to SAGE = Software for Algebra and&lt;br /&gt;Geometry Experimentation.&lt;br /&gt;&lt;br /&gt;David also convinced me Sage needed commutative algebra.  At first, he&lt;br /&gt;talked to people and tried to implement everything from scratch, but&lt;br /&gt;even the resulting arithmetic was dreadfully slow.  Groebner basis&lt;br /&gt;would be a nightmare waiting on the horizon.  We were both impatient,&lt;br /&gt;so we decided to try to find an open source program already out here,&lt;br /&gt;and just use it.  There were two choices: Macaulay 2 and Singular,&lt;br /&gt;which had a lot of overlap in functionality.  For what we wanted---basic &lt;br /&gt;commutative algebra---they both did all we needed.  Singular&lt;br /&gt;built from source easily in a few minutes on every computer I cared&lt;br /&gt;about.  Macaulay 2 was ridiculously hard to build and took a long&lt;br /&gt;time.  I think based mostly on that, we chose Singular.  Also, it was&lt;br /&gt;encouraging that Singular had a relatively large development team, and&lt;br /&gt;did better in some benchmarks I tried.&lt;br /&gt;&lt;br /&gt;At the same time as all this, I was traveling a lot and interviewing&lt;br /&gt;for tons of tenure/tenure track jobs all over the place.  I got some&lt;br /&gt;job offers with tenure, and suddenly had the crazy idea that if I&lt;br /&gt;worked fulltime on SAGE for a year two, my career could not be&lt;br /&gt;destroyed.  This really encouraged me.  My number theory research&lt;br /&gt;slowed a lot, and I spent all my extra time on SAGE for a while.&lt;br /&gt;&lt;br /&gt;Remember David Kohel, who six years ago in 1999 first introduced me to&lt;br /&gt;Magma?  It turns out that like me he spent years and years writing a&lt;br /&gt;large library of software on top of Magma for number theory and&lt;br /&gt;cryptography research.  However, at some point he had a fairly serious&lt;br /&gt;falling out with the Magma group, whose details I will omit.  Suffice&lt;br /&gt;to say, like me he was motivated to at least look for other options.&lt;br /&gt;He started building and using Sage, and started doing huge amounts of&lt;br /&gt;work on Sage as well, e.g., introducing morphisms and categories&lt;br /&gt;systematically into Sage, and implementing tons of code related to&lt;br /&gt;elliptic curves, algebraic varieties, etc.  David Kohel was a&lt;br /&gt;Biologist as an undergraduate and has an amazing eye for general&lt;br /&gt;structure. He also had many technical issues with Magma, which were&lt;br /&gt;mostly different than mine.  For example, he felt that the Magma&lt;br /&gt;developers had made a mistake with the design of morphisms, and he&lt;br /&gt;didn't want Sage to make the same mistakes.  And he was right to&lt;br /&gt;worry, since for things I didn't care too much about, I would usually&lt;br /&gt;just copy Magma... or as David would say, ``copy Magma's mistakes".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I moved to San Diego and Joe Wetherell who first introduced me to&lt;br /&gt;modular symbols in 1997 also got involved in Sage development, though&lt;br /&gt;mostly from the conversation point of view.  Joe had long ago quit&lt;br /&gt;grad school to start a software company in the early 1990s, then&lt;br /&gt;retired from that and went back to grad school, so he had a fairly&lt;br /&gt;mature perspective on software development, and he knew a huge amount&lt;br /&gt;about number theory and optimized algorithms.  So 2005 was a long,&lt;br /&gt;long year in which David Kohel in Australia, David Joyner in Maryland,&lt;br /&gt;and me in San Diego, wrote code.&lt;br /&gt;&lt;br /&gt;At the end of 2005, the three of us had written a ton of code,&lt;br /&gt;integrated numerous components togethers, and finally had something.&lt;br /&gt;On December 6, Jaap Spies mentioned Sage on the sci.math.symbolic&lt;br /&gt;newsgroup, in response to which some guy named Richard Fateman&lt;br /&gt;declared Sage a curiosity and made some unencouraging assertions about&lt;br /&gt;the way the world works (regarding users, funding, etc.):&lt;br /&gt;&lt;br /&gt;   &lt;a href="http://mathforum.org/kb/message.jspa?messageID=4132045&amp;tstart=0"&gt;mathforum&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was certain deep down inside that Sage would fail anyways, that what&lt;br /&gt;we wanted to do with Sage was totally impossible, so Fateman's&lt;br /&gt;comments couldn't discourage me further.  I just didn't care that Sage&lt;br /&gt;was doomed.  I couldn't help pushing further.&lt;br /&gt;&lt;br /&gt;John Cannon found out about Sage, maybe as a result of the postings on&lt;br /&gt;sci.math.symbolic, and right before Christmas in 2005 he sent me this&lt;br /&gt;email:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Date: Mon, 19 Dec 2005 16:54:09 -0800&lt;br /&gt;From: "John Cannon" &lt;john@maths.usyd.edu.au&gt;&lt;br /&gt;Subject: Magma calculator&lt;br /&gt;William,&lt;br /&gt;&lt;br /&gt;This is to formally advise you that your permission to run a&lt;br /&gt;general-purpose calculator based on Magma ends on Dec 31, &lt;br /&gt;2005. This was originally set up at your request so students &lt;br /&gt;in your courses at Harvard could have easy access to Magma.&lt;br /&gt; &lt;br /&gt;Please confirm receipt of this letter.&lt;br /&gt;Wishing you a happy Christmas,&lt;br /&gt;John&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This single email seriously scared me.  Though I was working on Sage&lt;br /&gt;very hard for nearly a year at this point, I honestly didn't then&lt;br /&gt;expect Sage to really be able to replace Magma for me.  Magma was the&lt;br /&gt;commercially funded result of fulltime work over decades (really&lt;br /&gt;starting in 1973 with the first version of Cayley).  The amount of&lt;br /&gt;work to get from what I had with Sage in December 2005 to what I had&lt;br /&gt;with Magma in December 2000, was still absolutely momentous.  I didn't&lt;br /&gt;even know if it could be done by a single human being.  Moreover, as&lt;br /&gt;far as I could tell many of the critical linear algebras algorithms I&lt;br /&gt;needed (to make the difference between a calculation taking a minute&lt;br /&gt;or a year) existed only in the secret kernel of Magma and Allan&lt;br /&gt;Steel's head, and they were going to stay locked there forever as far&lt;br /&gt;as I could tell.  For example, in June 2004 (before Sage existed),&lt;br /&gt;Allan and I were together at the ANTS VI conference.  I started asking&lt;br /&gt;Allan to explain some of the algorithms, and he would explain things&lt;br /&gt;to a point, but not nearly enough to do an actual implementation.  And&lt;br /&gt;he gave me this look, like he knew I was trying to get something out&lt;br /&gt;of him.&lt;br /&gt;&lt;br /&gt;Isn't it weird that mathematics can be done that way?  In 2004, almost&lt;br /&gt;everybody in the world doing serious computations with elliptic&lt;br /&gt;curves, modular forms, etc., were using Magma.  Magma was the industry&lt;br /&gt;standard, Magma had won for the forseable future.  David Kohel and I&lt;br /&gt;were a big reason why.  And yet what kind of mathematics is it, when&lt;br /&gt;much of my work fundamentally depends on a bunch of secret algorithms?&lt;br /&gt;That's just insane.  Moreover, it turns out that these algorithms I'm&lt;br /&gt;alluding to are really beautiful (and they are now standard and in&lt;br /&gt;some cases better than what's in Magma, in my opinion, thanks to great&lt;br /&gt;work of people like Giesbrecht, Perent, Kaltofen, Storjohann,&lt;br /&gt;Saunders, Albrecht, etc.).   &lt;br /&gt;&lt;br /&gt;Anyway, John Cannon's email above seriously scared me.  I wasn't in&lt;br /&gt;any way confident that Sage would ever replace Magma for my work and&lt;br /&gt;teaching, and I had big plans involving interactive mathematical web&lt;br /&gt;pages.  These plans were temporarily on hold as I was drawn into&lt;br /&gt;Sage. But there were still there.  What John did with that email is&lt;br /&gt;tell me, in no uncertain terms, that if I was going to create those&lt;br /&gt;interactive mathematical web pages, they couldn't depend on&lt;br /&gt;Magma. ``This is to formally advise you that your permission to run a&lt;br /&gt;general-purpose calculator based on Magma ends."  I was scared.  It&lt;br /&gt;was also the first time I saw just how much power John Cannon had over&lt;br /&gt;my life and over my dreams.  That email was sent on a whim.  I hadn't&lt;br /&gt;got any official permission to run that Magma calculator for a&lt;br /&gt;specific amount of time (just open ended permission).  What John made&lt;br /&gt;crystal clear to me was that he could destroy my entire longterm plans&lt;br /&gt;on a whim.  I looked around for other options, and there just weren't&lt;br /&gt;any.  Sage had to succeed.  But still I was certain that it just&lt;br /&gt;wasn't humanly possible, given that I had to do almost all the work,&lt;br /&gt;with limited funding and time.&lt;br /&gt;&lt;br /&gt;At this time I had an NSF grant, and also startup money at UCSD, hence&lt;br /&gt;I could rebudget some of my NSF grant.  David Joyner suggested that we&lt;br /&gt;run a ``Sage Days", which I guess was named after the East Coast&lt;br /&gt;Computer Algebra Days (ECCAD).  David and I organized the first one,&lt;br /&gt;and David did an amazing job inviting a great cast of speakers,&lt;br /&gt;including Steve Linton (of GAP), Sebastian Pauli (of KANT), etc., and&lt;br /&gt;Joe Buhler who also lives in San Diego made sure we scheduled the&lt;br /&gt;workshop so that a lot of people would show up.  We had Sage Days in&lt;br /&gt;early February, and I released Sage version 1.0 during my talk, which&lt;br /&gt;started the workshop.  The talks went well, people were extremely&lt;br /&gt;enthusiastic about Sage, the coding sprints were intense: the first&lt;br /&gt;version of Sagetex was written, and the current sophisticated GAP&lt;br /&gt;interface was written then by Steven Linton, Kiran Kedlaya and David&lt;br /&gt;Roe wrote that Macaulay 2 interface, and I had the first spark of&lt;br /&gt;insight about how to create the Sage Notebook, after watching a talk&lt;br /&gt;by Robert Kern about some failed attempt to give IPython a notebook&lt;br /&gt;interface.  That was the first time I realized a notebook style&lt;br /&gt;interface had some value.  And Gonzalo Tornaria got us to finally&lt;br /&gt;start using revision control for our source (!), which meant way more&lt;br /&gt;people could easily contribute.  (I had used revision control before&lt;br /&gt;with Magma, but with Sage I had been just taking snapshots regularly.)&lt;br /&gt;&lt;br /&gt;As a direct result of Sage Days 1, development picked up.  Then I&lt;br /&gt;moved to University of Washington (Seattle) two months later.&lt;br /&gt;Somehow, during the summer of 2006 I was invited by MSRI to run a&lt;br /&gt;2-week summer workshop on modular forms for about 40 graduate&lt;br /&gt;students.  I invited David Kohel and a few other speakers.  At this&lt;br /&gt;point, honestly some aspects of Sage sucked.  I had written a massive&lt;br /&gt;amount of code, for really wide range of things.  Power series,&lt;br /&gt;fraction fields, number fields, modular symbols, linear algebra, etc.&lt;br /&gt;I probably should have just used Magma for the workshop, and indeed at&lt;br /&gt;least one speaker entirely did.  But I didn't... and this was a&lt;br /&gt;turning point.  Some of the students, such as David Harvey (grad&lt;br /&gt;student at Harvard), Robert Bradshaw (Seattle), Craig Citro, and many&lt;br /&gt;others, became highly interested in fixing the numerous flaws they ran&lt;br /&gt;into with Sage. After the talks, we had huge all night coding sprints&lt;br /&gt;in the dorm lobby.  Students constantly asked me questions about how&lt;br /&gt;to do things in Sage, and my answer was usually: ``It's easy.  Implement&lt;br /&gt;it and send me a patch!"  They made a t-shirt for the conference with&lt;br /&gt;this quote on it. &lt;br /&gt;&lt;br /&gt;Next we started planning Sage Days 2 in Seattle in late 2006.  This&lt;br /&gt;second Sage Days was also well attended and resulted in major&lt;br /&gt;fundamental development directions.  For example, David Harvey led a&lt;br /&gt;charge to redesign the coercion model and David Roe got obsessed with&lt;br /&gt;implementing every model imaginable of the p-adics (this still isn't&lt;br /&gt;really done over 3 years later).  Sebastian Pauli gave a talk in which&lt;br /&gt;he explained what anybody who takes an algebraic number theory course&lt;br /&gt;knows (or pays attention to Weil), which is that there is a number&lt;br /&gt;field and function field analogy and that all the algorithms carry&lt;br /&gt;over.  Guess what---Magma has a sophisticated implementation of all&lt;br /&gt;the relevant algorithms in the function field case, due to work of&lt;br /&gt;Florian Hess that built on work of the KANT group and others, and PARI&lt;br /&gt;has absolutely nothing for algebraic number theory over functions&lt;br /&gt;fields.  Sebastian explained that in fact Magma is the only program in&lt;br /&gt;the world that provides both sides of this analogy, I think hoping&lt;br /&gt;that we would do something about this problem.  (Now it is 2009, and&lt;br /&gt;still nothing at all has happened---Magma is the only program in the&lt;br /&gt;world for the function field half of algebraic number theory.  Gees.)&lt;br /&gt;&lt;br /&gt;We had about 13 talks on the first day of Sage Days 2.  At the end of&lt;br /&gt;the day, David Savitt (at student of Richard Taylor, and now a&lt;br /&gt;professor in Arizona) looked at me and declared me insane.&lt;br /&gt;&lt;br /&gt;After Sage Days 2, I spent over 2 very, very painful months&lt;br /&gt;implementing David Harvey's proposed coercion model.  I learned (or&lt;br /&gt;rather, remembered) how difficult certain types of changes to a large&lt;br /&gt;interrelated library can be.  Also, a student from San Diego---Alex&lt;br /&gt;Clemesha---followed me to Seattle, and I paid him fulltime to work on&lt;br /&gt;Sage using my startup money.  He implemented 2d graphics for&lt;br /&gt;mathematicians (instead of scientists, which is what matplotlib&lt;br /&gt;provides), and he also helped a lot with the first version of the Sage&lt;br /&gt;Notebook.  In fact, he was a big Mathematica user before he started&lt;br /&gt;using Sage, and he really missed the Mathematica Notebook, so he&lt;br /&gt;wanted something similar in Sage.  When he used Mathematica, he had a&lt;br /&gt;job programming webpages using webMathematica, so really wanted&lt;br /&gt;something that combined the notebook idea with a webpage.  We came up&lt;br /&gt;with various ideas.  Then I hired an undergraduate, Tom Boothby, who&lt;br /&gt;had just quit a 6-year career in web programming to go back to&lt;br /&gt;college.  Together, the three of us figured out how to write AJAX&lt;br /&gt;applications, and the first version of the notebook was born.  &lt;br /&gt;&lt;br /&gt;It was a controversial decision at the time to write a webapp&lt;br /&gt;instead of a traditional local GUI application.  There were many&lt;br /&gt;reasons we made this choice, but for me it was mainly because (1) I&lt;br /&gt;had written some serious local GUI applications before and knew that&lt;br /&gt;they are not easy to write, not portable, and hard to build from&lt;br /&gt;source, and (2) I had tried out wxMaxima (the local GUI maxima&lt;br /&gt;interface) and was just totally shocked to see how bad it was, due to&lt;br /&gt;having to reinvent the wheel---they would have to implement font&lt;br /&gt;dialogs, tabs, everything from scratch; in contrast, with a web&lt;br /&gt;application much of that comes for free.  So my motivation was&lt;br /&gt;entirely to create a desktop application quickly.  That it happen to&lt;br /&gt;later make it possible for people to collaborate easily, use a Sage&lt;br /&gt;notebook over the web, etc., is a nice bonus. And, it's clear by now&lt;br /&gt;that web applications (like Facebook, Gmail, etc.) are extremely&lt;br /&gt;popular now, and will only get way more popular in the future.&lt;br /&gt;&lt;br /&gt;In 2007, the Sage project started really picking up steam.  Bobby&lt;br /&gt;Moretti, another UW undergraduate, got obsessed with making it&lt;br /&gt;possible to actually do symbolic calculus in Sage itself.  Until&lt;br /&gt;Bobby's code was added to Sage in mid 2007, absolutely all symbolic&lt;br /&gt;Calculus in Sage had to be done via explicit unnatural calls to&lt;br /&gt;Maxima, and involved embarassing and confusing conversions.  Bobby, me&lt;br /&gt;and others spent a lot of work designing Sage's first symbolic&lt;br /&gt;calculus interface, and Bobby wrote a pure Python ``proof of concept"&lt;br /&gt;reference implementation that used Maxima via a pseudotty behind the&lt;br /&gt;scenes for everything.  This took him months, and probably had a&lt;br /&gt;negative impact on all other aspects of his life.  But he heroically&lt;br /&gt;pulled it off.  It went into Sage and changed things&lt;br /&gt;dramatically---suddenly, Sage could actually be used for some&lt;br /&gt;undergraduate courses.  This increased interest in Sage dramatically.&lt;br /&gt;&lt;br /&gt;A few months later, in November 2007, Sage was nominated for the&lt;br /&gt;Trophees du Libre, and Martin Albrecht presented Sage at the meeting&lt;br /&gt;for finalists.  We won first place in the Scientific Software&lt;br /&gt;category.  This resulted in a blitz of publicity (e.g., several&lt;br /&gt;slashdot articles, and articles in papers around the world in many&lt;br /&gt;languages), and greatly increased the number of Sage downloads.&lt;br /&gt;&lt;br /&gt;Around this time we also have Sage Days 5 at the Clay Mathematics&lt;br /&gt;Institute, and Craig Citro convinces us to switch to a 100% peer&lt;br /&gt;review and 100% doctest policy on all new Sage code.  Also, I hire&lt;br /&gt;Michael Abshoff to do release management for one year, which&lt;br /&gt;temporarily frees me up to work more on coding, grant proposals, and&lt;br /&gt;my own research.&lt;br /&gt;&lt;br /&gt;There is of course much, much more to this story.  But it's too&lt;br /&gt;recent, and sometimes a story shouldn't be told until enough time has&lt;br /&gt;elapsed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-7784288988683923550?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/7784288988683923550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=7784288988683923550' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/7784288988683923550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/7784288988683923550'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2009/12/mathematical-software-and-me-very.html' title='Mathematical Software and Me: A Very Personal Recollection'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-3650631912846822527</id><published>2009-10-11T23:56:00.000-07:00</published><updated>2009-10-12T00:11:36.930-07:00</updated><title type='text'>The Sage Notebook</title><content type='html'>The &lt;a href="http://nb.sagemath.org/"&gt;Sage Notebook&lt;/a&gt; is the graphical user interface to the math software &lt;a href="http://sagemath.org/"&gt;Sage&lt;/a&gt;.  The notebook is perhaps somewhat unusual in that it is a web application that people also use locally.  It's a large program that has been written and rewritten a few times since 2006 by myself, Tom Boothby, Alex Clemesha, and many, many other people.&lt;br /&gt;&lt;br /&gt;Supported by an internal grant from University of Washington, I've been working on separating the notebook off from Sage and rewriting many parts of it to improve the robustness and fix subtle issues.   My goal is that the notebook be robust, fast, scalable, and work well outside Sage.  Also, it would be very nice to port it to run natively on Microsoft Windows.&lt;br /&gt;&lt;br /&gt;Nearly two weeks ago I had the Sage notebook stabilized and all known new bugs fixed (after separating it off from sage as a separate program and rewriting the interface stuff).  But I realized that it would be a total nightmare to introduce yet another ("Sage object") storage format, which would make refactoring code extremely painful.    So, I created an "abstract storage layer" and implemented a storage system for everything in the Sage notebook which doesn't use any special Sage-related pickles.  Some data is stored as pickled basic Python objects that can be read from any version of Python with or without Sage installed, but that is it.   Rewriting the notebook to use an abstract storage layer is the sort of thing that at first seems like it will take a day, but then takes more than a week.  Anyway, I did it (with help from Tim Dumol and Mitesh Patel). &lt;br /&gt;&lt;br /&gt;I hope people will test &lt;a href="http://standalone.sagenb.org/"&gt;http://standalone.sagenb.org/&lt;/a&gt;!  Please try it.&lt;br /&gt;&lt;br /&gt;William&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-3650631912846822527?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/3650631912846822527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=3650631912846822527' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/3650631912846822527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/3650631912846822527'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2009/10/sage-notebook.html' title='The Sage Notebook'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-3295891180613025827</id><published>2009-10-07T21:29:00.000-07:00</published><updated>2009-10-07T21:46:03.771-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vmware virtualbox'/><title type='text'>VirtualBox versus VMware Server</title><content type='html'>&lt;a href="http://www.vmware.com/"&gt;VMware&lt;/a&gt; is a program that allows you to (often safely) run several virtual computers on a single physical computer.  I have been using VMware since about 1998, have purchased valid licenses several times with my own money, and have long considered VMware the sort of enterprise level specialized software that was unlikely to be available free and open source anytime in the near future.&lt;br /&gt;&lt;br /&gt;All the web infrastructure for &lt;a href="http://sagemath.org/"&gt;http://sagemath.org&lt;/a&gt; and many related projects was knocked offline for a full day last week due to problems I had with my VMware server installation.  I thus decided to learn the free open source competitor &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; and see how it compares to VMware, and share some of my experiences with you.   I'm comparing to VMware server running on a very high end Linux host (Sun X4450) to VirtualBox running on the same Linux host.   I vastly prefer VirtualBox now, even though I was a diehard VMware user since 1998.&lt;br /&gt;&lt;br /&gt;Ways VirtualBox is better then VMware Server:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; Both are free, but VirtualBox is free and open source (GPLv2!), whereas VMware server is "free" and closed source.  It's possible to buy VMware server + more features for thousands of dollars / year, and I even considered it, but I *couldn't* figure out what I would get for my money from the confusing VMware site, despite coming back to it several times.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;VirtualBox is massively better at supporting OS X than VMware server: it is *impossible* (without running yet another virtual machine on my laptop!) to use the VMware server console to connect to remote virtual machines on OS X, since VMware uses a proprietary browser plugin that is only available for Windows and Linux.   In contrast, VirtualBox uses a standard remote desktop protocol, so it is easy to connect to running VirtualBox consoles from any operating system using a range of different remote desktop clients.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;VMware server limits me to 2 cores and 8GB RAM per machine. VirtualBox has no such limitations.   This is a *huge* factor for me, since the host server has 128GB RAM and 24 cores!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; If a virtual machines runs under VMware server and uses 4GB RAM (say), then VMware server will silently (and completely hidden) allocate around 4GB of disk space on the host filesystem.   My host server has 128GB RAM, but only a 70GB hard disk.  The net result is that I can't use the resources I have -- I have to run far less machines than I could, or give them less RAM.   VirtualBox doesn't allocate any "secret" disk space at all.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; The web interface to VMware is extremely flaky and frustrating.  It randomly fails to work with many of my web browsers, I often have to restart it, and it is clunky.   There is no finished web interface to VirtualBox yet, but there is VBoxWeb, which is looks like it will be good when it is finished.   Also, the command line interface to VirtualBox is amazing; I think it is vastly superior to VMware Server's.  Also, there is a Python API for scripting VirtualBox machines.    After spending a day learning VirtualBox, I wrote my own scripts to automatically start from the console all of my virtual machines in the background, and open remote desktop ports for each.  I can easily see what is running using another little script, etc.  With VMware server, even starting 20 machines was a tedious and painful exercise (probably if I paid it would be easier).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; The VirtualBox documentation is better.  It doesn't "talk down" to me like I feel VMware's documentation does.  It's clear and useful.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; VirtualBox is a single program that runs on Solaris, OS X, Linux and Windows.  VMware, in contrast, is several different programs -- VMware player, VMware workstation, VMware server (and several versions of that).  It can be really confusing and frustrating, with artificial limitations put on every program so as to extract your money.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; VMware is blatantly commercial (they went public a few years ago).  Sun is also commercial, but they have a strong commitment to open source.  Of course, I don't know what will happen with the Oracle acquisition.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; VMware completely stopped working on my main virtualization server, and despite upgrades, clean installs, etc., I absolutely could not get it to work again.   I had to switch to running it on another computer temporarily.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-3295891180613025827?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/3295891180613025827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=3295891180613025827' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/3295891180613025827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/3295891180613025827'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2009/10/virtualbox-versus-vmware-server.html' title='VirtualBox versus VMware Server'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-6962361690983322465</id><published>2009-04-03T08:04:00.000-07:00</published><updated>2009-04-03T08:07:34.204-07:00</updated><title type='text'>Technology in Mathematics Education - Panel</title><content type='html'>In a few hours I'll be in a panel discussion about technology in mathematics education.  I might say something like the following.&lt;br /&gt;&lt;br /&gt;Math and technology in general: To me mathematics is about solving problems by understanding them more deeply, finding ways to explore them, finding elegant proofs, looking for ways to visualize and compute with deep structure, etc.  Math software is simply another tool or technique that one can use to _massively_ enhance ones ability to solve mathematical problems.  Asking whether or not to use computer technology in mathematics is no different than asking whether or not to use "logical reasoning" or "linear algebra" or any other major tool in the mathematician's toolchest.&lt;br /&gt;&lt;br /&gt;Math and technology in teaching:&lt;br /&gt;&lt;br /&gt;A. Open Source -- I personally feel it is terrible to *train* students mainly to use closed source commercial mathematics software.  This is analogous to teaching students some weird version of linear algebra or calculus where they have to pay a license fee each time they use the fundamental theorem of calculus or compute a determinant.  Using closed software is also analogous to teaching those enthusiastic students who want to learn the proofs behind theorems that it is illegal to do so (just as it is literally illegal to learn *exactly* how Maple and Mathematica work!).  From a purely practical perspective, getting access to commercial math software is very frustrating for many students.  It should be clear that I am against teaching mathematics using closed source commercial software.&lt;br /&gt;&lt;br /&gt;B. Problem solving -- Many students are interested in mathematical software mostly because it allows them to solve *a lot* of problems that are simply impossible to do by hand.  For some (at least me) it transforms math from a tedious, error prone, and frustrating (but addictive) exercise into an exciting exploration of an amazing "virtual" world of interesting problems, ideas, and techniques.  For most people, even before computers, anything but fairly trivial algebra or calculus is nearly impossible to do correctly by hand.  Gauss (1777-1855) spent years counting the 216816 primes up to 3 million... and wrote in a letter in 1849 that there are 216745 such primes.  Any undergrad can type prime_pi(3*10^6) into Sage and get the right answer instantly.&lt;br /&gt;&lt;br /&gt;C. Regarding student skills being lost due to the existence of computers -- If you really want students to be able to do something, e.g., compute integrals without using a computer, give them in class exams on that material.  By far the main complaint I have and hear from both students and professors is that students have too limited skills at using mathematics software.  This situation is ridiculous. Would we give a degree in Software Engineering to a student who has never written a computer program? Why give a degree in techniques of "Mathematical Problem Solving" to a student who can't even use a computer to solve mathematical problems, given that computers are one of the most important basic tools in the mathematician's toolchest.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-6962361690983322465?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/6962361690983322465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=6962361690983322465' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/6962361690983322465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/6962361690983322465'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2009/04/technology-in-mathematics-education.html' title='Technology in Mathematics Education - Panel'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-980470736776048328</id><published>2008-12-22T15:07:00.000-08:00</published><updated>2008-12-22T15:29:00.718-08:00</updated><title type='text'>new hardware!</title><content type='html'>I recently received four 24-core &lt;a href="http://www.sun.com/servers/x64/x4450/&lt;br /&gt;"&gt;Sun X4450&lt;/a&gt; with 128GB RAM, and a &lt;a href="http://www.sun.com/servers/x64/x4500/"&gt;Sun X4500&lt;/a&gt; storage box with 8 cores, 32GB RAM, and 24 &lt;b&gt;terabytes&lt;/b&gt; of disk space.  It took literally less than 2 hours to install Ubuntu 8.0.4 LTS server Linux on all the 4450's (about 15 minute each), but several more days to make some sort of transition over to them.  &lt;br /&gt;&lt;br /&gt;The machines are &lt;i&gt;fast&lt;/i&gt;.  Most tests I try run twice as fast on the new machines as on the old sage.math (which was a 1.8Ghz Operton).   &lt;br /&gt;&lt;br /&gt;The first frustrating transition was that I can no longer run Magma on the new boxes, because they have a different MAC address.   I've received one user complaint so far, and expect others, though of course I hope people consider &lt;a href="http://sagemath.org"&gt;using a viable open source alternative&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I installed about 20 operating systems, including most major Linux distros, FreeBSD, and Solaris under vmware server on one of the boxes, and configured them to all use NFS. Unfortunately, we don't have an NIS/NIS+ or OpenLDAP server setup, so only I can login to those boxes :-(.  Setting up NIS or OpenLDAP clients and servers is not for the faint of heart.   Anyway, just installing that many Linuxes and configuring them with build tools and NFS took about two days, including time to download installation media.    Of all the OS's the only one I gave up on was gentoo, which is a &lt;i&gt;complete disaster&lt;/i&gt; (hours of tedious instructions that don't quite work; the live installer crashing; getting the live installer to work, but having vi crash on compilation once it boots up, etc.); that is the worst major operating system I have tried.   According to &lt;a href="http://distrowatch.com/dwres.php?resource=major"&gt;distrowatch&lt;/a&gt;, "&lt;i&gt;Gentoo Linux has lost much of its original glory in recent years. Some Gentoo users have come to a realisation that the time-consuming compiling of software packages brings only marginal speed and optimisation benefits. Ever since the resignation of Gentoo's founder and benevolent dictator from the project in 2004, the newly established Gentoo Foundation has been battling with lack of clear directions and frequent developer conflicts...&lt;/i&gt;"  The failure of Gentoo hopefully helps emphasize the importance of clear direction.&lt;br /&gt;&lt;br /&gt;Anyway, it is very nice having about two dozen cleanly installed OS's with a shared filesystem, all running on very fast hardware. &lt;br /&gt;&lt;br /&gt;We still haven't installed an operating system on the 24 terabyte disk box, and have a lot of configuration work to do.  Fortunately, Tom Boothby is working for me as a sysadmin, so he will do a lot of the hard work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-980470736776048328?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/980470736776048328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=980470736776048328' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/980470736776048328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/980470736776048328'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/12/new-hardware.html' title='new hardware!'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-7588937417082042312</id><published>2008-11-28T19:44:00.000-08:00</published><updated>2008-11-28T20:51:03.254-08:00</updated><title type='text'>Sage Patch Review</title><content type='html'>I just spent a lot of time during the last few days refereeing Sage patches in the &lt;a href="http://trac.sagemath.org/sage_trac/" target="_new"&gt;Sage trac server&lt;/a&gt;.  Basically, we got behind and had something like nearly a 100 patches in there that were marked as "[with patch; needs review]", which means that the patch is done, and is just waiting on review.  Some of the patches in this state hadn't been commented on since August!   In many cases they had "bit rotted", which means that they are broken, since related parts of Sage had changed after the batches had been posted.&lt;br /&gt;&lt;br /&gt;In June 2008 at Sage Days 8.5 we had a long meeting and setup a patch referee editor system, but it turned out to be a &lt;b&gt;total failure&lt;/b&gt;.    Our system was setup to be like a journal editor system, except with the addition of a weekly meeting.  Even in person, our one and only meeting was an inefficient experience, and it never worked over irc or email. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Review is a Generic Problem&lt;/h3&gt;&lt;br /&gt;Robert Bradshaw recently went to a Google Summer of Code Mentors summit, and told me that the number one problem open source projects have  that was discussed a lot at the summit is with patch review, in particular, with patches not getting reviewed in a timely fashion.  &lt;br /&gt;&lt;br /&gt;Review is also a big problem with mathematics journals, though with journals the turnaround time is expected to be months.  Or even years -- I have one paper that's been in the review process at Mathematics of Computation for 3 years now, and I've almost never gotten a first referee report back from that journal in less than a year from submission time!  But for some reason math journals tend to work.  That said, I had some discussions with a prominent publisher about a journal that had fallen apart because the chief editor had seriously dropped the ball, and said publisher had to spend a massive amount of his own time fixing the situation. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Patch Review and Paper Review&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Reviewing a math paper is a much different experience from reviewing a software patch.  When one reviews a math paper, you basically get a potentially very interesting paper that is at the cutting edge of research, which you would be crazy to not want to read anyways (or you're just going to easily not recommend it for publication).  When you review the paper, you excitedly read it, and if things don't make sense -- or the style is bad, or whatever -- you get to ask the author to explain clearly any point that troubles you, and the author definitely will.  It's a lot of work, but it is mathematical research. &lt;br /&gt;&lt;br /&gt;Reviewing a patch is different than reviewing a math paper.  First, very often a patch fixes a subtle bug in Sage or introduces some new functionality.  If the patch fixes a subtle bug, then of course the fix itself could easily introduce a new subtle bug, or maybe not really fix the bug correctly, and the referee has to figure this out.  If the patch introduces new functionality, it could easily contain bugs, often bugs that the author of the patch hasn't thought about testing for.  Often when refereeing a patch, I bounce it back with a use case that exhibits a bug.   Some of the most common and dangerous patches are the ones that speed up existing code.   These are often some slight changes in a few places, which seem safe enough, and make some code a bit faster.  Last time I looked at one of these, I decided to loop over the first 100 obvious test cases -- about the 90th input crashed the new code (the old code worked fine on that example).   I would have never noticed that problem had I just read the patch and tried the tests included with it; it was thus critical for me to creatively think of new tests. &lt;br /&gt;&lt;br /&gt;Of course, when refereeing a math paper one also looks for subtle flaws and tests theorems for consistency, but still it has a different feel than refereeing a patch.&lt;br /&gt;And with refereeing patches there is also a &lt;i&gt;time window&lt;/i&gt;, which also a huge problem.  Patches stop working because the rest of the Sage system evolves past them -- math papers don't just stop working because somebody out there proves more theorems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;What Should We Do?&lt;/h3&gt;&lt;br /&gt;As I said above, I believe that patch review is a major problem for the Sage project.  I think the best solution is that there be one person at any given time who acts as the "patch review manager".  This person could vary from month to month.    This position would be the analogue of release manager or more directly of the chief editor at a traditional journal.  Every few days, this person looks at the &lt;a href="http://trac.sagemath.org/sage_trac/report/10" target="_new"&gt;list of all patches that need review&lt;/a&gt; and goes through every single one, either pinging people about them, or refereeing them if possible.  Said person, must be bold enough to be able to understand code anywhere in Sage, and have a good sense of who can look at what.   If a person did that, I believe our patch review problem would be solved. &lt;br /&gt;&lt;br /&gt;If we don't do this, the Sage project will operate at reduced efficiency and new and experienced developers alike will get needlessly frustrated.  (NOTE: We currently &lt;i&gt;do&lt;/i&gt; have Michael Abshoff who does pretty much what I describe above, but he has other things he should be doing, since he is release manager.) The Sage project will have a harder time reaching its goal to be a viable alternative to Magma, Maple, Mathematica, and Matlab.   We have to work smarter and do a better job, for the sake of all the people out there currently &lt;b&gt;forced&lt;/b&gt; to use Magma, Maple, Mathematica, or Matlab, instead of an open source peer reviewed scientifically viable system like Sage aims to be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-7588937417082042312?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/7588937417082042312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=7588937417082042312' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/7588937417082042312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/7588937417082042312'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/11/sage-patch-review.html' title='Sage Patch Review'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-2740338901516193121</id><published>2008-11-23T19:43:00.000-08:00</published><updated>2008-11-24T10:59:02.409-08:00</updated><title type='text'>Magma and Sage</title><content type='html'>I spent the weekend working on making Sage and Magma talk to each other more robustly.  Getting different math software systems to talk to each other is a problem that the OpenMath project tried to tackle since the 1990s, but they failed.  Sage has out of necessity made real (rather than theoretical) progress toward this problem over the years, and what I did this weekend was a little step in the right direction for Sage. &lt;br /&gt;&lt;br /&gt;First, I designed with Michael Abshoff a new feature for our testing framework, so we can test only optional doctests that depend on a certain component or program being present.  Without a usable, efficient, and flexible testing system it is impossible to develop good code, so we had to do this.   Next, I worked on fixing the numerous issues with the current Sage/Magma interface, as evidenced by many existing doctests failing.  It was amusing because some of the doctests had clearly never ever succeeded, e.g., things like&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; sage: magma.eval('2')       # optional&lt;br /&gt; sage: other stuff&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;was in the tree, where the output was simply missing.&lt;br /&gt;&lt;br /&gt;Anyway, in fixing some of the much more interesting issues, for example, things like this that involve nested polynomial rings, I guess I came to understand better some of the subtleties of getting math software to talk with other math software.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: R.&amp;lt;x,y&gt; = QQ[]; S.&amp;lt;z,w&gt; = R[]; magma(x+z)&lt;br /&gt;boom&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The first important point is that one often &lt;i&gt;thinks&lt;/i&gt; that &lt;b&gt;the problem&lt;/b&gt; with interfacing between systems is given an object X in system (say Sage), finding a string s such that s evaluates in another system (say Magma) to something that "means the same thing" as X.   This is the problem that OpenMath attempt to solve (via XML and content dictionaries), but it is not quite the &lt;i&gt;right problem&lt;/i&gt;.   Instead, given a particular mathematical software system (e.g., Magma) in a particular state, and a view of that state by another system (e.g, Sage), the problem is to then come up with a string that evaluates to the "twin image" of X in the running Magma system.   &lt;br /&gt;&lt;br /&gt;To do this right involves careful use of caching.  Unless X is an atomic element (e.g., a simple thing like an integer) it's important to cache the version of X in Magma as an attribute of X itself.   Let's take an example where this caching is very important and subtle.  Consider our example above, which has the following Sage code as setup.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: R.&amp;lt;x,y&gt; = QQ[]&lt;br /&gt;sage: S.&amp;lt;z,w&gt; = R[]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This creates the nested polynomial ring (QQ[x,y])[z,w].   The new code in sage-3.2.1 (see &lt;a href="http://trac.sagemath.org/sage_trac/ticket/4601"&gt;#4601&lt;/a&gt;) does the following to convert x + z to &lt;i&gt;a particular&lt;/i&gt; Magma session.  Note that the steps to convert x+z to Magma depend on the state of a particular Magma session!   Anyway, Sage first gets the Magma version of S, then askes for the generator names of that object in the given Magma session. These are definitely &lt;b&gt;not&lt;/b&gt; z,w:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: m = magma(S)&lt;br /&gt;sage: m.gen_names()&lt;br /&gt;('_sage_[4]', '_sage_[5]')&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The key point is the strings returned by the gen_names command are strings that are valid in Magma and evaluate to each of the generators we're after.  They depend on time -- if you did stuff in the interface earlier you would get back different numbers (not 4 and 5).    Note that it's very important that the Python objects in Sage that _sage_[4] and _sage_[5] point to do not get garbage collected, since if they do then _sage_[4] and _sage_[5] also become invalid, which is not good. So it's important that the magma version (m above) of S is cached.   &lt;br /&gt;&lt;br /&gt;Next Sage gets the magma string version of each of the coefficients of the polynomial x+z (over the base ring R) using a similar process.  It all works very well without memory leaks, but only because of careful track of &lt;i&gt;state&lt;/i&gt; and &lt;i&gt;caching&lt;/i&gt;. &lt;br /&gt;And the resulting string expression involves the _sage_[...]'s. &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: (x+z)._magma_init_(magma)&lt;br /&gt;'((1/1)*1)*_sage_[4]+((1/1)*_sage_[7])*1'&lt;br /&gt;sage: magma(x+z)&lt;br /&gt;z + x&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Notice that _magma_init_ -- the function that produces the string that evaluates to something equal to x+z in magma -- now takes as input a particular Magma session (there can be dozens of these in a given Sage session, with different Magma's running on different computers all over the world).    This is a change to _magma_init_ that makes the implementation of what's described above easy.   It's an API change that might also be carried over to many of the other interfaces (?).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-2740338901516193121?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/2740338901516193121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=2740338901516193121' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/2740338901516193121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/2740338901516193121'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/11/magma-and-sage.html' title='Magma and Sage'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-6926169563512206086</id><published>2008-11-20T13:49:00.000-08:00</published><updated>2008-11-20T14:10:34.043-08:00</updated><title type='text'>Sage-3.2 and Mathematica 7.0</title><content type='html'>We just released sage-3.2!  W00t! See &lt;a target="_new" href="http://trac.sagemath.org/sage_trac/query?status=closed&amp;milestone=sage-3.2"&gt;for the tickets closed in this release&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There's been a lot of hyperbole due to Mathematica 7.0's recent release.  A colleague of mine got a personal email from Stephen Wolfram himself, asking him to try out Mathematica 7.0, and instead my colleague forwarded the message to me and remarked that it was too late, since he had switched to Sage.   &lt;br /&gt;&lt;br /&gt;I looked over the Mathematica 7.0 release notes... and noticed that they added support for computing with Dirichlet characters.  I implemented the code in &lt;a target="_new" href="http://magma.maths.usyd.edu.au/magma/"&gt;Magma&lt;/a&gt; and &lt;a target="_new" href="http://sagemath.org"&gt;Sage&lt;/a&gt;, and wrote a chapter in &lt;a target="_new" href="http://www.amazon.com/Modular-Computational-Approach-Graduate-Mathematics/dp/0821839608/ref=si3_rdr_bb_product/104-3960186-4406345"&gt;my modular forms book&lt;/a&gt; about computing with Dirichlet characters.   So I followed the "what's new" to &lt;a target="_new" href="http://reference.wolfram.com/mathematica/ref/DirichletCharacter.html"&gt;this Mathematica page&lt;/a&gt; about their new functionality for Dirichlet characters.  It's &lt;i&gt;sad&lt;/i&gt;.   They give no way of specifying a character, except to give the "&lt;i&gt;i&lt;/i&gt;th character", which is meaningless and random (and they say so) -- that's like giving a matrix over a finite field at random.  All they give is a function to evaluate characters at numbers -- they don't give functions for arithmetic with them, or computing invariant such as the conductor, which is where all the real fun comes in.  Boggle.  Sage is light years ahead of Mathematica here.   &lt;br /&gt;&lt;br /&gt;The Mathematica release notes also &lt;a href="http://www.wolfram.com/products/mathematica/newin7/content/FiniteGroupTheory/"&gt;brag about finally&lt;/a&gt; having something for finite groups, but again it is very minimal compared to what Sage provides (via &lt;a target="_new" href="www.gap-system.org/"&gt;GAP&lt;/a&gt;).  Basically all they have is a bunch of tables of groups, but no real algorithms or functionality.  The whole approach seems all backwards -- first one should implement algorithms for computing with groups, then use them to make tables in order to really robustify the algorithms, then compare those tables to existing tables, etc.  I wonder whether the group theory data in Mathematica was computed using Gap or Magma?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-6926169563512206086?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/6926169563512206086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=6926169563512206086' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/6926169563512206086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/6926169563512206086'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/11/sage-32-and-mathematica-70.html' title='Sage-3.2 and Mathematica 7.0'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-5424821151152248764</id><published>2008-11-12T17:53:00.001-08:00</published><updated>2008-11-12T18:00:03.288-08:00</updated><title type='text'></title><content type='html'>I'm back from Sage Days 11 (UT Austin), which was very intense as are all Sage Days.  It was a great workshop, and kickstarted many things, I hope.  One very obvious big plus that came out of it was Craig Citro and Gonzalo Tornaria's work on massively optimizing the Cython-related dependency checking code in setup.py.  The current implementation was some crappy thing I literally did in an hour, which has really bogged down as the Sage core library has gotten massive.     Also, there's now a lot of momentum behind implementing Dokchitser's L-functions algorithm natively in Sage, which I'm greatly looking forward to -- Sourav San Gupta did much work on this at Sage Days 11, and has done a lot since too (in addition to his heavy load of grad courses).   Mike Rubinstein and Rishi are wrapping Rubinstein's Lcalc using Cython as well, so Sage will soon go from the best system for computing with L-functions to even better!!&lt;br /&gt;&lt;br /&gt;Yesterday I thought a bunch about the Sage/Magma interface and wrote several demos and test code.  I'm still not 100% sure about how I want to do this -- there are numerous interesting subtleties with Magma.  For example, if you create QQ[x,y] in Magma, then create QQ[x,y][z,q], the variables x,y from the first ring will *not* play nicely with the variables x,y in the second ring, which is surprising, since it is different than what happens with Sage.   Anyway, this and many other problems are solvable and I'll be working on this again a lot tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-5424821151152248764?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/5424821151152248764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=5424821151152248764' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5424821151152248764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5424821151152248764'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/11/im-back-from-sage-days-11-ut-austin.html' title=''/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-2336032898654138676</id><published>2008-11-06T18:06:00.000-08:00</published><updated>2008-11-06T18:12:16.093-08:00</updated><title type='text'>Sage Days 11 in Austin Texas is tomorrow</title><content type='html'>I'm in Seattle, it's 6pm, and &lt;a href="http://wiki.sagemath.org/days11"&gt;Sage Days 11&lt;/a&gt; is in Austin, Texas tomorrow.  I'm very excited, and I'm flying there over night.  On the one hand, a red eye might make me "totally exhausted" for the conference tomorrow.  On the other hand, I slept an average of 2-3 hours per night for a week during Sage Days 8 last time I was in Austin, and I'm reasonably caught up on sleep.&lt;br /&gt;&lt;br /&gt;My main goal for the workshop is to continue work of Tim Dokchitser and Jennifer Balakrishnan to create a native implementation of Dokchiter's algorithm for computing L(f,s).  Having this is suddenly incredibly important to my number theory research, so I'm finally motivated to want to get it into Sage. &lt;br /&gt;&lt;br /&gt;I'll post about the workshop in my blog here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-2336032898654138676?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/2336032898654138676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=2336032898654138676' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/2336032898654138676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/2336032898654138676'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/11/sage-days-11-in-austin-texas-is.html' title='Sage Days 11 in Austin Texas is tomorrow'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-5947370708242325581</id><published>2008-10-01T09:39:00.000-07:00</published><updated>2008-10-01T09:41:40.159-07:00</updated><title type='text'>Why I like Sage</title><content type='html'>Today's blog post is really from Jason Grout.  It's why he likes Sage.  This is from an email he sent out today, which I liked reading:&lt;br /&gt;&lt;br /&gt;"It depends on the area, so you'll have to give me an area to get a more specific answer.  In general, Sage has somewhat weaker general symbolic capabilities (i.e., integrals, etc.) than mathematica or maple (though usually this does not seem to be a problem in undergraduate-level problems).  It has *much* stronger number theory functionality.  Things are object-oriented in Sage and Sage understands mathematical structures and how they relate (using category theory).  For example, Sage knows what a vector space is, what a finite field is, etc.  You can actually create a finite field or an extension of the rationals and ask questions about it.  You can create a polynomial ring over a field and then just work with it.&lt;br /&gt;&lt;br /&gt;Sage is also generally faster than either Mathematica or Maple, in my experience.&lt;br /&gt;&lt;br /&gt;The web interface to Sage is a huge plus to Sage over mathematica and maple.  Of course, being free and open-source is something that is unmatched in either Mathematica or Maple; that is a very important point that is sometimes overlooked.  You can literally see what is going on inside of Sage, where you have to guess what is happening in Mathematica or Maple.&lt;br /&gt;&lt;br /&gt;One reason that Sage was chosen for an AIM workshop on helping undergraduate research was that the participants didn't have a common computational system (i.e., some had access to Mathematica, some had access to Maple, some had access to neither).  They could use Sage because it was free, whereas it would have been problematic to insist that every person somehow acquire access to a specific piece of commercial software.  Related to this, I had a student complain on my course evaluations about me using Mathematica in class because it is hard for our students here to have access to Mathematica, and they would have to pay in order to use it at home, etc.&lt;br /&gt;&lt;br /&gt;If you are teaching future secondary ed teachers, then they most likely will not have access to Maple or Mathematica when they are teaching high school because of the cost.  However, they *will* have access to Sage, so using Sage directly benefits their future students because whatever they learn can be used in their high school classes.&lt;br /&gt;&lt;br /&gt;Another huge plus to Sage, in my eyes, is that it is based on one of the most prevalent  and easiest-to-use computer languages around, Python. Students that learn to use Mathematica and Maple learn a language that they, in most likelyhood, will never use once they graduate.  However, Python is used in many, many industries, so their python knowledge from using Sage is directly applicable later on.&lt;br /&gt;&lt;br /&gt;Those are a few things that came to my mind right away.  After some time thinking about it, I probably will have other things that make Sage more effective for me than other commercial software.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;&lt;br /&gt;Jason"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-5947370708242325581?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/5947370708242325581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=5947370708242325581' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5947370708242325581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5947370708242325581'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/10/why-i-like-sage.html' title='Why I like Sage'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-3727833846751380362</id><published>2008-07-24T04:40:00.000-07:00</published><updated>2008-07-24T05:31:48.237-07:00</updated><title type='text'>Austria, ISSAC, and Hidden Markov Models</title><content type='html'>Yesterday, I gave a &lt;a target="_new" href="http://wstein.org/talks/2008-issac/"&gt;controversial plenary lecture on Sage&lt;/a&gt; at &lt;a target="_new" href="http://www.risc.uni-linz.ac.at/about/conferences/issac2008/"&gt;the 2008 ISSAC symbolic computer algebra conference&lt;/a&gt;.   It was well received by some proportion of the large audience of about 170 people, and will hopefully influence that research community to be more supportive of open source.   In particular, I hope professors doing computer algebra research will allow their Ph.D. students to use open source software on research projects instead of forcing them to use Maple or Mathematica like most of them currently do at &lt;a href="http://www.risc.uni-linz.ac.at/"&gt;RISC&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Many people asked me what I thought of the ISSAC conference -- it was very similar to the yearly ANTS (Algorithmic Number Theory Symposium) meetings we number theorists have, but without number theorists.  The meeting has a generally positive "vibe" and participants are enthusiastic about doing computation.  My only criticism compared to ANTS is that the publication process for the proceedings isn't nearly as professional as what ANTS does -- the ISSAC publisher's website was in my opinion hell to use, working with the publisher to get my abstract in shape was no fun, and the final paper proceedings look like they were done at Kinko's, whereas ANTS proceedings are part of Springer-Verlag's lecture notes in computer science series, hence look very professional *and* are available online.&lt;br /&gt;&lt;br /&gt;I also started looking at getting Hidden Markov Model functionality into Sage, since HMM's are very relevant to certain areas of machine learning, language processing, statistics, financial time series, etc., and Sage doesn't do much in that direction yet.  I was prepared to have to write something from scratch myself in Cython, but quickly found &lt;a target="_new" href="http://ghmm.org/"&gt;GHMM.org&lt;/a&gt;, which is GPLv2+, actively used and developed, written in C with  a Python interface, and with some work could possibly work very well for Sage.  I would certainly rather spend a solid week writing high-quality documentation and tests (and reporting bugs) than months learning, implementing, and optimizing algorithms followed by a solid week writing high-quality documentation and tests, followed by months building a community of developers to maintain said code.    The GHMM program linked to above only has an svn distribution and depends on xml, and it depends on swig.  I've created &lt;a href="http://sage.math.washington.edu/home/was/patches/ghmm-20080724.spkg"&gt;an spkg&lt;/a&gt; that one can build into sage and which doesn't depend on libxml; it does assume you have swig installed, and takes about 30 seconds to install from source.  It's installed into the system-wide sage on sage.math.washington.edu:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;was@sage:~/patches$ sage&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;| SAGE Version 3.0.5, Release Date: 2008-07-11                       |&lt;br /&gt;| Type notebook() for the GUI, and license() for information.        |&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;sage: import ghmm&lt;br /&gt;sage: ghmm.[tab key]&lt;br /&gt;ghmm.Alphabet                          ghmm.AminoAcids                        &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In a few hours Michael Abshoff and I are heading to Vienna to meet with Harald Schilly (who I've never met), who is the new &lt;a href="http://sagemath.org"&gt;sagemath.org&lt;/a&gt; webmaster.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-3727833846751380362?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/3727833846751380362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=3727833846751380362' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/3727833846751380362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/3727833846751380362'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/07/austria-issac-and-hidden-markov-models.html' title='Austria, ISSAC, and Hidden Markov Models'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-1075587775444454562</id><published>2008-07-20T03:17:00.000-07:00</published><updated>2008-07-20T03:50:52.785-07:00</updated><title type='text'>ISSAC</title><content type='html'>I arrived in Austria last night totally exhausted after spending some time in Amsterdam with Michael Abshoff, Hendrik Lenstra (who was my Ph.D. thesis adviser), Waldek Habisch (the FriCAS guy), and others.&lt;br /&gt;&lt;br /&gt;All the students working on funded projects with me this summer have setup blogs, and I'm encouraging them to blog very frequently about their work on Sage.  I will start doing the same.  Here are links to their blogs:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; &lt;a href="http://mabshoff.blogspot.com/search/label/sage"&gt;Michael Abshoff&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://elliottbrossard.blogspot.com/"&gt;Elliot Brossard&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://blog.gfurnish.net/"&gt;Gary Furnish&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://blog.phasing.org/"&gt;Mike Hansen&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://eakirkman.blogspot.com/"&gt;Emily Kirkman&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://blog.rlmiller.org/%20"&gt;Robert Miller&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://brettscode.blogspot.com/"&gt;Brett Nakashima&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://yiqiang.org/blog"&gt;Yi Qiang&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://cswiercz.blogspot.com/"&gt;Chris Swierczewski&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://itolkov.blogspot.com/"&gt;Igor Tolkov&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The last thing I did on Sage was spent nearly a week working on making a release that has fixes for numerous subtle build (and other) bugs on a very wide range of Linux distributions and hardware, e.g., Itanium2's and 64-bit Pentium 4's.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-1075587775444454562?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/1075587775444454562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=1075587775444454562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/1075587775444454562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/1075587775444454562'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/07/issac.html' title='ISSAC'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-4260792758999929627</id><published>2008-06-20T11:17:00.000-07:00</published><updated>2008-06-20T11:23:49.188-07:00</updated><title type='text'></title><content type='html'>Ondrej, Bernard, and Tim have been sort of &lt;a target="_new" href="http://groups.google.com/group/sage-devel/browse_thread/thread/7c808e84427004"&gt;arguing in response to Rob Dodier's nice post...&lt;/a&gt;  The discussion is missing some shades of gray.  Here's what we actually do in Sage:&lt;br /&gt;&lt;br /&gt;1. Identify needed functionality (e.g., compute characteristic polynomials of matrices, or "symbolic calculus").&lt;br /&gt;&lt;br /&gt;2. Find the existing best open source free option that implements 1, if there is any (e.g., say the pari C library in the above example, or "maxima" + a very sophisticated Python interface).&lt;br /&gt;&lt;br /&gt;3. Fully integrate 2 into Sage. (Bobby Moretti and I did this for Calculus, in the above example.)&lt;br /&gt;&lt;br /&gt;4. Somebody comes along and points out that 2 is not optimal and that they can do better.  E.g., they have a new algorithm for computing characteristic polynomials, or think they can implement a drop in replacement for symbolic calculus that is in fact much better.&lt;br /&gt;&lt;br /&gt;5. Somebody tries very hard to implement 4.  Sometimes they succeed, and we *switch* over to it, and sometimes they fail, and the code never goes into Sage.   Both happen and that is fine by me.&lt;br /&gt;&lt;br /&gt;This is what is happening with symbolics.  In 2005 we identified Maxima as the best open source system given our constraints. Bobby Moretti and I spent about 8 months fully integrating Maxima in as the core of our symbolic calculus functionality in Sage. Bill Furnish "popped up" and claimed he could do something much better, and has been working on this for the last 5 months. If (or when) his code turns out to be clearly better than what is currently built on top of Maxima in Sage, then it will go into Sage.  If not, it won't.&lt;br /&gt;&lt;br /&gt;The *only* reason I can see for not going from 4 to 5 in the above example is that I, or Bobby Moretti, and Maxima authors, or whatever have big egos and can't stand to see their hard work and code get thrown away.    Well I swallow my frickin' pride and just deal with it, and have thrown away massive amounts of code I write. I think that's really the core issue in this whole thread -- some people are really disturbed by code get thrown away...  Well deal with it.  It's much more important to make decisions that are best for the overall quality of a project and "the community goals" than to stroke your ego by keeping your own code alive forever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-4260792758999929627?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/4260792758999929627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=4260792758999929627' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/4260792758999929627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/4260792758999929627'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/06/ondrej-bernard-and-tim-have-been-sort.html' title=''/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-1976941334793914383</id><published>2008-05-29T11:52:00.000-07:00</published><updated>2008-06-20T11:25:00.226-07:00</updated><title type='text'>GMP forked; Torbjorn Granlund: "blatant falsehoods and sinister insinuations"</title><content type='html'>Torbjorn Granlund:&lt;br /&gt;&gt; The other publicly stated reasons are a mixture of&lt;br /&gt;&gt; blatant falsehoods and sinister insinuations.&lt;br /&gt;&gt; This fork exists for some very different reasons than those publicy&lt;br /&gt;&gt; stated.&lt;br /&gt;&lt;br /&gt;I know why the fork exists, so I'll state publicly precisely&lt;br /&gt;why the fork exists.  The issues below are not&lt;br /&gt;blatant falsehood or sinister insinuations.&lt;br /&gt;&lt;br /&gt;1. FACT: (L)GPLv3 cannot be used by some companies.  See below where&lt;br /&gt;I discuss this issue at length.&lt;br /&gt;&lt;br /&gt;2. FACT: The GMP project is not developer friendly. This is easy to&lt;br /&gt;see by reading the GMP mailing lists.&lt;br /&gt;&lt;br /&gt;3. FACT: The GMP project does not have a regular and&lt;br /&gt;predictable release cycle. How many times has the GMP 5.0 release&lt;br /&gt;been moved back -- it used to be "sometime in 2007", but now the&lt;br /&gt;GMP site says "5.0 is planned to come out in a couple of years."&lt;br /&gt;&lt;br /&gt;4. FACT: The working code repository of GMP is closed.  There is&lt;br /&gt;no public svn, etc. repository so that anybody can look at the latest&lt;br /&gt;version of the GMP code. See 2.&lt;br /&gt;&lt;br /&gt;5. FACT: Some extremely capable developers do not want to contribute to&lt;br /&gt;an LGPL'd project, because they don't want their voluntary contributions&lt;br /&gt;to be used by Maple, Mathematica and Magma to make money.&lt;br /&gt;&lt;br /&gt;6. FACT: The GMP project is unfriendly toward natively supporting&lt;br /&gt;Microsoft Windows using MSVC.  Just see any email you have sent&lt;br /&gt;to Brian Gladdman.&lt;br /&gt;&lt;br /&gt;7. FACT: The GMP project has been unfriendly toward supporting OS X.&lt;br /&gt;Just search the gmp list archives for OS X.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Torbjorn Granlund:&lt;br /&gt;&gt; I think the forkers over at SAGE use the purported v3 incompatibility&lt;br /&gt;&gt; issues as an excuse for forking GMP.&lt;br /&gt;&lt;br /&gt;I have been approached by numerous people (from industry,&lt;br /&gt;government, etc.) over the last three years about forking GMP.&lt;br /&gt;GPLv3 was one of numerous factors that really pushed things&lt;br /&gt;over the edge, though a fork would have happened anyways.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Torbjorn Granlund wrote:&lt;br /&gt;&gt; Seriously, please don't use this sort of rhetoric.  At least not&lt;br /&gt;&gt; before you've explained the actual problem.  I suspect the SAGE team's&lt;br /&gt;&gt; problem is mere stubbornness, in particular since they have not been&lt;br /&gt;&gt; able to produce one single reason for their problems with v3.  But I&lt;br /&gt;&gt; am all ears, should somebody spell it out.&lt;br /&gt;&lt;br /&gt;It is no secret that the Sage project receives some funding from&lt;br /&gt;Microsoft Research to produce free open source&lt;br /&gt;mathematical software for use by their researchers.  See&lt;br /&gt;          http://sagemath.org/ack.html&lt;br /&gt;for a list of organizations that fund Sage development.&lt;br /&gt;A company-wide requirement at Microsoft is that they do not run any&lt;br /&gt;GPLv3 code, not even binaries.  This is not surprising in light&lt;br /&gt;of numerous quotes by Stallman about how GPLv3 was designed&lt;br /&gt;partly to attack Microsoft.  For example:&lt;br /&gt;&lt;br /&gt; Stallman: "The point of the GPLv3 conditions that apply to the&lt;br /&gt; Novell/Microsoft deal is to give the rest of the community a defense&lt;br /&gt; against Microsoft's patent threats. If these conditions do their job,&lt;br /&gt; the result will be that Microsoft never goes beyond threats, and the&lt;br /&gt; community is safe."&lt;br /&gt; http://www.technewsworld.com/story/must-read/59780.html?welcome=1212081285&lt;br /&gt;&lt;br /&gt;This is one straightforward reason why GPLv3+ only code&lt;br /&gt;is a problem for the Sage project.    It has nothing to do with&lt;br /&gt;ideological stubborness by Sage developers (instead it is&lt;br /&gt;ideological stubborness by Stallman).&lt;br /&gt;&lt;br /&gt;If Microsoft  maintains this policy, then they will&lt;br /&gt;also not run new versions of Mathematica, Maple,&lt;br /&gt;Magma, that depend on any LGPLv3+ code.&lt;br /&gt;So the problem Sage has will also be a problem for all&lt;br /&gt;those projects.  And I guarantee you that people at Microsoft&lt;br /&gt;know about this issue.&lt;br /&gt;&lt;br /&gt;You probably don't like Microsoft, so I doubt we will find any sympathy&lt;br /&gt;from you as a result of the above.  But rest assured&lt;br /&gt;that the above issues with GPLv3 are NOT motivated by "mere&lt;br /&gt;stubborness" by the *Sage team*.  So you are wrong about that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-1976941334793914383?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/1976941334793914383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=1976941334793914383' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/1976941334793914383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/1976941334793914383'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/05/gmp-forked-torbjorn-granlund-blatant.html' title='GMP forked; Torbjorn Granlund: &quot;blatant falsehoods and sinister insinuations&quot;'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-1830846139484591034</id><published>2008-05-01T21:38:00.000-07:00</published><updated>2008-05-02T09:19:59.478-07:00</updated><title type='text'>Can There be a Viable Free Open Source Alternative to Magma, Maple, Mathematica, and Matlab?</title><content type='html'>&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;For over a decade I have primarily done research in number theory that often involves computation, mainly using Magma.  In 2004 I realized that it was stupid for me to continue building my work on Magma because Magma is proprietary, the development model is closed, Magma is expensive which is bad for students, and the language itself lacked many features (e.g., user defined classes) that I had requested repeatedly for over 5 years.  Thus to continue to use only Magma unacceptably limited my potential in both research and education.&lt;br /&gt;&lt;br /&gt;Having used Magma for many years, I simply could not switch to an existing open source system.  The only serious free open source software for number theory is PARI, whose capabilities are far behind that of Magma in numerous critical areas of interest to me, including exact linear algebra, commutative algebra, and algebraic curves.  And no other free system--GAP, Singular, Axiom, Maxima, Macaulay 2, etc.--even comes close in all these areas.  In fact, after a decade of patiently waiting, I doubt they ever will.&lt;br /&gt;&lt;br /&gt;Magma is the result of several decades of hard work by extremely talented fulltime mathematicians and programmers such as John Cannon, Allan Steel and Claus Fieker.  I've worked with them and they are simply amazing.  The situation seemed hopeless.  If I had only never used Magma and tasted of the forbidden fruit...&lt;br /&gt;&lt;br /&gt;In 2004, sure that there was no possible way to solve this problem, and driven by nothing but pure blind compulsion, I started the Sage project as my little free open source alternative to Magma, and spent an insane amount of time working on it even though I was utterly convinced that there was no hope of Sage ever succeeding.  The first version of Sage consisted of the Python interpreter and a few scripts for doing number theory.&lt;br /&gt;&lt;br /&gt;After a year, some of my first feedback from the computer algebra research community came from Richard Fateman on December 6, 2005 when he posted his opinion of the Sage project to sci.math.symbolic:  ``By avoiding applications (say, to engineering design, finance, education, scientific visualization, etc etc) the activity is essentially doomed. Why?  Government funding for people or projects will be a small percentage of the funding for pure mathematics.  That's not much. And the future is pretty grim.''&lt;br /&gt;&lt;br /&gt;Honestly, I believed he was right, but I just couldn't stop myself from working on Sage.  It is now nearly three years later and the Sage project currently has around 100 active developers and 10,000 users. In November 2007, Sage won first place in the scientific category of the Trophees du Libre, which is a major international free software competition.  Sage is funded by the US National Science Foundation, the US Department of Defense, the University of Washington, Microsoft Research, Google and private donations.  Sage has new releases every two weeks, and typically 30--40 people contribute to each release.  All new code contributions to Sage are peer reviewed, and every new function must be documented with tests that illustrate its usage.  The docs have over 50,000 lines of input examples.&lt;br /&gt;&lt;br /&gt;So what is Sage and what makes it unique?  Sage is:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; a &lt;b&gt;huge distribution&lt;/b&gt; of free open source mathematical software that is surprisingly easy to build from source,&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a &lt;b&gt;set of interfaces&lt;/b&gt; to most other mathematical software systems, and&lt;/li&gt;&lt;br /&gt;&lt;li&gt; a &lt;b&gt;new Python library&lt;/b&gt; that fills in huge gaps in other open source math software included in Sage, unifies everything offering a  smooth user experience, and provides a modern web-based graphical notebook interface with math typesetting and integrated 2D and 3D graphics.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Sage is the first large general purpose mathematics software system that uses a mainstream programing language (Python) as the end user language.  Python--easily one of the world's top 10 programming languages--is a powerful and beautiful modern interpreted programming language with an organized and professional developer base and millions of users.  Sage also makes extensive use of a Python-to-C compiler called Cython.  Thus Sage has a tremendous advantage over every other general purpose computer algebra system, since Python has thousands of third party libraries, sophisticated support for object serialization, databases, distributed programming, and a major following in scientific computing.&lt;br /&gt;&lt;br /&gt;Instead of reinventing the wheel, Sage combines many of the best existing open source systems that have been developed over the last 40 years (about &lt;span style="font-style: italic;"&gt;million lines of code&lt;/span&gt;) with about &lt;span style="font-style: italic;"&gt;250,000&lt;/span&gt; &lt;span style="font-style: italic;"&gt;  lines of new code&lt;/span&gt;.  Every single copy of Sage includes all of the following software (and much much more):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Algebra and calculus: Maxima, SymPy&lt;/li&gt;&lt;li&gt;High precision arithmetic: GMP, MPFR, MPFI, quaddouble, Givaro&lt;/li&gt;&lt;li&gt;Commutative algebra: Singular&lt;/li&gt;&lt;li&gt;Number theory: PARI, NTL, mwrank, ECM, FLINTQS, GMP-ECM&lt;/li&gt;&lt;li&gt;Exact linear algebra: LinBox, IML&lt;/li&gt;&lt;li&gt;Group theory:  GAP&lt;/li&gt;&lt;li&gt;Scientific computation: GSL, SciPy, NumPy, cvxopt&lt;/li&gt;&lt;li&gt;Statistical computation: R&lt;/li&gt;&lt;li&gt;Graphics (2d and 3d): Matplotlib, Tachyon3d, Jmol&lt;/li&gt;&lt;/ul&gt;Sage is thus the first system to combine together such a wide range of libraries and programs in a meaningful way.  Instead this huge range of programs is tied together using Python's excellent extensibility via C libraries and using pseudo-tty's.  Sage has a highly developed unified collection of pseudo-tty based interfaces that make it is possible to make extensive use of Maple, Mathematica, Magma, Matlab, GAP, Maxima, Singular, PARI, and many other systems from anywhere within a single Sage program.&lt;br /&gt;&lt;br /&gt;Curious? If you &lt;span style="font-style: italic;"&gt;want&lt;/span&gt; a viable open source alternative to Magma, Maple, Mathematica and Matlab, drop everything, try out Sage now and become a Sage developer.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sagemath.org/"&gt;http://www.sagemath.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-1830846139484591034?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/1830846139484591034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=1830846139484591034' title='34 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/1830846139484591034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/1830846139484591034'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/05/can-there-be-viable-free-open-source.html' title='Can There be a Viable Free Open Source Alternative to Magma, Maple, Mathematica, and Matlab?'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>34</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-160666483718553248</id><published>2008-04-22T09:19:00.000-07:00</published><updated>2008-04-22T10:59:06.822-07:00</updated><title type='text'>Sage-3.0 and Beyond</title><content type='html'>Finally, after much hard work, Sage-3.0 has been released!  This release has tons of bug fixes plus several new features such as interact mode in the notebook, the R interface, full GCC-4.3 support, much better automated testing, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_urfwuonbW3E/SA4V5-8zMjI/AAAAAAAAADY/qDPh1D8YqCE/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_urfwuonbW3E/SA4V5-8zMjI/AAAAAAAAADY/qDPh1D8YqCE/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5192111506299499058" border="0" /&gt;&lt;/a&gt;Most importantly, Sage-3.0 finally has code for computing with modular abelian varieties.  You almost certainly have no clue what those are, but suffice to say that I started the Sage project to compute with them, so having this code in Sage is a major milestone for me and the project.&lt;br /&gt;&lt;br /&gt;We dramatically increased our automated testing and example suite so that 51.5 % of functions have autotested examples.  There are now nearly 60,000 lines of input examples.   In February our testing was in the 30% range.  This was a huge amount of work by many many Sage developers, and it has the practical impact that when you type foo? it is nearly twice as likely that you'll see a helpful example.&lt;br /&gt;&lt;br /&gt;There is now a new interface to R that uses a pseudotty; this is a completely different &lt;i&gt;alternative&lt;/i&gt; to &lt;a href="http://rpy.sourceforge.net/"&gt;rpy&lt;/a&gt;, which makes it possible for the web-based Sage notebook to work as an R GUI, and also makes it so any R command can be used from Sage 100% exactly as in R.  It is still clunky and has numerous issues, but it is fairly usable, documented, and has a test suite.   Here it is drawing a plot in the notebook:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_urfwuonbW3E/SA4TSe8zMiI/AAAAAAAAADQ/OmBMvqTTwGE/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_urfwuonbW3E/SA4TSe8zMiI/AAAAAAAAADQ/OmBMvqTTwGE/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5192108628671410722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So what is the next step for Sage?  We have &lt;span style="font-weight: bold;"&gt;finished&lt;/span&gt; rapidly expanding by incorporating major new components.   Now we will work on making Sage more accessible and writing new code to make Sage highly competitive with all other options.   I see  The main goals for this coming year are as follows:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Port&lt;/span&gt; Sage and as many of its components as possible to &lt;span style="font-weight: bold;"&gt;Microsoft Windows&lt;/span&gt; (32 and 64-bit, MSVC) and to &lt;span style="font-weight: bold;"&gt;Sun's Solaris&lt;/span&gt;. For the Windows port the main challenge is writing a native implementation of pexpect for 32 and 64-bit MSVC windows, and porting several math software projects (e.g., R) that until now haven't had the resources to move beyond 32-bit crippled mingw/cygwin.  For Solaris, the main issues are simply fixing bugs and improving the quality of the Sage codebase.  Michael Abshoff is leading the charge.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Modular forms and L-functions&lt;/span&gt; -- greatly improve all linear algebra needed for modular forms computation; implement a much wider range of algorithms; run large computations and record results in a database. Mike Rubinstein and I will lead the charge.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Symbolic calculus&lt;/span&gt; -- a native optimized and much more general implementation of symbolic Calculus in Sage.  Gary Furnish is leading the charge.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Combinatorics&lt;/span&gt; -- migrate the mupad-combinat group to Sage; implementation of a lot more native group theory in Sage. Mike Hansen is leading the charge.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Statistics&lt;/span&gt; -- integrate R and scipy.stats much more fully into Sage with the goal of making Sage the best available environment for statistical computation and education. Harald Schilly is leading the charge.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Sage notebook&lt;/span&gt; -- separate the notebook from Sage (like I did with Cython); develop the notebook's interactive and visualization functionality much more, and make the notebook easier to use as a graphical frontend for all math software. I am leading the charge until I can find somebody else to do so.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Magma&lt;/span&gt; -- greatly improve the ability of Sage and Magma to work together (many more automatic conversions between Sage and Magma datastructures, etc.); Magma is by far the best in the world and numerous calculations, and much important code  been written in Magma, so it's critical that Sage be fully able leverage all that functionality.  Also, this will make comparing the capabilities of the two systems much easier.   I'm also leading the charge here.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;All of the above goals have received new financial support from industry or the NSF. For example,  Microsoft is funding the Windows port, Google is funding many of the above projects, and the NSF is strongly funding a big modular forms and &lt;span style="font-style: italic;"&gt;L&lt;/span&gt;-functions database project.   The sage-devel mailing list has 434 members and over 1000 posts/month, and each Sage release has about 30 contributors.  The size of the serious core Sage developer community might be nearing that of Mathematica's core developer group.    Now is the moment in time when we have a chance to... &lt;span style="font-style: italic;"&gt;create a viable free open source alternative to Magma, Maple, Mathematica, and Matlab.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-160666483718553248?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/160666483718553248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=160666483718553248' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/160666483718553248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/160666483718553248'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/04/sage-30-and-beyond.html' title='Sage-3.0 and Beyond'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_urfwuonbW3E/SA4V5-8zMjI/AAAAAAAAADY/qDPh1D8YqCE/s72-c/Picture+3.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-5575217992491556282</id><published>2008-04-08T05:05:00.000-07:00</published><updated>2008-04-08T05:52:06.997-07:00</updated><title type='text'>Google Funds Sage!!</title><content type='html'>Today &lt;a href="http://sites.google.com/a/dibona.com/dibona-wiki/Home/Biographies-and-Photos"&gt;Chris DiBona&lt;/a&gt; (open source programs manager at Google) fully funded &lt;a href="http://wstein.org/grants/google08/google.pdf"&gt;a proposal&lt;/a&gt; [pdf] that some students and I put together to carry out four critically important Sage development projects this summer (2008): &lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;    &lt;li&gt; &lt;b&gt;Mike Hansen (UCSD):&lt;/b&gt; Implement &lt;i&gt;combinatorial species&lt;/i&gt; in Sage.   This will provide a backend to handle a wide range of new combinatorial objects with minimal eﬀort.&lt;br /&gt;    &lt;li&gt; &lt;b&gt;Gary Furnish (Utah):&lt;/b&gt; Implement new &lt;i&gt;optimized symbolic manipulation&lt;/i&gt; code in Cython.  This will greatly speed up symbolic computation in Sage, and reduce Sage's dependence on Maxima. &lt;br /&gt;    &lt;li&gt; &lt;b&gt;Robert Miller (UW):&lt;/b&gt; Implement fast code for &lt;i&gt;permutation groups&lt;/i&gt; and &lt;i&gt;backtracking algorithms&lt;/i&gt;.  This is needed for general applications to graph and code automorphism groups computations, and can be used to exhaustively generate isomorphism class representatives of a wide class of mathematical objects. &lt;br /&gt;    &lt;li&gt; &lt;b&gt;Yi Qiang (UW):&lt;/b&gt; Further document, improve the usability of, and provide numerous real world examples of &lt;i&gt;distributed computing with Sage&lt;/i&gt;.  This will greatly help in applications of Sage to research that involve parallel computation. &lt;br /&gt;  &lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;This funding is not part of the &lt;a href="http://code.google.com/soc/2008/"&gt;Google Summer of Code&lt;/a&gt; (the projects above do not fit with any of the mentoring organizations), but is instead I hope part of more longterm support by Google for the Sage project and open source mathematical software that provides people with a free alternative to Maple, Mathematica, Matlab, and Magma.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-5575217992491556282?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/5575217992491556282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=5575217992491556282' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5575217992491556282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5575217992491556282'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/04/google-funds-sage.html' title='Google Funds Sage!!'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-4465949643915051216</id><published>2008-02-29T12:24:00.000-08:00</published><updated>2008-02-29T12:32:34.047-08:00</updated><title type='text'>This is what I would like in Sage 3.0</title><content type='html'>&lt;ol&gt;&lt;br /&gt;&lt;li&gt; DOCUMENTATION:&lt;br /&gt;&lt;pre&gt;cd SAGE_ROOT/devel/sage/sage/; sage -coverage .&lt;/pre&gt;&lt;br /&gt;should output&lt;br /&gt;&lt;pre&gt;Overall weighted coverage score:  x%  [[where x &gt;= 50]]&lt;/pre&gt;&lt;br /&gt;Moreover there should be at least one hand written paragraph at the  beginning of each file; "sage -coverage" can be adapted to flag whether or not this is there.  This will improve the overall quality and maintainability of Sage, and make it easier for users to find examples.&lt;br /&gt;&lt;br /&gt;&lt;li&gt; MANIPULATE:  Usable "manipulate" functionality standard in Sage.  This has very wide applicability.&lt;br /&gt;&lt;br /&gt;&lt;li&gt; R:   A pexpect interface to R (so, e..g, the notebook can act as a full R notebook using 100% native R syntax).  This will matter to a lot of Sage users, and make using R from Sage much easier in some cases (just cut and paste anything from any R examples and it will work).  It will also provide something in Sage that one doesn't get with Python + rpy + R.&lt;br /&gt;&lt;br /&gt;&lt;li&gt; TIMING/BENCHMARKING: Fully integrate in Sage wjp's code that times all doctests, and start publishing the results on all Sage-supported platforms with  every Sage  release.  This will give people a much better sense about which hardware is best for running  Sage, and avoid major performance regressions.  Likewise, get the Malb/wjp/my generic benchmarking code into Sage (this provides a doctest like plain text format for creating benchmarks, and is already mostly written).&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;I've only proposed goals for 3.0 that are wide reaching and will be noticed in some way by most users instead of fairly technical optimizations in a specific area (such as FLINT, Libsingular, or optimized integer allocation).  I think changing implementations in specific technical areas to speed things up is more appropriate in week-to-week releases, and is also something we should be very careful about until we have good speed regression testing in place (we should have done step 4&lt;br /&gt;above a long long ago).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-4465949643915051216?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/4465949643915051216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=4465949643915051216' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/4465949643915051216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/4465949643915051216'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/02/this-is-what-i-would-like-in-sage-30.html' title='This is what I would like in Sage 3.0'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-1970390701671308386</id><published>2008-02-21T16:29:00.000-08:00</published><updated>2008-02-21T16:33:18.693-08:00</updated><title type='text'>Mathematics Research, Education, and Sage</title><content type='html'>I think there is a brewing tension between education and research amongst developers involved with the Sage project.  More on that in a moment.&lt;br /&gt;&lt;br /&gt;I cannot speak for all the core Sage developers, but I think I have some idea what some of them think and care about.   My impression is that many of them are involved in Sage because they want to create software that they can use for attacking cutting edge research problems in their research area.   This is true of me: I started Sage -- original called "Software for Arithmetic&lt;br /&gt;Geometry Experimentation" -- to have a very powerful open software environment for computing with modular forms, abelian varieties,&lt;br /&gt;elliptic curves, and L-functions.&lt;br /&gt;&lt;br /&gt;I am quite happy that Sage has become much more general, addressing a huge range of mathematics, since this expands the range of good developers and also increasing the range of tools math researchers can bring to bare on attacking a problem results in better research.   For example, the solutions&lt;br /&gt;to many problems in number theory involve an incredible range of techniques in different areas of mathematics. I'm fairly certain that many of the people who have put in insane hours during the last few years making Sage what is it now (e.g., Mike Hansen, David Roed, Robert Bradshaw, David Harvey, Robert Miller, Emily Kirkman, Martin Albrecht, Michael Abshoff, etc.) have a similar perspective.&lt;br /&gt;&lt;br /&gt;On the other hand, I teach high school students for a while every summer (in SIMUW), as do other people like David Roe, and of course I teach undergraduate classes...  This is why I put so much effort into co-authoring things like the Sage notebook, which exist mainly to make the functionality of Sage more accessible to a wider range of people.&lt;br /&gt;&lt;br /&gt;So, I think there is a brewing tension between education and research amongst developers involved with the Sage project (and in my case in my own mind).  Some observations:&lt;br /&gt;&lt;br /&gt;1. The research part of the Sage project is thriving and getting sufficient funding independent of any connection with educational applications of Sage. It very very healthy right now.&lt;br /&gt;&lt;br /&gt;2. There is a lot of potential benefit to education in having a tool like Sage, since Mathematica is quite expensive, closed, etc. It's good for humanity&lt;br /&gt;for Sage to be genuinely useful in an educational context.&lt;br /&gt;&lt;br /&gt;3. People working on Sage for research have very limited time, and it can be frustrating being regularly asked to do things by the education community that not only have nothing to do with research, but are even sometimes at odds with it.&lt;br /&gt;&lt;br /&gt;4. It is vitally important for the Sage project to be both well organized and have a clear sense of direction, purpose and goals.&lt;br /&gt;&lt;br /&gt;It might be a good idea if the people who are really interested in Sage being a great tool for *education*, would consider doing the&lt;br /&gt;following:&lt;br /&gt;&lt;br /&gt; (a) setting up a mailing list called sage-edu for development discussions related to Sage in education.  I realize that we just got rid of sage-newbie, but that was for a different reason -- because people were posting sage-support questions there and not getting responses.&lt;br /&gt;&lt;br /&gt; (b) Gather together the best education-related tools in some sort&lt;br /&gt;of organized package.  This could start with Geogebra.  I don't know.   The key&lt;br /&gt;thing is that there is no expectation at all that the people into Sage mainly for research do much of anything related to this project.   I hope one outcome of this project would be an spkg that when installed would make available lots of cool extra stuff, and of course I would be very supportive about server space, posting of spkg's etc.  And when this gets some momentum and&lt;br /&gt;quality behind it this spkg would be included standard in Sage.&lt;br /&gt;&lt;br /&gt;Basically I'm suggesting that everyone interested in making Sage the ultimate educational tool get organized, figure out who really wants to put&lt;br /&gt;in an insane amount of effort on this sort of thing, and put together a bunch of cool tools.   Stop thinking you have to convince a bunch of us research-focused people to do the work or that your ideas are good -- you&lt;br /&gt;don't -- your ideas are good; it's just that if we put a lot of time into them we won't have time for our research.&lt;br /&gt;&lt;br /&gt;Make an spkg that will be trivial to install into Sage and extend its functionality.   There is definitely sufficient interest in something like this&lt;br /&gt;for education, there is great potential for funding, and potential for having a major positive impact on society.  Thus I think people will emerge who will&lt;br /&gt;want to take up this challenge.  I just thing it's better if it can happen for a while unconstrained by the rules or prejudices of the "Sage Research" side&lt;br /&gt;of this project.&lt;br /&gt;&lt;br /&gt;In summary, please put a huge amount of effort into getting organized and putting together something polished and great, so I can later effortless assimilate it :-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-1970390701671308386?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/1970390701671308386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=1970390701671308386' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/1970390701671308386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/1970390701671308386'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/02/mathematics-research-education-and-sage.html' title='Mathematics Research, Education, and Sage'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-5253977097505109842</id><published>2008-02-09T13:54:00.002-08:00</published><updated>2008-02-09T14:26:49.064-08:00</updated><title type='text'>Benchmarketing: Modular Hermite Normal Form</title><content type='html'>Two days ago there was no &lt;i&gt;fast&lt;/i&gt; freely available open source implementation of computation of the Hermite Normal Form of a (square nonsingular) matrix.  In fact the fastest implementations I know of -- in Gap, Pari, and NTL, are all &lt;span style="font-style: italic;"&gt;massively slower&lt;/span&gt; (millions of times) than Magma.  See &lt;a href="http://magma.maths.usyd.edu.au/users/allan/mat/hermite.html"&gt;Allan Steel's page on this algorithm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I just spent the last few days with help from Clement Pernet and Burcin Erocal implementing a fast modular/&lt;i&gt;p&lt;/i&gt;-adic Hermite Normal Form algorithm.  As soon as the coefficients of the input matrix get at all large our implementation is now the &lt;i&gt;fastest in the world&lt;/i&gt; available anywhere (e.g., faster than Magma, etc.).   This is incredibly important for my research work on modular forms.&lt;br /&gt;&lt;br /&gt;The following plot compares &lt;span style="color: rgb(51, 51, 255);"&gt;Sage (blue)&lt;/span&gt; to &lt;span style="color: rgb(204, 0, 0);"&gt;Magma (red)&lt;/span&gt; for computing the Hermite Normal Form of an &lt;i&gt;nxn&lt;/i&gt; matrix with coefficients that have &lt;span style="font-style: italic;"&gt;b&lt;/span&gt; bits.  The &lt;i&gt;x&lt;/i&gt;-axis is &lt;i&gt;n&lt;/i&gt;, the &lt;i&gt;y&lt;/i&gt;-axis is &lt;span style="font-style: italic;"&gt;b&lt;/span&gt;, and the blue dots show where Sage is much better, whereas the red dots are where Magma is much better.  The timings are on a 2.6Ghz core 2 duo laptop running OS X, and both Sage and Magma were built as 32-bit native executables:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_urfwuonbW3E/R64iKIEBZdI/AAAAAAAAACM/xzWE-LsbSE0/s1600-h/magmasage.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_urfwuonbW3E/R64iKIEBZdI/AAAAAAAAACM/xzWE-LsbSE0/s320/magmasage.png" alt="" id="BLOGGER_PHOTO_ID_5165103379998926290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(Note: When doing timings under Linux, Magma doing slightly better than it does above, though Sage is still much better as soon as the coefficients are at all large.)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This plot shows the timings of &lt;span style="color: rgb(255, 0, 0);"&gt;Magma (red)&lt;/span&gt; versus &lt;span style="color: rgb(0, 0, 153);"&gt;Sage (blue)&lt;/span&gt; for computing the Hermite Forms of matrices with entries between -2&lt;sup&gt;12&lt;/sup&gt; and 2&lt;sup&gt;12&lt;/sup&gt;.   Sage is much faster than Magma, since the blue line is lower (=faster).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_urfwuonbW3E/R64jSYEBZeI/AAAAAAAAACU/c_ImHwCjBKk/s1600-h/magmasage-12bit.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_urfwuonbW3E/R64jSYEBZeI/AAAAAAAAACU/c_ImHwCjBKk/s320/magmasage-12bit.png" alt="" id="BLOGGER_PHOTO_ID_5165104621244474850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;For even bigger coefficients Sage has a much bigger advantage.  E.g., for a 200 x 200 256-bit matrix, Magma takes 232 seconds whereas Sage takes only 55 seconds.&lt;br /&gt;&lt;br /&gt;In order to make this happen we read some old papers, read notes from a talk that Allan Steel (who implemented HNF in Magma) gave, and had to think quite hard to come up with three tricks (2 of which are probably similar to tricks alluded to in Steel's talk notes, but with no explanation about how they work), coded for 3 days at &lt;a href="http://wiki.sagemath.org/days7"&gt;Sage Days 7&lt;/a&gt;, discovered that we weren't right about some of our tricks, doing lots of fine tuning, and finally fixed all the problems and got everything to work.   We will be writing this up, and of course all the code is open source.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-weight: bold;"&gt;Acknowledgement: &lt;/span&gt;Many many thanks to Allan Steel for implementing an HNF in Magma that blows away everything else, which gave us a much better sense of what is possible in practice.   Thanks also to the authors of &lt;a href="http://www.cs.uwaterloo.ca/%7Ez4chen/iml.html"&gt;IML&lt;/a&gt; whose beautiful GPL'd implementation of balanced &lt;i&gt;p&lt;/i&gt;-adic is critical to our fast HNF implementation. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-5253977097505109842?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/5253977097505109842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=5253977097505109842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5253977097505109842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5253977097505109842'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/02/benchmarketing-modular-hermite-normal.html' title='Benchmarketing: Modular Hermite Normal Form'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_urfwuonbW3E/R64iKIEBZdI/AAAAAAAAACM/xzWE-LsbSE0/s72-c/magmasage.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-926208461975650833</id><published>2008-01-30T04:43:00.001-08:00</published><updated>2008-01-30T04:47:17.449-08:00</updated><title type='text'>Josh Kantor's Lorenz attractor example</title><content type='html'>Josh posted a nice example of plotting a Lorenz attractor in Sage:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Put this in a notebook cell (be careful about newlines):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Integer = int&lt;br /&gt;RealNumber = float&lt;br /&gt;&lt;br /&gt;def lorenz(t,y,params):&lt;br /&gt;    return [params[0]*(y[1]-y[0]),y[0]*(params[1]-y[2])- y[1],y[0]*y[1]-params[2]*y[2]]&lt;br /&gt;&lt;br /&gt;def lorenz_jac(t,y,params):&lt;br /&gt;    return [ [-params[0],params[0],0],[(params[1]-y[2]),-1,-y[0]],[y[1],y[0],-params[2]],[0,0,0]]&lt;br /&gt;&lt;br /&gt;T=ode_solver()&lt;br /&gt;T.algorithm="bsimp"&lt;br /&gt;T.function=lorenz&lt;br /&gt;T.jacobian=lorenz_jac&lt;br /&gt;T.ode_solve(y_0=[.5,.5,.5],t_span=[0,155],params=[10,40.5,3],num_points=10000)&lt;br /&gt;l=[T.solution[i][1] for i in range(len(T.solution))]&lt;br /&gt;&lt;br /&gt;line3d(l,thickness=0.3, viewer='tachyon', figsize=8)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and this is what you get (click to zoom):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_urfwuonbW3E/R6BxeTTt7UI/AAAAAAAAACE/b2grukGRMxM/s1600-h/lorenz.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_urfwuonbW3E/R6BxeTTt7UI/AAAAAAAAACE/b2grukGRMxM/s320/lorenz.png" alt="" id="BLOGGER_PHOTO_ID_5161249938359577922" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-926208461975650833?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/926208461975650833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=926208461975650833' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/926208461975650833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/926208461975650833'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/01/josh-kantors-lorenz-attractor-example.html' title='Josh Kantor&apos;s Lorenz attractor example'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_urfwuonbW3E/R6BxeTTt7UI/AAAAAAAAACE/b2grukGRMxM/s72-c/lorenz.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-6114676370655877054</id><published>2008-01-11T17:18:00.000-08:00</published><updated>2008-01-11T17:23:57.542-08:00</updated><title type='text'>I'm glad I chose Python for Sage -- some cool scientific computing Python projects</title><content type='html'>When brainstorming for talk ideas for a workshop, Fernando Perez came up with a bunch of random off-the-top of his head very high quality/impact scientific computing projects that involve Python.  Here they are (the following was written by Fernando Perez, the author of IPython):&lt;br /&gt;&lt;br /&gt;- I can obviously talk about ipython and related projects, but I can also give a math/technical talk off this type of work (the whole implementation is python, and uses quite a few tricks):&lt;br /&gt;&lt;br /&gt;&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://dx.doi.org/10.1016/j.acha.2007.08.001" target="_blank"&gt;http://dx.doi.org/10.1016/j&lt;wbr&gt;.acha.2007.08.001&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Brian Granger (from Tech-X &lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://txcorp.org/" target="_blank"&gt;http://txcorp.org&lt;/a&gt;) has a NASA grant to develop distributed arrays for Python, using IPython and numpy.  That would make for an excellent talk, I think (matlab,&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://interactivesupercomputing.com/" target="_blank"&gt; interactivesupercomputing.com&lt;/a&gt;, and all the 'big boys' are after distributed arrays).&lt;br /&gt;&lt;br /&gt;- Trilinos (&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://trilinos.sandia.gov/" target="_blank"&gt;http://trilinos.sandia.gov&lt;/a&gt;), a large set of parallel solvers developed at Sandia National Lab, has a great set of Python bindings (even usable interactively via ipython). &lt;br /&gt;&lt;br /&gt;- MPI4Py is an excellent set of MPI bindings for Python, and its author Lisandro Dalcin is also the developer of Petsc4py:&lt;br /&gt; * &lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://mpi4py.scipy.org/" target="_blank"&gt;http://mpi4py.scipy.org/&lt;/a&gt;&lt;br /&gt; * &lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://code.google.com/p/petsc4py/" target="_blank"&gt;http://code.google.com/p&lt;wbr&gt;/petsc4py/&lt;/a&gt;&lt;br /&gt;If Lisandro can't come, I can contact one of the Petsc guys who's a great python developer and see if he's coming or can make it, he's an excellent speaker (Matt Knepley from Argonne Nat. Lab &lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://www-unix.mcs.anl.gov/%7Eknepley/" target="_blank"&gt;http://www-unix.mcs.anl.gov/&lt;wbr&gt;~knepley/&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;- The Hubble space telescope people are all pyhton based, and have done enormous amounts of work on both their internal image processing pipeline and contrbuting to Matplotlib (they have currently a developer working full time on matplotlib).&lt;br /&gt;&lt;br /&gt;- The NetworkX (Sage uses this) guys from Los Alamos will probably be coming: &lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="https://networkx.lanl.gov/wiki" target="_blank"&gt;https://networkx.lanl.gov/wiki&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;- The Scripps institute has an extremely strong Python team doing molecular visualization and visual programming.  Their work is very impressive, and they're already in San Diego, so it's a no brainer to attend.  Their presentations are always of very high quality: &lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://mgltools.scripps.edu/" target="_blank"&gt;http://mgltools.scripps.edu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- JPL uses python extensively (they've contracted out work for matplotlib to be extended to suit their specific needs). &lt;br /&gt;&lt;br /&gt;- My new job at UC Berkeley is on neuroscience, and we could present the work that's being developed there for fMRI analysis (all Python based, fully open source, NIH funded).&lt;br /&gt;&lt;br /&gt;- Andrew Straw's work (&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.its.caltech.edu/%7Eastraw/" target="_blank"&gt;http://www.its.caltech.edu/&lt;wbr&gt;~astraw/&lt;/a&gt;) on real-time 3d tracking of fruit flies is very, very impressive.  All python based, hardware control, real-time parallel computing.&lt;br /&gt;&lt;br /&gt;- The CACR group at Caltech has the contract for DANSE (&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://wiki.cacr.caltech.edu/danse/index.php/Main_Page" target="_blank"&gt;http://wiki.cacr.caltech.edu&lt;wbr&gt;/danse/index.php/Main_Page&lt;/a&gt;), the Spallation Neutron Source's data analysis framework, all python. This is currently the largest experiment being funded in the USA.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-6114676370655877054?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/6114676370655877054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=6114676370655877054' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/6114676370655877054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/6114676370655877054'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/01/im-glad-i-chose-python-for-sage-some.html' title='I&apos;m glad I chose Python for Sage -- some cool scientific computing Python projects'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-5645453667272694185</id><published>2008-01-07T20:42:00.000-08:00</published><updated>2008-01-08T15:39:34.876-08:00</updated><title type='text'>AMS Meeting Day 2: The Competition</title><content type='html'>Today I violated the Mathematica license agreement in front of Eric Weisstein (a famous Mathematica developer), I talked with the developers of &lt;a href="http://www.wiris.com/"&gt;Wiris (rhymes with virus)&lt;/a&gt; which is a commercial competitor to the Sage notebook, discussed Mupad with a longtime Mupad developer, and gave away $1000 of tutorials, DVD's, and other goodies at the Sage AMS exhibit booth. &lt;br /&gt;&lt;br /&gt;There is a project called "Wiris", which I had never heard of until today.  So Tom Boothby and I had a very interesting talk with the people at the Wiris Booth (&lt;a href="http://www.wiris.com/" target="_blank"&gt;http://www.wiris.com/).&lt;/a&gt;   Wiris is a closed-source commercial math software company in Barcelona that makes a web-based interface to their own custom mathematical software (interestingly, one of their main developers took Calculus from Jordi Quer, who wrote a lot of modular-forms related code for Sage recently).    Their primary audience and market right now is European Government Agencies who use their software for high school and beginning college education.     Their software is much different than the Sage notebook, since it is written entirely in Java instead of being an AJAX javascript application.   They knew about Sage and asked if it used OpenMath or MathML, and I explained that it didn't use either, that it shouldn't and that &lt;span style="font-style: italic;"&gt;for our purposes&lt;/span&gt; (i.e., interfacing math software) those technologies do not solve the problems we have -- in fact, they are worse than useless.   They said that us not taking the OpenMath route was disappointing.  They ended the discussion by telling us that their web-based interface is much better than ours :-).    I guess they were trying to intimidate us.&lt;br /&gt;&lt;br /&gt;Eric Weisstein -- who told us that he is now an official Mathematica developer (doing graph theory among other things) in addition to his "Math World" came over to the Sage booth and asked a lot of pointed questions about Sage, mostly "how does this get funded?"  We ended up talking for about an hour.  There are numerous people at Mathematica who are well aware of Sage, and he claims he doesn't see Sage as a  threat to Mathematica as a company.    He said Mathematica has had a recent explosion in hiring as a result of greatly increased sales because of the new "Demonstrations" feature in Mathematica 6.    We also talked a lot about graph theory and how Sage has a complete implementation of graph isomorphism testing, etc., which &lt;span style="font-weight: bold;"&gt;greatly&lt;/span&gt; impressed him (thanks Robert Miller!).   Jason Grout asked about the Mathematica end use license agreement and Eric pleaded IANAL and I demonstrated using Mathematica via the Sage notebook -- all locally over localhost on a machine with a valid Mathematica license -- that this violates the Mathematica license.  He got annoyed when I did a Mathematica graph through the Sage notebook...  Later Eric talked about how he "hoped" Sage would continue to have momentum and not just die like other free projects.  He gave Maxima as an example of a dead project, and seemed quite shocked when I mentioned that they are very much alive and have regular releases, etc.    He then said that there is no such thing as free.&lt;br /&gt;&lt;br /&gt;I met somebody from MuPad who has worked on that closed source project for a decade.  They used to be a German national government funded project, then had an academic research branch until one year ago, and now are 100% commercial and private.    I asked about their vision for the next 5 years, and he said "MuPad will survive", and said they were mainly happy to be &lt;span style="font-style: italic;"&gt;stable&lt;/span&gt;.   They also mentioned wanting to do more numerical and applied functionality.&lt;br /&gt;&lt;br /&gt;I talked with a Unix guy who works on some Scientific Workplace.  There is only a Windows version, and he is working on doing an OS X/Linux port, which they will finish "in the future"!&lt;br /&gt;&lt;br /&gt;And that's just a little of what happened today...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-5645453667272694185?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/5645453667272694185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=5645453667272694185' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5645453667272694185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/5645453667272694185'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/01/ams-meeting-day-2-competition.html' title='AMS Meeting Day 2: The Competition'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6365588202025292315.post-4940617804835123489</id><published>2008-01-06T01:27:00.000-08:00</published><updated>2008-01-06T02:23:34.832-08:00</updated><title type='text'>AMS Meeting Part 1</title><content type='html'>I am completely exhausted right now, having put in a huge amount of time with little sleep during the last few days writing 3d graphics code for Sage (with Robert Bradshaw), making the Sage-2.9.2 release (with Michael Abshoff), printing fliers, tutorials, and preparing DVDs (with my brother) for the &lt;a href="http://www.ams.org/amsmtgs/2109_intro.html"&gt;massive joint AMS meeting&lt;/a&gt; where there will be a Sage exhibit booth.&lt;br /&gt;&lt;br /&gt;Our booth with have a &lt;a href="http://sage.math.washington.edu/home/was/tmp/ams/sage_banner.png"&gt;huge  banner&lt;/a&gt; that says "Creating a viable free open source alternative to Magma, Maple, Mathematica, and Matlab."&lt;br /&gt;An Austrian named Harald Schilly did most of the work creating this poster.&lt;br /&gt;&lt;br /&gt;I have no clue what to expect during the next few days.  I've never run an exhibit booth before; I'm a mathematician not a "vendor", and my product is free.  This should be very interesting.  I've been to numerous AMS meetings before, and every booth I remember is commercial... TI, book publishers, math games, Maple, Mathematica, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6365588202025292315-4940617804835123489?l=sagemath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sagemath.blogspot.com/feeds/4940617804835123489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6365588202025292315&amp;postID=4940617804835123489' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/4940617804835123489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6365588202025292315/posts/default/4940617804835123489'/><link rel='alternate' type='text/html' href='http://sagemath.blogspot.com/2008/01/ams-meeting-part-1.html' title='AMS Meeting Part 1'/><author><name>William Stein</name><uri>http://www.blogger.com/profile/09206974122359022797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05719145203722213497'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry></feed>